harperdb 4.6.25 → 4.6.26

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,5 +1,5 @@
1
- "use strict";var F3=Object.create;var zf=Object.defineProperty;var H3=Object.getOwnPropertyDescriptor;var k3=Object.getOwnPropertyNames;var q3=Object.getPrototypeOf,G3=Object.prototype.hasOwnProperty;var o=(e,t)=>zf(e,"name",{value:t,configurable:!0});var ce=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),we=(e,t)=>{for(var r in t)zf(e,r,{get:t[r],enumerable:!0})},RM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of k3(t))!G3.call(e,s)&&s!==r&&zf(e,s,{get:()=>t[s],enumerable:!(n=H3(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?F3(q3(e)):{},RM(t||!e||!e.__esModule?zf(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>RM(zf({},"__esModule",{value:!0}),e);var It=M((fwe,bM)=>{var{join:$3,dirname:yM}=require("node:path"),{existsSync:V3,readFileSync:K3}=require("node:fs");function Y3(){let t=__dirname,r,n=0;for(;!V3(r=$3(t,"package.json"));)if(t===(t=yM(t))||n++>10)throw new Error("Could not find package root");return r}o(Y3,"findPackageJson");var AM=Y3(),W3=JSON.parse(K3(AM,"utf8")),z3=yM(AM);bM.exports={packageJson:W3,PACKAGE_ROOT:z3}});var Y={};we(Y,{AUTH_AUDIT_STATUS:()=>ei,AUTH_AUDIT_TYPES:()=>ba,BOOT_PROPS_FILE_NAME:()=>gX,BOOT_PROP_PARAMS:()=>wM,CLUSTERING_FLAG:()=>oA,CLUSTERING_PROCESSES:()=>sX,CLUSTER_MESSAGE_TYPE_ENUM:()=>iA,CLUSTER_OPERATIONS:()=>vX,CONFIG_PARAMS:()=>U,CONFIG_PARAM_MAP:()=>OM,DATABASES_DIR_NAME:()=>Fc,DATABASES_PARAM_CONFIG:()=>FX,DEFAULT_DATABASE_NAME:()=>oX,ESCAPED_FORWARD_SLASH_REGEX:()=>pX,FORWARD_SLASH_REGEX:()=>mX,FUNC_VAL:()=>jX,GEO_CONVERSION_ENUM:()=>xX,HDB_COMPONENT_CONFIG_FILE:()=>J3,HDB_CONFIG_FILE:()=>j3,HDB_DEFAULT_CONFIG_FILE:()=>Q3,HDB_FILE_PERMISSIONS:()=>TX,HDB_HOME_DIR_NAME:()=>_X,HDB_PID_FILE:()=>iX,HDB_PROCESS_SERVICES:()=>nX,HDB_PROC_NAME:()=>X3,HDB_RESTART_SCRIPT:()=>Z3,HDB_ROOT_DIR_NAME:()=>eA,HDB_SETTINGS_NAMES:()=>sA,HDB_SUPPORT_ADDRESS:()=>NM,INFO_TABLE_HASH_ATTRIBUTE:()=>NX,INSERT_MAX_CHARACTER_SIZE:()=>bX,INSTALL_PROMPTS:()=>AX,ITC_EVENT_TYPES:()=>cA,JOB_STATUS_ENUM:()=>PX,JOB_TYPE_ENUM:()=>HX,JWT_ENUM:()=>Jf,LAUNCH_SERVICE_SCRIPTS:()=>cX,LEGACY_CONFIG_PARAMS:()=>BX,LEGACY_DATABASES_DIR_NAME:()=>qE,LICENSE_FILE_NAME:()=>CX,LICENSE_KEY_DIR_NAME:()=>nA,LICENSE_VALUES:()=>kX,LOG_LEVELS:()=>jf,LOG_NAMES:()=>aX,MEM_SETTING_KEY:()=>EX,METADATA_PROPERTY:()=>$X,NODE_ERROR_CODES:()=>GX,OPERATIONS_ENUM:()=>G,PERMS_CRUD_ENUM:()=>WX,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>YX,PRE_4_0_0_VERSION:()=>QX,PROCESS_DESCRIPTORS:()=>rX,PROCESS_NAME_ENV_PROP:()=>yX,RAM_ALLOCATION_ENUM:()=>qX,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>$E,REG_KEY_FILE_NAME:()=>OX,RESTART_TIMEOUT_MS:()=>SX,ROLE_TYPES_ENUM:()=>lX,S3_BUCKET_AUTH_KEYS:()=>DX,SEARCH_NOT_FOUND_MESSAGE:()=>dX,SEARCH_WILDCARDS:()=>zX,SERVICE_ACTIONS_ENUM:()=>UX,SUPPORT_HELP_MSG:()=>uX,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>wX,SYSTEM_SCHEMA_NAME:()=>Qf,SYSTEM_TABLE_NAMES:()=>Ru,THREAD_TYPES:()=>lA,TIME_STAMP_NAMES:()=>KX,TIME_STAMP_NAMES_ENUM:()=>VX,TRANSACTIONS_DIR_NAME:()=>RX,UNICODE_FORWARD_SLASH:()=>hX,UNICODE_PERIOD:()=>fX,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>IX,VALID_S3_FILE_TYPES:()=>LX,VALID_SQL_OPS_ENUM:()=>MX,VALUE_SEARCH_COMPARATORS:()=>GE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>aA});var HE,kE,j3,Q3,eA,J3,X3,Z3,IM,Zy,tA,rA,eX,tX,rX,nX,sX,iX,oX,aX,jf,cX,lX,NM,uX,dX,fX,mX,hX,pX,EX,Qf,_X,nA,gX,SX,TX,Fc,qE,RX,yX,wM,AX,bX,IX,Ru,NX,wX,OX,CX,PX,G,LX,DX,MX,vX,UX,xX,sA,BX,U,OM,FX,HX,iA,kX,qX,GX,$X,oA,CM,PM,VX,KX,YX,GE,aA,WX,zX,jX,$E,Jf,cA,lA,QX,ei,ba,H=ce(()=>{HE=require("node:path"),kE=w(It()),j3="harperdb-config.yaml",Q3="defaultConfig.yaml",eA="hdb",J3="config.yaml",X3="harperdb.js",Z3="restartHdb.js",IM="HarperDB",Zy="Custom Functions",tA="Clustering Hub",rA="Clustering Leaf",eX="Clustering Ingest Service",tX="Clustering Reply Service",rX={HDB:IM,CLUSTERING_HUB:tA,CLUSTERING_LEAF:rA,CLUSTERING_INGEST_SERVICE:eX,CLUSTERING_REPLY_SERVICE:tX,CUSTOM_FUNCTIONS:Zy,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},nX={harperdb:IM,"clustering hub":tA,"clustering leaf":rA,"custom functions":Zy,custom_functions:Zy,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},sX={CLUSTERING_HUB_PROC_DESCRIPTOR:tA,CLUSTERING_LEAF_PROC_DESCRIPTOR:rA},iX="hdb.pid",oX="data",aX={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},jf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},cX={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,HE.join)(kE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,HE.join)(kE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,HE.join)(kE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},lX={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},NM="support@harperdb.io",uX=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${NM}`,dX="None of the specified records were found.",fX="U+002E",mX=/\//g,hX="U+002F",pX=/U\+002F/g,EX="--max-old-space-size=",Qf="system",_X=".harperdb",nA="keys",gX="hdb_boot_properties.file",SX=6e4,TX=448,Fc="database",qE="schema",RX="transactions",yX="PROCESS_NAME",wM={SETTINGS_PATH_KEY:"settings_path"},AX={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"},bX=250,IX={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Ru={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"},NX="info_id",wX={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"},OX="060493.ks",CX=".license",PX={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",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status"},LX={CSV:".csv",JSON:".json"},DX={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},MX={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},vX={[G.INSERT]:G.INSERT,[G.UPDATE]:G.UPDATE,[G.UPSERT]:G.UPSERT,[G.DELETE]:G.DELETE},UX={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"},xX={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},sA={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"},BX={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",THREADS_HEAPSNAPSHOTNEARLIMIT:"threads_heapSnapshotNearLimit",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_REQUESTQUEUELIMIT:"http_requestQueueLimit",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_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_BLOBCLEANUPSPEED:"storage_blobCleanupSpeed",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"},OM={settings_path:wM.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];OM[t.toLowerCase()]=t}FX={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},HX={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"},iA={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"},kX={VERSION_DEFAULT:"2.2.0"},qX={DEVELOPMENT:8192,DEFAULT:512},GX={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},$X=Symbol("metadata"),oA="__clustering__",CM="__createdtime__",PM="__updatedtime__",VX={CREATED_TIME:CM,UPDATED_TIME:PM},KX=[CM,PM],YX=15984864e5,GE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},aA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},WX={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},zX=["*","%"],jX="func_val",$E={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Jf={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},cA={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"},lA={HTTP:"http"},QX="3.x.x",ei={SUCCESS:"success",FAILURE:"failure"},ba={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Hc=M((hwe,MM)=>{"use strict";var LM=require("minimist");MM.exports=JX;function JX(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=DM(process.env),n=DM(LM(process.argv))):(r=process.env,n=LM(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(JX,"assignCMDENVVariables");function DM(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(DM,"objKeysToLowerCase")});var ti=M($n=>{"use strict";global.Resource=$n.Resource=void 0;global.tables=$n.tables={};global.databases=$n.databases={};global.getUser=$n.getUser=void 0;global.authenticateUser=$n.authenticateUser=void 0;global.server=$n.server={};global.contentTypes=$n.contentTypes=null;global.threads=$n.threads=[];global.logger={};global.RequestTarget=$n.RequestTarget=void 0;global.operation=$n.operation=void 0;$n._assignPackageExport=(e,t)=>{global[e]=$n[e]=t}});var uA=M((_we,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}=It(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],p="ts-build";if(u){let R=!1,T=!1;if(T=s(n(m,p))){let y=new Set;e.sync(h.map(N=>`${N}/**/*.ts`),{cwd:m}).forEach(N=>{let O=0,F=0;try{y.add(N),O=i(n(m,N)).mtimeMs-5e3,F=i(n(m,p,N.replace(/.ts$/,".js"))).mtimeMs}catch{}O>F&&(R=!0)}),e.sync(h.map(N=>`${N}/**/*.js`),{cwd:n(m,p)}).forEach(N=>{if(!y.has(N.replace(/.js$/,".ts")))try{l(n(m,p,N))}catch{}})}else R=!0;if(R){console.log("Compiling TypeScript...");let y=d("npx",["tsc"],{cwd:m});if(y.stdout?.length&&console.log(y.stdout.toString()),y.stderr?.length&&console.log(y.stderr.toString()),T){let N=n(t(),"harperdb-tsc.pid"),O=!1;if(s(N))try{process.kill(+a(N,"utf8"),0),O=!0}catch{}if(!O){console.log("Starting background TypeScript compilation...");let F=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});F.on("error",Z=>{console.error("Error trying to compile TypeScript",Z)}),F.pid&&c(N,String(F.pid),"utf-8"),F.unref()}}}}let _=vM.constructor,g=_._findPath;_._findPath=function(R,T,y){if(R.startsWith(".")&&!y&&T.length===1&&T[0].startsWith(m)&&!T[0].includes("node_modules")){let N=r(m,T[0]),O;N.startsWith(p)?O=n(m,r(p,N)):O=n(m,p,N),(R.endsWith(".js")||R.endsWith(".ts"))&&(R=R.slice(0,-3));let F=n(O,R),Z=F+".js";if(s(Z))return Z;if(F.includes(".")&&s(F))return F}return g(R,T,y)}}});var Xf={};we(Xf,{server:()=>Le});var UM,Le,Dr=ce(()=>{UM=w(ti()),Le={};(0,UM._assignPackageExport)("server",Le)});var Kt=M((gwe,BM)=>{"use strict";var XX="__dbis__",ZX="__txns__",e6="__environment_name__",t6="__dbi_defintion__",r6={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"},n6=["__createdtime__","__updatedtime__"],s6="\uFFFF",xM={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},i6=Object.values(xM);BM.exports={AUDIT_STORE_NAME:ZX,INTERNAL_DBIS_NAME:XX,DBI_DEFINITION_NAME:t6,SEARCH_TYPES:r6,TIMESTAMP_NAMES:n6,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:e6,TRANSACTIONS_DBI_NAMES_ENUM:xM,TRANSACTIONS_DBIS:i6,OVERFLOW_MARKER:s6}});var dA=M((Swe,FM)=>{"use strict";var o6=require("util"),a6=require("path"),c6=require("child_process"),l6=o6.promisify(c6.execFile),u6=1e3*1e3*10;FM.exports={findPs:d6};async function d6(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await l6("ps",["wwxo",`pid,${r}`],{maxBuffer:u6});for(let s of n.trim().split(`
2
- `).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:a6.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(d6,"findPs")});var tn=M((Rwe,WM)=>{"use strict";var HM=(H(),v(Y)),kM=Kt(),qM={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},GM=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),$M={500:GM("There was an error processing your request."),400:"Invalid request"},f6=$M[qM.INTERNAL_SERVER_ERROR],m6={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")},h6={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},p6={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"},E6={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 ${kM.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${kM.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},_6={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${HM.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 ${HM.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"},VM={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"},g6={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."},S6={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")},T6={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"},R6={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},y6={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")},KM={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")},YM={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")},A6={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"},b6={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},I6={...VM,...p6,...m6,...g6,...S6,...T6,...R6,...y6,..._6,...KM,...YM,...A6,...b6,...h6};WM.exports={CHECK_LOGS_WRAPPER:GM,HDB_ERROR_MSGS:I6,DEFAULT_ERROR_MSGS:$M,DEFAULT_ERROR_RESP:f6,HTTP_STATUS_CODES:qM,LMDB_ERRORS_ENUM:E6,AUTHENTICATION_ERROR_MSGS:VM,VALIDATION_ERROR_MSGS:KM,ITC_ERRORS:YM}});var se=M(be=>{"use strict";var Ia=require("path"),XM=require("fs-extra"),yn=j(),zM=require("fs-extra"),VE=require("os"),N6=require("net"),w6=require("recursive-iterator"),yr=(H(),v(Y)),{PACKAGE_ROOT:O6}=It(),C6=dA(),jM=require("papaparse"),KE=require("moment"),{inspect:P6}=require("util"),QM=require("is-number"),L6=require("minimist"),D6=require("https"),M6=require("http"),v6=/^((\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)))$/,ZM=require("util").promisify(setTimeout),U6=100,x6=5,B6="",F6=4,JM={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};be.isEmpty=Vn;be.isEmptyOrZeroLength=Di;be.arrayHasEmptyValues=q6;be.arrayHasEmptyOrZeroLengthValues=G6;be.buildFolderPath=$6;be.isBoolean=ev;be.errorizeMessage=H6;be.stripFileExtension=K6;be.autoCast=Y6;be.autoCastJSON=tv;be.autoCastJSONDeep=mA;be.removeDir=W6;be.compareVersions=z6;be.isCompatibleDataVersion=j6;be.escapeRawValue=Q6;be.unescapeValue=J6;be.stringifyProps=X6;be.timeoutPromise=eZ;be.isClusterOperation=rZ;be.getClusterUser=sZ;be.checkGlobalSchemaTable=nZ;be.getHomeDir=nv;be.getPropsFilePath=Z6;be.promisifyPapaParse=iZ;be.removeBOM=sv;be.createEventPromise=oZ;be.checkProcessRunning=aZ;be.checkSchemaTableExist=cZ;be.checkSchemaExists=iv;be.checkTableExists=ov;be.getStartOfTomorrowInSeconds=lZ;be.getLimitKey=uZ;be.isObject=V6;be.isNotEmptyAndHasValue=k6;be.autoCasterIsNumberCheck=rv;be.backtickASTSchemaItems=dZ;be.isPortTaken=tZ;be.createForkArgs=fZ;be.autoCastBoolean=mZ;be.asyncSetTimeout=ZM;be.getTableHashAttribute=hZ;be.doesSchemaExist=pZ;be.doesTableExist=EZ;be.stringifyObj=_Z;be.ms_to_time=gZ;be.changeExtension=SZ;be.getEnvCliRootPath=hA;be.noBootFile=TZ;be.httpRequest=RZ;be.transformReq=yZ;be.convertToMS=AZ;be.PACKAGE_ROOT=O6;function H6(e){return e instanceof Error?e:new Error(e)}o(H6,"errorizeMessage");function Vn(e){return e==null}o(Vn,"isEmpty");function k6(e){return!Vn(e)&&(e||e===0||e===""||ev(e))}o(k6,"isNotEmptyAndHasValue");function Di(e){return Vn(e)||e.length===0||e.size===0}o(Di,"isEmptyOrZeroLength");function q6(e){if(Vn(e))return!0;for(let t=0;t<e.length;t++)if(Vn(e[t]))return!0;return!1}o(q6,"arrayHasEmptyValues");function G6(e){if(Di(e))return!0;for(let t=0;t<e.length;t++)if(Di(e[t]))return!0;return!1}o(G6,"arrayHasEmptyOrZeroLengthValues");function $6(...e){try{return e.join(Ia.sep)}catch{console.error(e)}}o($6,"buildFolderPath");function ev(e){return Vn(e)?!1:e===!0||e===!1}o(ev,"isBoolean");function V6(e){return Vn(e)?!1:typeof e=="object"}o(V6,"isObject");function K6(e){return Di(e)?B6:e.slice(0,-F6)}o(K6,"stripFileExtension");function Y6(e){return Vn(e)||e===""||typeof e!="string"?e:JM[e]!==void 0?JM[e]:rv(e)===!0?Number(e):v6.test(e)?new Date(e):e}o(Y6,"autoCast");function tv(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(tv,"autoCastJSON");function mA(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=mA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=mA(r);n!==r&&(e[t]=n)}return e}else return tv(e)}o(mA,"autoCastJSONDeep");function rv(e){if(e.startsWith("0.")&&QM(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&QM(e))}o(rv,"autoCasterIsNumberCheck");async function W6(e){if(Di(e))throw new Error(`Directory path: ${e} does not exist`);try{await zM.emptyDir(e),await zM.remove(e)}catch(t){throw yn.error(`Error removing files in ${e} -- ${t}`),t}}o(W6,"removeDir");function z6(e,t){if(Di(e)){yn.info("Invalid current version sent as parameter.");return}if(Di(t)){yn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(z6,"compareVersions");function j6(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(j6,"isCompatibleDataVersion");function Q6(e){if(Vn(e))return e;let t=String(e);return t==="."?yr.UNICODE_PERIOD:t===".."?yr.UNICODE_PERIOD+yr.UNICODE_PERIOD:t.replace(yr.FORWARD_SLASH_REGEX,yr.UNICODE_FORWARD_SLASH)}o(Q6,"escapeRawValue");function J6(e){if(Vn(e))return e;let t=String(e);return t===yr.UNICODE_PERIOD?".":t===yr.UNICODE_PERIOD+yr.UNICODE_PERIOD?"..":String(e).replace(yr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(J6,"unescapeValue");function X6(e,t){if(Vn(e))return yn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+VE.EOL}!Di(n)&&n[0]===";"?r+=" "+n+s+VE.EOL:Di(n)||(r+=n+"="+s+VE.EOL)}catch{yn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(X6,"stringifyProps");function nv(){let e;try{e=VE.homedir()}catch{e=process.env.HOME}return e}o(nv,"getHomeDir");function Z6(){let e=Ia.join(nv(),yr.HDB_HOME_DIR_NAME,yr.BOOT_PROPS_FILE_NAME);return XM.existsSync(e)||(e=Ia.join(__dirname,"../","hdb_boot_properties.file")),e}o(Z6,"getPropsFilePath");function eZ(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(eZ,"timeoutPromise");async function tZ(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=N6.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(tZ,"isPortTaken");function rZ(e){try{return yr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){yn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(rZ,"isClusterOperation");function nZ(e,t){let r=(Me(),v(_t)).getDatabases();if(!r[e])return YE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return YE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(nZ,"checkGlobalSchemaTable");function sZ(e,t){if(Vn(t)){yn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Vn(e)||Di(e)){yn.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){yn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){yn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(sZ,"getClusterUser");function iZ(){jM.parsePromise=function(e,t,r){return new Promise(function(n,s){jM.parse(e,{header:!0,transformHeader:sv,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(iZ,"promisifyPapaParse");function sv(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(sv,"removeBOM");function oZ(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;yn.info(`Got cluster status event response: ${P6(s)}`);try{i.cancel()}catch{yn.error("Error trying to cancel timeout.")}n(s)})})}o(oZ,"createEventPromise");async function aZ(e){let t=!0,r=0;do await ZM(U6*r++),(await C6.findPs(e)).length>0&&(t=!1);while(t&&r<x6);if(t)throw new Error(`process ${e} was not started`)}o(aZ,"checkProcessRunning");function cZ(e,t){let r=iv(e);if(r)return r;let n=ov(e,t);if(n)return n}o(cZ,"checkSchemaTableExist");function iv(e){let{getDatabases:t}=(Me(),v(_t));if(!t()[e])return YE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(iv,"checkSchemaExists");function ov(e,t){let{getDatabases:r}=(Me(),v(_t));if(!r()[e][t])return YE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(ov,"checkTableExists");function lZ(){let e=KE().utc().add(1,"d").startOf("d").unix(),t=KE().utc().unix();return e-t}o(lZ,"getStartOfTomorrowInSeconds");function uZ(){return KE().utc().format("DD-MM-YYYY")}o(uZ,"getLimitKey");function dZ(e){try{let t=new w6(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){yn.error("Got an error back ticking items."),yn.error(t)}}o(dZ,"backtickASTSchemaItems");function fZ(e){return[e]}o(fZ,"createForkArgs");function mZ(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(mZ,"autoCastBoolean");function hZ(e,t){let{getDatabases:r}=(Me(),v(_t)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(hZ,"getTableHashAttribute");function pZ(e){let{getDatabases:t}=(Me(),v(_t));return t()[e]!==void 0}o(pZ,"doesSchemaExist");function EZ(e,t){let{getDatabases:r}=(Me(),v(_t));return r()[e]?.[t]!==void 0}o(EZ,"doesTableExist");function _Z(e){try{return JSON.stringify(e)}catch{return e}}o(_Z,"stringifyObj");function gZ(e){let t=KE.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(gZ,"ms_to_time");function SZ(e,t){let r=Ia.basename(e,Ia.extname(e));return Ia.join(Ia.dirname(e),r+t)}o(SZ,"changeExtension");function hA(){if(process.env[yr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[yr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=L6(process.argv);if(e[yr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[yr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(hA,"getEnvCliRootPath");var fA;function TZ(){if(fA)return fA;let e=hA();if(hA()&&XM.pathExistsSync(Ia.join(e,yr.HDB_CONFIG_FILE)))return fA=!0,!0}o(TZ,"noBootFile");function RZ(e,t){let r;return e.protocol==="http:"?r=M6:r=D6,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(RZ,"httpRequest");function yZ(e){if(!e.schema&&!e.database){e.schema=yr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(yZ,"transformReq");function AZ(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(AZ,"convertToMS");var YE=tn()});var Nt=M((Iwe,mv)=>{"use strict";var nm=(H(),v(Y)),bZ=se(),An=oe(),sm=require("path"),IZ=require("minimist"),av=require("fs-extra"),cv=require("lodash");An.initSync();var{CONFIG_PARAMS:Na,DATABASES_PARAM_CONFIG:Zf,SYSTEM_SCHEMA_NAME:WE}=nm,em,tm,rm;function lv(){if(em!==void 0)return em;if(An.getHdbBasePath()!==void 0)return em=An.get(Na.STORAGE_PATH)||sm.join(An.getHdbBasePath(),nm.DATABASES_DIR_NAME),em}o(lv,"getBaseSchemaPath");function uv(){if(tm!==void 0)return tm;if(An.getHdbBasePath()!==void 0)return tm=fv(WE),tm}o(uv,"getSystemSchemaPath");function dv(){if(rm!==void 0)return rm;if(An.getHdbBasePath()!==void 0)return rm=An.get(nm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||sm.join(An.getHdbBasePath(),nm.TRANSACTIONS_DIR_NAME),rm}o(dv,"getTransactionAuditStoreBasePath");function NZ(e,t){let r=An.get(Na.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||sm.join(dv(),e.toString())}o(NZ,"getTransactionAuditStorePath");function fv(e,t){e=e.toString(),t=t&&t.toString();let r=An.get(nm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||sm.join(lv(),e)}o(fv,"getSchemaPath");function wZ(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,IZ(process.argv));let n=r[Na.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!bZ.isObject(n))throw a;i=n}for(let a of i){let c=a[WE];if(!c)continue;let l=An.get(Na.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Zf.PATH];if(u)return cv.set(l,[WE,Zf.TABLES,t,Zf.PATH],u),An.setProperty(Na.DATABASES,l),u;let d=c?.[Zf.PATH];if(d)return cv.set(l,[WE,Zf.PATH],d),An.setProperty(Na.DATABASES,l),d}}let s=r[Na.STORAGE_PATH.toUpperCase()];if(s){if(!av.pathExistsSync(s))throw new Error(s+" does not exist");let i=sm.join(s,e);return av.mkdirsSync(i),An.setProperty(Na.STORAGE_PATH,s),i}return uv()}o(wZ,"initSystemSchemaPaths");function OZ(){em=void 0,tm=void 0,rm=void 0}o(OZ,"resetPaths");mv.exports={getBaseSchemaPath:lv,getSystemSchemaPath:uv,getTransactionAuditStorePath:NZ,getTransactionAuditStoreBasePath:dv,getSchemaPath:fv,initSystemSchemaPaths:wZ,resetPaths:OZ}});var bn=M((Cwe,gv)=>{"use strict";var CZ=tn().LMDB_ERRORS_ENUM,wwe=require("lmdb"),PZ=Kt(),Owe=require("buffer").Buffer,{OVERFLOW_MARKER:hv,MAX_SEARCH_KEY_LENGTH:zE}=PZ,pv=["number","string","symbol","boolean","bigint"];function LZ(e){if(e=e?.primaryStore||e,!e)throw new Error(CZ.ENV_REQUIRED)}o(LZ,"validateEnv");function DZ(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(DZ,"stringifyData");function MZ(e){return e instanceof Date?e.valueOf():e}o(MZ,"convertKeyValueToWrite");function vZ(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(pv.includes(typeof e))return e.length>zE?[e.slice(0,zE)+hv]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(pv.includes(typeof i))i.length>zE?r.push(i.slice(0,zE)+hv):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(vZ,"getIndexedValues");var jE=0,Ev=0;function _v(){Ev=Date.now()-performance.now()}o(_v,"adjustStartTime");_v();var UZ=6e4;setInterval(_v,UZ).unref();function xZ(){let e=performance.now()+Ev;return e>jE?(jE=e,e):(jE+=488e-6,jE)}o(xZ,"getNextMonotonicTime");gv.exports={validateEnv:LZ,stringifyData:DZ,convertKeyValueToWrite:MZ,getNextMonotonicTime:xZ,getIndexedValues:vZ}});var im=M((Lwe,Sv)=>{"use strict";var BZ=(H(),v(Y)).OPERATIONS_ENUM,pA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=BZ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Sv.exports=pA});var ge=M((Mwe,yv)=>{"use strict";var yu=tn(),FZ=j(),HZ=(H(),v(Y)),QE=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Tv),this.statusCode=n||yu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(yu.DEFAULT_ERROR_MSGS[n]?yu.DEFAULT_ERROR_MSGS[n]:yu.DEFAULT_ERROR_MSGS[yu.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&&FZ[s](i)}},EA=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}},_A=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Tv(e,t,r,n=HZ.LOG_LEVELS.ERROR,s=null,i=!1){if(Rv(e))return e;let a=new QE(e,t,r,n,s);return i&&delete a.stack,a}o(Tv,"handleHDBError");function Au(e){this.message=e}o(Au,"Violation");Au.prototype=Object.create(Error.prototype);Au.prototype.constructor=Au;Au.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var gA=class extends Au{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function Rv(e){return e.__proto__.constructor.name===QE.name}o(Rv,"isHDBError");yv.exports={isHDBError:Rv,handleHDBError:Tv,ClientError:EA,ServerError:_A,AccessViolation:gA,Violation:Au,hdbErrors:yu}});var om=M((xwe,Nv)=>{"use strict";var Uwe=im(),JE=(H(),v(Y)),SA=se(),Av=j(),kZ=require("uuid"),{handleHDBError:XE,hdbErrors:qZ}=ge(),{HDB_ERROR_MSGS:ZE,HTTP_STATUS_CODES:e_}=qZ;Nv.exports=bv;function bv(e,t,r){for(let s=0;s<t.length;s++)Iv(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];GZ(i,r,e.operation)}}o(bv,"processRows");bv.validateAttribute=Iv;function Iv(e){if(Buffer.byteLength(String(e))>JE.INSERT_MAX_CHARACTER_SIZE)throw XE(new Error,ZE.ATTR_NAME_LENGTH_ERR(e),e_.BAD_REQUEST,void 0,void 0,!0);if(SA.isEmptyOrZeroLength(e)||SA.isEmpty(e.trim()))throw XE(new Error,ZE.ATTR_NAME_NULLISH_ERR,e_.BAD_REQUEST,void 0,void 0,!0)}o(Iv,"validateAttribute");function GZ(e,t,r){if(!e.hasOwnProperty(t)||SA.isEmptyOrZeroLength(e[t])){if(r===JE.OPERATIONS_ENUM.INSERT||r===JE.OPERATIONS_ENUM.UPSERT){e[t]=kZ.v4();return}throw Av.error("Update transaction aborted due to record with no hash value:",e),XE(new Error,ZE.RECORD_MISSING_HASH_ERR,e_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>JE.INSERT_MAX_CHARACTER_SIZE)throw Av.error(e),XE(new Error,ZE.HASH_VAL_LENGTH_ERR,e_.BAD_REQUEST,void 0,void 0,!0)}o(GZ,"validateHash")});function Mv(e){RA=e}function YZ(){KZ=setInterval(function(){for(let e of TA)if(e.stale){let t=e.getContext()?.url;Pv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},VZ).unref()}var yA,Cv,Pv,Lv,Dv,wv,TA,$Z,_o,am,Ov,RA,go,t_,VZ,KZ,cm=ce(()=>{yA=w(bn()),Cv=w(ge()),Pv=w(j()),Lv=w(oe());H();Dv=w(se()),wv=100,TA=new Set,$Z=(0,Dv.convertToMS)(Lv.get(U.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,_o={CLOSED:0,OPEN:1,LINGERING:2};o(Mv,"replicationConfirmation");go=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=_o.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===_o.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),TA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(TA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(am&&!this.overloadChecked&&performance.now()-Ov>$Z)throw new Cv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===_o.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===_o.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,yA.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 R=g[h===0?"before":"beforeIntermediate"];if(R){let T=R();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?_o.LINGERING:_o.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)<wv>>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 am||(am=s,Ov=performance.now(),am.then(()=>{am=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];RA&&h&&i.push(RA(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)+wv/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=_o.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},t_=class extends go{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,yA.getNextMonotonicTime)())}getReadTxn(){}},VZ=3e4;o(YZ,"startMonitoringTxns");YZ()});var vv,Kn,AA,bu=ce(()=>{vv=require("events"),Kn=class extends vv.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new AA;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)}},AA=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 Ft(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===_o.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 go;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 Uv,kc=ce(()=>{Uv=w(ti());cm();o(Ft,"transaction");(0,Uv._assignPackageExport)("transaction",Ft);Ft.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ft.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 IA={};we(IA,{add:()=>r_,applyReverse:()=>xv,getRecordAtTime:()=>bA,rebuildUpdateBefore:()=>n_});function r_(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 n_(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,r_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function xv(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=WZ[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Bv}}function bA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=wt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":xv(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===Bv&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=wt(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 WZ,Bv,s_=ce(()=>{Mi();o(r_,"add");r_.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)};WZ={add:r_};o(n_,"rebuildUpdateBefore");o(xv,"applyReverse");Bv={};o(bA,"getRecordAtTime")});var ri=M(o_=>{var i_=j();for(let e of["trace","debug","info","warn","error","fatal","notify"])i_.logsAtLevel(e)&&(o_[e]=i_[e]);o_.loggerWithTag=e=>i_.loggerWithTag(e,!0);o_.setLogLevel=i_.setLogLevel});var Vv={};we(Vv,{parse:()=>OA,streamAsJSON:()=>um,stringify:()=>qc});function um(e){return new NA({value:e})}function Fv(e){return console.error(e),JSON.stringify(lm(e))}function Hv(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function qc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Gv)return $v(e);if(t.resolution)return t.resolution.then(()=>qc(e));throw t}}function $v(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+=$v(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+qc(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()),QZ.test(e)?zZ.parse(e):JSON.parse(e)):null}var kv,wA,qv,zZ,jZ,Gv,lm,NA,QZ,CA=ce(()=>{kv=require("stream"),wA=w(j()),qv=w(require("json-bigint-fixes")),zZ=(0,qv.default)({useNativeBigInt:!0}),jZ=1e4,Gv={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw Gv};({errorToString:lm}=wA);o(um,"streamAsJSON");NA=class extends kv.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=>(wA.warn("Error serializing in stream",c),a={done:!1,value:{error:lm(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:lm(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),Fv)}catch(s){yield Fv(s)}else yield qc(t)}else yield qc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Hv(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(lm(t)),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>jZ?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 Hv(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(lm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(Fv,"handleError");o(Hv,"when");o(qc,"stringify");o($v,"jsStringify");QZ=/[[,:]\s*-?\d{16,}/;o(OA,"parse")});var eU={};we(eU,{asyncSerialization:()=>vA,contentTypes:()=>MA,findBestSerializer:()=>c_,getDeserializer:()=>Ro,hasAsyncSerialization:()=>UA,registerContentHandlers:()=>mm,serialize:()=>hm,serializeMessage:()=>wa,toCsvStream:()=>a_});function JZ(e){try{return e?.[0]===123?DA(e):e}catch{return e}}function mm(e){e.register(XZ,{serializers:[{regex:/^application\/json$/,serializer:um},{regex:/^application\/cbor$/,serializer:o(function(t){return new Gc.EncoderStream(fm).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?$c.Readable.from((0,vi.encodeIter)(t,fm)):(0,vi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),a_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,vi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Gc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function c_(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=rn.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 Wv.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(rn.keys()).join(", "),406);n=rn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function hm(e,t,r){let n=Yv&&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 Rs)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=c_(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,To.createBrotliCompress)({params:{[To.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?To.constants.BROTLI_MODE_TEXT:To.constants.BROTLI_MODE_GENERIC,[To.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>Yv?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,To.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function wa(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;So=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=c_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=dm(e);return So?.length>0?(So.length===1?So[0]:Promise.all(So)).then(()=>wa(e,t,!0)):n}finally{So=void 0}}function vA(e){if(So)So.push(e);else throw new Error("Unable to serialize asynchronously")}function UA(){return!!So}function ZZ(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function t8(e){return e8.includes(e)}function r8(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 Ro(e="",t=!1){let r=r8(e),n=r.type&&rn.get(r.type)?.deserialize||n8(r);return t?s=>ZZ(s).then(n):n}function n8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!t8(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 DA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function s8(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 a_(e,t){let r=$c.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 Qv.Transform(n,s);return r.pipe(i)}var vi,Gc,To,Wv,$c,zv,PA,jv,LA,Qv,Jv,Xv,dm,DA,fm,rn,MA,Kv,Zv,XZ,Yv,So,e8,yo=ce(()=>{CA();vi=require("msgpackr"),Gc=require("cbor-x"),To=require("zlib"),Wv=w(ge()),$c=w(require("stream"));Dr();zv=w(ti()),PA=w(oe());H();jv=w(require("yaml")),LA=w(ri());Yn();Qv=require("json2csv"),Jv=w(require("fastify-plugin")),Xv=PA.default.get(U.SERIALIZATION_BIGINT)!==!1,dm=Xv?qc:JSON.stringify,DA=Xv?OA:JSON.parse,fm={useRecords:!1,useToJSON:!0},rn=new Map,MA=rn;Le.contentTypes=MA;(0,zv._assignPackageExport)("contentTypes",MA);rn.set("application/json",{serializeStream:um,serialize:dm,deserialize(e){return DA(e)},q:.8});Kv=new Gc.Encoder(fm);rn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Gc.EncoderStream(fm).end(e)},serialize:Kv.encode,deserialize:Kv.decode,q:1});rn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?$c.Readable.from((0,vi.encodeIter)(e,fm)):(0,vi.pack)(e)},serialize:vi.pack,deserialize:vi.unpack,q:.9});rn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),a_(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]),a_(e,e?.getColumns?.())},q:.1});rn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return $c.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});rn.set("text/yaml",{serialize(e){return jv.stringify(e,{aliasDuplicateObjects:!1})},q:.7});rn.set("text/event-stream",{serializeStream:o(function(e){return $c.Readable.from(s8(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+`
1
+ "use strict";var q3=Object.create;var zf=Object.defineProperty;var G3=Object.getOwnPropertyDescriptor;var $3=Object.getOwnPropertyNames;var V3=Object.getPrototypeOf,K3=Object.prototype.hasOwnProperty;var o=(e,t)=>zf(e,"name",{value:t,configurable:!0});var le=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Oe=(e,t)=>{for(var r in t)zf(e,r,{get:t[r],enumerable:!0})},IM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of $3(t))!K3.call(e,s)&&s!==r&&zf(e,s,{get:()=>t[s],enumerable:!(n=G3(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?q3(V3(e)):{},IM(t||!e||!e.__esModule?zf(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>IM(zf({},"__esModule",{value:!0}),e);var It=M((pwe,OM)=>{var{join:Y3,dirname:NM}=require("node:path"),{existsSync:W3,readFileSync:z3}=require("node:fs");function j3(){let t=__dirname,r,n=0;for(;!W3(r=Y3(t,"package.json"));)if(t===(t=NM(t))||n++>10)throw new Error("Could not find package root");return r}o(j3,"findPackageJson");var wM=j3(),Q3=JSON.parse(z3(wM,"utf8")),J3=NM(wM);OM.exports={packageJson:Q3,PACKAGE_ROOT:J3}});var Y={};Oe(Y,{AUTH_AUDIT_STATUS:()=>ei,AUTH_AUDIT_TYPES:()=>ba,BOOT_PROPS_FILE_NAME:()=>RX,BOOT_PROP_PARAMS:()=>LM,CLUSTERING_FLAG:()=>lA,CLUSTERING_PROCESSES:()=>aX,CLUSTER_MESSAGE_TYPE_ENUM:()=>cA,CLUSTER_OPERATIONS:()=>BX,CONFIG_PARAMS:()=>U,CONFIG_PARAM_MAP:()=>DM,DATABASES_DIR_NAME:()=>Fc,DATABASES_PARAM_CONFIG:()=>qX,DEFAULT_DATABASE_NAME:()=>lX,ESCAPED_FORWARD_SLASH_REGEX:()=>gX,FORWARD_SLASH_REGEX:()=>EX,FUNC_VAL:()=>XX,GEO_CONVERSION_ENUM:()=>HX,HDB_COMPONENT_CONFIG_FILE:()=>eX,HDB_CONFIG_FILE:()=>X3,HDB_DEFAULT_CONFIG_FILE:()=>Z3,HDB_FILE_PERMISSIONS:()=>AX,HDB_HOME_DIR_NAME:()=>TX,HDB_PID_FILE:()=>cX,HDB_PROCESS_SERVICES:()=>oX,HDB_PROC_NAME:()=>tX,HDB_RESTART_SCRIPT:()=>rX,HDB_ROOT_DIR_NAME:()=>nA,HDB_SETTINGS_NAMES:()=>aA,HDB_SUPPORT_ADDRESS:()=>PM,INFO_TABLE_HASH_ATTRIBUTE:()=>CX,INSERT_MAX_CHARACTER_SIZE:()=>wX,INSTALL_PROMPTS:()=>NX,ITC_EVENT_TYPES:()=>dA,JOB_STATUS_ENUM:()=>MX,JOB_TYPE_ENUM:()=>GX,JWT_ENUM:()=>Jf,LAUNCH_SERVICE_SCRIPTS:()=>dX,LEGACY_CONFIG_PARAMS:()=>kX,LEGACY_DATABASES_DIR_NAME:()=>qE,LICENSE_FILE_NAME:()=>DX,LICENSE_KEY_DIR_NAME:()=>oA,LICENSE_VALUES:()=>$X,LOG_LEVELS:()=>jf,LOG_NAMES:()=>uX,MEM_SETTING_KEY:()=>SX,METADATA_PROPERTY:()=>YX,NODE_ERROR_CODES:()=>KX,OPERATIONS_ENUM:()=>G,PERMS_CRUD_ENUM:()=>QX,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>jX,PRE_4_0_0_VERSION:()=>ZX,PROCESS_DESCRIPTORS:()=>iX,PROCESS_NAME_ENV_PROP:()=>IX,RAM_ALLOCATION_ENUM:()=>VX,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>$E,REG_KEY_FILE_NAME:()=>LX,RESTART_TIMEOUT_MS:()=>yX,ROLE_TYPES_ENUM:()=>fX,S3_BUCKET_AUTH_KEYS:()=>UX,SEARCH_NOT_FOUND_MESSAGE:()=>hX,SEARCH_WILDCARDS:()=>JX,SERVICE_ACTIONS_ENUM:()=>FX,SUPPORT_HELP_MSG:()=>mX,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>PX,SYSTEM_SCHEMA_NAME:()=>Qf,SYSTEM_TABLE_NAMES:()=>Ru,THREAD_TYPES:()=>fA,TIME_STAMP_NAMES:()=>zX,TIME_STAMP_NAMES_ENUM:()=>WX,TRANSACTIONS_DIR_NAME:()=>bX,UNICODE_FORWARD_SLASH:()=>_X,UNICODE_PERIOD:()=>pX,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>OX,VALID_S3_FILE_TYPES:()=>vX,VALID_SQL_OPS_ENUM:()=>xX,VALUE_SEARCH_COMPARATORS:()=>GE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>uA});var HE,kE,X3,Z3,nA,eX,tX,rX,CM,rA,sA,iA,nX,sX,iX,oX,aX,cX,lX,uX,jf,dX,fX,PM,mX,hX,pX,EX,_X,gX,SX,Qf,TX,oA,RX,yX,AX,Fc,qE,bX,IX,LM,NX,wX,OX,Ru,CX,PX,LX,DX,MX,G,vX,UX,xX,BX,FX,HX,aA,kX,U,DM,qX,GX,cA,$X,VX,KX,YX,lA,MM,vM,WX,zX,jX,GE,uA,QX,JX,XX,$E,Jf,dA,fA,ZX,ei,ba,H=le(()=>{HE=require("node:path"),kE=w(It()),X3="harperdb-config.yaml",Z3="defaultConfig.yaml",nA="hdb",eX="config.yaml",tX="harperdb.js",rX="restartHdb.js",CM="HarperDB",rA="Custom Functions",sA="Clustering Hub",iA="Clustering Leaf",nX="Clustering Ingest Service",sX="Clustering Reply Service",iX={HDB:CM,CLUSTERING_HUB:sA,CLUSTERING_LEAF:iA,CLUSTERING_INGEST_SERVICE:nX,CLUSTERING_REPLY_SERVICE:sX,CUSTOM_FUNCTIONS:rA,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"},oX={harperdb:CM,"clustering hub":sA,"clustering leaf":iA,"custom functions":rA,custom_functions:rA,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},aX={CLUSTERING_HUB_PROC_DESCRIPTOR:sA,CLUSTERING_LEAF_PROC_DESCRIPTOR:iA},cX="hdb.pid",lX="data",uX={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},jf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},dX={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,HE.join)(kE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,HE.join)(kE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,HE.join)(kE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},fX={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},PM="support@harperdb.io",mX=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${PM}`,hX="None of the specified records were found.",pX="U+002E",EX=/\//g,_X="U+002F",gX=/U\+002F/g,SX="--max-old-space-size=",Qf="system",TX=".harperdb",oA="keys",RX="hdb_boot_properties.file",yX=6e4,AX=448,Fc="database",qE="schema",bX="transactions",IX="PROCESS_NAME",LM={SETTINGS_PATH_KEY:"settings_path"},NX={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",DEFAULTS_MODE:"DEFAULTS_MODE",REPLICATION_HOSTNAME:"REPLICATION_HOSTNAME",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},wX=250,OX={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Ru={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"},CX="info_id",PX={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"},LX="060493.ks",DX=".license",MX={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",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status"},vX={CSV:".csv",JSON:".json"},UX={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},xX={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},BX={[G.INSERT]:G.INSERT,[G.UPDATE]:G.UPDATE,[G.UPSERT]:G.UPSERT,[G.DELETE]:G.DELETE},FX={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"},HX={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},aA={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"},kX={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",THREADS_HEAPSNAPSHOTNEARLIMIT:"threads_heapSnapshotNearLimit",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_REQUESTQUEUELIMIT:"http_requestQueueLimit",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_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_BLOBCLEANUPSPEED:"storage_blobCleanupSpeed",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"},DM={settings_path:LM.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];DM[t.toLowerCase()]=t}qX={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},GX={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"},cA={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"},$X={VERSION_DEFAULT:"2.2.0"},VX={DEVELOPMENT:8192,DEFAULT:512},KX={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},YX=Symbol("metadata"),lA="__clustering__",MM="__createdtime__",vM="__updatedtime__",WX={CREATED_TIME:MM,UPDATED_TIME:vM},zX=[MM,vM],jX=15984864e5,GE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},uA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},QX={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},JX=["*","%"],XX="func_val",$E={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Jf={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},dA={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"},fA={HTTP:"http"},ZX="3.x.x",ei={SUCCESS:"success",FAILURE:"failure"},ba={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Hc=M((_we,BM)=>{"use strict";var UM=require("minimist");BM.exports=e6;function e6(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=xM(process.env),n=xM(UM(process.argv))):(r=process.env,n=UM(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(e6,"assignCMDENVVariables");function xM(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(xM,"objKeysToLowerCase")});var ti=M($n=>{"use strict";global.Resource=$n.Resource=void 0;global.tables=$n.tables={};global.databases=$n.databases={};global.getUser=$n.getUser=void 0;global.authenticateUser=$n.authenticateUser=void 0;global.server=$n.server={};global.contentTypes=$n.contentTypes=null;global.threads=$n.threads=[];global.logger={};global.RequestTarget=$n.RequestTarget=void 0;global.operation=$n.operation=void 0;$n._assignPackageExport=(e,t)=>{global[e]=$n[e]=t}});var mA=M((Twe,FM)=>{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}=It(),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(N=>`${N}/**/*.ts`),{cwd:m}).forEach(N=>{let C=0,q=0;try{R.add(N),C=i(n(m,N)).mtimeMs-5e3,q=i(n(m,p,N.replace(/.ts$/,".js"))).mtimeMs}catch{}C>q&&(y=!0)}),e.sync(h.map(N=>`${N}/**/*.js`),{cwd:n(m,p)}).forEach(N=>{if(!R.has(N.replace(/.js$/,".ts")))try{l(n(m,p,N))}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 N=n(t(),"harperdb-tsc.pid"),C=!1;if(s(N))try{process.kill(+a(N,"utf8"),0),C=!0}catch{}if(!C){console.log("Starting background TypeScript compilation...");let q=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});q.on("error",j=>{console.error("Error trying to compile TypeScript",j)}),q.pid&&c(N,String(q.pid),"utf-8"),q.unref()}}}}let _=FM.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 N=r(m,T[0]),C;N.startsWith(p)?C=n(m,r(p,N)):C=n(m,p,N),(y.endsWith(".js")||y.endsWith(".ts"))&&(y=y.slice(0,-3));let q=n(C,y),j=q+".js";if(s(j))return j;if(q.includes(".")&&s(q))return q}return g(y,T,R)}}});var Xf={};Oe(Xf,{server:()=>De});var HM,De,Dr=le(()=>{HM=w(ti()),De={};(0,HM._assignPackageExport)("server",De)});var Kt=M((Rwe,qM)=>{"use strict";var t6="__dbis__",r6="__txns__",n6="__environment_name__",s6="__dbi_defintion__",i6={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"},o6=["__createdtime__","__updatedtime__"],a6="\uFFFF",kM={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},c6=Object.values(kM);qM.exports={AUDIT_STORE_NAME:r6,INTERNAL_DBIS_NAME:t6,DBI_DEFINITION_NAME:s6,SEARCH_TYPES:i6,TIMESTAMP_NAMES:o6,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:n6,TRANSACTIONS_DBI_NAMES_ENUM:kM,TRANSACTIONS_DBIS:c6,OVERFLOW_MARKER:a6}});var hA=M((ywe,GM)=>{"use strict";var l6=require("util"),u6=require("path"),d6=require("child_process"),f6=l6.promisify(d6.execFile),m6=1e3*1e3*10;GM.exports={findPs:h6};async function h6(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await f6("ps",["wwxo",`pid,${r}`],{maxBuffer:m6});for(let s of n.trim().split(`
2
+ `).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:u6.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(h6,"findPs")});var rn=M((bwe,JM)=>{"use strict";var $M=(H(),v(Y)),VM=Kt(),KM={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},YM=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),WM={500:YM("There was an error processing your request."),400:"Invalid request"},p6=WM[KM.INTERNAL_SERVER_ERROR],E6={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")},_6={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},g6={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"},S6={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 ${VM.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${VM.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"},T6={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${$M.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 ${$M.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"},zM={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"},R6={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."},y6={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")},A6={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"},b6={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},I6={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")},jM={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")},QM={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")},N6={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"},w6={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},O6={...zM,...g6,...E6,...R6,...y6,...A6,...b6,...I6,...T6,...jM,...QM,...N6,...w6,..._6};JM.exports={CHECK_LOGS_WRAPPER:YM,HDB_ERROR_MSGS:O6,DEFAULT_ERROR_MSGS:WM,DEFAULT_ERROR_RESP:p6,HTTP_STATUS_CODES:KM,LMDB_ERRORS_ENUM:S6,AUTHENTICATION_ERROR_MSGS:zM,VALIDATION_ERROR_MSGS:jM,ITC_ERRORS:QM}});var ie=M(Ie=>{"use strict";var Ia=require("path"),rv=require("fs-extra"),An=z(),XM=require("fs-extra"),VE=require("os"),C6=require("net"),P6=require("recursive-iterator"),yr=(H(),v(Y)),{PACKAGE_ROOT:L6}=It(),D6=hA(),ZM=require("papaparse"),KE=require("moment"),{inspect:M6}=require("util"),ev=require("is-number"),v6=require("minimist"),U6=require("https"),x6=require("http"),B6=/^((\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)))$/,nv=require("util").promisify(setTimeout),F6=100,H6=5,k6="",q6=4,tv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ie.isEmpty=Vn;Ie.isEmptyOrZeroLength=Di;Ie.arrayHasEmptyValues=V6;Ie.arrayHasEmptyOrZeroLengthValues=K6;Ie.buildFolderPath=Y6;Ie.isBoolean=sv;Ie.errorizeMessage=G6;Ie.stripFileExtension=z6;Ie.autoCast=j6;Ie.autoCastJSON=iv;Ie.autoCastJSONDeep=EA;Ie.removeDir=Q6;Ie.compareVersions=J6;Ie.isCompatibleDataVersion=X6;Ie.escapeRawValue=Z6;Ie.unescapeValue=eZ;Ie.stringifyProps=tZ;Ie.timeoutPromise=nZ;Ie.isClusterOperation=iZ;Ie.getClusterUser=aZ;Ie.checkGlobalSchemaTable=oZ;Ie.getHomeDir=av;Ie.getPropsFilePath=rZ;Ie.promisifyPapaParse=cZ;Ie.removeBOM=cv;Ie.createEventPromise=lZ;Ie.checkProcessRunning=uZ;Ie.checkSchemaTableExist=dZ;Ie.checkSchemaExists=lv;Ie.checkTableExists=uv;Ie.getStartOfTomorrowInSeconds=fZ;Ie.getLimitKey=mZ;Ie.isObject=W6;Ie.isNotEmptyAndHasValue=$6;Ie.autoCasterIsNumberCheck=ov;Ie.backtickASTSchemaItems=hZ;Ie.isPortTaken=sZ;Ie.createForkArgs=pZ;Ie.autoCastBoolean=EZ;Ie.asyncSetTimeout=nv;Ie.getTableHashAttribute=_Z;Ie.doesSchemaExist=gZ;Ie.doesTableExist=SZ;Ie.stringifyObj=TZ;Ie.ms_to_time=RZ;Ie.changeExtension=yZ;Ie.getEnvCliRootPath=_A;Ie.noBootFile=AZ;Ie.httpRequest=bZ;Ie.transformReq=IZ;Ie.convertToMS=NZ;Ie.PACKAGE_ROOT=L6;function G6(e){return e instanceof Error?e:new Error(e)}o(G6,"errorizeMessage");function Vn(e){return e==null}o(Vn,"isEmpty");function $6(e){return!Vn(e)&&(e||e===0||e===""||sv(e))}o($6,"isNotEmptyAndHasValue");function Di(e){return Vn(e)||e.length===0||e.size===0}o(Di,"isEmptyOrZeroLength");function V6(e){if(Vn(e))return!0;for(let t=0;t<e.length;t++)if(Vn(e[t]))return!0;return!1}o(V6,"arrayHasEmptyValues");function K6(e){if(Di(e))return!0;for(let t=0;t<e.length;t++)if(Di(e[t]))return!0;return!1}o(K6,"arrayHasEmptyOrZeroLengthValues");function Y6(...e){try{return e.join(Ia.sep)}catch{console.error(e)}}o(Y6,"buildFolderPath");function sv(e){return Vn(e)?!1:e===!0||e===!1}o(sv,"isBoolean");function W6(e){return Vn(e)?!1:typeof e=="object"}o(W6,"isObject");function z6(e){return Di(e)?k6:e.slice(0,-q6)}o(z6,"stripFileExtension");function j6(e){return Vn(e)||e===""||typeof e!="string"?e:tv[e]!==void 0?tv[e]:ov(e)===!0?Number(e):B6.test(e)?new Date(e):e}o(j6,"autoCast");function iv(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(iv,"autoCastJSON");function EA(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=EA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=EA(r);n!==r&&(e[t]=n)}return e}else return iv(e)}o(EA,"autoCastJSONDeep");function ov(e){if(e.startsWith("0.")&&ev(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&ev(e))}o(ov,"autoCasterIsNumberCheck");async function Q6(e){if(Di(e))throw new Error(`Directory path: ${e} does not exist`);try{await XM.emptyDir(e),await XM.remove(e)}catch(t){throw An.error(`Error removing files in ${e} -- ${t}`),t}}o(Q6,"removeDir");function J6(e,t){if(Di(e)){An.info("Invalid current version sent as parameter.");return}if(Di(t)){An.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(J6,"compareVersions");function X6(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(X6,"isCompatibleDataVersion");function Z6(e){if(Vn(e))return e;let t=String(e);return t==="."?yr.UNICODE_PERIOD:t===".."?yr.UNICODE_PERIOD+yr.UNICODE_PERIOD:t.replace(yr.FORWARD_SLASH_REGEX,yr.UNICODE_FORWARD_SLASH)}o(Z6,"escapeRawValue");function eZ(e){if(Vn(e))return e;let t=String(e);return t===yr.UNICODE_PERIOD?".":t===yr.UNICODE_PERIOD+yr.UNICODE_PERIOD?"..":String(e).replace(yr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(eZ,"unescapeValue");function tZ(e,t){if(Vn(e))return An.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+VE.EOL}!Di(n)&&n[0]===";"?r+=" "+n+s+VE.EOL:Di(n)||(r+=n+"="+s+VE.EOL)}catch{An.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(tZ,"stringifyProps");function av(){let e;try{e=VE.homedir()}catch{e=process.env.HOME}return e}o(av,"getHomeDir");function rZ(){let e=Ia.join(av(),yr.HDB_HOME_DIR_NAME,yr.BOOT_PROPS_FILE_NAME);return rv.existsSync(e)||(e=Ia.join(__dirname,"../","hdb_boot_properties.file")),e}o(rZ,"getPropsFilePath");function nZ(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(nZ,"timeoutPromise");async function sZ(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=C6.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(sZ,"isPortTaken");function iZ(e){try{return yr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){An.error(`Error checking operation against cluster ops ${t}`)}return!1}o(iZ,"isClusterOperation");function oZ(e,t){let r=(Me(),v(gt)).getDatabases();if(!r[e])return YE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return YE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(oZ,"checkGlobalSchemaTable");function aZ(e,t){if(Vn(t)){An.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Vn(e)||Di(e)){An.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){An.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){An.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(aZ,"getClusterUser");function cZ(){ZM.parsePromise=function(e,t,r){return new Promise(function(n,s){ZM.parse(e,{header:!0,transformHeader:cv,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(cZ,"promisifyPapaParse");function cv(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(cv,"removeBOM");function lZ(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;An.info(`Got cluster status event response: ${M6(s)}`);try{i.cancel()}catch{An.error("Error trying to cancel timeout.")}n(s)})})}o(lZ,"createEventPromise");async function uZ(e){let t=!0,r=0;do await nv(F6*r++),(await D6.findPs(e)).length>0&&(t=!1);while(t&&r<H6);if(t)throw new Error(`process ${e} was not started`)}o(uZ,"checkProcessRunning");function dZ(e,t){let r=lv(e);if(r)return r;let n=uv(e,t);if(n)return n}o(dZ,"checkSchemaTableExist");function lv(e){let{getDatabases:t}=(Me(),v(gt));if(!t()[e])return YE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(lv,"checkSchemaExists");function uv(e,t){let{getDatabases:r}=(Me(),v(gt));if(!r()[e][t])return YE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(uv,"checkTableExists");function fZ(){let e=KE().utc().add(1,"d").startOf("d").unix(),t=KE().utc().unix();return e-t}o(fZ,"getStartOfTomorrowInSeconds");function mZ(){return KE().utc().format("DD-MM-YYYY")}o(mZ,"getLimitKey");function hZ(e){try{let t=new P6(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){An.error("Got an error back ticking items."),An.error(t)}}o(hZ,"backtickASTSchemaItems");function pZ(e){return[e]}o(pZ,"createForkArgs");function EZ(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(EZ,"autoCastBoolean");function _Z(e,t){let{getDatabases:r}=(Me(),v(gt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(_Z,"getTableHashAttribute");function gZ(e){let{getDatabases:t}=(Me(),v(gt));return t()[e]!==void 0}o(gZ,"doesSchemaExist");function SZ(e,t){let{getDatabases:r}=(Me(),v(gt));return r()[e]?.[t]!==void 0}o(SZ,"doesTableExist");function TZ(e){try{return JSON.stringify(e)}catch{return e}}o(TZ,"stringifyObj");function RZ(e){let t=KE.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(RZ,"ms_to_time");function yZ(e,t){let r=Ia.basename(e,Ia.extname(e));return Ia.join(Ia.dirname(e),r+t)}o(yZ,"changeExtension");function _A(){if(process.env[yr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[yr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=v6(process.argv);if(e[yr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[yr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(_A,"getEnvCliRootPath");var pA;function AZ(){if(pA)return pA;let e=_A();if(_A()&&rv.pathExistsSync(Ia.join(e,yr.HDB_CONFIG_FILE)))return pA=!0,!0}o(AZ,"noBootFile");function bZ(e,t){let r;return e.protocol==="http:"?r=x6:r=U6,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(bZ,"httpRequest");function IZ(e){if(!e.schema&&!e.database){e.schema=yr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(IZ,"transformReq");function NZ(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(NZ,"convertToMS");var YE=rn()});var Nt=M((Owe,_v)=>{"use strict";var nm=(H(),v(Y)),wZ=ie(),bn=ae(),sm=require("path"),OZ=require("minimist"),dv=require("fs-extra"),fv=require("lodash");bn.initSync();var{CONFIG_PARAMS:Na,DATABASES_PARAM_CONFIG:Zf,SYSTEM_SCHEMA_NAME:WE}=nm,em,tm,rm;function mv(){if(em!==void 0)return em;if(bn.getHdbBasePath()!==void 0)return em=bn.get(Na.STORAGE_PATH)||sm.join(bn.getHdbBasePath(),nm.DATABASES_DIR_NAME),em}o(mv,"getBaseSchemaPath");function hv(){if(tm!==void 0)return tm;if(bn.getHdbBasePath()!==void 0)return tm=Ev(WE),tm}o(hv,"getSystemSchemaPath");function pv(){if(rm!==void 0)return rm;if(bn.getHdbBasePath()!==void 0)return rm=bn.get(nm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||sm.join(bn.getHdbBasePath(),nm.TRANSACTIONS_DIR_NAME),rm}o(pv,"getTransactionAuditStoreBasePath");function CZ(e,t){let r=bn.get(Na.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||sm.join(pv(),e.toString())}o(CZ,"getTransactionAuditStorePath");function Ev(e,t){e=e.toString(),t=t&&t.toString();let r=bn.get(nm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||sm.join(mv(),e)}o(Ev,"getSchemaPath");function PZ(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,OZ(process.argv));let n=r[Na.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!wZ.isObject(n))throw a;i=n}for(let a of i){let c=a[WE];if(!c)continue;let l=bn.get(Na.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Zf.PATH];if(u)return fv.set(l,[WE,Zf.TABLES,t,Zf.PATH],u),bn.setProperty(Na.DATABASES,l),u;let d=c?.[Zf.PATH];if(d)return fv.set(l,[WE,Zf.PATH],d),bn.setProperty(Na.DATABASES,l),d}}let s=r[Na.STORAGE_PATH.toUpperCase()];if(s){if(!dv.pathExistsSync(s))throw new Error(s+" does not exist");let i=sm.join(s,e);return dv.mkdirsSync(i),bn.setProperty(Na.STORAGE_PATH,s),i}return hv()}o(PZ,"initSystemSchemaPaths");function LZ(){em=void 0,tm=void 0,rm=void 0}o(LZ,"resetPaths");_v.exports={getBaseSchemaPath:mv,getSystemSchemaPath:hv,getTransactionAuditStorePath:CZ,getTransactionAuditStoreBasePath:pv,getSchemaPath:Ev,initSystemSchemaPaths:PZ,resetPaths:LZ}});var In=M((Dwe,yv)=>{"use strict";var DZ=rn().LMDB_ERRORS_ENUM,Pwe=require("lmdb"),MZ=Kt(),Lwe=require("buffer").Buffer,{OVERFLOW_MARKER:gv,MAX_SEARCH_KEY_LENGTH:zE}=MZ,Sv=["number","string","symbol","boolean","bigint"];function vZ(e){if(e=e?.primaryStore||e,!e)throw new Error(DZ.ENV_REQUIRED)}o(vZ,"validateEnv");function UZ(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(UZ,"stringifyData");function xZ(e){return e instanceof Date?e.valueOf():e}o(xZ,"convertKeyValueToWrite");function BZ(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Sv.includes(typeof e))return e.length>zE?[e.slice(0,zE)+gv]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Sv.includes(typeof i))i.length>zE?r.push(i.slice(0,zE)+gv):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(BZ,"getIndexedValues");var jE=0,Tv=0;function Rv(){Tv=Date.now()-performance.now()}o(Rv,"adjustStartTime");Rv();var FZ=6e4;setInterval(Rv,FZ).unref();function HZ(){let e=performance.now()+Tv;return e>jE?(jE=e,e):(jE+=488e-6,jE)}o(HZ,"getNextMonotonicTime");yv.exports={validateEnv:vZ,stringifyData:UZ,convertKeyValueToWrite:xZ,getNextMonotonicTime:HZ,getIndexedValues:BZ}});var im=M((vwe,Av)=>{"use strict";var kZ=(H(),v(Y)).OPERATIONS_ENUM,gA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=kZ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Av.exports=gA});var _e=M((xwe,Nv)=>{"use strict";var yu=rn(),qZ=z(),GZ=(H(),v(Y)),QE=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,bv),this.statusCode=n||yu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(yu.DEFAULT_ERROR_MSGS[n]?yu.DEFAULT_ERROR_MSGS[n]:yu.DEFAULT_ERROR_MSGS[yu.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&&qZ[s](i)}},SA=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},TA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function bv(e,t,r,n=GZ.LOG_LEVELS.ERROR,s=null,i=!1){if(Iv(e))return e;let a=new QE(e,t,r,n,s);return i&&delete a.stack,a}o(bv,"handleHDBError");function Au(e){this.message=e}o(Au,"Violation");Au.prototype=Object.create(Error.prototype);Au.prototype.constructor=Au;Au.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var RA=class extends Au{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function Iv(e){return e.__proto__.constructor.name===QE.name}o(Iv,"isHDBError");Nv.exports={isHDBError:Iv,handleHDBError:bv,ClientError:SA,ServerError:TA,AccessViolation:RA,Violation:Au,hdbErrors:yu}});var om=M((Hwe,Pv)=>{"use strict";var Fwe=im(),JE=(H(),v(Y)),yA=ie(),wv=z(),$Z=require("uuid"),{handleHDBError:XE,hdbErrors:VZ}=_e(),{HDB_ERROR_MSGS:ZE,HTTP_STATUS_CODES:e_}=VZ;Pv.exports=Ov;function Ov(e,t,r){for(let s=0;s<t.length;s++)Cv(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];KZ(i,r,e.operation)}}o(Ov,"processRows");Ov.validateAttribute=Cv;function Cv(e){if(Buffer.byteLength(String(e))>JE.INSERT_MAX_CHARACTER_SIZE)throw XE(new Error,ZE.ATTR_NAME_LENGTH_ERR(e),e_.BAD_REQUEST,void 0,void 0,!0);if(yA.isEmptyOrZeroLength(e)||yA.isEmpty(e.trim()))throw XE(new Error,ZE.ATTR_NAME_NULLISH_ERR,e_.BAD_REQUEST,void 0,void 0,!0)}o(Cv,"validateAttribute");function KZ(e,t,r){if(!e.hasOwnProperty(t)||yA.isEmptyOrZeroLength(e[t])){if(r===JE.OPERATIONS_ENUM.INSERT||r===JE.OPERATIONS_ENUM.UPSERT){e[t]=$Z.v4();return}throw wv.error("Update transaction aborted due to record with no hash value:",e),XE(new Error,ZE.RECORD_MISSING_HASH_ERR,e_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>JE.INSERT_MAX_CHARACTER_SIZE)throw wv.error(e),XE(new Error,ZE.HASH_VAL_LENGTH_ERR,e_.BAD_REQUEST,void 0,void 0,!0)}o(KZ,"validateHash")});function Bv(e){bA=e}function jZ(){zZ=setInterval(function(){for(let e of AA)if(e.stale){let t=e.getContext()?.url;vv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},WZ).unref()}var IA,Mv,vv,Uv,xv,Lv,AA,YZ,_o,am,Dv,bA,go,t_,WZ,zZ,cm=le(()=>{IA=w(In()),Mv=w(_e()),vv=w(z()),Uv=w(ae());H();xv=w(ie()),Lv=100,AA=new Set,YZ=(0,xv.convertToMS)(Uv.get(U.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,_o={CLOSED:0,OPEN:1,LINGERING:2};o(Bv,"replicationConfirmation");go=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=_o.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===_o.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),AA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(AA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(am&&!this.overloadChecked&&performance.now()-Dv>YZ)throw new Mv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===_o.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===_o.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,IA.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?_o.LINGERING:_o.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)<Lv>>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 am||(am=s,Dv=performance.now(),am.then(()=>{am=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];bA&&h&&i.push(bA(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)+Lv/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=_o.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},t_=class extends go{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,IA.getNextMonotonicTime)())}getReadTxn(){}},WZ=3e4;o(jZ,"startMonitoringTxns");jZ()});var Fv,Kn,NA,bu=le(()=>{Fv=require("events"),Kn=class extends Fv.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new NA;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)}},NA=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 Ft(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===_o.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 go;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 Hv,kc=le(()=>{Hv=w(ti());cm();o(Ft,"transaction");(0,Hv._assignPackageExport)("transaction",Ft);Ft.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ft.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 OA={};Oe(OA,{add:()=>r_,applyReverse:()=>kv,getRecordAtTime:()=>wA,rebuildUpdateBefore:()=>n_});function r_(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 n_(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,r_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function kv(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=QZ[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=qv}}function wA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=wt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":kv(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===qv&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=wt(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 QZ,qv,s_=le(()=>{Mi();o(r_,"add");r_.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)};QZ={add:r_};o(n_,"rebuildUpdateBefore");o(kv,"applyReverse");qv={};o(wA,"getRecordAtTime")});var ri=M(o_=>{var i_=z();for(let e of["trace","debug","info","warn","error","fatal","notify"])i_.logsAtLevel(e)&&(o_[e]=i_[e]);o_.loggerWithTag=e=>i_.loggerWithTag(e,!0);o_.setLogLevel=i_.setLogLevel});var zv={};Oe(zv,{parse:()=>LA,streamAsJSON:()=>um,stringify:()=>qc});function um(e){return new CA({value:e})}function Gv(e){return console.error(e),JSON.stringify(lm(e))}function $v(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function qc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Yv)return Wv(e);if(t.resolution)return t.resolution.then(()=>qc(e));throw t}}function Wv(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+=Wv(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+qc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function LA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),ZZ.test(e)?JZ.parse(e):JSON.parse(e)):null}var Vv,PA,Kv,JZ,XZ,Yv,lm,CA,ZZ,DA=le(()=>{Vv=require("stream"),PA=w(z()),Kv=w(require("json-bigint-fixes")),JZ=(0,Kv.default)({useNativeBigInt:!0}),XZ=1e4,Yv={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw Yv};({errorToString:lm}=PA);o(um,"streamAsJSON");CA=class extends Vv.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=>(PA.warn("Error serializing in stream",c),a={done:!1,value:{error:lm(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:lm(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),Gv)}catch(s){yield Gv(s)}else yield qc(t)}else yield qc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);$v(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(lm(t)),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>XZ?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 $v(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(lm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(Gv,"handleError");o($v,"when");o(qc,"stringify");o(Wv,"jsStringify");ZZ=/[[,:]\s*-?\d{16,}/;o(LA,"parse")});var sU={};Oe(sU,{asyncSerialization:()=>BA,contentTypes:()=>xA,findBestSerializer:()=>c_,getDeserializer:()=>Ro,hasAsyncSerialization:()=>FA,registerContentHandlers:()=>mm,serialize:()=>hm,serializeMessage:()=>wa,toCsvStream:()=>a_});function e8(e){try{return e?.[0]===123?UA(e):e}catch{return e}}function mm(e){e.register(t8,{serializers:[{regex:/^application\/json$/,serializer:um},{regex:/^application\/cbor$/,serializer:o(function(t){return new Gc.EncoderStream(fm).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?$c.Readable.from((0,vi.encodeIter)(t,fm)):(0,vi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),a_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,vi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Gc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function c_(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 Jv.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 hm(e,t,r){let n=Qv&&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 Rs)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=c_(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}),vA.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,To.createBrotliCompress)({params:{[To.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?To.constants.BROTLI_MODE_TEXT:To.constants.BROTLI_MODE_GENERIC,[To.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>Qv?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,To.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function wa(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;So=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=c_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=dm(e);return So?.length>0?(So.length===1?So[0]:Promise.all(So)).then(()=>wa(e,t,!0)):n}finally{So=void 0}}function BA(e){if(So)So.push(e);else throw new Error("Unable to serialize asynchronously")}function FA(){return!!So}function r8(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function s8(e){return n8.includes(e)}function i8(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Ro(e="",t=!1){let r=i8(e),n=r.type&&nn.get(r.type)?.deserialize||o8(r);return t?s=>r8(s).then(n):n}function o8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!s8(e.parameters.charset)&&vA.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 a8(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}function a_(e,t){let r=$c.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 eU.Transform(n,s);return r.pipe(i)}var vi,Gc,To,Jv,$c,Xv,MA,Zv,vA,eU,tU,rU,dm,UA,fm,nn,xA,jv,nU,t8,Qv,So,n8,yo=le(()=>{DA();vi=require("msgpackr"),Gc=require("cbor-x"),To=require("zlib"),Jv=w(_e()),$c=w(require("stream"));Dr();Xv=w(ti()),MA=w(ae());H();Zv=w(require("yaml")),vA=w(ri());Yn();eU=require("json2csv"),tU=w(require("fastify-plugin")),rU=MA.default.get(U.SERIALIZATION_BIGINT)!==!1,dm=rU?qc:JSON.stringify,UA=rU?LA:JSON.parse,fm={useRecords:!1,useToJSON:!0},nn=new Map,xA=nn;De.contentTypes=xA;(0,Xv._assignPackageExport)("contentTypes",xA);nn.set("application/json",{serializeStream:um,serialize:dm,deserialize(e){return UA(e)},q:.8});jv=new Gc.Encoder(fm);nn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Gc.EncoderStream(fm).end(e)},serialize:jv.encode,deserialize:jv.decode,q:1});nn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?$c.Readable.from((0,vi.encodeIter)(e,fm)):(0,vi.pack)(e)},serialize:vi.pack,deserialize:vi.unpack,q:.9});nn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),a_(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]),a_(e,e?.getColumns?.())},q:.1});nn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return $c.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});nn.set("text/yaml",{serialize(e){return Zv.stringify(e,{aliasDuplicateObjects:!1})},q:.7});nn.set("text/event-stream",{serializeStream:o(function(e){return $c.Readable.from(a8(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
3
3
  `),e.data){let r=e.data;typeof r=="object"&&(r=dm(r)),t+="data: "+r+`
4
4
  `}return e.id&&(t+="id: "+e.id+`
5
5
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -8,124 +8,124 @@
8
8
 
9
9
  `:`data: ${e}
10
10
 
11
- `},"serialize"),compressible:!1,q:.8});rn.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()}});Zv={type:"application/json",serializeStream:um,serialize:dm,deserialize:JZ,q:.5};rn.set("*/*",Zv);rn.set("",Zv);o(JZ,"tryJSONParse");o(mm,"registerContentHandlers");XZ=(0,Jv.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=c_(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(c_,"findBestSerializer");Yv=PA.default.get(U.HTTP_COMPRESSIONTHRESHOLD);o(hm,"serialize");o(wa,"serializeMessage");o(vA,"asyncSerialization");o(UA,"hasAsyncSerialization");o(ZZ,"streamToBuffer");e8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(t8,"isBufferEncoding");o(r8,"parseContentType");o(Ro,"getDeserializer");o(n8,"deserializerUnknownType");o(s8,"transformIterable");o(a_,"toCsvStream")});var E_={};we(E_,{Blob:()=>Rs,blobsWereEncoded:()=>Kc,cleanupOrphans:()=>g8,databasePaths:()=>BA,decodeBlobsWithWrites:()=>p_,decodeFromDatabase:()=>bo,decodeWithBlobCallback:()=>gm,deleteBlob:()=>f_,deleteBlobsInObject:()=>Ca,deleteRootBlobPathsForDB:()=>kA,encodeBlobsAsBuffers:()=>p8,encodeBlobsWithFilePath:()=>h_,findBlobsInObject:()=>Vc,getFileId:()=>m_,getFilePathForBlob:()=>lU,getRootBlobPathsForDB:()=>Cu,isSaving:()=>l8,saveBlob:()=>_m,setDeletionDelay:()=>c8,startPreCommitBlobsForRecord:()=>qA});function aU(){}function f_(e){let t=lU(e);t&&setTimeout(()=>{(0,qe.unlink)(t,r=>{r&&Ht.default.debug?.("Error trying to remove blob file",r)})},cU)}function c8(e){cU=e}function _m(e,t=!1){let r=Mr.get(e);if(!r)r={storageIndex:0,fileId:null,store:In},Mr.set(e,r);else{if(r.fileId)return r;r.store=In}return r.deleteOnFailure=t,d8(r),r.source?xA(e,r.source,r):r.contentBuffer?u8(e,r):xA(e,Oa.Readable.from(e.stream()),r),r}function xA(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,qe.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(p(e.size)),m=!0);let h;a?(m||f.write(o8),h=(0,d_.createDeflate)(),(0,Oa.pipeline)(t,h,f,_)):(m||f.write(i8),(0,Oa.pipeline)(t,f,_));function p(g){let R=BigInt(g),T=new Uint8Array(Ar),y=new DataView(T.buffer);return R|=BigInt(a?HA:oU)<<48n,y.setBigInt64(0,R),T}o(p,"createHeader");function _(g){let R=f.fd;if(g){if(i.unlock(d,0),R&&((0,qe.close)(R),f.fd=null),r.deleteOnFailure)(0,qe.unlink)(n,T=>{T&&Ht.default.debug?.("Error while deleting aborted blob file",T)});else try{if((0,qe.statSync)(n).size===0){let T=Buffer.from(g.toString());(0,qe.writeFile)(n,Buffer.concat([p(BigInt(T.length)+0xff000000000000n),T]),y=>{y&&Ht.default.debug?.("Error write error message to blob file",y)})}}catch(T){Ht.default.debug?.("Error checking blob file after abort",T)}u(g)}else{if(!m){m=!0;let T=h?h.bytesWritten:f.bytesWritten-Ar;e.size=T,(0,qe.write)(R,p(T),0,Ar,0,_);return}i.unlock(d,0),c?(0,qe.fdatasync)(R,T=>{T&&u(T),l(),(0,qe.close)(R),f.fd=null}):(l(),(0,qe.close)(R),f.fd=null)}}o(_,"finished")}),e}function m_(e){return Mr.get(e)?.fileId}function l8(e){return Mr.get(e)?.saving}function lU(e){let t=Mr.get(e);return t?.fileId&&Ou(t)}function Cu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=BA.get(e);if(!t){if(!e.databaseName)return Ht.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,Em.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,xi.join)(n,e.databaseName)):t=[(0,xi.join)((0,Em.getHdbBasePath)(),"blobs",e.databaseName)],BA.set(e,t)}return t}async function kA(e){let t=Cu(e);t&&await Promise.all(t.map(r=>uU(r)))}async function uU(e){if((0,qe.existsSync)(e)){for(let t of await(0,Nn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await uU((0,xi.join)(e,t.name));else try{await(0,Nn.unlink)((0,xi.join)(e,t.name))}catch(r){Ht.default.warn?.("Error deleting file",r)}try{await(0,Nn.rmdir)(e)}catch(t){Ht.default.warn?.("Error deleting directory",t)}}}function Ou({storageIndex:e,fileId:t,store:r}){let n=Cu(r);return(0,xi.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 u8(e,t){let r=t.contentBuffer,n=r.length;if(!(n<iU))return e.size=n,xA(e,Oa.Readable.from([r]),t)}function d8(e){let t=Cu(e.store),r=f8(),n=t?.length>1?m8(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Ou(e),a=(0,xi.dirname)(i);(0,qe.existsSync)(a)||(0,FA.ensureDirSync)(a),e.filePath=i}function f8(){let e=nU.get(In);if(!e){let t=0,r=Cu(In);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,qe.existsSync)(n))for(let c of(0,qe.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,xi.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)),nU.set(In,e)}return Number(Atomics.add(e,0,1n))}function m8(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(u_);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,h8(e)),e.frequencyTable[t%u_]}async function h8(e){if(!Nn.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,Nn.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,FA.ensureDirSync)(s),a=await(0,Nn.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(u_),n=t.map(s=>1/s);for(let s=0;s<u_;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 h_(e,t,r){Iu=t,In=r,Kc=!1;try{return e()}finally{Iu=void 0,In=void 0}}function p8(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 p_(e,t,r){try{Gr=[],Ao=r,In=t,e()}catch(s){throw Ao=void 0,Gr=void 0,s}Ao=void 0;let n=Gr.length<2?Gr[0]:Promise.all(Gr);return Gr=void 0,n}function gm(e,t,r){In=r;try{return Ao=t,e()}finally{Ao=void 0}}function bo(e,t){return In=t,e()}function Ca(e){Vc(e,t=>{f_(t)})}function Vc(e,t){if(e instanceof Rs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Vc(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Vc(e[r],t)}}function qA(e,t){let r=[];for(let n in e){let s=e[n];s instanceof wu&&s.saveBeforeCommit&&r.push(s)}if(r.length>0)return()=>(In=t,Promise.all(r.map(n=>_m(n,!0).saving??Promise.resolve())))}function _8(){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""}}}async function g8(e,t){let r,n,s=0;for(let d in e){let f=e[d];if(r=f.primaryStore.rootStore,n=f.auditStore,n)break}let i=new Set,a=Cu(r);if(a)for(let d of a)await c(d);return await l(),Ht.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,qe.existsSync)(d))return;for(let f of await(0,Nn.readdir)(d,{withFileTypes:!0})){let m=(0,xi.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Ht.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let h=(0,sU.getHeapStatistics)();h.used_heap_size>h.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Ht.default.error?.("Error searching path for blobs",d,f)}}o(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,Em.get)(U.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Ht.default.warn?.("Checking for references to potential orphaned blobs in table",m);let h=e[m];for(let p of h.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{p.metadataFlags&$r&&p.value&&u(p.value),d++%f===0?await(0,Nu.setTimeout)(1):await(0,Nu.setImmediate)()}catch(_){Ht.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",_)}}Ht.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:m}of n.getRange({start:1,snapshot:!1,lazy:!0}))try{let h=wt(m),p=n.tableStores[h.tableId],_=p?.getEntry(h.recordId);(!_||_.version!==h.version||!_.value)&&u(h.getValue(p)),d++%f===0?await(0,Nu.setTimeout)(1):await(0,Nu.setImmediate)()}catch(h){Ht.default.error?.("Error searching audit log for references to potential orphaned blobs failed",h)}Ht.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,Nn.unlink)(m)}catch(h){Ht.default.warn?.("Error deleting file",h)}Ht.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}o(l,"removePathsThatAreNotReferenced");function u(d){Vc(d,f=>{if(f instanceof wu){let m=Mr.get(f);if(m.fileId!=null){let h=Ou(m);i.has(h)&&i.delete(h)}}})}o(u,"checkObjectForReferences")}var Ui,Nn,qe,d_,Oa,FA,Em,xi,Ht,sU,Nu,iU,Ar,oU,HA,tU,i8,o8,rU,Mr,Ao,Rs,Iu,Gr,In,Kc,pm,l_,a8,wu,cU,BA,nU,u_,E8,Yn=ce(()=>{Ui=require("msgpackr"),Nn=require("node:fs/promises"),qe=require("node:fs"),d_=require("node:zlib"),Oa=require("node:stream"),FA=require("fs-extra"),Em=w(oe());H();xi=require("path"),Ht=w(ri());yo();Mi();sU=require("node:v8"),Nu=require("node:timers/promises"),iU=8192,Ar=8,oU=0,HA=1,tU=255,i8=new Uint8Array([0,oU,255,255,255,255,255,255]),o8=new Uint8Array([0,HA,255,255,255,255,255,255]),rU=0xffffffffffff,Mr=new WeakMap,Rs=global.Blob||_8(),Kc=!1,pm=new Uint8Array(8),l_=new DataView(pm.buffer),a8=6e4;o(aU,"InstanceOfBlobWithNoConstructor");aU.prototype=Rs.prototype;wu=class e extends aU{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Mr.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):(UA()&&vA(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Mr.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=Ou(t),a,c=o(async()=>{let l,u=Ar;try{if(l=await(0,Nn.readFile)(i),l.length>=Ar){l.copy(pm,0,0,Ar);let f=l_.getBigUint64(0);if(Number(f>>48n)===tU)throw new Error("Error in blob: "+l.subarray(Ar));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<rU&&(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 for ${i}`);return new Promise((p,_)=>{if(m.attemptLock(h,0,()=>(a=!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,d_.deflate)(l.subarray(Ar),(h,p)=>{h?m(h):f(d(p))})}):d(l.subarray(Ar))},"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=Mr.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=Ou(t),a,c=0,l=0,u,d,f,m=!1,h=this;return new ReadableStream({start(){let _=1e3,g=o((R,T)=>{(0,qe.open)(i,"r",(y,N)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Ht.default.debug?.("File does not exist yet, waiting for it to be created",i,_),_-- >0))return setTimeout(()=>{p(),g(R,T)},20).unref();T(y),h.#e?.forEach(O=>O(y))}else a=N,R(N)})},"openFile");return new Promise(g)},pull:o(_=>{let g=0,R=100;return new Promise(o(function T(y,N){function O(Z){(0,qe.close)(a),clearTimeout(d),u&&u.close(),N(Z),h.#e?.forEach(q=>q(Z))}o(O,"onError");let F=Buffer.allocUnsafe(262144);(0,qe.read)(a,F,0,F.length,c,(Z,q,W)=>{if(l+=q,Z)return O(Z);if(c===0){if(q<Ar){R-- >0&&f!==!1?(p(),Ht.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>T(y,N),20).unref()):(Ht.default.debug?.("File was empty, throwing error",i,R),O(new Error(`Blob ${t.fileId} was empty`)));return}W.copy(pm,0,0,Ar);let K=l_.getBigUint64(0);if(Number(K>>48n)===tU)return O(new Error("Error in blob: "+W.subarray(Ar,q)));if(g=Number(K&0xffffffffffffn),g<rU&&h.size!==g&&(h.size=g,h.#t))for(let $ of h.#t)$(g);W=W.subarray(Ar,q),l-=Ar}else if(q===0){let K=Buffer.allocUnsafe(8);return(0,qe.read)(a,K,0,Ar,0,$=>{if($)return O($);if(pm.set(K),g=Number(l_.getBigUint64(0)&0xffffffffffffn),g>l){p()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},a8).unref():(u=(0,qe.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,T(y,N))}),T(y,N)):m?O(new Error("Blob is incomplete")):(m=!0,T(y,N));return}(0,qe.close)(a),_.close(),y()})}else W=W.subarray(0,q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=q,T(y,N);s&&l>=s&&(l>s&&(W=W.subarray(0,s-c)),l=g=s),n&&n>c&&(W=W.subarray(n-c))}c+=q;try{_.enqueue(W)}catch(K){return Ht.default.debug?.("Error enqueuing chunk",K),y()}l===g&&((0,qe.close)(a),_.close()),y()})},"readMore"))},"pull"),cancel(){(0,qe.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}),f||_.unlock(g,0)}return f}}slice(t,r,n){let s=Mr.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};Mr.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)};Mr.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(){return this.saveBeforeCommit=!0,Promise.resolve()}get written(){return Mr.get(this)?.saving??Promise.resolve()}},cU=500;o(f_,"deleteBlob");o(c8,"setDeletionDelay");global.createBlob=function(e,t){let r=new wu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Mr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Oa.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Oa.Readable.from(e);else throw new Error("Invalid source type");return r};o(_m,"saveBlob");o(xA,"writeBlobWithStream");o(m_,"getFileId");o(l8,"isSaving");o(lU,"getFilePathForBlob");BA=new Map;o(Cu,"getRootBlobPathsForDB");o(kA,"deleteRootBlobPathsForDB");o(uU,"rimrafSteadily");o(Ou,"getFilePath");o(u8,"writeBlobWithBuffer");o(d8,"generateFilePath");nU=new Map;o(f8,"getNextFileId");u_=128;o(m8,"getNextStorageIndex");o(h8,"createFrequencyTableForStoragePaths");o(h_,"encodeBlobsWithFilePath");o(p8,"encodeBlobsAsBuffers");o(p_,"decodeBlobsWithWrites");o(gm,"decodeWithBlobCallback");o(bo,"decodeFromDatabase");o(Ca,"deleteBlobsInObject");o(Vc,"findBlobsInObject");o(qA,"startPreCommitBlobsForRecord");E8=new Ui.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Ui.addExtension)({Class:Rs,type:11,unpack:o(function(e){let t=E8.unpack(e),r=new wu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Mr.set(r,{storageIndex:t[1],fileId:t[2],store:In}),Ao)return Ao(r)??r;if(!In)throw new Error("No store specified, cannot load blob from storage")}else Mr.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=Mr.get(e);if(Iu!==void 0&&(Kc=!0,t?.recordId!==void 0&&t.recordId!==Iu))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<iU)return r.size=t.contentBuffer.length,(0,Ui.pack)([r,t.contentBuffer])}if(Iu!==void 0){if(t=_m(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Iu,(0,Ui.pack)([r,t.storageIndex,t.fileId])}if(t){if(Ao)return Ao(e),(0,Ui.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,qe.readFileSync)(Ou(t));if(n.length>=Ar&&(n.copy(pm,0,0,Ar),Number(l_.getBigUint64(0)&0xffffffffffffn)===n.length-Ar))return Buffer.concat([(0,Ui.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,Ui.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(_8,"polyfillBlob");o(g8,"cleanupOrphans")});var pU={};we(pU,{onStorageReclamation:()=>Sm,runReclamationHandlers:()=>KA,setAvailableSpaceRatioGetter:()=>T8});function Sm(e,t,r){(r||(0,g_.getWorkerIndex)()===(0,g_.getWorkerCount)()-1)&&(__.has(e)||__.set(e,[]),__.get(e).push({priority:0,handler:t}),VA||(VA=setTimeout(KA,fU).unref()))}async function KA(){for(let[e,t]of __)try{let r=await hU(e),n=S8/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&&($A.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){$A.default.error?.("Error running storage reclamation handlers",r)}VA=setTimeout(KA,fU).unref()}function T8(e){hU=e??mU}var GA,g_,$A,S_,dU,__,S8,fU,VA,mU,hU,T_=ce(()=>{GA=require("node:fs/promises"),g_=w(ze()),$A=w(ri());H();S_=w(oe()),dU=w(se());S_.default.initSync();__=new Map,S8=S_.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,fU=(0,dU.convertToMS)(S_.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Sm,"onStorageReclamation");mU=o(async e=>{if(GA.statfs){let t=await(0,GA.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),hU=mU;o(KA,"runReclamationHandlers");o(T8,"setAvailableSpaceRatioGetter")});var OU={};we(OU,{ACTION_32_BIT:()=>I_,ACTION_64_BIT:()=>b8,AUDIT_STORE_OPTIONS:()=>ym,Decoder:()=>Wc,HAS_BLOBS:()=>$r,HAS_CURRENT_RESIDENCY_ID:()=>zc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Im,HAS_ORIGINATING_OPERATION:()=>bm,HAS_PREVIOUS_RESIDENCY_ID:()=>jc,REMOTE_SEQUENCE_UPDATE:()=>N_,createAuditEntry:()=>Qc,getLastRemoved:()=>y8,openAuditStore:()=>A_,readAuditEntry:()=>wt,removeAuditEntry:()=>b_,setAuditRetention:()=>A8,transactionKeyEncoder:()=>bU});function A_(e){let t=e.auditStore=e.openDB(YA.AUDIT_STORE_NAME,{create:!1,...ym});t||(t=e.auditStore=e.openDB(YA.AUDIT_STORE_NAME,ym),_U(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=zA;Sm(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()-WA/(1+i*i)})){try{m=b_(t,p,_)}catch(g){Pu.warn("Error removing audit entry",g)}if(h=p,await new Promise(setImmediate),++f>=R8){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,WA/10):(_U(t,h),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Rm.getWorkerIndex)()===(0,Rm.getWorkerCount)()-1&&c(),(0,Rm.getWorkerIndex)()===0&&!EU)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(EU=!0,Pu.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 b_(e,t,r){let n=I8(r),s;if(n&$r){s=wt(r);let i=e.tableStores[s.tableId];if(i){let a=s.type==="message"?null:i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&bo(()=>Ca(s.getValue(i)),i.rootStore)}}if((n&15)===jA){s=s||wt(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 _U(e,t){QA[0]=t,e.put(Symbol.for("last-removed"),IU)}function y8(e){let t=e.get(Symbol.for("last-removed"));if(t)return IU.set(t),QA[0]}function A8(e,t=zA){WA=e,zA=t}function Qc(e,t,r,n,s,i,a,c,l,u,d,f,m){let h=NU[a];if(!h)throw new Error(`Invalid audit entry type ${a}`);let p=1;if(n&&(n>1?Pa.setFloat64(0,n):ys.set(JA),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}R(s),R(t),g(r),Pa.setFloat64(p,e),p+=8,l&zc&&R(u),l&jc&&R(d),l&Im&&(Pa.setFloat64(p,f),p+=8),l&bm&&R(wU[m]),i?g(i):ys[p++]=0,l?Pa.setUint32(n?8:0,h|l|3221225472):ys[n?8:0]=h;let _=ys.subarray(0,p);if(c)return Buffer.concat([_,c]);return _;function g(T){let y=p;p+=1,p=(0,Yc.writeKey)(T,ys,p);let N=p-y-1;N>127?N>16383?(Pu.error("Key or username was too large for audit entry",T),p=y+1,ys[y]=0):(ys.copyWithin(y+2,y+1,p),Pa.setUint16(y,N|32768),p++):ys[y]=N}function R(T){T<128?ys[p++]=T:T<16384?(Pa.setUint16(p,T|32768),p+=2):T<1056964608?(Pa.setUint32(p,T|3221225472),p+=4):(ys[p]=255,Pa.setUint32(p+1,T),p+=5)}}function I8(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 Wc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function wt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Wc(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&zc&&(m=n.readInt()),i&jc&&(h=n.readInt()),i&Im&&(p=n.readFloat64()),i&bm){let y=n.readInt();_=wU[y]}l=n.readInt();let g=n.position,R=n.position+=l,T;return{type:NU[i&7],tableId:c,nodeId:a,get recordId(){return(0,Yc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>g?(0,Yc.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(y,N,O){if(i&R_||i&Tm&&!N)return T||(T=bo(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),T;if(i&Tm&&O)return bA(y.getEntry(this.recordId),O,y)},getBinaryValue(){return i&(R_|Tm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:h,expiresAt:p,originatingOperation:_}}catch(n){return Pu.error("Reading audit entry error",n,e),{}}}var Yc,y_,YA,Rm,AU,Pu,ys,Pa,bU,ym,WA,R8,QA,IU,zA,EU,R_,Tm,gU,jA,SU,TU,RU,yU,I_,b8,N_,zc,jc,bm,Im,$r,NU,wU,Wc,Mi=ce(()=>{Yc=require("ordered-binary"),y_=w(oe()),YA=w(Kt());H();Rm=w(ze()),AU=w(se());Jc();Pu=w(j());s_();Yn();T_();(0,y_.initSync)();ys=Buffer.alloc(2816),Pa=new DataView(ys.buffer,ys.byteOffset,2816),bU={writeKey(e,t,r){return e===Am?(t.set(Am,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Yc.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,Yc.readKey)(e,t,r)}},ym={encoding:"binary",keyEncoder:bU},WA=(0,AU.convertToMS)((0,y_.get)(U.LOGGING_AUDITRETENTION))||86400*3,R8=1e3,QA=new Float64Array(1),IU=new Uint8Array(QA.buffer),zA=1e4,EU=!1;o(A_,"openAuditStore");o(b_,"removeAuditEntry");o(_U,"updateLastRemoved");o(y8,"getLastRemoved");o(A8,"setAuditRetention");R_=16,Tm=32,gU=1,jA=2,SU=3,TU=4,RU=5,yU=6,I_=14,b8=15,N_=11,zc=512,jc=1024,bm=2048,Im=4096,$r=8192,NU={put:gU|R_,[gU]:"put",delete:jA,[jA]:"delete",message:SU|R_,[SU]:"message",invalidate:TU|Tm,[TU]:"invalidate",patch:RU|Tm,[RU]:"patch",relocate:yU,[yU]:"relocate"},wU={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Qc,"createAuditEntry");o(I8,"readAction");o(wt,"readAuditEntry");Wc=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 MU={};we(MU,{ENTRY:()=>w8,HAS_EXPIRATION:()=>P_,HAS_RESIDENCY_ID:()=>rb,HAS_STRUCTURE_UPDATE:()=>L_,LAST_TIMESTAMP_PLACEHOLDER:()=>Am,LOCAL_TIMESTAMP:()=>N8,METADATA:()=>Lu,NEW_TIMESTAMP_PLACEHOLDER:()=>PU,NO_TIMESTAMP:()=>O_,PENDING_LOCAL_TIME:()=>nb,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>JA,RecordEncoder:()=>tb,TIMESTAMP_ASSIGN_LAST:()=>C8,TIMESTAMP_ASSIGN_NEW:()=>LU,TIMESTAMP_ASSIGN_PREVIOUS:()=>DU,TIMESTAMP_PLACEHOLDER:()=>w_,TIMESTAMP_RECORD_PREVIOUS:()=>XA,entryMap:()=>La,handleLocalTimeForGets:()=>D_,lastMetadata:()=>ut,recordUpdater:()=>sb,removeEntry:()=>el});function L8(){return Om[0]=Om[0]^64,O8.getFloat64(0)}function D_(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++,ut=null;let l=r.call(this,a,c);return l&&(ut&&(l.metadataFlags=ut[Lu],l.localTime=ut.localTime,l.residencyId=ut.residencyId,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l.value&&La.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){ut=null;let l=n.call(this,a,c);return ut&&l&&(La.set(l,ut),ut=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=>(ut&&(l.metadataFlags=ut[Lu],l.localTime=ut.localTime,l.residencyId=ut.residencyId,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=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,Zc.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Zc.length;u++){let d=Zc[u].deref();(!d||d.isDone||d.isCommitted)&&Zc.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function sb(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){l==null?Xc=O_:f?Xc=i?.localTime?XA|DU:O_:Xc=l?i?.localTime?XA|16384:LU|16384:O_;let h=u?.expiresAt;if(h>=0&&(c|=P_),wm=c,ZA=h,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:a,instructedWrite:Xc>0},_,g=0;try{let R=i?.residencyId,T=u?.residencyId;T&&(eb=T,wm|=rb,g|=zc),R!==T&&(g|=jc,R||(R=0)),c&P_&&(g|=Im),u?.originatingOperation&&(g|=bm),f&&(p.ifVersion=_=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&$r&&(!i.localTime||!r.getBinaryFast(i.localTime))&&Ca(i.value);let y;if(s!==void 0&&(y=h_(()=>e.put(n,s,p),n,e.rootStore),Kc&&(g|=$r)),l){let N=u?.user?.username;if(m&&(h_(()=>e.encoder.encode(m),n,e.rootStore),Kc&&(g|=$r)),e.encoder.hasStructureUpdate&&(g|=L_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,F=r.get(O);if(F){let Z=wt(F).previousLocalTime;return y=r.put(O,Qc(a,t,n,Z,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Nm,g,T,R,h),{ifVersion:_}),y}}y=r.put(s===void 0?PU:Am,Qc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Nm,g,T,R,h,u?.originatingOperation),{instructedWrite:!0,ifVersion:_})}return y}catch(R){throw R.message+=" id: "+n+" options: "+p,R}}}function el(e,t,r){if(t)return t.value&&t.metadataFlags&$r&&!e.auditStore?.getBinaryFast(t.localTime)&&Ca(t.value),e.remove(t.key,r)}var CU,C_,w_,Am,JA,PU,N8,Lu,w8,Om,O8,O_,LU,C8,DU,XA,P_,rb,nb,L_,La,P8,Nm,Xc,wm,ZA,eb,ut,tb,Zc,Jc=ce(()=>{CU=require("msgpackr");Mi();C_=w(j());Yn();Yn();w_=new Uint8Array([1,1,1,1,4,64,0,0]),Am=new Uint8Array([1,1,1,1,1,0,0,0]),JA=new Uint8Array([1,1,1,1,3,64,0,0]),PU=new Uint8Array([1,1,1,1,0,64,0,0]),N8=Symbol("local-timestamp"),Lu=Symbol("metadata"),w8=Symbol("entry"),Om=new Uint8Array(8),O8=new DataView(Om.buffer,0,8),O_=0,LU=0,C8=1,DU=3,XA=4,P_=16,rb=32,nb=1,L_=256,La=new WeakMap,Xc=0,wm=-1,ZA=-1,eb=0,ut=null,tb=class extends CU.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return La.get(this)?.version}getExpiresAt(){return La.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Xc||wm>=0){let c=0,l=Xc;l&&(c+=8,Xc=0);let u=wm,d=ZA,f=eb;u>=0&&(c+=4,wm=-1,d>=0&&(c+=8,ZA=-1),f&&(c+=4,eb=0));let m=P8=n.call(this,i,a|2048|c);Nm=m.subarray((m.start||0)+c,m.end);let h=m.start||0;return l&&(w_[4]=l,w_[5]=l>>8,m.set(w_,h),h+=8),Kc&&(u|=$r),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,u|I_<<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 Nm=n.call(this,i,a),Nm};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){ut=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(Om,0,c),c+=8;else for(let m=0;m<8;m++)Om[m]=t[c++];l=L8(),i=t[c]}let u,d;i<32&&(i===I_?(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&rb&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=bo(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ut={localTime:l,[Lu]:a,expiresAt:u,residencyId:d},f}return r?.valueAsBuffer?t:bo(()=>super.decode(t,r),this.rootStore)}catch(c){return C_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(L8,"getTimestamp");o(D_,"handleLocalTimeForGets");Zc=[];setInterval(()=>{for(let e=0;e<Zc.length;e++){let t=Zc[e].deref();!t||t.isDone||t.isCommitted?Zc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(C_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):C_.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(sb,"recordUpdater");o(el,"removeEntry")});function ab(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?ab(f.conditions,f.operator,r,n,s,i,a,c):Uu(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",y=d(p.conditions,!T,h);return T?(N,O)=>y.some(F=>F(N,O)):(N,O)=>y.every(F=>F(N,O))}let g=(p.attribute||p[0])===r.primaryKey,R=Pm(p,r,i,c,g,h);return m&&_<f.length-1&&h&&(h=k8(r.primaryStore,p.estimated_count,h)),R}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Uu(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 Vr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],N=Fi(n.attributes,y);if(N.relationship){if(c.length<2)throw new Vr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=N.definition?.tableClass||N.elements?.definition?.tableClass,F=new Map,Z=Uu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,F);if(N.relationship.to){i[c[0]]=F;let q=!!Fi(O.attributes,N.relationship.to)?.elements;Z=x8(Z,N,O.primaryStore,q,F)}if(N.relationship.from){let q=o(W=>(W?.key!==void 0&&(W=W.key),Uu({attribute:N.relationship.from,value:W},t,r,n,s,F)),"searchEntry");N.elements?(i[c[0]]=F,Z=B8(Z,N,O.primaryStore,F,q)):Z=Z.flatMap(q)}return Z}else if(c.length===1)c=c[0];else throw new Vr.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(cb[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]=Bi.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 Vr.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>As.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,As.MAX_SEARCH_KEY_LENGTH)+As.OVERFLOW_MARKER,_=!1,R=Pm(e,n,null,i,d)),typeof h=="string"&&h.length>As.MAX_SEARCH_KEY_LENGTH&&(h=h.slice(0,As.MAX_SEARCH_KEY_LENGTH)+As.OVERFLOW_MARKER,p=!0,R=R??Pm(e,n,null,i,d)),r){let y=m;m=h,h=y,y=!_,_=!p,p=y}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new Vr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new Vr.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 Vr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new Vr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??Pm(e,n,null,i,d),!R)throw new Vr.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 y=f.getRange(T).map(R?function({key:N,value:O}){return this?.isSync?O&&R(O)?N:Da.SKIP:new Promise((F,Z)=>setImmediate(()=>{try{F(O&&R(O)?N:Da.SKIP)}catch(q){Z(q)}}))}:N=>N.value==null&&!(N.metadataFlags&(wn|tl))?Da.SKIP:(a?._freezeRecords&&Object.freeze(N.value),N));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,a).map(y=>{if(typeof y=="object"&&y){let{key:N,...O}=y,F=n.primaryStore.getEntry(N);return a?._freezeRecords&&Object.freeze(F?.value),{...O,...F}}return y}):f.getRange(T).map(R?function({key:y,value:N}){let O;return typeof y=="string"&&y.length>As.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(N):O={[c]:y},this.isSync?R(O)?N:Da.SKIP:new Promise((F,Z)=>setImmediate(()=>{try{F(R(O)?N:Da.SKIP)}catch(q){Z(q)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:N}){return this.isSync?N&&R(N)?y:Da.SKIP:new Promise((O,F)=>setImmediate(()=>{try{O(N&&R(N)?y:Da.SKIP)}catch(Z){F(Z)}}))})}function Fi(e,t){if(Array.isArray(t))if(t.length>1){let r=Fi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Fi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function x8(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 B8(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 Pm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=Fi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,h=n?.[d],p=Pm({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,R=o((y,N)=>{let O,F;return _?_.returnDirect?(O=_(y,r,N),F=ut):(F=_(y,r,N,!0),Array.isArray(F)?(O=F.map(Z=>Z.value),F=null):O=F?.value):O=y[d],{subObject:O,subEntry:F}},"getSubObject"),T=o((y,N)=>{if(_&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let W of p.idFilter.idSet)e={attribute:_.from??t.primaryKey,value:W};g=u(_.from??t.primaryKey,p.idFilter,!0,!0)}else g=u(_.from??t.primaryKey,p.idFilter,!1,!0);let q=g(y);return g.idFilter&&(T.idFilter=g.idFilter),q}let{subObject:O,subEntry:F}=R(y,N);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(q){let W=R(q).subObject;return Array.isArray(W)?W.filter(p).map(K=>K[m.primaryKey]):W}}),O.some(p)):p(O,F):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),cb[a]||a){case As.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Bi.compareKeys)(d,l[0])>=0&&(0,Bi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Bi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Bi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Bi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Bi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Bi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new Vr.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&&v_(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(m=!1));let _=0,g=3;function R(T){let y=T[d],N;if(typeof y!="object"||!y||h?N=f(y):Array.isArray(y)?N=y.some(f):y instanceof Date&&(N=f(y.getTime())),m&&(g++,!N&&!R.idFilter&&++_/g*i>p)){let O=Uu(e,r.transaction.getReadTxn(),!1,t),F;R.to?F=O.flatMap(q=>t.primaryStore.get(q)[R.to]):F=O.map(xu);let Z=new Set(F);R.idFilter=q=>Z.has(xu(q)),R.idFilter.idSet=Z}return N}return o(R,"recordFilter"),s&&(R.idFilter=f),R}o(u,"attributeComparator")}function v_(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/Io(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=cb[n]||n,n===As.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Fi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=v_(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*Io(e.indices[i.relationship.from])/(Io(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=Io(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=v8*Io(e.primaryStore)+1;else if(n==="between")r.estimated_count=M8*Io(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=Io(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=D8*Io(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function U_(e,t){if(e)if(No=e,Du.lastIndex=0,F8.test(e))try{if(t&&(t.conditions=[]),ni=t??new vu,Cm(ni,""),vr!==No.length&&Yt("Unable to parse query, unexpected end of query"),ni.parseErrorMessage&&(ni.parseError=new ib(t.parseErrorMessage),!t))throw ni.parseError;return ni}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${vr} in '${No}'`,ni.parseErrorMessage&&(r.message+=", "+ni.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Yt(e){let t=`${e} at position ${vr}`;ni.parseErrorMessage=ni.parseErrorMessage?ni.parseErrorMessage+", "+t:t}function Cm(e,t){let r=Du,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(No);){vr=r.lastIndex;let[,d,f]=n;a?(d&&Yt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Yt(`invalid FIQL operator ${d}`),l=vU):(l=decodeURIComponent,i="equals",d||Yt("attribute must be specified before equality comparator"),s=Mu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=U8[f],l=ob[i]?vU:decodeURIComponent,d||Yt(`attribute must be specified before comparator ${f}`),s=Mu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Yt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Yt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Yt("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&UU(p,d),s===""){let _=e.conditions[e.conditions.length-1];_.chainedConditions=_.chainedConditions||[],_.chainedConditions.push(p),_.operator=u}else M_(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?Yt("conditions/comparisons are not allowed in a property list"):e.push(Mu(d)),s=void 0;break;case"(":Du.lastIndex=vr;let h=Cm(d?[]:new vu,")");switch(d){case"":M_(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:Yt("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":Yt("group by is not implemented yet");case"sort":e.sort=xU(h);break;default:Yt(`unknown query function call ${d}`)}No[vr]===","?r.lastIndex=++vr:a=!0,s=null;break;case"{":e.conditions&&Yt("property sets are not allowed in a queries"),d||Yt("property sets must have a defined parent property name"),Du.lastIndex=vr,m=Cm([],"}"),m.name=d,e.push(m),No[vr]===","?r.lastIndex=++vr:a=!0;break;case"[":if(Du.lastIndex=vr,d?(m=Cm(new vu,"]"),m.name=d):m=Cm(e.conditions?new vu:[],"]"),e.conditions)if(M_(e,u),No[vr]==="="){l=decodeURIComponent,i="equals",s=Mu(d),r.lastIndex=++vr;break}else e.conditions.push(m),s=null;else e.push(m);No[vr]===","?r.lastIndex=++vr: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"&&UU(p,d),M_(e,u),e.conditions.push(p)}else d&&Yt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Mu(d));return e}else Yt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Yt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?H8:Du,r.lastIndex=vr),vr===No.length)return e}t&&Yt(`expected '${t}', but encountered end of string`)}function M_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Yt("Can not mix operators within a condition grouping"):e.operator=t)}function Mu(e){return e.indexOf(".")>-1?e.split(".").map(Mu):decodeURIComponent(e)}function vU(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 Vr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function UU(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Vr.ClientError("wildcard can only be used at the end of a string")}function xU(e){let t=BU(e[0]);return e.length>1&&(t.next=xU(e.slice(1))),t}function BU(e){if(Array.isArray(e)){let t=BU(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}}Yt(`Unknown sort type ${e}`)}function xu(e){return Array.isArray(e)?e.join("\0"):e}function Io(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function k8(e,t,r){return t*r/Io(e)}var Vr,As,Bi,Da,D8,M8,v8,U8,ob,cb,ib,F8,Du,H8,vr,ni,No,vu,x_=ce(()=>{Vr=w(ge()),As=w(Kt()),Bi=require("ordered-binary"),Da=require("lmdb");B_();Jc();D8=.3,M8=.1,v8=.05,U8={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},ob={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(ab,"executeConditions");o(Uu,"searchByIndex");o(Fi,"findAttribute");o(x8,"joinTo");o(B8,"joinFrom");cb={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(Pm,"filterByType");o(v_,"estimateCondition");ib=class extends Vr.Violation{static{o(this,"SyntaxViolation")}},F8=/[()[\]|!<>.]|(=\w*=)/,Du=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,H8=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(U_,"parseQuery");o(Yt,"recordError");o(Cm,"parseBlock");o(M_,"assignOperator");o(Mu,"decodeProperty");o(vU,"typedDecoding");o(UU,"wildcardDecoding");o(xU,"toSortObject");o(BU,"toSortEntry");vu=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(xu,"flattenKey");o(Io,"estimatedEntryCount");o(k8,"intersectionEstimate")});var FU,si,F_=ce(()=>{FU=w(ti());Ma();si=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",Ur)});var $U={};we($U,{MultiPartId:()=>H_,Resource:()=>Ur,contextStorage:()=>Fu,snakeCase:()=>G8,transformForSelect:()=>Hu});function G8(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function HU(e,t){if(rl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(rl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new H_;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){rl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return rl=!0,null;e[e.length-1]==="/"&&(rl=!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 go?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Bu.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 si,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new si,l.id=c,c==null&&(u=!0);l||(l=new si,l.id=c),u&&(l.isCollection=!0);let f;a||(a=Fu.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(_=>Fu.run(a,()=>p(_)),"runAction")),a?.transaction){let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)}else return Ft(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(R=>{if(!R)throw new Bu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(T=>e(_,l,a,T)):e(_,l,a,d)});if(!g)throw new Bu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(_,l,a,g)):e(_,l,a,d)}o(p,"authorizeActionOnResource")}}function Wn(e,t){let r=new Bu.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 lb(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 Hu(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):lb(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(lb(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(lb(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]=Hu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var kU,qU,Bu,GU,Fu,q8,Ur,rl,H_,Ma=ce(()=>{kU=require("crypto");cm();bu();qU=w(ti()),Bu=w(ge());kc();x_();GU=require("async_hooks");F_();Fu=new GU.AsyncLocalStorage,q8={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ur=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(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Hu(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):Wn(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):Wn(t,"patch")},{hasContent:!0,type:"update"});static delete=On(function(t,r,n,s){return t.delete?t.delete(r):Wn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,kU.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Fu.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),Ft(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Wn(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):Wn(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):Wn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=On(function(t,r,n,s){return t.subscribe?t.subscribe(r):Wn(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):Wn(t,"publish")},{hasContent:!0,type:"create"});static search=On(function(t,r,n){let s=t.search?t.search(r):Wn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Hu(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):Wn(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):Wn(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):Wn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Wn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return U_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&q8[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:HU(t,this),isCollection:rl}}let i=HU(t,this);return rl?{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 Kn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Kn}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,qU._assignPackageExport)("Resource",Ur);o(G8,"snakeCase");o(HU,"pathToId");H_=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(On,"transactional");o(Wn,"missingMethod");o(lb,"selectFromObject");o(Hu,"transformForSelect")});var nl,ub=ce(()=>{nl=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 YU={};we(YU,{Resources:()=>k_,keyArrayToString:()=>ku,resetResources:()=>$8,resources:()=>bs});function $8(){return bs=new k_,Le.resources=bs,bs}function ku(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var VU,KU,k_,bs,qu=ce(()=>{kc();ub();VU=w(j()),KU=w(ge());Dr();k_=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 KU.ServerError(`Conflicting paths for ${t}`);VU.default.error(c),i.Resource=new nl(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 Ft(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o($8,"resetResources");o(ku,"keyArrayToString")});function mb(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=zU,V8(e.primaryStore,e.auditStore)):(c=WU,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{jU(WU[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=ku(t);let d=new fb(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 jU(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),QU(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=wt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=ku(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,db.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,db.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 V8(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=zU[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{jU(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function QU(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function JU(e){return e.nextTransaction||(mb({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),QU(e)),e.nextTransaction}var db,WU,zU,fb,hb=ce(()=>{db=w(j());bu();qu();Mi();WU=Object.create(null),zU=Object.create(null);o(mb,"addSubscription");fb=class extends Kn{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(jU,"notifyFromTransactionData");o(V8,"listenToCommits");o(QU,"nextTransaction");o(JU,"whenNextTransaction")});var ZU=M((KOe,XU)=>{"use strict";var pb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};XU.exports=pb});var t0=M((WOe,e0)=>{"use strict";var Eb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};e0.exports=Eb});var Lm=M((jOe,n0)=>{"use strict";var r0=oe(),K8=(H(),v(Y)),{RecordEncoder:Y8}=(Jc(),v(MU));r0.initSync();var W8=r0.get(K8.CONFIG_PARAMS.STORAGE_CACHING)!==!1,_b=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=W8&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Y8})}};n0.exports=_b});var Dm=M((JOe,s0)=>{"use strict";var zn=oe(),Is=(H(),v(Y));zn.initSync();var q_=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=zn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||zn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||zn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",zn.get(Is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=zn.get(Is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),zn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=zn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),zn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=zn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),zn.get(Is.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=zn.get(Is.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=zn.get(Is.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};s0.exports=q_;q_.MAX_DBS=1e4});var Rt=M((ZOe,h0)=>{"use strict";var Sb=require("lmdb"),ii=require("fs-extra"),jn=require("path"),G_=bn(),a0=j(),Cn=tn().LMDB_ERRORS_ENUM,$_=t0(),Tb=Lm(),c0=Dm(),va=Kt(),i0=(H(),v(Y)),{table:z8,resetDatabases:j8}=(Me(),v(_t)),o0=oe(),oi=va.INTERNAL_DBIS_NAME,l0=va.DBI_DEFINITION_NAME,Q8="data.mdb",J8="lock.mdb",Mm=".mdb",X8="-lock",gb=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ns(t,r),this.key_type=this.dbi[va.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[va.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Sb.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function V_(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(V_,"pathEnvNameValidation");async function Rb(e,t,r=!0){try{await ii.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Cn.INVALID_BASE_PATH):n}try{let n=jn.join(e,t+Mm);return await ii.access(n,ii.constants.R_OK|ii.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ii.access(jn.join(e,t,Q8),ii.constants.R_OK|ii.constants.F_OK),jn.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(Rb,"validateEnvironmentPath");function K_(e,t){if(G_.validateEnv(e),t===void 0)throw new Error(Cn.DBI_NAME_REQUIRED)}o(K_,"validateEnvDBIName");async function Z8(e,t,r=!1,n=!1){V_(e,t);let s=jn.basename(e);t=t.toString();let i=o0.get(i0.CONFIG_PARAMS.DATABASES);i||o0.setProperty(i0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Rb(e,t,n),u0(e,t,r)}catch(a){if(a.message===Cn.INVALID_ENVIRONMENT){let c=jn.join(e,t);await ii.mkdirp(n?c:e);let l=new c0(n?c:c+Mm,!1),u=Sb.open(l);u.dbis=Object.create(null);let d=new Tb(!1);u.openDB(oi,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=yb(e,t,r);return u[va.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(Z8,"createEnvironment");async function e5(e,t,r,n=!0){V_(e,t),t=t.toString();let s=jn.join(e,t);return z8({table:t,database:jn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(e5,"copyEnvironment");async function u0(e,t,r=!1){V_(e,t),t=t.toString();let n=yb(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await Rb(e,t),i=jn.join(e,t+Mm),a=s!=i,c=new c0(s,a),l=Sb.open(c);l.dbis=Object.create(null);let u=f0(l);for(let d=0;d<u.length;d++)Ns(l,u[d]);return l[va.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(u0,"openEnvironment");async function t5(e,t,r=!1){V_(e,t),t=t.toString();let n=jn.join(e,t+Mm),s=await Rb(e,t);if(global.lmdb_map!==void 0){let i=yb(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await d0(a),delete global.lmdb_map[i]}}await ii.remove(s),await ii.remove(s===n?s+X8:jn.join(jn.dirname(s),J8))}o(t5,"deleteEnvironment");async function d0(e){G_.validateEnv(e);let t=e[va.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(d0,"closeEnvironment");function yb(e,t,r=!1){let s=`${jn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(yb,"getCachedEnvironmentName");function r5(e){G_.validateEnv(e);let t=Object.create(null),r=Ns(e,oi);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==oi)try{t[n]=Object.assign(new $_,s)}catch{a0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(r5,"listDBIDefinitions");function f0(e){G_.validateEnv(e);let t=[],r=Ns(e,oi);for(let{key:n}of r.getRange({start:!1}))n!==oi&&t.push(n);return t}o(f0,"listDBIs");function n5(e,t){let n=Ns(e,oi).getEntry(t),s=new $_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{a0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(n5,"getDBIDefinition");function m0(e,t,r,n=!r){if(K_(e,t),t=t.toString(),t===oi)throw new Error(Cn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ns(e,t)}catch(s){if(s.message===Cn.DBI_DOES_NOT_EXIST){let i=new Tb(r,n===!0),a=e.openDB(t,i),c=new $_(r===!0,n);return a[l0]=c,Ns(e,oi).putSync(t,c),e.dbis[t]=a,a}throw s}}o(m0,"createDBI");function Ns(e,t){if(K_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==oi?r=n5(e,t):r=new $_,r===void 0)throw new Error(Cn.DBI_DOES_NOT_EXIST);let n;try{let s=new Tb(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[l0]=r,e.dbis[t]=n,n}o(Ns,"openDBI");function s5(e,t){K_(e,t),t=t.toString();let r=Ns(e,t),n=r.getStats();return r[va.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(s5,"statDBI");async function i5(e,t){try{let r=jn.join(e,t+Mm);return(await ii.stat(r)).size}catch{throw new Error(Cn.INVALID_ENVIRONMENT)}}o(i5,"environmentDataSize");function o5(e,t){if(K_(e,t),t=t.toString(),t===oi)throw new Error(Cn.CANNOT_DROP_INTERNAL_DBIS_NAME);Ns(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ns(e,oi).removeSync(t)}o(o5,"dropDBI");function a5(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ns(e,i)}catch(a){if(a.message===Cn.DBI_DOES_NOT_EXIST)m0(e,i,i!==t,i===t),n=!0;else throw a}}n&&j8()}o(a5,"initializeDBIs");h0.exports={openDBI:Ns,openEnvironment:u0,createEnvironment:Z8,listDBIs:f0,listDBIDefinitions:r5,createDBI:m0,dropDBI:o5,statDBI:s5,deleteEnvironment:t5,initializeDBIs:a5,TransactionCursor:gb,environmentDataSize:i5,copyEnvironment:e5,closeEnvironment:d0}});var _0=M((tCe,E0)=>{"use strict";var Ab=Rt(),c5=j(),p0=tn().LMDB_ERRORS_ENUM;E0.exports=l5;async function l5(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 Ab.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==p0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Ab.closeEnvironment(global.lmdb_map[n]),await Ab.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==p0.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){c5.error(t)}}o(l5,"cleanLMDBMap")});var wo=M((nCe,u5)=>{u5.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 ws=M((sCe,T0)=>{var d5=wo(),{promisify:f5}=require("util"),{getDatabases:S0}=(Me(),v(_t));T0.exports={setSchemaDataToGlobal:g0,getTableSchema:m5,getSystemSchema:h5,setSchemaDataToGlobalAsync:f5(g0)};function g0(e){global.hdb_schema=S0(),e&&e()}o(g0,"setSchemaDataToGlobal");function m5(e,t,r){let n=S0()[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(m5,"getTableSchema");function h5(){return d5}o(h5,"getSystemSchema")});var M0=M((aCe,D0)=>{"use strict";var bb=require("recursive-iterator"),p5=require("alasql"),Ib=require("clone"),R0=se(),{handleHDBError:y0,hdbErrors:E5}=ge(),{HDB_ERROR_MSGS:A0,HTTP_STATUS_CODES:b0}=E5,{getDatabases:_5}=(Me(),v(_t)),g5=["DISTINCT_ARRAY"],I0=Symbol("validateTables"),Nb=Symbol("validateTable"),oCe=Symbol("getAllColumns"),N0=Symbol("validateAllColumns"),Y_=Symbol("findColumn"),w0=Symbol("validateOrderBy"),vm=Symbol("validateSegment"),wb=Symbol("validateColumn"),O0=Symbol("setColumnsForTable"),C0=Symbol("checkColumnsForAsterisk"),P0=Symbol("validateGroupBy"),L0=Symbol("hasColumns"),Ob=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[I0](),this[C0](),this[N0]()}[I0](){if(this[L0]()){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)})}}[L0](){let t=!1,r=new bb(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=_5();if(!r[t.databaseid])throw y0(new Error,A0.SCHEMA_NOT_FOUND(t.databaseid),b0.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw y0(new Error,A0.TABLE_NOT_FOUND(t.databaseid,t.tableid),b0.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Ib(s);i.table=Ib(t),this.attributes.push(i)})}[Y_](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)}[C0](){let t=new bb(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[O0](r.tableid)}[O0](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new p5.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[N0](){this[vm](this.statement.columns,!1),this[vm](this.statement.joins,!1),this[vm](this.statement.where,!1),this[P0](this.statement.group,!1),this[vm](this.statement.order,!0)}[vm](t,r){if(!t)return;let n=new bb(t),s=[];for(let{node:i,path:a}of n)!R0.isEmpty(i)&&!R0.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[w0](i):s.push(this[wb](i)));return s}[P0](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&g5.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Ib(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Y_](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[Y_](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((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 '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[w0](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[wb](t)}[wb](t){let r=this[Y_](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]}};D0.exports=Ob});var U0=M((lCe,v0)=>{"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")}};v0.exports=Cb});var B0=M((dCe,x0)=>{"use strict";var Pb=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};x0.exports=Pb});var H0=M((mCe,F0)=>{"use strict";var Lb=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}};F0.exports=Lb});var q0=M((pCe,k0)=>{"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}};k0.exports=Db});var il=M((TCe,V0)=>{"use strict";var S5=Rt(),T5=B0(),R5=H0(),y5=q0(),Hi=bn(),Um=tn().LMDB_ERRORS_ENUM,A5=Kt(),Oo=(H(),v(Y)),b5=se(),I5=require("uuid"),_Ce=require("lmdb"),{handleHDBError:N5,hdbErrors:w5}=ge(),{OVERFLOW_MARKER:gCe,MAX_SEARCH_KEY_LENGTH:SCe}=A5,G0=oe();G0.initSync();var W_=G0.get(Oo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Mb=Oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,sl=Oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function O5(e,t,r,n,s=Hi.getNextMonotonicTime()){Bb(e,t,r,n),vb(e,t,r);let i=new T5,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];$0(u,!0,s);let d=C5(e,t,r,u),f=u[t];a.push(d),c.push(f)}return Ub(a,c,n,i,s)}o(O5,"insertRecords");function C5(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][Oo.FUNC_VAL],n[a]=c)}let l=Hi.getIndexedValues(c),u=e.dbis[a];if(l){W_&&u.prefetch(l.map(d=>({key:d,value:s})),z_);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}W_&&e.dbis[t].prefetch([s],z_),e.dbis[t].put(s,n,n[sl])})}o(C5,"insertRecord");function P5(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(P5,"removeSkippedRecords");function $0(e,t,r){let n=r>0;(n||!Number.isInteger(e[sl]))&&(e[sl]=r||(r=Hi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Mb]))&&(e[Mb]=r||Hi.getNextMonotonicTime()):delete e[Mb]}o($0,"setTimestamps");function vb(e,t,r){r.indexOf(Oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),S5.initializeDBIs(e,t,r)}o(vb,"initializeTransaction");async function L5(e,t,r,n,s=Hi.getNextMonotonicTime()){Bb(e,t,r,n),vb(e,t,r);let i=new R5,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=xb(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return Ub(c,l,n,i,s,a)}o(L5,"updateRecords");async function D5(e,t,r,n,s=Hi.getNextMonotonicTime()){try{Bb(e,t,r,n)}catch(l){throw N5(l,l.message,w5.HTTP_STATUS_CODES.BAD_REQUEST)}vb(e,t,r);let i=new y5,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;b5.isEmpty(u[t])?(d=I5.v4(),u[t]=d):d=u[t];let f=xb(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return Ub(a,c,n,i,s)}o(D5,"upsertRecords");async function Ub(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||Hi.getNextMonotonicTime(),P5(r,i),n}o(Ub,"finalizeWrite");function xb(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($0(r,!d,a),Number.isInteger(r[sl])&&u[sl]>r[sl])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 R=u[p];if(typeof _=="function"){let y=_([[u]]);Array.isArray(y)&&(_=y[0][Oo.FUNC_VAL],r[p]=_)}if(_===R)continue;let T=Hi.getIndexedValues(R);if(T){W_&&g.prefetch(T.map(y=>({key:y,value:n})),z_);for(let y=0,N=T.length;y<N;y++)g.remove(T[y],n)}if(T=Hi.getIndexedValues(_),T){W_&&g.prefetch(T.map(y=>({key:y,value:n})),z_);for(let y=0,N=T.length;y<N;y++)g.put(T[y],n)}}let h={...u,...r};c.put(n,h,h[sl])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(h=>h?!0:xb(e,t,r,n,s,i,a))}o(xb,"updateUpsertRecord");function M5(e,t,r){if(Hi.validateEnv(e),t===void 0)throw new Error(Um.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Um.WRITE_ATTRIBUTES_REQUIRED):new Error(Um.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(M5,"validateBasic");function Bb(e,t,r,n){if(M5(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Um.RECORDS_REQUIRED):new Error(Um.RECORDS_MUST_BE_ARRAY)}o(Bb,"validateWrite");function z_(){}o(z_,"noop");V0.exports={insertRecords:O5,updateRecords:L5,upsertRecords:D5}});var nt=M((yCe,K0)=>{"use strict";var Pn=require("validate.js");Pn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Pn.validators.type.checks[t](e)?null:` must be a '${t}' value`};Pn.validators.type.checks={Object:o(function(e){return Pn.isObject(e)&&!Pn.isArray(e)},"Object"),Array:Pn.isArray,Integer:Pn.isInteger,Number:Pn.isNumber,String:Pn.isString,Date:Pn.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};Pn.validators.hasValidFileExt=function(e,t){return Pn.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};K0.exports={validateObject:v5,validateObjectAsync:U5,validateBySchema:x5};function v5(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Pn(e,t,{format:"flat"});return r?new Error(r):null}o(v5,"validateObject");async function U5(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Pn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(U5,"validateObjectAsync");function x5(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(x5,"validateBySchema")});var W0=M((bCe,Y0)=>{"use strict";var B5=require("uuid"),Fb=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||B5.v4(),this.schema_table=`${this.schema}.${this.table}`}};Y0.exports=Fb});var j_=M((NCe,z0)=>{"use strict";var F5=W0(),Hb=class extends F5{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}};z0.exports=Hb});var Q0=M((OCe,j0)=>{"use strict";j0.exports=k5;var H5="inserted";function k5(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===H5?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(k5,"returnObject")});var Q_=M((LCe,X0)=>{"use strict";var q5=(H(),v(Y)),kb=Rt(),G5=il(),{getSystemSchemaPath:$5,getSchemaPath:V5}=Nt(),PCe=wo(),{validateBySchema:K5}=nt(),xm=require("joi"),Y5=j_(),W5=Q0(),{handleHDBError:z5,hdbErrors:j5,ClientError:Q5}=ge(),J0=se(),{HTTP_STATUS_CODES:J5}=j5,X5="inserted";X0.exports=Z5;async function Z5(e){let t=K5(e,xm.object({database:xm.string(),schema:xm.string(),table:xm.string().required(),attribute:xm.string().required()}));if(t)throw new Q5(t.message);let r=!e.skip_table_check&&J0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw z5(new Error,r,J5.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=J0.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 Y5(e.schema,e.table,e.attribute,e.id);try{let i=await kb.openEnvironment(V5(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);kb.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await kb.openEnvironment($5(),q5.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await G5.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return W5(X5,c,{records:[s]},l)}catch(i){throw i}}o(Z5,"lmdbCreateAttribute")});var qi=M((MCe,tx)=>{"use strict";var ex=se(),Z0=(H(),v(Y)),Gu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ki=require("joi"),Ua={schema_format:{pattern:Gu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},e9=ki.alternatives(ki.string().min(1).max(Ua.schema_length.maximum).pattern(Gu).messages({"string.pattern.base":"{:#label} "+Ua.schema_format.message}),ki.number(),ki.array()).required(),t9=ki.alternatives(ki.string().min(1).max(Ua.schema_length.maximum).pattern(Gu).messages({"string.pattern.base":"{:#label} "+Ua.schema_format.message}),ki.number()),r9=ki.alternatives(ki.string().min(1).max(Ua.schema_length.maximum).pattern(Gu).messages({"string.pattern.base":"{:#label} "+Ua.schema_format.message}),ki.number()).required();function n9(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ua.schema_length.maximum?`'${e}' maximum of 250 characters`:Gu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(n9,"checkValidTable");function s9(e,t){return ex.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(s9,"validateSchemaExists");function i9(e,t){let r=t.state.ancestors[0].schema;return ex.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(i9,"validateTableExists");function o9(e,t){return e.toLowerCase()===Z0.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Z0.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(o9,"validateSchemaName");tx.exports={commonValidators:Ua,schemaRegex:Gu,hdbSchemaTable:e9,validateSchemaExists:s9,validateTableExists:i9,validateSchemaName:o9,checkValidTable:n9,hdbDatabase:t9,hdbTable:r9}});var Gb=M((UCe,nx)=>{var{hdbTable:a9,hdbDatabase:rx}=qi(),c9=nt(),qb=require("joi"),l9={undefined:"undefined",null:"null"},u9=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||l9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),d9=qb.object({database:rx,schema:rx,table:a9,records:qb.array().items(qb.object().custom(u9)).required()});nx.exports=function(e){return c9.validateBySchema(e,d9)}});var Bm=M((FCe,ix)=>{"use strict";var Co=se(),sx=j(),BCe=Gb(),{getDatabases:f9}=(Me(),v(_t)),{ClientError:ol}=ge();ix.exports=m9;function m9(e){if(Co.isEmpty(e))throw new ol("invalid update parameters defined.");if(Co.isEmptyOrZeroLength(e.schema))throw new ol("invalid schema specified.");if(Co.isEmptyOrZeroLength(e.table))throw new ol("invalid table specified.");if(!Array.isArray(e.records))throw new ol("records must be an array");let t=f9()[e.schema]?.[e.table];if(Co.isEmpty(t))throw new ol(`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&&Co.isEmptyOrZeroLength(a[r]))throw sx.error("a valid hash attribute must be provided with update record:",a),new ol("a valid hash attribute must be provided with update record, check log for more info");if(!Co.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw sx.error(`a valid hash value must be provided with ${e.operation} record:`,a),new ol(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Co.isEmpty(a[r])&&a[r]!==""&&n.has(Co.autoCast(a[r]))&&(a.skip=!0),n.add(Co.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(m9,"insertUpdateValidate")});var J_=M((kCe,ax)=>{"use strict";var ox=se(),h9=(H(),v(Y)),p9=j(),E9=Q_(),_9=j_(),g9=Po(),{SchemaEventMsg:S9}=ai(),T9="already exists in";ax.exports=R9;async function R9(e,t,r){if(ox.isEmptyOrZeroLength(r))return r;let n=[];ox.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 y9(e,t.schema,t.name,i)})),s}o(R9,"lmdbCheckForNewAttributes");async function y9(e,t,r,n){let s=new _9(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await A9(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(T9))p9.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(y9,"createNewAttribute");async function A9(e){let t;return t=await E9(e),g9.signalSchemaChange(new S9(process.pid,h9.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(A9,"createAttribute")});var $u=M((GCe,cx)=>{"use strict";var $b=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}};cx.exports=$b});var ux=M((VCe,lx)=>{"use strict";var b9=$u(),I9=(H(),v(Y)).OPERATIONS_ENUM,Vb=class extends b9{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(I9.INSERT,r,n,s,i),this.records=t}};lx.exports=Vb});var fx=M((YCe,dx)=>{"use strict";var N9=$u(),w9=(H(),v(Y)).OPERATIONS_ENUM,Kb=class extends N9{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(w9.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};dx.exports=Kb});var hx=M((zCe,mx)=>{"use strict";var O9=$u(),C9=(H(),v(Y)).OPERATIONS_ENUM,Yb=class extends O9{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(C9.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};mx.exports=Yb});var Ex=M((QCe,px)=>{"use strict";var P9=$u(),L9=(H(),v(Y)).OPERATIONS_ENUM,Wb=class extends P9{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(L9.DELETE,n,s,t,i),this.original_records=r}};px.exports=Wb});var Fm=M((ZCe,Tx)=>{"use strict";var XCe=require("path"),_x=Rt(),D9=ux(),M9=fx(),v9=hx(),U9=Ex(),Vu=Kt(),gx=se(),{CONFIG_PARAMS:x9}=(H(),v(Y)),Sx=oe();Sx.initSync();var X_=(H(),v(Y)).OPERATIONS_ENUM,{getTransactionAuditStorePath:B9}=Nt();Tx.exports=F9;async function F9(e,t){if(Sx.get(x9.LOGGING_AUDITLOG)===!1)return;let r=B9(e.schema,e.table),n=await _x.openEnvironment(r,e.table,!0),s=H9(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){_x.initializeDBIs(n,Vu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Vu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Vu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Vu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),gx.isEmpty(s.user_name)||n.dbis[Vu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Vu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(F9,"writeTransaction");function H9(e,t){let r=gx.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===X_.INSERT)return new D9(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===X_.UPDATE)return new M9(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===X_.UPSERT)return new v9(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===X_.DELETE)return new U9(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(H9,"createTransactionObject")});var zb=M((rPe,Rx)=>{"use strict";var k9=Bm(),tPe=im(),Hm=(H(),v(Y)),q9=om(),G9=il().insertRecords,$9=Rt(),V9=j(),K9=J_(),{getSchemaPath:Y9}=Nt(),W9=Fm();Rx.exports=z9;async function z9(e){try{let{schemaTable:t,attributes:r}=k9(e);q9(e,r,t.hash_attribute),e.schema!==Hm.SYSTEM_SCHEMA_NAME&&(r.includes(Hm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Hm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Hm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Hm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await K9(e.hdb_auth_header,t,r),s=Y9(e.schema,e.table),i=await $9.openEnvironment(s,e.table),a=await G9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await W9(e,a)}catch(c){V9.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(z9,"lmdbCreateRecords")});var bx=M((sPe,Ax)=>{"use strict";var yx=(H(),v(Y)),j9=zb(),Q9=im(),J9=require("fs-extra"),{getSchemaPath:X9}=Nt();Ax.exports=Z9;async function Z9(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Q9(yx.SYSTEM_SCHEMA_NAME,yx.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await j9(r),await J9.mkdirp(X9(e.schema))}o(Z9,"lmdbCreateSchema")});var Nx=M((oPe,Ix)=>{"use strict";var jb=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}};Ix.exports=jb});var Px=M((dPe,Cx)=>{"use strict";var wx=Rt(),Qb=bn(),Jb=tn().LMDB_ERRORS_ENUM,e7=Kt(),Ox=j(),cPe=se(),t7=require("lmdb"),r7=Nx(),n7=(H(),v(Y)),{OVERFLOW_MARKER:lPe,MAX_SEARCH_KEY_LENGTH:uPe}=e7,s7=n7.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function i7(e,t,r,n){if(Qb.validateEnv(e),t===void 0)throw new Error(Jb.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Jb.IDS_REQUIRED):new Error(Jb.IDS_MUST_BE_ITERABLE);try{let s=wx.listDBIs(e);wx.initializeDBIs(e,t,s);let i=new r7,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[s7]>n){i.skipped.push(a);continue}let _=e.dbis[t].ifVersion(a,t7.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let R=s[g];if(!p.hasOwnProperty(R)||R===t)continue;let T=e.dbis[R],y=p[R];if(y!=null)try{let N=Qb.getIndexedValues(y);if(N)for(let O=0,F=N.length;O<F;O++)T.remove(N[O],a)}catch{Ox.warn(`cannot delete from attribute: ${R}, ${y}:${a}`)}}});c.push(_),l.push(a),i.original_records.push(p)}catch(p){Ox.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=Qb.getNextMonotonicTime(),i}catch(s){throw s}}o(i7,"deleteRecords");Cx.exports={deleteRecords:i7}});var km=M((mPe,Dx)=>{"use strict";var Ku=se(),o7=Px(),a7=Rt(),{getSchemaPath:c7}=Nt(),l7=Fm(),u7=j();Dx.exports=d7;async function d7(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ku.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ku.isEmptyOrZeroLength(e.hash_values)&&!Ku.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Ku.isEmpty(l)||e.hash_values.push(l)}}if(Ku.isEmptyOrZeroLength(e.hash_values))return Lx([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ku.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=c7(e.schema,e.table),i=await a7.openEnvironment(s,e.table),a=await o7.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await l7(e,a)}catch(c){u7.error(`unable to write transaction due to ${c.message}`)}return Lx(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(d7,"lmdbDeleteRecords");function Lx(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(Lx,"createDeleteResponse")});var Zb=M((EPe,Mx)=>{"use strict";var f7=(H(),v(Y)),pPe=bn();function Xb(e,t){let r=Object.create(null);if(t.length===1&&f7.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(Xb,"parseRow");function m7(e,t,r,n){let s=Xb(r,e);n.push(s)}o(m7,"searchAll");function h7(e,t,r,n){let s=Xb(r,e);n[t]=s}o(h7,"searchAllToMap");function p7(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(p7,"iterateDBI");function al(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(al,"pushResults");function E7(e,t,r,n,s,i){t.toString().endsWith(e)&&al(t,r,n,s,i)}o(E7,"endsWith");function _7(e,t,r,n,s,i){t.toString().includes(e)&&al(t,r,n,s,i)}o(_7,"contains");function g7(e,t,r,n,s,i){t>e&&al(t,r,n,s,i)}o(g7,"greaterThanCompare");function S7(e,t,r,n,s,i){t>=e&&al(t,r,n,s,i)}o(S7,"greaterThanEqualCompare");function T7(e,t,r,n,s,i){t<e&&al(t,r,n,s,i)}o(T7,"lessThanCompare");function R7(e,t,r,n,s,i){t<=e&&al(t,r,n,s,i)}o(R7,"lessThanEqualCompare");Mx.exports={parseRow:Xb,searchAll:m7,searchAllToMap:h7,iterateDBI:p7,endsWith:E7,contains:_7,greaterThanCompare:g7,greaterThanEqualCompare:S7,lessThanCompare:T7,lessThanEqualCompare:R7,pushResults:al}});var Yu=M((RPe,kx)=>{"use strict";var xa=Rt(),gPe=j(),Qn=bn(),Z_=Kt(),er=tn().LMDB_ERRORS_ENUM,SPe=se(),y7=(H(),v(Y)),eg=Zb(),{parseRow:A7}=eg,TPe=require("lmdb"),{OVERFLOW_MARKER:vx,MAX_SEARCH_KEY_LENGTH:b7}=Z_;function Ux(e,t,r,n=!1,s=void 0,i=void 0){return cl(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(Ux,"iterateFullIndex");function qm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return cl(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(y=>({value:y}))):f.getRange(T)})}o(qm,"iterateRangeBetween");function cl(e,t,r,n){let s=e.database||e,i=xa.openDBI(s,r);i[Z_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&xa.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(cl,"setupTransaction");function xx(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(vx)){if(!s)if(r)s=xa.openDBI(e,r);else{let l=xa.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=xa.openDBI(e,l[u]),!s[Z_.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(xx,"getOverflowCheck");function I7(e,t,r,n=!1,s=void 0,i=void 0){if(Qn.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);return cl(e,t,t,(a,c,l)=>(tg(r),r=Gm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>A7(u.value,r))))}o(I7,"searchAll");function N7(e,t,r,n=!1,s=void 0,i=void 0){if(Qn.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);tg(r),r=Gm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of Ux(e,t,t,n,s,i))a.set(c,eg.parseRow(l,r));return a}o(N7,"searchAllToMap");function w7(e,t,r=!1,n=void 0,s=void 0){if(Qn.validateEnv(e),t===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=Ux(e,void 0,t,r,n,s),c=a.transaction,l=xx(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(w7,"iterateDBI");function O7(e,t){if(Qn.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);return xa.statDBI(e,t).entryCount}o(O7,"countAll");function C7(e,t,r,n,s=!1,i=void 0,a=void 0){return Ba(e,r,n),cl(e,t,r,(c,l,u,d)=>(n=Qn.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(C7,"equals");function P7(e,t,r){return Ba(e,t,r),xa.openDBI(e,t).getValuesCount(r)}o(P7,"count");function L7(e,t,r,n,s=!1,i=void 0,a=void 0){return Ba(e,r,n),cl(e,null,r,(c,l)=>{n=Qn.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(L7,"startsWith");function D7(e,t,r,n,s=!1,i=void 0,a=void 0){return Bx(e,t,r,n,s,i,a,!0)}o(D7,"endsWith");function Bx(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return Ba(e,r,n),cl(e,null,r,(l,u,d,f)=>{let m=xx(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(vx)?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[Z_.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(Bx,"contains");function M7(e,t,r,n,s=!1,i=void 0,a=void 0){Ba(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),qm(e,t,r,n,l,s,i,a,!0,!1)}o(M7,"greaterThan");function v7(e,t,r,n,s=!1,i=void 0,a=void 0){Ba(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),qm(e,t,r,n,l,s,i,a,!1,!1)}o(v7,"greaterThanEqual");function U7(e,t,r,n,s=!1,i=void 0,a=void 0){Ba(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),qm(e,t,r,l,n,s,i,a,!1,!0)}o(U7,"lessThan");function x7(e,t,r,n,s=!1,i=void 0,a=void 0){Ba(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),qm(e,t,r,l,n,s,i,a,!1,!1)}o(x7,"lessThanEqual");function B7(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(Qn.validateEnv(e),r===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(er.START_VALUE_REQUIRED);if(s===void 0)throw new Error(er.END_VALUE_REQUIRED);if(n=Qn.convertKeyValueToWrite(n),s=Qn.convertKeyValueToWrite(s),n>s)throw new Error(er.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return qm(e,t,r,n,s,i,a,c)}o(B7,"between");function F7(e,t,r,n){Qn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(tg(r),r=Gm(s,r),n===void 0)throw new Error(er.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=eg.parseRow(c,r)),a}o(F7,"searchByHash");function H7(e,t,r){Qn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(er.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(H7,"checkHashExists");function k7(e,t,r,n,s=[]){return Hx(e,t,r,n,s),Fx(e,t,r,n,s).map(i=>i[1])}o(k7,"batchSearchByHash");function q7(e,t,r,n,s=[]){Hx(e,t,r,n,s);let i=new Map;for(let[a,c]of Fx(e,t,r,n,s))i.set(a,c);return i}o(q7,"batchSearchByHashToMap");function Fx(e,t,r,n,s=[]){return cl(e,t,t,(i,a,c)=>{r=Gm(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,eg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(Fx,"batchHashSearch");function Hx(e,t,r,n,s){if(Qn.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(tg(r),n==null)throw new Error(er.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(er.IDS_MUST_BE_ITERABLE)}o(Hx,"initializeBatchSearchByHash");function tg(e){if(!Array.isArray(e))throw e===void 0?new Error(er.FETCH_ATTRIBUTES_REQUIRED):new Error(er.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(tg,"validateFetchAttributes");function Ba(e,t,r){if(Qn.validateEnv(e),t===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(er.SEARCH_VALUE_REQUIRED);if(r?.length>b7)throw new Error(er.SEARCH_VALUE_TOO_LARGE)}o(Ba,"validateComparisonFunctions");function Gm(e,t){return t.length===1&&y7.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=xa.listDBIs(e)),t}o(Gm,"setGetWholeRowAttributes");kx.exports={searchAll:I7,searchAllToMap:N7,count:P7,countAll:O7,equals:C7,startsWith:L7,endsWith:D7,contains:Bx,searchByHash:F7,setGetWholeRowAttributes:Gm,batchSearchByHash:k7,batchSearchByHashToMap:q7,checkHashExists:H7,iterateDBI:w7,greaterThan:M7,greaterThanEqual:v7,lessThan:U7,lessThanEqual:x7,between:B7}});var Wu=M((APe,Kx)=>{var qx=require("lodash"),Gx=nt(),Ge=require("joi"),G7=se(),{hdbSchemaTable:$m,checkValidTable:$x,hdbTable:Vx,hdbDatabase:rg}=qi(),{handleHDBError:$7,hdbErrors:V7}=ge(),{getDatabases:K7}=(Me(),v(_t)),{HTTP_STATUS_CODES:Y7}=V7,W7=Ge.object({database:rg,schema:rg,table:Vx,search_attribute:$m,search_value:Ge.any().required(),get_attributes:Ge.array().min(1).items(Ge.alternatives($m,Ge.object())).optional(),desc:Ge.bool(),limit:Ge.number().integer().min(1),offset:Ge.number().integer().min(0)}),z7=Ge.object({database:rg,schema:rg,table:Vx,operator:Ge.string().valid("and","or").default("and").lowercase(),offset:Ge.number().integer().min(0),limit:Ge.number().integer().min(1),get_attributes:Ge.array().min(1).items(Ge.alternatives($m,Ge.object())).optional(),sort:Ge.object({attribute:Ge.alternatives($m,Ge.array().min(1)),descending:Ge.bool().optional()}).optional(),conditions:Ge.array().min(1).items(Ge.alternatives(Ge.object({operator:Ge.string().valid("and","or").default("and").lowercase(),conditions:Ge.array()}),Ge.object({search_attribute:Ge.alternatives($m,Ge.array().min(1)),search_type:Ge.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:Ge.when("search_type",{switch:[{is:"equals",then:Ge.any()},{is:"between",then:Ge.array().items(Ge.alternatives([Ge.string(),Ge.number()])).length(2)}],otherwise:Ge.alternatives(Ge.string(),Ge.number())}).required()}))).required()});Kx.exports=function(e,t){let r=null;switch(t){case"value":r=Gx.validateBySchema(e,W7);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i($x("database",e.schema)),i($x("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=Gx.validateBySchema(e,z7);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=G7.checkGlobalSchemaTable(e.schema,e.table);if(s)return $7(new Error,s,Y7.NOT_FOUND);let a=K7()[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=qx.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!qx.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 eI=M((IPe,Yx)=>{"use strict";var j7=Rt(),Q7=Wu(),{getSchemaPath:J7}=Nt();Yx.exports=X7;function X7(e){let t=Q7(e,"hashes");if(t)throw t;let r=J7(e.schema,e.table);return j7.openEnvironment(r,e.table)}o(X7,"initialize")});var tI=M((wPe,Wx)=>{"use strict";var Z7=Yu(),eee=eI();Wx.exports=tee;async function tee(e){let t=await eee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Z7.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(tee,"lmdbGetDataByHash")});var zu=M((CPe,zx)=>{"use strict";var rI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};zx.exports=rI});var Qx=M((DPe,jx)=>{"use strict";var LPe=zu(),ree=Yu(),nee=eI();jx.exports=see;async function see(e){let t=await nee(e),r=global.hdb_schema[e.schema][e.table];return ree.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(see,"lmdbSearchByHash")});var ci=M((vPe,Jx)=>{"use strict";var nI=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}};Jx.exports=nI});var ng=M((xPe,nB)=>{"use strict";var nn=Yu(),iee=Rt(),oee=se(),$e=Kt(),ll=(H(),v(Y)),aee=wo(),Xx=tn().LMDB_ERRORS_ENUM,{getSchemaPath:cee}=Nt(),Lo=ll.SEARCH_WILDCARDS;async function lee(e,t,r){let n;e.schema===ll.SYSTEM_SCHEMA_NAME?n=aee[e.table]:n=global.hdb_schema[e.schema][e.table];let s=rB(e,n.hash_attribute,r,t);return eB(e,s,n.hash_attribute,r)}o(lee,"prepSearch");async function eB(e,t,r,n){let s=cee(e.schema,e.table),i=await iee.openEnvironment(s,e.table),a=tB(i,e,t,r),c=a.transaction||i;if([$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,$e.SEARCH_TYPES.SEARCH_ALL,$e.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(uee(e,r)===!1){let d=e.search_attribute;if(d===r)return n?Zx(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?Zx(a,f):a.map(f)}let u=e.search_attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?nn.batchSearchByHashToMap(c,r,e.get_attributes,u):nn.batchSearchByHash(c,r,e.get_attributes,u)}o(eB,"executeSearch");function tB(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 $e.SEARCH_TYPES.EQUALS:s=nn.equals(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.CONTAINS:s=nn.contains(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.ENDS_WITH:case $e.SEARCH_TYPES._ENDS_WITH:s=nn.endsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.STARTS_WITH:case $e.SEARCH_TYPES._STARTS_WITH:s=nn.startsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return nn.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case $e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return nn.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case $e.SEARCH_TYPES.SEARCH_ALL:return nn.searchAll(e,n,t.get_attributes,a,c,l);case $e.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return nn.searchAllToMap(e,n,t.get_attributes,a,c,l);case $e.SEARCH_TYPES.BETWEEN:s=nn.between(e,i,t.search_attribute,t.search_value,t.end_value,a,c,l);break;case $e.SEARCH_TYPES.GREATER_THAN:case $e.SEARCH_TYPES._GREATER_THAN:s=nn.greaterThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.GREATER_THAN_EQUAL:case $e.SEARCH_TYPES._GREATER_THAN_EQUAL:s=nn.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.LESS_THAN:case $e.SEARCH_TYPES._LESS_THAN:s=nn.lessThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case $e.SEARCH_TYPES.LESS_THAN_EQUAL:case $e.SEARCH_TYPES._LESS_THAN_EQUAL:s=nn.lessThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;default:return Object.create(null)}return s}o(tB,"searchByType");function Zx(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(Zx,"createMapFromIterable");function uee(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(uee,"checkToFetchMore");function rB(e,t,r,n){if(oee.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),Lo.indexOf(s)>-1)return r===!0?$e.SEARCH_TYPES.SEARCH_ALL_TO_MAP:$e.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Lo[0])<0&&s.indexOf(Lo[1])<0)return c===!0?r===!0?$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:$e.SEARCH_TYPES.EQUALS;if(Lo.indexOf(i)>=0&&Lo.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),$e.SEARCH_TYPES.CONTAINS;if(Lo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),$e.SEARCH_TYPES.ENDS_WITH;if(Lo.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),$e.SEARCH_TYPES.STARTS_WITH;if(s.includes(Lo[0])||s.includes(Lo[1]))return $e.SEARCH_TYPES.EQUALS;throw new Error(Xx.UNKNOWN_SEARCH_TYPE)}else switch(n){case ll.VALUE_SEARCH_COMPARATORS.BETWEEN:return $e.SEARCH_TYPES.BETWEEN;case ll.VALUE_SEARCH_COMPARATORS.GREATER:return $e.SEARCH_TYPES.GREATER_THAN;case ll.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return $e.SEARCH_TYPES.GREATER_THAN_EQUAL;case ll.VALUE_SEARCH_COMPARATORS.LESS:return $e.SEARCH_TYPES.LESS_THAN;case ll.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return $e.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Xx.UNKNOWN_SEARCH_TYPE)}}o(rB,"createSearchTypeFromSearchObject");nB.exports={executeSearch:eB,createSearchTypeFromSearchObject:rB,prepSearch:lee,searchByType:tB}});var iB=M((HPe,sB)=>{"use strict";var FPe=ci(),dee=Wu(),fee=se(),mee=(H(),v(Y)),hee=ng();sB.exports=pee;function pee(e,t){if(!fee.isEmpty(t)&&mee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=dee(e,"value");if(n)throw n;return hee.prepSearch(e,t,!0)}o(pee,"lmdbGetDataByValue")});var Vm=M((GPe,oB)=>{"use strict";var qPe=ci(),Eee=Wu(),_ee=se(),gee=(H(),v(Y)),See=ng();oB.exports=Tee;async function Tee(e,t){if(!_ee.isEmpty(t)&&gee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Eee(e,"value");if(n)throw n;return See.prepSearch(e,t,!1)}o(Tee,"lmdbSearchByValue")});var cB=M((KPe,aB)=>{"use strict";var VPe=Kt(),sI=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}},iI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},oI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};aB.exports={SearchByConditionsObject:sI,SearchCondition:iI,SortAttribute:oI}});var mB=M((jPe,fB)=>{"use strict";var WPe=cB().SearchByConditionsObject,Ree=ci(),yee=Wu(),aI=Yu(),sg=Kt(),{Resource:zPe}=(Ma(),v($U)),dB=ng(),Aee=Zb(),bee=require("lodash"),{getSchemaPath:Iee}=Nt(),lB=Rt(),{handleHDBError:Nee,hdbErrors:wee}=ge(),{HTTP_STATUS_CODES:Oee}=wee,Cee=1e8;fB.exports=Pee;async function Pee(e){let t=yee(e,"conditions");if(t)throw Nee(t,t.message,Oee.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=Iee(e.schema,e.table),n=await lB.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)lB.openDBI(n,u.search_attribute);let i=bee.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===sg.SEARCH_TYPES.EQUALS?u.estimated_count=aI.count(n,u.search_attribute,u.search_value):d===sg.SEARCH_TYPES.CONTAINS||d===sg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=Cee}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await uB(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(dB.filterByType),f=d.length,m=aI.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=>Aee.parseRow(h,m))}else{for(let f=1;f<i.length;f++){let m=i[f],h=await uB(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=aI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(Pee,"lmdbSearchByConditions");async function uB(e,t,r,n){let s=new Ree(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===sg.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,dB.searchByType(e,s,i,n).map(a=>a.value)}o(uB,"executeConditionSearch")});var ju=M((JPe,hB)=>{"use strict";var Lee=(H(),v(Y)).OPERATIONS_ENUM,cI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=Lee.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};hB.exports=cI});var lI=M((ZPe,yB)=>{"use strict";var gB=ci(),SB=ju(),TB=Vm(),RB=km(),Ln=(H(),v(Y)),pB=se(),EB=Rt(),{getTransactionAuditStorePath:Dee,getSchemaPath:Mee}=Nt(),_B=j();yB.exports=vee;async function vee(e){try{if(pB.isEmpty(global.hdb_schema[e.schema])||pB.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Uee(e),await xee(e);let t=Mee(e.schema,e.table);try{await EB.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")_B.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Dee(e.schema,e.table);await EB.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")_B.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(vee,"lmdbDropTable");async function Uee(e){let t=new gB(Ln.SYSTEM_SCHEMA_NAME,Ln.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await TB(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 SB(Ln.SYSTEM_SCHEMA_NAME,Ln.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await RB(s)}o(Uee,"deleteAttributesFromSystem");async function xee(e){let t=new gB(Ln.SYSTEM_SCHEMA_NAME,Ln.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await TB(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 SB(Ln.SYSTEM_SCHEMA_NAME,Ln.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await RB(s)}catch(i){throw i}}o(xee,"dropTableFromSystem")});var bB=M((tLe,AB)=>{"use strict";var Bee=require("fs-extra"),Fee=ci(),Hee=zu(),kee=ju(),qee=lI(),Gee=km(),$ee=tI(),Vee=Vm(),Do=(H(),v(Y)),{getSchemaPath:Kee}=Nt(),{handleHDBError:Yee,hdbErrors:Wee}=ge(),{HDB_ERROR_MSGS:zee,HTTP_STATUS_CODES:jee}=Wee;AB.exports=Qee;async function Qee(e){let t;try{t=await Jee(e.schema);let r=new Fee(Do.SYSTEM_SCHEMA_NAME,Do.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Do.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Do.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Vee(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await qee(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new kee(Do.SYSTEM_SCHEMA_NAME,Do.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Gee(s);let i=Kee(t);await Bee.remove(i)}catch(r){throw r}}o(Qee,"lmdbDropSchema");async function Jee(e){let t=new Hee(Do.SYSTEM_SCHEMA_NAME,Do.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Do.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await $ee(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw Yee(new Error,zee.SCHEMA_NOT_FOUND(e),jee.NOT_FOUND,void 0,void 0,!0);return n}o(Jee,"validateDropSchema")});var Qu=M((nLe,IB)=>{"use strict";var uI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};IB.exports=uI});var fI=M((oLe,NB)=>{"use strict";var Xee=require("fs-extra"),ig=Rt(),{getTransactionAuditStorePath:Zee}=Nt(),dI=Kt(),iLe=Qu();NB.exports=ete;async function ete(e){let t;try{let r=Zee(e.schema,e.table);await Xee.mkdirp(r),t=await ig.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{ig.createDBI(t,dI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ig.createDBI(t,dI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ig.createDBI(t,dI.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(ete,"createTransactionsAuditEnvironment")});var CB=M((lLe,OB)=>{"use strict";var mI=(H(),v(Y)),wB=Rt(),tte=il(),{getSystemSchemaPath:rte,getSchemaPath:nte}=Nt(),cLe=wo(),ste=Q_(),hI=j_(),ite=j(),ote=fI();OB.exports=ate;async function ate(e,t){let r=nte(t.schema,t.table),n=new hI(t.schema,t.table,mI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new hI(t.schema,t.table,mI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new hI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await wB.createEnvironment(r,t.table),e!==void 0){let a=await wB.openEnvironment(rte(),mI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await tte.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 pI(n),await pI(s),await pI(i)}await ote(t)}catch(a){throw a}}o(ate,"lmdbCreateTable");async function pI(e){try{await ste(e)}catch(t){ite.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(pI,"createAttribute")});var LB=M((dLe,PB)=>{"use strict";var cte=Bm(),lte=om(),ute=J_(),Km=(H(),v(Y)),dte=il().updateRecords,fte=Rt(),{getSchemaPath:mte}=Nt(),hte=Fm(),pte=j();PB.exports=Ete;async function Ete(e){try{let{schemaTable:t,attributes:r}=cte(e);lte(e,r,t.hash_attribute),e.schema!==Km.SYSTEM_SCHEMA_NAME&&(r.includes(Km.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Km.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Km.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Km.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await ute(e.hdb_auth_header,t,r),s=mte(e.schema,e.table),i=await fte.openEnvironment(s,e.table),a=await dte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await hte(e,a)}catch(c){pte.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(Ete,"lmdbUpdateRecords")});var MB=M((mLe,DB)=>{"use strict";var _te=(H(),v(Y)).OPERATIONS_ENUM,EI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=_te.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};DB.exports=EI});var UB=M((ELe,vB)=>{"use strict";var pLe=MB(),gte=Bm(),Ste=om(),Tte=J_(),Ym=(H(),v(Y)),Rte=il().upsertRecords,yte=Rt(),{getSchemaPath:Ate}=Nt(),bte=Fm(),Ite=j(),{handleHDBError:Nte,hdbErrors:wte}=ge();vB.exports=Ote;async function Ote(e){let t;try{t=gte(e)}catch(l){throw Nte(l,l.message,wte.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Ste(e,n,r.hash_attribute),e.schema!==Ym.SYSTEM_SCHEMA_NAME&&(n.includes(Ym.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Ym.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Ym.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Ym.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Tte(e.hdb_auth_header,r,n),i=Ate(e.schema,e.table),a=await yte.openEnvironment(i,e.table),c=await Rte(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await bte(e,c)}catch(l){Ite.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(Ote,"lmdbUpsertRecords")});var BB=M((gLe,xB)=>{"use strict";var _I=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};xB.exports=_I});var HB=M((TLe,FB)=>{"use strict";var gI=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}};FB.exports=gI});var GB=M((ALe,qB)=>{"use strict";var SI=Rt(),{getTransactionAuditStorePath:Cte}=Nt(),yLe=BB(),Wm=Kt(),Pte=se(),kB=HB(),Lte=require("util").promisify,Dte=Lte(setTimeout),Mte=1e4,vte=100;qB.exports=Ute;async function Ute(e){let t=Cte(e.schema,e.table),r=await SI.openEnvironment(t,e.table,!0),n=SI.listDBIs(r);SI.initializeDBIs(r,Wm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new kB;do s=await xte(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 Dte(vte);while(s.transactions_deleted>0);return i}o(Ute,"deleteAuditLogsBefore");async function xte(e,t){let r=new kB;try{let n=e.dbis[Wm.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[Wm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Pte.isEmpty(c)||(s=e.dbis[Wm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[Wm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Mte)break}return await s,r}catch(n){throw n}}o(xte,"deleteTransactions")});var VB=M((ILe,$B)=>{"use strict";var TI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};$B.exports=TI});var YB=M((OLe,KB)=>{"use strict";var Bte=ci(),Fte=ju(),wLe=VB(),Gi=(H(),v(Y)),Hte=se(),RI=Rt(),kte=wo(),qte=Vm(),Gte=km(),{getSchemaPath:$te}=Nt();KB.exports=Vte;async function Vte(e,t=!0){let r;e.schema===Gi.SYSTEM_SCHEMA_NAME?r=kte[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Yte(e),s=$te(e.schema,e.table),i=await RI.openEnvironment(s,e.table);return t===!0&&await Kte(e,i,r.hash_attribute),RI.dropDBI(i,e.attribute),n}o(Vte,"lmdbDropAttribute");async function Kte(e,t,r){let n=RI.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(Kte,"removeAttributeFromAllObjects");async function Yte(e){let t=new Bte(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await qte(t)).filter(a=>a[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Hte.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(a=>a[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Fte(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Gte(i)}o(Yte,"dropAttributeFromSystem")});var XB=M((LLe,JB)=>{"use strict";var yI=Rt(),Ju=Kt(),PLe=bn(),AI=(H(),v(Y)),WB=se(),{getTransactionAuditStorePath:Wte}=Nt(),zte=Yu(),og=$u(),jte=j();JB.exports=Qte;async function Qte(e){let t=Wte(e.schema,e.table),r=await yI.openEnvironment(t,e.table,!0),n=yI.listDBIs(r);yI.initializeDBIs(r,Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case AI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return zB(r,e.search_values);case AI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Xte(r,e.search_values,s);case AI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Jte(r,e.search_values);default:return zB(r)}}o(Qte,"readAuditLog");function zB(e,t=[0,Date.now()]){WB.isEmpty(t[0])&&(t[0]=0),WB.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new og,s))}o(zB,"searchTransactionsByTimestamp");function Jte(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Ju.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,QB(e,i))}return Object.fromEntries(r)}o(Jte,"searchTransactionsByUsername");function Xte(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=zte.equals(e,Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ju.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=QB(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);jB(l,"records",r,d,a),jB(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(Xte,"searchTransactionsByHashValues");function jB(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 og(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new og(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(jB,"loopRecords");function QB(e,t){let r=[];try{let n=e.dbis[Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new og,i);r.push(a)}}catch(i){jte.warn(i)}return r}catch(n){throw n}}o(QB,"batchSearchTransactions")});var eF=M((ULe,ZB)=>{"use strict";var{getSchemaPath:MLe}=Nt(),vLe=Rt(),{database:Zte}=(Me(),v(_t));ZB.exports={writeTransaction:ere};async function ere(e,t,r){return Zte({database:e,table:t}).transaction(r)}o(ere,"writeTransaction")});var sF=M((BLe,nF)=>{"use strict";var{getSchemaPath:tF}=Nt(),rF=Rt();nF.exports={flush:tre,resetReadTxn:rre};async function tre(e,t){return(await rF.openEnvironment(tF(e,t),t.toString())).flushed}o(tre,"flush");async function rre(e,t){try{(await rF.openEnvironment(tF(e,t),t.toString())).resetReadTxn()}catch{}}o(rre,"resetReadTxn")});var cF=M((HLe,aF)=>{"use strict";var{Readable:nre}=require("stream"),{getDatabases:sre}=(Me(),v(_t)),{readSync:ire,openSync:ore,createReadStream:iF}=require("fs"),{open:are}=require("lmdb"),oF=Lm(),cre=Dm(),{AUDIT_STORE_OPTIONS:lre}=(Mi(),v(OU)),{INTERNAL_DBIS_NAME:ure,AUDIT_STORE_NAME:dre}=Kt();aF.exports=mre;var bI=32768,fre=100;async function mre(e){let t=e.database||e.schema||"data",r=sre()[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=are({noSync:!0,maxDbs:cre.MAX_DBS}),m,h=f.openDB(ure,new oF(!1)),p=d.useReadTransaction(),_=0,g=o(async function(T,y){y.encoding="binary",y.encoder=void 0;let N=f.openDB(T,y),O=d.openDB(T,y);for(let{key:F,version:Z,value:q}of O.getRange({start:null,transaction:p,versions:O.useVersions}))m=N.put(F,q,Z),_++%fre===0&&(await new Promise(W=>setTimeout(W,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:T,value:y}of d.getRange({transaction:p,start:!1}))if(s.some(N=>T.startsWith?.(N+"/"))){h.put(T,y);let[,N]=T.split("/"),O=!N,F=new oF(!O,O);await g(T,F)}e.include_audit&&await g(dre,{...lre}),await m;let R=iF(f.path);return R.headers=l(),R.on("close",()=>{p.done(),f.close()}),R}let a=r[Object.keys(r)[0]].primaryStore,c=ore(a.path);return a.transaction(()=>{let u=Buffer.alloc(bI);ire(c,u,0,bI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=iF(null,{fd:c,start:bI}),m=new nre.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(mre,"getBackup")});var dF=M((qLe,uF)=>{"use strict";var hre=j(),{handleHDBError:pre}=ge(),Ere=U0(),_re=Q_(),gre=zb(),Sre=bx(),Tre=km(),Rre=tI(),yre=Qx(),Are=iB(),bre=Vm(),Ire=mB(),Nre=bB(),wre=CB(),Ore=LB(),Cre=UB(),Pre=GB(),Lre=lI(),Dre=YB(),Mre=XB(),vre=eF(),lF=sF(),Ure=cF(),II=class extends Ere{static{o(this,"LMDBBridge")}async searchByConditions(t){return Ire(t)}async getDataByHash(t){return await Rre(t)}async searchByHash(t){return await yre(t)}async getDataByValue(t,r){return await Are(t,r)}async searchByValue(t){return await bre(t)}async createSchema(t){return await Sre(t)}async dropSchema(t){return await Nre(t)}async createTable(t,r){return await wre(t,r)}async dropTable(t){return await Lre(t)}async createAttribute(t){return await _re(t)}async createRecords(t){return await gre(t)}async updateRecords(t){return await Ore(t)}async upsertRecords(t){try{return await Cre(t)}catch(r){throw pre(r,null,null,hre.ERR,r)}}async deleteRecords(t){return await Tre(t)}async dropAttribute(t){return await Dre(t)}async deleteAuditLogsBefore(t){return await Pre(t)}async readAuditLog(t){return await Mre(t)}writeTransaction(t,r,n){return vre.writeTransaction(t,r,n)}flush(t,r){return lF.flush(t,r)}resetReadTxn(t,r){return lF.resetReadTxn(t,r)}getBackup(t){return Ure(t)}};uF.exports=II});function Dn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function jm(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 Jn.ClientError(`${u} must be a string, attempt to assign ${m}`);Dn(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 Jn.ClientError(`${u} must be a string, attempt to assign ${m}`);Dn(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 Jn.ClientError(`${u} must be a number, attempt to assign ${h}`);Dn(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 Jn.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Dn(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 Jn.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Dn(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 Jn.ClientError(`${u} must be a number, attempt to assign ${m}`);Dn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new Jn.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Dn(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 Jn.ClientError(`${u} must be a Date, attempt to assign ${m}`);Dn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new Jn.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Dn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof Rs||m==null&&l.nullable!==!1))throw new Jn.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Dn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Dn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new Jn.ClientError(`${u} must be an object, attempt to assign ${m}`);Dn(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 Jn.ClientError("Can not add a property to a sealed table schema");Dn(this)[l]=u}),a("deleteProperty",function(l){Dn(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?hF:mF);break}c=l}while(c&&c!==mF&&c!==hF)}function pF(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(fF[t])return fF[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 xre(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 dl{static{o(this,"TrackedObject")}},jm(r,t)),new r(e)):new dl(e);case Array:let n=new cg(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 lg(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=lg(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 fl(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=fl(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=IA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=fl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Bre.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function ag(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[ul]||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(ag(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(ag(s))return!0}else return!0}else return!0}}return!1}var Jn,fF,mF,hF,dl,Bre,ul,cg,zm,wI=ce(()=>{Jn=w(ge());s_();Yn();o(Dn,"getChanges");o(jm,"assignTrackedAccessors");fF=Object.prototype,mF=new Proxy({},{get:pF}),hF=new Proxy({},{get:pF,set:xre});o(pF,"getProxiedProperty");o(xre,"setProxiedProperty");o(NI,"trackObject");dl=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}};jm(dl,{},!0);o(lg,"collapseData");Bre=Object.prototype.hasOwnProperty;o(fl,"updateAndFreeze");o(ag,"hasChanges");ul=Symbol.for("has-array-changes"),cg=class extends Array{static{o(this,"TrackedArray")}#e;[ul];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[ul]=!0,super.splice(...t)}push(...t){return this[ul]=!0,super.push(...t)}pop(){return this[ul]=!0,super.pop()}unshift(...t){return this[ul]=!0,super.unshift(...t)}shift(){return this[ul]=!0,super.shift()}};cg.prototype.constructor=Array;zm=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var AF={};we(AF,{ResourceBridge:()=>PI});function LI({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 EF(e,t){let r=$i(e),n=LI(e,r);if(!r)throw new li.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;Ft(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&&lg(d)}catch(f){d={message:(0,yF.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 $i(e){let t=e.database||e.schema||Hre,r=it()[t];if(!r)throw(0,li.handleHDBError)(new Error,Fre.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function _F(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*gF(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 SF,ug,li,TF,OI,CI,RF,yF,Fre,Hre,kre,qre,PI,bF=ce(()=>{SF=w(dF()),ug=w(Wu()),li=w(ge());Me();TF=w(Bm());H();OI=w(Po()),CI=w(ai()),RF=w(se());kc();wI();yF=w(j()),{HDB_ERROR_MSGS:Fre}=li.hdbErrors,Hre="data",kre=1e4,qre=10,PI=class extends SF.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,ug.default)(t,"conditions");if(r)throw(0,li.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=$i(t);if(!n)throw new li.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:LI(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 li.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}]}je({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await $i(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=$i(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 $i(t).dropTable()}createSchema(t){return Xu({database:t.schema,table:null}),OI.signalSchemaChange(new CI.SchemaEventMsg(process.pid,G.CREATE_SCHEMA,t.schema))}async dropSchema(t){await DI(t.schema),OI.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,TF.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),Ft(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=lg(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),Ft(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 _F(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=it()[t.schema][t.table];if(!r.createdTimeProperty)throw new li.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:GE.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,RF.asyncSetTimeout)(qre),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%kre===0&&await u();return l.length>0&&await u(),s?_F(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,ug.default)(t,"hashes");if(r)throw r;return EF(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of EF(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&aA[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,ug.default)(t,"value");if(n)throw n;let s=$i(t);if(!s)throw new li.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===GE.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:LI(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=$i(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){$i({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return $i(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=$i(t),n={};switch(t.search_type){case $E.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 $E.USERNAME:{let s=t.search_values;for await(let i of gF(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return gF(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(LI,"getSelect");o(EF,"getRecords");o($i,"getTable");o(_F,"createDeleteResponse");o(gF,"groupRecordsInHistory")});var Xn=M((XLe,IF)=>{"use strict";var{ResourceBridge:Gre}=(bF(),v(AF)),$re=oe();$re.initSync();var dg;function Vre(){return dg||(dg=new Gre,dg)}o(Vre,"getBridge");IF.exports=Vre()});var CF=M((eDe,OF)=>{"use strict";var NF=require("lodash"),Qm=require("mathjs"),Kre=require("jsonata"),wF=se();OF.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?NF.uniqWith(e,NF.isEqual):e,"distinct_array"),searchJSON:Yre,mad:Jm.bind(null,Qm.mad),mean:Jm.bind(null,Qm.mean),mode:Jm.bind(null,Qm.mode),prod:Jm.bind(null,Qm.prod),median:Jm.bind(null,Qm.median)};function Jm(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(Jm,"aggregateFunction");function Yre(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(wF.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),wF.isEmpty(this.__ala__.res[r])){let n=Kre(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(Yre,"searchJSON")});var LF=M((rDe,PF)=>{"use strict";var ur=require("moment"),MI="YYYY-MM-DDTHH:mm:ss.SSSZZ";ur.suppressDeprecationWarnings=!0;PF.exports={current_date:o(()=>ur().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>ur().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return ur(e).utc().format("YYYY");case"month":return ur(e).utc().format("MM");case"day":return ur(e).utc().format("DD");case"hour":return ur(e).utc().format("HH");case"minute":return ur(e).utc().format("mm");case"second":return ur(e).utc().format("ss");case"millisecond":return ur(e).utc().format("SSS");default:break}},"extract"),date:o(e=>ur(e).utc().format(MI),"date"),date_format:o((e,t)=>ur(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>ur(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>ur(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=ur(e).utc(),s=ur(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>ur().utc().valueOf(),"now"),get_server_time:o(()=>ur().format(MI),"get_server_time"),offset_utc:o((e,t)=>ur(e).utc().utcOffset(t).format(MI),"offset_utc")}});var UF=M((sDe,vF)=>{"use strict";var Wre=require("@turf/area"),zre=require("@turf/length"),jre=require("@turf/circle"),Qre=require("@turf/difference"),Jre=require("@turf/distance"),Xre=require("@turf/boolean-contains"),Zre=require("@turf/boolean-equal"),ene=require("@turf/boolean-disjoint"),tne=require("@turf/helpers"),DF=(H(),v(Y)),Ke=se(),Mo=j();vF.exports={geoArea:rne,geoLength:nne,geoCircle:sne,geoDifference:ine,geoDistance:MF,geoNear:one,geoContains:ane,geoEqual:cne,geoCrosses:lne,geoConvert:une};function rne(e){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return Wre.default(e)}catch(t){return Mo.trace(t,e),NaN}}o(rne,"geoArea");function nne(e,t){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return zre.default(e,{units:t||"kilometers"})}catch(r){return Mo.trace(r,e),NaN}}o(nne,"geoLength");function sne(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return jre.default(e,t,{units:r||"kilometers"})}catch(n){return Mo.trace(n,e,t),NaN}}o(sne,"geoCircle");function ine(e,t){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return Qre(e,t)}catch(r){return Mo.trace(r,e,t),NaN}}o(ine,"geoDifference");function MF(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return Jre.default(e,t,{units:r||"kilometers"})}catch(n){return Mo.trace(n,e,t),NaN}}o(MF,"geoDistance");function one(e,t,r,n){if(Ke.isEmpty(e)||Ke.isEmpty(t))return!1;if(Ke.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return MF(e,t,n)<=r}catch(s){return Mo.trace(s,e,t),!1}}o(one,"geoNear");function ane(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return Xre.default(e,t)}catch(r){return Mo.trace(r,e,t),!1}}o(ane,"geoContains");function cne(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return Zre.default(e,t)}catch(r){return Mo.trace(r,e,t),!1}}o(cne,"geoEqual");function lne(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return!ene.default(e,t)}catch(r){return Mo.trace(r,e,t),!1}}o(lne,"geoCrosses");function une(e,t,r){if(Ke.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ke.isEmpty(t))throw new Error("geo_type is required");if(Ke.isEmpty(DF.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(DF.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ke.autoCastJSON(e)),tne[t](e,r)}o(une,"geoConvert")});var fg=M((oDe,xF)=>{var ml=CF(),Zn=LF(),Vi=UF();xF.exports=e=>{e.aggr.mad=e.aggr.MAD=ml.mad,e.aggr.mean=e.aggr.MEAN=ml.mean,e.aggr.mode=e.aggr.MODE=ml.mode,e.aggr.prod=e.aggr.PROD=ml.prod,e.aggr.median=e.aggr.MEDIAN=ml.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ml.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ml.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Zn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Zn.current_time,e.fn.extract=e.fn.EXTRACT=Zn.extract,e.fn.date=e.fn.DATE=Zn.date,e.fn.date_format=e.fn.DATE_FORMAT=Zn.date_format,e.fn.date_add=e.fn.DATE_ADD=Zn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Zn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Zn.date_diff,e.fn.now=e.fn.NOW=Zn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Zn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Zn.get_server_time,e.fn.getdate=e.fn.GETDATE=Zn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Zn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Vi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Vi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Vi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Vi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Vi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Vi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Vi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Vi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Vi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Vi.geoNear}});var kF=M((aDe,HF)=>{"use strict";var Xm=require("lodash"),Mn=require("alasql");Mn.options.cache=!1;var dne=fg(),BF=require("clone"),mg=require("recursive-iterator"),Fe=j(),Ze=se(),Zu=Xn(),fne=(H(),v(Y)),{hdbErrors:mne}=ge(),{getDatabases:FF}=(Me(),v(_t)),hne="IS NULL",ui="There was a problem performing this search. Please check the logs and try again.";dne(Mn);var vI=class{static{o(this,"SQLSearch")}constructor(t,r){if(Ze.isEmpty(t))throw Fe.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(),Ze.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Ze.isEmptyOrZeroLength(n))return Fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Fe.error(n),new Error(ui)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Fe.error(n),new Error(ui)}if(Object.keys(this.data).length===0)return Fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Fe.error("Error thrown from processJoins in SQLSearch class method search."),Fe.error(n),new Error(ui)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Fe.error(n),new Error(ui)}try{return t=await this._finalSQL(),t}catch(n){throw Fe.error("Error thrown from finalSQL in SQLSearch class method search."),Fe.error(n),new Error(ui)}}_getColumns(){let t=new mg(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(BF(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Xm.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=FF()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(Ze.isEmpty(this.statement.where)){Fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new mg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ze.isEmpty(r)&&r.right)if(Ze.isNotEmptyAndHasValue(r.right.value)){let n=Ze.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Mn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Ze.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Mn.yy.LogicValue({value:i}):n instanceof Mn.yy.StringValue&&Ze.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Mn.yy.NumValue({value:i}))});if(t){Fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new mg(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(!Ze.isEmpty(fne.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ze.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(Ze.isEmptyOrZeroLength(r.left.columnid)||Ze.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(Ze.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"=":!Ze.isEmpty(r.right.value)||!Ze.isEmpty(r.left.value)?n.add(Ze.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(Ze.isEmptyOrZeroLength(this.all_table_attributes)&&Ze.isEmptyOrZeroLength(this.statement.from)&&Ze.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&&Xm.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(Ze.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Ze.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(Ze.isEmptyOrZeroLength(this.all_table_attributes)&&!Ze.isEmptyOrZeroLength(this.columns.columns))return t;if(Ze.isEmptyOrZeroLength(this.all_table_attributes)&&Ze.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Mn.promise(r)}catch(r){throw Fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Fe.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(BF(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(Ze.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(hne)>-1&&this.tables.forEach(s=>{let i={columnid:FF()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Xm.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),!Ze.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!Ze.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await Zu.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 Fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Fe.error(d),new Error(ui)}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 Zu.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 Fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Fe.error(d),new Error(ui)}else if(!Ze.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Ze.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 Zu.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 Fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Fe.error(d),new Error(ui)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await Zu.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 Fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Fe.error(d),new Error(ui)}}}_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 Mn.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 Mn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Mn.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 Mn.yy.FuncValue:new Mn.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 Mn.promise(p,t),t=null}catch(h){throw Fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Fe.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),_=Xm.difference(p,[...h.keys].map(g=>g.toString()));for(let g=0,R=_.length;g<R;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 mg(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=Xm.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 Fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Fe.error(i),new Error(ui)}}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 Zu.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 Fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Fe.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();Fe.trace(`Final SQL: ${s}`),n=await Mn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Fe.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 Fe.error(mne.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Fe.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 Zu.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 Fe.error("There was an error when processing this SQL operation. Check your logs"),Fe.error(a),new Error(ui)}}return Object.values(Object.values(this.data)[0].__mergedData)}};HF.exports=vI});var sn=M((lDe,qF)=>{"use strict";var pne=M0();qF.exports={searchByConditions:_ne,searchByHash:gne,searchByValue:Sne,search:Tne};var UI=Xn(),{transformReq:xI}=se(),Ene=kF();async function _ne(e){return xI(e),UI.searchByConditions(e)}o(_ne,"searchByConditions");async function gne(e){xI(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of UI.searchByHash(e))r&&t.push(r);return t}o(gne,"searchByHash");async function Sne(e){xI(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of UI.searchByValue(e))t.push(r);return t}o(Sne,"searchByValue");function Tne(e,t){try{let r=new pne(e);r.validate(),new Ene(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(Tne,"search")});var Ki=M((dDe,KF)=>{"use strict";var Zm=require("crypto"),Rne=oe(),{CONFIG_PARAMS:yne}=(H(),v(Y)),$F="aes-256-cbc",Ane=32,bne=16,BI=64,VF=32,Ine=BI+VF,GF=new Map;KF.exports={encrypt:Nne,decrypt:wne,createNatsTableStreamName:One};function Nne(e){let t=Zm.randomBytes(Ane),r=Zm.randomBytes(bne),n=Zm.createCipheriv($F,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(Nne,"encrypt");function wne(e){let t=e.substr(0,BI),r=e.substr(BI,VF),n=e.substr(Ine,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=Zm.createDecipheriv($F,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(wne,"decrypt");function One(e,t){let r=Rne.get(yne.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=GF.get(r);return n||(n=Zm.createHash("md5").update(r).digest("hex"),GF.set(r,n)),n}o(One,"createNatsTableStreamName")});var vo=M((hDe,jF)=>{"use strict";var mDe=sn(),eh=j(),{validateBySchema:YF}=nt(),hl=require("joi"),Cne=Ki(),hg=se(),{handleHDBError:pg,hdbErrors:Pne,ClientError:WF}=ge(),{HDB_ERROR_MSGS:Eg,HTTP_STATUS_CODES:FI}=Pne,zF=oe();zF.initSync();var{getDatabases:HI}=(Me(),v(_t)),Lne=require("fs-extra"),Dne=(H(),v(Y));jF.exports={describeAll:Mne,describeTable:_g,describeSchema:vne};async function Mne(e={}){try{let t=hg.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=HI(),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 _g({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 _g({schema:f,table:h,exactCount:u},_)}p&&l.push(p)}catch(p){eh.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 eh.error("Got an error in describeAll"),eh.error(t),pg(new Error,Eg.DESCRIBE_ALL_ERR)}}o(Mne,"describeAll");async function _g(e,t){hg.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=YF(e,hl.object({database:hl.string(),table:hl.string().required(),exact_count:hl.boolean().strict()}));if(i)throw new WF(i.message);let c=HI()[r];if(!c)throw pg(new Error,Eg.SCHEMA_NOT_FOUND(e.schema),FI.NOT_FOUND);let l=c[n];if(!l)throw pg(new Error,Eg.TABLE_NOT_FOUND(e.schema,e.table),FI.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 Lne.stat(l.primaryStore.env.path)).size}catch(h){eh.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")),zF.get(Dne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Cne.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){eh.warn(`unable to stat table dbi due to ${h}`)}return m}o(_g,"descTable");async function vne(e){hg.transformReq(e);let t=YF(e,hl.object({database:hl.string(),exact_count:hl.boolean().strict()}));if(t)throw new WF(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=HI()[n];if(!i)throw pg(new Error,Eg.SCHEMA_NOT_FOUND(e.schema),FI.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),hg.isEmpty(l)||l.describe){let u=await _g({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(vne,"describeSchema")});var on=M((EDe,ZF)=>{"use strict";var Sg=Gb(),Kr=se(),Une=require("util"),Tg=Xn(),xne=ws(),QF=j(),{handleHDBError:pl,hdbErrors:Bne}=ge(),{HTTP_STATUS_CODES:El}=Bne,Fne=Une.promisify(xne.getTableSchema),Hne="updated",JF="inserted",XF="upserted";ZF.exports={insert:qne,update:Gne,upsert:$ne,validation:kne,flush:Vne};async function kne(e){if(Kr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Kr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Kr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Fne(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&&Kr.isEmptyOrZeroLength(c[n]))throw QF.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(!Kr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw QF.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Kr.isEmpty(c[n])&&c[n]!==""&&s.has(Kr.autoCast(c[n]))&&(c.skip=!0),s.add(Kr.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(kne,"validation");async function qne(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Sg(e);if(t)throw pl(new Error,t.message,El.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,El.BAD_REQUEST);let n=await Tg.createRecords(e);return gg(JF,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(qne,"insertData");async function Gne(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Sg(e);if(t)throw pl(new Error,t.message,El.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,El.BAD_REQUEST);let n=await Tg.updateRecords(e);return Kr.isEmpty(n.existing_rows)?gg(Hne,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):gg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Gne,"updateData");async function $ne(e){if(e.operation!=="upsert")throw pl(new Error,"invalid operation, must be upsert",El.INTERNAL_SERVER_ERROR);let t=Sg(e);if(t)throw pl(new Error,t.message,El.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,El.BAD_REQUEST);let n=await Tg.upsertRecords(e);return gg(XF,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o($ne,"upsertData");function gg(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===JF?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===XF?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(gg,"returnObject");function Vne(e){return Kr.transformReq(e),Tg.flush(e.schema,e.table)}o(Vne,"flush")});var qI=M((gDe,rH)=>{var Kne=nt(),kI=require("joi"),{hdbTable:Yne,hdbDatabase:eH}=qi(),tH={schema:eH,database:eH,table:Yne},Wne={date:kI.date().iso().required()},zne={timestamp:kI.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};rH.exports=function(e,t){let r=t==="timestamp"?{...tH,...zne}:{...tH,...Wne},n=kI.object(r);return Kne.validateBySchema(e,n)}});var iH=M((SDe,sH)=>{var jne=nt(),GI=require("joi"),{hdbTable:Qne,hdbDatabase:nH}=qi(),Jne=GI.object({schema:nH,database:nH,table:Qne,hash_values:GI.array().required(),ids:GI.array()});sH.exports=function(e){return jne.validateBySchema(e,Jne)}});var YI=M((TDe,oH)=>{"use strict";var $I=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}},VI=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}},KI=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};oH.exports={InsertObject:$I,NoSQLSeachObject:VI,DeleteResponseObject:KI}});var ka=M((yDe,dH)=>{"use strict";var cH=qI(),Xne=iH(),_l=se(),aH=require("moment"),lH=j(),{promisify:Zne,callbackify:ese}=require("util"),gl=(H(),v(Y)),tse=ws(),WI=Zne(tse.getTableSchema),zI=Xn(),{DeleteResponseObject:rse}=YI(),{handleHDBError:Fa,hdbErrors:nse}=ge(),{HDB_ERROR_MSGS:Rg,HTTP_STATUS_CODES:Ha}=nse,sse="records successfully deleted",ise=ese(uH);dH.exports={delete:ise,deleteRecord:uH,deleteFilesBefore:ose,deleteAuditLogsBefore:ase};async function ose(e){let t=cH(e,"date");if(t)throw Fa(t,t.message,Ha.BAD_REQUEST,void 0,void 0,!0);if(_l.transformReq(e),!aH(e.date,aH.ISO_8601).isValid())throw Fa(new Error,Rg.INVALID_DATE,Ha.BAD_REQUEST,gl.LOG_LEVELS.ERROR,Rg.INVALID_DATE,!0);let n=_l.checkSchemaTableExist(e.schema,e.table);if(n)throw Fa(new Error,n,Ha.NOT_FOUND,gl.LOG_LEVELS.ERROR,n,!0);let s=await zI.deleteRecordsBefore(e);if(await WI(e.schema,e.table),lH.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(ose,"deleteFilesBefore");async function ase(e){let t=cH(e,"timestamp");if(t)throw Fa(t,t.message,Ha.BAD_REQUEST,void 0,void 0,!0);if(_l.transformReq(e),isNaN(e.timestamp))throw Fa(new Error,Rg.INVALID_VALUE("Timestamp"),Ha.BAD_REQUEST,gl.LOG_LEVELS.ERROR,Rg.INVALID_VALUE("Timestamp"),!0);let r=_l.checkSchemaTableExist(e.schema,e.table);if(r)throw Fa(new Error,r,Ha.NOT_FOUND,gl.LOG_LEVELS.ERROR,r,!0);let n=await zI.deleteAuditLogsBefore(e);return await WI(e.schema,e.table),lH.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(ase,"deleteAuditLogsBefore");async function uH(e){e.ids&&(e.hash_values=e.ids);let t=Xne(e);if(t)throw Fa(t,t.message,Ha.BAD_REQUEST,void 0,void 0,!0);_l.transformReq(e);let r=_l.checkSchemaTableExist(e.schema,e.table);if(r)throw Fa(new Error,r,Ha.NOT_FOUND,gl.LOG_LEVELS.ERROR,r,!0);try{await WI(e.schema,e.table);let n=await zI.deleteRecords(e);return _l.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${sse}`),n}catch(n){if(n.message===gl.SEARCH_NOT_FOUND_MESSAGE){let s=new rse;return s.message=gl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(uH,"deleteRecord")});var yg={};we(yg,{HASH_FUNCTION:()=>xr,hash:()=>JI,validate:()=>XI});function jI(e=rh){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(th.randomBytes(e)).map(r=>t[r%t.length]).join("")}function JI(e,t=xr[mH?.toUpperCase()]??xr.SHA256){return QI[t](e)}function XI(e,t,r=xr[mH?.toUpperCase()]??xr.SHA256){return e?cse[r](e,t):!1}var th,ed,fH,mH,rh,hH,xr,QI,cse,Ag=ce(()=>{th=w(require("node:crypto")),ed=w(require("argon2")),fH=w(oe());H();mH=(0,fH.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),rh=16,hH=9,xr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(jI,"generateSalt");QI={[xr.MD5]:(e,t=void 0)=>{t=t??jI(hH);let r=th.createHash(xr.MD5).update(e+t).digest("hex");return t+r},[xr.SHA256]:(e,t=void 0)=>{t=t??jI(rh);let r=th.createHash(xr.SHA256).update(e+t).digest("hex");return t+r},[xr.ARGON2ID]:async e=>{let t=jI(rh),r=await ed.hash(e,{type:ed.argon2id,salt:Buffer.from(t)});return t+r}},cse={[xr.MD5]:(e,t)=>{let r=e.slice(0,hH);return e===QI[xr.MD5](t,r)},[xr.SHA256]:(e,t)=>{let r=e.slice(0,rh);return e===QI[xr.SHA256](t,r)},[xr.ARGON2ID]:async(e,t)=>await ed.verify(e.slice(rh),t)};o(JI,"hash");o(XI,"validate")});var EH=M((NDe,pH)=>{var ZI=nt(),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 lse(e){return an.password.presence=!0,an.username.presence=!0,an.role.presence=!0,an.active.presence=!0,ZI.validateObject(e,an)}o(lse,"addUserValidation");function use(e){return an.password.presence=!1,an.username.presence=!0,an.role.presence=!1,an.active.presence=!1,ZI.validateObject(e,an)}o(use,"alterUserValidation");function dse(e){return an.password.presence=!1,an.username.presence=!0,an.role.presence=!1,an.active.presence=!1,ZI.validateObject(e,an)}o(dse,"dropUserValidation");pH.exports={addUserValidation:lse,alterUserValidation:use,dropUserValidation:dse}});var mt=M((CDe,gH)=>{"use strict";var{platform:ODe}=require("os"),fse="nats-server.zip",eN="nats-server",mse=process.platform==="win32"?`${eN}.exe`:eN,hse=/^[^\s.,*>]+$/,_H="__request__",pse=o(e=>`${e}.${_H}`,"REQUEST_SUBJECT"),Ese={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},_se={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},gse={HUB:"hub.pid",LEAF:"leaf.pid"},Sse={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Tse={SUCCESS:"success",ERROR:"error"},Rse={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},yse={TXN:"txn",MSGID:"msgid"},td={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Ase={[td.ERR]:1,[td.WRN]:2,[td.INF]:3,[td.DBG]:4,[td.TRC]:5},bse={debug:"-D",trace:"-DVV"};gH.exports={NATS_SERVER_ZIP:fse,NATS_SERVER_NAME:eN,NATS_BINARY_NAME:mse,PID_FILES:gse,NATS_CONFIG_FILES:_se,SERVER_SUFFIX:Sse,NATS_TERM_CONSTRAINTS_RX:hse,REQUEST_SUFFIX:_H,UPDATE_REMOTE_RESPONSE_STATUSES:Tse,CLUSTER_STATUS_STATUSES:Rse,REQUEST_SUBJECT:pse,SUBJECT_PREFIXES:yse,MSG_HEADERS:Ese,LOG_LEVELS:td,LOG_LEVEL_FLAGS:bse,LOG_LEVEL_HIERARCHY:Ase}});var tN=M(cn=>{"use strict";var Ise={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
11
+ `},"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()}});nU={type:"application/json",serializeStream:um,serialize:dm,deserialize:e8,q:.5};nn.set("*/*",nU);nn.set("",nU);o(e8,"tryJSONParse");o(mm,"registerContentHandlers");t8=(0,tU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=c_(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(c_,"findBestSerializer");Qv=MA.default.get(U.HTTP_COMPRESSIONTHRESHOLD);o(hm,"serialize");o(wa,"serializeMessage");o(BA,"asyncSerialization");o(FA,"hasAsyncSerialization");o(r8,"streamToBuffer");n8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(s8,"isBufferEncoding");o(i8,"parseContentType");o(Ro,"getDeserializer");o(o8,"deserializerUnknownType");o(a8,"transformIterable");o(a_,"toCsvStream")});var E_={};Oe(E_,{Blob:()=>Rs,blobsWereEncoded:()=>Kc,cleanupOrphans:()=>R8,databasePaths:()=>kA,decodeBlobsWithWrites:()=>p_,decodeFromDatabase:()=>bo,decodeWithBlobCallback:()=>gm,deleteBlob:()=>f_,deleteBlobsInObject:()=>Ca,deleteRootBlobPathsForDB:()=>$A,encodeBlobsAsBuffers:()=>g8,encodeBlobsWithFilePath:()=>h_,findBlobsInObject:()=>Vc,getFileId:()=>m_,getFilePathForBlob:()=>mU,getRootBlobPathsForDB:()=>Cu,isSaving:()=>f8,saveBlob:()=>_m,setDeletionDelay:()=>d8,startPreCommitBlobsForRecord:()=>VA});function dU(){}function f_(e){let t=mU(e);t&&setTimeout(()=>{(0,Ge.unlink)(t,r=>{r&&Ht.default.debug?.("Error trying to remove blob file",r)})},fU)}function d8(e){fU=e}function _m(e,t=!1){let r=Mr.get(e);if(!r)r={storageIndex:0,fileId:null,store:Nn},Mr.set(e,r);else{if(r.fileId)return r;r.store=Nn}return r.deleteOnFailure=t,h8(r),r.source?HA(e,r.source,r):r.contentBuffer?m8(e,r):HA(e,Oa.Readable.from(e.stream()),r),r}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,Ge.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(p(e.size)),m=!0);let h;a?(m||f.write(l8),h=(0,d_.createDeflate)(),(0,Oa.pipeline)(t,h,f,_)):(m||f.write(c8),(0,Oa.pipeline)(t,f,_));function p(g){let y=BigInt(g),T=new Uint8Array(Ar),R=new DataView(T.buffer);return y|=BigInt(a?GA:uU)<<48n,R.setBigInt64(0,y),T}o(p,"createHeader");function _(g){let y=f.fd;if(g){if(i.unlock(d,0),y&&((0,Ge.close)(y),f.fd=null),r.deleteOnFailure)(0,Ge.unlink)(n,T=>{T&&Ht.default.debug?.("Error while deleting aborted blob file",T)});else try{if((0,Ge.statSync)(n).size===0){let T=Buffer.from(g.toString());(0,Ge.writeFile)(n,Buffer.concat([p(BigInt(T.length)+0xff000000000000n),T]),R=>{R&&Ht.default.debug?.("Error write error message to blob file",R)})}}catch(T){Ht.default.debug?.("Error checking blob file after abort",T)}u(g)}else{if(!m){m=!0;let T=h?h.bytesWritten:f.bytesWritten-Ar;e.size=T,(0,Ge.write)(y,p(T),0,Ar,0,_);return}i.unlock(d,0),c?(0,Ge.fdatasync)(y,T=>{T&&u(T),l(),(0,Ge.close)(y),f.fd=null}):(l(),(0,Ge.close)(y),f.fd=null)}}o(_,"finished")}),e}function m_(e){return Mr.get(e)?.fileId}function f8(e){return Mr.get(e)?.saving}function mU(e){let t=Mr.get(e);return t?.fileId&&Ou(t)}function Cu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=kA.get(e);if(!t){if(!e.databaseName)return Ht.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,Em.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,xi.join)(n,e.databaseName)):t=[(0,xi.join)((0,Em.getHdbBasePath)(),"blobs",e.databaseName)],kA.set(e,t)}return t}async function $A(e){let t=Cu(e);t&&await Promise.all(t.map(r=>hU(r)))}async function hU(e){if((0,Ge.existsSync)(e)){for(let t of await(0,wn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await hU((0,xi.join)(e,t.name));else try{await(0,wn.unlink)((0,xi.join)(e,t.name))}catch(r){Ht.default.warn?.("Error deleting file",r)}try{await(0,wn.rmdir)(e)}catch(t){Ht.default.warn?.("Error deleting directory",t)}}}function Ou({storageIndex:e,fileId:t,store:r}){let n=Cu(r);return(0,xi.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 m8(e,t){let r=t.contentBuffer,n=r.length;if(!(n<lU))return e.size=n,HA(e,Oa.Readable.from([r]),t)}function h8(e){let t=Cu(e.store),r=p8(),n=t?.length>1?E8(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Ou(e),a=(0,xi.dirname)(i);(0,Ge.existsSync)(a)||(0,qA.ensureDirSync)(a),e.filePath=i}function p8(){let e=aU.get(Nn);if(!e){let t=0,r=Cu(Nn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,Ge.existsSync)(n))for(let c of(0,Ge.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,xi.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Nn.getUserSharedBuffer("blob-file-id",e.buffer)),aU.set(Nn,e)}return Number(Atomics.add(e,0,1n))}function E8(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(u_);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,_8(e)),e.frequencyTable[t%u_]}async function _8(e){if(!wn.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,wn.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,qA.ensureDirSync)(s),a=await(0,wn.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(u_),n=t.map(s=>1/s);for(let s=0;s<u_;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 h_(e,t,r){Iu=t,Nn=r,Kc=!1;try{return e()}finally{Iu=void 0,Nn=void 0}}function g8(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 p_(e,t,r){try{Gr=[],Ao=r,Nn=t,e()}catch(s){throw Ao=void 0,Gr=void 0,s}Ao=void 0;let n=Gr.length<2?Gr[0]:Promise.all(Gr);return Gr=void 0,n}function gm(e,t,r){Nn=r;try{return Ao=t,e()}finally{Ao=void 0}}function bo(e,t){return Nn=t,e()}function Ca(e){Vc(e,t=>{f_(t)})}function Vc(e,t){if(e instanceof Rs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Vc(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Vc(e[r],t)}}function VA(e,t){let r=[];for(let n in e){let s=e[n];s instanceof wu&&s.saveBeforeCommit&&r.push(s)}if(r.length>0)return()=>(Nn=t,Promise.all(r.map(n=>_m(n,!0).saving??Promise.resolve())))}function T8(){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""}}}async function R8(e,t){let r,n,s=0;for(let d in e){let f=e[d];if(r=f.primaryStore.rootStore,n=f.auditStore,n)break}let i=new Set,a=Cu(r);if(a)for(let d of a)await c(d);return await l(),Ht.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,Ge.existsSync)(d))return;for(let f of await(0,wn.readdir)(d,{withFileTypes:!0})){let m=(0,xi.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Ht.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let h=(0,cU.getHeapStatistics)();h.used_heap_size>h.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Ht.default.error?.("Error searching path for blobs",d,f)}}o(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,Em.get)(U.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Ht.default.warn?.("Checking for references to potential orphaned blobs in table",m);let h=e[m];for(let p of h.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{p.metadataFlags&$r&&p.value&&u(p.value),d++%f===0?await(0,Nu.setTimeout)(1):await(0,Nu.setImmediate)()}catch(_){Ht.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",_)}}Ht.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:m}of n.getRange({start:1,snapshot:!1,lazy:!0}))try{let h=wt(m),p=n.tableStores[h.tableId],_=p?.getEntry(h.recordId);(!_||_.version!==h.version||!_.value)&&u(h.getValue(p)),d++%f===0?await(0,Nu.setTimeout)(1):await(0,Nu.setImmediate)()}catch(h){Ht.default.error?.("Error searching audit log for references to potential orphaned blobs failed",h)}Ht.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,wn.unlink)(m)}catch(h){Ht.default.warn?.("Error deleting file",h)}Ht.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}o(l,"removePathsThatAreNotReferenced");function u(d){Vc(d,f=>{if(f instanceof wu){let m=Mr.get(f);if(m.fileId!=null){let h=Ou(m);i.has(h)&&i.delete(h)}}})}o(u,"checkObjectForReferences")}var Ui,wn,Ge,d_,Oa,qA,Em,xi,Ht,cU,Nu,lU,Ar,uU,GA,iU,c8,l8,oU,Mr,Ao,Rs,Iu,Gr,Nn,Kc,pm,l_,u8,wu,fU,kA,aU,u_,S8,Yn=le(()=>{Ui=require("msgpackr"),wn=require("node:fs/promises"),Ge=require("node:fs"),d_=require("node:zlib"),Oa=require("node:stream"),qA=require("fs-extra"),Em=w(ae());H();xi=require("path"),Ht=w(ri());yo();Mi();cU=require("node:v8"),Nu=require("node:timers/promises"),lU=8192,Ar=8,uU=0,GA=1,iU=255,c8=new Uint8Array([0,uU,255,255,255,255,255,255]),l8=new Uint8Array([0,GA,255,255,255,255,255,255]),oU=0xffffffffffff,Mr=new WeakMap,Rs=global.Blob||T8(),Kc=!1,pm=new Uint8Array(8),l_=new DataView(pm.buffer),u8=6e4;o(dU,"InstanceOfBlobWithNoConstructor");dU.prototype=Rs.prototype;wu=class e extends dU{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Mr.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):(FA()&&BA(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=Mr.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=Ou(t),a,c=o(async()=>{let l,u=Ar;try{if(l=await(0,wn.readFile)(i),l.length>=Ar){l.copy(pm,0,0,Ar);let f=l_.getBigUint64(0);if(Number(f>>48n)===iU)throw new Error("Error in blob: "+l.subarray(Ar));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<oU&&(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 for ${i}`);return new Promise((p,_)=>{if(m.attemptLock(h,0,()=>(a=!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]===GA?new Promise((f,m)=>{(0,d_.deflate)(l.subarray(Ar),(h,p)=>{h?m(h):f(d(p))})}):d(l.subarray(Ar))},"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=Mr.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=Ou(t),a,c=0,l=0,u,d,f,m=!1,h=this;return new ReadableStream({start(){let _=1e3,g=o((y,T)=>{(0,Ge.open)(i,"r",(R,N)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Ht.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(C=>C(R))}else a=N,y(N)})},"openFile");return new Promise(g)},pull:o(_=>{let g=0,y=100;return new Promise(o(function T(R,N){function C(j){(0,Ge.close)(a),clearTimeout(d),u&&u.close(),N(j),h.#e?.forEach(F=>F(j))}o(C,"onError");let q=Buffer.allocUnsafe(262144);(0,Ge.read)(a,q,0,q.length,c,(j,F,$)=>{if(l+=F,j)return C(j);if(c===0){if(F<Ar){y-- >0&&f!==!1?(p(),Ht.default.debug?.("File was empty, waiting for data to be written",i,y),setTimeout(()=>T(R,N),20).unref()):(Ht.default.debug?.("File was empty, throwing error",i,y),C(new Error(`Blob ${t.fileId} was empty`)));return}$.copy(pm,0,0,Ar);let J=l_.getBigUint64(0);if(Number(J>>48n)===iU)return C(new Error("Error in blob: "+$.subarray(Ar,F)));if(g=Number(J&0xffffffffffffn),g<oU&&h.size!==g&&(h.size=g,h.#t))for(let K of h.#t)K(g);$=$.subarray(Ar,F),l-=Ar}else if(F===0){let J=Buffer.allocUnsafe(8);return(0,Ge.read)(a,J,0,Ar,0,K=>{if(K)return C(K);if(pm.set(J),g=Number(l_.getBigUint64(0)&0xffffffffffffn),g>l){p()?u?d=setTimeout(()=>{C(new Error(`File read timed out reading from ${i}`))},u8).unref():(u=(0,Ge.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,T(R,N))}),T(R,N)):m?C(new Error("Blob is incomplete")):(m=!0,T(R,N));return}(0,Ge.close)(a),_.close(),R()})}else $=$.subarray(0,F);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=F,T(R,N);s&&l>=s&&(l>s&&($=$.subarray(0,s-c)),l=g=s),n&&n>c&&($=$.subarray(n-c))}c+=F;try{_.enqueue($)}catch(J){return Ht.default.debug?.("Error enqueuing chunk",J),R()}l===g&&((0,Ge.close)(a),_.close()),R()})},"readMore"))},"pull"),cancel(){(0,Ge.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}),f||_.unlock(g,0)}return f}}slice(t,r,n){let s=Mr.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};Mr.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)};Mr.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(){return this.saveBeforeCommit=!0,Promise.resolve()}get written(){return Mr.get(this)?.saving??Promise.resolve()}},fU=500;o(f_,"deleteBlob");o(d8,"setDeletionDelay");global.createBlob=function(e,t){let r=new wu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Mr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Oa.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Oa.Readable.from(e);else throw new Error("Invalid source type");return r};o(_m,"saveBlob");o(HA,"writeBlobWithStream");o(m_,"getFileId");o(f8,"isSaving");o(mU,"getFilePathForBlob");kA=new Map;o(Cu,"getRootBlobPathsForDB");o($A,"deleteRootBlobPathsForDB");o(hU,"rimrafSteadily");o(Ou,"getFilePath");o(m8,"writeBlobWithBuffer");o(h8,"generateFilePath");aU=new Map;o(p8,"getNextFileId");u_=128;o(E8,"getNextStorageIndex");o(_8,"createFrequencyTableForStoragePaths");o(h_,"encodeBlobsWithFilePath");o(g8,"encodeBlobsAsBuffers");o(p_,"decodeBlobsWithWrites");o(gm,"decodeWithBlobCallback");o(bo,"decodeFromDatabase");o(Ca,"deleteBlobsInObject");o(Vc,"findBlobsInObject");o(VA,"startPreCommitBlobsForRecord");S8=new Ui.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Ui.addExtension)({Class:Rs,type:11,unpack:o(function(e){let t=S8.unpack(e),r=new wu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Mr.set(r,{storageIndex:t[1],fileId:t[2],store:Nn}),Ao)return Ao(r)??r;if(!Nn)throw new Error("No store specified, cannot load blob from storage")}else Mr.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=Mr.get(e);if(Iu!==void 0&&(Kc=!0,t?.recordId!==void 0&&t.recordId!==Iu))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<lU)return r.size=t.contentBuffer.length,(0,Ui.pack)([r,t.contentBuffer])}if(Iu!==void 0){if(t=_m(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Iu,(0,Ui.pack)([r,t.storageIndex,t.fileId])}if(t){if(Ao)return Ao(e),(0,Ui.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,Ge.readFileSync)(Ou(t));if(n.length>=Ar&&(n.copy(pm,0,0,Ar),Number(l_.getBigUint64(0)&0xffffffffffffn)===n.length-Ar))return Buffer.concat([(0,Ui.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,Ui.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(T8,"polyfillBlob");o(R8,"cleanupOrphans")});var SU={};Oe(SU,{onStorageReclamation:()=>Sm,runReclamationHandlers:()=>zA,setAvailableSpaceRatioGetter:()=>A8});function Sm(e,t,r){(r||(0,g_.getWorkerIndex)()===(0,g_.getWorkerCount)()-1)&&(__.has(e)||__.set(e,[]),__.get(e).push({priority:0,handler:t}),WA||(WA=setTimeout(zA,EU).unref()))}async function zA(){for(let[e,t]of __)try{let r=await gU(e),n=y8/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&&(YA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){YA.default.error?.("Error running storage reclamation handlers",r)}WA=setTimeout(zA,EU).unref()}function A8(e){gU=e??_U}var KA,g_,YA,S_,pU,__,y8,EU,WA,_U,gU,T_=le(()=>{KA=require("node:fs/promises"),g_=w(ze()),YA=w(ri());H();S_=w(ae()),pU=w(ie());S_.default.initSync();__=new Map,y8=S_.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,EU=(0,pU.convertToMS)(S_.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Sm,"onStorageReclamation");_U=o(async e=>{if(KA.statfs){let t=await(0,KA.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),gU=_U;o(zA,"runReclamationHandlers");o(A8,"setAvailableSpaceRatioGetter")});var DU={};Oe(DU,{ACTION_32_BIT:()=>I_,ACTION_64_BIT:()=>w8,AUDIT_STORE_OPTIONS:()=>ym,Decoder:()=>Wc,HAS_BLOBS:()=>$r,HAS_CURRENT_RESIDENCY_ID:()=>zc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Im,HAS_ORIGINATING_OPERATION:()=>bm,HAS_PREVIOUS_RESIDENCY_ID:()=>jc,REMOTE_SEQUENCE_UPDATE:()=>N_,createAuditEntry:()=>Qc,getLastRemoved:()=>I8,openAuditStore:()=>A_,readAuditEntry:()=>wt,removeAuditEntry:()=>b_,setAuditRetention:()=>N8,transactionKeyEncoder:()=>OU});function A_(e){let t=e.auditStore=e.openDB(jA.AUDIT_STORE_NAME,{create:!1,...ym});t||(t=e.auditStore=e.openDB(jA.AUDIT_STORE_NAME,ym),RU(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=JA;Sm(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()-QA/(1+i*i)})){try{m=b_(t,p,_)}catch(g){Pu.warn("Error removing audit entry",g)}if(h=p,await new Promise(setImmediate),++f>=b8){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,QA/10):(RU(t,h),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Rm.getWorkerIndex)()===(0,Rm.getWorkerCount)()-1&&c(),(0,Rm.getWorkerIndex)()===0&&!TU)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(TU=!0,Pu.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 b_(e,t,r){let n=O8(r),s;if(n&$r){s=wt(r);let i=e.tableStores[s.tableId];if(i){let a=s.type==="message"?null:i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&bo(()=>Ca(s.getValue(i)),i.rootStore)}}if((n&15)===XA){s=s||wt(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 RU(e,t){ZA[0]=t,e.put(Symbol.for("last-removed"),CU)}function I8(e){let t=e.get(Symbol.for("last-removed"));if(t)return CU.set(t),ZA[0]}function N8(e,t=JA){QA=e,JA=t}function Qc(e,t,r,n,s,i,a,c,l,u,d,f,m){let h=PU[a];if(!h)throw new Error(`Invalid audit entry type ${a}`);let p=1;if(n&&(n>1?Pa.setFloat64(0,n):ys.set(eb),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}y(s),y(t),g(r),Pa.setFloat64(p,e),p+=8,l&zc&&y(u),l&jc&&y(d),l&Im&&(Pa.setFloat64(p,f),p+=8),l&bm&&y(LU[m]),i?g(i):ys[p++]=0,l?Pa.setUint32(n?8:0,h|l|3221225472):ys[n?8:0]=h;let _=ys.subarray(0,p);if(c)return Buffer.concat([_,c]);return _;function g(T){let R=p;p+=1,p=(0,Yc.writeKey)(T,ys,p);let N=p-R-1;N>127?N>16383?(Pu.error("Key or username was too large for audit entry",T),p=R+1,ys[R]=0):(ys.copyWithin(R+2,R+1,p),Pa.setUint16(R,N|32768),p++):ys[R]=N}function y(T){T<128?ys[p++]=T:T<16384?(Pa.setUint16(p,T|32768),p+=2):T<1056964608?(Pa.setUint32(p,T|3221225472),p+=4):(ys[p]=255,Pa.setUint32(p+1,T),p+=5)}}function O8(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 Wc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function wt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Wc(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&zc&&(m=n.readInt()),i&jc&&(h=n.readInt()),i&Im&&(p=n.readFloat64()),i&bm){let R=n.readInt();_=LU[R]}l=n.readInt();let g=n.position,y=n.position+=l,T;return{type:PU[i&7],tableId:c,nodeId:a,get recordId(){return(0,Yc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return y>g?(0,Yc.readKey)(e,g,y):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(R,N,C){if(i&R_||i&Tm&&!N)return T||(T=bo(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),T;if(i&Tm&&C)return wA(R.getEntry(this.recordId),C,R)},getBinaryValue(){return i&(R_|Tm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:h,expiresAt:p,originatingOperation:_}}catch(n){return Pu.error("Reading audit entry error",n,e),{}}}var Yc,y_,jA,Rm,wU,Pu,ys,Pa,OU,ym,QA,b8,ZA,CU,JA,TU,R_,Tm,yU,XA,AU,bU,IU,NU,I_,w8,N_,zc,jc,bm,Im,$r,PU,LU,Wc,Mi=le(()=>{Yc=require("ordered-binary"),y_=w(ae()),jA=w(Kt());H();Rm=w(ze()),wU=w(ie());Jc();Pu=w(z());s_();Yn();T_();(0,y_.initSync)();ys=Buffer.alloc(2816),Pa=new DataView(ys.buffer,ys.byteOffset,2816),OU={writeKey(e,t,r){return e===Am?(t.set(Am,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Yc.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,Yc.readKey)(e,t,r)}},ym={encoding:"binary",keyEncoder:OU},QA=(0,wU.convertToMS)((0,y_.get)(U.LOGGING_AUDITRETENTION))||86400*3,b8=1e3,ZA=new Float64Array(1),CU=new Uint8Array(ZA.buffer),JA=1e4,TU=!1;o(A_,"openAuditStore");o(b_,"removeAuditEntry");o(RU,"updateLastRemoved");o(I8,"getLastRemoved");o(N8,"setAuditRetention");R_=16,Tm=32,yU=1,XA=2,AU=3,bU=4,IU=5,NU=6,I_=14,w8=15,N_=11,zc=512,jc=1024,bm=2048,Im=4096,$r=8192,PU={put:yU|R_,[yU]:"put",delete:XA,[XA]:"delete",message:AU|R_,[AU]:"message",invalidate:bU|Tm,[bU]:"invalidate",patch:IU|Tm,[IU]:"patch",relocate:NU,[NU]:"relocate"},LU={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Qc,"createAuditEntry");o(O8,"readAction");o(wt,"readAuditEntry");Wc=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 BU={};Oe(BU,{ENTRY:()=>P8,HAS_EXPIRATION:()=>P_,HAS_RESIDENCY_ID:()=>ib,HAS_STRUCTURE_UPDATE:()=>L_,LAST_TIMESTAMP_PLACEHOLDER:()=>Am,LOCAL_TIMESTAMP:()=>C8,METADATA:()=>Lu,NEW_TIMESTAMP_PLACEHOLDER:()=>vU,NO_TIMESTAMP:()=>O_,PENDING_LOCAL_TIME:()=>ob,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>eb,RecordEncoder:()=>sb,TIMESTAMP_ASSIGN_LAST:()=>D8,TIMESTAMP_ASSIGN_NEW:()=>UU,TIMESTAMP_ASSIGN_PREVIOUS:()=>xU,TIMESTAMP_PLACEHOLDER:()=>w_,TIMESTAMP_RECORD_PREVIOUS:()=>tb,entryMap:()=>La,handleLocalTimeForGets:()=>D_,lastMetadata:()=>dt,recordUpdater:()=>ab,removeEntry:()=>el});function v8(){return Om[0]=Om[0]^64,L8.getFloat64(0)}function D_(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++,dt=null;let l=r.call(this,a,c);return l&&(dt&&(l.metadataFlags=dt[Lu],l.localTime=dt.localTime,l.residencyId=dt.residencyId,dt.expiresAt>=0&&(l.expiresAt=dt.expiresAt),dt=null),l.value&&La.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){dt=null;let l=n.call(this,a,c);return dt&&l&&(La.set(l,dt),dt=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=>(dt&&(l.metadataFlags=dt[Lu],l.localTime=dt.localTime,l.residencyId=dt.residencyId,dt.expiresAt>=0&&(l.expiresAt=dt.expiresAt),dt=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,Zc.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Zc.length;u++){let d=Zc[u].deref();(!d||d.isDone||d.isCommitted)&&Zc.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function ab(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){l==null?Xc=O_:f?Xc=i?.localTime?tb|xU:O_:Xc=l?i?.localTime?tb|16384:UU|16384:O_;let h=u?.expiresAt;if(h>=0&&(c|=P_),wm=c,rb=h,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:a,instructedWrite:Xc>0},_,g=0;try{let y=i?.residencyId,T=u?.residencyId;T&&(nb=T,wm|=ib,g|=zc),y!==T&&(g|=jc,y||(y=0)),c&P_&&(g|=Im),u?.originatingOperation&&(g|=bm),f&&(p.ifVersion=_=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&$r&&(!i.localTime||!r.getBinaryFast(i.localTime))&&Ca(i.value);let R;if(s!==void 0&&(R=h_(()=>e.put(n,s,p),n,e.rootStore),Kc&&(g|=$r)),l){let N=u?.user?.username;if(m&&(h_(()=>e.encoder.encode(m),n,e.rootStore),Kc&&(g|=$r)),e.encoder.hasStructureUpdate&&(g|=L_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let C=i?.localTime,q=r.get(C);if(q){let j=wt(q).previousLocalTime;return R=r.put(C,Qc(a,t,n,j,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Nm,g,T,y,h),{ifVersion:_}),R}}R=r.put(s===void 0?vU:Am,Qc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Nm,g,T,y,h,u?.originatingOperation),{instructedWrite:!0,ifVersion:_})}return R}catch(y){throw y.message+=" id: "+n+" options: "+p,y}}}function el(e,t,r){if(t)return t.value&&t.metadataFlags&$r&&!e.auditStore?.getBinaryFast(t.localTime)&&Ca(t.value),e.remove(t.key,r)}var MU,C_,w_,Am,eb,vU,C8,Lu,P8,Om,L8,O_,UU,D8,xU,tb,P_,ib,ob,L_,La,M8,Nm,Xc,wm,rb,nb,dt,sb,Zc,Jc=le(()=>{MU=require("msgpackr");Mi();C_=w(z());Yn();Yn();w_=new Uint8Array([1,1,1,1,4,64,0,0]),Am=new Uint8Array([1,1,1,1,1,0,0,0]),eb=new Uint8Array([1,1,1,1,3,64,0,0]),vU=new Uint8Array([1,1,1,1,0,64,0,0]),C8=Symbol("local-timestamp"),Lu=Symbol("metadata"),P8=Symbol("entry"),Om=new Uint8Array(8),L8=new DataView(Om.buffer,0,8),O_=0,UU=0,D8=1,xU=3,tb=4,P_=16,ib=32,ob=1,L_=256,La=new WeakMap,Xc=0,wm=-1,rb=-1,nb=0,dt=null,sb=class extends MU.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return La.get(this)?.version}getExpiresAt(){return La.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Xc||wm>=0){let c=0,l=Xc;l&&(c+=8,Xc=0);let u=wm,d=rb,f=nb;u>=0&&(c+=4,wm=-1,d>=0&&(c+=8,rb=-1),f&&(c+=4,nb=0));let m=M8=n.call(this,i,a|2048|c);Nm=m.subarray((m.start||0)+c,m.end);let h=m.start||0;return l&&(w_[4]=l,w_[5]=l>>8,m.set(w_,h),h+=8),Kc&&(u|=$r),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,u|I_<<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 Nm=n.call(this,i,a),Nm};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){dt=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(Om,0,c),c+=8;else for(let m=0;m<8;m++)Om[m]=t[c++];l=v8(),i=t[c]}let u,d;i<32&&(i===I_?(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&ib&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=bo(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return dt={localTime:l,[Lu]:a,expiresAt:u,residencyId:d},f}return r?.valueAsBuffer?t:bo(()=>super.decode(t,r),this.rootStore)}catch(c){return C_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(v8,"getTimestamp");o(D_,"handleLocalTimeForGets");Zc=[];setInterval(()=>{for(let e=0;e<Zc.length;e++){let t=Zc[e].deref();!t||t.isDone||t.isCommitted?Zc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(C_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):C_.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(ab,"recordUpdater");o(el,"removeEntry")});function ub(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?ub(f.conditions,f.operator,r,n,s,i,a,c):Uu(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?(N,C)=>R.some(q=>q(N,C)):(N,C)=>R.every(q=>q(N,C))}let g=(p.attribute||p[0])===r.primaryKey,y=Pm(p,r,i,c,g,h);return m&&_<f.length-1&&h&&(h=$8(r.primaryStore,p.estimated_count,h)),y}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Uu(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 Vr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],N=Fi(n.attributes,R);if(N.relationship){if(c.length<2)throw new Vr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let C=N.definition?.tableClass||N.elements?.definition?.tableClass,q=new Map,j=Uu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,C,s,q);if(N.relationship.to){i[c[0]]=q;let F=!!Fi(C.attributes,N.relationship.to)?.elements;j=H8(j,N,C.primaryStore,F,q)}if(N.relationship.from){let F=o($=>($?.key!==void 0&&($=$.key),Uu({attribute:N.relationship.from,value:$},t,r,n,s,q)),"searchEntry");N.elements?(i[c[0]]=q,j=k8(j,N,C.primaryStore,q,F)):j=j.flatMap(F)}return j}else if(c.length===1)c=c[0];else throw new Vr.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(db[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]=Bi.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 Vr.ClientError(`Unknown query comparator "${u}"`)}let y;if(typeof m=="string"&&m.length>As.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,As.MAX_SEARCH_KEY_LENGTH)+As.OVERFLOW_MARKER,_=!1,y=Pm(e,n,null,i,d)),typeof h=="string"&&h.length>As.MAX_SEARCH_KEY_LENGTH&&(h=h.slice(0,As.MAX_SEARCH_KEY_LENGTH)+As.OVERFLOW_MARKER,p=!0,y=y??Pm(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 Vr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new Vr.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 Vr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new Vr.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??Pm(e,n,null,i,d),!y)throw new Vr.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:N,value:C}){return this?.isSync?C&&y(C)?N:Da.SKIP:new Promise((q,j)=>setImmediate(()=>{try{q(C&&y(C)?N:Da.SKIP)}catch(F){j(F)}}))}:N=>N.value==null&&!(N.metadataFlags&(On|tl))?Da.SKIP:(a?._freezeRecords&&Object.freeze(N.value),N));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:N,...C}=R,q=n.primaryStore.getEntry(N);return a?._freezeRecords&&Object.freeze(q?.value),{...C,...q}}return R}):f.getRange(T).map(y?function({key:R,value:N}){let C;return typeof R=="string"&&R.length>As.MAX_SEARCH_KEY_LENGTH?C=n.primaryStore.get(N):C={[c]:R},this.isSync?y(C)?N:Da.SKIP:new Promise((q,j)=>setImmediate(()=>{try{q(y(C)?N:Da.SKIP)}catch(F){j(F)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:N}){return this.isSync?N&&y(N)?R:Da.SKIP:new Promise((C,q)=>setImmediate(()=>{try{C(N&&y(N)?R:Da.SKIP)}catch(j){q(j)}}))})}function Fi(e,t){if(Array.isArray(t))if(t.length>1){let r=Fi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Fi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function H8(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 k8(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 Pm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=Fi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,h=n?.[d],p=Pm({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,N)=>{let C,q;return _?_.returnDirect?(C=_(R,r,N),q=dt):(q=_(R,r,N,!0),Array.isArray(q)?(C=q.map(j=>j.value),q=null):C=q?.value):C=R[d],{subObject:C,subEntry:q}},"getSubObject"),T=o((R,N)=>{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 F=g(R);return g.idFilter&&(T.idFilter=g.idFilter),F}let{subObject:C,subEntry:q}=y(R,N);return C?Array.isArray(C)?(!n?.[d]&&n&&(n[d]={fromRecord(F){let $=y(F).subObject;return Array.isArray($)?$.filter(p).map(J=>J[m.primaryKey]):$}}),C.some(p)):p(C,q):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),db[a]||a){case As.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Bi.compareKeys)(d,l[0])>=0&&(0,Bi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Bi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Bi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Bi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Bi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Bi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new Vr.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&&v_(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(m=!1));let _=0,g=3;function y(T){let R=T[d],N;if(typeof R!="object"||!R||h?N=f(R):Array.isArray(R)?N=R.some(f):R instanceof Date&&(N=f(R.getTime())),m&&(g++,!N&&!y.idFilter&&++_/g*i>p)){let C=Uu(e,r.transaction.getReadTxn(),!1,t),q;y.to?q=C.flatMap(F=>t.primaryStore.get(F)[y.to]):q=C.map(xu);let j=new Set(q);y.idFilter=F=>j.has(xu(F)),y.idFilter.idSet=j}return N}return o(y,"recordFilter"),s&&(y.idFilter=f),y}o(u,"attributeComparator")}function v_(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/Io(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=db[n]||n,n===As.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Fi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=v_(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*Io(e.indices[i.relationship.from])/(Io(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=Io(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=B8*Io(e.primaryStore)+1;else if(n==="between")r.estimated_count=x8*Io(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=Io(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=U8*Io(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function U_(e,t){if(e)if(No=e,Du.lastIndex=0,q8.test(e))try{if(t&&(t.conditions=[]),ni=t??new vu,Cm(ni,""),vr!==No.length&&Yt("Unable to parse query, unexpected end of query"),ni.parseErrorMessage&&(ni.parseError=new cb(t.parseErrorMessage),!t))throw ni.parseError;return ni}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${vr} in '${No}'`,ni.parseErrorMessage&&(r.message+=", "+ni.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Yt(e){let t=`${e} at position ${vr}`;ni.parseErrorMessage=ni.parseErrorMessage?ni.parseErrorMessage+", "+t:t}function Cm(e,t){let r=Du,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(No);){vr=r.lastIndex;let[,d,f]=n;a?(d&&Yt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Yt(`invalid FIQL operator ${d}`),l=FU):(l=decodeURIComponent,i="equals",d||Yt("attribute must be specified before equality comparator"),s=Mu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=F8[f],l=lb[i]?FU:decodeURIComponent,d||Yt(`attribute must be specified before comparator ${f}`),s=Mu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Yt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Yt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Yt("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&HU(p,d),s===""){let _=e.conditions[e.conditions.length-1];_.chainedConditions=_.chainedConditions||[],_.chainedConditions.push(p),_.operator=u}else M_(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?Yt("conditions/comparisons are not allowed in a property list"):e.push(Mu(d)),s=void 0;break;case"(":Du.lastIndex=vr;let h=Cm(d?[]:new vu,")");switch(d){case"":M_(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:Yt("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":Yt("group by is not implemented yet");case"sort":e.sort=kU(h);break;default:Yt(`unknown query function call ${d}`)}No[vr]===","?r.lastIndex=++vr:a=!0,s=null;break;case"{":e.conditions&&Yt("property sets are not allowed in a queries"),d||Yt("property sets must have a defined parent property name"),Du.lastIndex=vr,m=Cm([],"}"),m.name=d,e.push(m),No[vr]===","?r.lastIndex=++vr:a=!0;break;case"[":if(Du.lastIndex=vr,d?(m=Cm(new vu,"]"),m.name=d):m=Cm(e.conditions?new vu:[],"]"),e.conditions)if(M_(e,u),No[vr]==="="){l=decodeURIComponent,i="equals",s=Mu(d),r.lastIndex=++vr;break}else e.conditions.push(m),s=null;else e.push(m);No[vr]===","?r.lastIndex=++vr: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"&&HU(p,d),M_(e,u),e.conditions.push(p)}else d&&Yt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Mu(d));return e}else Yt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Yt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?G8:Du,r.lastIndex=vr),vr===No.length)return e}t&&Yt(`expected '${t}', but encountered end of string`)}function M_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Yt("Can not mix operators within a condition grouping"):e.operator=t)}function Mu(e){return e.indexOf(".")>-1?e.split(".").map(Mu):decodeURIComponent(e)}function FU(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 Vr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function HU(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Vr.ClientError("wildcard can only be used at the end of a string")}function kU(e){let t=qU(e[0]);return e.length>1&&(t.next=kU(e.slice(1))),t}function qU(e){if(Array.isArray(e)){let t=qU(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}}Yt(`Unknown sort type ${e}`)}function xu(e){return Array.isArray(e)?e.join("\0"):e}function Io(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function $8(e,t,r){return t*r/Io(e)}var Vr,As,Bi,Da,U8,x8,B8,F8,lb,db,cb,q8,Du,G8,vr,ni,No,vu,x_=le(()=>{Vr=w(_e()),As=w(Kt()),Bi=require("ordered-binary"),Da=require("lmdb");B_();Jc();U8=.3,x8=.1,B8=.05,F8={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},lb={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(ub,"executeConditions");o(Uu,"searchByIndex");o(Fi,"findAttribute");o(H8,"joinTo");o(k8,"joinFrom");db={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(Pm,"filterByType");o(v_,"estimateCondition");cb=class extends Vr.Violation{static{o(this,"SyntaxViolation")}},q8=/[()[\]|!<>.]|(=\w*=)/,Du=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,G8=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(U_,"parseQuery");o(Yt,"recordError");o(Cm,"parseBlock");o(M_,"assignOperator");o(Mu,"decodeProperty");o(FU,"typedDecoding");o(HU,"wildcardDecoding");o(kU,"toSortObject");o(qU,"toSortEntry");vu=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(xu,"flattenKey");o(Io,"estimatedEntryCount");o($8,"intersectionEstimate")});var GU,si,F_=le(()=>{GU=w(ti());Ma();si=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,GU._assignPackageExport)("Resource",Ur)});var WU={};Oe(WU,{MultiPartId:()=>H_,Resource:()=>Ur,contextStorage:()=>Fu,snakeCase:()=>K8,transformForSelect:()=>Hu});function K8(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function $U(e,t){if(rl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(rl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new H_;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){rl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return rl=!0,null;e[e.length-1]==="/"&&(rl=!0)}return t.coerceId(decodeURIComponent(e))}function Cn(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 go?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Bu.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 si,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new si,l.id=c,c==null&&(u=!0);l||(l=new si,l.id=c),u&&(l.isCollection=!0);let f;a||(a=Fu.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(_=>Fu.run(a,()=>p(_)),"runAction")),a?.transaction){let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)}else return Ft(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 Bu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(T=>e(_,l,a,T)):e(_,l,a,d)});if(!g)throw new Bu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(_,l,a,g)):e(_,l,a,d)}o(p,"authorizeActionOnResource")}}function Wn(e,t){let r=new Bu.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 fb(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 Hu(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):fb(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(fb(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(fb(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]=Hu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var VU,KU,Bu,YU,Fu,V8,Ur,rl,H_,Ma=le(()=>{VU=require("crypto");cm();bu();KU=w(ti()),Bu=w(_e());kc();x_();YU=require("async_hooks");F_();Fu=new YU.AsyncLocalStorage,V8={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ur=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=Cn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Hu(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=Cn(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):Wn(t,"put")},{hasContent:!0,type:"update"});static patch=Cn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Wn(t,"patch")},{hasContent:!0,type:"update"});static delete=Cn(function(t,r,n,s){return t.delete?t.delete(r):Wn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,VU.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Fu.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),Ft(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Wn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Cn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Wn(t,"delete")},{hasContent:!1,type:"update"});static post=Cn(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=Cn(function(t,r,n,s){return t.update(r,s)},{hasContent:!0,type:"create"});static connect=Cn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Wn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Cn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Wn(t,"subscribe")},{type:"read"});static publish=Cn(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):Wn(t,"publish")},{hasContent:!0,type:"create"});static search=Cn(function(t,r,n){let s=t.search?t.search(r):Wn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Hu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Cn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Wn(t,"search")},{hasContent:!0,type:"read"});static copy=Cn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Wn(t,"copy")},{hasContent:!0,type:"create"});static move=Cn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Wn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Wn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return U_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&V8[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:$U(t,this),isCollection:rl}}let i=$U(t,this);return rl?{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 Kn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Kn}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,KU._assignPackageExport)("Resource",Ur);o(K8,"snakeCase");o($U,"pathToId");H_=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Cn,"transactional");o(Wn,"missingMethod");o(fb,"selectFromObject");o(Hu,"transformForSelect")});var nl,mb=le(()=>{nl=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 QU={};Oe(QU,{Resources:()=>k_,keyArrayToString:()=>ku,resetResources:()=>Y8,resources:()=>bs});function Y8(){return bs=new k_,De.resources=bs,bs}function ku(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var zU,jU,k_,bs,qu=le(()=>{kc();mb();zU=w(z()),jU=w(_e());Dr();k_=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 jU.ServerError(`Conflicting paths for ${t}`);zU.default.error(c),i.Resource=new nl(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 Ft(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(Y8,"resetResources");o(ku,"keyArrayToString")});function Eb(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=XU,W8(e.primaryStore,e.auditStore)):(c=JU,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{ZU(JU[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=ku(t);let d=new pb(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 ZU(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),e0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=wt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=ku(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,hb.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,hb.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 W8(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=XU[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{ZU(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function e0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function t0(e){return e.nextTransaction||(Eb({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),e0(e)),e.nextTransaction}var hb,JU,XU,pb,_b=le(()=>{hb=w(z());bu();qu();Mi();JU=Object.create(null),XU=Object.create(null);o(Eb,"addSubscription");pb=class extends Kn{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(ZU,"notifyFromTransactionData");o(W8,"listenToCommits");o(e0,"nextTransaction");o(t0,"whenNextTransaction")});var n0=M((zOe,r0)=>{"use strict";var gb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};r0.exports=gb});var i0=M((QOe,s0)=>{"use strict";var Sb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};s0.exports=Sb});var Lm=M((XOe,a0)=>{"use strict";var o0=ae(),z8=(H(),v(Y)),{RecordEncoder:j8}=(Jc(),v(BU));o0.initSync();var Q8=o0.get(z8.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Tb=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=Q8&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:j8})}};a0.exports=Tb});var Dm=M((eCe,c0)=>{"use strict";var zn=ae(),Is=(H(),v(Y));zn.initSync();var q_=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=zn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||zn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||zn.get(Is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",zn.get(Is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=zn.get(Is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),zn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=zn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),zn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=zn.get(Is.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),zn.get(Is.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=zn.get(Is.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=zn.get(Is.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};c0.exports=q_;q_.MAX_DBS=1e4});var Rt=M((rCe,g0)=>{"use strict";var yb=require("lmdb"),ii=require("fs-extra"),jn=require("path"),G_=In(),d0=z(),Pn=rn().LMDB_ERRORS_ENUM,$_=i0(),Ab=Lm(),f0=Dm(),va=Kt(),l0=(H(),v(Y)),{table:J8,resetDatabases:X8}=(Me(),v(gt)),u0=ae(),oi=va.INTERNAL_DBIS_NAME,m0=va.DBI_DEFINITION_NAME,Z8="data.mdb",e5="lock.mdb",Mm=".mdb",t5="-lock",Rb=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ns(t,r),this.key_type=this.dbi[va.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[va.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new yb.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function V_(e,t){if(e===void 0)throw new Error(Pn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Pn.ENV_NAME_REQUIRED)}o(V_,"pathEnvNameValidation");async function bb(e,t,r=!0){try{await ii.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Pn.INVALID_BASE_PATH):n}try{let n=jn.join(e,t+Mm);return await ii.access(n,ii.constants.R_OK|ii.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ii.access(jn.join(e,t,Z8),ii.constants.R_OK|ii.constants.F_OK),jn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Pn.INVALID_ENVIRONMENT)}else throw new Error(Pn.INVALID_ENVIRONMENT);throw n}}o(bb,"validateEnvironmentPath");function K_(e,t){if(G_.validateEnv(e),t===void 0)throw new Error(Pn.DBI_NAME_REQUIRED)}o(K_,"validateEnvDBIName");async function r5(e,t,r=!1,n=!1){V_(e,t);let s=jn.basename(e);t=t.toString();let i=u0.get(l0.CONFIG_PARAMS.DATABASES);i||u0.setProperty(l0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await bb(e,t,n),h0(e,t,r)}catch(a){if(a.message===Pn.INVALID_ENVIRONMENT){let c=jn.join(e,t);await ii.mkdirp(n?c:e);let l=new f0(n?c:c+Mm,!1),u=yb.open(l);u.dbis=Object.create(null);let d=new Ab(!1);u.openDB(oi,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=Ib(e,t,r);return u[va.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(r5,"createEnvironment");async function n5(e,t,r,n=!0){V_(e,t),t=t.toString();let s=jn.join(e,t);return J8({table:t,database:jn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(n5,"copyEnvironment");async function h0(e,t,r=!1){V_(e,t),t=t.toString();let n=Ib(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 bb(e,t),i=jn.join(e,t+Mm),a=s!=i,c=new f0(s,a),l=yb.open(c);l.dbis=Object.create(null);let u=E0(l);for(let d=0;d<u.length;d++)Ns(l,u[d]);return l[va.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(h0,"openEnvironment");async function s5(e,t,r=!1){V_(e,t),t=t.toString();let n=jn.join(e,t+Mm),s=await bb(e,t);if(global.lmdb_map!==void 0){let i=Ib(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await p0(a),delete global.lmdb_map[i]}}await ii.remove(s),await ii.remove(s===n?s+t5:jn.join(jn.dirname(s),e5))}o(s5,"deleteEnvironment");async function p0(e){G_.validateEnv(e);let t=e[va.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(p0,"closeEnvironment");function Ib(e,t,r=!1){let s=`${jn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(Ib,"getCachedEnvironmentName");function i5(e){G_.validateEnv(e);let t=Object.create(null),r=Ns(e,oi);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==oi)try{t[n]=Object.assign(new $_,s)}catch{d0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(i5,"listDBIDefinitions");function E0(e){G_.validateEnv(e);let t=[],r=Ns(e,oi);for(let{key:n}of r.getRange({start:!1}))n!==oi&&t.push(n);return t}o(E0,"listDBIs");function o5(e,t){let n=Ns(e,oi).getEntry(t),s=new $_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{d0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(o5,"getDBIDefinition");function _0(e,t,r,n=!r){if(K_(e,t),t=t.toString(),t===oi)throw new Error(Pn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ns(e,t)}catch(s){if(s.message===Pn.DBI_DOES_NOT_EXIST){let i=new Ab(r,n===!0),a=e.openDB(t,i),c=new $_(r===!0,n);return a[m0]=c,Ns(e,oi).putSync(t,c),e.dbis[t]=a,a}throw s}}o(_0,"createDBI");function Ns(e,t){if(K_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==oi?r=o5(e,t):r=new $_,r===void 0)throw new Error(Pn.DBI_DOES_NOT_EXIST);let n;try{let s=new Ab(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(Pn.DBI_DOES_NOT_EXIST):s}return n[m0]=r,e.dbis[t]=n,n}o(Ns,"openDBI");function a5(e,t){K_(e,t),t=t.toString();let r=Ns(e,t),n=r.getStats();return r[va.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(a5,"statDBI");async function c5(e,t){try{let r=jn.join(e,t+Mm);return(await ii.stat(r)).size}catch{throw new Error(Pn.INVALID_ENVIRONMENT)}}o(c5,"environmentDataSize");function l5(e,t){if(K_(e,t),t=t.toString(),t===oi)throw new Error(Pn.CANNOT_DROP_INTERNAL_DBIS_NAME);Ns(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ns(e,oi).removeSync(t)}o(l5,"dropDBI");function u5(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ns(e,i)}catch(a){if(a.message===Pn.DBI_DOES_NOT_EXIST)_0(e,i,i!==t,i===t),n=!0;else throw a}}n&&X8()}o(u5,"initializeDBIs");g0.exports={openDBI:Ns,openEnvironment:h0,createEnvironment:r5,listDBIs:E0,listDBIDefinitions:i5,createDBI:_0,dropDBI:l5,statDBI:a5,deleteEnvironment:s5,initializeDBIs:u5,TransactionCursor:Rb,environmentDataSize:c5,copyEnvironment:n5,closeEnvironment:p0}});var R0=M((sCe,T0)=>{"use strict";var Nb=Rt(),d5=z(),S0=rn().LMDB_ERRORS_ENUM;T0.exports=f5;async function f5(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 Nb.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==S0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Nb.closeEnvironment(global.lmdb_map[n]),await Nb.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==S0.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){d5.error(t)}}o(f5,"cleanLMDBMap")});var wo=M((oCe,m5)=>{m5.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 ws=M((aCe,b0)=>{var h5=wo(),{promisify:p5}=require("util"),{getDatabases:A0}=(Me(),v(gt));b0.exports={setSchemaDataToGlobal:y0,getTableSchema:E5,getSystemSchema:_5,setSchemaDataToGlobalAsync:p5(y0)};function y0(e){global.hdb_schema=A0(),e&&e()}o(y0,"setSchemaDataToGlobal");function E5(e,t,r){let n=A0()[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(E5,"getTableSchema");function _5(){return h5}o(_5,"getSystemSchema")});var B0=M((uCe,x0)=>{"use strict";var wb=require("recursive-iterator"),g5=require("alasql"),Ob=require("clone"),I0=ie(),{handleHDBError:N0,hdbErrors:S5}=_e(),{HDB_ERROR_MSGS:w0,HTTP_STATUS_CODES:O0}=S5,{getDatabases:T5}=(Me(),v(gt)),R5=["DISTINCT_ARRAY"],C0=Symbol("validateTables"),Cb=Symbol("validateTable"),lCe=Symbol("getAllColumns"),P0=Symbol("validateAllColumns"),Y_=Symbol("findColumn"),L0=Symbol("validateOrderBy"),vm=Symbol("validateSegment"),Pb=Symbol("validateColumn"),D0=Symbol("setColumnsForTable"),M0=Symbol("checkColumnsForAsterisk"),v0=Symbol("validateGroupBy"),U0=Symbol("hasColumns"),Lb=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[C0](),this[M0](),this[P0]()}[C0](){if(this[U0]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Cb](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Cb](t.table)})}}[U0](){let t=!1,r=new wb(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Cb](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=T5();if(!r[t.databaseid])throw N0(new Error,w0.SCHEMA_NOT_FOUND(t.databaseid),O0.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw N0(new Error,w0.TABLE_NOT_FOUND(t.databaseid,t.tableid),O0.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Ob(s);i.table=Ob(t),this.attributes.push(i)})}[Y_](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)}[M0](){let t=new wb(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[D0](r.tableid)}[D0](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new g5.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[P0](){this[vm](this.statement.columns,!1),this[vm](this.statement.joins,!1),this[vm](this.statement.where,!1),this[v0](this.statement.group,!1),this[vm](this.statement.order,!0)}[vm](t,r){if(!t)return;let n=new wb(t),s=[];for(let{node:i,path:a}of n)!I0.isEmpty(i)&&!I0.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[L0](i):s.push(this[Pb](i)));return s}[v0](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&R5.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Ob(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Y_](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[Y_](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((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 '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[L0](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[Pb](t)}[Pb](t){let r=this[Y_](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]}};x0.exports=Lb});var H0=M((fCe,F0)=>{"use strict";var Db=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")}};F0.exports=Db});var q0=M((hCe,k0)=>{"use strict";var Mb=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};k0.exports=Mb});var $0=M((ECe,G0)=>{"use strict";var vb=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}};G0.exports=vb});var K0=M((gCe,V0)=>{"use strict";var Ub=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};V0.exports=Ub});var il=M((ACe,z0)=>{"use strict";var y5=Rt(),A5=q0(),b5=$0(),I5=K0(),Hi=In(),Um=rn().LMDB_ERRORS_ENUM,N5=Kt(),Oo=(H(),v(Y)),w5=ie(),O5=require("uuid"),TCe=require("lmdb"),{handleHDBError:C5,hdbErrors:P5}=_e(),{OVERFLOW_MARKER:RCe,MAX_SEARCH_KEY_LENGTH:yCe}=N5,Y0=ae();Y0.initSync();var W_=Y0.get(Oo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),xb=Oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,sl=Oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function L5(e,t,r,n,s=Hi.getNextMonotonicTime()){kb(e,t,r,n),Bb(e,t,r);let i=new A5,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];W0(u,!0,s);let d=D5(e,t,r,u),f=u[t];a.push(d),c.push(f)}return Fb(a,c,n,i,s)}o(L5,"insertRecords");function D5(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][Oo.FUNC_VAL],n[a]=c)}let l=Hi.getIndexedValues(c),u=e.dbis[a];if(l){W_&&u.prefetch(l.map(d=>({key:d,value:s})),z_);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}W_&&e.dbis[t].prefetch([s],z_),e.dbis[t].put(s,n,n[sl])})}o(D5,"insertRecord");function M5(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(M5,"removeSkippedRecords");function W0(e,t,r){let n=r>0;(n||!Number.isInteger(e[sl]))&&(e[sl]=r||(r=Hi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[xb]))&&(e[xb]=r||Hi.getNextMonotonicTime()):delete e[xb]}o(W0,"setTimestamps");function Bb(e,t,r){r.indexOf(Oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),y5.initializeDBIs(e,t,r)}o(Bb,"initializeTransaction");async function v5(e,t,r,n,s=Hi.getNextMonotonicTime()){kb(e,t,r,n),Bb(e,t,r);let i=new b5,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=Hb(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(v5,"updateRecords");async function U5(e,t,r,n,s=Hi.getNextMonotonicTime()){try{kb(e,t,r,n)}catch(l){throw C5(l,l.message,P5.HTTP_STATUS_CODES.BAD_REQUEST)}Bb(e,t,r);let i=new I5,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;w5.isEmpty(u[t])?(d=O5.v4(),u[t]=d):d=u[t];let f=Hb(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return Fb(a,c,n,i,s)}o(U5,"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||Hi.getNextMonotonicTime(),M5(r,i),n}o(Fb,"finalizeWrite");function Hb(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(W0(r,!d,a),Number.isInteger(r[sl])&&u[sl]>r[sl])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][Oo.FUNC_VAL],r[p]=_)}if(_===y)continue;let T=Hi.getIndexedValues(y);if(T){W_&&g.prefetch(T.map(R=>({key:R,value:n})),z_);for(let R=0,N=T.length;R<N;R++)g.remove(T[R],n)}if(T=Hi.getIndexedValues(_),T){W_&&g.prefetch(T.map(R=>({key:R,value:n})),z_);for(let R=0,N=T.length;R<N;R++)g.put(T[R],n)}}let h={...u,...r};c.put(n,h,h[sl])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(h=>h?!0:Hb(e,t,r,n,s,i,a))}o(Hb,"updateUpsertRecord");function x5(e,t,r){if(Hi.validateEnv(e),t===void 0)throw new Error(Um.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Um.WRITE_ATTRIBUTES_REQUIRED):new Error(Um.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(x5,"validateBasic");function kb(e,t,r,n){if(x5(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Um.RECORDS_REQUIRED):new Error(Um.RECORDS_MUST_BE_ARRAY)}o(kb,"validateWrite");function z_(){}o(z_,"noop");z0.exports={insertRecords:L5,updateRecords:v5,upsertRecords:U5}});var st=M((ICe,j0)=>{"use strict";var Ln=require("validate.js");Ln.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Ln.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ln.validators.type.checks={Object:o(function(e){return Ln.isObject(e)&&!Ln.isArray(e)},"Object"),Array:Ln.isArray,Integer:Ln.isInteger,Number:Ln.isNumber,String:Ln.isString,Date:Ln.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};Ln.validators.hasValidFileExt=function(e,t){return Ln.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};j0.exports={validateObject:B5,validateObjectAsync:F5,validateBySchema:H5};function B5(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ln(e,t,{format:"flat"});return r?new Error(r):null}o(B5,"validateObject");async function F5(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ln.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(F5,"validateObjectAsync");function H5(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(H5,"validateBySchema")});var J0=M((wCe,Q0)=>{"use strict";var k5=require("uuid"),qb=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||k5.v4(),this.schema_table=`${this.schema}.${this.table}`}};Q0.exports=qb});var j_=M((CCe,X0)=>{"use strict";var q5=J0(),Gb=class extends q5{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}};X0.exports=Gb});var ex=M((LCe,Z0)=>{"use strict";Z0.exports=$5;var G5="inserted";function $5(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===G5?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o($5,"returnObject")});var Q_=M((vCe,rx)=>{"use strict";var V5=(H(),v(Y)),$b=Rt(),K5=il(),{getSystemSchemaPath:Y5,getSchemaPath:W5}=Nt(),MCe=wo(),{validateBySchema:z5}=st(),xm=require("joi"),j5=j_(),Q5=ex(),{handleHDBError:J5,hdbErrors:X5,ClientError:Z5}=_e(),tx=ie(),{HTTP_STATUS_CODES:e9}=X5,t9="inserted";rx.exports=r9;async function r9(e){let t=z5(e,xm.object({database:xm.string(),schema:xm.string(),table:xm.string().required(),attribute:xm.string().required()}));if(t)throw new Z5(t.message);let r=!e.skip_table_check&&tx.checkGlobalSchemaTable(e.schema,e.table);if(r)throw J5(new Error,r,e9.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=tx.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 j5(e.schema,e.table,e.attribute,e.id);try{let i=await $b.openEnvironment(W5(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);$b.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await $b.openEnvironment(Y5(),V5.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await K5.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return Q5(t9,c,{records:[s]},l)}catch(i){throw i}}o(r9,"lmdbCreateAttribute")});var qi=M((xCe,ix)=>{"use strict";var sx=ie(),nx=(H(),v(Y)),Gu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ki=require("joi"),Ua={schema_format:{pattern:Gu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},n9=ki.alternatives(ki.string().min(1).max(Ua.schema_length.maximum).pattern(Gu).messages({"string.pattern.base":"{:#label} "+Ua.schema_format.message}),ki.number(),ki.array()).required(),s9=ki.alternatives(ki.string().min(1).max(Ua.schema_length.maximum).pattern(Gu).messages({"string.pattern.base":"{:#label} "+Ua.schema_format.message}),ki.number()),i9=ki.alternatives(ki.string().min(1).max(Ua.schema_length.maximum).pattern(Gu).messages({"string.pattern.base":"{:#label} "+Ua.schema_format.message}),ki.number()).required();function o9(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ua.schema_length.maximum?`'${e}' maximum of 250 characters`:Gu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(o9,"checkValidTable");function a9(e,t){return sx.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(a9,"validateSchemaExists");function c9(e,t){let r=t.state.ancestors[0].schema;return sx.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(c9,"validateTableExists");function l9(e,t){return e.toLowerCase()===nx.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${nx.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(l9,"validateSchemaName");ix.exports={commonValidators:Ua,schemaRegex:Gu,hdbSchemaTable:n9,validateSchemaExists:a9,validateTableExists:c9,validateSchemaName:l9,checkValidTable:o9,hdbDatabase:s9,hdbTable:i9}});var Kb=M((FCe,ax)=>{var{hdbTable:u9,hdbDatabase:ox}=qi(),d9=st(),Vb=require("joi"),f9={undefined:"undefined",null:"null"},m9=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||f9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),h9=Vb.object({database:ox,schema:ox,table:u9,records:Vb.array().items(Vb.object().custom(m9)).required()});ax.exports=function(e){return d9.validateBySchema(e,h9)}});var Bm=M((qCe,lx)=>{"use strict";var Co=ie(),cx=z(),kCe=Kb(),{getDatabases:p9}=(Me(),v(gt)),{ClientError:ol}=_e();lx.exports=E9;function E9(e){if(Co.isEmpty(e))throw new ol("invalid update parameters defined.");if(Co.isEmptyOrZeroLength(e.schema))throw new ol("invalid schema specified.");if(Co.isEmptyOrZeroLength(e.table))throw new ol("invalid table specified.");if(!Array.isArray(e.records))throw new ol("records must be an array");let t=p9()[e.schema]?.[e.table];if(Co.isEmpty(t))throw new ol(`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&&Co.isEmptyOrZeroLength(a[r]))throw cx.error("a valid hash attribute must be provided with update record:",a),new ol("a valid hash attribute must be provided with update record, check log for more info");if(!Co.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw cx.error(`a valid hash value must be provided with ${e.operation} record:`,a),new ol(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Co.isEmpty(a[r])&&a[r]!==""&&n.has(Co.autoCast(a[r]))&&(a.skip=!0),n.add(Co.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(E9,"insertUpdateValidate")});var J_=M(($Ce,dx)=>{"use strict";var ux=ie(),_9=(H(),v(Y)),g9=z(),S9=Q_(),T9=j_(),R9=Po(),{SchemaEventMsg:y9}=ai(),A9="already exists in";dx.exports=b9;async function b9(e,t,r){if(ux.isEmptyOrZeroLength(r))return r;let n=[];ux.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 I9(e,t.schema,t.name,i)})),s}o(b9,"lmdbCheckForNewAttributes");async function I9(e,t,r,n){let s=new T9(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await N9(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(A9))g9.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(I9,"createNewAttribute");async function N9(e){let t;return t=await S9(e),R9.signalSchemaChange(new y9(process.pid,_9.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(N9,"createAttribute")});var $u=M((KCe,fx)=>{"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}};fx.exports=Yb});var hx=M((WCe,mx)=>{"use strict";var w9=$u(),O9=(H(),v(Y)).OPERATIONS_ENUM,Wb=class extends w9{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(O9.INSERT,r,n,s,i),this.records=t}};mx.exports=Wb});var Ex=M((jCe,px)=>{"use strict";var C9=$u(),P9=(H(),v(Y)).OPERATIONS_ENUM,zb=class extends C9{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(P9.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};px.exports=zb});var gx=M((JCe,_x)=>{"use strict";var L9=$u(),D9=(H(),v(Y)).OPERATIONS_ENUM,jb=class extends L9{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(D9.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};_x.exports=jb});var Tx=M((ZCe,Sx)=>{"use strict";var M9=$u(),v9=(H(),v(Y)).OPERATIONS_ENUM,Qb=class extends M9{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(v9.DELETE,n,s,t,i),this.original_records=r}};Sx.exports=Qb});var Fm=M((rPe,bx)=>{"use strict";var tPe=require("path"),Rx=Rt(),U9=hx(),x9=Ex(),B9=gx(),F9=Tx(),Vu=Kt(),yx=ie(),{CONFIG_PARAMS:H9}=(H(),v(Y)),Ax=ae();Ax.initSync();var X_=(H(),v(Y)).OPERATIONS_ENUM,{getTransactionAuditStorePath:k9}=Nt();bx.exports=q9;async function q9(e,t){if(Ax.get(H9.LOGGING_AUDITLOG)===!1)return;let r=k9(e.schema,e.table),n=await Rx.openEnvironment(r,e.table,!0),s=G9(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Rx.initializeDBIs(n,Vu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Vu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Vu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Vu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),yx.isEmpty(s.user_name)||n.dbis[Vu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Vu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(q9,"writeTransaction");function G9(e,t){let r=yx.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===X_.INSERT)return new U9(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===X_.UPDATE)return new x9(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===X_.UPSERT)return new B9(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===X_.DELETE)return new F9(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(G9,"createTransactionObject")});var Jb=M((iPe,Ix)=>{"use strict";var $9=Bm(),sPe=im(),Hm=(H(),v(Y)),V9=om(),K9=il().insertRecords,Y9=Rt(),W9=z(),z9=J_(),{getSchemaPath:j9}=Nt(),Q9=Fm();Ix.exports=J9;async function J9(e){try{let{schemaTable:t,attributes:r}=$9(e);V9(e,r,t.hash_attribute),e.schema!==Hm.SYSTEM_SCHEMA_NAME&&(r.includes(Hm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Hm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Hm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Hm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await z9(e.hdb_auth_header,t,r),s=j9(e.schema,e.table),i=await Y9.openEnvironment(s,e.table),a=await K9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Q9(e,a)}catch(c){W9.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(J9,"lmdbCreateRecords")});var Ox=M((aPe,wx)=>{"use strict";var Nx=(H(),v(Y)),X9=Jb(),Z9=im(),e7=require("fs-extra"),{getSchemaPath:t7}=Nt();wx.exports=r7;async function r7(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Z9(Nx.SYSTEM_SCHEMA_NAME,Nx.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await X9(r),await e7.mkdirp(t7(e.schema))}o(r7,"lmdbCreateSchema")});var Px=M((lPe,Cx)=>{"use strict";var Xb=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}};Cx.exports=Xb});var vx=M((hPe,Mx)=>{"use strict";var Lx=Rt(),Zb=In(),eI=rn().LMDB_ERRORS_ENUM,n7=Kt(),Dx=z(),dPe=ie(),s7=require("lmdb"),i7=Px(),o7=(H(),v(Y)),{OVERFLOW_MARKER:fPe,MAX_SEARCH_KEY_LENGTH:mPe}=n7,a7=o7.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function c7(e,t,r,n){if(Zb.validateEnv(e),t===void 0)throw new Error(eI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(eI.IDS_REQUIRED):new Error(eI.IDS_MUST_BE_ITERABLE);try{let s=Lx.listDBIs(e);Lx.initializeDBIs(e,t,s);let i=new i7,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[a7]>n){i.skipped.push(a);continue}let _=e.dbis[t].ifVersion(a,s7.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 N=Zb.getIndexedValues(R);if(N)for(let C=0,q=N.length;C<q;C++)T.remove(N[C],a)}catch{Dx.warn(`cannot delete from attribute: ${y}, ${R}:${a}`)}}});c.push(_),l.push(a),i.original_records.push(p)}catch(p){Dx.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=Zb.getNextMonotonicTime(),i}catch(s){throw s}}o(c7,"deleteRecords");Mx.exports={deleteRecords:c7}});var km=M((EPe,xx)=>{"use strict";var Ku=ie(),l7=vx(),u7=Rt(),{getSchemaPath:d7}=Nt(),f7=Fm(),m7=z();xx.exports=h7;async function h7(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ku.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ku.isEmptyOrZeroLength(e.hash_values)&&!Ku.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Ku.isEmpty(l)||e.hash_values.push(l)}}if(Ku.isEmptyOrZeroLength(e.hash_values))return Ux([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ku.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=d7(e.schema,e.table),i=await u7.openEnvironment(s,e.table),a=await l7.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await f7(e,a)}catch(c){m7.error(`unable to write transaction due to ${c.message}`)}return Ux(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(h7,"lmdbDeleteRecords");function Ux(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(Ux,"createDeleteResponse")});var rI=M((SPe,Bx)=>{"use strict";var p7=(H(),v(Y)),gPe=In();function tI(e,t){let r=Object.create(null);if(t.length===1&&p7.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(tI,"parseRow");function E7(e,t,r,n){let s=tI(r,e);n.push(s)}o(E7,"searchAll");function _7(e,t,r,n){let s=tI(r,e);n[t]=s}o(_7,"searchAllToMap");function g7(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(g7,"iterateDBI");function al(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(al,"pushResults");function S7(e,t,r,n,s,i){t.toString().endsWith(e)&&al(t,r,n,s,i)}o(S7,"endsWith");function T7(e,t,r,n,s,i){t.toString().includes(e)&&al(t,r,n,s,i)}o(T7,"contains");function R7(e,t,r,n,s,i){t>e&&al(t,r,n,s,i)}o(R7,"greaterThanCompare");function y7(e,t,r,n,s,i){t>=e&&al(t,r,n,s,i)}o(y7,"greaterThanEqualCompare");function A7(e,t,r,n,s,i){t<e&&al(t,r,n,s,i)}o(A7,"lessThanCompare");function b7(e,t,r,n,s,i){t<=e&&al(t,r,n,s,i)}o(b7,"lessThanEqualCompare");Bx.exports={parseRow:tI,searchAll:E7,searchAllToMap:_7,iterateDBI:g7,endsWith:S7,contains:T7,greaterThanCompare:R7,greaterThanEqualCompare:y7,lessThanCompare:A7,lessThanEqualCompare:b7,pushResults:al}});var Yu=M((bPe,Vx)=>{"use strict";var xa=Rt(),RPe=z(),Qn=In(),Z_=Kt(),er=rn().LMDB_ERRORS_ENUM,yPe=ie(),I7=(H(),v(Y)),eg=rI(),{parseRow:N7}=eg,APe=require("lmdb"),{OVERFLOW_MARKER:Fx,MAX_SEARCH_KEY_LENGTH:w7}=Z_;function Hx(e,t,r,n=!1,s=void 0,i=void 0){return cl(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(Hx,"iterateFullIndex");function qm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return cl(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(qm,"iterateRangeBetween");function cl(e,t,r,n){let s=e.database||e,i=xa.openDBI(s,r);i[Z_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&xa.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(cl,"setupTransaction");function kx(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(Fx)){if(!s)if(r)s=xa.openDBI(e,r);else{let l=xa.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=xa.openDBI(e,l[u]),!s[Z_.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(kx,"getOverflowCheck");function O7(e,t,r,n=!1,s=void 0,i=void 0){if(Qn.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);return cl(e,t,t,(a,c,l)=>(tg(r),r=Gm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>N7(u.value,r))))}o(O7,"searchAll");function C7(e,t,r,n=!1,s=void 0,i=void 0){if(Qn.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);tg(r),r=Gm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of Hx(e,t,t,n,s,i))a.set(c,eg.parseRow(l,r));return a}o(C7,"searchAllToMap");function P7(e,t,r=!1,n=void 0,s=void 0){if(Qn.validateEnv(e),t===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=Hx(e,void 0,t,r,n,s),c=a.transaction,l=kx(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(P7,"iterateDBI");function L7(e,t){if(Qn.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);return xa.statDBI(e,t).entryCount}o(L7,"countAll");function D7(e,t,r,n,s=!1,i=void 0,a=void 0){return Ba(e,r,n),cl(e,t,r,(c,l,u,d)=>(n=Qn.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(D7,"equals");function M7(e,t,r){return Ba(e,t,r),xa.openDBI(e,t).getValuesCount(r)}o(M7,"count");function v7(e,t,r,n,s=!1,i=void 0,a=void 0){return Ba(e,r,n),cl(e,null,r,(c,l)=>{n=Qn.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(v7,"startsWith");function U7(e,t,r,n,s=!1,i=void 0,a=void 0){return qx(e,t,r,n,s,i,a,!0)}o(U7,"endsWith");function qx(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return Ba(e,r,n),cl(e,null,r,(l,u,d,f)=>{let m=kx(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(Fx)?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[Z_.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(qx,"contains");function x7(e,t,r,n,s=!1,i=void 0,a=void 0){Ba(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),qm(e,t,r,n,l,s,i,a,!0,!1)}o(x7,"greaterThan");function B7(e,t,r,n,s=!1,i=void 0,a=void 0){Ba(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),qm(e,t,r,n,l,s,i,a,!1,!1)}o(B7,"greaterThanEqual");function F7(e,t,r,n,s=!1,i=void 0,a=void 0){Ba(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),qm(e,t,r,l,n,s,i,a,!1,!0)}o(F7,"lessThan");function H7(e,t,r,n,s=!1,i=void 0,a=void 0){Ba(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),qm(e,t,r,l,n,s,i,a,!1,!1)}o(H7,"lessThanEqual");function k7(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(Qn.validateEnv(e),r===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(er.START_VALUE_REQUIRED);if(s===void 0)throw new Error(er.END_VALUE_REQUIRED);if(n=Qn.convertKeyValueToWrite(n),s=Qn.convertKeyValueToWrite(s),n>s)throw new Error(er.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return qm(e,t,r,n,s,i,a,c)}o(k7,"between");function q7(e,t,r,n){Qn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(tg(r),r=Gm(s,r),n===void 0)throw new Error(er.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=eg.parseRow(c,r)),a}o(q7,"searchByHash");function G7(e,t,r){Qn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(er.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(G7,"checkHashExists");function $7(e,t,r,n,s=[]){return $x(e,t,r,n,s),Gx(e,t,r,n,s).map(i=>i[1])}o($7,"batchSearchByHash");function V7(e,t,r,n,s=[]){$x(e,t,r,n,s);let i=new Map;for(let[a,c]of Gx(e,t,r,n,s))i.set(a,c);return i}o(V7,"batchSearchByHashToMap");function Gx(e,t,r,n,s=[]){return cl(e,t,t,(i,a,c)=>{r=Gm(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,eg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(Gx,"batchHashSearch");function $x(e,t,r,n,s){if(Qn.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(tg(r),n==null)throw new Error(er.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(er.IDS_MUST_BE_ITERABLE)}o($x,"initializeBatchSearchByHash");function tg(e){if(!Array.isArray(e))throw e===void 0?new Error(er.FETCH_ATTRIBUTES_REQUIRED):new Error(er.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(tg,"validateFetchAttributes");function Ba(e,t,r){if(Qn.validateEnv(e),t===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(er.SEARCH_VALUE_REQUIRED);if(r?.length>w7)throw new Error(er.SEARCH_VALUE_TOO_LARGE)}o(Ba,"validateComparisonFunctions");function Gm(e,t){return t.length===1&&I7.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=xa.listDBIs(e)),t}o(Gm,"setGetWholeRowAttributes");Vx.exports={searchAll:O7,searchAllToMap:C7,count:M7,countAll:L7,equals:D7,startsWith:v7,endsWith:U7,contains:qx,searchByHash:q7,setGetWholeRowAttributes:Gm,batchSearchByHash:$7,batchSearchByHashToMap:V7,checkHashExists:G7,iterateDBI:P7,greaterThan:x7,greaterThanEqual:B7,lessThan:F7,lessThanEqual:H7,between:k7}});var Wu=M((NPe,jx)=>{var Kx=require("lodash"),Yx=st(),$e=require("joi"),K7=ie(),{hdbSchemaTable:$m,checkValidTable:Wx,hdbTable:zx,hdbDatabase:rg}=qi(),{handleHDBError:Y7,hdbErrors:W7}=_e(),{getDatabases:z7}=(Me(),v(gt)),{HTTP_STATUS_CODES:j7}=W7,Q7=$e.object({database:rg,schema:rg,table:zx,search_attribute:$m,search_value:$e.any().required(),get_attributes:$e.array().min(1).items($e.alternatives($m,$e.object())).optional(),desc:$e.bool(),limit:$e.number().integer().min(1),offset:$e.number().integer().min(0)}),J7=$e.object({database:rg,schema:rg,table:zx,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($m,$e.object())).optional(),sort:$e.object({attribute:$e.alternatives($m,$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($m,$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()});jx.exports=function(e,t){let r=null;switch(t){case"value":r=Yx.validateBySchema(e,Q7);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(Wx("database",e.schema)),i(Wx("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=Yx.validateBySchema(e,J7);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=K7.checkGlobalSchemaTable(e.schema,e.table);if(s)return Y7(new Error,s,j7.NOT_FOUND);let a=z7()[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=Kx.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!Kx.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 nI=M((OPe,Qx)=>{"use strict";var X7=Rt(),Z7=Wu(),{getSchemaPath:eee}=Nt();Qx.exports=tee;function tee(e){let t=Z7(e,"hashes");if(t)throw t;let r=eee(e.schema,e.table);return X7.openEnvironment(r,e.table)}o(tee,"initialize")});var sI=M((PPe,Jx)=>{"use strict";var ree=Yu(),nee=nI();Jx.exports=see;async function see(e){let t=await nee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return ree.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(see,"lmdbGetDataByHash")});var zu=M((DPe,Xx)=>{"use strict";var iI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Xx.exports=iI});var eB=M((UPe,Zx)=>{"use strict";var vPe=zu(),iee=Yu(),oee=nI();Zx.exports=aee;async function aee(e){let t=await oee(e),r=global.hdb_schema[e.schema][e.table];return iee.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(aee,"lmdbSearchByHash")});var ci=M((BPe,tB)=>{"use strict";var oI=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}};tB.exports=oI});var ng=M((HPe,aB)=>{"use strict";var sn=Yu(),cee=Rt(),lee=ie(),Ve=Kt(),ll=(H(),v(Y)),uee=wo(),rB=rn().LMDB_ERRORS_ENUM,{getSchemaPath:dee}=Nt(),Lo=ll.SEARCH_WILDCARDS;async function fee(e,t,r){let n;e.schema===ll.SYSTEM_SCHEMA_NAME?n=uee[e.table]:n=global.hdb_schema[e.schema][e.table];let s=oB(e,n.hash_attribute,r,t);return sB(e,s,n.hash_attribute,r)}o(fee,"prepSearch");async function sB(e,t,r,n){let s=dee(e.schema,e.table),i=await cee.openEnvironment(s,e.table),a=iB(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(mee(e,r)===!1){let d=e.search_attribute;if(d===r)return n?nB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?nB(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(sB,"executeSearch");function iB(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(iB,"searchByType");function nB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(nB,"createMapFromIterable");function mee(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(mee,"checkToFetchMore");function oB(e,t,r,n){if(lee.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),Lo.indexOf(s)>-1)return r===!0?Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ve.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Lo[0])<0&&s.indexOf(Lo[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(Lo.indexOf(i)>=0&&Lo.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),Ve.SEARCH_TYPES.CONTAINS;if(Lo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ve.SEARCH_TYPES.ENDS_WITH;if(Lo.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),Ve.SEARCH_TYPES.STARTS_WITH;if(s.includes(Lo[0])||s.includes(Lo[1]))return Ve.SEARCH_TYPES.EQUALS;throw new Error(rB.UNKNOWN_SEARCH_TYPE)}else switch(n){case ll.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ve.SEARCH_TYPES.BETWEEN;case ll.VALUE_SEARCH_COMPARATORS.GREATER:return Ve.SEARCH_TYPES.GREATER_THAN;case ll.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ve.SEARCH_TYPES.GREATER_THAN_EQUAL;case ll.VALUE_SEARCH_COMPARATORS.LESS:return Ve.SEARCH_TYPES.LESS_THAN;case ll.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ve.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(rB.UNKNOWN_SEARCH_TYPE)}}o(oB,"createSearchTypeFromSearchObject");aB.exports={executeSearch:sB,createSearchTypeFromSearchObject:oB,prepSearch:fee,searchByType:iB}});var lB=M((GPe,cB)=>{"use strict";var qPe=ci(),hee=Wu(),pee=ie(),Eee=(H(),v(Y)),_ee=ng();cB.exports=gee;function gee(e,t){if(!pee.isEmpty(t)&&Eee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=hee(e,"value");if(n)throw n;return _ee.prepSearch(e,t,!0)}o(gee,"lmdbGetDataByValue")});var Vm=M((KPe,uB)=>{"use strict";var VPe=ci(),See=Wu(),Tee=ie(),Ree=(H(),v(Y)),yee=ng();uB.exports=Aee;async function Aee(e,t){if(!Tee.isEmpty(t)&&Ree.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=See(e,"value");if(n)throw n;return yee.prepSearch(e,t,!1)}o(Aee,"lmdbSearchByValue")});var fB=M((zPe,dB)=>{"use strict";var WPe=Kt(),aI=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},cI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},lI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};dB.exports={SearchByConditionsObject:aI,SearchCondition:cI,SortAttribute:lI}});var _B=M((XPe,EB)=>{"use strict";var QPe=fB().SearchByConditionsObject,bee=ci(),Iee=Wu(),uI=Yu(),sg=Kt(),{Resource:JPe}=(Ma(),v(WU)),pB=ng(),Nee=rI(),wee=require("lodash"),{getSchemaPath:Oee}=Nt(),mB=Rt(),{handleHDBError:Cee,hdbErrors:Pee}=_e(),{HTTP_STATUS_CODES:Lee}=Pee,Dee=1e8;EB.exports=Mee;async function Mee(e){let t=Iee(e,"conditions");if(t)throw Cee(t,t.message,Lee.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=Oee(e.schema,e.table),n=await mB.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)mB.openDBI(n,u.search_attribute);let i=wee.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===sg.SEARCH_TYPES.EQUALS?u.estimated_count=uI.count(n,u.search_attribute,u.search_value):d===sg.SEARCH_TYPES.CONTAINS||d===sg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=Dee}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await hB(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(pB.filterByType),f=d.length,m=uI.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=>Nee.parseRow(h,m))}else{for(let f=1;f<i.length;f++){let m=i[f],h=await hB(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=uI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(Mee,"lmdbSearchByConditions");async function hB(e,t,r,n){let s=new bee(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===sg.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,pB.searchByType(e,s,i,n).map(a=>a.value)}o(hB,"executeConditionSearch")});var ju=M((eLe,gB)=>{"use strict";var vee=(H(),v(Y)).OPERATIONS_ENUM,dI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=vee.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};gB.exports=dI});var fI=M((rLe,NB)=>{"use strict";var yB=ci(),AB=ju(),bB=Vm(),IB=km(),Dn=(H(),v(Y)),SB=ie(),TB=Rt(),{getTransactionAuditStorePath:Uee,getSchemaPath:xee}=Nt(),RB=z();NB.exports=Bee;async function Bee(e){try{if(SB.isEmpty(global.hdb_schema[e.schema])||SB.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Fee(e),await Hee(e);let t=xee(e.schema,e.table);try{await TB.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")RB.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Uee(e.schema,e.table);await TB.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")RB.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(Bee,"lmdbDropTable");async function Fee(e){let t=new yB(Dn.SYSTEM_SCHEMA_NAME,Dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await bB(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 AB(Dn.SYSTEM_SCHEMA_NAME,Dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await IB(s)}o(Fee,"deleteAttributesFromSystem");async function Hee(e){let t=new yB(Dn.SYSTEM_SCHEMA_NAME,Dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await bB(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 AB(Dn.SYSTEM_SCHEMA_NAME,Dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await IB(s)}catch(i){throw i}}o(Hee,"dropTableFromSystem")});var OB=M((sLe,wB)=>{"use strict";var kee=require("fs-extra"),qee=ci(),Gee=zu(),$ee=ju(),Vee=fI(),Kee=km(),Yee=sI(),Wee=Vm(),Do=(H(),v(Y)),{getSchemaPath:zee}=Nt(),{handleHDBError:jee,hdbErrors:Qee}=_e(),{HDB_ERROR_MSGS:Jee,HTTP_STATUS_CODES:Xee}=Qee;wB.exports=Zee;async function Zee(e){let t;try{t=await ete(e.schema);let r=new qee(Do.SYSTEM_SCHEMA_NAME,Do.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Do.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Do.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Wee(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await Vee(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new $ee(Do.SYSTEM_SCHEMA_NAME,Do.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Kee(s);let i=zee(t);await kee.remove(i)}catch(r){throw r}}o(Zee,"lmdbDropSchema");async function ete(e){let t=new Gee(Do.SYSTEM_SCHEMA_NAME,Do.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Do.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Yee(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw jee(new Error,Jee.SCHEMA_NOT_FOUND(e),Xee.NOT_FOUND,void 0,void 0,!0);return n}o(ete,"validateDropSchema")});var Qu=M((oLe,CB)=>{"use strict";var mI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};CB.exports=mI});var pI=M((lLe,PB)=>{"use strict";var tte=require("fs-extra"),ig=Rt(),{getTransactionAuditStorePath:rte}=Nt(),hI=Kt(),cLe=Qu();PB.exports=nte;async function nte(e){let t;try{let r=rte(e.schema,e.table);await tte.mkdirp(r),t=await ig.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{ig.createDBI(t,hI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ig.createDBI(t,hI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ig.createDBI(t,hI.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(nte,"createTransactionsAuditEnvironment")});var MB=M((fLe,DB)=>{"use strict";var EI=(H(),v(Y)),LB=Rt(),ste=il(),{getSystemSchemaPath:ite,getSchemaPath:ote}=Nt(),dLe=wo(),ate=Q_(),_I=j_(),cte=z(),lte=pI();DB.exports=ute;async function ute(e,t){let r=ote(t.schema,t.table),n=new _I(t.schema,t.table,EI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new _I(t.schema,t.table,EI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new _I(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await LB.createEnvironment(r,t.table),e!==void 0){let a=await LB.openEnvironment(ite(),EI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await ste.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 gI(n),await gI(s),await gI(i)}await lte(t)}catch(a){throw a}}o(ute,"lmdbCreateTable");async function gI(e){try{await ate(e)}catch(t){cte.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(gI,"createAttribute")});var UB=M((hLe,vB)=>{"use strict";var dte=Bm(),fte=om(),mte=J_(),Km=(H(),v(Y)),hte=il().updateRecords,pte=Rt(),{getSchemaPath:Ete}=Nt(),_te=Fm(),gte=z();vB.exports=Ste;async function Ste(e){try{let{schemaTable:t,attributes:r}=dte(e);fte(e,r,t.hash_attribute),e.schema!==Km.SYSTEM_SCHEMA_NAME&&(r.includes(Km.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Km.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Km.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Km.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await mte(e.hdb_auth_header,t,r),s=Ete(e.schema,e.table),i=await pte.openEnvironment(s,e.table),a=await hte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await _te(e,a)}catch(c){gte.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(Ste,"lmdbUpdateRecords")});var BB=M((ELe,xB)=>{"use strict";var Tte=(H(),v(Y)).OPERATIONS_ENUM,SI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Tte.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};xB.exports=SI});var HB=M((SLe,FB)=>{"use strict";var gLe=BB(),Rte=Bm(),yte=om(),Ate=J_(),Ym=(H(),v(Y)),bte=il().upsertRecords,Ite=Rt(),{getSchemaPath:Nte}=Nt(),wte=Fm(),Ote=z(),{handleHDBError:Cte,hdbErrors:Pte}=_e();FB.exports=Lte;async function Lte(e){let t;try{t=Rte(e)}catch(l){throw Cte(l,l.message,Pte.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;yte(e,n,r.hash_attribute),e.schema!==Ym.SYSTEM_SCHEMA_NAME&&(n.includes(Ym.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Ym.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Ym.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Ym.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Ate(e.hdb_auth_header,r,n),i=Nte(e.schema,e.table),a=await Ite.openEnvironment(i,e.table),c=await bte(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await wte(e,c)}catch(l){Ote.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(Lte,"lmdbUpsertRecords")});var qB=M((RLe,kB)=>{"use strict";var TI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};kB.exports=TI});var $B=M((ALe,GB)=>{"use strict";var RI=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}};GB.exports=RI});var YB=M((NLe,KB)=>{"use strict";var yI=Rt(),{getTransactionAuditStorePath:Dte}=Nt(),ILe=qB(),Wm=Kt(),Mte=ie(),VB=$B(),vte=require("util").promisify,Ute=vte(setTimeout),xte=1e4,Bte=100;KB.exports=Fte;async function Fte(e){let t=Dte(e.schema,e.table),r=await yI.openEnvironment(t,e.table,!0),n=yI.listDBIs(r);yI.initializeDBIs(r,Wm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new VB;do s=await Hte(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 Ute(Bte);while(s.transactions_deleted>0);return i}o(Fte,"deleteAuditLogsBefore");async function Hte(e,t){let r=new VB;try{let n=e.dbis[Wm.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[Wm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Mte.isEmpty(c)||(s=e.dbis[Wm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[Wm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>xte)break}return await s,r}catch(n){throw n}}o(Hte,"deleteTransactions")});var zB=M((OLe,WB)=>{"use strict";var AI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};WB.exports=AI});var QB=M((LLe,jB)=>{"use strict";var kte=ci(),qte=ju(),PLe=zB(),Gi=(H(),v(Y)),Gte=ie(),bI=Rt(),$te=wo(),Vte=Vm(),Kte=km(),{getSchemaPath:Yte}=Nt();jB.exports=Wte;async function Wte(e,t=!0){let r;e.schema===Gi.SYSTEM_SCHEMA_NAME?r=$te[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await jte(e),s=Yte(e.schema,e.table),i=await bI.openEnvironment(s,e.table);return t===!0&&await zte(e,i,r.hash_attribute),bI.dropDBI(i,e.attribute),n}o(Wte,"lmdbDropAttribute");async function zte(e,t,r){let n=bI.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(zte,"removeAttributeFromAllObjects");async function jte(e){let t=new kte(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Vte(t)).filter(a=>a[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Gte.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(a=>a[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new qte(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Kte(i)}o(jte,"dropAttributeFromSystem")});var rF=M((vLe,tF)=>{"use strict";var II=Rt(),Ju=Kt(),MLe=In(),NI=(H(),v(Y)),JB=ie(),{getTransactionAuditStorePath:Qte}=Nt(),Jte=Yu(),og=$u(),Xte=z();tF.exports=Zte;async function Zte(e){let t=Qte(e.schema,e.table),r=await II.openEnvironment(t,e.table,!0),n=II.listDBIs(r);II.initializeDBIs(r,Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case NI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return XB(r,e.search_values);case NI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,tre(r,e.search_values,s);case NI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return ere(r,e.search_values);default:return XB(r)}}o(Zte,"readAuditLog");function XB(e,t=[0,Date.now()]){JB.isEmpty(t[0])&&(t[0]=0),JB.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new og,s))}o(XB,"searchTransactionsByTimestamp");function ere(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Ju.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,eF(e,i))}return Object.fromEntries(r)}o(ere,"searchTransactionsByUsername");function tre(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Jte.equals(e,Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ju.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=eF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);ZB(l,"records",r,d,a),ZB(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(tre,"searchTransactionsByHashValues");function ZB(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 og(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new og(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(ZB,"loopRecords");function eF(e,t){let r=[];try{let n=e.dbis[Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new og,i);r.push(a)}}catch(i){Xte.warn(i)}return r}catch(n){throw n}}o(eF,"batchSearchTransactions")});var sF=M((FLe,nF)=>{"use strict";var{getSchemaPath:xLe}=Nt(),BLe=Rt(),{database:rre}=(Me(),v(gt));nF.exports={writeTransaction:nre};async function nre(e,t,r){return rre({database:e,table:t}).transaction(r)}o(nre,"writeTransaction")});var cF=M((kLe,aF)=>{"use strict";var{getSchemaPath:iF}=Nt(),oF=Rt();aF.exports={flush:sre,resetReadTxn:ire};async function sre(e,t){return(await oF.openEnvironment(iF(e,t),t.toString())).flushed}o(sre,"flush");async function ire(e,t){try{(await oF.openEnvironment(iF(e,t),t.toString())).resetReadTxn()}catch{}}o(ire,"resetReadTxn")});var fF=M((GLe,dF)=>{"use strict";var{Readable:ore}=require("stream"),{getDatabases:are}=(Me(),v(gt)),{readSync:cre,openSync:lre,createReadStream:lF}=require("fs"),{open:ure}=require("lmdb"),uF=Lm(),dre=Dm(),{AUDIT_STORE_OPTIONS:fre}=(Mi(),v(DU)),{INTERNAL_DBIS_NAME:mre,AUDIT_STORE_NAME:hre}=Kt();dF.exports=Ere;var wI=32768,pre=100;async function Ere(e){let t=e.database||e.schema||"data",r=are()[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=ure({noSync:!0,maxDbs:dre.MAX_DBS}),m,h=f.openDB(mre,new uF(!1)),p=d.useReadTransaction(),_=0,g=o(async function(T,R){R.encoding="binary",R.encoder=void 0;let N=f.openDB(T,R),C=d.openDB(T,R);for(let{key:q,version:j,value:F}of C.getRange({start:null,transaction:p,versions:C.useVersions}))m=N.put(q,F,j),_++%pre===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(N=>T.startsWith?.(N+"/"))){h.put(T,R);let[,N]=T.split("/"),C=!N,q=new uF(!C,C);await g(T,q)}e.include_audit&&await g(hre,{...fre}),await m;let y=lF(f.path);return y.headers=l(),y.on("close",()=>{p.done(),f.close()}),y}let a=r[Object.keys(r)[0]].primaryStore,c=lre(a.path);return a.transaction(()=>{let u=Buffer.alloc(wI);cre(c,u,0,wI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=lF(null,{fd:c,start:wI}),m=new ore.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(Ere,"getBackup")});var pF=M((VLe,hF)=>{"use strict";var _re=z(),{handleHDBError:gre}=_e(),Sre=H0(),Tre=Q_(),Rre=Jb(),yre=Ox(),Are=km(),bre=sI(),Ire=eB(),Nre=lB(),wre=Vm(),Ore=_B(),Cre=OB(),Pre=MB(),Lre=UB(),Dre=HB(),Mre=YB(),vre=fI(),Ure=QB(),xre=rF(),Bre=sF(),mF=cF(),Fre=fF(),OI=class extends Sre{static{o(this,"LMDBBridge")}async searchByConditions(t){return Ore(t)}async getDataByHash(t){return await bre(t)}async searchByHash(t){return await Ire(t)}async getDataByValue(t,r){return await Nre(t,r)}async searchByValue(t){return await wre(t)}async createSchema(t){return await yre(t)}async dropSchema(t){return await Cre(t)}async createTable(t,r){return await Pre(t,r)}async dropTable(t){return await vre(t)}async createAttribute(t){return await Tre(t)}async createRecords(t){return await Rre(t)}async updateRecords(t){return await Lre(t)}async upsertRecords(t){try{return await Dre(t)}catch(r){throw gre(r,null,null,_re.ERR,r)}}async deleteRecords(t){return await Are(t)}async dropAttribute(t){return await Ure(t)}async deleteAuditLogsBefore(t){return await Mre(t)}async readAuditLog(t){return await xre(t)}writeTransaction(t,r,n){return Bre.writeTransaction(t,r,n)}flush(t,r){return mF.flush(t,r)}resetReadTxn(t,r){return mF.resetReadTxn(t,r)}getBackup(t){return Fre(t)}};hF.exports=OI});function Mn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function jm(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 Jn.ClientError(`${u} must be a string, attempt to assign ${m}`);Mn(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 Jn.ClientError(`${u} must be a string, attempt to assign ${m}`);Mn(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 Jn.ClientError(`${u} must be a number, attempt to assign ${h}`);Mn(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 Jn.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Mn(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 Jn.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Mn(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 Jn.ClientError(`${u} must be a number, attempt to assign ${m}`);Mn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new Jn.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Mn(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 Jn.ClientError(`${u} must be a Date, attempt to assign ${m}`);Mn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new Jn.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Mn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof Rs||m==null&&l.nullable!==!1))throw new Jn.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Mn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Mn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new Jn.ClientError(`${u} must be an object, attempt to assign ${m}`);Mn(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=CI(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 Jn.ClientError("Can not add a property to a sealed table schema");Mn(this)[l]=u}),a("deleteProperty",function(l){Mn(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?gF:_F);break}c=l}while(c&&c!==_F&&c!==gF)}function SF(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(EF[t])return EF[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=CI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Hre(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 CI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends dl{static{o(this,"TrackedObject")}},jm(r,t)),new r(e)):new dl(e);case Array:let n=new cg(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=CI(a,t?.elements)),n[s]=a}return n;default:return e}}function lg(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=lg(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 fl(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=fl(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=OA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=fl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)kre.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function ag(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[ul]||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(ag(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(ag(s))return!0}else return!0}else return!0}}return!1}var Jn,EF,_F,gF,dl,kre,ul,cg,zm,PI=le(()=>{Jn=w(_e());s_();Yn();o(Mn,"getChanges");o(jm,"assignTrackedAccessors");EF=Object.prototype,_F=new Proxy({},{get:SF}),gF=new Proxy({},{get:SF,set:Hre});o(SF,"getProxiedProperty");o(Hre,"setProxiedProperty");o(CI,"trackObject");dl=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}};jm(dl,{},!0);o(lg,"collapseData");kre=Object.prototype.hasOwnProperty;o(fl,"updateAndFreeze");o(ag,"hasChanges");ul=Symbol.for("has-array-changes"),cg=class extends Array{static{o(this,"TrackedArray")}#e;[ul];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[ul]=!0,super.splice(...t)}push(...t){return this[ul]=!0,super.push(...t)}pop(){return this[ul]=!0,super.pop()}unshift(...t){return this[ul]=!0,super.unshift(...t)}shift(){return this[ul]=!0,super.shift()}};cg.prototype.constructor=Array;zm=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var wF={};Oe(wF,{ResourceBridge:()=>MI});function vI({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 TF(e,t){let r=$i(e),n=vI(e,r);if(!r)throw new li.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;Ft(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&&lg(d)}catch(f){d={message:(0,NF.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 $i(e){let t=e.database||e.schema||Gre,r=ot()[t];if(!r)throw(0,li.handleHDBError)(new Error,qre.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function RF(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*yF(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 AF,ug,li,bF,LI,DI,IF,NF,qre,Gre,$re,Vre,MI,OF=le(()=>{AF=w(pF()),ug=w(Wu()),li=w(_e());Me();bF=w(Bm());H();LI=w(Po()),DI=w(ai()),IF=w(ie());kc();PI();NF=w(z()),{HDB_ERROR_MSGS:qre}=li.hdbErrors,Gre="data",$re=1e4,Vre=10,MI=class extends AF.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,ug.default)(t,"conditions");if(r)throw(0,li.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=$i(t);if(!n)throw new li.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:vI(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 li.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}]}je({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await $i(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=$i(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 $i(t).dropTable()}createSchema(t){return Xu({database:t.schema,table:null}),LI.signalSchemaChange(new DI.SchemaEventMsg(process.pid,G.CREATE_SCHEMA,t.schema))}async dropSchema(t){await UI(t.schema),LI.signalSchemaChange(new DI.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,bF.default)(t),s,i=ot()[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),Ft(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=lg(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=ot()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Ft(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 RF(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ot()[t.schema][t.table];if(!r.createdTimeProperty)throw new li.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:GE.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,IF.asyncSetTimeout)(Vre),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%$re===0&&await u();return l.length>0&&await u(),s?RF(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,ug.default)(t,"hashes");if(r)throw r;return TF(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of TF(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&uA[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,ug.default)(t,"value");if(n)throw n;let s=$i(t);if(!s)throw new li.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===GE.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:vI(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=$i(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){$i({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return $i(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=$i(t),n={};switch(t.search_type){case $E.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 $E.USERNAME:{let s=t.search_values;for await(let i of yF(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return yF(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(vI,"getSelect");o(TF,"getRecords");o($i,"getTable");o(RF,"createDeleteResponse");o(yF,"groupRecordsInHistory")});var Xn=M((tDe,CF)=>{"use strict";var{ResourceBridge:Kre}=(OF(),v(wF)),Yre=ae();Yre.initSync();var dg;function Wre(){return dg||(dg=new Kre,dg)}o(Wre,"getBridge");CF.exports=Wre()});var MF=M((nDe,DF)=>{"use strict";var PF=require("lodash"),Qm=require("mathjs"),zre=require("jsonata"),LF=ie();DF.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?PF.uniqWith(e,PF.isEqual):e,"distinct_array"),searchJSON:jre,mad:Jm.bind(null,Qm.mad),mean:Jm.bind(null,Qm.mean),mode:Jm.bind(null,Qm.mode),prod:Jm.bind(null,Qm.prod),median:Jm.bind(null,Qm.median)};function Jm(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(Jm,"aggregateFunction");function jre(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(LF.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),LF.isEmpty(this.__ala__.res[r])){let n=zre(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(jre,"searchJSON")});var UF=M((iDe,vF)=>{"use strict";var ur=require("moment"),xI="YYYY-MM-DDTHH:mm:ss.SSSZZ";ur.suppressDeprecationWarnings=!0;vF.exports={current_date:o(()=>ur().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>ur().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return ur(e).utc().format("YYYY");case"month":return ur(e).utc().format("MM");case"day":return ur(e).utc().format("DD");case"hour":return ur(e).utc().format("HH");case"minute":return ur(e).utc().format("mm");case"second":return ur(e).utc().format("ss");case"millisecond":return ur(e).utc().format("SSS");default:break}},"extract"),date:o(e=>ur(e).utc().format(xI),"date"),date_format:o((e,t)=>ur(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>ur(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>ur(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=ur(e).utc(),s=ur(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>ur().utc().valueOf(),"now"),get_server_time:o(()=>ur().format(xI),"get_server_time"),offset_utc:o((e,t)=>ur(e).utc().utcOffset(t).format(xI),"offset_utc")}});var HF=M((aDe,FF)=>{"use strict";var Qre=require("@turf/area"),Jre=require("@turf/length"),Xre=require("@turf/circle"),Zre=require("@turf/difference"),ene=require("@turf/distance"),tne=require("@turf/boolean-contains"),rne=require("@turf/boolean-equal"),nne=require("@turf/boolean-disjoint"),sne=require("@turf/helpers"),xF=(H(),v(Y)),Ye=ie(),Mo=z();FF.exports={geoArea:ine,geoLength:one,geoCircle:ane,geoDifference:cne,geoDistance:BF,geoNear:lne,geoContains:une,geoEqual:dne,geoCrosses:fne,geoConvert:mne};function ine(e){if(Ye.isEmpty(e))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return Qre.default(e)}catch(t){return Mo.trace(t,e),NaN}}o(ine,"geoArea");function one(e,t){if(Ye.isEmpty(e))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return Jre.default(e,{units:t||"kilometers"})}catch(r){return Mo.trace(r,e),NaN}}o(one,"geoLength");function ane(e,t,r){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return Xre.default(e,t,{units:r||"kilometers"})}catch(n){return Mo.trace(n,e,t),NaN}}o(ane,"geoCircle");function cne(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 Zre(e,t)}catch(r){return Mo.trace(r,e,t),NaN}}o(cne,"geoDifference");function BF(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 ene.default(e,t,{units:r||"kilometers"})}catch(n){return Mo.trace(n,e,t),NaN}}o(BF,"geoDistance");function lne(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 BF(e,t,n)<=r}catch(s){return Mo.trace(s,e,t),!1}}o(lne,"geoNear");function une(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 tne.default(e,t)}catch(r){return Mo.trace(r,e,t),!1}}o(une,"geoContains");function dne(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 rne.default(e,t)}catch(r){return Mo.trace(r,e,t),!1}}o(dne,"geoEqual");function fne(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!nne.default(e,t)}catch(r){return Mo.trace(r,e,t),!1}}o(fne,"geoCrosses");function mne(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(xF.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(xF.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ye.autoCastJSON(e)),sne[t](e,r)}o(mne,"geoConvert")});var fg=M((lDe,kF)=>{var ml=MF(),Zn=UF(),Vi=HF();kF.exports=e=>{e.aggr.mad=e.aggr.MAD=ml.mad,e.aggr.mean=e.aggr.MEAN=ml.mean,e.aggr.mode=e.aggr.MODE=ml.mode,e.aggr.prod=e.aggr.PROD=ml.prod,e.aggr.median=e.aggr.MEDIAN=ml.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ml.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ml.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Zn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Zn.current_time,e.fn.extract=e.fn.EXTRACT=Zn.extract,e.fn.date=e.fn.DATE=Zn.date,e.fn.date_format=e.fn.DATE_FORMAT=Zn.date_format,e.fn.date_add=e.fn.DATE_ADD=Zn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Zn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Zn.date_diff,e.fn.now=e.fn.NOW=Zn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Zn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Zn.get_server_time,e.fn.getdate=e.fn.GETDATE=Zn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Zn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Vi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Vi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Vi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Vi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Vi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Vi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Vi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Vi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Vi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Vi.geoNear}});var VF=M((uDe,$F)=>{"use strict";var Xm=require("lodash"),vn=require("alasql");vn.options.cache=!1;var hne=fg(),qF=require("clone"),mg=require("recursive-iterator"),He=z(),Ze=ie(),Zu=Xn(),pne=(H(),v(Y)),{hdbErrors:Ene}=_e(),{getDatabases:GF}=(Me(),v(gt)),_ne="IS NULL",ui="There was a problem performing this search. Please check the logs and try again.";hne(vn);var BI=class{static{o(this,"SQLSearch")}constructor(t,r){if(Ze.isEmpty(t))throw He.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(),Ze.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Ze.isEmptyOrZeroLength(n))return He.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw He.error("Error thrown from checkEmptySQL in SQLSearch class method search."),He.error(n),new Error(ui)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw He.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),He.error(n),new Error(ui)}if(Object.keys(this.data).length===0)return He.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw He.error("Error thrown from processJoins in SQLSearch class method search."),He.error(n),new Error(ui)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw He.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),He.error(n),new Error(ui)}try{return t=await this._finalSQL(),t}catch(n){throw He.error("Error thrown from finalSQL in SQLSearch class method search."),He.error(n),new Error(ui)}}_getColumns(){let t=new mg(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(qF(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Xm.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=GF()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(Ze.isEmpty(this.statement.where)){He.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new mg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ze.isEmpty(r)&&r.right)if(Ze.isNotEmptyAndHasValue(r.right.value)){let n=Ze.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new vn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Ze.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new vn.yy.LogicValue({value:i}):n instanceof vn.yy.StringValue&&Ze.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new vn.yy.NumValue({value:i}))});if(t){He.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new mg(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(!Ze.isEmpty(pne.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ze.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(Ze.isEmptyOrZeroLength(r.left.columnid)||Ze.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(Ze.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"=":!Ze.isEmpty(r.right.value)||!Ze.isEmpty(r.left.value)?n.add(Ze.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(Ze.isEmptyOrZeroLength(this.all_table_attributes)&&Ze.isEmptyOrZeroLength(this.statement.from)&&Ze.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&&Xm.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(Ze.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Ze.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(Ze.isEmptyOrZeroLength(this.all_table_attributes)&&!Ze.isEmptyOrZeroLength(this.columns.columns))return t;if(Ze.isEmptyOrZeroLength(this.all_table_attributes)&&Ze.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await vn.promise(r)}catch(r){throw He.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),He.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(qF(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(Ze.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(_ne)>-1&&this.tables.forEach(s=>{let i={columnid:GF()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Xm.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),!Ze.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!Ze.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await Zu.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 He.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),He.error(d),new Error(ui)}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 Zu.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 He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),He.error(d),new Error(ui)}else if(!Ze.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Ze.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 Zu.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 He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),He.error(d),new Error(ui)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await Zu.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 He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),He.error(d),new Error(ui)}}}_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 vn.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 vn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new vn.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 vn.yy.FuncValue:new vn.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 vn.promise(p,t),t=null}catch(h){throw He.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),He.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),_=Xm.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 mg(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=Xm.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 He.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),He.error(i),new Error(ui)}}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 Zu.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 He.error("Error thrown from getDataByHash function in SQLSearch class method getData."),He.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();He.trace(`Final SQL: ${s}`),n=await vn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),He.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw He.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),He.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 He.error(Ene.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),He.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 Zu.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 He.error("There was an error when processing this SQL operation. Check your logs"),He.error(a),new Error(ui)}}return Object.values(Object.values(this.data)[0].__mergedData)}};$F.exports=BI});var on=M((fDe,KF)=>{"use strict";var gne=B0();KF.exports={searchByConditions:Tne,searchByHash:Rne,searchByValue:yne,search:Ane};var FI=Xn(),{transformReq:HI}=ie(),Sne=VF();async function Tne(e){return HI(e),FI.searchByConditions(e)}o(Tne,"searchByConditions");async function Rne(e){HI(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(Rne,"searchByHash");async function yne(e){HI(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(yne,"searchByValue");function Ane(e,t){try{let r=new gne(e);r.validate(),new Sne(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(Ane,"search")});var Ki=M((hDe,jF)=>{"use strict";var Zm=require("crypto"),bne=ae(),{CONFIG_PARAMS:Ine}=(H(),v(Y)),WF="aes-256-cbc",Nne=32,wne=16,kI=64,zF=32,One=kI+zF,YF=new Map;jF.exports={encrypt:Cne,decrypt:Pne,createNatsTableStreamName:Lne};function Cne(e){let t=Zm.randomBytes(Nne),r=Zm.randomBytes(wne),n=Zm.createCipheriv(WF,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(Cne,"encrypt");function Pne(e){let t=e.substr(0,kI),r=e.substr(kI,zF),n=e.substr(One,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=Zm.createDecipheriv(WF,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(Pne,"decrypt");function Lne(e,t){let r=bne.get(Ine.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=YF.get(r);return n||(n=Zm.createHash("md5").update(r).digest("hex"),YF.set(r,n)),n}o(Lne,"createNatsTableStreamName")});var vo=M((_De,ZF)=>{"use strict";var EDe=on(),eh=z(),{validateBySchema:QF}=st(),hl=require("joi"),Dne=Ki(),hg=ie(),{handleHDBError:pg,hdbErrors:Mne,ClientError:JF}=_e(),{HDB_ERROR_MSGS:Eg,HTTP_STATUS_CODES:qI}=Mne,XF=ae();XF.initSync();var{getDatabases:GI}=(Me(),v(gt)),vne=require("fs-extra"),Une=(H(),v(Y));ZF.exports={describeAll:xne,describeTable:_g,describeSchema:Bne};async function xne(e={}){try{let t=hg.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 _g({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 _g({schema:f,table:h,exactCount:u},_)}p&&l.push(p)}catch(p){eh.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 eh.error("Got an error in describeAll"),eh.error(t),pg(new Error,Eg.DESCRIBE_ALL_ERR)}}o(xne,"describeAll");async function _g(e,t){hg.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=QF(e,hl.object({database:hl.string(),table:hl.string().required(),exact_count:hl.boolean().strict()}));if(i)throw new JF(i.message);let c=GI()[r];if(!c)throw pg(new Error,Eg.SCHEMA_NOT_FOUND(e.schema),qI.NOT_FOUND);let l=c[n];if(!l)throw pg(new Error,Eg.TABLE_NOT_FOUND(e.schema,e.table),qI.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 vne.stat(l.primaryStore.env.path)).size}catch(h){eh.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")),XF.get(Une.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Dne.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){eh.warn(`unable to stat table dbi due to ${h}`)}return m}o(_g,"descTable");async function Bne(e){hg.transformReq(e);let t=QF(e,hl.object({database:hl.string(),exact_count:hl.boolean().strict()}));if(t)throw new JF(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 pg(new Error,Eg.SCHEMA_NOT_FOUND(e.schema),qI.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),hg.isEmpty(l)||l.describe){let u=await _g({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(Bne,"describeSchema")});var an=M((SDe,nH)=>{"use strict";var Sg=Kb(),Kr=ie(),Fne=require("util"),Tg=Xn(),Hne=ws(),eH=z(),{handleHDBError:pl,hdbErrors:kne}=_e(),{HTTP_STATUS_CODES:El}=kne,qne=Fne.promisify(Hne.getTableSchema),Gne="updated",tH="inserted",rH="upserted";nH.exports={insert:Vne,update:Kne,upsert:Yne,validation:$ne,flush:Wne};async function $ne(e){if(Kr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Kr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Kr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await qne(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&&Kr.isEmptyOrZeroLength(c[n]))throw eH.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(!Kr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw eH.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Kr.isEmpty(c[n])&&c[n]!==""&&s.has(Kr.autoCast(c[n]))&&(c.skip=!0),s.add(Kr.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($ne,"validation");async function Vne(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Sg(e);if(t)throw pl(new Error,t.message,El.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,El.BAD_REQUEST);let n=await Tg.createRecords(e);return gg(tH,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Vne,"insertData");async function Kne(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Sg(e);if(t)throw pl(new Error,t.message,El.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,El.BAD_REQUEST);let n=await Tg.updateRecords(e);return Kr.isEmpty(n.existing_rows)?gg(Gne,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):gg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Kne,"updateData");async function Yne(e){if(e.operation!=="upsert")throw pl(new Error,"invalid operation, must be upsert",El.INTERNAL_SERVER_ERROR);let t=Sg(e);if(t)throw pl(new Error,t.message,El.BAD_REQUEST);Kr.transformReq(e);let r=Kr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,El.BAD_REQUEST);let n=await Tg.upsertRecords(e);return gg(rH,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(Yne,"upsertData");function gg(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===tH?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===rH?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(gg,"returnObject");function Wne(e){return Kr.transformReq(e),Tg.flush(e.schema,e.table)}o(Wne,"flush")});var VI=M((RDe,oH)=>{var zne=st(),$I=require("joi"),{hdbTable:jne,hdbDatabase:sH}=qi(),iH={schema:sH,database:sH,table:jne},Qne={date:$I.date().iso().required()},Jne={timestamp:$I.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};oH.exports=function(e,t){let r=t==="timestamp"?{...iH,...Jne}:{...iH,...Qne},n=$I.object(r);return zne.validateBySchema(e,n)}});var lH=M((yDe,cH)=>{var Xne=st(),KI=require("joi"),{hdbTable:Zne,hdbDatabase:aH}=qi(),ese=KI.object({schema:aH,database:aH,table:Zne,hash_values:KI.array().required(),ids:KI.array()});cH.exports=function(e){return Xne.validateBySchema(e,ese)}});var jI=M((ADe,uH)=>{"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}},WI=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}},zI=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};uH.exports={InsertObject:YI,NoSQLSeachObject:WI,DeleteResponseObject:zI}});var ka=M((IDe,pH)=>{"use strict";var fH=VI(),tse=lH(),_l=ie(),dH=require("moment"),mH=z(),{promisify:rse,callbackify:nse}=require("util"),gl=(H(),v(Y)),sse=ws(),QI=rse(sse.getTableSchema),JI=Xn(),{DeleteResponseObject:ise}=jI(),{handleHDBError:Fa,hdbErrors:ose}=_e(),{HDB_ERROR_MSGS:Rg,HTTP_STATUS_CODES:Ha}=ose,ase="records successfully deleted",cse=nse(hH);pH.exports={delete:cse,deleteRecord:hH,deleteFilesBefore:lse,deleteAuditLogsBefore:use};async function lse(e){let t=fH(e,"date");if(t)throw Fa(t,t.message,Ha.BAD_REQUEST,void 0,void 0,!0);if(_l.transformReq(e),!dH(e.date,dH.ISO_8601).isValid())throw Fa(new Error,Rg.INVALID_DATE,Ha.BAD_REQUEST,gl.LOG_LEVELS.ERROR,Rg.INVALID_DATE,!0);let n=_l.checkSchemaTableExist(e.schema,e.table);if(n)throw Fa(new Error,n,Ha.NOT_FOUND,gl.LOG_LEVELS.ERROR,n,!0);let s=await JI.deleteRecordsBefore(e);if(await QI(e.schema,e.table),mH.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(lse,"deleteFilesBefore");async function use(e){let t=fH(e,"timestamp");if(t)throw Fa(t,t.message,Ha.BAD_REQUEST,void 0,void 0,!0);if(_l.transformReq(e),isNaN(e.timestamp))throw Fa(new Error,Rg.INVALID_VALUE("Timestamp"),Ha.BAD_REQUEST,gl.LOG_LEVELS.ERROR,Rg.INVALID_VALUE("Timestamp"),!0);let r=_l.checkSchemaTableExist(e.schema,e.table);if(r)throw Fa(new Error,r,Ha.NOT_FOUND,gl.LOG_LEVELS.ERROR,r,!0);let n=await JI.deleteAuditLogsBefore(e);return await QI(e.schema,e.table),mH.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(use,"deleteAuditLogsBefore");async function hH(e){e.ids&&(e.hash_values=e.ids);let t=tse(e);if(t)throw Fa(t,t.message,Ha.BAD_REQUEST,void 0,void 0,!0);_l.transformReq(e);let r=_l.checkSchemaTableExist(e.schema,e.table);if(r)throw Fa(new Error,r,Ha.NOT_FOUND,gl.LOG_LEVELS.ERROR,r,!0);try{await QI(e.schema,e.table);let n=await JI.deleteRecords(e);return _l.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${ase}`),n}catch(n){if(n.message===gl.SEARCH_NOT_FOUND_MESSAGE){let s=new ise;return s.message=gl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(hH,"deleteRecord")});var yg={};Oe(yg,{HASH_FUNCTION:()=>xr,hash:()=>eN,validate:()=>tN});function XI(e=rh){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(th.randomBytes(e)).map(r=>t[r%t.length]).join("")}function eN(e,t=xr[_H?.toUpperCase()]??xr.SHA256){return ZI[t](e)}function tN(e,t,r=xr[_H?.toUpperCase()]??xr.SHA256){return e?dse[r](e,t):!1}var th,ed,EH,_H,rh,gH,xr,ZI,dse,Ag=le(()=>{th=w(require("node:crypto")),ed=w(require("argon2")),EH=w(ae());H();_H=(0,EH.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),rh=16,gH=9,xr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(XI,"generateSalt");ZI={[xr.MD5]:(e,t=void 0)=>{t=t??XI(gH);let r=th.createHash(xr.MD5).update(e+t).digest("hex");return t+r},[xr.SHA256]:(e,t=void 0)=>{t=t??XI(rh);let r=th.createHash(xr.SHA256).update(e+t).digest("hex");return t+r},[xr.ARGON2ID]:async e=>{let t=XI(rh),r=await ed.hash(e,{type:ed.argon2id,salt:Buffer.from(t)});return t+r}},dse={[xr.MD5]:(e,t)=>{let r=e.slice(0,gH);return e===ZI[xr.MD5](t,r)},[xr.SHA256]:(e,t)=>{let r=e.slice(0,rh);return e===ZI[xr.SHA256](t,r)},[xr.ARGON2ID]:async(e,t)=>await ed.verify(e.slice(rh),t)};o(eN,"hash");o(tN,"validate")});var TH=M((CDe,SH)=>{var rN=st(),cn={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 fse(e){return cn.password.presence=!0,cn.username.presence=!0,cn.role.presence=!0,cn.active.presence=!0,rN.validateObject(e,cn)}o(fse,"addUserValidation");function mse(e){return cn.password.presence=!1,cn.username.presence=!0,cn.role.presence=!1,cn.active.presence=!1,rN.validateObject(e,cn)}o(mse,"alterUserValidation");function hse(e){return cn.password.presence=!1,cn.username.presence=!0,cn.role.presence=!1,cn.active.presence=!1,rN.validateObject(e,cn)}o(hse,"dropUserValidation");SH.exports={addUserValidation:fse,alterUserValidation:mse,dropUserValidation:hse}});var ht=M((DDe,yH)=>{"use strict";var{platform:LDe}=require("os"),pse="nats-server.zip",nN="nats-server",Ese=process.platform==="win32"?`${nN}.exe`:nN,_se=/^[^\s.,*>]+$/,RH="__request__",gse=o(e=>`${e}.${RH}`,"REQUEST_SUBJECT"),Sse={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Tse={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Rse={HUB:"hub.pid",LEAF:"leaf.pid"},yse={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Ase={SUCCESS:"success",ERROR:"error"},bse={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Ise={TXN:"txn",MSGID:"msgid"},td={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Nse={[td.ERR]:1,[td.WRN]:2,[td.INF]:3,[td.DBG]:4,[td.TRC]:5},wse={debug:"-D",trace:"-DVV"};yH.exports={NATS_SERVER_ZIP:pse,NATS_SERVER_NAME:nN,NATS_BINARY_NAME:Ese,PID_FILES:Rse,NATS_CONFIG_FILES:Tse,SERVER_SUFFIX:yse,NATS_TERM_CONSTRAINTS_RX:_se,REQUEST_SUFFIX:RH,UPDATE_REMOTE_RESPONSE_STATUSES:Ase,CLUSTER_STATUS_STATUSES:bse,REQUEST_SUBJECT:gse,SUBJECT_PREFIXES:Ise,MSG_HEADERS:Sse,LOG_LEVELS:td,LOG_LEVEL_FLAGS:wse,LOG_LEVEL_HIERARCHY:Nse}});var sN=M(ln=>{"use strict";var Ose={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
12
12
  `),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
13
- `)},Nse="certificate.pem",wse="privateKey.pem",Ose="caCertificate.pem",Cse="natsCertificate.pem",Pse="natsCaCertificate.pem",Ct={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},Lse={tls_certificate:Ct.SERVER,tlsCertificateAuthority:Ct.CA,customFunctions_tls_certificate:Ct.SERVER,customFunctionsTlsCertificateAuthority:Ct.CA,operationsApi_tls_certificate:Ct["OPERATIONS-API"],operationsApiTlsCertificateAuthority:Ct["OPERATIONS-CA"]},Dse={[Ct.SERVER]:2,[Ct.DEFAULT]:1},Mse={[Ct["OPERATIONS-API"]]:3,[Ct.SERVER]:2,[Ct.DEFAULT]:1},vse={[Ct["OPERATIONS-API"]]:3,[Ct.SERVER]:2,[Ct.DEFAULT]:1},Use={[Ct["OPERATIONS-CA"]]:3,[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1},xse={[Ct["OPERATIONS-CA"]]:3,[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1},Bse={[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1};cn.CERTIFICATE_PEM_NAME=Nse;cn.PRIVATEKEY_PEM_NAME=wse;cn.CA_PEM_NAME=Ose;cn.CERT_NAME=Ct;cn.CERT_CONFIG_NAME_MAP=Lse;cn.CERT_PREFERENCE_APP=Dse;cn.CERT_PREFERENCE_OPS=Mse;cn.CERT_PREFERENCE_REP=vse;cn.CA_CERT_PREFERENCE_REP=Use;cn.CA_CERT_PREFERENCE_OPS=xse;cn.CA_CERT_PREFERENCE_APP=Bse;cn.CERTIFICATE_VALUES=Ise;cn.NATS_CERTIFICATE_PEM_NAME=Cse;cn.NATS_CA_PEM_NAME=Pse});var nN=M((MDe,bH)=>{"use strict";var yH=require("fs-extra"),Re=require("joi"),Fse=require("os"),{boolean:ke,string:yt,number:dr,array:qa}=Re.types(),{totalmem:SH}=require("os"),Sl=require("path"),Hse=j(),rN=se(),DDe=tN(),TH=(H(),v(Y)),kse=nt(),RH="log",qse="components",Gse="Invalid logging.rotation.maxSize unit. Available units are G, M or K",$se="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Vse="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Kse="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Yse="rootPath config parameter is undefined",vn=Re.alternatives([dr.min(0),yt]).optional().empty(null),bg=Re.alternatives([qa.items(yt,{host:yt.required(),port:vn},{hostname:yt.required(),port:vn}).empty(null),qa.items(yt)]),Yi,AH=!1;bH.exports={configValidator:Wse,routesValidator:Zse,routeConstraints:bg};function Wse(e,t=!1){if(AH=t,Yi=e.rootPath,rN.isEmpty(Yi))throw Yse;let r=ke.optional(),n=dr.min(0).max(1e3).empty(null).default(Xse),s=yt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(nh),i=yt.optional().empty(null),a=yt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Re.string().empty(null).default(nh),l=Re.custom(jse).empty(null).default(nh),u=e.clustering?.enabled,d=Re.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=Re.object({enabled:r,hubServer:Re.object({cluster:Re.object({name:Re.required().empty(null),network:Re.object({port:vn,routes:bg}).required()}).required(),leafNodes:Re.object({network:Re.object({port:vn}).required()}).required(),network:Re.object({port:vn}).required()}).required(),leafServer:Re.object({network:Re.object({port:vn,routes:bg}).required(),streams:Re.object({maxAge:dr.min(120).allow(null).optional(),maxBytes:dr.min(1).allow(null).optional(),maxMsgs:dr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Re.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:ke.optional(),databaseLevel:ke.optional(),tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.required(),verify:ke.optional()}),user:yt.optional().empty(null)}).optional():f=Re.object({enabled:r,tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.optional()})}).optional(),Re.object({authentication:Re.alternatives(Re.object({authorizeLocal:ke,cacheTTL:dr.required(),cookie:Re.object({domains:qa.items(yt).optional(),expires:yt.optional()}),enableSessions:ke,hashFunction:yt.valid("md5","sha256","argon2id").optional().empty(null)}),ke).optional(),analytics:Re.object({aggregatePeriod:dr,replicate:ke.optional()}),replication:Re.object({hostname:Re.alternatives(yt,dr).optional().empty(null),url:yt.optional().empty(null),port:vn,securePort:vn,routes:qa.optional().empty(null),databases:Re.alternatives(yt,qa),enableRootCAs:ke.optional(),copyTablesToCatchUp:ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:Re.object({enabled:r}).required(),logging:Re.object({auditAuthEvents:Re.object({logFailed:ke,logSuccessful:ke}),file:ke.required(),level:Re.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Re.object({enabled:ke.optional(),compress:ke.optional(),interval:yt.custom(Jse).optional().empty(null),maxSize:yt.custom(Qse).optional().empty(null),path:yt.optional().empty(null).default(nh)}).required(),root:s,stdStreams:ke.required(),auditLog:ke.required()}).required(),operationsApi:Re.object({network:Re.object({cors:ke.optional(),corsAccessList:qa.optional(),headersTimeout:dr.min(1).optional(),keepAliveTimeout:dr.min(1).optional(),port:vn,domainSocket:Re.optional().empty("hdb/operations-server").default(nh),securePort:vn,timeout:dr.min(1).optional()}).optional(),tls:Re.alternatives([Re.array().items(d),d])}).required(),rootPath:yt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Re.object({network:Re.object({port:vn,securePort:vn,mtls:Re.alternatives([ke.optional(),Re.object({user:yt.optional(),certificateAuthority:i,required:ke.optional()})])}).required(),webSocket:ke.optional(),requireAuthentication:ke.optional()}),http:Re.object({compressionThreshold:dr.optional(),cors:ke.optional(),corsAccessList:qa.optional(),headersTimeout:dr.min(1).optional(),port:vn,securePort:vn,maxHeaderSize:dr.optional(),mtls:Re.alternatives([ke.optional(),Re.object({user:yt.optional(),certificateAuthority:i,required:ke.optional()})]),threadRange:Re.alternatives([qa.optional(),yt.optional()])}).required(),threads:Re.alternatives(n.optional(),Re.object({count:n.optional(),debug:Re.alternatives(ke.optional(),Re.object({startingPort:dr.min(1).optional(),host:yt.optional(),waitForDebugger:ke.optional()})),maxHeapMemory:dr.min(0).optional()})),storage:Re.object({writeAsync:ke.required(),overlappingSync:ke.optional(),caching:ke.optional(),compression:Re.alternatives([ke.optional(),Re.object({dictionary:yt.optional(),threshold:dr.optional()})]),compactOnStart:ke.optional(),compactOnStartKeepBackup:ke.optional(),noReadAhead:ke.optional(),path:l,prefetchWrites:ke.optional(),maxFreeSpaceToLoad:dr.optional(),maxFreeSpaceToRetain:dr.optional()}).required(),ignoreScripts:ke.optional(),tls:Re.alternatives([Re.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(Wse,"configValidator");function zse(e){return AH||yH.existsSync(e)?null:`Specified path ${e} does not exist.`}o(zse,"doesPathExist");function jse(e,t){Re.assert(e,yt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=zse(e);if(r)return t.message(r)}o(jse,"validatePath");function Qse(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Gse);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Vse):e}o(Qse,"validateRotationMaxSize");function Jse(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message($se);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Kse):e}o(Jse,"validateRotationInterval");function Xse(e,t){let r=t.state.path.join("."),n=Fse.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||SH();return i=Math.round(Math.min(i,SH())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Hse.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(Xse,"setDefaultThreads");function nh(e,t){let r=t.state.path.join(".");if(!rN.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(rN.isEmpty(Yi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Sl.join(Yi,qse);case"logging.root":return Sl.join(Yi,RH);case"clustering.leafServer.streams.path":return Sl.join(Yi,"clustering","leaf");case"storage.path":let n=Sl.join(Yi,TH.LEGACY_DATABASES_DIR_NAME);return yH.existsSync(n)?n:Sl.join(Yi,TH.DATABASES_DIR_NAME);case"logging.rotation.path":return Sl.join(Yi,RH);case"operationsApi.network.domainSocket":return r==null?null:Sl.join(Yi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(nh,"setDefaultRoot");function Zse(e){let t=Re.object({routes:bg});return kse.validateBySchema({routes:e},t)}o(Zse,"routesValidator")});var Ot=M(tr=>{"use strict";var Os=(H(),v(Y)),br=se(),fr=j(),{configValidator:eie,routesValidator:IH}=nN(),ln=require("fs-extra"),wH=require("yaml"),ts=require("path"),tie=require("is-number"),OH=require("properties-reader"),rie=require("lodash"),{handleHDBError:nie}=ge(),{HTTP_STATUS_CODES:sie,HDB_ERROR_MSGS:rd}=tn(),{server:iie}=(Dr(),v(Xf)),{PACKAGE_ROOT:CH}=It(),{DATABASES_PARAM_CONFIG:sh,CONFIG_PARAMS:es,CONFIG_PARAM_MAP:di}=Os,oie="Unable to get config value because config is uninitialized",aie="Config successfully initialized",cie="Error backing up config file",lie="Empty parameter sent to getConfigValue",PH=ts.join(CH,"config","yaml",Os.HDB_DEFAULT_CONFIG_FILE),uie=ts.join(CH,"config","yaml","defaultNatsConfig.yaml"),die="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",NH={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"},Ig,kt,Ng;tr.createConfigFile=fie;tr.getDefaultConfig=mie;tr.getConfigValue=DH;tr.initConfig=wg;tr.flattenConfig=nd;tr.updateConfigValue=MH;tr.updateConfigObject=pie;tr.getConfiguration=gie;tr.setConfiguration=Sie;tr.readConfigFile=aN;tr.getClusteringRoutes=Tie;tr.initOldConfig=vH;tr.getConfigFromFile=Rie;tr.getConfigFilePath=Tl;tr.addConfig=yie;tr.deleteConfigFromFile=Aie;tr.getConfigObj=bie;tr.resolvePath=sN;tr.getFlatConfigObj=Iie;function sN(e){if(e?.startsWith("~/"))return ts.join(br.getHomeDir(),e.slice(1));let t=oe();try{return ts.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(sN,"resolvePath");function fie(e,t=!1){let r=Ga(PH);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=wH.parseDocument(ln.readFileSync(uie,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Ig=nd(r.toJSON());let n;for(let c in e){let l=di[c.toLowerCase()];if(l===es.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=iN(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(f){fr.error(f)}}}n&&LH(r,n),oN(r,t);let s=r.toJSON();kt=nd(s);let i=r.getIn(["rootPath"]),a=ts.join(i,Os.HDB_CONFIG_FILE);if(ln.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);ln.writeFileSync(a,String(r)),fr.trace(`Config file written to ${a}`)}o(fie,"createConfigFile");function LH(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!br.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(sh.TABLES))for(let i in n[s][sh.TABLES])for(let a in n[s][sh.TABLES][i]){let c=n[s][sh.TABLES][i][a],l=[es.DATABASES,s,sh.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=[es.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){fr.error("Error parsing schemas CLI/env config arguments",n)}}o(LH,"setSchemasConfig");function mie(e){if(Ig===void 0){let r=Ga(PH);Ig=nd(r.toJSON())}let t=di[e.toLowerCase()];if(t!==void 0)return Ig[t.toLowerCase()]}o(mie,"getDefaultConfig");function DH(e){if(e==null){fr.info(lie);return}if(kt===void 0){fr.trace(oie);return}let t=di[e.toLowerCase()];if(t!==void 0)return kt[t.toLowerCase()]}o(DH,"getConfigValue");function Tl(e=br.getPropsFilePath()){let t=br.getEnvCliRootPath();if(t)return sN(ts.join(t,Os.HDB_CONFIG_FILE));let r=OH(e);return sN(r.get(Os.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Tl,"getConfigFilePath");function wg(e=!1){if(kt===void 0||e){let t;if(!br.noBootFile()){t=br.getPropsFilePath();try{ln.accessSync(t,ln.constants.F_OK|ln.constants.R_OK)}catch(i){throw fr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Tl(t),n;if(r.includes("config/settings.js"))try{vH(r);return}catch(i){if(i.code!==Os.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ga(r)}catch(i){if(i.code===Os.NODE_ERROR_CODES.ENOENT){fr.trace(`HarperDB config file not found at ${r}.
14
- This can occur during early stages of install where the config file has not yet been created`);return}else throw fr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}hie(n,r),oN(n);let s=n.toJSON();if(iie.config=s,kt=nd(s),kt.logging_rotation_rotate)for(let i in NH)kt[i]&&fr.error(`Config ${NH[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);fr.trace(aie)}}o(wg,"initConfig");function hie(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ts.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ts.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(fr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);ln.writeFileSync(t,String(e))}}o(hie,"checkForUpdatedConfig");function oN(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 rd.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 rd.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=eie(r,t);if(n.error)throw rd.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(oN,"validateConfig");function pie(e,t){kt===void 0&&(kt={});let r=di[e.toLowerCase()];if(r===void 0){fr.trace(`Unable to update config object because config param '${e}' does not exist`);return}kt[r.toLowerCase()]=t}o(pie,"updateConfigObject");function MH(e,t,r=void 0,n=!1,s=!1,i=!1){kt===void 0&&wg();let a=DH(di.hdb_root),c=ts.join(a,Os.HDB_CONFIG_FILE),l=Ga(c),u;if(r&&kt){let m=!1;for(let h in r)if(r[h]!=kt[h.toLowerCase()]){m=!0;break}if(!m){fr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===es.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=di[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let h=m.split("_"),p=iN(m,t);l.setIn([...h],p)}else for(let m in r){let h=di[m.toLowerCase()];if(h===es.HTTP_SECUREPORT&&r[m]===kt[es.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),h===es.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===kt[es.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),h===es.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("_"),_=Os.LEGACY_CONFIG_PARAMS[m.toUpperCase()];_&&_.startsWith("customFunctions")&&l.hasIn(_.split("_"))&&(h=_,p=_.split("_"));let g=iN(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(R){fr.error(R)}}}u&&LH(l,u),oN(l);let d=l.getIn(["rootPath"]),f=ts.join(d,Os.HDB_CONFIG_FILE);if(n===!0&&Eie(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);ln.writeFileSync(f,String(l)),s&&(kt=nd(l.toJSON())),fr.trace(`Config parameter: ${e} updated with value: ${t}`)}o(MH,"updateConfigValue");function Eie(e,t){try{let r=ts.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Os.HDB_CONFIG_FILE}.bak`);ln.copySync(e,r),fr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){fr.error(cie),fr.error(r)}}o(Eie,"backupConfigFile");var _ie=["databases"];function nd(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}),Ng=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])&&!_ie.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;!es[l.toUpperCase()]&&di[l]&&(s[di[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(nd,"flattenConfig");function iN(e,t){if(e===es.CLUSTERING_NODENAME||e===es.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(tie(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||br.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 br.autoCast(t)}o(iN,"castConfigValue");function gie(){let e=br.getPropsFilePath(),t=Tl(e);return Ga(t).toJSON()}o(gie,"getConfiguration");async function Sie(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return MH(void 0,void 0,s,!0),die}catch(i){throw typeof i=="string"||i instanceof String?nie(i,i,sie.BAD_REQUEST,void 0,void 0,!0):i}}o(Sie,"setConfiguration");function aN(){let e=br.getPropsFilePath();try{ln.accessSync(e,ln.constants.F_OK|ln.constants.R_OK)}catch(n){if(!br.noBootFile())throw fr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Tl(e);return Ga(t).toJSON()}o(aN,"readConfigFile");function Ga(e){return wH.parseDocument(ln.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Ga,"parseYamlDoc");function Tie(){let e=aN(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=br.isEmptyOrZeroLength(t)?[]:t;let r=IH(t);if(r)throw rd.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=br.isEmptyOrZeroLength(n)?[]:n;let s=IH(n);if(s)throw rd.CONFIG_VALIDATION(s.message);if(!br.isEmptyOrZeroLength(n)&&!br.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!br.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw rd.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(Tie,"getClusteringRoutes");function vH(e){let t=OH(e);kt={};for(let r in di){let n=t.get(r.toUpperCase());if(br.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=di[r].toLowerCase();s===es.LOGGING_ROOT?kt[s]=ts.dirname(n):kt[s]=n}return kt}o(vH,"initOldConfig");function Rie(e){let t=aN();return rie.get(t,e.replaceAll("_","."))}o(Rie,"getConfigFromFile");async function yie(e,t){let r=Ga(Tl());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 ln.writeFile(Tl(),String(r))}o(yie,"addConfig");function Aie(e){let t=Tl(br.getPropsFilePath()),r=Ga(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ts.join(n,Os.HDB_CONFIG_FILE);ln.writeFileSync(s,String(r))}o(Aie,"deleteConfigFromFile");function bie(){return Ng||(wg(),Ng)}o(bie,"getConfigObj");function Iie(){return kt||wg(),kt}o(Iie,"getFlatConfigObj")});var rs=M((BDe,Br)=>{"use strict";var BH="username is required",FH="nothing to update, must supply active, role or password to update",HH="password cannot be an empty string",kH="If role is specified, it cannot be empty.",qH="active must be true or false";Br.exports.addUser=vie;Br.exports.alterUser=Uie;Br.exports.dropUser=Bie;Br.exports.getSuperUser=Gie;Br.exports.userInfo=Fie;Br.exports.listUsers=Cg;Br.exports.listUsersExternal=Hie;Br.exports.setUsersWithRolesCache=Rl;Br.exports.findAndValidateUser=EN;Br.exports.getClusterUser=$ie;Br.exports.getUsersWithRolesCache=qie;Br.exports.USERNAME_REQUIRED=BH;Br.exports.ALTERUSER_NOTHING_TO_UPDATE=FH;Br.exports.EMPTY_PASSWORD=HH;Br.exports.EMPTY_ROLE=kH;Br.exports.ACTIVE_BOOLEAN=qH;var GH=on(),Nie=ka(),ih=(Ag(),v(yg)),$H=EH(),oh=sn(),fN=Po(),Wi=se(),VH=require("validate.js"),mN=j(),{promisify:wie}=require("util"),hN=Ki(),lN=(H(),v(Y)),UH=mt(),Oie=Ot(),Cie=oe(),Pie=wo(),{hdbErrors:Lie,ClientError:fi}=ge(),{HTTP_STATUS_CODES:Uo,AUTHENTICATION_ERROR_MSGS:cN,HDB_ERROR_MSGS:sd}=Lie,{UserEventMsg:pN}=ai(),uN=require("lodash"),{server:Og}=(Dr(),v(Xf)),Die=j();Og.getUser=(e,t)=>EN(e,t,t!=null);Og.authenticateUser=(e,t)=>EN(e,t);var KH={username:!0,active:!0,role:!0,password:!0},xH=new Map,Mie=wie(Nie.delete),dN=Cie.get(lN.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??ih.HASH_FUNCTION.SHA256,zi;async function vie(e){let t=VH.cleanAttributes(e,KH),r=$H.addUserValidation(t);if(r)throw new fi(r.message);let n=await oh.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 fi(sd.ROLE_NAME_NOT_FOUND(t.role),Uo.NOT_FOUND);if(n.length>1)throw new fi(sd.DUP_ROLES_FOUND(t.role),Uo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=hN.encrypt(t.password)),t.password=await ih.hash(t.password,dN),t.hash_function=dN,t.role=n[0].id;let s=await GH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(mN.debug(s),await Rl(),s.skipped_hashes.length===1)throw new fi(sd.USER_ALREADY_EXISTS(t.username),Uo.CONFLICT);return fN.signalUserChange(new pN(process.pid)),`${t.username} successfully added`}o(vie,"addUser");async function Uie(e){let t=VH.cleanAttributes(e,KH);if(Wi.isEmptyOrZeroLength(t.username))throw new Error(BH);if(Wi.isEmptyOrZeroLength(t.password)&&Wi.isEmptyOrZeroLength(t.role)&&Wi.isEmptyOrZeroLength(t.active))throw new Error(FH);if(!Wi.isEmpty(t.password)&&Wi.isEmptyOrZeroLength(t.password.trim()))throw new Error(HH);if(!Wi.isEmpty(t.active)&&!Wi.isBoolean(t.active))throw new Error(qH);if(!Wi.isEmpty(t.password)&&!Wi.isEmptyOrZeroLength(t.password.trim())&&(xie(t.username)&&(t.hash=hN.encrypt(t.password)),t.password=await ih.hash(t.password,dN)),t.role==="")throw new Error(kH);if(t.role){let n=await oh.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new fi(sd.ALTER_USER_ROLE_NOT_FOUND(t.role),Uo.NOT_FOUND);if(n.length>1)throw new fi(sd.DUP_ROLES_FOUND(t.role),Uo.CONFLICT);t.role=n[0].id}let r=await GH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Rl(),fN.signalUserChange(new pN(process.pid)),r}o(Uie,"alterUser");function xie(e){let t=!1,r=zi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(xie,"isClusterUser");async function Bie(e){let t=$H.dropUserValidation(e);if(t)throw new fi(t.message);if(zi.get(e.username)===void 0)throw new fi(sd.USER_NOT_EXIST(e.username),Uo.NOT_FOUND);let r=await Mie({table:"hdb_user",schema:"system",hash_values:[e.username]});return mN.debug(r),await Rl(),fN.signalUserChange(new pN(process.pid)),`${e.username} successfully deleted`}o(Bie,"dropUser");async function Fie(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=uN.cloneDeep(e.hdb_user);let r=await oh.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(Fie,"userInfo");async function Hie(){let e=await Cg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Hie,"listUsersExternal");async function Cg(){let e=await oh.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=uN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await oh.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=uN.cloneDeep(s),s.role=t[s.role],kie(s.role),n.set(s.username,s);return n}o(Cg,"listUsers");function kie(e){if(!e){mN.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(Pie)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(kie,"appendSystemTablesToRole");async function Rl(e=void 0){e?zi=e:zi=await Cg()}o(Rl,"setUsersWithRolesCache");async function qie(){return zi||await Rl(),zi}o(qie,"getUsersWithRolesCache");async function EN(e,t,r=!0){zi||await Rl();let n=zi.get(e);if(!n){if(!r)return{username:e};throw new fi(cN.GENERIC_AUTH_FAIL,Uo.UNAUTHORIZED)}if(n&&!n.active)throw new fi(cN.USER_INACTIVE,Uo.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(xH.get(t)===n.password)return s;{let i=ih.validate(n.password,t,n.hash_function||ih.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)xH.set(t,n.password);else throw new fi(cN.GENERIC_AUTH_FAIL,Uo.UNAUTHORIZED)}}return s}o(EN,"findAndValidateUser");async function Gie(){zi||await Rl();for(let[,e]of zi)if(e.role.role==="super_user")return e}o(Gie,"getSuperUser");async function $ie(){let e=await Cg(),t=Oie.getConfigFromFile(lN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==lN.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=hN.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+UH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+UH.SERVER_SUFFIX.ADMIN,r}o($ie,"getClusterUser");var YH=[];Og.invalidateUser=function(e){for(let t of YH)try{t(e)}catch(r){Die.error("Error invalidating user",r)}};Og.onInvalidatedUser=function(e){YH.push(e)}});var ch=M((qDe,QH)=>{"use strict";var yl=j(),ns=(H(),v(Y)),Vie=_0(),HDe=ws(),kDe=vo(),Kie=rs(),{validateEvent:WH}=ai(),ah=Xn(),Yie=require("process"),{resetDatabases:Wie}=(Me(),v(_t)),zie={[ns.ITC_EVENT_TYPES.SCHEMA]:jie,[ns.ITC_EVENT_TYPES.USER]:jH};async function jie(e){let t=WH(e);if(t){yl.error(t);return}yl.trace("ITC schemaHandler received schema event:",e),await Vie(e.message),await Qie(e.message)}o(jie,"schemaHandler");async function Qie(e){try{ah.resetReadTxn(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ah.resetReadTxn(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ah.resetReadTxn(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Wie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){yl.error(t)}}o(Qie,"syncSchemaMetadata");var zH=[];async function jH(e){try{try{ah.resetReadTxn(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ah.resetReadTxn(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){yl.warn(r)}let t=WH(e);if(t){yl.error(t);return}yl.trace(`ITC userHandler ${ns.HDB_ITC_CLIENT_PREFIX}${Yie.pid} received user event:`,e),await Kie.setUsersWithRolesCache();for(let r of zH)r()}catch(t){yl.error(t)}}o(jH,"userHandler");jH.addListener=function(e){zH.push(e)};QH.exports=zie});var ai=M((WDe,XH)=>{"use strict";var $De=j(),_N=se(),Jie=(H(),v(Y)),{ITC_ERRORS:lh}=tn(),{parentPort:VDe,threadId:Xie,isMainThread:Zie,workerData:KDe}=require("worker_threads"),{onMessageFromWorkers:eoe,broadcast:YDe,broadcastWithAcknowledgement:toe}=ze();XH.exports={sendItcEvent:roe,validateEvent:JH,SchemaEventMsg:noe,UserEventMsg:soe};var Pg;eoe(async(e,t)=>{Pg=Pg||ch(),JH(e),Pg[e.type]&&await Pg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function roe(e){return!Zie&&e.message&&(e.message.originator=Xie),toe(e)}o(roe,"sendItcEvent");function JH(e){if(typeof e!="object")return lh.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||_N.isEmpty(e.type))return lh.MISSING_TYPE;if(!e.hasOwnProperty("message")||_N.isEmpty(e.message))return lh.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||_N.isEmpty(e.message.originator))return lh.MISSING_ORIGIN;if(Jie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return lh.INVALID_EVENT(e.type)}o(JH,"validateEvent");function noe(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(noe,"SchemaEventMsg");function soe(e){this.originator=e}o(soe,"UserEventMsg")});var Po=M((QDe,rk)=>{"use strict";var ZH=(H(),v(Y)),jDe=se(),Lg=j(),ek=ZU(),id,{sendItcEvent:tk}=ai();function ioe(e){try{Lg.info("signalSchemaChange called with message:",e),id=id||ch();let t=new ek(ZH.ITC_EVENT_TYPES.SCHEMA,e);return id.schema(t),tk(t)}catch(t){Lg.error(t)}}o(ioe,"signalSchemaChange");function ooe(e){try{Lg.trace("signalUserChange called with message:",e),id=id||ch();let t=new ek(ZH.ITC_EVENT_TYPES.USER,e);return id.user(t),tk(t)}catch(t){Lg.error(t)}}o(ooe,"signalUserChange");rk.exports={signalSchemaChange:ioe,signalUserChange:ooe}});function Dg(){return gN||(gN=je({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),gN}function coe(e){return e=e.replace(aoe,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 loe(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 TN(e){let t=nk.default.createHash("shake128",{outputLength:4}),r;return(0,sk.isIPv6)(e)?r=coe(e):r=e.toLowerCase(),loe(Uint8Array.from(t.update(r).digest()))}var nk,sk,SN,gN,aoe,RN=ce(()=>{Me();nk=w(require("crypto")),sk=require("node:net"),SN=new Map;o(Dg,"getAnalyticsHostnameTable");aoe=/(\d{1,3}\.){3}\d{1,3}$/;o(coe,"normalizeIPv6");o(loe,"nodeHashToNumber");o(TN,"stableNodeId")});var xo,yN=ce(()=>{xo={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 Bg={};we(Bg,{addAnalyticsListener:()=>fh,calculateCPUUtilization:()=>yk,diffResourceUsage:()=>Ak,recordAction:()=>ot,recordActionBinary:()=>Wr,recordHostname:()=>IN,setAnalyticsEnabled:()=>uoe});function uoe(e){Ek=e}function doe(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 foe(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},Ug.set(e,a)}function ot(e,t,r,n,s){if(!Ek)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=Ug.get(i);a?doe(e,a):foe(i,e,t,r,n,s),vg||moe()}function Wr(e,t,r,n,s){ot(!!e,t,r,n,s)}function fh(e){Sk.push(e)}function moe(){vg=performance.now(),setTimeout(async()=>{let e=performance.now()-vg;vg=0;let t=[],r={time:Date.now(),period:e,threadId:Al.threadId,metrics:t};for(let[s,i]of Ug){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 Tk){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 bk()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Al.threadId,byThread:!0,...n});for(let s of Sk)s(t);Ug=new Map,Al.parentPort?Al.parentPort.postMessage({type:gk,report:r}):wk({report:r})},_k).unref()}async function IN(){let e=Le.hostname;Yr.trace?.("recordHostname server.hostname:",e);let t=TN(e);Yr.trace?.("recordHostname nodeId:",t);let r=Dg();if(!await r.get(t)){let s={id:t,hostname:e};Yr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Rk(e){let t=SN.get(e);return t?(Yr.trace?.("storeMetric cached nodeId:",t),t):(t=TN(e),Yr.trace?.("storeMetric new nodeId:",t),SN.set(e,t),t)}function od(e,t){let r=Rk(Le.hostname),n={id:[(0,bN.getNextMonotonicTime)(),r],...t};Yr.trace?.(`storing metric ${JSON.stringify(n)}`),e.put(n.id,n)}function yk(e,t){let r=e.userCPUTime+e.systemCPUTime;return Yr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function Ak(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 hoe(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:xo.TABLE_SIZE,database:t,table:s,size:c};Yr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),od(e,l),n+=c}return n}function ik(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=pk.statSync(s.primaryStore.env.path).size,c=hoe(e,r,n),l=a-c,u={metric:xo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};od(e,u),Yr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Yr.warn?.("Error getting DB size metrics",s)}}function ok(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:xo.STORAGE_VOLUME,database:r,...i};od(e,a),Yr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Yr.warn?.("Error getting DB volume metrics",s)}}async function poe(e,t=6e4){let r=NN(),n=Ik(),s=new Promise(N=>{let O=performance.now();setImmediate(()=>{let F=performance.now();F-O>5e3&&Yr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(F-O)+"ms"),O=performance.now()}),n.primaryStore.prefetch([1],()=>{let F=performance.now();F-O>5e3&&Yr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(F-O)+"ms"),N(F-O)})}),i,a=Rk(Le.hostname);for(let N of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(!(!N.value?.time||N.value?.id[1]!==a)){i=N.value.time;break}if(Date.now()-t<i)return;let c,l=new Map,u=new Map,d=[],f;for(let{key:N,value:O}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!O)continue;if(c){if(N>c+t)break}else c=N;f=N;let{metrics:F,threadId:Z}=O;for(let q of F||[]){let{path:W,method:K,type:$,metric:le,count:ue,total:ie,distribution:me,threads:Pe,...De}=q;ue||(ue=1);let dt=le+(W?"-"+W:"");K!==void 0&&(dt+="-"+K),$!==void 0&&(dt+="-"+$);let Ye=l.get(dt);if(Ye){if(Ye.threads){let st=Ye.threads[Z];if(st)Ye=st;else{Ye.threads[Z]={...De};continue}}Ye.count||(Ye.count=1);let Gn=Ye.count;for(let st in De){let pt=De[st];typeof pt=="number"&&(Ye[st]=(Ye[st]*Gn+pt*ue)/(Gn+ue))}Ye.count+=ue,ie>=0&&(Ye.total+=ie,Ye.ratio=Ye.total/Ye.count)}else Ye={period:t,...q},delete Ye.distribution,l.set(dt,Ye),Ye.byThread&&(Ye.threads=[],Ye.threads[Z]={...De},d.push(Ye));if(me){me=me.map(st=>typeof st=="number"?{value:st,count:1}:st);let Gn=u.get(dt);Gn?Gn.push(...me):u.set(dt,me)}}await bk()}for(let N of d){let{path:O,method:F,type:Z,metric:q,count:W,total:K,distribution:$,threads:le,...ue}=N;le=le.filter(ie=>ie);for(let ie in ue){if(typeof N[ie]!="number")continue;let me=0;for(let Pe of le){let De=Pe[ie];typeof De=="number"&&(me+=De)}N[ie]=me}N.count=le.length,delete N.threads,delete N.byThread}for(let[N,O]of u){let F=l.get(N);O.sort((st,pt)=>st.value>pt.value?1:-1);let Z=F.count-1,q=[],W=0,K=0,$;for(let st of Tk){let pt=Z*st;for(;W<pt;)$=O[K++],W+=$.count,K===1&&W--;let Dc=O[K>1?K-2:0];$||($=O[0]),q.push($.value-($.value-Dc.value)*(W-pt)/$.count)}let[le,ue,ie,me,Pe,De,dt,Ye,Gn]=q;Object.assign(F,{p1:le,p10:ue,p25:ie,median:me,p75:Pe,p90:De,p95:dt,p99:Ye,p999:Gn})}let m;for(let[,N]of l)N.time=f,od(n,N),m=!0;let h=Date.now(),{idle:p,active:_}=performance.eventLoopUtilization();if(m||_*10>p){let N={metric:xo.MAIN_THREAD_UTILIZATION,idle:p-ak,active:_-ck,taskQueueLatency:await s,time:h,...process.memoryUsage()};od(n,N)}ak=p,ck=_;let g=process.resourceUsage();g.time=h,g.userCPUTime=g.userCPUTime/1e3,g.systemCPUTime=g.systemCPUTime/1e3,Yr.trace?.(`process.resourceUsage: ${JSON.stringify(g)}`);let R=Ak(Mg,g);Yr.trace?.(`diffed resourceUsage: ${JSON.stringify(R)}`),R.time=h,R.period=Mg.time?h-Mg.time:t,R.cpuUtilization=yk(R,R.period);let T={metric:xo.RESOURCE_USAGE,...R};od(n,T),Mg=g;let y=it();ik(n,y),ik(n,{system:y.system}),ok(n,y),ok(n,{system:y.system})}async function lk(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function NN(){return uk||(uk=je({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Ik(){return dk||(dk=je({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function goe(){Nk=!0;let e=(0,dh.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await poe(_k,e),await lk(NN(),Eoe),await lk(Ik(),_oe)},Math.min(e/2,2147483647)).unref()}function wk(e,t){let r=e.report;r.threadId=t?.threadId||Al.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(fk+=n.mean*n.count);r.totalBytesProcessed=fk,t&&(r.metrics.push({metric:xo.UTILIZATION,...t.performance.eventLoopUtilization(mk.get(t))}),mk.set(t,t.performance.eventLoopUtilization())),r.id=(0,bN.getNextMonotonicTime)(),NN().primaryStore.put(r.id,r),Nk||goe(),Soe&&(Ok=Roe(r))}async function Roe(e){if(await Ok,!$a){let r=(0,uh.dirname)((0,xg.getLogFilePath)());try{$a=await(0,AN.open)((0,uh.join)(r,"analytics.log"),"r+")}catch{$a=await(0,AN.open)((0,uh.join)(r,"analytics.log"),"w+")}}let t=(await $a.stat()).size;if(t>Toe){let r=Buffer.alloc(t);await $a.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await $a.write(r,{position:0}),await $a.truncate(r.length),t=r.length}await $a.write(JSON.stringify(e)+`
15
- `,t)}var Al,hk,xg,uh,AN,bN,dh,pk,Yr,Ug,Ek,vg,_k,gk,Sk,Tk,ak,ck,Mg,bk,Eoe,_oe,uk,dk,Nk,fk,mk,Soe,Ok,$a,Toe,ji=ce(()=>{Al=require("worker_threads"),hk=w(ze());Me();xg=w(j()),uh=require("path"),AN=require("fs/promises"),bN=w(bn()),dh=w(oe());H();Dr();pk=w(require("node:fs"));RN();yN();Yr=(0,xg.forComponent)("analytics").conditional;(0,dh.initSync)();Ug=new Map,Ek=(0,dh.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;o(uoe,"setAnalyticsEnabled");o(doe,"recordExistingAction");o(foe,"recordNewAction");o(ot,"recordAction");Le.recordAnalytics=ot;o(Wr,"recordActionBinary");vg=0,_k=1e3,gk="analytics-report",Sk=[];o(fh,"addAnalyticsListener");Tk=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(moe,"sendAnalytics");o(IN,"recordHostname");o(Rk,"getHostNodeId");o(od,"storeMetric");o(yk,"calculateCPUUtilization");o(Ak,"diffResourceUsage");o(hoe,"storeTableSizeMetrics");o(ik,"storeDBSizeMetrics");o(ok,"storeVolumeMetrics");o(poe,"aggregation");ak=0,ck=0,Mg={userCPUTime:0,systemCPUTime:0},bk=o(()=>new Promise(setImmediate),"rest");o(lk,"cleanup");Eoe=36e5,_oe=31536e6;o(NN,"getRawAnalyticsTable");o(Ik,"getAnalyticsTable");(0,hk.setChildListenerByType)(gk,wk);o(goe,"startScheduledTasks");fk=0,mk=new Map,Soe=!1;o(wk,"recordAnalytics");Toe=1e6;o(Roe,"logAnalytics")});function mh(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 Ck(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Cs(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 Cs,hh=ce(()=>{Cs=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(mh,"appendHeader");o(Ck,"mergeHeaders")});function Fg(e,t,r=Aoe){let n;return function(...i){return n?n.length*wN>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();wN=(wN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var Dk,yoe,Aoe,Pk,boe,ON,Lk,wN,CN=ce(()=>{Dk=w(ri()),yoe=3e3,Aoe=2e4,Pk=0,boe=3e4,ON=3e3,Lk=performance.now()+ON,wN=0;o(Fg,"throttle");setInterval(()=>{let e=performance.now();e-Lk-ON>yoe&&Pk+boe<e&&(Dk.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),Pk=e),Lk=e},ON).unref()});var Gk={};we(Gk,{EVICTED:()=>tl,INVALIDATED:()=>wn,coerceType:()=>kg,makeTable:()=>Gg});function Gg(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:R}=e;_??=0;let{attributes:T}=e;T||(T=[]);let y=sb(i,n,l),N,O,F={},Z=Promise.resolve(),q,W,K;for(let V of T)(V.assignCreatedTime||V.name==="__createdtime__")&&(q=V),(V.assignUpdatedTime||V.name==="__updatedtime__")&&(W=V),V.expiresAt&&(K=V),V.isPrimaryKey&&(F=V);let $,le=[],ue=[],ie=1,me=2,Pe={},De={},dt=864e5,Ye=0,Gn,st,pt,Dc=!1,Mc,Vt,kf,qf=Il.get(U.REPLICATION_DATABASES);if(Array.isArray(qf)){for(let V of qf)if(V.name===c&&V.replicateTo>=0){kf=V.replicateTo;break}}let ME=i.getRange({start:!1,end:!1}).constructor,vE=10,Wy=6;g&&Kf(),Sm(i.env.path,V=>{if(O)return ya(V)});class Gf extends dl{static{o(this,"Updatable")}getUpdatedTime(){return La.get(this.getRecord())?.version}getExpiresAt(){return La.get(this.getRecord())?.expiresAt}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.set(E,new zm(S));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(E,S){return this.addTo(E,-S)}}class Ce extends Ur{#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=q;static updatedTimeProperty=W;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(L=>!L.intermediateSource)){if(this.sources.some(L=>L.name===E.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(E)}O=O||E.get&&(!E.get.reliesOnPrototype||E.prototype.get),N=N||E.load;let A=o(L=>{let D=this.sources;if(D=D.filter(k=>k.intermediateSource&&k[L]&&(!k[L].reliesOnPrototype||k.prototype[L])),D.length>0)if(D.length===1){let k=D[0];return(C,x,z)=>{if(C?.source!==k)return k[L](x,z,C)}}else return(k,C,x)=>{let z=[];for(let ne of D){if(k?.source===ne)break;z.push(ne[L](C,x,k))}return Promise.all(z)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1];b.intermediateSource&&(b={});let I=o(L=>{if(b[L]&&(!b[L].reliesOnPrototype||b.prototype[L]))return(D,k,C)=>{if(!D?.source)return b[L](k,C,D)}},"getApplyToCanonicalSource");Pe={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},De={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish"),invalidate:A("invalidate")};let P=b.shouldRevalidateEvents;return(async()=>{let L=!1,D,k=o(async(C,x)=>{let z=C.value,ne=C.table?He[c][C.table]:Ce;if(c===Qf&&(C.table===Ru.ROLE_TABLE_NAME||C.table===Ru.USER_TABLE_NAME)&&(L=!0),C.id===void 0&&(C.id=z[ne.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=E;let re={residencyId:xc(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId,async:!0},B=C.id,de=await ne.getResource(B,x,re);switch(C.finished&&await C.finished,C.type){case"put":return P?de._writeInvalidate(B,z,re):de._writeUpdate(B,z,!0,re);case"patch":return P?de._writeInvalidate(B,z,re):de._writeUpdate(B,z,!1,re);case"delete":return de._writeDelete(B,re);case"publish":case"message":return de._writePublish(B,z,re);case"invalidate":return de._writeInvalidate(B,z,re);case"relocate":return de._writeRelocate(B,re);default:ve.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=E.subscribe;C&&R==null&&(R=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},z=E.subscribeOnThisThread?E.subscribeOnThisThread((0,bl.getWorkerIndex)(),x):(0,bl.getWorkerIndex)()===0,ne=C&&z&&await E.subscribe?.(x);if(ne){let re;for await(let B of ne)try{if(!(B.type==="transaction"?B.writes[0]:B)){ve.default.error?.("Bad subscription event",B);continue}if(B.source=E,B.type==="end_txn"){if(re?.resolve(),B.localTime&&D!==B.localTime){if(B.remoteNodeIds?.length>0){let Se=[Symbol.for("seq"),B.remoteNodeIds[0]],ee=d.get(Se),Q=ee?.nodes;Q||(Q=[]);for(let Te of B.remoteNodeIds.slice(1)){let fe=Q.find(We=>We.id===Te);Q=Q.filter(We=>We.id!==Te||We===fe),fe||(fe={id:Te,seqId:0},Q.push(fe)),fe.seqId=Math.max(ee?.seqId??1,B.localTime),Te===re?.nodeId&&(fe.lastTxnTime=B.timestamp)}let pe=Math.max(ee?.seqId??1,B.localTime);ve.default.trace?.("Received txn",c,pe,new Date(pe),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(Se,{seqId:pe,nodes:Q})}D=B.localTime}B.onCommit&&re?.committed.then(B.onCommit);continue}if(re)if(B.beginTxn)re.resolve();else{re.write_promises.push(k(B,re));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let he=Ft(B,()=>{if(B.type==="transaction"){let Se=[];for(let ee of B.writes)try{Se.push(k(ee,B))}catch(Q){throw Q.message+=" writing "+JSON.stringify(ee)+" of event "+JSON.stringify(B),Q}return Promise.all(Se)}else if(B.type==="define_schema"){let Se=this.attributes.slice(0),ee=!1;for(let Q of B.attributes)Se.find(pe=>pe.name===Q.name)||(Se.push(Q),ee=!0);ee&&(je({table:s,database:c,attributes:Se,origin:"cluster"}),Eh.signalSchemaChange(new _h.SchemaEventMsg(process.pid,G.CREATE_TABLE,c,s)))}else return B.beginTxn?(re=B,re.write_promises=[k(B,B)],new Promise(Se=>{re.resolve=()=>Se(Promise.all(re.write_promises))})):k(B,B)});re&&(re.committed=he),L&&he&&!he?.waitingForUserChange&&(he.then(()=>Eh.signalUserChange(new _h.UserEventMsg(process.pid))),he.waitingForUserChange=!0),B.onCommit&&(he?he.then(B.onCommit):B.onCommit())}catch(de){ve.default.error?.("error in subscription handler",de)}}}catch(C){ve.default.error?.(C)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Ce.prototype.get}static getResource(E,S,A){let b=super.getResource(E,S,A);if(this.loadAsInstance===!1&&(S._freezeRecords=!0),E!=null&&this.loadAsInstance!==!1){Pr(E);try{if(b.getRecord?.())return b;if(typeof E=="object"&&E&&!Array.isArray(E))throw new Error(`Invalid id ${JSON.stringify(E)}`);let I=!A?.async||i.cache?.get?.(E),P=Lr(S),L=P.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return ga(E,S,{transaction:L,ensureLoaded:A?.ensureLoaded},I,D=>{if(D?Ce._updateResource(b,D):b.#e=null,S.onlyIfCached){if(!b.doesExist())throw new at.ServerError("Entry is not cached",504)}else if(A?.ensureLoaded){let k=vc(E,D,S,b);if(k)return P?.disregardReadTxn(),b.#i=!0,S.loadedFromSource=!0,Ps(k,C=>(Ce._updateResource(b,C),b))}return b})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(E)),I}}return b}static _updateResource(E,S){E.#n=S,E.#e=S?.value??null,E.#r=S?.version}ensureLoaded(){let E=vc(this.getId(),this.#n,this.getContext());if(E)return this.#i=!0,this.getContext().loadedFromSource=!0,Ps(E,S=>{this.#n=S,this.#e=S.value,this.#r=S.version})}static getNewId(){let E=F?.type;if(E==="String"||E==="ID")return super.getNewId();if(!Vt){let I=i.getEntry(Symbol.for("id_allocation")),P=I?.value,L;if(P&&P.nodeName===server.hostname&&(!Uoe(i)||P.pid===process.pid)){let D=P.start,k=P.end;L=D;for(let C of i.getKeys({start:k,end:D,limit:1,reverse:!0}))L=C}else P=b(I?.version??null),L=P.start;Vt=new BigInt64Array([BigInt(L)+1n]),Vt=new BigInt64Array(i.getUserSharedBuffer("id",Vt.buffer)),Vt.maxSafeId=P.end}let S=Number(Atomics.add(Vt,0,1n)),A=E==="Int"?512:1048576;if(S+A>=Vt.maxSafeId){let I=o(P=>{Vt.maxSafeId=S+(E==="Int"?1023:4194303);let L=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=P?void 0:i.useReadTransaction(),k=Number(Vt[0]);for(let z of i.getKeys({start:k+1,end:L,limit:1,transaction:D}))L=z;D?.done();let{value:C,version:x}=i.getEntry(Symbol.for("id_allocation"));if(Vt.maxSafeId<L){if(C.end>Vt.maxSafeId-100)return;ve.default.info?.("New id allocation",S,Vt.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:C.start,end:Vt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{ve.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Vt.maxSafeId}, but id of ${L} detected`);let z=b(x);z.alreadyUpdated||Atomics.store(Vt,0,BigInt(z.start+1)),Vt.maxSafeId=z.end}},"updateEnd");S+A===Vt.maxSafeId?setImmediate(I):S+100>=Vt.maxSafeId&&(ve.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(()=>I(!0)))}return S;function b(I){let P=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=P/4,D,k,C=!1,x,z;do{x=Math.floor(Math.random()*P),z={start:x,end:x+(E==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},D=0;for(let ne of i.getKeys({start:x,limit:1,reverse:!0}))D=ne;k=P;for(let ne of i.getKeys({start:x+1,end:P,limit:1}))k=ne;L*=.875,L<1e3&&!C&&(C=!0,ve.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":""}`,x,D,k,L))}while(!(L<k-x&&(L<x-D||D===0)));return i.transactionSync(()=>{let ne=i.getEntry(Symbol.for("id_allocation"));return(ne?.version??null)==I?(ve.default.info?.("Allocated new id range",z),i.put(Symbol.for("id_allocation"),z,Date.now()),z):(ve.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...ne.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,dt=E.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");dt=dt||(p+_)/4,ya()}static getResidencyRecord(E){return d.get([Symbol.for("residency_by_id"),E])}static setResidency(E){Ce.getResidency=E&&((S,A)=>{try{return E(S,A)}catch(b){throw b.message+=` in residency function for table ${s}`,b}})}static setResidencyById(E){Ce.getResidencyById=E&&(S=>{try{return E(S)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static getResidency(E,S){if(Ce.getResidencyById)return Ce.getResidencyById(E[t]);let A=kf;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 b=[server.hostname];if(S.previousResidency)b.push(...S.previousResidency.slice(0,A));else{let I=server.nodes.map(D=>D.name),P=Math.floor(I.length*Math.random());b.push(...I.slice(P,P+A));let L=P+A-I.length;L>0&&b.push(...I.slice(0,L))}return b}}static enableAuditing(E=!0){g=E,E&&Kf(),Ce.audit=E}static coerceId(E){return E===""?null:kg(E,F)}static async dropTable(){delete He[c][s];for(let E of i.getRange({versions:!0,snapshot:!1,lazy:!0}))E.metadataFlags&$r&&E.value&&Ca(E.value);if(c===a){for(let E of T)d.remove(Ce.tableName+"/"+E.name),r[E.name]?.drop();d.remove(Ce.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),LN.default.unlinkSync(i.env.path);Eh.signalSchemaChange(new _h.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(Vf(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?Ce.getRecordCount().then(b=>(A.recordCount=b.recordCount,A.estimatedRecordRange=b.estimatedRange,A)):A}if(E!==void 0&&S.loadAsInstance===!1){let A=this.getContext(),b=Lr(A),I=b.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let P=Rr(E);Pr(P);let L=!0;return E.checkPermission&&(L=this.allowRead(A.user,E)),Ps(Ps(L,D=>{if(!D)throw new at.AccessViolation(A.user);let k=!0;return ga(P,A,{transaction:I,ensureLoaded:k},!1,C=>{if(A.onlyIfCached){if(!C?.value)throw new at.ServerError("Entry is not cached",504)}else if(k){let x=vc(P,C,A);if(x)return b?.disregardReadTxn(),A.loadedFromSource=!0,x.then(z=>z?.value)}return C?.value})}),D=>{let k=E?.select;return k&&D!=null?Hu(k,this.constructor)(D):D})}if(E?.property)return this.getProperty(E.property);if(this.doesExist()||E?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(E,S){let A=Sa(E,S);if(A?.read){if(A.isSuperUser)return!0;let b=A.attribute_permissions,I=S?.select;if(b?.length>0||Dc&&I){if(S||(S={}),I){let P=Array.isArray(I)?I:[I],L=b?.length>0&&PN(b,"read");S.select=P.map(D=>{let k=D.name||D;if(!L||L[k]){let C=pt[k]?.definition?.tableClass;if(C){if(D.name||(D={name:D}),!D.checkPermission&&S.checkPermission&&(D.checkPermission=S.checkPermission),!C.prototype.allowRead.call(null,E,D))return!1;if(!D.select)return D.name}return D}}).filter(Boolean)}else S.select=b.filter(P=>P.read&&!pt[P.attribute_name]).map(P=>P.attribute_name);return S}else return!0}}allowUpdate(E,S,A){let b=Sa(E,A);if(b?.update){let I=b.attribute_permissions;if(I?.length>0){let P=PN(I,"update");for(let L in S)if(!P[L])return!1;for(let L of I){let D=L.attribute_name;!L.update&&!(D in S)&&(S[D]=this.getProperty(D))}}return Ra(this.getContext())}}allowCreate(E,S,A){if(this.isCollection){let b=Sa(E,A);if(b?.insert){let I=b.attribute_permissions;if(I?.length>0){let P=PN(I,"insert");for(let L in S)if(!P[L])return!1;return Ra(this.getContext())}else return Ra(this.getContext())}}else return this.allowUpdate(E,{})}allowDelete(E,S){return Sa(E,S)?.delete&&Ra(this.getContext())}update(E,S){let A,b=typeof S=="boolean"||S===void 0&&(E==null||typeof E=="object"&&!(E instanceof URLSearchParams)),I=!1;b?(I=S,S=E,A=this.getId()):A=Rr(E);let P=this.getContext();if(!Lr(P))throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;if(typeof S=="object"&&S)if(I)Object.isFrozen(S)&&(S={...S}),this.#e={},this.#t=S;else if(b){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(P.user,S,E)),Ps(D,k=>{if(!k)throw new at.AccessViolation(P.user);return Ps(i.get(Rr(E)),C=>{let x=new Gf(C);return x._setChanges(S),this._writeUpdate(A,x.getChanges(),!1),x})})}return this._writeUpdate(A,this.#t,I),this}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.#s===vk?this.set(E,(+this.getProperty(E)||0)+S):(this.#s||this.update(),this.set(E,new zm(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)),Ps(S,b=>{if(!b)throw new at.AccessViolation(A.user);this._writeInvalidate(E?Rr(E):this.getId())})}_writeInvalidate(E,S,A){let b=this.getContext();Pr(E),Lr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Pe.invalidate?.bind(this,b,E),beforeIntermediate:Aa(S,De.invalidate?.bind(this,b,E)),commit:o((P,L)=>{if(!(Ta(P,L,A?.nodeId)<=0)){S??=null;for(let D in r)S||(S={}),S[D]===void 0&&(S[D]=this.getProperty(D));ve.default.trace?.(`Invalidating entry in ${s} id: ${E}, timestamp: ${new Date(P).toISOString()}`),y(E,S,L,P,wn,g,{user:b?.user,residencyId:A?.residencyId,nodeId:A?.nodeId},"invalidate")}},"commit")})}_writeRelocate(E,S){let A=this.getContext();Pr(E),Lr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Pe.relocate?.bind(this,A,E),beforeIntermediate:De.relocate?.bind(this,A,E),commit:o((I,P)=>{if(Ta(I,P,S?.nodeId)<=0)return;let L=Ce.getResidencyRecord(S.residencyId),D=0,k=null,C=P?.value;if(L&&!L.includes(server.hostname)){for(let x in r)k||(k={}),k[x]=C[x];D=wn}else k=C;ve.default.trace?.(`Relocating entry id: ${E}, timestamp: ${new Date(I).toISOString()}`),y(E,k,P,I,D,g,{user:A.user,residencyId:S.residencyId,nodeId:S.nodeId,expiresAt:S.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(E,S){if(this.getResidencyById)return!1;let A={previousResidency:this.getResidencyRecord(E.residencyId),isRelocation:!0},b=Uc(this.getResidency(S.value,A)),I;if(b){if(!b.includes(server.hostname))return!1;I=xc(b)}let P=0;ve.default.debug?.("Performing a relocate of an entry",E.key,S.value,b);let L=y(E.key,S.value,E,E.version,P,!0,{residencyId:I,expiresAt:S.expiresAt},"relocate",!1,null);return!0}static evict(E,S,A){let b=this.Source,I;if(!((O||g)&&(!S||(I=i.getEntry(E),!I||!S)||I.version!==A))){if(O){if(i.hasLock(E,I.version))return;let P;for(let L in r)P||(P={}),P[L]=S[L];if(P)return y(E,P,I,A,tl,null,null,null,!0)}return i.ifVersion(E,A,()=>{Eo(E,S,null)}),el(i,I??i.getEntry(E),A)}}lock(){throw new Error("Not yet implemented")}static operation(E,S){return E.table||=s,E.schema||=c,global.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 b=this.getContext();return E.checkPermission&&(A=this.allowUpdate(b.user,S,E)),Ps(A,I=>{if(!I)throw new at.AccessViolation(b.user);if(Array.isArray(S))for(let P of S){let L=P[t];this._writeUpdate(L,P,!0)}else{let P=Rr(E);this._writeUpdate(P,S,!0)}})}}create(E,S){let A=!0,b=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(b.user,S,E)),Ps(A,I=>{if(!I)throw new at.AccessViolation(b.user);let P=Rr(E)??S[t];if(P===void 0)P=this.constructor.getNewId();else if(i.get(P))throw new at.ClientError("Record already exists",409);return this._writeUpdate(P,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,b){let I=this.getContext(),P=Lr(I);Pr(E);let L=this.#n??i.getEntry(E);this.#s=A?vk:Loe;let D=o(C=>A?C.put?()=>C.put(I,E,S):null:C.patch?()=>C.patch(I,E,S):C.put?()=>C.put(I,E,fl(this)):null,"writeToSources"),k={key:E,store:i,entry:L,nodeName:I?.nodeName,validate:o(C=>{S||(S=this.#t),A||S&&ag(this.#t===S?this:S)?I?.source||(P.checkOverloaded(),this.validate(S,!A),W&&(S[W.name]=W.type==="Date"?new Date(C):W.type==="String"?new Date(C).toISOString():C),A&&(t&&S[t]!==E&&(S[t]=E),q&&(L?.value?S[q.name]=L?.value[q.name]:S[q.name]=q.type==="Date"?new Date(C):q.type==="String"?new Date(C).toISOString():C),S=fl(S))):P.removeWrite(k)},"validate"),before:D(Pe),beforeIntermediate:Aa(S,D(De)),commit:o((C,x,z)=>{if(z){if(I&&x?.version>(I.lastModified||0)&&(I.lastModified=x.version),this.#n=x,x?.value&&x.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");A||(this.#e=x?.value??null)}this.#t=void 0,this.#r=C;let ne=x?.value,re=S;this.#s=0;let B=!1,de=Ta(C,x,b?.nodeId),he,Se=A?"put":"patch",ee;b?.residencyId!=null&&(ee=b.residencyId);let Q=I?.expiresAt??(p?p+Date.now():-1);if(de<=0){if(g){let fe=x.localTime,We=x.version;ve.default.trace?.("Applying CRDT update to record with id: ",E,"txn time",new Date(C),"applying later update from:",new Date(We),"local recorded time",new Date(fe));let Tt=[];for(;fe>C||We>=C&&fe>0;){let ft=l.get(fe);if(!ft)break;let Ee=wt(ft);if(We=Ee.version,We>=C){if(We===C){if(de=Ta(C,{version:We,localTime:fe},b?.nodeId),de===0)return Te(!1);if(de>0)continue}if(Ee.type==="patch")Tt.push(Ee),he=S;else if(Ee.type==="put"||Ee.type==="delete")return Te(!1)}fe=Ee.previousLocalTime}fe||ve.default.debug?.("No further audit history, applying incremental updates based on available history",E,"existing version preserved",x),Tt.sort((ft,Ee)=>ft.version-Ee.version);for(let ft of Tt){let Ee=ft.getValue(i);if(ve.default.debug?.("Rebuilding update with future patch:",new Date(ft.version),Ee,ft),re=n_(re,Ee,A),!re)return Te(!1)}}else{if(A)return Te(!1);re=n_(re,ne,A),ve.default.debug?.("Rebuilding update without audit:",re)}ve.default.trace?.("Rebuilt record to save:",re," is full update:",A)}let pe;if(A?pe=re:this.constructor.loadAsInstance===!1?pe=fl(ne,re):(this.#e=ne,pe=fl(this,re)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(ee==null){L?.residencyId&&(I.previousResidency=Ce.getResidencyRecord(L.residencyId));let fe=Uc(Ce.getResidency(pe,I));if(fe&&!fe.includes(server.hostname))if(he??=pe,B=!0,Ce.getResidencyById)pe=void 0;else{pe=null;for(let We in r)pe||(pe={}),pe[We]=he[We]}ee=xc(fe)}A||(he=S),ve.default.trace?.(`Saving record with id: ${E}, timestamp: ${new Date(C).toISOString()}${Q?", expires at: "+new Date(Q).toISOString():""}${x?", replaces entry from: "+new Date(x.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),Eo(E,ne,pe),Te(!0),I.expiresAt&&ya();function Te(fe){y(E,fe?pe:void 0,fe?x:{...x,value:void 0},C,B?wn:0,g,{omitLocalRecord:B,user:I?.user,residencyId:ee,expiresAt:Q,nodeId:b?.nodeId,originatingOperation:I?.originatingOperation},Se,!1,fe?he:he??S)}o(Te,"writeCommit")},"commit")};P.addWrite(k)}async delete(E){if(Vf(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)),Ps(S,b=>{if(!b)throw new at.AccessViolation(A.user);let I=Rr(E);return this._writeDelete(I),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(E,S){let A=Lr(this.getContext());Pr(E);let b=this.getContext();return A.addWrite({key:E,store:i,entry:this.#n,nodeName:b?.nodeName,before:Pe.delete?.bind(this,b,E),beforeIntermediate:De.delete?.bind(this,b,E),commit:o((I,P,L)=>{let D=P?.value;L&&(b&&P?.version>(b.lastModified||0)&&(b.lastModified=P.version),Ce._updateResource(this,P)),!(Ta(I,P,S?.nodeId)<=0)&&(Eo(this.getId(),D),ve.default.trace?.(`Deleting record with id: ${E}, txn timestamp: ${new Date(I).toISOString()}`),g||R?(y(E,null,P,I,0,g,{user:b?.user,nodeId:S?.nodeId},"delete"),g||ya()):el(i,P))},"commit")}),!0}search(E){let S=this.getContext(),A=Lr(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 at.AccessViolation(S.user);let b=E.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(E)?E:E[Symbol.iterator]?Array.from(E):[];let I=E.id??this.getId();I&&(b=[{attribute:null,comparator:Array.isArray(I)?"prefix":"starts_with",value:I}].concat(b));let P,L={};function D(Q,pe){let Te;switch(pe){case"and":case void 0:if(Q.length<1)throw new Error('An "and" operator requires at least one condition');Te=!0;break;case"or":if(Q.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+pe)}for(let fe of Q){if(fe.conditions){fe.conditions=D(fe.conditions,fe.operator);continue}let We=fe[0]??fe.attribute,Tt=We==null?F:Fi(T,We);if(Tt)(Tt.type||ob[fe.comparator])&&(fe[1]===void 0?fe.value=C(fe.value,Tt):fe[1]=C(fe[1],Tt));else if(We!=null&&!E.allowConditionsOnDynamicAttributes)throw(0,at.handleHDBError)(new Error,`${We} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let ft=fe.chainedConditions[0],Ee,Et;if(ft.comparator==="gt"||ft.comparator==="greater_than"||ft.comparator==="ge"||ft.comparator==="greater_than_equal"?(Ee=fe,Et=ft):(Ee=ft,Et=fe),Ee.comparator!=="lt"&&Ee.comparator!=="less_than"&&Ee.comparator!=="le"&&Ee.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let rt=Et.comparator==="ge"||Et.comparator==="greater_than_equal",lr=Ee.comparator==="le"||Ee.comparator==="less_than_equal";fe.comparator=(rt?"ge":"gt")+(lr?"le":"lt"),fe.value=[Et.value,Ee.value]}else throw new Error("Multiple chained conditions are not currently supported")}return Q}o(D,"prepareConditions");function k(Q,pe){if(E.enforceExecutionOrder)return Q;for(let Te of Q)Te.conditions&&(Te.conditions=k(Te.conditions,Te.operator));return Q.length>1&&pe!=="or"?Ioe(Q,v_(Ce)):Q}o(k,"orderConditions");function C(Q,pe){return Array.isArray(Q)?Q.map(Te=>kg(Te,pe)):kg(Q,pe)}o(C,"coerceTypedValues");let x=E.operator;(b.length>0||x)&&(b=D(b,x));let z=typeof E.sort=="object"&&E.sort,ne;if(z&&x!=="or"){let Q=z.attribute;if(Q==null)throw new at.ClientError("Sort requires an attribute");if(P=b.find(pe=>xu(pe.attribute)===xu(Q)),!P){let pe=Fi(T,Q);if(!pe)throw(0,at.handleHDBError)(new Error,`${Array.isArray(Q)?Q.join("."):Q} is not a defined attribute`,404);if(pe.indexed)P={...z,comparator:"sort"},b.push(P);else if(b.length===0&&!E.allowFullScan)throw(0,at.handleHDBError)(new Error,`${Array.isArray(Q)?Q.join("."):Q} is not indexed and not combined with any other conditions`,404)}P&&(P.descending=!!z.descending)}b=k(b,x),z&&(P&&b[0]===P?z.next&&(ne={dbOrderedAttribute:z.attribute,attribute:z.next.attribute,descending:z.next.descending,next:z.next.next}):(P&&b.splice(b.indexOf(P),1),ne=z));let re=E.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),E.explain)return{conditions:b,operator:x,postOrdering:ne,selectApplied:!!re};let B=A.useReadTxn(),de=ab(b,x,Ce,B,E,S,(Q,pe)=>gu(Q,re,S,B,pe),L),he=E.ensureLoaded!==!1,Se=Ce.transformEntryForSelect(re,S,B,L,he,!0),ee=Ce.transformToOrderedSelect(de,re,ne,S,B,Se);return(E.offset||E.limit!==void 0)&&(ee=ee.slice(E.offset,E.limit!==void 0?(E.offset||0)+E.limit:void 0)),ee.onDone=()=>{ee.onDone=null,A.doneReadTxn()},ee.selectApplied=!0,ee.getColumns=()=>{if(re){let Q=[];for(let pe of re)pe==="*"?Q.push(...T.map(Te=>Te.name)):Q.push(pe.name||pe);return Q}return T.filter(Q=>!Q.computed&&!Q.relationship).map(Q=>Q.name)},ee}static transformToOrderedSelect(E,S,A,b,I,P){let L=new ME;if(A){E=gu(E,S,b,I,null);let D;L.iterate=function(){let C,x=E[Symbol.asyncIterator]?E[Symbol.asyncIterator]():E[Symbol.iterator](),z,ne=A.dbOrderedAttribute,re,B,de=!0;function he(ee){let Q=ee.next&&he(ee.next),pe=ee.descending;return b.sort=ee,(Te,fe)=>{let We=_u(Te,ee.attribute,b),Tt=_u(fe,ee.attribute,b),ft=pe?(0,Nl.compareKeys)(Tt,We):(0,Nl.compareKeys)(We,Tt);return ft===0?Q?.(Te,fe)||0:ft}}o(he,"createComparator");let Se=he(A);return{async next(){let ee;if(C)if(ee=C.next(),ee.done){if(z)return L.onDone&&L.onDone(),ee}else return{value:await P.call(this,ee.value)};D=[],re&&D.push(re);do if(ee=await x.next(),ee.done){if(z=!0,D.length)break;return L.onDone&&L.onDone(),ee}else{let Q=ee.value;if(Q?.then&&(Q=await Q),ne){let pe=_u(Q,ne,b);if(de)de=!1,B=pe;else if(pe!==B){B=pe,re=Q;break}}D.push(Q)}while(!0);return A.isGrouped,D.sort(Se),C=D[Symbol.iterator](),ee=C.next(),ee.done?(L.onDone&&L.onDone(),ee):{value:await P.call(this,ee.value)}},return(){L.onDone&&L.onDone(),x.return()},throw(){L.onDone&&L.onDone(),x.throw()}}};let k=o(C=>{if(typeof S=="object"&&Array.isArray(C.attribute))for(let x=0;x<S.length;x++){let z=S[x],ne;if(z.name===C.attribute[0]){for(ne=z.sort||(z.sort={});ne.next;)ne=ne.next;ne.attribute=C.attribute.slice(1),ne.descending=C.descending}else z===C.attribute[0]&&(S[x]=ne={name:z,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&k(C.next)},"applySortingOnSelect");k(A)}else L.iterate=(E[Symbol.asyncIterator]||E[Symbol.iterator]).bind(E),L=L.map(function(D){try{let k=P.call(this,D);return typeof k?.catch=="function"?k.catch(C=>{throw C.partialObject={[t]:D.key},C}):k}catch(k){throw k.partialObject={[t]:D.key},k}});return L}static transformEntryForSelect(E,S,A,b,I,P){let L;I&&O&&!(typeof E=="string"?[E]:E)?.every(C=>{let x;return typeof C=="object"?x=C.name:x=C,r[x]||x===t})&&(L=!0);let D,k=o(function(C){let x;if(S?.transaction?.stale&&(S.transaction.stale=!1),C!=null){if(x=C.deref?C.deref():C.value,!x&&(C.key===void 0||C.deref)||C.metadataFlags&wn){if(C.metadataFlags&wn&&S.replicateFrom===!1&&P&&C.residencyId)return Ka.SKIP;if(C=ga(C.key??C,S,{transaction:A,lazy:E?.length<4,ensureLoaded:I},this?.isSync,z=>z),C?.then)return C.then(k.bind(this));x=C?.value}if(L&&C?.metadataFlags&(wn|tl)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(S.onlyIfCached)return{[t]:C.key,message:"This entry has expired"};let z=vc(C.key??C,C,S);if(z?.then)return z.then(k)}}if(x==null)return P?Ka.SKIP:x;if(E&&!(E[0]==="*"&&E.length===1)){let z,ne=o((B,de)=>{let he;typeof B=="object"?he=B.name:he=B;let Se=pt?.[he],ee;if(Se){let Q=b?.[he];if(Q)if(Q.hasMappings){let Te=Se.from?x[Se.from]:xu(C.key);ee=Q.get(Te),ee||(ee=[])}else ee=Q.fromRecord?.(x);else ee=Se(x,S,C,!0);let pe=o(Te=>{if(Se.directReturn)return de(Te,he);if(Te&&typeof Te=="object"){let fe=Se.definition?.tableClass||Ce;D||(D={});let We=D[he]||(D[he]=fe.transformEntryForSelect(he===B?null:B.select||(Array.isArray(B)?B:null),S,A,Q,I));if(Array.isArray(Te)){let Tt=[],ft=fe.transformToOrderedSelect(Te,B.select,typeof B.sort=="object"&&B.sort,S,A,We)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ee=o(rt=>{for(;!rt.done;){if(rt?.then)return rt.then(Ee);Tt.push(rt.value),rt=ft.next()}de(Tt,he)},"nextValue"),Et=Ee(ft.next());Et&&(z||(z=[]),z.push(Et));return}else if(Te=We.call(this,Te),Te?.then){z||(z=[]),z.push(Te.then(Tt=>de(Tt,he)));return}}de(Te,he)},"handleResolvedValue");ee?.then?(z||(z=[]),z.push(ee.then(pe))):pe(ee);return}else ee=x[he],ee&&typeof ee=="object"&&he!==B&&(ee=Ce.transformEntryForSelect(B.select||B,S,A,null)({value:ee}));de(ee,he)},"selectAttribute"),re;if(typeof E=="string")ne(E,B=>{re=B});else if(Array.isArray(E))if(E.asArray)re=[],E.forEach((B,de)=>{B==="*"?E[de]=x:ne(B,he=>re[de]=he)});else{re={};let B=E.forceNulls;for(let de of E)if(de==="*")for(let he in x)re[he]=x[he];else ne(de,(he,Se)=>{he===void 0&&B&&(he=null),re[Se]=he})}else throw new at.ClientError("Invalid select"+E);return z?Promise.all(z).then(()=>re):re}return x},"transform");return k}async subscribe(E){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||je({table:s,database:c,schemaDefined:u,attributes:T,audit:!0}),E||(E={});let S=!E.rawEvents,A=[],b=this,I=mb(Ce,this.getId()??null,function(L,D,k,C){try{let x=D.getValue?.(i,S),z=D.type;if(!x&&z==="patch"&&S){let re=i.getEntry(L);re?.version===D.version?x=re.value:x=D.getValue?.(i,!0,k),z="put"}let ne={id:L,localTime:k,value:x,version:D.version,type:z,beginTxn:C};A?A.push(ne):this.send(ne)}catch(x){ve.default.error?.(x)}},E.startTime||0,E),P=(async()=>{this.isCollection&&(I.includeDescendants=!0,E.onlyChildren&&(I.onlyChildren=!0)),E.supportsTransactions&&(I.supportsTransactions=!0);let L=this.getId(),D=E.previousCount;D>1e3&&(D=1e3);let k=E.startTime;if(this.isCollection){if(k){if(D)throw new at.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:x}of l.getRange({start:k,exclusiveStart:!0,snapshot:!1})){let z=wt(x);if(z.tableId!==n)continue;let ne=z.recordId;if(L==null||Fk(L,ne)){let re=z.getValue(i,S,C);if(I.send({id:ne,localTime:C,value:re,version:z.version,type:z.type}),I.queue?.length>xk&&await I.waitForDrain()===!1)return}I.startTime=C}}else if(D){let C=[];for(let{key:x,value:z}of l.getRange({start:"z",end:!1,reverse:!0}))try{let ne=wt(z);if(ne.tableId!==n)continue;let re=ne.recordId;if(L==null||Fk(L,re)){let B=ne.getValue(i,S,x);if(C.push({id:re,localTime:x,value:B,version:ne.version,type:ne.type}),--D<=0)break}}catch(ne){ve.default.error("Error getting history entry",x,ne)}for(let x=C.length;x>0;)I.send(C[--x]);C[0]&&(I.startTime=C[0].localTime)}else if(!E.omitCurrent){for(let{key:C,value:x,version:z,localTime:ne}of i.getRange({start:L??!1,end:L==null?void 0:[L,Nl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(I.send({id:C,localTime:ne,value:x,version:z,type:"put"}),I.queue?.length>xk&&await I.waitForDrain()===!1))return}}else{D&&!k&&(k=0);let C=this.#n?.localTime;if(C===nb&&(i.cache?.delete(L),this.#n=i.getEntry(L),ve.default.trace?.("re-retrieved record",C,this.#n?.localTime),C=this.#n?.localTime),ve.default.trace?.("Subscription from",k,"from",L,C),k<C){let x=[],z=C;do{let ne=l.get(z);if(ne){E.omitCurrent=!0;let re=wt(ne),B=re.getValue(i,S,z);S&&(re.type="put"),x.push({id:L,value:B,localTime:z,...re}),z=re.previousLocalTime}else break;D&&D--}while(z>k&&D!==0);for(let ne=x.length;ne>0;)I.send(x[--ne]);I.startTime=C}!E.omitCurrent&&this.doesExist()&&I.send({id:L,localTime:C,value:this.#e,version:this.#r,type:"put"})}for(let C of A)I.send(C);A=null})();return E.listener&&I.on("data",E.listener),I}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 b=!0,I=this.getContext();return E.checkPermission&&(b=this.allowCreate(I.user,E,I)),Ps(b,P=>{if(!P)throw new at.AccessViolation(I.user);let L=Rr(E);this._writePublish(L,S,A)})}}_writePublish(E,S,A){let b=Lr(this.getContext());E??=null,E!==null&&Pr(E);let I=this.getContext();b.addWrite({key:E,store:i,entry:this.#n,nodeName:I?.nodeName,validate:o(()=>{I?.source||(b.checkOverloaded(),this.validate(S))},"validate"),before:Pe.publish?.bind(this,I,E,S),beforeIntermediate:Aa(S,De.publish?.bind(this,I,E,S)),commit:o((P,L,D)=>{L===void 0&&R&&!g&&ya(),ve.default.trace?.(`Publishing message to id: ${E}, timestamp: ${new Date(P).toISOString()}`),y(E,L?.value??null,L,L?.version||P,0,!0,{user:I?.user,residencyId:A?.residencyId,expiresAt:I?.expiresAt,nodeId:A?.nodeId},"message",!1,S)},"commit")})}validate(E,S){let A,b=o((I,P,L)=>{if(P.type&&I!=null)if(S&&I.__op__&&(I=I.value),P.properties){typeof I!="object"&&(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be an object${P.type?" ("+P.type+")":""}`);let D=P.properties;for(let k=0,C=D.length;k<C;k++){let x=D[k];if(x.relationship||x.computed){E.hasOwnProperty(x.name)&&(A||(A=[])).push(`Computed property ${L}.${x.name} may not be directly assigned a value`);continue}let z=b(I[x.name],x,L+"."+x.name);z&&(I[x.name]=z)}if(P.sealed&&I!=null&&typeof I=="object")for(let k in I)D.find(C=>C.name===k)||(A||(A=[])).push(`Property ${k} is not allowed within object in property ${L}`)}else switch(P.type){case"Int":(typeof I!="number"||I>>0!==I)&&(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(D=>typeof D=="string")||(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a string`);break;case"Boolean":typeof I!="boolean"&&(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a bigint`)}break;case"Bytes":if(!(I instanceof Uint8Array)){if(typeof I=="string")return Buffer.from(I);(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(I instanceof Rs)){if(typeof I=="string"&&(I=Buffer.from(I)),I instanceof Buffer)return createBlob(I,{type:"text/plain"});(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a Blob`)}break;case"array":if(Array.isArray(I)){if(P.elements)for(let D=0,k=I.length;D<k;D++){let C=I[D],x=b(C,P.elements,L+"[*]");x&&(I[D]=x)}}else(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be an Array`);break}P.nullable===!1&&I==null&&(A||(A=[])).push(`Property ${L} is required (and not does not allow null values)`)},"validateValue");for(let I=0,P=T.length;I<P;I++){let L=T[I];if(L.relationship||L.computed){Object.hasOwn(E,L.name)&&(A||(A=[])).push(`Computed property ${L.name} may not be directly assigned a value`);continue}if(!S||L.name in E){let D=b(E[L.name],L,L.name);D!==void 0&&(E[L.name]=D)}}if(f)for(let I in E)T.find(P=>P.name===I)||(A||(A=[])).push(`Property ${I} is not allowed`);if(A)throw new at.ClientError(A.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(E){let S=T.slice(0);for(let A of E){if(!A.name)throw new at.ClientError("Attribute name is required");if(A.name.match(/[`/]/))throw new at.ClientError("Attribute names cannot include backticks or forward slashes");Noe(A.name),S.push(A)}return je({table:s,database:c,schemaDefined:u,attributes:S}),Ce.indexingOperation}static async removeAttributes(E){let S=T.filter(A=>!E.includes(A.name));return je({table:s,database:c,schemaDefined:u,attributes:S}),Ce.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=LN.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,b=performance.now(),I=Math.floor(S/2),P=E?.exactCount,L=0,D=0,k;for(let{value:C}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(C!=null&&L++,D++,await Va(),!P&&D<I&&performance.now()-b>A){k=D;break}if(k){let C=L;L=0;for(let{value:ee}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:k,snapshot:!1}))ee!=null&&L++,await Va();let x=k*2,z=(L+C)/x,ne=Math.pow((L-C+1)/k/2,2)+z*(1-z)/x,re=Math.max(Math.sqrt(ne)*S,1),B=Math.round(z*S),de=Math.max(B-1.96*re,L+C),he=Math.min(B+1.96*re,S),Se=Math.pow(10,Math.round(Math.log10(re)));return Se>B&&(Se=Se/10),L=Math.round(B/Se)*Se,{recordCount:L,estimatedRange:[Math.round(de),Math.round(he)]}}return{recordCount:L}}static updatedAttributes(){pt=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&&(F=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)"),Dc=!0,S.to)E.elements?.definition?(pt[E.name]=E.resolve=(b,I,P,L)=>{let D=b[S.from?S.from:t],k=E.elements.definition.tableClass;return L?Uu({attribute:S.to,value:D},Lr(I).getReadTxn(),!1,k,!1).map(C=>C&&C.key!==void 0?C:k.primaryStore.getEntry(C,{transaction:Lr(I).getReadTxn()})).asArray:k.search([{attribute:S.to,value:D}],I).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 b=E.definition||E.elements?.definition;b?(pt[E.name]=E.resolve=(I,P,L,D)=>{let k=I[S.from];if(k===void 0)return;if(E.elements){let x,z=k?.map(ne=>{let re=b.tableClass.primaryStore[D?"getEntry":"get"](ne,{transaction:Lr(P).getReadTxn()});return re?.then&&(x=!0),Ce.loadAsInstance===!1&&Object.freeze(D?re?.value:re),re});return S.filterMissing?x?Promise.all(z).then(ne=>ne.filter(Hk)):z.filter(Hk):x?Promise.all(z):z}let C=b.tableClass.primaryStore[D?"getEntry":"get"](k,{transaction:Lr(P).getReadTxn()});return Ce.loadAsInstance===!1&&Object.freeze(D?C?.value:C),C},E.set=(I,P)=>{if(Array.isArray(P)){let L=P.map(D=>D.getId?.()||D[b.tableClass.primaryKey]);I[S.from]=L}else{let L=P.getId?.()||P[b.tableClass.primaryKey];I[S.from]=L}},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),pt[E.name]=E.resolve=(b,I,P)=>{let L=typeof A.from=="string"?b[A.from]:b,D=this.userResolvers[E.name];if(D)return D(L,I,P);ve.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 b=r[E.name].customIndex;pt[E.name]=(I,P,L)=>{let D=I[E.name];return b.propertyResolver(D,P,L)},pt[E.name].directReturn=!0}}jm(this,this),jm(Gf,this,!0);for(let E of T){let S=E.name;E.resolve&&Object.defineProperty(i.encoder.structPrototype,S,{get(){return E.resolve(this,Fu.getStore())},set(A){return E.set(this,A)},configurable:!0})}}static setComputedAttribute(E,S){let A=Fi(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:b,value:I}of l.getRange({start:0,end:E}))await Va(),wt(I).tableId===n&&(A=b_(l,b,I));if(S)for(let b of i.getRange({start:0,versions:!0})){let{key:I,value:P,localTime:L}=b;await Va(),P===null&&L<E&&(A=el(i,b))}await A}static async*getHistory(E=0,S=1/0){for(let{key:A,value:b}of l.getRange({start:E||1,end:S})){await Va();let I=wt(b);I.tableId===n&&(yield{id:I.recordId,localTime:A,version:I.version,type:I.type,value:I.getValue(i,!0,A),user:I.user,operation:I.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 b=A.localTime;if(!b)throw new Error("The entry does not have a local audit time");let I=0;do{await Va();let P=l.get(b);if(P){let L=wt(P);S.push({id:L.recordId,localTime:b,version:L.version,type:L.type,value:L.getValue(i,!0,b),user:L.user}),b=L.previousLocalTime}else break}while(I<1e3&&b);return S.reverse()}static cleanup(){$?.remove()}}let UE=Fg(async(V,E,S)=>{for(let A of Ce.sources)if(A.get&&(!A.get.reliesOnPrototype||A.prototype.get)){if(A.available?.(S)===!1)continue;E.source=A;let b=await A.get(V,E);if(b)return b}},()=>{throw new at.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Ce.updatedAttributes();let $f=Ce.prototype;return p&&Ce.setTTLExpiration(p/1e3),K&&Su(),Ce;function Eo(V,E,S){let A;for(let b in r){let I=r[b],P=I.isIndexing,L=pt[b],D=S&&(L?L(S):S[b]),k=E&&(L?L(E):E[b]);if(D===k&&!P)continue;if(I.customIndex){I.customIndex.index(V,D,k);continue}A=!0;let C=I.indexNulls,x=(0,ph.getIndexedValues)(D,C),z=(0,ph.getIndexedValues)(k,C);if(s==="OrganizationRole"&&ve.default.error?.({tableName:s,id:V,key:b,valuesToAdd:x,valuesToRemove:z}),z?.length>0){let ne=new Set(z);if(x=x?x.filter(re=>{if(ne.has(re))ne.delete(re);else return!0}):[],z=Array.from(ne),(z.length>0||x.length>0)&&Mk){let re=z.concat(x).map(B=>({key:B,value:V}));I.prefetch(re,Bk)}for(let re=0,B=z.length;re<B;re++)I.remove(z[re],V)}else x?.length>0&&Mk&&I.prefetch(x.map(ne=>({key:ne,value:V})),Bk);if(x)for(let ne=0,re=x.length;ne<re;ne++)I.put(x[ne],V)}return A}o(Eo,"updateIndices");function Pr(V){switch(typeof V){case"number":return!0;case"string":if(V.length<659)return!0;if(V.length>Uk)throw new Error("Primary key size is too large: "+V.length);break;case"object":if(V===null)throw new Error("Invalid primary key of null");break;case"bigint":if(V<2n**64n&&V>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof V)}if((0,Nl.writeKey)(V,Doe,0)>Uk)throw new Error("Primary key size is too large: "+V.length);return!0}o(Pr,"checkValidId");function Rr(V){return typeof V=="object"&&V?V.id:V}o(Rr,"requestTargetToId");function Vf(V){return typeof V=="object"&&V&&V.isCollection}o(Vf,"isSearchTarget");function Ss(V){}o(Ss,"isRequestTarget");function ga(V,E,S,A,b){if(Ce.getResidencyById&&S.ensureLoaded&&E?.replicateFrom!==!1){let P=Uc(Ce.getResidencyById(V));if(P&&!P.includes(server.hostname)&&N)return N({key:V,residency:P}).then(b)}let I=o(()=>{if(E?.transaction?.stale&&(E.transaction.stale=!1),S.transaction?.isDone)return b(null,V);let P=i.getEntry(V,S);return E?._freezeRecords&&Object.freeze(P?.value),P?.residencyId&&P.metadataFlags&wn&&N&&S.ensureLoaded&&E?.replicateFrom!==!1?N(P).then(L=>b(L,V),L=>(ve.default.error?.("Error loading remote record",V,P,S,L),b(null,V))):(P&&E&&(P?.version>(E.lastModified||0)&&(E.lastModified=P.version),P?.localTime&&!E.lastRefreshed&&(E.lastRefreshed=P.localTime)),b(P,V))},"whenPrefetched");return A?I():ie>0?(ie--,I()):new Promise((P,L)=>{ie===0?(ie--,i.prefetch([V],()=>{D(),k()})):(le.push(V),ue.push(k),le.length>Wy&&(ie--,D()));function D(){if(le.length>0){let C=ue;i.prefetch(le,()=>{ie===-1?D():ie++;for(let x of C)x()}),le=[],ue=[],me>2&&me--}else ie=me,me<vE&&me++}o(D,"prefetch");function k(){try{P(I())}catch(C){L(C)}}o(k,"load")})}o(ga,"loadLocalRecord");function Sa(V,E){let S=E?.checkPermission;if(typeof S!="object"){if(!V?.role)return;S=V.role.permission}if(S.super_user)return Moe;let A=S[c],b,I=A?.tables;if(I)return I[s];if(c==="data"&&(b=S[s])&&!b.tables)return b}o(Sa,"getTablePermissions");function vc(V,E,S,A){if(O){let b=!1;if(S.noCache?b=!0:(E?(!E.value||E.metadataFlags&(wn|tl)||E.expiresAt!=null&&E.expiresAt<Date.now())&&(b=!0):b=!0,Wr(!b,"cache-hit",s)),b){let I=xE(V,E,S).then(P=>(P?.value&&P?.value.getRecord?.()&&ve.default.error?.("Can not assign a record that is already a resource"),S&&(P?.version>(S.lastModified||0)&&(S.lastModified=P.version),S.lastRefreshed=Date.now()),P));if(S?.onlyIfCached||E?.value&&A?.allowStaleWhileRevalidate?.(E,V)){if(I.catch(P=>ve.default.warn?.(P)),S?.onlyIfCached&&!A.doesExist())throw new at.ServerError("Entry is not cached",504);return}else return I}}else if(E?.value&&E.expiresAt!=null&&E.expiresAt<Date.now())return Ce.evict(E.key,E.value,E.version),E.value=null,{then(b){return b(E)}}}o(vc,"ensureLoadedFromSource");function Lr(V){let E=V?.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 go,E.lmdbDb=i,E;E=S}while(!0)}else return new t_}o(Lr,"txnForContext");function _u(V,E,S){if(!V)return;let A=(V.deref?V.deref():V.value)??i.getEntry(V.key)?.value;if(typeof E=="object"){let I=pt,P=A;for(let L=0,D=E.length;L<D;L++){let k=E[L],C=I?.[k];P=C&&P?C(P,S,V):P?.[k],V=null,I=C?.definition?.tableClass?.propertyResolvers}return P}let b=pt[E];return b?b(A,S,V):A[E]}o(_u,"getAttributeValue");function gu(V,E,S,A,b){let I=b?.length,P={transaction:A,lazy:I>0||typeof E=="string"||E?.length<4,alwaysPrefetch:!0},L;function D(k,C){let x=k?.value;if(!x)return Ka.SKIP;for(let z=0;z<I;z++)if(!L?.includes(z)&&!b[z](x,k))return Ka.SKIP;return C!==void 0&&(k.key=C),k}if(o(D,"processEntry"),I>0||!V.hasEntries){let k=V.map(C=>{if(L=null,typeof C=="object"&&C?.key!==void 0)return I>0?D(C):C;if(C==null)return Ka.SKIP;for(let x=0;x<I;x++){let ne=b[x].idFilter;if(ne){if(!ne(C))return Ka.SKIP;L||(L=[]),L.push(x)}}return ga(C,S,P,!1,D)});return Array.isArray(V)&&(k=k.filter(C=>C!==Ka.SKIP)),k.hasEntries=!0,k}return V}o(gu,"transformToEntries");function Ta(V,E,S=server.replication?.getThisNodeId(l)){if(V<=E?.version){if(E?.version===V&&S!==void 0){let A=server.replication?.exportIdMapping(l),b=E.localTime,I=b&&l.get(b);if(I){let P,L,D=wt(I);for(let k in A)A[k]===S&&(P=k),A[k]===D.nodeId&&(L=k);if(P>L)return 1;if(P===L)return 0}}return-1}return 1}o(Ta,"precedesExistingVersion");async function xE(V,E,S){let A=E?.metadataFlags,b=E?.version,I,P;if(!i.attemptLock(V,b,()=>{clearTimeout(P);let C=i.getEntry(V);!C||!C.value||C.metadataFlags&(wn|tl)?I(xE(V,i.getEntry(V),S)):I(C)}))return new Promise(C=>{I=C,P=setTimeout(()=>{i.unlock(V,b)},Poe)});let L=E?.value,D={requestContext:S,replacingRecord:L,replacingEntry:E,replacingVersion:b,noCacheStore:!1,source:null,resourceCache:S?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},k=S?.responseHeaders;return new Promise((C,x)=>{let z;Ps(Ft(D,async ne=>{let re=performance.now(),B,de,he;try{B=await UE(V,D,E),he=A&wn;let ee=D.lastModified||he&&b;ee||(ee=(0,ph.getNextMonotonicTime)()),de=he||ee>b||!L;let Q=performance.now()-re;if(ot(Q,"cache-resolution",s,null,"success"),k&&mh(k,"Server-Timing",`cache-resolve;dur=${Q.toFixed(2)}`,!0),ne.timestamp=ee,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=L,ee=b;else throw new at.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==V&&(B[t]=V)}z=!0,C({key:V,version:ee,value:B})}catch(ee){ee.message+=` while resolving record ${V} for ${s}`,L&&((ee.code==="ECONNRESET"||ee.code==="ECONNREFUSED"||ee.code==="EAI_AGAIN")&&!S?.mustRevalidate||S?.staleIfError&&(ee.statusCode===500||ee.statusCode===502||ee.statusCode===503||ee.statusCode===504))?(C({key:V,version:b,value:L}),ve.default.trace?.(ee.message,"(returned stale record)")):x(ee);let Q=performance.now()-re;ot(Q,"cache-resolution",s,null,"fail"),k&&mh(k,"Server-Timing",`cache-resolve;dur=${Q.toFixed(2)}`,!0),D.transaction.abort();return}if(S?.noCacheStore||D.noCacheStore){D.transaction.abort();return}Lr(D).addWrite({key:V,store:i,entry:E,nodeName:"source",before:Aa(B),commit:o((ee,Q)=>{if(Q?.version!==b)return;let pe=Eo(V,L,B);if(B){De.put?.(D,V,B),Q&&(S.previousResidency=Ce.getResidencyRecord(Q.residencyId));let Te,fe=!1,We,Tt=Uc(Ce.getResidency(B,S));if(Tt){if(!Tt.includes(server.hostname))if(Te=B,fe=!0,Ce.getResidencyById)B=void 0;else{B=null;for(let ft in r)B||(B={}),B[ft]=Te[ft]}We=xc(Tt)}ve.default.trace?.(`Writing resolved record from source with id: ${V}, timestamp: ${new Date(ee).toISOString()}`),y(V,B,Q,ee,fe?wn:0,g&&(de||fe)||null,{user:D?.user,expiresAt:D.expiresAt,residencyId:We},"put",!!he,Te)}else Q&&(De.delete?.(D,V),ve.default.trace?.(`Deleting resolved record from source with id: ${V}, timestamp: ${new Date(ee).toISOString()}`),g||R?y(V,null,Q,ee,0,g&&de||null,{user:D?.user},"delete",!!he):el(i,Q,b))},"commit")})}),()=>{i.unlock(V,b)},ne=>{i.unlock(V,b),z&&ve.default.error?.("Error committing cache update",ne)})})}o(xE,"getFromSource");function Ra(V){if(!V||V.user?.role?.permission?.super_user)return!0;if(V.replicateTo)throw new at.ClientError("Can not specify replication parameters without super user permissions",403);if(V.replicatedConfirmation)throw new at.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Ra,"checkContextPermissions");function ya(V){let E=!1;if(V&&(V-Ye>1&&(E=!0),Ye=V),!(dt===Gn&&!E)&&(Gn=dt,(0,bl.getWorkerIndex)()===(0,bl.getWorkerCount)()-1))return st&&clearTimeout(st),dt?new Promise(S=>{let A=new Date;A.setMonth(0),A.setDate(1),A.setHours(0),A.setMinutes(0),A.setSeconds(0);let b=dt/(1+Ye),I=E?Date.now():Math.ceil((Date.now()-A.getTime())/b)*b+A.getTime(),P=o(L=>{ve.default.trace?.(`Scheduled next cleanup scan at ${new Date(L)}`),st=setTimeout(()=>Z=Z.then(async()=>{if(P(Math.max(L+dt,Date.now())),i.rootStore.status!=="open"){clearTimeout(st);return}let D=50,k=new Array(D),C=0,x=Math.pow(Ye,8)*(Il.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),z=_/Math.pow(Math.max(Ye,1),4);ve.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${z}ms`);function ne(re,B,de,he){let Se=re+z-Date.now();if(Se<0)return!0;if(Ye){let ee=i.lastSize;return de&$r&&Vc(he,Q=>{Q.size&&(ee+=Q.size)}),ve.default.trace?.(`shouldEvict adjusted ${Se} ${ee}, ${Se*(re-B)/ee} < ${x}`),Se*(re-B)/ee<x}return!1}o(ne,"shouldEvict");try{let re=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:de,value:he,version:Se,expiresAt:ee,metadataFlags:Q}=B,pe;he===null&&!g&&Se+Coe<Date.now()?pe=el(i,B,Se):ee!=null&&ne(ee,Se,Q,he)&&(pe=Ce.evict(de,he,Se),re++),pe&&(await k[C],k[C]=pe.catch(Te=>{ve.default.error?.("Cleanup error",Te)}),++C>=D&&(C=0)),await Va()}ve.default.info?.(`Finished cleanup scan for ${s}, evicted ${re} entries`)}catch(re){ve.default.warn?.(`Error in cleanup scan for ${s}:`,re)}S(void 0),Ye=0}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");P(I)}):void 0}o(ya,"scheduleCleanup");function Kf(){$=l?.addDeleteRemovalCallback(n,i,(V,E)=>{i.remove(V,E)})}o(Kf,"addDeleteRemoval");function Su(){(0,bl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Mc){Mc=!0;try{let V=K.name,E=r[V];if(!E)throw new Error(`expiresAt attribute ${K} 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 b=i.getEntry(A);b?.value?b.value[V]<Date.now()&&Ce.evict(A,b.value,b.version):i.ifVersion(A,b?.version,()=>E.remove(S,A))}await Va()}}catch(V){ve.default.error?.("Error in evicting old records",V)}finally{Mc=!1}}},Ooe).unref()}o(Su,"runRecordExpirationEviction");function Uc(V){if(V!=null){if(Array.isArray(V))return V;if(typeof V=="number"){if(V>=65536)throw new Error(`Shard id ${V} must be below 65536`);let E=server.shards?.get?.(V);if(E)return ve.default.trace?.(`Shard ${V} mapped to ${E.map(S=>S.name).join(", ")}`),E.map(S=>S.name);throw new Error(`Shard ${V} is not defined`)}throw new Error(`Shard or residency list ${V} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Uc,"residencyFromFunction");function xc(V){if(V){let E=V.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],V),S)}}o(xc,"getResidencyId");function Aa(V,E){let S=qA(V,i.rootStore);if(S){let A=E;return A?async()=>{await A(),await S()}:()=>S()}return E}o(Aa,"preCommitBlobsForRecordBefore")}function PN(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 Bk(){}function kg(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return Hg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Hg(+e);case"Float":return e==="null"?null:Hg(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;voe.test(e)||(e+="Z");let n=new Date(e);return Hg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,qg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Hg(e){if(isNaN(e))throw new SyntaxError;return e}function Fk(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 Ps(e,t,r){return e?.then?e.then(t,r):t(e)}function Hk(e){return e!=null}function Ls(e){try{return JSON.stringify(e)}catch{return e}}function Uoe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ka,ph,kk,qk,Il,at,Eh,_h,ve,Nl,bl,qg,LN,Ioe,Noe,woe,Ooe,Coe,Mk,Poe,vk,Loe,wn,tl,Doe,Uk,xk,Moe,CMe,voe,Va,B_=ce(()=>{H();Ka=require("lmdb"),ph=w(bn()),kk=w(require("lodash")),qk=w(om());Ma();cm();Il=w(oe());hb();at=w(ge()),Eh=w(Po()),_h=w(ai());Me();x_();ve=w(ri());wI();kc();Nl=require("ordered-binary"),bl=w(ze());Mi();qg=w(se());Jc();ji();s_();hh();LN=w(require("node:fs"));Yn();T_();CN();({sortBy:Ioe}=kk.default),{validateAttribute:Noe}=qk.default,woe=new Uint8Array(9);woe[8]=192;Ooe=6e4,Coe=864e5;Il.initSync();Mk=Il.get(U.STORAGE_PREFETCHWRITES),Poe=1e4,vk=1,Loe=2,wn=1,tl=8,Doe=Buffer.allocUnsafeSlow(8192),Uk=1978,xk=100,Moe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},CMe=(0,qg.convertToMS)(Il.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Gg,"makeTable");o(PN,"attributesAsObject");o(Bk,"noop");voe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(kg,"coerceType");o(Hg,"rejectNaN");o(Fk,"isDescendantId");Va=o(()=>new Promise(setImmediate),"rest");o(Ps,"when");o(Hk,"exists");o(Ls,"stringify");o(Uoe,"hasOtherProcesses")});function $g(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 Vg(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 $k=ce(()=>{o($g,"euclideanDistance");o(Vg,"cosineDistance")});var Vk,Kk,cd,Qi,ad,xoe,Boe,Kg,Yk=ce(()=>{$k();Vk=require("msgpackr"),Kk=w(ri()),cd=w(ge()),Qi=(0,Kk.loggerWithTag)("HNSW"),ad=Symbol.for("entryPoint"),xoe=Symbol.for("key"),Boe=10,Kg=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=Vk.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?$g:Vg,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"?[xoe,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(ad);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 R=0;R<=_;R++)g[R]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);Qi.debug?.("setting entry point to",i),this.indexStore.put(ad,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Boe),h=f.level;if(m>=h){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);Qi.debug?.("setting entry point to",i),this.indexStore.put(ad,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&&Qi.info?.("should not have zero connections for",l);let R=p[_];for(let T=0;T<g.length;T++){let{id:y,distance:N,node:O}=g[T];if(y===i)continue;let F=[];if(this.optimizeRouting){let W=!1,K=O[_],$=1+this.optimizeRouting*(1+.5*T/this.M);for(let le=0;le<K.length;le++){let{id:ue,distance:ie}=K[le],me=1+this.optimizeRouting*(1+.5*le/this.M);for(let Pe=0;Pe<R.length;Pe++){let{id:De,distance:dt}=R[Pe];if(De===ue){N*$>dt+ie?W=!0:ie*me>N+dt&&(F.push({fromId:De,toId:y}),F.push({fromId:y,toId:De}));break}}if(W)break}if(W)continue}else if(T>=(_>0?this.M:this.M<<1))continue;R.push({id:y,distance:N});for(let{fromId:W,toId:K}of F){let $=d(W);$||($=d(W,this.indexStore.get(W)));for(let le=0;le<$[_].length;le++)if($[_][le].id===K){Object.isFrozen($[_])&&($[_]=$[_].slice()),$[_].splice(le,1);break}}let Z=c[_],q=Z?.find(({id:W})=>W===y);if(q){let W=Z?.indexOf(q);Z.copied||(Z=[...Z],Z.copied=!0,c[_]=Z),Z.splice(W,1)}else this.addConnection(y,d(y,O),i,_,N,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(ad);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);Qi.debug?.("setting entry point to",l),this.indexStore.put(ad,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&&(Qi.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(ad);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 cd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new cd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=Vg;else if(s==="euclidean")c=$g;else{if(s)throw new cd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new cd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new cd.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){Qi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||Qi.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){Qi.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:h})=>h!==t),s===0&&m[s].length===0&&Qi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?Qi.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?$g:Vg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var DN,Wk=ce(()=>{Yk();DN={HNSW:Kg}});var _t={};we(_t,{database:()=>Xu,databaseEnvs:()=>Bo,databases:()=>He,dropDatabase:()=>DI,dropTableMeta:()=>Goe,getDatabases:()=>it,getDefaultCompression:()=>Jg,getTables:()=>Foe,onRemovedDB:()=>Ah,onUpdatedTable:()=>wl,readMetaDb:()=>gh,resetDatabases:()=>hd,table:()=>je,tables:()=>un});function Foe(){return jg||it(),un||{}}function it(){if(jg)return He;jg=!0,dd=new Map;let e=(0,Wt.getHdbBasePath)()&&(0,qt.join)((0,Wt.getHdbBasePath)(),Fc),t=(0,Wt.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Wt.get)(U.STORAGE_PATH)||e&&((0,ss.existsSync)(e)?e:(0,qt.join)((0,Wt.getHdbBasePath)(),qE)),!e)return;if((0,ss.existsSync)(e))for(let n of(0,ss.readdirSync)(e,{withFileTypes:!0})){let s=(0,qt.basename)(n.name,".mdb");n.isFile()&&(0,qt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&gh((0,qt.join)(e,n.name),null,s)}if((0,ss.existsSync)((0,ud.getBaseSchemaPath)())){for(let n of(0,ss.readdirSync)((0,ud.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,qt.join)((0,ud.getBaseSchemaPath)(),n.name),i=(0,qt.join)((0,ud.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,ss.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,qt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,qt.join)(i,a.name);gh((0,qt.join)(s,a.name),(0,qt.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ss.existsSync)(i))for(let c of(0,ss.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,qt.extname)(c.name).toLowerCase()===".mdb"&&gh((0,qt.join)(i,c.name),(0,qt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,qt.join)(l.path,(0,qt.basename)(c+".mdb"));(0,ss.existsSync)(u)&&gh(u,c,n,null,!0)}}for(let n in He){let s=dd.get(n);if(s){let i=He[n];n.includes("delete")&&Ir.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(Ir.trace(`delete table class ${a}`),delete i[a])}else if(delete He[n],n==="data"){for(let i in un)delete un[i];delete un[Qg]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if((0,Wt.get)(U.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(He.system?.hdb_analytics?.enableAuditing(),He.system?.hdb_analytics_hostname?.enableAuditing()),He.system)for(let n of r)He.system[n]&&(He.system[n].replicate=!1);return dd=null,He}function hd(){jg=!1;for(let[,e]of Bo)e.needsDeletion=!0;it();for(let[e,t]of Bo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Bo.delete(e);let r=He[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete He[t.databaseName],Th.forEach(i=>i(t.databaseName));break}}return He}function gh(e,t,r=UN,n,s){let i=new MN.default(e,!1);try{let a=Bo.get(e);a?a.needsDeletion=!1:(a=(0,fd.open)(i),Bo.set(e,a));let c=new md.default(!1),l=a.dbisDb||(a.dbisDb=a.openDB(Yg.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ss.existsSync)(n)&&(i.path=n,u=(0,fd.open)(i),u.isLegacy=!0):u=A_(a));let d=Xk(r),f=d[Qg],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 R=m.get(_);R||m.set(_,R={attributes:[]}),(g==null||p.is_hash_attribute)&&(R.primary=p),g!=null&&R.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 ie of _)if(ie.is_hash_attribute||ie.isPrimaryKey){g=ie;break}if(!g){Ir.warn(`Unable to find a primary key attribute on table ${h}, with attributes: ${JSON.stringify(_)}`);continue}}let R=d[h],T={},y=[],N,O,F=typeof g.audit=="boolean"?g.audit:(0,Wt.get)(U.LOGGING_AUDITLOG),Z=g.trackDeletes,q=g.expiration,W=g.eviction,K=g.sealed,$=g.splitSegments,le=g.replicate;if(R)T=R.indices,y=R.attributes,R.schemaVersion++;else{N=g.tableId,N?N>=(l.get(ld)||0)&&(l.putSync(ld,N+1),Ir.info(`Updating next table id (it was out of sync) to ${N+1} for ${h}`)):(g.tableId=N=l.get(ld),N||(N=1),Ir.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(ld,N+1),l.putSync(g.key,g));let ie=new md.default(!g.is_hash_attribute,g.is_hash_attribute);if(ie.compression=g.compression,ie.compression){let me=(0,Wt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||Jk;ie.compression.threshold=me}O=D_(a.openDB(g.key,ie),a),a.databaseName=r,O.tableId=N}let ue;for(let ie of _){ie.attribute=ie.name;try{if(!ie.is_hash_attribute&&(ie.indexed||ie.attribute&&!ie.name)){if(!T[ie.name]){let Pe=eq(ie.key,a,ie);T[ie.name]=Pe,T[ie.name].indexNulls=ie.indexNulls}let me=y.find(Pe=>Pe.name===ie.name);me?y.splice(y.indexOf(me),1,ie):y.push(ie),ue=!0}}catch(me){Ir.error("Error trying to update attribute",ie,y,T,me)}}for(let ie of y)if(!_.find(Pe=>Pe.name===ie.name)){if(ie.is_hash_attribute){Ir.error("Unable to remove existing primary key attribute",ie);continue}ie.indexed&&(y.splice(y.indexOf(ie),1),ue=!0)}if(R)ue&&(R.schemaVersion++,R.updatedAttributes());else{R=Zk(d,h,Gg({primaryStore:O,auditStore:u,audit:F,sealed:K,splitSegments:$,replicate:le,expirationMS:q&&q*1e3,evictionMS:W&&W*1e3,trackDeletes:Z,tableName:h,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+h:r,databaseName:r,indices:T,attributes:_,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let ie of Sh)ie(R)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function Xk(e){let t=He[e];if(t||(e==="data"?t=He[e]=un:e==="system"?Object.defineProperty(He,"system",{value:t=Object.create(null),configurable:!0}):t=He[e]=Object.create(null)),dd&&!dd.has(e)){let r=new Set;t[Qg]=r,dd.set(e,r)}return t}function Zk(e,t,r){return e[t]=r,r}function Xu({database:e,table:t}){e||(e=UN),it();let r=Xk(e),n=(0,qt.join)((0,Wt.getHdbBasePath)(),Fc),s=(0,Wt.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,Wt.get)(U.STORAGE_PATH)||((0,ss.existsSync)(n)?n:(0,qt.join)((0,Wt.getHdbBasePath)(),qE));let a=(0,qt.join)(n,(i?t:e)+".mdb"),c=Bo.get(a);if(!c||c.status==="closed"){let l=new MN.default(a,!1);c=(0,fd.open)(l),Bo.set(a,c)}return c.auditStore||(c.auditStore=A_(c)),c}async function DI(e){if(!He[e])throw new Error("Schema does not exist");let t=He[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Bo.delete(r.path),r.status==="open"&&(await r.close(),await Rh.remove(r.path));if(r||(r=Xu({database:e,table:null}),r.status==="open"&&(await r.close(),await Rh.remove(r.path))),e==="data"){for(let n in un)delete un[n];delete un[Qg]}delete He[e],Th.forEach(n=>n(e)),await kA(r)}function eq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&DN[r.indexed.type]?.useObjectStore,s=new md.default(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=DN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Ir.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function je(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=UN);let p=Xu({database:r,table:t}),_=He[r];Ir.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 R,T,y;m==null&&(m=!0);let N=new md.default(!1);for(let $ of a)$.attribute&&!$.name?($.name=$.attribute,$.indexed=!0):$.attribute=$.name,$.expiresAt&&($.indexed=!0);let O,F;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let $=p.auditStore;T=a.find(me=>me.isPrimaryKey)||{},R=T.name,T.is_hash_attribute=T.isPrimaryKey=!0,T.schemaDefined=m,T.compression=Jg(),f&&(T.trackDeletes=!0),c=T.audit=typeof c=="boolean"?c:(0,Wt.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]),Ir.trace(`${t} table loading, opening primary store`);let le=new md.default(!1,!0);le.compression=T.compression;let ue=t+"/";if(y=p.dbisDb=p.openDB(Yg.INTERNAL_DBIS_NAME,N),K(),y.get(ue))return F&&F(),hd(),je(e);let ie=D_(p.openDB(ue,le),p);p.databaseName=r,ie.tableId=y.get(ld),Ir.trace(`Assigning new table id ${ie.tableId} for ${t}`),ie.tableId||(ie.tableId=1),y.put(ld,ie.tableId+1),T.tableId=ie.tableId,g=Zk(_,t,Gg({primaryStore:ie,auditStore:$,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:ie.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:y})),g.schemaVersion=1,O=!0,y.put(ue,T)}let Z=g.indices;y=y||(p.dbisDb=p.openDB(Yg.INTERNAL_DBIS_NAME,N)),g.dbisDB=y;let q=[];for(let{key:$,value:le}of y.getRange({start:!0})){let[ue,ie]=$.toString().split("/");if(ie===""&&(ie=le.name),ie){if(ue!==t)continue}else continue;let me=a.find(De=>De.name===ie),Pe=!me?.indexed&&le.indexed&&!le.isPrimaryKey;if((!me||Pe)&&(K(),O=!0,me||y.remove($),Pe)){let De=g.indices[ue];De&&q.push(De)}}let W=[];try{for(let $ of a||[]){if(($.relationship||$.computed)&&(O=!0,$.relationship))continue;let le=t+"/"+($.name||"");Object.defineProperty($,"key",{value:le,configurable:!0});let ue=y.get(le);if($.isPrimaryKey){if(ue=ue||y.get(le=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ue.expiration||void 0)||(+s||void 0)!==(+ue.eviction||void 0)||$.type!==ue.type){let me={...ue};typeof c=="boolean"&&(c&&g.enableAuditing(c),me.audit=c),n&&(me.expiration=+n),s&&(me.eviction=+s),l!==void 0&&(me.sealed=l),d!==void 0&&(me.replicate=d),$.type&&(me.type=$.type),O=!0,K(),y.put(le,me)}continue}ue?.attribute&&!ue.name&&(ue.indexed=!0);let ie=!ue||ue.type!==$.type||JSON.stringify(ue.indexed)!==JSON.stringify($.indexed)||ue.nullable!==$.nullable||ue.version!==$.version||JSON.stringify(ue.properties)!==JSON.stringify($.properties)||JSON.stringify(ue.elements)!==JSON.stringify($.elements);if($.indexed){let me=eq(le,p,$);(ie||ue.indexingPID&&ue.indexingPID!==process.pid||ue.restartNumber<yh.workerData?.restartNumber)&&(O=!0,K(),ue=y.get(le),(ie||ue.indexingPID&&ue.indexingPID!==process.pid||ue.restartNumber<yh.workerData?.restartNumber)&&(O=!0,$.indexNulls===void 0&&($.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&($.lastIndexedKey=ue?.lastIndexedKey??void 0,$.indexingPID=process.pid,me.isIndexing=!0,Object.defineProperty($,"dbi",{value:me}),W.push($))),y.put(le,$)),ue?.indexNulls&&$.indexNulls===void 0&&($.indexNulls=!0),me.indexNulls=$.indexNulls,Z[$.name]=me}else ie&&(O=!0,K(),y.put(le,$))}}finally{F&&F()}if(O&&(g.schemaVersion++,g.updatedAttributes()),Ir.trace(`${t} table loading, running index`),W.length>0||q.length>0?g.indexingOperation=qoe(g,W,q):O&&Wg.signalSchemaChange(new zg.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=h,O)for(let $ of Sh)$(g,h!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Ir.trace(`${t} table loaded`),g;function K(){F||p.transactionSync(()=>({then($){F=$}}))}o(K,"startTxn")}async function qoe(e,t,r){try{Ir.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await Wg.signalSchemaChange(new zg.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,fd.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,R=_.dbi;try{let T=_.resolve,y=m&&(T?T(m):m[g]);if(R.customIndex){R.customIndex.index(f,y);continue}let N=(0,zk.getIndexedValues)(y);if(N)for(let O=0,F=N.length;O<F;O++)R.put(N[O],f)}catch(T){a[g]||(a[g]=!0,Ir.error(`Error indexing attribute ${g}`,T))}}}),s.then(()=>d--,p=>{d--,Ir.error(p)}),yh.workerData&&yh.workerData.restartNumber!==Qk.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>Hoe?await s:d>koe&&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 zg.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Ir.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Ir.error("Error in indexing",n)}}function Goe({table:e,database:t}){let r=Xu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function wl(e){return Sh.push(e),{remove(){let t=Sh.indexOf(e);t>-1&&Sh.splice(t,1)}}}function Ah(e){return Th.push(e),{remove(){let t=Th.indexOf(e);t>-1&&Th.splice(t,1)}}}function Jg(){let e=(0,Wt.get)(U.STORAGE_COMPRESSION),t=(0,Wt.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,Wt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||Jk,n={startingOffset:32};return t&&(n.dictionary=Rh.readFileSync(t)),r&&(n.threshold=r),e&&n}var Wt,Yg,fd,qt,ss,ud,md,MN,Rh,vN,zk,Wg,zg,yh,jk,Qk,Ir,UN,Qg,Jk,un,He,ld,Sh,Th,jg,Bo,dd,Hoe,koe,Me=ce(()=>{Wt=w(oe()),Yg=w(Kt()),fd=require("lmdb"),qt=require("path"),ss=require("fs"),ud=w(Nt());B_();md=w(Lm()),MN=w(Dm());H();Rh=w(require("fs-extra")),vN=w(ti()),zk=w(bn()),Wg=w(Po()),zg=w(ai()),yh=require("worker_threads"),jk=w(j()),Qk=w(ze());Mi();Jc();Yn();Wk();Ir=(0,jk.forComponent)("storage"),UN="data",Qg=Symbol("defined-tables"),Jk=((0,Wt.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,Wt.initSync)();un=Object.create(null),He=Object.create(null);(0,vN._assignPackageExport)("databases",He);(0,vN._assignPackageExport)("tables",un);ld=Symbol.for("next-table-id"),Sh=[],Th=[],Bo=new Map;o(Foe,"getTables");o(it,"getDatabases");o(hd,"resetDatabases");o(gh,"readMetaDb");o(Xk,"ensureDB");o(Zk,"setTable");o(Xu,"database");o(DI,"dropDatabase");o(eq,"openIndex");o(je,"table");Hoe=1e3,koe=10;o(qoe,"runIndexing");o(Goe,"dropTableMeta");o(wl,"onUpdatedTable");o(Ah,"onRemovedDB");o(Jg,"getDefaultCompression")});var FN={};we(FN,{loadGQLSchema:()=>Koe,start:()=>BN,startOnMainThread:()=>Voe});function BN({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 R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(q){if(q.kind==="NonNullType"){let $=F(q.type);return $.nullable=!1,$}if(q.kind==="ListType")return{type:"array",elements:F(q.type)};let K={type:q.name?.value};return Object.defineProperty(K,"location",{value:q.loc.startToken}),K};o(F,"getProperty");let T=R.name.value,y=[],N={table:null,database:null,properties:y};m.set(T,N);for(let q of R.directives){if(q.name.value==="table"){for(let K of q.arguments)N[K.name.value]=K.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=T),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,h.push(N)}if(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="splitSegments"&&(N.splitSegments=!0),q.name.value==="replicate"&&(N.replicate=!0),q.name.value==="export"){N.export=!0;for(let K of q.arguments)typeof N.export!="object"&&(N.export={}),N.export[K.name.value]=K.value.value}}let O=!1,Z={};for(let q of R.fields){let W=F(q.type);W.name=q.name.value,y.push(W),Z[W.name]=void 0;for(let K of q.directives){let $=K.name.value;if($==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",K.loc):(W.isPrimaryKey=!0,O=!0);else if($==="indexed"){let le={};for(let ue of K.arguments||[])le[ue.name.value]=ue.value.value;W.indexed=le}else if($==="computed"){for(let le of K.arguments||[])if(le.name.value==="from"){let ue=le.value.value;W.computed={from:g(ue,le,Z)},W.version==null&&(W.version=ue)}else le.name.value==="version"&&(W.version=le.value.value);W.computed=W.computed||!0}else if($==="relationship"){let le={};for(let ue of K.arguments)le[ue.name.value]=ue.value.value;W.relationship=le}else if($==="createdTime")W.assignCreatedTime=!0;else if($==="updatedTime")W.assignUpdatedTime=!0;else if($==="expiresAt")W.expiresAt=!0;else if($==="allow"){let le=W.authorizedRoles=[];for(let ue of K.arguments)ue.name.value==="role"&&le.push(ue.value.value)}else server.knownGraphQLDirectives.includes($)&&console.warn(`@${$} is an unknown directive, at`,K.loc)}}N.type=T,T==="Query"&&(p=N)}function _(R){let T=m.get(R.type);T?(Object.defineProperty(R,"properties",{value:T.properties}),Object.defineProperty(R,"definition",{value:T})):R.type==="array"?_(R.elements):$oe.includes(R.type)||(0,rq.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}o(_,"connectPropertyType");for(let R of m.values())for(let T of R.properties)_(T);for(let R of h)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,xN.dirname)(n),R.tableClass):i.set((0,xN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,T,y){return new tq.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:T.loc.startToken.line-1,columnOffset:T.loc.startToken.column}).runInThisContext()(y)}o(g,"createComputedFrom")}}var xN,tq,rq,$oe,Voe,Koe,nq=ce(()=>{xN=require("path"),tq=require("node:vm");Me();rq=w(ze()),$oe=["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(BN,"start");Voe=BN,Koe=BN({ensureTable:je}).handleFile});var kN={};we(kN,{start:()=>eae});function Yoe(e){if(e.kind!==xe.Kind.OPERATION_DEFINITION&&e.kind!==xe.Kind.FRAGMENT_DEFINITION)throw new Fr(`Unexpected non-executable definition type ${e.kind}.`)}function sq(e){if(typeof e!="object"||e===null)throw new Ji("Request body must be an object.");if(!("query"in e))throw new Ji("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ji("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ji("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ji("Request body `operationName` field must be a string.")}function HN(e){return parseInt(e.value,10)}function oq(e){return parseFloat(e.value)}function aq(e,t,r){let n=r.get(e.name.value);return cq(n)?lq(n,t):{attribute:t,value:n}}function cq(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function lq(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],cq(n)?lq(n,t):{attribute:t,value:n}))}function Woe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case xe.Kind.NULL:return{attribute:t,value:null};case xe.Kind.INT:return{attribute:t,value:HN(e.value)};case xe.Kind.FLOAT:return{attribute:t,value:oq(e.value)};case xe.Kind.BOOLEAN:case xe.Kind.STRING:return{attribute:t,value:e.value.value};case xe.Kind.VARIABLE:return aq(e.value,t,r);case xe.Kind.OBJECT:return uq(e.value,t,r);case xe.Kind.LIST:case xe.Kind.ENUM:default:throw new Fr(`Value type, ${e.value.kind}, is not supported.`)}}function uq(e,t,r){return e.fields.flatMap(n=>Woe(n,t,r))}function zoe(e,t){switch(e.value.kind){case xe.Kind.NULL:return{attribute:e.name.value,value:null};case xe.Kind.INT:return{attribute:e.name.value,value:HN(e.value)};case xe.Kind.FLOAT:return{attribute:e.name.value,value:oq(e.value)};case xe.Kind.BOOLEAN:case xe.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case xe.Kind.VARIABLE:return aq(e.value,e.name.value,t);case xe.Kind.OBJECT:return uq(e.value,[e.name.value],t);case xe.Kind.LIST:case xe.Kind.ENUM:default:throw new Fr(`Argument type, ${e.value.kind}, is not supported.`)}}function joe(e,t){return e.flatMap(r=>zoe(r,t))}function Xg(e,t){return e.selections.flatMap(r=>{switch(r.kind){case xe.Kind.FIELD:return r;case xe.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Fr(`Fragment \`${n}\` not found.`);return Xg(s.selectionSet,t)}case xe.Kind.INLINE_FRAGMENT:return Xg(r.selectionSet,t)}})}function dq(e,t){return Xg(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:dq(r.selectionSet,t)}:r.name.value)}async function Qoe(e,t,r,n){let s=bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Fr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:dq(e.selectionSet,r),conditions:joe(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 fq(e){switch(e.kind){case xe.Kind.NULL:return null;case xe.Kind.INT:return HN(e);case xe.Kind.FLOAT:return parseFloat(e.value);case xe.Kind.STRING:case xe.Kind.BOOLEAN:return e.value;case xe.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:fq(r.value),...t}),{});case xe.Kind.LIST:case xe.Kind.ENUM:default:throw new Fr(`Value type, ${e.kind}, is not supported.`)}}function Joe(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=fq(n.defaultValue)),n.type.kind===xe.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Fr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Xoe(e,t,r,n){if(e.operation===xe.OperationTypeNode.SUBSCRIPTION)throw new Fr("Subscriptions are not supported.");if(e.operation===xe.OperationTypeNode.MUTATION)throw new Fr("Mutations are not supported yet.");let s=Joe(e.variableDefinitions,t),i=await Promise.all(Xg(e.selectionSet,r).map(c=>Qoe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function iq({query:e,variables:t={},operationName:r},n){let s=xe.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(Yoe(u),u.kind===xe.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Fr("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 Fr(`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 Fr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Fr(`Operation \`${r}\` not found.`);let l=await Xoe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Zoe(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return sq(r),iq(r,e)}case"POST":{let r=await Ro(e.headers.get("content-type"),!0)(e._nodeRequest);return sq(r),iq(r,e)}default:throw new Ji("Method Not Allowed",405,{Allow:"GET, POST"})}}function eae(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Zoe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof xe.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Fr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof xe.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Fr)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 xe,Fr,Ji,mq=ce(()=>{xe=w(require("graphql"));yo();qu();o(Yoe,"assertExecutableDefinitionNode");o(sq,"assertRequestParams");o(HN,"processIntValueNode");o(oq,"processFloatValueNode");o(aq,"processVariableNode");o(cq,"isObject");o(lq,"transformObjectIntoQueryCondition");o(Woe,"processObjectFieldNode");o(uq,"processObjectValueNode");o(zoe,"processArgumentNode");o(joe,"buildConditionsQuery");o(Xg,"fillInFragments");o(dq,"buildSelectQuery");o(Qoe,"processFieldNode");o(fq,"processConstValueNode");o(Joe,"resolveVariables");o(Xoe,"executeOperation");o(iq,"resolver");Fr=class extends Error{static{o(this,"GraphQLQueryingError")}},Ji=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Zoe,"graphqlQueryingHandler");o(eae,"start")});var Sq=M((XMe,gq)=>{var pd=require("validate.js"),pq=nt(),Ed=(H(),v(Y)),{handleHDBError:tae,hdbErrors:rae}=ge(),{HDB_ERROR_MSGS:rr,HTTP_STATUS_CODES:nae}=rae,qN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),sae={STRUCTURE_USER:"structure_user"},hq=Object.values(Ed.ROLE_TYPES_ENUM),iae="attribute_permissions",oae="attribute_name",{PERMS_CRUD_ENUM:_d}=Ed,aae=[iae,...Object.values(_d)],Eq=[_d.READ,_d.INSERT,_d.UPDATE],cae=[oae,...Eq];function lae(e){let t=qN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,_q(e,t)}o(lae,"addRoleValidation");function uae(e){let t=qN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,_q(e,t)}o(uae,"alterRoleValidation");function dae(e){let t=qN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,pq.validateObject(e,t)}o(dae,"dropRoleValidation");var fae=["operation","role","id","permission","hdb_user","access"];function _q(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)fae.includes(n[a])||s.push(n[a]);s.length>0&&mr(rr.INVALID_ROLE_JSON_KEYS(s),r);let i=pq.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{mr(a,r)}),e.permission){let a=mae(e);a&&mr(a,r),hq.forEach(c=>{e.permission[c]&&!pd.isBoolean(e.permission[c])&&mr(rr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(hq.indexOf(a)<0){if(a===sae.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]||mr(rr.SCHEMA_NOT_FOUND(f),r)}continue}mr(rr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){mr(rr.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]){mr(rr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{aae.includes(d)||mr(rr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(_d).forEach(d=>{pd.isDefined(u[d])?pd.isBoolean(u[d])||mr(rr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):mr(rr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){mr(rr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){mr(rr.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(_=>{!cae.includes(_)&&_!==_d.DELETE&&mr(rr.INVALID_ATTR_PERM_KEY(_),r,a,l)}),!pd.isDefined(h.attribute_name)){mr(rr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let p=h.attribute_name;if(!d.includes(p)){mr(rr.INVALID_ATTRIBUTE_IN_PERMS(p),r,a,l);continue}Eq.forEach(_=>{pd.isDefined(h[_])?pd.isBoolean(h[_])||mr(rr.ATTR_PERM_NOT_BOOLEAN(_,p),r,a,l):mr(rr.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}`;mr(rr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return hae(r)}o(_q,"customValidate");gq.exports={addRoleValidation:lae,alterRoleValidation:uae,dropRoleValidation:dae};function mae(e){let{operation:t,permission:r}=e;if(t===Ed.OPERATIONS_ENUM.ADD_ROLE||t===Ed.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 rr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?Ed.ROLE_TYPES_ENUM.SUPER_USER:Ed.ROLE_TYPES_ENUM.CLUSTER_USER;return rr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(mae,"validateNoSUPerms");function hae(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:rr.ROLE_PERMS_ERROR,...e};return tae(new Error,n,nae.BAD_REQUEST)}else return null}o(hae,"generateRolePermResponse");function mr(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(mr,"addPermError")});var Ih=M((tve,Aq)=>{"use strict";var Tq=on(),Rq=sn(),pae=ka(),$N=Sq(),VN=Po(),eve=require("uuid").v4,Eae=require("util"),Zg=(H(),v(Y)),_ae=se(),KN=Rq.searchByValue,gae=Rq.searchByHash,Sae=Eae.promisify(pae.delete),Tae=ci(),Rae=zu(),{hdbErrors:yae,handleHDBError:Ol}=ge(),{HDB_ERROR_MSGS:yq,HTTP_STATUS_CODES:bh}=yae,{UserEventMsg:YN}=ai();Aq.exports={addRole:Aae,alterRole:bae,dropRole:Iae,listRoles:Nae};function GN(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(GN,"scrubRoleDetails");async function Aae(e){let t=$N.addRoleValidation(e);if(t)throw t;e=GN(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 KN(r)||[])}catch(i){throw Ol(i)}if(n&&n.length>0)throw Ol(new Error,yq.ROLE_ALREADY_EXISTS(e.role),bh.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 Tq.insert(s),VN.signalUserChange(new YN(process.pid)),e=GN(e),e}o(Aae,"addRole");async function bae(e){let t=$N.alterRoleValidation(e);if(t)throw t;e=GN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Tq.update(r)}catch(s){throw Ol(s)}if(n&&n?.message==="updated 0 of 1 records")throw Ol(new Error,"Invalid role id",bh.BAD_REQUEST,void 0,void 0,!0);return await VN.signalUserChange(new YN(process.pid)),e}o(bae,"alterRole");async function Iae(e){let t=$N.dropRoleValidation(e);if(t)throw Ol(new Error,t,bh.BAD_REQUEST,void 0,void 0,!0);let r=new Rae(Zg.SYSTEM_SCHEMA_NAME,Zg.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await gae(r));if(n.length===0)throw Ol(new Error,yq.ROLE_NOT_FOUND,bh.NOT_FOUND,void 0,void 0,!0);let s=new Tae(Zg.SYSTEM_SCHEMA_NAME,Zg.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await KN(s)),a=!1;if(_ae.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Ol(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,bh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Sae(c),VN.signalUserChange(new YN(process.pid)),`${n[0].role} successfully deleted`}o(Iae,"dropRole");async function Nae(){return KN({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(Nae,"listRoles")});var WN={};we(WN,{start:()=>Nq,startOnMainThread:()=>Cae});function Nq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,bq.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if(wae.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 Oae(i)}}}async function Oae(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,Iq.isEqual)(i,e)?void 0:(e.id=r.id,(0,eS.alterRole)(e))}return(0,eS.addRole)(e)}var eS,bq,Iq,wae,Cae,wq=ce(()=>{Me();eS=w(Ih()),bq=require("yaml"),Iq=require("lodash"),wae=["super_user","cluster_user","structure_user"];o(Nq,"start");o(Oae,"ensureRole");Cae=Nq});async function tS(e){let t=(0,Pq.pathToFileURL)(e).toString();if(Pae)return Nh||(Nh=Lae(Mae)),(await(await Nh).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Lae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Nh=new Compartment({console,Math,Date,fetch:Dae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Cq.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Ur,s.tables=un,s.databases=He}};let n=await(0,Oq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Nh}function Dae(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 Mae(){return{Resource:Ur,tables:un}}var Oq,Cq,Pq,Pae,Nh,zN=ce(()=>{Ma();Me();Oq=require("fs/promises"),Cq=require("path"),Pq=require("url"),Pae=!1;o(tS,"secureImport");o(Lae,"getCompartment");o(Dae,"secureOnlyFetch");o(Mae,"getGlobalVars")});var jN={};we(jN,{handleApplication:()=>vae,suppressHandleApplicationWarning:()=>Uae});function Dq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function vae(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}tS(t.absolutePath).then(r=>{let n=(0,Lq.dirname)(t.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");Dq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),Mq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function Mq(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;Dq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&Mq(e,s,i)}}var Lq,Uae,vq=ce(()=>{zN();Lq=require("path");o(Dq,"isResource");o(vae,"handleApplication");o(Mq,"recurseForResources");Uae=!0});var JN={};we(JN,{start:()=>xae});function xae({resources:e}){e.set("login",QN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var QN,Uq=ce(()=>{Ma();o(xae,"start");QN=class extends Ur{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 kq(e){let t={openapi:Bae,info:{title:"HarperDB HTTP REST interface",version:Hq.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:y,name:N,elements:O,relationship:F,definition:Z}of a){if(F)y==="array"?u[N]={type:"array",items:{$ref:Ya+O.type}}:u[N]={$ref:Ya+y};else{let q=Z??O?.definition;if(q){if(!t.components.schemas[q.type]){let W={};q.properties.forEach(K=>{W[K.name]=new tw(XN[K.type],K.type)}),t.components.schemas[q.type]=new Fq(W)}y==="array"?u[N]={type:"array",items:{$ref:Ya+q.type}}:u[N]={$ref:Ya+q.type}}else y==="array"?O.type==="Any"||O.type=="ID"?u[N]={type:"array",items:{format:O.type}}:u[N]={type:"array",items:new tw(XN[O.type],O.type)}:y==="Any"||y=="ID"?u[N]={format:y}:u[N]=new tw(XN[y],y)}d.push(new rw(N,"query",u[N]))}let f=Object.keys(u),m=new rw(c,"path",{format:"ID"});m.required=!0,m.description="primary key of record";let h=new rw("property","path",{enum:f});h.required=!0,t.components.schemas[i]=new Fq(u);let p=l.post!==Resource.prototype.post||l.update,_=typeof l.put=="function",g=typeof l.get=="function",R=typeof l.delete=="function",T="/"+s+"/";p&&(t.paths[T]={},t.paths[T].post=new Fae(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new ZN(d,r,{200:new ew({$ref:Ya+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new Bq(d,r,"delete all the records that match the provided query",{204:new xq})),T="/"+s+"/{"+c+"}",g&&(t.paths[T]={},t.paths[T].get=new ZN([m],r,{200:new ew({$ref:Ya+i})},"retrieve a record by its primary key")),_&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Hae([m],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new Bq([m],r,"delete a record with the given primary key",{204:new xq})),g&&h.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new ZN([m,h],r,{200:new ew({enum:f})},"used to retrieve the specified property of the specified record"))}return t}function Fae(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ya+e}}}},this.security=t,this.responses={200:{description:nw,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function ZN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function ew(e){this.description=nw,this.content={"application/json":{schema:e}}}function xq(){this.description="successfully processed request, no content returned to client"}function Hae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ya+r}}}},this.responses={200:{description:nw}}}function Bq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function Fq(e){this.type="object",this.properties=e}function tw(e,t){this.type=e,this.format=t}function rw(e,t,r){this.name=e,this.in=t,this.schema=r}var Hq,Bae,XN,Ya,nw,qq=ce(()=>{Hq=w(It()),Bae="3.0.3",XN={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ya="#/components/schemas/",nw="successful operation";o(kq,"generateJsonApi");o(Fae,"Post");o(ZN,"Get");o(ew,"Response200");o(xq,"Response204");o(Hae,"Put");o(Bq,"Delete");o(Fq,"ResourceSchema");o(tw,"Type");o(rw,"Parameter")});var $q={};we($q,{Request:()=>Wa,createReuseportFd:()=>rS});var Gq,Wa,sw,iw,rS,wh=ce(()=>{Gq=require("os"),Wa=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 iw(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 sw(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)}},sw=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)}},iw=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,Gq.platform)()!="win32"&&(rS=require("node-unix-socket").createReuseportFd)});var sS={};we(sS,{parseHeaderValue:()=>aw,start:()=>Gae});async function qae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&U_(e);let i=new Cs;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==Vq){let g=nS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new si(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=aw(g);for(let T of R)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=aw(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await Ft(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Ro(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new gd.ClientError(g,400)}if(e.authorize=!0,a===Vq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return kq(nS);throw new gd.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 gd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new gd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,h;if(f==null)m=s==="GET"||s==="HEAD"?404:204,ow.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f.status>0&&f.headers){let g=Ck(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=hm(f.data,e,f)),f}else if(h=e.lastModified){kae[0]=h;let g=String.fromCharCode(34,(zr[0]&63)+62,(zr[0]>>6)+(zr[1]<<2&63)+62,(zr[1]>>4)+(zr[2]<<4&63)+62,(zr[2]>>2)+62,(zr[3]&63)+62,(zr[3]>>6)+(zr[4]<<2&63)+62,(zr[4]>>4)+(zr[5]<<4&63)+62,(zr[5]>>2)+62,(zr[6]&63)+62,(zr[6]>>6)+(zr[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),ow.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=hm(f,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(a){a.statusCode?a.statusCode===500?mi.warn(a):mi.info(a):mi.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=hm(a.contentType?a:Wq(a),e,c),c}}function Gae(e){ow=e,e.includeExpensiveRecordCountEstimates&&(Wa.prototype.includeExpensiveRecordCountEstimates=!0),!Kq&&(Kq=!0,nS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return qae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Oh++;let s=new Kn;Yq||(Yq=!0,fh(l=>{Oh>0&&l.push({metric:"ws-connections",connections:Oh,byThread:!0})}));let i;t.on("error",l=>{i=!0,mi.warn(l)});let a;t.on("message",o(function(u){a||(a=Ro(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);ot(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{Oh--,Wr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=nS.getMatch(l,"ws");if(Wr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,ot(p=>({count:p.count,total:Oh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new si(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await Ft(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let h;for(;!(h=await c.next()).done;){let p=await wa(h.value,r);t.send(p),ot(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?mi.warn(l):mi.info(l):mi.error(l),t.close($ae[l.statusCode]||1011,Wq(l))}t.close()},e))}function aw(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 mi,gd,Wq,zr,kae,ow,Vq,Kq,nS,Yq,Oh,$ae,zq=ce(()=>{yo();ji();mi=w(j()),gd=w(ge());x_();bu();kc();hh();qq();wh();F_();({errorToString:Wq}=mi),zr=new Uint8Array(8),kae=new Float64Array(zr.buffer,0,1),ow={},Vq="openapi";o(qae,"http");Oh=0;o(Gae,"start");$ae={401:3e3,403:3003};o(aw,"parseHeaderValue")});var cw=M((wve,Qq)=>{var{recordAction:iS,recordActionBinary:jq}=(ji(),v(Bg)),Vae=require("fastify-plugin"),Kae=200;Qq.exports=Vae(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),iS(a,"duration",u,f,d),jq(s.raw.statusCode<400,"success",u,f,d),jq(1,"response_"+s.raw.statusCode,u,f,d);let m=Kae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{iS(performance.now()-c,"transfer",u,f,d),iS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,iS(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 Xq=M((Ove,Jq)=>{var Yae=nt(),Wae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Jq.exports=function(e){return Yae.validateObject(e,Wae)}});var Ch=M((Cve,Zq)=>{"use strict";var zae=(H(),v(Y)).OPERATIONS_ENUM,lw=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=zae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Zq.exports=lw});var Dh={};we(Dh,{createTokens:()=>fw,getJWTRSAKeys:()=>uS,refreshOperationToken:()=>mw,validateOperationToken:()=>hw,validateRefreshToken:()=>dS});async function uS(){if(oS)return oS;try{let e=Ph.default.join(Lh.default.getHdbBasePath(),nA),t=await aS.default.readFile(Ph.default.join(e,Jf.JWT_PASSPHRASE_NAME),"utf8"),r=await aS.default.readFile(Ph.default.join(e,Jf.JWT_PRIVATE_KEY_NAME),"utf8");return oS={publicKey:await aS.default.readFile(Ph.default.join(e,Jf.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},oS}catch(e){throw lS.default.error(e),new hi.ClientError(Td.NO_ENCRYPTION_KEYS,Sd.INTERNAL_SERVER_ERROR)}}async function fw(e){let t=(0,uw.validateBySchema)(e,Xi.default.object({username:Xi.default.string().optional(),password:Xi.default.string().optional(),role:Xi.default.string().optional(),expires_in:Xi.default.alternatives(Xi.default.string(),Xi.default.number()).optional()}));if(t)throw new hi.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,dw.findAndValidateUser)(e.username,e.password,f)}catch(f){throw lS.default.error(f),new hi.ClientError(Td.INVALID_CREDENTIALS,Sd.UNAUTHORIZED)}if(!r)throw new hi.ClientError(Td.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 uS(),c=await Rd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??sG,algorithm:cS,subject:yd.OPERATION}),l=await Rd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:jae,algorithm:cS,subject:yd.REFRESH}),u=JI(l,xr.SHA256);if((await(0,eG.update)(new tG.default(Qf,Ru.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new hi.ClientError(Td.REFRESH_TOKEN_SAVE_FAILED,Sd.INTERNAL_SERVER_ERROR);return rG.default.signalUserChange(new nG.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function mw(e){let t=(0,uw.validateBySchema)(e,Xi.default.object({refresh_token:Xi.default.string().required()}).required());if(t)throw new hi.ClientError(t.message);let{refresh_token:r}=e;await dS(r);let n=await uS(),s=await Rd.default.decode(r);return{operation_token:await Rd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:sG,algorithm:cS,subject:yd.OPERATION})}}async function hw(e){return iG(e,yd.OPERATION)}async function dS(e){return iG(e,yd.REFRESH)}async function iG(e,t){try{let r=await uS(),n=await Rd.default.verify(e,r.publicKey,{algorithms:cS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,dw.findAndValidateUser)(n.username,void 0,!1);if(t===yd.REFRESH&&!XI(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw lS.default.warn(r),r?.name==="TokenExpiredError"?new hi.ClientError(Td.TOKEN_EXPIRED,Sd.FORBIDDEN):new hi.ClientError(Td.INVALID_TOKEN,Sd.UNAUTHORIZED)}}var Rd,aS,Ph,Xi,uw,hi,lS,dw,eG,tG,rG,nG,Lh,Sd,Td,sG,jae,cS,yd,oS,Ad=ce(()=>{Rd=w(require("jsonwebtoken")),aS=w(require("fs-extra")),Ph=w(require("node:path")),Xi=w(require("joi")),uw=w(nt());H();hi=w(ge()),lS=w(j());Ag();dw=w(rs()),eG=w(on()),tG=w(Ch()),rG=w(Po()),nG=w(ai()),Lh=w(oe()),{HTTP_STATUS_CODES:Sd,AUTHENTICATION_ERROR_MSGS:Td}=hi.hdbErrors;Lh.default.initSync();sG=Lh.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",jae=Lh.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",cS="RS256",yd={OPERATION:"operation",REFRESH:"refresh"};o(uS,"getJWTRSAKeys");o(fw,"createTokens");o(mw,"refreshOperationToken");o(hw,"validateOperationToken");o(dS,"validateRefreshToken");o(iG,"validateToken")});var pw=M((vve,cG)=>{"use strict";var Qae=Xq(),bd=require("passport"),Jae=require("passport-local").Strategy,Xae=require("passport-http").BasicStrategy,Zae=require("util"),ece=rs(),aG=Zae.callbackify(ece.findAndValidateUser),Mve=tn(),tce=(H(),v(Y)),oG=(Ad(),v(Dh));bd.use(new Jae(function(e,t,r){aG(e,t,r)}));bd.use(new Xae(function(e,t,r){aG(e,t,r)}));bd.serializeUser(function(e,t){t(null,e)});bd.deserializeUser(function(e,t){t(null,e)});function rce(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":bd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===tce.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?oG.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):oG.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:bd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(rce,"authorize");function nce(e,t){let r=Qae(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(nce,"checkPermissions");cG.exports={authorize:rce,checkPermissions:nce}});var fS=M((xve,lG)=>{"use strict";var sce=Xn();lG.exports={writeTransaction:ice};function ice(e,t,r){return sce.writeTransaction(e,t,r)}o(ice,"writeTransaction")});var mG=M((Hve,fG)=>{"use strict";var oce=sn(),ace=ws(),uG=j(),cce=on(),Fve=fS(),lce=require("clone"),_w=require("alasql"),uce=fg(),dG=require("util"),dce=dG.promisify(ace.getTableSchema),fce=dG.promisify(oce.search),mce=(H(),v(Y)),Ew=se();uce(_w);fG.exports={update:pce};var hce="There was a problem performing this update. Please check the logs and try again.";async function pce({statement:e,hdb_user:t}){let r=await dce(e.table.databaseid,e.table.tableid),n=Ece(e.columns);Ew.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=lce(s),c=Ew.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=_w.parse(l).statements[0],d=await fce(u),f=_ce(n,d);return gce(a,f,t)}o(pce,"update");function Ece(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=_w.compile(`SELECT ${r.expression.toString()} AS [${mce.FUNC_VAL}] FROM ?`)}),t}catch(t){throw uG.error(t),new Error(hce)}}o(Ece,"createUpdateRecord");function _ce(e,t){return Ew.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(_ce,"buildUpdateRecords");async function gce(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await cce.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){uG.error(`Error delete new_attributes from update response: ${i}`)}return s}o(gce,"updateRecords")});var pG=M(($ve,hG)=>{var Sce=require("alasql"),Tce=sn(),Rce=j(),yce=Xn(),Sw=require("util"),gw=se(),Ace=(H(),v(Y)),bce=ws(),qve=fS(),Gve=on(),Ice="record",Nce="successfully deleted",wce=Sw.callbackify(Lce),Oce=Sw.promisify(Tce.search),Cce=Sw.promisify(bce.getTableSchema);hG.exports={convertDelete:wce};function Pce(e){return`${e.deleted_hashes.length} ${Ice}${e.deleted_hashes.length===1?"":"s"} ${Nce}`}o(Pce,"generateReturnMessage");async function Lce({statement:e,hdb_user:t}){let r=await Cce(e.table.databaseid,e.table.tableid);gw.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=gw.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Sce.parse(a).statements[0],l={operation:Ace.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Oce(c);let u=await yce.deleteRecords(l);return gw.isEmptyOrZeroLength(u.message)&&(u.message=Pce(u)),delete u.txn_time,u}catch(u){throw Rce.error(u),u.hdb_code?u.message:u}}o(Lce,"convertDelete")});var TG=M((Kve,SG)=>{"use strict";var Dce=vo(),{hdbErrors:EG}=ge(),{getDatabases:_G}=(Me(),v(_t));SG.exports={checkSchemaExists:gG,checkSchemaTableExists:Mce,schemaDescribe:Dce};async function gG(e){if(!_G()[e])return EG.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(gG,"checkSchemaExists");async function Mce(e,t){let r=await gG(e);if(r)return r;if(!_G()[e][t])return EG.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Mce,"checkSchemaTableExists")});var bw=M((Qve,DG)=>{"use strict";var{decode:vce}=require("msgpackr"),{isMainThread:Wve,parentPort:zve,threadId:jve}=require("worker_threads"),pS=Gt(),Id=mt(),yw=(H(),v(Y)),dn=j(),Rw=oe(),Uce=(H(),v(Y)),{onMessageByType:xce}=ze(),bG=Ki(),{recordAction:RG,recordActionBinary:Bce}=(ji(),v(Bg)),{publishToStream:Fce}=pS,{ConsumerEvents:yG}=require("nats"),Hce=sn(),{promisify:kce}=require("util"),{decodeBlobsWithWrites:qce}=(Yn(),v(E_)),IG=kce(setTimeout),ES=1e4,_S,hS,Gce,$ce,NG,Mh=new Map,Nd=new Map;DG.exports={initialize:wG,ingestConsumer:Aw,setSubscription:Vce,setIgnoreOrigin:Wce,getDatabaseSubscriptions:Yce,updateConsumer:OG};async function wG(){xce(yw.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await OG(n)}),NG=!0,dn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await pS.getNATSReferences();_S=e,hS=e.info.server_name,Gce=t,$ce=r}o(wG,"initialize");async function OG(e){if(e.status==="start"){let{js:t,jsm:r}=await CG(e.node_domain_name);Aw(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Mh.get(e.stream_name+e.node_domain_name);t&&(dn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Mh.set(e.stream_name+e.node_domain_name,"close")),Nd.get(e.node_domain_name)==="failed"&&Nd.set(e.node_domain_name,"close")}}o(OG,"updateConsumer");var gS=new Map;function Vce(e,t,r){let n=gS.get(e);n||gS.set(e,n=new Map),n.set(t,r),NG||wG().then(Kce)}o(Vce,"setSubscription");async function Kce(){let e=await Hce.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Id.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await CG(r),!n))break;let{schema:a,table:c}=i,l=bG.createNatsTableStreamName(a,c);Aw(l,n,s,r)}}}o(Kce,"accessConsumers");async function CG(e){let t,r,n=1;for(;!r;)try{t=await _S.jetstream({domain:e}),r=await _S.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Nd.get(e)==="close")break;Nd.set(e,"failed"),n%10===1&&dn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<ES?n++*100:ES;await IG(i)}return{js:t,jsm:r}}o(CG,"connectToRemoteJS");function Yce(){return gS}o(Yce,"getDatabaseSubscriptions");var PG;function Wce(e){PG=e}o(Wce,"setIgnoreOrigin");var LG=100,AG=new Array(LG),mS=0;async function Aw(e,t,r,n){let{connection:s}=await pS.getNATSReferences();_S=s,hS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,hS),dn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Nd.get(n)==="close")break;a%10===1&&dn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(dn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await pS.createConsumer(r,e,hS,new Date(Date.now()).toISOString()));let d=a++*100<ES?a++*100:ES;await IG(d)}let c=!1,l;for(;!c;){if(Mh.get(e+n)==="close"||Nd.get(n)==="close"){Mh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Rw.get(yw.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Mh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===yG.ConsumerDeleted&&(await l.close(),c=!0),d.type===yG.HeartbeatsMissed){let f=d.data;dn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(dn.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 AG[mS],AG[mS]=zce(d).catch(f=>{dn.error(f)}),++mS>=LG&&(mS=0)}catch(d){d.message==="consumer deleted"?(dn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):dn.error("Error consuming clustering ingest, restarting consumer",d)}}}o(Aw,"ingestConsumer");async function zce(e){let t;await qce(()=>{t=vce(e.data)}),RG(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),dn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Rw.get(yw.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Id.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Id.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Id.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!PG),Bce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Id.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;dn.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),dn.trace(`messageProcessor nats msg id: ${e.headers.get(Id.MSG_HEADERS.NATS_MSG_ID)}`);let p;d||(d=f);let _=new Promise(O=>p=O),{timestamp:g,user:R,node_name:T}=m||{},y=gS.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=p,y.send(t);else if(d.length===1&&!l)y.send({type:Tw(a),value:d[0],id:f?.[0],expiresAt:h,timestamp:g,table:u,onCommit:p,user:R,nodeName:T});else{let O=d.map((F,Z)=>({type:Tw(a),value:F,expiresAt:h,id:f?.[Z],table:u}));for(;l;)O.push({type:Tw(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:p,user:R,nodeName:T})}Rw.get(Uce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Fce(e.subject.split(".").slice(0,-1).join("."),bG.createNatsTableStreamName(c,u),e.headers,e.data),await _;let N=Date.now()-g;g&&RG(N,"replication-latency",e.subject,a,"ingest")}catch(a){dn.error(a)}e.ack()}o(zce,"messageProcessor");function Tw(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(Tw,"convertOperation")});var Gt=M((nUe,jG)=>{"use strict";var Hr=oe();Hr.initSync();var jce=require("fs-extra"),Qce=require("semver"),xh=require("path"),{monotonicFactory:Jce}=require("ulidx"),vG=Jce(),Xce=require("util"),UG=require("child_process"),Zce=Xce.promisify(UG.exec),ele=UG.spawn,jr=mt(),Qe=(H(),v(Y)),{packageJson:tle,PACKAGE_ROOT:rle}=It(),SS=se(),pi=j(),TS=Ki(),nle=fS(),vh=Ot(),{broadcast:sle,onMessageByType:ile,getWorkerIndex:ole}=ze(),{isMainThread:xG}=require("worker_threads"),{Encoder:ale,decode:Ow}=require("msgpackr"),BG=new ale,{isEmpty:Dl}=SS,FG=rs(),Xve=48*36e11;xG&&ile(Qe.ITC_EVENT_TYPES.RESTART,()=>{fn=void 0,Ll=void 0});var{connect:cle,StorageType:lle,RetentionPolicy:ule,AckPolicy:Cw,DeliverPolicy:Pw,DiscardPolicy:dle,NatsConnection:Zve,JetStreamManager:eUe,JetStreamClient:tUe,StringCodec:rUe,JSONCodec:fle,createInbox:Lw,headers:mle,ErrorCode:MG}=require("nats"),{recordAction:hle}=(ji(),v(Bg)),{encodeBlobsAsBuffers:ple}=(Yn(),v(E_)),HG=fle(),Ele="clustering",_le=tle.engines[jr.NATS_SERVER_NAME],gle=xh.join(rle,"dependencies"),ww=xh.join(gle,`${process.platform}-${process.arch}`,jr.NATS_BINARY_NAME),Iw,Nw,Uh,Cl,Pl;jG.exports={runCommand:kG,checkNATSServerInstalled:Sle,createConnection:Dw,getConnection:Bh,getJetStreamManager:Fh,getJetStream:GG,getNATSReferences:Zi,getServerList:Rle,createLocalStream:Mw,listStreams:$G,deleteLocalStream:yle,getServerConfig:wd,listRemoteStreams:Ale,viewStream:ble,viewStreamIterator:Ile,publishToStream:Nle,request:Cle,reloadNATS:vw,reloadNATSHub:Ple,reloadNATSLeaf:Lle,extractServerName:Ole,requestErrorHandler:Dle,createLocalTableStream:WG,createTableStreams:Ule,purgeTableStream:zG,purgeSchemaTableStreams:xle,getStreamInfo:Ble,updateLocalStreams:Hle,closeConnection:Tle,getJsmServerName:RS,addNatsMsgHeader:VG,clearClientCache:qG,updateRemoteConsumer:Mle,createConsumer:KG,updateConsumerIterator:vle};async function kG(e,t=void 0){let{stdout:r,stderr:n}=await Zce(e,{cwd:t});if(n)throw new Error(n.replace(`
13
+ `)},Cse="certificate.pem",Pse="privateKey.pem",Lse="caCertificate.pem",Dse="natsCertificate.pem",Mse="natsCaCertificate.pem",Ct={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},vse={tls_certificate:Ct.SERVER,tlsCertificateAuthority:Ct.CA,customFunctions_tls_certificate:Ct.SERVER,customFunctionsTlsCertificateAuthority:Ct.CA,operationsApi_tls_certificate:Ct["OPERATIONS-API"],operationsApiTlsCertificateAuthority:Ct["OPERATIONS-CA"]},Use={[Ct.SERVER]:2,[Ct.DEFAULT]:1},xse={[Ct["OPERATIONS-API"]]:3,[Ct.SERVER]:2,[Ct.DEFAULT]:1},Bse={[Ct["OPERATIONS-API"]]:3,[Ct.SERVER]:2,[Ct.DEFAULT]:1},Fse={[Ct["OPERATIONS-CA"]]:3,[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1},Hse={[Ct["OPERATIONS-CA"]]:3,[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1},kse={[Ct.CA]:2,[Ct["DEFAULT-CA"]]:1};ln.CERTIFICATE_PEM_NAME=Cse;ln.PRIVATEKEY_PEM_NAME=Pse;ln.CA_PEM_NAME=Lse;ln.CERT_NAME=Ct;ln.CERT_CONFIG_NAME_MAP=vse;ln.CERT_PREFERENCE_APP=Use;ln.CERT_PREFERENCE_OPS=xse;ln.CERT_PREFERENCE_REP=Bse;ln.CA_CERT_PREFERENCE_REP=Fse;ln.CA_CERT_PREFERENCE_OPS=Hse;ln.CA_CERT_PREFERENCE_APP=kse;ln.CERTIFICATE_VALUES=Ose;ln.NATS_CERTIFICATE_PEM_NAME=Dse;ln.NATS_CA_PEM_NAME=Mse});var oN=M((xDe,OH)=>{"use strict";var NH=require("fs-extra"),ye=require("joi"),qse=require("os"),{boolean:qe,string:yt,number:dr,array:qa}=ye.types(),{totalmem:AH}=require("os"),Sl=require("path"),Gse=z(),iN=ie(),UDe=sN(),bH=(H(),v(Y)),$se=st(),IH="log",Vse="components",Kse="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Yse="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Wse="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",zse="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",jse="rootPath config parameter is undefined",Un=ye.alternatives([dr.min(0),yt]).optional().empty(null),bg=ye.alternatives([qa.items(yt,{host:yt.required(),port:Un},{hostname:yt.required(),port:Un}).empty(null),qa.items(yt)]),Yi,wH=!1;OH.exports={configValidator:Qse,routesValidator:rie,routeConstraints:bg};function Qse(e,t=!1){if(wH=t,Yi=e.rootPath,iN.isEmpty(Yi))throw jse;let r=qe.optional(),n=dr.min(0).max(1e3).empty(null).default(tie),s=yt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(nh),i=yt.optional().empty(null),a=yt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ye.string().empty(null).default(nh),l=ye.custom(Xse).empty(null).default(nh),u=e.clustering?.enabled,d=ye.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=ye.object({enabled:r,hubServer:ye.object({cluster:ye.object({name:ye.required().empty(null),network:ye.object({port:Un,routes:bg}).required()}).required(),leafNodes:ye.object({network:ye.object({port:Un}).required()}).required(),network:ye.object({port:Un}).required()}).required(),leafServer:ye.object({network:ye.object({port:Un,routes:bg}).required(),streams:ye.object({maxAge:dr.min(120).allow(null).optional(),maxBytes:dr.min(1).allow(null).optional(),maxMsgs:dr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ye.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:qe.optional(),databaseLevel:qe.optional(),tls:ye.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:qe.required(),verify:qe.optional()}),user:yt.optional().empty(null)}).optional():f=ye.object({enabled:r,tls:ye.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:qe.optional()})}).optional(),ye.object({authentication:ye.alternatives(ye.object({authorizeLocal:qe,cacheTTL:dr.required(),cookie:ye.object({domains:qa.items(yt).optional(),expires:yt.optional()}),enableSessions:qe,hashFunction:yt.valid("md5","sha256","argon2id").optional().empty(null)}),qe).optional(),analytics:ye.object({aggregatePeriod:dr,replicate:qe.optional()}),replication:ye.object({hostname:ye.alternatives(yt,dr).optional().empty(null),url:yt.optional().empty(null),port:Un,securePort:Un,routes:qa.optional().empty(null),databases:ye.alternatives(yt,qa),enableRootCAs:qe.optional(),copyTablesToCatchUp:qe.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:ye.object({enabled:r}).required(),logging:ye.object({auditAuthEvents:ye.object({logFailed:qe,logSuccessful:qe}),file:qe.required(),level:ye.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ye.object({enabled:qe.optional(),compress:qe.optional(),interval:yt.custom(eie).optional().empty(null),maxSize:yt.custom(Zse).optional().empty(null),path:yt.optional().empty(null).default(nh)}).required(),root:s,stdStreams:qe.required(),auditLog:qe.required()}).required(),operationsApi:ye.object({network:ye.object({cors:qe.optional(),corsAccessList:qa.optional(),headersTimeout:dr.min(1).optional(),keepAliveTimeout:dr.min(1).optional(),port:Un,domainSocket:ye.optional().empty("hdb/operations-server").default(nh),securePort:Un,timeout:dr.min(1).optional()}).optional(),tls:ye.alternatives([ye.array().items(d),d])}).required(),rootPath:yt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ye.object({network:ye.object({port:Un,securePort:Un,mtls:ye.alternatives([qe.optional(),ye.object({user:yt.optional(),certificateAuthority:i,required:qe.optional()})])}).required(),webSocket:qe.optional(),requireAuthentication:qe.optional()}),http:ye.object({compressionThreshold:dr.optional(),cors:qe.optional(),corsAccessList:qa.optional(),headersTimeout:dr.min(1).optional(),port:Un,securePort:Un,maxHeaderSize:dr.optional(),mtls:ye.alternatives([qe.optional(),ye.object({user:yt.optional(),certificateAuthority:i,required:qe.optional()})]),threadRange:ye.alternatives([qa.optional(),yt.optional()])}).required(),threads:ye.alternatives(n.optional(),ye.object({count:n.optional(),debug:ye.alternatives(qe.optional(),ye.object({startingPort:dr.min(1).optional(),host:yt.optional(),waitForDebugger:qe.optional()})),maxHeapMemory:dr.min(0).optional()})),storage:ye.object({writeAsync:qe.required(),overlappingSync:qe.optional(),caching:qe.optional(),compression:ye.alternatives([qe.optional(),ye.object({dictionary:yt.optional(),threshold:dr.optional()})]),compactOnStart:qe.optional(),compactOnStartKeepBackup:qe.optional(),noReadAhead:qe.optional(),path:l,prefetchWrites:qe.optional(),maxFreeSpaceToLoad:dr.optional(),maxFreeSpaceToRetain:dr.optional()}).required(),ignoreScripts:qe.optional(),tls:ye.alternatives([ye.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(Qse,"configValidator");function Jse(e){return wH||NH.existsSync(e)?null:`Specified path ${e} does not exist.`}o(Jse,"doesPathExist");function Xse(e,t){ye.assert(e,yt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Jse(e);if(r)return t.message(r)}o(Xse,"validatePath");function Zse(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Kse);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Wse):e}o(Zse,"validateRotationMaxSize");function eie(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Yse);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(zse):e}o(eie,"validateRotationInterval");function tie(e,t){let r=t.state.path.join("."),n=qse.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||AH();return i=Math.round(Math.min(i,AH())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Gse.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(tie,"setDefaultThreads");function nh(e,t){let r=t.state.path.join(".");if(!iN.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(iN.isEmpty(Yi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Sl.join(Yi,Vse);case"logging.root":return Sl.join(Yi,IH);case"clustering.leafServer.streams.path":return Sl.join(Yi,"clustering","leaf");case"storage.path":let n=Sl.join(Yi,bH.LEGACY_DATABASES_DIR_NAME);return NH.existsSync(n)?n:Sl.join(Yi,bH.DATABASES_DIR_NAME);case"logging.rotation.path":return Sl.join(Yi,IH);case"operationsApi.network.domainSocket":return r==null?null:Sl.join(Yi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(nh,"setDefaultRoot");function rie(e){let t=ye.object({routes:bg});return $se.validateBySchema({routes:e},t)}o(rie,"routesValidator")});var Ot=M(tr=>{"use strict";var Os=(H(),v(Y)),br=ie(),fr=z(),{configValidator:nie,routesValidator:CH}=oN(),un=require("fs-extra"),LH=require("yaml"),ts=require("path"),sie=require("is-number"),DH=require("properties-reader"),iie=require("lodash"),{handleHDBError:oie}=_e(),{HTTP_STATUS_CODES:aie,HDB_ERROR_MSGS:rd}=rn(),{server:cie}=(Dr(),v(Xf)),{PACKAGE_ROOT:MH}=It(),{DATABASES_PARAM_CONFIG:sh,CONFIG_PARAMS:es,CONFIG_PARAM_MAP:di}=Os,lie="Unable to get config value because config is uninitialized",uie="Config successfully initialized",die="Error backing up config file",fie="Empty parameter sent to getConfigValue",vH=ts.join(MH,"config","yaml",Os.HDB_DEFAULT_CONFIG_FILE),mie=ts.join(MH,"config","yaml","defaultNatsConfig.yaml"),hie="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",PH={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"},Ig,kt,Ng;tr.createConfigFile=pie;tr.getDefaultConfig=Eie;tr.getConfigValue=xH;tr.initConfig=wg;tr.flattenConfig=nd;tr.updateConfigValue=BH;tr.updateConfigObject=gie;tr.getConfiguration=Rie;tr.setConfiguration=yie;tr.readConfigFile=uN;tr.getClusteringRoutes=Aie;tr.initOldConfig=FH;tr.getConfigFromFile=bie;tr.getConfigFilePath=Tl;tr.addConfig=Iie;tr.deleteConfigFromFile=Nie;tr.getConfigObj=wie;tr.resolvePath=aN;tr.getFlatConfigObj=Oie;function aN(e){if(e?.startsWith("~/"))return ts.join(br.getHomeDir(),e.slice(1));let t=ae();try{return ts.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(aN,"resolvePath");function pie(e,t=!1){let r=Ga(vH);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=LH.parseDocument(un.readFileSync(mie,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Ig=nd(r.toJSON());let n;for(let c in e){let l=di[c.toLowerCase()];if(l===es.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=cN(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(f){fr.error(f)}}}n&&UH(r,n),lN(r,t);let s=r.toJSON();kt=nd(s);let i=r.getIn(["rootPath"]),a=ts.join(i,Os.HDB_CONFIG_FILE);if(un.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);un.writeFileSync(a,String(r)),fr.trace(`Config file written to ${a}`)}o(pie,"createConfigFile");function UH(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!br.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(sh.TABLES))for(let i in n[s][sh.TABLES])for(let a in n[s][sh.TABLES][i]){let c=n[s][sh.TABLES][i][a],l=[es.DATABASES,s,sh.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=[es.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){fr.error("Error parsing schemas CLI/env config arguments",n)}}o(UH,"setSchemasConfig");function Eie(e){if(Ig===void 0){let r=Ga(vH);Ig=nd(r.toJSON())}let t=di[e.toLowerCase()];if(t!==void 0)return Ig[t.toLowerCase()]}o(Eie,"getDefaultConfig");function xH(e){if(e==null){fr.info(fie);return}if(kt===void 0){fr.trace(lie);return}let t=di[e.toLowerCase()];if(t!==void 0)return kt[t.toLowerCase()]}o(xH,"getConfigValue");function Tl(e=br.getPropsFilePath()){let t=br.getEnvCliRootPath();if(t)return aN(ts.join(t,Os.HDB_CONFIG_FILE));let r=DH(e);return aN(r.get(Os.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Tl,"getConfigFilePath");function wg(e=!1){if(kt===void 0||e){let t;if(!br.noBootFile()){t=br.getPropsFilePath();try{un.accessSync(t,un.constants.F_OK|un.constants.R_OK)}catch(i){throw fr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Tl(t),n;if(r.includes("config/settings.js"))try{FH(r);return}catch(i){if(i.code!==Os.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ga(r)}catch(i){if(i.code===Os.NODE_ERROR_CODES.ENOENT){fr.trace(`HarperDB config file not found at ${r}.
14
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw fr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}_ie(n,r),lN(n);let s=n.toJSON();if(cie.config=s,kt=nd(s),kt.logging_rotation_rotate)for(let i in PH)kt[i]&&fr.error(`Config ${PH[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);fr.trace(uie)}}o(wg,"initConfig");function _ie(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ts.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ts.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(fr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);un.writeFileSync(t,String(e))}}o(_ie,"checkForUpdatedConfig");function lN(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 rd.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 rd.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=nie(r,t);if(n.error)throw rd.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(lN,"validateConfig");function gie(e,t){kt===void 0&&(kt={});let r=di[e.toLowerCase()];if(r===void 0){fr.trace(`Unable to update config object because config param '${e}' does not exist`);return}kt[r.toLowerCase()]=t}o(gie,"updateConfigObject");function BH(e,t,r=void 0,n=!1,s=!1,i=!1){kt===void 0&&wg();let a=xH(di.hdb_root),c=ts.join(a,Os.HDB_CONFIG_FILE),l=Ga(c),u;if(r&&kt){let m=!1;for(let h in r)if(r[h]!=kt[h.toLowerCase()]){m=!0;break}if(!m){fr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===es.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=di[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let h=m.split("_"),p=cN(m,t);l.setIn([...h],p)}else for(let m in r){let h=di[m.toLowerCase()];if(h===es.HTTP_SECUREPORT&&r[m]===kt[es.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),h===es.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===kt[es.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),h===es.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("_"),_=Os.LEGACY_CONFIG_PARAMS[m.toUpperCase()];_&&_.startsWith("customFunctions")&&l.hasIn(_.split("_"))&&(h=_,p=_.split("_"));let g=cN(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){fr.error(y)}}}u&&UH(l,u),lN(l);let d=l.getIn(["rootPath"]),f=ts.join(d,Os.HDB_CONFIG_FILE);if(n===!0&&Sie(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);un.writeFileSync(f,String(l)),s&&(kt=nd(l.toJSON())),fr.trace(`Config parameter: ${e} updated with value: ${t}`)}o(BH,"updateConfigValue");function Sie(e,t){try{let r=ts.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Os.HDB_CONFIG_FILE}.bak`);un.copySync(e,r),fr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){fr.error(die),fr.error(r)}}o(Sie,"backupConfigFile");var Tie=["databases"];function nd(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}),Ng=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])&&!Tie.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;!es[l.toUpperCase()]&&di[l]&&(s[di[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(nd,"flattenConfig");function cN(e,t){if(e===es.CLUSTERING_NODENAME||e===es.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(sie(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||br.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 br.autoCast(t)}o(cN,"castConfigValue");function Rie(){let e=br.getPropsFilePath(),t=Tl(e);return Ga(t).toJSON()}o(Rie,"getConfiguration");async function yie(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return BH(void 0,void 0,s,!0),hie}catch(i){throw typeof i=="string"||i instanceof String?oie(i,i,aie.BAD_REQUEST,void 0,void 0,!0):i}}o(yie,"setConfiguration");function uN(){let e=br.getPropsFilePath();try{un.accessSync(e,un.constants.F_OK|un.constants.R_OK)}catch(n){if(!br.noBootFile())throw fr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Tl(e);return Ga(t).toJSON()}o(uN,"readConfigFile");function Ga(e){return LH.parseDocument(un.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Ga,"parseYamlDoc");function Aie(){let e=uN(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=br.isEmptyOrZeroLength(t)?[]:t;let r=CH(t);if(r)throw rd.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=br.isEmptyOrZeroLength(n)?[]:n;let s=CH(n);if(s)throw rd.CONFIG_VALIDATION(s.message);if(!br.isEmptyOrZeroLength(n)&&!br.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!br.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw rd.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(Aie,"getClusteringRoutes");function FH(e){let t=DH(e);kt={};for(let r in di){let n=t.get(r.toUpperCase());if(br.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=di[r].toLowerCase();s===es.LOGGING_ROOT?kt[s]=ts.dirname(n):kt[s]=n}return kt}o(FH,"initOldConfig");function bie(e){let t=uN();return iie.get(t,e.replaceAll("_","."))}o(bie,"getConfigFromFile");async function Iie(e,t){let r=Ga(Tl());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 un.writeFile(Tl(),String(r))}o(Iie,"addConfig");function Nie(e){let t=Tl(br.getPropsFilePath()),r=Ga(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ts.join(n,Os.HDB_CONFIG_FILE);un.writeFileSync(s,String(r))}o(Nie,"deleteConfigFromFile");function wie(){return Ng||(wg(),Ng)}o(wie,"getConfigObj");function Oie(){return kt||wg(),kt}o(Oie,"getFlatConfigObj")});var rs=M((kDe,Br)=>{"use strict";var qH="username is required",GH="nothing to update, must supply active, role or password to update",$H="password cannot be an empty string",VH="If role is specified, it cannot be empty.",KH="active must be true or false";Br.exports.addUser=Bie;Br.exports.alterUser=Fie;Br.exports.dropUser=kie;Br.exports.getSuperUser=Kie;Br.exports.userInfo=qie;Br.exports.listUsers=Cg;Br.exports.listUsersExternal=Gie;Br.exports.setUsersWithRolesCache=Rl;Br.exports.findAndValidateUser=SN;Br.exports.getClusterUser=Yie;Br.exports.getUsersWithRolesCache=Vie;Br.exports.USERNAME_REQUIRED=qH;Br.exports.ALTERUSER_NOTHING_TO_UPDATE=GH;Br.exports.EMPTY_PASSWORD=$H;Br.exports.EMPTY_ROLE=VH;Br.exports.ACTIVE_BOOLEAN=KH;var YH=an(),Cie=ka(),ih=(Ag(),v(yg)),WH=TH(),oh=on(),pN=Po(),Wi=ie(),zH=require("validate.js"),EN=z(),{promisify:Pie}=require("util"),_N=Ki(),fN=(H(),v(Y)),HH=ht(),Lie=Ot(),Die=ae(),Mie=wo(),{hdbErrors:vie,ClientError:fi}=_e(),{HTTP_STATUS_CODES:Uo,AUTHENTICATION_ERROR_MSGS:dN,HDB_ERROR_MSGS:sd}=vie,{UserEventMsg:gN}=ai(),mN=require("lodash"),{server:Og}=(Dr(),v(Xf)),Uie=z();Og.getUser=(e,t)=>SN(e,t,t!=null);Og.authenticateUser=(e,t)=>SN(e,t);var jH={username:!0,active:!0,role:!0,password:!0},kH=new Map,xie=Pie(Cie.delete),hN=Die.get(fN.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??ih.HASH_FUNCTION.SHA256,zi;async function Bie(e){let t=zH.cleanAttributes(e,jH),r=WH.addUserValidation(t);if(r)throw new fi(r.message);let n=await oh.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 fi(sd.ROLE_NAME_NOT_FOUND(t.role),Uo.NOT_FOUND);if(n.length>1)throw new fi(sd.DUP_ROLES_FOUND(t.role),Uo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=_N.encrypt(t.password)),t.password=await ih.hash(t.password,hN),t.hash_function=hN,t.role=n[0].id;let s=await YH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(EN.debug(s),await Rl(),s.skipped_hashes.length===1)throw new fi(sd.USER_ALREADY_EXISTS(t.username),Uo.CONFLICT);return pN.signalUserChange(new gN(process.pid)),`${t.username} successfully added`}o(Bie,"addUser");async function Fie(e){let t=zH.cleanAttributes(e,jH);if(Wi.isEmptyOrZeroLength(t.username))throw new Error(qH);if(Wi.isEmptyOrZeroLength(t.password)&&Wi.isEmptyOrZeroLength(t.role)&&Wi.isEmptyOrZeroLength(t.active))throw new Error(GH);if(!Wi.isEmpty(t.password)&&Wi.isEmptyOrZeroLength(t.password.trim()))throw new Error($H);if(!Wi.isEmpty(t.active)&&!Wi.isBoolean(t.active))throw new Error(KH);if(!Wi.isEmpty(t.password)&&!Wi.isEmptyOrZeroLength(t.password.trim())&&(Hie(t.username)&&(t.hash=_N.encrypt(t.password)),t.password=await ih.hash(t.password,hN)),t.role==="")throw new Error(VH);if(t.role){let n=await oh.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new fi(sd.ALTER_USER_ROLE_NOT_FOUND(t.role),Uo.NOT_FOUND);if(n.length>1)throw new fi(sd.DUP_ROLES_FOUND(t.role),Uo.CONFLICT);t.role=n[0].id}let r=await YH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Rl(),pN.signalUserChange(new gN(process.pid)),r}o(Fie,"alterUser");function Hie(e){let t=!1,r=zi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(Hie,"isClusterUser");async function kie(e){let t=WH.dropUserValidation(e);if(t)throw new fi(t.message);if(zi.get(e.username)===void 0)throw new fi(sd.USER_NOT_EXIST(e.username),Uo.NOT_FOUND);let r=await xie({table:"hdb_user",schema:"system",hash_values:[e.username]});return EN.debug(r),await Rl(),pN.signalUserChange(new gN(process.pid)),`${e.username} successfully deleted`}o(kie,"dropUser");async function qie(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=mN.cloneDeep(e.hdb_user);let r=await oh.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(qie,"userInfo");async function Gie(){let e=await Cg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Gie,"listUsersExternal");async function Cg(){let e=await oh.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=mN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await oh.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=mN.cloneDeep(s),s.role=t[s.role],$ie(s.role),n.set(s.username,s);return n}o(Cg,"listUsers");function $ie(e){if(!e){EN.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(Mie)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o($ie,"appendSystemTablesToRole");async function Rl(e=void 0){e?zi=e:zi=await Cg()}o(Rl,"setUsersWithRolesCache");async function Vie(){return zi||await Rl(),zi}o(Vie,"getUsersWithRolesCache");async function SN(e,t,r=!0){zi||await Rl();let n=zi.get(e);if(!n){if(!r)return{username:e};throw new fi(dN.GENERIC_AUTH_FAIL,Uo.UNAUTHORIZED)}if(n&&!n.active)throw new fi(dN.USER_INACTIVE,Uo.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(kH.get(t)===n.password)return s;{let i=ih.validate(n.password,t,n.hash_function||ih.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)kH.set(t,n.password);else throw new fi(dN.GENERIC_AUTH_FAIL,Uo.UNAUTHORIZED)}}return s}o(SN,"findAndValidateUser");async function Kie(){zi||await Rl();for(let[,e]of zi)if(e.role.role==="super_user")return e}o(Kie,"getSuperUser");async function Yie(){let e=await Cg(),t=Lie.getConfigFromFile(fN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==fN.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=_N.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+HH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+HH.SERVER_SUFFIX.ADMIN,r}o(Yie,"getClusterUser");var QH=[];Og.invalidateUser=function(e){for(let t of QH)try{t(e)}catch(r){Uie.error("Error invalidating user",r)}};Og.onInvalidatedUser=function(e){QH.push(e)}});var ch=M((VDe,ek)=>{"use strict";var yl=z(),ns=(H(),v(Y)),Wie=R0(),GDe=ws(),$De=vo(),zie=rs(),{validateEvent:JH}=ai(),ah=Xn(),jie=require("process"),{resetDatabases:Qie}=(Me(),v(gt)),Jie={[ns.ITC_EVENT_TYPES.SCHEMA]:Xie,[ns.ITC_EVENT_TYPES.USER]:ZH};async function Xie(e){let t=JH(e);if(t){yl.error(t);return}yl.trace("ITC schemaHandler received schema event:",e),await Wie(e.message),await Zie(e.message)}o(Xie,"schemaHandler");async function Zie(e){try{ah.resetReadTxn(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ah.resetReadTxn(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ah.resetReadTxn(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Qie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){yl.error(t)}}o(Zie,"syncSchemaMetadata");var XH=[];async function ZH(e){try{try{ah.resetReadTxn(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ah.resetReadTxn(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){yl.warn(r)}let t=JH(e);if(t){yl.error(t);return}yl.trace(`ITC userHandler ${ns.HDB_ITC_CLIENT_PREFIX}${jie.pid} received user event:`,e),await zie.setUsersWithRolesCache();for(let r of XH)r()}catch(t){yl.error(t)}}o(ZH,"userHandler");ZH.addListener=function(e){XH.push(e)};ek.exports=Jie});var ai=M((QDe,rk)=>{"use strict";var YDe=z(),TN=ie(),eoe=(H(),v(Y)),{ITC_ERRORS:lh}=rn(),{parentPort:WDe,threadId:toe,isMainThread:roe,workerData:zDe}=require("worker_threads"),{onMessageFromWorkers:noe,broadcast:jDe,broadcastWithAcknowledgement:soe}=ze();rk.exports={sendItcEvent:ioe,validateEvent:tk,SchemaEventMsg:ooe,UserEventMsg:aoe};var Pg;noe(async(e,t)=>{Pg=Pg||ch(),tk(e),Pg[e.type]&&await Pg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function ioe(e){return!roe&&e.message&&(e.message.originator=toe),soe(e)}o(ioe,"sendItcEvent");function tk(e){if(typeof e!="object")return lh.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||TN.isEmpty(e.type))return lh.MISSING_TYPE;if(!e.hasOwnProperty("message")||TN.isEmpty(e.message))return lh.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||TN.isEmpty(e.message.originator))return lh.MISSING_ORIGIN;if(eoe.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return lh.INVALID_EVENT(e.type)}o(tk,"validateEvent");function ooe(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(ooe,"SchemaEventMsg");function aoe(e){this.originator=e}o(aoe,"UserEventMsg")});var Po=M((ZDe,ok)=>{"use strict";var nk=(H(),v(Y)),XDe=ie(),Lg=z(),sk=n0(),id,{sendItcEvent:ik}=ai();function coe(e){try{Lg.info("signalSchemaChange called with message:",e),id=id||ch();let t=new sk(nk.ITC_EVENT_TYPES.SCHEMA,e);return id.schema(t),ik(t)}catch(t){Lg.error(t)}}o(coe,"signalSchemaChange");function loe(e){try{Lg.trace("signalUserChange called with message:",e),id=id||ch();let t=new sk(nk.ITC_EVENT_TYPES.USER,e);return id.user(t),ik(t)}catch(t){Lg.error(t)}}o(loe,"signalUserChange");ok.exports={signalSchemaChange:coe,signalUserChange:loe}});function Dg(){return RN||(RN=je({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),RN}function doe(e){return e=e.replace(uoe,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 foe(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 AN(e){let t=ak.default.createHash("shake128",{outputLength:4}),r;return(0,ck.isIPv6)(e)?r=doe(e):r=e.toLowerCase(),foe(Uint8Array.from(t.update(r).digest()))}var ak,ck,yN,RN,uoe,bN=le(()=>{Me();ak=w(require("crypto")),ck=require("node:net"),yN=new Map;o(Dg,"getAnalyticsHostnameTable");uoe=/(\d{1,3}\.){3}\d{1,3}$/;o(doe,"normalizeIPv6");o(foe,"nodeHashToNumber");o(AN,"stableNodeId")});var xo,IN=le(()=>{xo={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 Bg={};Oe(Bg,{addAnalyticsListener:()=>fh,calculateCPUUtilization:()=>Nk,diffResourceUsage:()=>wk,recordAction:()=>at,recordActionBinary:()=>Wr,recordHostname:()=>ON,setAnalyticsEnabled:()=>moe});function moe(e){Tk=e}function hoe(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 poe(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},Ug.set(e,a)}function at(e,t,r,n,s){if(!Tk)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=Ug.get(i);a?hoe(e,a):poe(i,e,t,r,n,s),vg||Eoe()}function Wr(e,t,r,n,s){at(!!e,t,r,n,s)}function fh(e){Ak.push(e)}function Eoe(){vg=performance.now(),setTimeout(async()=>{let e=performance.now()-vg;vg=0;let t=[],r={time:Date.now(),period:e,threadId:Al.threadId,metrics:t};for(let[s,i]of Ug){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 bk){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 Ok()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Al.threadId,byThread:!0,...n});for(let s of Ak)s(t);Ug=new Map,Al.parentPort?Al.parentPort.postMessage({type:yk,report:r}):Lk({report:r})},Rk).unref()}async function ON(){let e=De.hostname;Yr.trace?.("recordHostname server.hostname:",e);let t=AN(e);Yr.trace?.("recordHostname nodeId:",t);let r=Dg();if(!await r.get(t)){let s={id:t,hostname:e};Yr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Ik(e){let t=yN.get(e);return t?(Yr.trace?.("storeMetric cached nodeId:",t),t):(t=AN(e),Yr.trace?.("storeMetric new nodeId:",t),yN.set(e,t),t)}function od(e,t){let r=Ik(De.hostname),n={id:[(0,wN.getNextMonotonicTime)(),r],...t};Yr.trace?.(`storing metric ${JSON.stringify(n)}`),e.put(n.id,n)}function Nk(e,t){let r=e.userCPUTime+e.systemCPUTime;return Yr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function wk(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 _oe(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:xo.TABLE_SIZE,database:t,table:s,size:c};Yr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),od(e,l),n+=c}return n}function lk(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=Sk.statSync(s.primaryStore.env.path).size,c=_oe(e,r,n),l=a-c,u={metric:xo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};od(e,u),Yr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Yr.warn?.("Error getting DB size metrics",s)}}function uk(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:xo.STORAGE_VOLUME,database:r,...i};od(e,a),Yr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Yr.warn?.("Error getting DB volume metrics",s)}}async function goe(e,t=6e4){let r=CN(),n=Ck(),s=new Promise(N=>{let C=performance.now();setImmediate(()=>{let q=performance.now();q-C>5e3&&Yr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(q-C)+"ms"),C=performance.now()}),n.primaryStore.prefetch([1],()=>{let q=performance.now();q-C>5e3&&Yr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(q-C)+"ms"),N(q-C)})}),i,a=Ik(De.hostname);for(let N of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(!(!N.value?.time||N.value?.id[1]!==a)){i=N.value.time;break}if(Date.now()-t<i)return;let c,l=new Map,u=new Map,d=[],f;for(let{key:N,value:C}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!C)continue;if(c){if(N>c+t)break}else c=N;f=N;let{metrics:q,threadId:j}=C;for(let F of q||[]){let{path:$,method:J,type:K,metric:te,count:fe,total:oe,distribution:ge,threads:Pe,...Te}=F;fe||(fe=1);let rt=te+($?"-"+$:"");J!==void 0&&(rt+="-"+J),K!==void 0&&(rt+="-"+K);let xe=l.get(rt);if(xe){if(xe.threads){let it=xe.threads[j];if(it)xe=it;else{xe.threads[j]={...Te};continue}}xe.count||(xe.count=1);let tn=xe.count;for(let it in Te){let Et=Te[it];typeof Et=="number"&&(xe[it]=(xe[it]*tn+Et*fe)/(tn+fe))}xe.count+=fe,oe>=0&&(xe.total+=oe,xe.ratio=xe.total/xe.count)}else xe={period:t,...F},delete xe.distribution,l.set(rt,xe),xe.byThread&&(xe.threads=[],xe.threads[j]={...Te},d.push(xe));if(ge){ge=ge.map(it=>typeof it=="number"?{value:it,count:1}:it);let tn=u.get(rt);tn?tn.push(...ge):u.set(rt,ge)}}await Ok()}for(let N of d){let{path:C,method:q,type:j,metric:F,count:$,total:J,distribution:K,threads:te,...fe}=N;te=te.filter(oe=>oe);for(let oe in fe){if(typeof N[oe]!="number")continue;let ge=0;for(let Pe of te){let Te=Pe[oe];typeof Te=="number"&&(ge+=Te)}N[oe]=ge}N.count=te.length,delete N.threads,delete N.byThread}for(let[N,C]of u){let q=l.get(N);C.sort((it,Et)=>it.value>Et.value?1:-1);let j=q.count-1,F=[],$=0,J=0,K;for(let it of bk){let Et=j*it;for(;$<Et;)K=C[J++],$+=K.count,J===1&&$--;let Dc=C[J>1?J-2:0];K||(K=C[0]),F.push(K.value-(K.value-Dc.value)*($-Et)/K.count)}let[te,fe,oe,ge,Pe,Te,rt,xe,tn]=F;Object.assign(q,{p1:te,p10:fe,p25:oe,median:ge,p75:Pe,p90:Te,p95:rt,p99:xe,p999:tn})}let m;for(let[,N]of l)N.time=f,od(n,N),m=!0;let h=Date.now(),{idle:p,active:_}=performance.eventLoopUtilization();if(m||_*10>p){let N={metric:xo.MAIN_THREAD_UTILIZATION,idle:p-dk,active:_-fk,taskQueueLatency:await s,time:h,...process.memoryUsage()};od(n,N)}dk=p,fk=_;let g=process.resourceUsage();g.time=h,g.userCPUTime=g.userCPUTime/1e3,g.systemCPUTime=g.systemCPUTime/1e3,Yr.trace?.(`process.resourceUsage: ${JSON.stringify(g)}`);let y=wk(Mg,g);Yr.trace?.(`diffed resourceUsage: ${JSON.stringify(y)}`),y.time=h,y.period=Mg.time?h-Mg.time:t,y.cpuUtilization=Nk(y,y.period);let T={metric:xo.RESOURCE_USAGE,...y};od(n,T),Mg=g;let R=ot();lk(n,R),lk(n,{system:R.system}),uk(n,R),uk(n,{system:R.system})}async function mk(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function CN(){return hk||(hk=je({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Ck(){return pk||(pk=je({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Roe(){Pk=!0;let e=(0,dh.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await goe(Rk,e),await mk(CN(),Soe),await mk(Ck(),Toe)},Math.min(e/2,2147483647)).unref()}function Lk(e,t){let r=e.report;r.threadId=t?.threadId||Al.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Ek+=n.mean*n.count);r.totalBytesProcessed=Ek,t&&(r.metrics.push({metric:xo.UTILIZATION,...t.performance.eventLoopUtilization(_k.get(t))}),_k.set(t,t.performance.eventLoopUtilization())),r.id=(0,wN.getNextMonotonicTime)(),CN().primaryStore.put(r.id,r),Pk||Roe(),yoe&&(Dk=boe(r))}async function boe(e){if(await Dk,!$a){let r=(0,uh.dirname)((0,xg.getLogFilePath)());try{$a=await(0,NN.open)((0,uh.join)(r,"analytics.log"),"r+")}catch{$a=await(0,NN.open)((0,uh.join)(r,"analytics.log"),"w+")}}let t=(await $a.stat()).size;if(t>Aoe){let r=Buffer.alloc(t);await $a.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await $a.write(r,{position:0}),await $a.truncate(r.length),t=r.length}await $a.write(JSON.stringify(e)+`
15
+ `,t)}var Al,gk,xg,uh,NN,wN,dh,Sk,Yr,Ug,Tk,vg,Rk,yk,Ak,bk,dk,fk,Mg,Ok,Soe,Toe,hk,pk,Pk,Ek,_k,yoe,Dk,$a,Aoe,ji=le(()=>{Al=require("worker_threads"),gk=w(ze());Me();xg=w(z()),uh=require("path"),NN=require("fs/promises"),wN=w(In()),dh=w(ae());H();Dr();Sk=w(require("node:fs"));bN();IN();Yr=(0,xg.forComponent)("analytics").conditional;(0,dh.initSync)();Ug=new Map,Tk=(0,dh.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;o(moe,"setAnalyticsEnabled");o(hoe,"recordExistingAction");o(poe,"recordNewAction");o(at,"recordAction");De.recordAnalytics=at;o(Wr,"recordActionBinary");vg=0,Rk=1e3,yk="analytics-report",Ak=[];o(fh,"addAnalyticsListener");bk=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(Eoe,"sendAnalytics");o(ON,"recordHostname");o(Ik,"getHostNodeId");o(od,"storeMetric");o(Nk,"calculateCPUUtilization");o(wk,"diffResourceUsage");o(_oe,"storeTableSizeMetrics");o(lk,"storeDBSizeMetrics");o(uk,"storeVolumeMetrics");o(goe,"aggregation");dk=0,fk=0,Mg={userCPUTime:0,systemCPUTime:0},Ok=o(()=>new Promise(setImmediate),"rest");o(mk,"cleanup");Soe=36e5,Toe=31536e6;o(CN,"getRawAnalyticsTable");o(Ck,"getAnalyticsTable");(0,gk.setChildListenerByType)(yk,Lk);o(Roe,"startScheduledTasks");Ek=0,_k=new Map,yoe=!1;o(Lk,"recordAnalytics");Aoe=1e6;o(boe,"logAnalytics")});function mh(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 Mk(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Cs(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 Cs,hh=le(()=>{Cs=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(mh,"appendHeader");o(Mk,"mergeHeaders")});function Fg(e,t,r=Noe){let n;return function(...i){return n?n.length*PN>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();PN=(PN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var xk,Ioe,Noe,vk,woe,LN,Uk,PN,DN=le(()=>{xk=w(ri()),Ioe=3e3,Noe=2e4,vk=0,woe=3e4,LN=3e3,Uk=performance.now()+LN,PN=0;o(Fg,"throttle");setInterval(()=>{let e=performance.now();e-Uk-LN>Ioe&&vk+woe<e&&(xk.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),vk=e),Uk=e},LN).unref()});var Yk={};Oe(Yk,{EVICTED:()=>tl,INVALIDATED:()=>On,coerceType:()=>kg,makeTable:()=>Gg});function Gg(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=ab(i,n,l),N,C,q={},j=Promise.resolve(),F,$,J;for(let V of T)(V.assignCreatedTime||V.name==="__createdtime__")&&(F=V),(V.assignUpdatedTime||V.name==="__updatedtime__")&&($=V),V.expiresAt&&(J=V),V.isPrimaryKey&&(q=V);let K,te=[],fe=[],oe=1,ge=2,Pe={},Te={},rt=864e5,xe=0,tn,it,Et,Dc=!1,Mc,Vt,kf,qf=Il.get(U.REPLICATION_DATABASES);if(Array.isArray(qf)){for(let V of qf)if(V.name===c&&V.replicateTo>=0){kf=V.replicateTo;break}}let ME=i.getRange({start:!1,end:!1}).constructor,vE=10,Qy=6;g&&Kf(),Sm(i.env.path,V=>{if(C)return ya(V)});class Gf extends dl{static{o(this,"Updatable")}getUpdatedTime(){return La.get(this.getRecord())?.version}getExpiresAt(){return La.get(this.getRecord())?.expiresAt}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.set(E,new zm(S));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(E,S){return this.addTo(E,-S)}}class Le extends Ur{#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=F;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(L=>!L.intermediateSource)){if(this.sources.some(L=>L.name===E.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(E)}C=C||E.get&&(!E.get.reliesOnPrototype||E.prototype.get),N=N||E.load;let A=o(L=>{let D=this.sources;if(D=D.filter(k=>k.intermediateSource&&k[L]&&(!k[L].reliesOnPrototype||k.prototype[L])),D.length>0)if(D.length===1){let k=D[0];return(O,x,W)=>{if(O?.source!==k)return k[L](x,W,O)}}else return(k,O,x)=>{let W=[];for(let se of D){if(k?.source===se)break;W.push(se[L](O,x,k))}return Promise.all(W)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1];b.intermediateSource&&(b={});let I=o(L=>{if(b[L]&&(!b[L].reliesOnPrototype||b.prototype[L]))return(D,k,O)=>{if(!D?.source)return b[L](k,O,D)}},"getApplyToCanonicalSource");Pe={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},Te={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish"),invalidate:A("invalidate")};let P=b.shouldRevalidateEvents;return(async()=>{let L=!1,D,k=o(async(O,x)=>{let W=O.value,se=O.table?ke[c][O.table]:Le;if(c===Qf&&(O.table===Ru.ROLE_TABLE_NAME||O.table===Ru.USER_TABLE_NAME)&&(L=!0),O.id===void 0&&(O.id=W[se.primaryKey],O.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(O));O.source=E;let ne={residencyId:xc(O.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:O.nodeId,async:!0},B=O.id,ue=await se.getResource(B,x,ne);switch(O.finished&&await O.finished,O.type){case"put":return P?ue._writeInvalidate(B,W,ne):ue._writeUpdate(B,W,!0,ne);case"patch":return P?ue._writeInvalidate(B,W,ne):ue._writeUpdate(B,W,!1,ne);case"delete":return ue._writeDelete(B,ne);case"publish":case"message":return ue._writePublish(B,W,ne);case"invalidate":return ue._writeInvalidate(B,W,ne);case"relocate":return ue._writeRelocate(B,ne);default:ve.default.error?.("Unknown operation",O.type,O.id)}},"writeUpdate");try{let O=E.subscribe;O&&y==null&&(y=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},W=E.subscribeOnThisThread?E.subscribeOnThisThread((0,bl.getWorkerIndex)(),x):(0,bl.getWorkerIndex)()===0,se=O&&W&&await E.subscribe?.(x);if(se){let ne;for await(let B of se)try{if(!(B.type==="transaction"?B.writes[0]:B)){ve.default.error?.("Bad subscription event",B);continue}if(B.source=E,B.type==="end_txn"){if(ne?.resolve(),B.localTime&&D!==B.localTime){if(B.remoteNodeIds?.length>0){let Se=[Symbol.for("seq"),B.remoteNodeIds[0]],ee=d.get(Se),Q=ee?.nodes;Q||(Q=[]);for(let Re of B.remoteNodeIds.slice(1)){let de=Q.find(We=>We.id===Re);Q=Q.filter(We=>We.id!==Re||We===de),de||(de={id:Re,seqId:0},Q.push(de)),de.seqId=Math.max(ee?.seqId??1,B.localTime),Re===ne?.nodeId&&(de.lastTxnTime=B.timestamp)}let he=Math.max(ee?.seqId??1,B.localTime);ve.default.trace?.("Received txn",c,he,new Date(he),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(Se,{seqId:he,nodes:Q})}D=B.localTime}B.onCommit&&ne?.committed.then(B.onCommit);continue}if(ne)if(B.beginTxn)ne.resolve();else{ne.write_promises.push(k(B,ne));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let me=Ft(B,()=>{if(B.type==="transaction"){let Se=[];for(let ee of B.writes)try{Se.push(k(ee,B))}catch(Q){throw Q.message+=" writing "+JSON.stringify(ee)+" of event "+JSON.stringify(B),Q}return Promise.all(Se)}else if(B.type==="define_schema"){let Se=this.attributes.slice(0),ee=!1;for(let Q of B.attributes)Se.find(he=>he.name===Q.name)||(Se.push(Q),ee=!0);ee&&(je({table:s,database:c,attributes:Se,origin:"cluster"}),Eh.signalSchemaChange(new _h.SchemaEventMsg(process.pid,G.CREATE_TABLE,c,s)))}else return B.beginTxn?(ne=B,ne.write_promises=[k(B,B)],new Promise(Se=>{ne.resolve=()=>Se(Promise.all(ne.write_promises))})):k(B,B)});ne&&(ne.committed=me),L&&me&&!me?.waitingForUserChange&&(me.then(()=>Eh.signalUserChange(new _h.UserEventMsg(process.pid))),me.waitingForUserChange=!0),B.onCommit&&(me?me.then(B.onCommit):B.onCommit())}catch(ue){ve.default.error?.("error in subscription handler",ue)}}}catch(O){ve.default.error?.(O)}})(),this}static get isCaching(){return C}static get shouldRevalidateEvents(){return this.prototype.get!==Le.prototype.get}static getResource(E,S,A){let b=super.getResource(E,S,A);if(this.loadAsInstance===!1&&(S._freezeRecords=!0),E!=null&&this.loadAsInstance!==!1){Pr(E);try{if(b.getRecord?.())return b;if(typeof E=="object"&&E&&!Array.isArray(E))throw new Error(`Invalid id ${JSON.stringify(E)}`);let I=!A?.async||i.cache?.get?.(E),P=Lr(S),L=P.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return ga(E,S,{transaction:L,ensureLoaded:A?.ensureLoaded},I,D=>{if(D?Le._updateResource(b,D):b.#e=null,S.onlyIfCached){if(!b.doesExist())throw new ct.ServerError("Entry is not cached",504)}else if(A?.ensureLoaded){let k=vc(E,D,S,b);if(k)return P?.disregardReadTxn(),b.#i=!0,S.loadedFromSource=!0,Ps(k,O=>(Le._updateResource(b,O),b))}return b})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(E)),I}}return b}static _updateResource(E,S){E.#n=S,E.#e=S?.value??null,E.#r=S?.version}ensureLoaded(){let E=vc(this.getId(),this.#n,this.getContext());if(E)return this.#i=!0,this.getContext().loadedFromSource=!0,Ps(E,S=>{this.#n=S,this.#e=S.value,this.#r=S.version})}static getNewId(){let E=q?.type;if(E==="String"||E==="ID")return super.getNewId();if(!Vt){let I=i.getEntry(Symbol.for("id_allocation")),P=I?.value,L;if(P&&P.nodeName===server.hostname&&(!Foe(i)||P.pid===process.pid)){let D=P.start,k=P.end;L=D;for(let O of i.getKeys({start:k,end:D,limit:1,reverse:!0}))L=O}else P=b(I?.version??null),L=P.start;Vt=new BigInt64Array([BigInt(L)+1n]),Vt=new BigInt64Array(i.getUserSharedBuffer("id",Vt.buffer)),Vt.maxSafeId=P.end}let S=Number(Atomics.add(Vt,0,1n)),A=E==="Int"?512:1048576;if(S+A>=Vt.maxSafeId){let I=o(P=>{Vt.maxSafeId=S+(E==="Int"?1023:4194303);let L=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=P?void 0:i.useReadTransaction(),k=Number(Vt[0]);for(let W of i.getKeys({start:k+1,end:L,limit:1,transaction:D}))L=W;D?.done();let{value:O,version:x}=i.getEntry(Symbol.for("id_allocation"));if(Vt.maxSafeId<L){if(O.end>Vt.maxSafeId-100)return;ve.default.info?.("New id allocation",S,Vt.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:O.start,end:Vt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{ve.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Vt.maxSafeId}, but id of ${L} detected`);let W=b(x);W.alreadyUpdated||Atomics.store(Vt,0,BigInt(W.start+1)),Vt.maxSafeId=W.end}},"updateEnd");S+A===Vt.maxSafeId?setImmediate(I):S+100>=Vt.maxSafeId&&(ve.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(()=>I(!0)))}return S;function b(I){let P=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=P/4,D,k,O=!1,x,W;do{x=Math.floor(Math.random()*P),W={start:x,end:x+(E==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},D=0;for(let se of i.getKeys({start:x,limit:1,reverse:!0}))D=se;k=P;for(let se of i.getKeys({start:x+1,end:P,limit:1}))k=se;L*=.875,L<1e3&&!O&&(O=!0,ve.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":""}`,x,D,k,L))}while(!(L<k-x&&(L<x-D||D===0)));return i.transactionSync(()=>{let se=i.getEntry(Symbol.for("id_allocation"));return(se?.version??null)==I?(ve.default.info?.("Allocated new id range",W),i.put(Symbol.for("id_allocation"),W,Date.now()),W):(ve.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...se.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,rt=E.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");rt=rt||(p+_)/4,ya()}static getResidencyRecord(E){return d.get([Symbol.for("residency_by_id"),E])}static setResidency(E){Le.getResidency=E&&((S,A)=>{try{return E(S,A)}catch(b){throw b.message+=` in residency function for table ${s}`,b}})}static setResidencyById(E){Le.getResidencyById=E&&(S=>{try{return E(S)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static getResidency(E,S){if(Le.getResidencyById)return Le.getResidencyById(E[t]);let A=kf;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 b=[server.hostname];if(S.previousResidency)b.push(...S.previousResidency.slice(0,A));else{let I=server.nodes.map(D=>D.name),P=Math.floor(I.length*Math.random());b.push(...I.slice(P,P+A));let L=P+A-I.length;L>0&&b.push(...I.slice(0,L))}return b}}static enableAuditing(E=!0){g=E,E&&Kf(),Le.audit=E}static coerceId(E){return E===""?null:kg(E,q)}static async dropTable(){delete ke[c][s];for(let E of i.getRange({versions:!0,snapshot:!1,lazy:!0}))E.metadataFlags&$r&&E.value&&Ca(E.value);if(c===a){for(let E of T)d.remove(Le.tableName+"/"+E.name),r[E.name]?.drop();d.remove(Le.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),vN.default.unlinkSync(i.env.path);Eh.signalSchemaChange(new _h.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(Vf(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?Le.getRecordCount().then(b=>(A.recordCount=b.recordCount,A.estimatedRecordRange=b.estimatedRange,A)):A}if(E!==void 0&&S.loadAsInstance===!1){let A=this.getContext(),b=Lr(A),I=b.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let P=Rr(E);Pr(P);let L=!0;return E.checkPermission&&(L=this.allowRead(A.user,E)),Ps(Ps(L,D=>{if(!D)throw new ct.AccessViolation(A.user);let k=!0;return ga(P,A,{transaction:I,ensureLoaded:k},!1,O=>{if(A.onlyIfCached){if(!O?.value)throw new ct.ServerError("Entry is not cached",504)}else if(k){let x=vc(P,O,A);if(x)return b?.disregardReadTxn(),A.loadedFromSource=!0,x.then(W=>W?.value)}return O?.value})}),D=>{let k=E?.select;return k&&D!=null?Hu(k,this.constructor)(D):D})}if(E?.property)return this.getProperty(E.property);if(this.doesExist()||E?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(E,S){let A=Sa(E,S);if(A?.read){if(A.isSuperUser)return!0;let b=A.attribute_permissions,I=S?.select;if(b?.length>0||Dc&&I){if(S||(S={}),I){let P=Array.isArray(I)?I:[I],L=b?.length>0&&MN(b,"read");S.select=P.map(D=>{let k=D.name||D;if(!L||L[k]){let O=Et[k]?.definition?.tableClass;if(O){if(D.name||(D={name:D}),!D.checkPermission&&S.checkPermission&&(D.checkPermission=S.checkPermission),!O.prototype.allowRead.call(null,E,D))return!1;if(!D.select)return D.name}return D}}).filter(Boolean)}else S.select=b.filter(P=>P.read&&!Et[P.attribute_name]).map(P=>P.attribute_name);return S}else return!0}}allowUpdate(E,S,A){let b=Sa(E,A);if(b?.update){let I=b.attribute_permissions;if(I?.length>0){let P=MN(I,"update");for(let L in S)if(!P[L])return!1;for(let L of I){let D=L.attribute_name;!L.update&&!(D in S)&&(S[D]=this.getProperty(D))}}return Ra(this.getContext())}}allowCreate(E,S,A){if(this.isCollection){let b=Sa(E,A);if(b?.insert){let I=b.attribute_permissions;if(I?.length>0){let P=MN(I,"insert");for(let L in S)if(!P[L])return!1;return Ra(this.getContext())}else return Ra(this.getContext())}}else return this.allowUpdate(E,{})}allowDelete(E,S){return Sa(E,S)?.delete&&Ra(this.getContext())}update(E,S){let A,b=typeof S=="boolean"||S===void 0&&(E==null||typeof E=="object"&&!(E instanceof URLSearchParams)),I=!1;b?(I=S,S=E,A=this.getId()):A=Rr(E);let P=this.getContext();if(!Lr(P))throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;if(typeof S=="object"&&S)if(I)Object.isFrozen(S)&&(S={...S}),this.#e={},this.#t=S;else if(b){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(P.user,S,E)),Ps(D,k=>{if(!k)throw new ct.AccessViolation(P.user);return Ps(i.get(Rr(E)),O=>{let x=new Gf(O);return x._setChanges(S),this._writeUpdate(A,x.getChanges(),!1),x})})}return this._writeUpdate(A,this.#t,I),this}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.#s===Fk?this.set(E,(+this.getProperty(E)||0)+S):(this.#s||this.update(),this.set(E,new zm(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)),Ps(S,b=>{if(!b)throw new ct.AccessViolation(A.user);this._writeInvalidate(E?Rr(E):this.getId())})}_writeInvalidate(E,S,A){let b=this.getContext();Pr(E),Lr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Pe.invalidate?.bind(this,b,E),beforeIntermediate:Aa(S,Te.invalidate?.bind(this,b,E)),commit:o((P,L)=>{if(!(Ta(P,L,A?.nodeId)<=0)){S??=null;for(let D in r)S||(S={}),S[D]===void 0&&(S[D]=this.getProperty(D));ve.default.trace?.(`Invalidating entry in ${s} id: ${E}, timestamp: ${new Date(P).toISOString()}`),R(E,S,L,P,On,g,{user:b?.user,residencyId:A?.residencyId,nodeId:A?.nodeId},"invalidate")}},"commit")})}_writeRelocate(E,S){let A=this.getContext();Pr(E),Lr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Pe.relocate?.bind(this,A,E),beforeIntermediate:Te.relocate?.bind(this,A,E),commit:o((I,P)=>{if(Ta(I,P,S?.nodeId)<=0)return;let L=Le.getResidencyRecord(S.residencyId),D=0,k=null,O=P?.value;if(L&&!L.includes(server.hostname)){for(let x in r)k||(k={}),k[x]=O[x];D=On}else k=O;ve.default.trace?.(`Relocating entry id: ${E}, timestamp: ${new Date(I).toISOString()}`),R(E,k,P,I,D,g,{user:A.user,residencyId:S.residencyId,nodeId:S.nodeId,expiresAt:S.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(E,S){if(this.getResidencyById)return!1;let A={previousResidency:this.getResidencyRecord(E.residencyId),isRelocation:!0},b=Uc(this.getResidency(S.value,A)),I;if(b){if(!b.includes(server.hostname))return!1;I=xc(b)}let P=0;ve.default.debug?.("Performing a relocate of an entry",E.key,S.value,b);let L=R(E.key,S.value,E,E.version,P,!0,{residencyId:I,expiresAt:S.expiresAt},"relocate",!1,null);return!0}static evict(E,S,A){let b=this.Source,I;if(!((C||g)&&(!S||(I=i.getEntry(E),!I||!S)||I.version!==A))){if(C){if(i.hasLock(E,I.version))return;let P;for(let L in r)P||(P={}),P[L]=S[L];if(P)return R(E,P,I,A,tl,null,null,null,!0)}return i.ifVersion(E,A,()=>{Eo(E,S,null)}),el(i,I??i.getEntry(E),A)}}lock(){throw new Error("Not yet implemented")}static operation(E,S){return E.table||=s,E.schema||=c,global.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 b=this.getContext();return E.checkPermission&&(A=this.allowUpdate(b.user,S,E)),Ps(A,I=>{if(!I)throw new ct.AccessViolation(b.user);if(Array.isArray(S))for(let P of S){let L=P[t];this._writeUpdate(L,P,!0)}else{let P=Rr(E);this._writeUpdate(P,S,!0)}})}}create(E,S){let A=!0,b=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(b.user,S,E)),Ps(A,I=>{if(!I)throw new ct.AccessViolation(b.user);let P=Rr(E)??S[t];if(P===void 0)P=this.constructor.getNewId();else if(i.get(P))throw new ct.ClientError("Record already exists",409);return this._writeUpdate(P,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,b){let I=this.getContext(),P=Lr(I);Pr(E);let L=this.#n??i.getEntry(E);this.#s=A?Fk:voe;let D=o(O=>A?O.put?()=>O.put(I,E,S):null:O.patch?()=>O.patch(I,E,S):O.put?()=>O.put(I,E,fl(this)):null,"writeToSources"),k={key:E,store:i,entry:L,nodeName:I?.nodeName,validate:o(O=>{S||(S=this.#t),A||S&&ag(this.#t===S?this:S)?I?.source||(P.checkOverloaded(),this.validate(S,!A),$&&(S[$.name]=$.type==="Date"?new Date(O):$.type==="String"?new Date(O).toISOString():O),A&&(t&&S[t]!==E&&(S[t]=E),F&&(L?.value?S[F.name]=L?.value[F.name]:S[F.name]=F.type==="Date"?new Date(O):F.type==="String"?new Date(O).toISOString():O),S=fl(S))):P.removeWrite(k)},"validate"),before:D(Pe),beforeIntermediate:Aa(S,D(Te)),commit:o((O,x,W)=>{if(W){if(I&&x?.version>(I.lastModified||0)&&(I.lastModified=x.version),this.#n=x,x?.value&&x.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");A||(this.#e=x?.value??null)}this.#t=void 0,this.#r=O;let se=x?.value,ne=S;this.#s=0;let B=!1,ue=Ta(O,x,b?.nodeId),me,Se=A?"put":"patch",ee;b?.residencyId!=null&&(ee=b.residencyId);let Q=I?.expiresAt??(p?p+Date.now():-1);if(ue<=0){if(g){let de=x.localTime,We=x.version;ve.default.trace?.("Applying CRDT update to record with id: ",E,"txn time",new Date(O),"applying later update from:",new Date(We),"local recorded time",new Date(de));let Tt=[];for(;de>O||We>=O&&de>0;){let mt=l.get(de);if(!mt)break;let pe=wt(mt);if(We=pe.version,We>=O){if(We===O){if(ue=Ta(O,{version:We,localTime:de},b?.nodeId),ue===0)return Re(!1);if(ue>0)continue}if(pe.type==="patch")Tt.push(pe),me=S;else if(pe.type==="put"||pe.type==="delete")return Re(!1)}de=pe.previousLocalTime}de||ve.default.debug?.("No further audit history, applying incremental updates based on available history",E,"existing version preserved",x),Tt.sort((mt,pe)=>mt.version-pe.version);for(let mt of Tt){let pe=mt.getValue(i);if(ve.default.debug?.("Rebuilding update with future patch:",new Date(mt.version),pe,mt),ne=n_(ne,pe,A),!ne)return Re(!1)}}else{if(A)return Re(!1);ne=n_(ne,se,A),ve.default.debug?.("Rebuilding update without audit:",ne)}ve.default.trace?.("Rebuilt record to save:",ne," is full update:",A)}let he;if(A?he=ne:this.constructor.loadAsInstance===!1?he=fl(se,ne):(this.#e=se,he=fl(this,ne)),this.#e=he,he&&he.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(ee==null){L?.residencyId&&(I.previousResidency=Le.getResidencyRecord(L.residencyId));let de=Uc(Le.getResidency(he,I));if(de&&!de.includes(server.hostname))if(me??=he,B=!0,Le.getResidencyById)he=void 0;else{he=null;for(let We in r)he||(he={}),he[We]=me[We]}ee=xc(de)}A||(me=S),ve.default.trace?.(`Saving record with id: ${E}, timestamp: ${new Date(O).toISOString()}${Q?", expires at: "+new Date(Q).toISOString():""}${x?", replaces entry from: "+new Date(x.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(he).slice(0,100)}catch{return""}})()),Eo(E,se,he),Re(!0),I.expiresAt&&ya();function Re(de){R(E,de?he:void 0,de?x:{...x,value:void 0},O,B?On:0,g,{omitLocalRecord:B,user:I?.user,residencyId:ee,expiresAt:Q,nodeId:b?.nodeId,originatingOperation:I?.originatingOperation},Se,!1,de?me:me??S)}o(Re,"writeCommit")},"commit")};P.addWrite(k)}async delete(E){if(Vf(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)),Ps(S,b=>{if(!b)throw new ct.AccessViolation(A.user);let I=Rr(E);return this._writeDelete(I),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(E,S){let A=Lr(this.getContext());Pr(E);let b=this.getContext();return A.addWrite({key:E,store:i,entry:this.#n,nodeName:b?.nodeName,before:Pe.delete?.bind(this,b,E),beforeIntermediate:Te.delete?.bind(this,b,E),commit:o((I,P,L)=>{let D=P?.value;L&&(b&&P?.version>(b.lastModified||0)&&(b.lastModified=P.version),Le._updateResource(this,P)),!(Ta(I,P,S?.nodeId)<=0)&&(Eo(this.getId(),D),ve.default.trace?.(`Deleting record with id: ${E}, txn timestamp: ${new Date(I).toISOString()}`),g||y?(R(E,null,P,I,0,g,{user:b?.user,nodeId:S?.nodeId},"delete"),g||ya()):el(i,P))},"commit")}),!0}search(E){let S=this.getContext(),A=Lr(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 ct.AccessViolation(S.user);let b=E.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(E)?E:E[Symbol.iterator]?Array.from(E):[];let I=E.id??this.getId();I&&(b=[{attribute:null,comparator:Array.isArray(I)?"prefix":"starts_with",value:I}].concat(b));let P,L={};function D(Q,he){let Re;switch(he){case"and":case void 0:if(Q.length<1)throw new Error('An "and" operator requires at least one condition');Re=!0;break;case"or":if(Q.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+he)}for(let de of Q){if(de.conditions){de.conditions=D(de.conditions,de.operator);continue}let We=de[0]??de.attribute,Tt=We==null?q:Fi(T,We);if(Tt)(Tt.type||lb[de.comparator])&&(de[1]===void 0?de.value=O(de.value,Tt):de[1]=O(de[1],Tt));else if(We!=null&&!E.allowConditionsOnDynamicAttributes)throw(0,ct.handleHDBError)(new Error,`${We} is not a defined attribute`,404);if(de.chainedConditions)if(de.chainedConditions.length===1&&(!de.operator||de.operator=="and")){let mt=de.chainedConditions[0],pe,_t;if(mt.comparator==="gt"||mt.comparator==="greater_than"||mt.comparator==="ge"||mt.comparator==="greater_than_equal"?(pe=de,_t=mt):(pe=mt,_t=de),pe.comparator!=="lt"&&pe.comparator!=="less_than"&&pe.comparator!=="le"&&pe.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let nt=_t.comparator==="ge"||_t.comparator==="greater_than_equal",lr=pe.comparator==="le"||pe.comparator==="less_than_equal";de.comparator=(nt?"ge":"gt")+(lr?"le":"lt"),de.value=[_t.value,pe.value]}else throw new Error("Multiple chained conditions are not currently supported")}return Q}o(D,"prepareConditions");function k(Q,he){if(E.enforceExecutionOrder)return Q;for(let Re of Q)Re.conditions&&(Re.conditions=k(Re.conditions,Re.operator));return Q.length>1&&he!=="or"?Ooe(Q,v_(Le)):Q}o(k,"orderConditions");function O(Q,he){return Array.isArray(Q)?Q.map(Re=>kg(Re,he)):kg(Q,he)}o(O,"coerceTypedValues");let x=E.operator;(b.length>0||x)&&(b=D(b,x));let W=typeof E.sort=="object"&&E.sort,se;if(W&&x!=="or"){let Q=W.attribute;if(Q==null)throw new ct.ClientError("Sort requires an attribute");if(P=b.find(he=>xu(he.attribute)===xu(Q)),!P){let he=Fi(T,Q);if(!he)throw(0,ct.handleHDBError)(new Error,`${Array.isArray(Q)?Q.join("."):Q} is not a defined attribute`,404);if(he.indexed)P={...W,comparator:"sort"},b.push(P);else if(b.length===0&&!E.allowFullScan)throw(0,ct.handleHDBError)(new Error,`${Array.isArray(Q)?Q.join("."):Q} is not indexed and not combined with any other conditions`,404)}P&&(P.descending=!!W.descending)}b=k(b,x),W&&(P&&b[0]===P?W.next&&(se={dbOrderedAttribute:W.attribute,attribute:W.next.attribute,descending:W.next.descending,next:W.next.next}):(P&&b.splice(b.indexOf(P),1),se=W));let ne=E.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),E.explain)return{conditions:b,operator:x,postOrdering:se,selectApplied:!!ne};let B=A.useReadTxn(),ue=ub(b,x,Le,B,E,S,(Q,he)=>gu(Q,ne,S,B,he),L),me=E.ensureLoaded!==!1,Se=Le.transformEntryForSelect(ne,S,B,L,me,!0),ee=Le.transformToOrderedSelect(ue,ne,se,S,B,Se);return(E.offset||E.limit!==void 0)&&(ee=ee.slice(E.offset,E.limit!==void 0?(E.offset||0)+E.limit:void 0)),ee.onDone=()=>{ee.onDone=null,A.doneReadTxn()},ee.selectApplied=!0,ee.getColumns=()=>{if(ne){let Q=[];for(let he of ne)he==="*"?Q.push(...T.map(Re=>Re.name)):Q.push(he.name||he);return Q}return T.filter(Q=>!Q.computed&&!Q.relationship).map(Q=>Q.name)},ee}static transformToOrderedSelect(E,S,A,b,I,P){let L=new ME;if(A){E=gu(E,S,b,I,null);let D;L.iterate=function(){let O,x=E[Symbol.asyncIterator]?E[Symbol.asyncIterator]():E[Symbol.iterator](),W,se=A.dbOrderedAttribute,ne,B,ue=!0;function me(ee){let Q=ee.next&&me(ee.next),he=ee.descending;return b.sort=ee,(Re,de)=>{let We=_u(Re,ee.attribute,b),Tt=_u(de,ee.attribute,b),mt=he?(0,Nl.compareKeys)(Tt,We):(0,Nl.compareKeys)(We,Tt);return mt===0?Q?.(Re,de)||0:mt}}o(me,"createComparator");let Se=me(A);return{async next(){let ee;if(O)if(ee=O.next(),ee.done){if(W)return L.onDone&&L.onDone(),ee}else return{value:await P.call(this,ee.value)};D=[],ne&&D.push(ne);do if(ee=await x.next(),ee.done){if(W=!0,D.length)break;return L.onDone&&L.onDone(),ee}else{let Q=ee.value;if(Q?.then&&(Q=await Q),se){let he=_u(Q,se,b);if(ue)ue=!1,B=he;else if(he!==B){B=he,ne=Q;break}}D.push(Q)}while(!0);return A.isGrouped,D.sort(Se),O=D[Symbol.iterator](),ee=O.next(),ee.done?(L.onDone&&L.onDone(),ee):{value:await P.call(this,ee.value)}},return(){L.onDone&&L.onDone(),x.return()},throw(){L.onDone&&L.onDone(),x.throw()}}};let k=o(O=>{if(typeof S=="object"&&Array.isArray(O.attribute))for(let x=0;x<S.length;x++){let W=S[x],se;if(W.name===O.attribute[0]){for(se=W.sort||(W.sort={});se.next;)se=se.next;se.attribute=O.attribute.slice(1),se.descending=O.descending}else W===O.attribute[0]&&(S[x]=se={name:W,sort:{attribute:O.attribute.slice(1),descending:O.descending}})}O.next&&k(O.next)},"applySortingOnSelect");k(A)}else L.iterate=(E[Symbol.asyncIterator]||E[Symbol.iterator]).bind(E),L=L.map(function(D){try{let k=P.call(this,D);return typeof k?.catch=="function"?k.catch(O=>{throw O.partialObject={[t]:D.key},O}):k}catch(k){throw k.partialObject={[t]:D.key},k}});return L}static transformEntryForSelect(E,S,A,b,I,P){let L;I&&C&&!(typeof E=="string"?[E]:E)?.every(O=>{let x;return typeof O=="object"?x=O.name:x=O,r[x]||x===t})&&(L=!0);let D,k=o(function(O){let x;if(S?.transaction?.stale&&(S.transaction.stale=!1),O!=null){if(x=O.deref?O.deref():O.value,!x&&(O.key===void 0||O.deref)||O.metadataFlags&On){if(O.metadataFlags&On&&S.replicateFrom===!1&&P&&O.residencyId)return Ka.SKIP;if(O=ga(O.key??O,S,{transaction:A,lazy:E?.length<4,ensureLoaded:I},this?.isSync,W=>W),O?.then)return O.then(k.bind(this));x=O?.value}if(L&&O?.metadataFlags&(On|tl)||O?.expiresAt!=null&&O?.expiresAt<Date.now()){if(S.onlyIfCached)return{[t]:O.key,message:"This entry has expired"};let W=vc(O.key??O,O,S);if(W?.then)return W.then(k)}}if(x==null)return P?Ka.SKIP:x;if(E&&!(E[0]==="*"&&E.length===1)){let W,se=o((B,ue)=>{let me;typeof B=="object"?me=B.name:me=B;let Se=Et?.[me],ee;if(Se){let Q=b?.[me];if(Q)if(Q.hasMappings){let Re=Se.from?x[Se.from]:xu(O.key);ee=Q.get(Re),ee||(ee=[])}else ee=Q.fromRecord?.(x);else ee=Se(x,S,O,!0);let he=o(Re=>{if(Se.directReturn)return ue(Re,me);if(Re&&typeof Re=="object"){let de=Se.definition?.tableClass||Le;D||(D={});let We=D[me]||(D[me]=de.transformEntryForSelect(me===B?null:B.select||(Array.isArray(B)?B:null),S,A,Q,I));if(Array.isArray(Re)){let Tt=[],mt=de.transformToOrderedSelect(Re,B.select,typeof B.sort=="object"&&B.sort,S,A,We)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),pe=o(nt=>{for(;!nt.done;){if(nt?.then)return nt.then(pe);Tt.push(nt.value),nt=mt.next()}ue(Tt,me)},"nextValue"),_t=pe(mt.next());_t&&(W||(W=[]),W.push(_t));return}else if(Re=We.call(this,Re),Re?.then){W||(W=[]),W.push(Re.then(Tt=>ue(Tt,me)));return}}ue(Re,me)},"handleResolvedValue");ee?.then?(W||(W=[]),W.push(ee.then(he))):he(ee);return}else ee=x[me],ee&&typeof ee=="object"&&me!==B&&(ee=Le.transformEntryForSelect(B.select||B,S,A,null)({value:ee}));ue(ee,me)},"selectAttribute"),ne;if(typeof E=="string")se(E,B=>{ne=B});else if(Array.isArray(E))if(E.asArray)ne=[],E.forEach((B,ue)=>{B==="*"?E[ue]=x:se(B,me=>ne[ue]=me)});else{ne={};let B=E.forceNulls;for(let ue of E)if(ue==="*")for(let me in x)ne[me]=x[me];else se(ue,(me,Se)=>{me===void 0&&B&&(me=null),ne[Se]=me})}else throw new ct.ClientError("Invalid select"+E);return W?Promise.all(W).then(()=>ne):ne}return x},"transform");return k}async subscribe(E){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||je({table:s,database:c,schemaDefined:u,attributes:T,audit:!0}),E||(E={});let S=!E.rawEvents,A=[],b=this,I=Eb(Le,this.getId()??null,function(L,D,k,O){try{let x=D.getValue?.(i,S),W=D.type;if(!x&&W==="patch"&&S){let ne=i.getEntry(L);ne?.version===D.version?x=ne.value:x=D.getValue?.(i,!0,k),W="put"}let se={id:L,localTime:k,value:x,version:D.version,type:W,beginTxn:O};A?A.push(se):this.send(se)}catch(x){ve.default.error?.(x)}},E.startTime||0,E),P=(async()=>{this.isCollection&&(I.includeDescendants=!0,E.onlyChildren&&(I.onlyChildren=!0)),E.supportsTransactions&&(I.supportsTransactions=!0);let L=this.getId(),D=E.previousCount;D>1e3&&(D=1e3);let k=E.startTime;if(this.isCollection){if(k){if(D)throw new ct.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:O,value:x}of l.getRange({start:k,exclusiveStart:!0,snapshot:!1})){let W=wt(x);if(W.tableId!==n)continue;let se=W.recordId;if(L==null||Gk(L,se)){let ne=W.getValue(i,S,O);if(I.send({id:se,localTime:O,value:ne,version:W.version,type:W.type}),I.queue?.length>kk&&await I.waitForDrain()===!1)return}I.startTime=O}}else if(D){let O=[];for(let{key:x,value:W}of l.getRange({start:"z",end:!1,reverse:!0}))try{let se=wt(W);if(se.tableId!==n)continue;let ne=se.recordId;if(L==null||Gk(L,ne)){let B=se.getValue(i,S,x);if(O.push({id:ne,localTime:x,value:B,version:se.version,type:se.type}),--D<=0)break}}catch(se){ve.default.error("Error getting history entry",x,se)}for(let x=O.length;x>0;)I.send(O[--x]);O[0]&&(I.startTime=O[0].localTime)}else if(!E.omitCurrent){for(let{key:O,value:x,version:W,localTime:se}of i.getRange({start:L??!1,end:L==null?void 0:[L,Nl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(I.send({id:O,localTime:se,value:x,version:W,type:"put"}),I.queue?.length>kk&&await I.waitForDrain()===!1))return}}else{D&&!k&&(k=0);let O=this.#n?.localTime;if(O===ob&&(i.cache?.delete(L),this.#n=i.getEntry(L),ve.default.trace?.("re-retrieved record",O,this.#n?.localTime),O=this.#n?.localTime),ve.default.trace?.("Subscription from",k,"from",L,O),k<O){let x=[],W=O;do{let se=l.get(W);if(se){E.omitCurrent=!0;let ne=wt(se),B=ne.getValue(i,S,W);S&&(ne.type="put"),x.push({id:L,value:B,localTime:W,...ne}),W=ne.previousLocalTime}else break;D&&D--}while(W>k&&D!==0);for(let se=x.length;se>0;)I.send(x[--se]);I.startTime=O}!E.omitCurrent&&this.doesExist()&&I.send({id:L,localTime:O,value:this.#e,version:this.#r,type:"put"})}for(let O of A)I.send(O);A=null})();return E.listener&&I.on("data",E.listener),I}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 b=!0,I=this.getContext();return E.checkPermission&&(b=this.allowCreate(I.user,E,I)),Ps(b,P=>{if(!P)throw new ct.AccessViolation(I.user);let L=Rr(E);this._writePublish(L,S,A)})}}_writePublish(E,S,A){let b=Lr(this.getContext());E??=null,E!==null&&Pr(E);let I=this.getContext();b.addWrite({key:E,store:i,entry:this.#n,nodeName:I?.nodeName,validate:o(()=>{I?.source||(b.checkOverloaded(),this.validate(S))},"validate"),before:Pe.publish?.bind(this,I,E,S),beforeIntermediate:Aa(S,Te.publish?.bind(this,I,E,S)),commit:o((P,L,D)=>{L===void 0&&y&&!g&&ya(),ve.default.trace?.(`Publishing message to id: ${E}, timestamp: ${new Date(P).toISOString()}`),R(E,L?.value??null,L,L?.version||P,0,!0,{user:I?.user,residencyId:A?.residencyId,expiresAt:I?.expiresAt,nodeId:A?.nodeId},"message",!1,S)},"commit")})}validate(E,S){let A,b=o((I,P,L)=>{if(P.type&&I!=null)if(S&&I.__op__&&(I=I.value),P.properties){typeof I!="object"&&(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be an object${P.type?" ("+P.type+")":""}`);let D=P.properties;for(let k=0,O=D.length;k<O;k++){let x=D[k];if(x.relationship||x.computed){E.hasOwnProperty(x.name)&&(A||(A=[])).push(`Computed property ${L}.${x.name} may not be directly assigned a value`);continue}let W=b(I[x.name],x,L+"."+x.name);W&&(I[x.name]=W)}if(P.sealed&&I!=null&&typeof I=="object")for(let k in I)D.find(O=>O.name===k)||(A||(A=[])).push(`Property ${k} is not allowed within object in property ${L}`)}else switch(P.type){case"Int":(typeof I!="number"||I>>0!==I)&&(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(D=>typeof D=="string")||(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a string`);break;case"Boolean":typeof I!="boolean"&&(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a bigint`)}break;case"Bytes":if(!(I instanceof Uint8Array)){if(typeof I=="string")return Buffer.from(I);(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(I instanceof Rs)){if(typeof I=="string"&&(I=Buffer.from(I)),I instanceof Buffer)return createBlob(I,{type:"text/plain"});(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be a Blob`)}break;case"array":if(Array.isArray(I)){if(P.elements)for(let D=0,k=I.length;D<k;D++){let O=I[D],x=b(O,P.elements,L+"[*]");x&&(I[D]=x)}}else(A||(A=[])).push(`Value ${Ls(I)} in property ${L} must be an Array`);break}P.nullable===!1&&I==null&&(A||(A=[])).push(`Property ${L} is required (and not does not allow null values)`)},"validateValue");for(let I=0,P=T.length;I<P;I++){let L=T[I];if(L.relationship||L.computed){Object.hasOwn(E,L.name)&&(A||(A=[])).push(`Computed property ${L.name} may not be directly assigned a value`);continue}if(!S||L.name in E){let D=b(E[L.name],L,L.name);D!==void 0&&(E[L.name]=D)}}if(f)for(let I in E)T.find(P=>P.name===I)||(A||(A=[])).push(`Property ${I} is not allowed`);if(A)throw new ct.ClientError(A.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return C?!!this.#i:void 0}static async addAttributes(E){let S=T.slice(0);for(let A of E){if(!A.name)throw new ct.ClientError("Attribute name is required");if(A.name.match(/[`/]/))throw new ct.ClientError("Attribute names cannot include backticks or forward slashes");Coe(A.name),S.push(A)}return je({table:s,database:c,schemaDefined:u,attributes:S}),Le.indexingOperation}static async removeAttributes(E){let S=T.filter(A=>!E.includes(A.name));return je({table:s,database:c,schemaDefined:u,attributes:S}),Le.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=vN.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,b=performance.now(),I=Math.floor(S/2),P=E?.exactCount,L=0,D=0,k;for(let{value:O}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(O!=null&&L++,D++,await Va(),!P&&D<I&&performance.now()-b>A){k=D;break}if(k){let O=L;L=0;for(let{value:ee}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:k,snapshot:!1}))ee!=null&&L++,await Va();let x=k*2,W=(L+O)/x,se=Math.pow((L-O+1)/k/2,2)+W*(1-W)/x,ne=Math.max(Math.sqrt(se)*S,1),B=Math.round(W*S),ue=Math.max(B-1.96*ne,L+O),me=Math.min(B+1.96*ne,S),Se=Math.pow(10,Math.round(Math.log10(ne)));return Se>B&&(Se=Se/10),L=Math.round(B/Se)*Se,{recordCount:L,estimatedRange:[Math.round(ue),Math.round(me)]}}return{recordCount:L}}static updatedAttributes(){Et=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&&(q=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)"),Dc=!0,S.to)E.elements?.definition?(Et[E.name]=E.resolve=(b,I,P,L)=>{let D=b[S.from?S.from:t],k=E.elements.definition.tableClass;return L?Uu({attribute:S.to,value:D},Lr(I).getReadTxn(),!1,k,!1).map(O=>O&&O.key!==void 0?O:k.primaryStore.getEntry(O,{transaction:Lr(I).getReadTxn()})).asArray:k.search([{attribute:S.to,value:D}],I).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 b=E.definition||E.elements?.definition;b?(Et[E.name]=E.resolve=(I,P,L,D)=>{let k=I[S.from];if(k===void 0)return;if(E.elements){let x,W=k?.map(se=>{let ne=b.tableClass.primaryStore[D?"getEntry":"get"](se,{transaction:Lr(P).getReadTxn()});return ne?.then&&(x=!0),Le.loadAsInstance===!1&&Object.freeze(D?ne?.value:ne),ne});return S.filterMissing?x?Promise.all(W).then(se=>se.filter($k)):W.filter($k):x?Promise.all(W):W}let O=b.tableClass.primaryStore[D?"getEntry":"get"](k,{transaction:Lr(P).getReadTxn()});return Le.loadAsInstance===!1&&Object.freeze(D?O?.value:O),O},E.set=(I,P)=>{if(Array.isArray(P)){let L=P.map(D=>D.getId?.()||D[b.tableClass.primaryKey]);I[S.from]=L}else{let L=P.getId?.()||P[b.tableClass.primaryKey];I[S.from]=L}},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),Et[E.name]=E.resolve=(b,I,P)=>{let L=typeof A.from=="string"?b[A.from]:b,D=this.userResolvers[E.name];if(D)return D(L,I,P);ve.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 b=r[E.name].customIndex;Et[E.name]=(I,P,L)=>{let D=I[E.name];return b.propertyResolver(D,P,L)},Et[E.name].directReturn=!0}}jm(this,this),jm(Gf,this,!0);for(let E of T){let S=E.name;E.resolve&&Object.defineProperty(i.encoder.structPrototype,S,{get(){return E.resolve(this,Fu.getStore())},set(A){return E.set(this,A)},configurable:!0})}}static setComputedAttribute(E,S){let A=Fi(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:b,value:I}of l.getRange({start:0,end:E}))await Va(),wt(I).tableId===n&&(A=b_(l,b,I));if(S)for(let b of i.getRange({start:0,versions:!0})){let{key:I,value:P,localTime:L}=b;await Va(),P===null&&L<E&&(A=el(i,b))}await A}static async*getHistory(E=0,S=1/0){for(let{key:A,value:b}of l.getRange({start:E||1,end:S})){await Va();let I=wt(b);I.tableId===n&&(yield{id:I.recordId,localTime:A,version:I.version,type:I.type,value:I.getValue(i,!0,A),user:I.user,operation:I.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 b=A.localTime;if(!b)throw new Error("The entry does not have a local audit time");let I=0;do{await Va();let P=l.get(b);if(P){let L=wt(P);S.push({id:L.recordId,localTime:b,version:L.version,type:L.type,value:L.getValue(i,!0,b),user:L.user}),b=L.previousLocalTime}else break}while(I<1e3&&b);return S.reverse()}static cleanup(){K?.remove()}}let UE=Fg(async(V,E,S)=>{for(let A of Le.sources)if(A.get&&(!A.get.reliesOnPrototype||A.prototype.get)){if(A.available?.(S)===!1)continue;E.source=A;let b=await A.get(V,E);if(b)return b}},()=>{throw new ct.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Le.updatedAttributes();let $f=Le.prototype;return p&&Le.setTTLExpiration(p/1e3),J&&Su(),Le;function Eo(V,E,S){let A;for(let b in r){let I=r[b],P=I.isIndexing,L=Et[b],D=S&&(L?L(S):S[b]),k=E&&(L?L(E):E[b]);if(D===k&&!P)continue;if(I.customIndex){I.customIndex.index(V,D,k);continue}A=!0;let O=I.indexNulls,x=(0,ph.getIndexedValues)(D,O),W=(0,ph.getIndexedValues)(k,O);if(s==="OrganizationRole"&&ve.default.error?.({tableName:s,id:V,key:b,valuesToAdd:x,valuesToRemove:W}),W?.length>0){let se=new Set(W);if(x=x?x.filter(ne=>{if(se.has(ne))se.delete(ne);else return!0}):[],W=Array.from(se),(W.length>0||x.length>0)&&Bk){let ne=W.concat(x).map(B=>({key:B,value:V}));I.prefetch(ne,qk)}for(let ne=0,B=W.length;ne<B;ne++)I.remove(W[ne],V)}else x?.length>0&&Bk&&I.prefetch(x.map(se=>({key:se,value:V})),qk);if(x)for(let se=0,ne=x.length;se<ne;se++)I.put(x[se],V)}return A}o(Eo,"updateIndices");function Pr(V){switch(typeof V){case"number":return!0;case"string":if(V.length<659)return!0;if(V.length>Hk)throw new Error("Primary key size is too large: "+V.length);break;case"object":if(V===null)throw new Error("Invalid primary key of null");break;case"bigint":if(V<2n**64n&&V>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof V)}if((0,Nl.writeKey)(V,Uoe,0)>Hk)throw new Error("Primary key size is too large: "+V.length);return!0}o(Pr,"checkValidId");function Rr(V){return typeof V=="object"&&V?V.id:V}o(Rr,"requestTargetToId");function Vf(V){return typeof V=="object"&&V&&V.isCollection}o(Vf,"isSearchTarget");function Ss(V){}o(Ss,"isRequestTarget");function ga(V,E,S,A,b){if(Le.getResidencyById&&S.ensureLoaded&&E?.replicateFrom!==!1){let P=Uc(Le.getResidencyById(V));if(P&&!P.includes(server.hostname)&&N)return N({key:V,residency:P}).then(b)}let I=o(()=>{if(E?.transaction?.stale&&(E.transaction.stale=!1),S.transaction?.isDone)return b(null,V);let P=i.getEntry(V,S);return E?._freezeRecords&&Object.freeze(P?.value),P?.residencyId&&P.metadataFlags&On&&N&&S.ensureLoaded&&E?.replicateFrom!==!1?N(P).then(L=>b(L,V),L=>(ve.default.error?.("Error loading remote record",V,P,S,L),b(null,V))):(P&&E&&(P?.version>(E.lastModified||0)&&(E.lastModified=P.version),P?.localTime&&!E.lastRefreshed&&(E.lastRefreshed=P.localTime)),b(P,V))},"whenPrefetched");return A?I():oe>0?(oe--,I()):new Promise((P,L)=>{oe===0?(oe--,i.prefetch([V],()=>{D(),k()})):(te.push(V),fe.push(k),te.length>Qy&&(oe--,D()));function D(){if(te.length>0){let O=fe;i.prefetch(te,()=>{oe===-1?D():oe++;for(let x of O)x()}),te=[],fe=[],ge>2&&ge--}else oe=ge,ge<vE&&ge++}o(D,"prefetch");function k(){try{P(I())}catch(O){L(O)}}o(k,"load")})}o(ga,"loadLocalRecord");function Sa(V,E){let S=E?.checkPermission;if(typeof S!="object"){if(!V?.role)return;S=V.role.permission}if(S.super_user)return xoe;let A=S[c],b,I=A?.tables;if(I)return I[s];if(c==="data"&&(b=S[s])&&!b.tables)return b}o(Sa,"getTablePermissions");function vc(V,E,S,A){if(C){let b=!1;if(S.noCache?b=!0:(E?(!E.value||E.metadataFlags&(On|tl)||E.expiresAt!=null&&E.expiresAt<Date.now())&&(b=!0):b=!0,Wr(!b,"cache-hit",s)),b){let I=xE(V,E,S).then(P=>(P?.value&&P?.value.getRecord?.()&&ve.default.error?.("Can not assign a record that is already a resource"),S&&(P?.version>(S.lastModified||0)&&(S.lastModified=P.version),S.lastRefreshed=Date.now()),P));if(S?.onlyIfCached||E?.value&&A?.allowStaleWhileRevalidate?.(E,V)){if(I.catch(P=>ve.default.warn?.(P)),S?.onlyIfCached&&!A.doesExist())throw new ct.ServerError("Entry is not cached",504);return}else return I}}else if(E?.value&&E.expiresAt!=null&&E.expiresAt<Date.now())return Le.evict(E.key,E.value,E.version),E.value=null,{then(b){return b(E)}}}o(vc,"ensureLoadedFromSource");function Lr(V){let E=V?.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 go,E.lmdbDb=i,E;E=S}while(!0)}else return new t_}o(Lr,"txnForContext");function _u(V,E,S){if(!V)return;let A=(V.deref?V.deref():V.value)??i.getEntry(V.key)?.value;if(typeof E=="object"){let I=Et,P=A;for(let L=0,D=E.length;L<D;L++){let k=E[L],O=I?.[k];P=O&&P?O(P,S,V):P?.[k],V=null,I=O?.definition?.tableClass?.propertyResolvers}return P}let b=Et[E];return b?b(A,S,V):A[E]}o(_u,"getAttributeValue");function gu(V,E,S,A,b){let I=b?.length,P={transaction:A,lazy:I>0||typeof E=="string"||E?.length<4,alwaysPrefetch:!0},L;function D(k,O){let x=k?.value;if(!x)return Ka.SKIP;for(let W=0;W<I;W++)if(!L?.includes(W)&&!b[W](x,k))return Ka.SKIP;return O!==void 0&&(k.key=O),k}if(o(D,"processEntry"),I>0||!V.hasEntries){let k=V.map(O=>{if(L=null,typeof O=="object"&&O?.key!==void 0)return I>0?D(O):O;if(O==null)return Ka.SKIP;for(let x=0;x<I;x++){let se=b[x].idFilter;if(se){if(!se(O))return Ka.SKIP;L||(L=[]),L.push(x)}}return ga(O,S,P,!1,D)});return Array.isArray(V)&&(k=k.filter(O=>O!==Ka.SKIP)),k.hasEntries=!0,k}return V}o(gu,"transformToEntries");function Ta(V,E,S=server.replication?.getThisNodeId(l)){if(V<=E?.version){if(E?.version===V&&S!==void 0){let A=server.replication?.exportIdMapping(l),b=E.localTime,I=b&&l.get(b);if(I){let P,L,D=wt(I);for(let k in A)A[k]===S&&(P=k),A[k]===D.nodeId&&(L=k);if(P>L)return 1;if(P===L)return 0}}return-1}return 1}o(Ta,"precedesExistingVersion");async function xE(V,E,S){let A=E?.metadataFlags,b=E?.version,I,P;if(!i.attemptLock(V,b,()=>{clearTimeout(P);let O=i.getEntry(V);!O||!O.value||O.metadataFlags&(On|tl)||O.expiresAt!=null&&O.expiresAt<Date.now()?I(xE(V,i.getEntry(V),S)):I(O)}))return new Promise(O=>{I=O,P=setTimeout(()=>{i.unlock(V,b)},Moe)});let L=E?.value,D={requestContext:S,replacingRecord:L,replacingEntry:E,replacingVersion:b,noCacheStore:!1,source:null,resourceCache:S?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},k=S?.responseHeaders;return new Promise((O,x)=>{let W;Ps(Ft(D,async se=>{let ne=performance.now(),B,ue,me;try{B=await UE(V,D,E),me=A&On;let ee=D.lastModified||me&&b;ee||(ee=(0,ph.getNextMonotonicTime)()),ue=me||ee>b||!L;let Q=performance.now()-ne;if(at(Q,"cache-resolution",s,null,"success"),k&&mh(k,"Server-Timing",`cache-resolve;dur=${Q.toFixed(2)}`,!0),se.timestamp=ee,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=L,ee=b;else throw new ct.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==V&&(B[t]=V)}W=!0,O({key:V,version:ee,value:B})}catch(ee){ee.message+=` while resolving record ${V} for ${s}`,L&&((ee.code==="ECONNRESET"||ee.code==="ECONNREFUSED"||ee.code==="EAI_AGAIN")&&!S?.mustRevalidate||S?.staleIfError&&(ee.statusCode===500||ee.statusCode===502||ee.statusCode===503||ee.statusCode===504))?(O({key:V,version:b,value:L}),ve.default.trace?.(ee.message,"(returned stale record)")):x(ee);let Q=performance.now()-ne;at(Q,"cache-resolution",s,null,"fail"),k&&mh(k,"Server-Timing",`cache-resolve;dur=${Q.toFixed(2)}`,!0),D.transaction.abort();return}if(S?.noCacheStore||D.noCacheStore){D.transaction.abort();return}Lr(D).addWrite({key:V,store:i,entry:E,nodeName:"source",before:Aa(B),commit:o((ee,Q)=>{if(Q?.version!==b)return;let he=Eo(V,L,B);if(B){Te.put?.(D,V,B),Q&&(S.previousResidency=Le.getResidencyRecord(Q.residencyId));let Re,de=!1,We,Tt=Uc(Le.getResidency(B,S));if(Tt){if(!Tt.includes(server.hostname))if(Re=B,de=!0,Le.getResidencyById)B=void 0;else{B=null;for(let mt in r)B||(B={}),B[mt]=Re[mt]}We=xc(Tt)}ve.default.trace?.(`Writing resolved record from source with id: ${V}, timestamp: ${new Date(ee).toISOString()}`),R(V,B,Q,ee,de?On:0,g&&(ue||de)||null,{user:D?.user,expiresAt:D.expiresAt,residencyId:We},"put",!!me,Re)}else Q&&(Te.delete?.(D,V),ve.default.trace?.(`Deleting resolved record from source with id: ${V}, timestamp: ${new Date(ee).toISOString()}`),g||y?R(V,null,Q,ee,0,g&&ue||null,{user:D?.user},"delete",!!me):el(i,Q,b))},"commit")})}),()=>{i.unlock(V,b)},se=>{i.unlock(V,b),W&&ve.default.error?.("Error committing cache update",se)})})}o(xE,"getFromSource");function Ra(V){if(!V||V.user?.role?.permission?.super_user)return!0;if(V.replicateTo)throw new ct.ClientError("Can not specify replication parameters without super user permissions",403);if(V.replicatedConfirmation)throw new ct.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Ra,"checkContextPermissions");function ya(V){let E=!1;if(V&&(V-xe>1&&(E=!0),xe=V),!(rt===tn&&!E)&&(tn=rt,(0,bl.getWorkerIndex)()===(0,bl.getWorkerCount)()-1))return it&&clearTimeout(it),rt?new Promise(S=>{let A=new Date;A.setMonth(0),A.setDate(1),A.setHours(0),A.setMinutes(0),A.setSeconds(0);let b=rt/(1+xe),I=E?Date.now():Math.ceil((Date.now()-A.getTime())/b)*b+A.getTime(),P=o(L=>{ve.default.trace?.(`Scheduled next cleanup scan at ${new Date(L)}`),it=setTimeout(()=>j=j.then(async()=>{if(P(Math.max(L+rt,Date.now())),i.rootStore.status!=="open"){clearTimeout(it);return}let D=50,k=new Array(D),O=0,x=Math.pow(xe,8)*(Il.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),W=_/Math.pow(Math.max(xe,1),4);ve.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${W}ms`);function se(ne,B,ue,me){let Se=ne+W-Date.now();if(Se<0)return!0;if(xe){let ee=i.lastSize;return ue&$r&&Vc(me,Q=>{Q.size&&(ee+=Q.size)}),ve.default.trace?.(`shouldEvict adjusted ${Se} ${ee}, ${Se*(ne-B)/ee} < ${x}`),Se*(ne-B)/ee<x}return!1}o(se,"shouldEvict");try{let ne=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:ue,value:me,version:Se,expiresAt:ee,metadataFlags:Q}=B,he;me===null&&!g&&Se+Doe<Date.now()?he=el(i,B,Se):ee!=null&&se(ee,Se,Q,me)&&(he=Le.evict(ue,me,Se),ne++),he&&(await k[O],k[O]=he.catch(Re=>{ve.default.error?.("Cleanup error",Re)}),++O>=D&&(O=0)),await Va()}ve.default.info?.(`Finished cleanup scan for ${s}, evicted ${ne} entries`)}catch(ne){ve.default.warn?.(`Error in cleanup scan for ${s}:`,ne)}S(void 0),xe=0}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");P(I)}):void 0}o(ya,"scheduleCleanup");function Kf(){K=l?.addDeleteRemovalCallback(n,i,(V,E)=>{i.remove(V,E)})}o(Kf,"addDeleteRemoval");function Su(){(0,bl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Mc){Mc=!0;try{let V=J.name,E=r[V];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 b=i.getEntry(A);b?.value?b.value[V]<Date.now()&&Le.evict(A,b.value,b.version):i.ifVersion(A,b?.version,()=>E.remove(S,A))}await Va()}}catch(V){ve.default.error?.("Error in evicting old records",V)}finally{Mc=!1}}},Loe).unref()}o(Su,"runRecordExpirationEviction");function Uc(V){if(V!=null){if(Array.isArray(V))return V;if(typeof V=="number"){if(V>=65536)throw new Error(`Shard id ${V} must be below 65536`);let E=server.shards?.get?.(V);if(E)return ve.default.trace?.(`Shard ${V} mapped to ${E.map(S=>S.name).join(", ")}`),E.map(S=>S.name);throw new Error(`Shard ${V} is not defined`)}throw new Error(`Shard or residency list ${V} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Uc,"residencyFromFunction");function xc(V){if(V){let E=V.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],V),S)}}o(xc,"getResidencyId");function Aa(V,E){let S=VA(V,i.rootStore);if(S){let A=E;return A?async()=>{await A(),await S()}:()=>S()}return E}o(Aa,"preCommitBlobsForRecordBefore")}function MN(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 qk(){}function kg(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return Hg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Hg(+e);case"Float":return e==="null"?null:Hg(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;Boe.test(e)||(e+="Z");let n=new Date(e);return Hg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,qg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Hg(e){if(isNaN(e))throw new SyntaxError;return e}function Gk(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 Ps(e,t,r){return e?.then?e.then(t,r):t(e)}function $k(e){return e!=null}function Ls(e){try{return JSON.stringify(e)}catch{return e}}function Foe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ka,ph,Vk,Kk,Il,ct,Eh,_h,ve,Nl,bl,qg,vN,Ooe,Coe,Poe,Loe,Doe,Bk,Moe,Fk,voe,On,tl,Uoe,Hk,kk,xoe,DMe,Boe,Va,B_=le(()=>{H();Ka=require("lmdb"),ph=w(In()),Vk=w(require("lodash")),Kk=w(om());Ma();cm();Il=w(ae());_b();ct=w(_e()),Eh=w(Po()),_h=w(ai());Me();x_();ve=w(ri());PI();kc();Nl=require("ordered-binary"),bl=w(ze());Mi();qg=w(ie());Jc();ji();s_();hh();vN=w(require("node:fs"));Yn();T_();DN();({sortBy:Ooe}=Vk.default),{validateAttribute:Coe}=Kk.default,Poe=new Uint8Array(9);Poe[8]=192;Loe=6e4,Doe=864e5;Il.initSync();Bk=Il.get(U.STORAGE_PREFETCHWRITES),Moe=1e4,Fk=1,voe=2,On=1,tl=8,Uoe=Buffer.allocUnsafeSlow(8192),Hk=1978,kk=100,xoe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},DMe=(0,qg.convertToMS)(Il.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Gg,"makeTable");o(MN,"attributesAsObject");o(qk,"noop");Boe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(kg,"coerceType");o(Hg,"rejectNaN");o(Gk,"isDescendantId");Va=o(()=>new Promise(setImmediate),"rest");o(Ps,"when");o($k,"exists");o(Ls,"stringify");o(Foe,"hasOtherProcesses")});function $g(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 Vg(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 Wk=le(()=>{o($g,"euclideanDistance");o(Vg,"cosineDistance")});var zk,jk,cd,Qi,ad,Hoe,koe,Kg,Qk=le(()=>{Wk();zk=require("msgpackr"),jk=w(ri()),cd=w(_e()),Qi=(0,jk.loggerWithTag)("HNSW"),ad=Symbol.for("entryPoint"),Hoe=Symbol.for("key"),koe=10,Kg=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=zk.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?$g:Vg,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"?[Hoe,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(ad);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);Qi.debug?.("setting entry point to",i),this.indexStore.put(ad,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),koe),h=f.level;if(m>=h){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);Qi.debug?.("setting entry point to",i),this.indexStore.put(ad,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&&Qi.info?.("should not have zero connections for",l);let y=p[_];for(let T=0;T<g.length;T++){let{id:R,distance:N,node:C}=g[T];if(R===i)continue;let q=[];if(this.optimizeRouting){let $=!1,J=C[_],K=1+this.optimizeRouting*(1+.5*T/this.M);for(let te=0;te<J.length;te++){let{id:fe,distance:oe}=J[te],ge=1+this.optimizeRouting*(1+.5*te/this.M);for(let Pe=0;Pe<y.length;Pe++){let{id:Te,distance:rt}=y[Pe];if(Te===fe){N*K>rt+oe?$=!0:oe*ge>N+rt&&(q.push({fromId:Te,toId:R}),q.push({fromId:R,toId:Te}));break}}if($)break}if($)continue}else if(T>=(_>0?this.M:this.M<<1))continue;y.push({id:R,distance:N});for(let{fromId:$,toId:J}of q){let K=d($);K||(K=d($,this.indexStore.get($)));for(let te=0;te<K[_].length;te++)if(K[_][te].id===J){Object.isFrozen(K[_])&&(K[_]=K[_].slice()),K[_].splice(te,1);break}}let j=c[_],F=j?.find(({id:$})=>$===R);if(F){let $=j?.indexOf(F);j.copied||(j=[...j],j.copied=!0,c[_]=j),j.splice($,1)}else this.addConnection(R,d(R,C),i,_,N,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(ad);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);Qi.debug?.("setting entry point to",l),this.indexStore.put(ad,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&&(Qi.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(ad);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 cd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new cd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=Vg;else if(s==="euclidean")c=$g;else{if(s)throw new cd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new cd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new cd.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){Qi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||Qi.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){Qi.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:h})=>h!==t),s===0&&m[s].length===0&&Qi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?Qi.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?$g:Vg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var UN,Jk=le(()=>{Qk();UN={HNSW:Kg}});var gt={};Oe(gt,{database:()=>Xu,databaseEnvs:()=>Bo,databases:()=>ke,dropDatabase:()=>UI,dropTableMeta:()=>Koe,getDatabases:()=>ot,getDefaultCompression:()=>Jg,getTables:()=>qoe,onRemovedDB:()=>Ah,onUpdatedTable:()=>wl,readMetaDb:()=>gh,resetDatabases:()=>hd,table:()=>je,tables:()=>dn});function qoe(){return jg||ot(),dn||{}}function ot(){if(jg)return ke;jg=!0,dd=new Map;let e=(0,Wt.getHdbBasePath)()&&(0,qt.join)((0,Wt.getHdbBasePath)(),Fc),t=(0,Wt.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Wt.get)(U.STORAGE_PATH)||e&&((0,ss.existsSync)(e)?e:(0,qt.join)((0,Wt.getHdbBasePath)(),qE)),!e)return;if((0,ss.existsSync)(e))for(let n of(0,ss.readdirSync)(e,{withFileTypes:!0})){let s=(0,qt.basename)(n.name,".mdb");n.isFile()&&(0,qt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&gh((0,qt.join)(e,n.name),null,s)}if((0,ss.existsSync)((0,ud.getBaseSchemaPath)())){for(let n of(0,ss.readdirSync)((0,ud.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,qt.join)((0,ud.getBaseSchemaPath)(),n.name),i=(0,qt.join)((0,ud.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,ss.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,qt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,qt.join)(i,a.name);gh((0,qt.join)(s,a.name),(0,qt.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ss.existsSync)(i))for(let c of(0,ss.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,qt.extname)(c.name).toLowerCase()===".mdb"&&gh((0,qt.join)(i,c.name),(0,qt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,qt.join)(l.path,(0,qt.basename)(c+".mdb"));(0,ss.existsSync)(u)&&gh(u,c,n,null,!0)}}for(let n in ke){let s=dd.get(n);if(s){let i=ke[n];n.includes("delete")&&Ir.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(Ir.trace(`delete table class ${a}`),delete i[a])}else if(delete ke[n],n==="data"){for(let i in dn)delete dn[i];delete dn[Qg]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if((0,Wt.get)(U.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(ke.system?.hdb_analytics?.enableAuditing(),ke.system?.hdb_analytics_hostname?.enableAuditing()),ke.system)for(let n of r)ke.system[n]&&(ke.system[n].replicate=!1);return dd=null,ke}function hd(){jg=!1;for(let[,e]of Bo)e.needsDeletion=!0;ot();for(let[e,t]of Bo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Bo.delete(e);let r=ke[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete ke[t.databaseName],Th.forEach(i=>i(t.databaseName));break}}return ke}function gh(e,t,r=FN,n,s){let i=new xN.default(e,!1);try{let a=Bo.get(e);a?a.needsDeletion=!1:(a=(0,fd.open)(i),Bo.set(e,a));let c=new md.default(!1),l=a.dbisDb||(a.dbisDb=a.openDB(Yg.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ss.existsSync)(n)&&(i.path=n,u=(0,fd.open)(i),u.isLegacy=!0):u=A_(a));let d=rq(r),f=d[Qg],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 oe of _)if(oe.is_hash_attribute||oe.isPrimaryKey){g=oe;break}if(!g){Ir.warn(`Unable to find a primary key attribute on table ${h}, with attributes: ${JSON.stringify(_)}`);continue}}let y=d[h],T={},R=[],N,C,q=typeof g.audit=="boolean"?g.audit:(0,Wt.get)(U.LOGGING_AUDITLOG),j=g.trackDeletes,F=g.expiration,$=g.eviction,J=g.sealed,K=g.splitSegments,te=g.replicate;if(y)T=y.indices,R=y.attributes,y.schemaVersion++;else{N=g.tableId,N?N>=(l.get(ld)||0)&&(l.putSync(ld,N+1),Ir.info(`Updating next table id (it was out of sync) to ${N+1} for ${h}`)):(g.tableId=N=l.get(ld),N||(N=1),Ir.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(ld,N+1),l.putSync(g.key,g));let oe=new md.default(!g.is_hash_attribute,g.is_hash_attribute);if(oe.compression=g.compression,oe.compression){let ge=(0,Wt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||tq;oe.compression.threshold=ge}C=D_(a.openDB(g.key,oe),a),a.databaseName=r,C.tableId=N}let fe;for(let oe of _){oe.attribute=oe.name;try{if(!oe.is_hash_attribute&&(oe.indexed||oe.attribute&&!oe.name)){if(!T[oe.name]){let Pe=sq(oe.key,a,oe);T[oe.name]=Pe,T[oe.name].indexNulls=oe.indexNulls}let ge=R.find(Pe=>Pe.name===oe.name);ge?R.splice(R.indexOf(ge),1,oe):R.push(oe),fe=!0}}catch(ge){Ir.error("Error trying to update attribute",oe,R,T,ge)}}for(let oe of R)if(!_.find(Pe=>Pe.name===oe.name)){if(oe.is_hash_attribute){Ir.error("Unable to remove existing primary key attribute",oe);continue}oe.indexed&&(R.splice(R.indexOf(oe),1),fe=!0)}if(y)fe&&(y.schemaVersion++,y.updatedAttributes());else{y=nq(d,h,Gg({primaryStore:C,auditStore:u,audit:q,sealed:J,splitSegments:K,replicate:te,expirationMS:F&&F*1e3,evictionMS:$&&$*1e3,trackDeletes:j,tableName:h,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+h:r,databaseName:r,indices:T,attributes:_,schemaDefined:g.schemaDefined,dbisDB:l})),y.schemaVersion=1;for(let oe of Sh)oe(y)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function rq(e){let t=ke[e];if(t||(e==="data"?t=ke[e]=dn:e==="system"?Object.defineProperty(ke,"system",{value:t=Object.create(null),configurable:!0}):t=ke[e]=Object.create(null)),dd&&!dd.has(e)){let r=new Set;t[Qg]=r,dd.set(e,r)}return t}function nq(e,t,r){return e[t]=r,r}function Xu({database:e,table:t}){e||(e=FN),ot();let r=rq(e),n=(0,qt.join)((0,Wt.getHdbBasePath)(),Fc),s=(0,Wt.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,Wt.get)(U.STORAGE_PATH)||((0,ss.existsSync)(n)?n:(0,qt.join)((0,Wt.getHdbBasePath)(),qE));let a=(0,qt.join)(n,(i?t:e)+".mdb"),c=Bo.get(a);if(!c||c.status==="closed"){let l=new xN.default(a,!1);c=(0,fd.open)(l),Bo.set(a,c)}return c.auditStore||(c.auditStore=A_(c)),c}async function UI(e){if(!ke[e])throw new Error("Schema does not exist");let t=ke[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Bo.delete(r.path),r.status==="open"&&(await r.close(),await Rh.remove(r.path));if(r||(r=Xu({database:e,table:null}),r.status==="open"&&(await r.close(),await Rh.remove(r.path))),e==="data"){for(let n in dn)delete dn[n];delete dn[Qg]}delete ke[e],Th.forEach(n=>n(e)),await $A(r)}function sq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&UN[r.indexed.type]?.useObjectStore,s=new md.default(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=UN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Ir.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function je(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=FN);let p=Xu({database:r,table:t}),_=ke[r];Ir.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 N=new md.default(!1);for(let K of a)K.attribute&&!K.name?(K.name=K.attribute,K.indexed=!0):K.attribute=K.name,K.expiresAt&&(K.indexed=!0);let C,q;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 K=p.auditStore;T=a.find(ge=>ge.isPrimaryKey)||{},y=T.name,T.is_hash_attribute=T.isPrimaryKey=!0,T.schemaDefined=m,T.compression=Jg(),f&&(T.trackDeletes=!0),c=T.audit=typeof c=="boolean"?c:(0,Wt.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]),Ir.trace(`${t} table loading, opening primary store`);let te=new md.default(!1,!0);te.compression=T.compression;let fe=t+"/";if(R=p.dbisDb=p.openDB(Yg.INTERNAL_DBIS_NAME,N),J(),R.get(fe))return q&&q(),hd(),je(e);let oe=D_(p.openDB(fe,te),p);p.databaseName=r,oe.tableId=R.get(ld),Ir.trace(`Assigning new table id ${oe.tableId} for ${t}`),oe.tableId||(oe.tableId=1),R.put(ld,oe.tableId+1),T.tableId=oe.tableId,g=nq(_,t,Gg({primaryStore:oe,auditStore:K,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:y,tableName:t,tableId:oe.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,C=!0,R.put(fe,T)}let j=g.indices;R=R||(p.dbisDb=p.openDB(Yg.INTERNAL_DBIS_NAME,N)),g.dbisDB=R;let F=[];for(let{key:K,value:te}of R.getRange({start:!0})){let[fe,oe]=K.toString().split("/");if(oe===""&&(oe=te.name),oe){if(fe!==t)continue}else continue;let ge=a.find(Te=>Te.name===oe),Pe=!ge?.indexed&&te.indexed&&!te.isPrimaryKey;if((!ge||Pe)&&(J(),C=!0,ge||R.remove(K),Pe)){let Te=g.indices[fe];Te&&F.push(Te)}}let $=[];try{for(let K of a||[]){if((K.relationship||K.computed)&&(C=!0,K.relationship))continue;let te=t+"/"+(K.name||"");Object.defineProperty(K,"key",{value:te,configurable:!0});let fe=R.get(te);if(K.isPrimaryKey){if(fe=fe||R.get(te=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+fe.expiration||void 0)||(+s||void 0)!==(+fe.eviction||void 0)||K.type!==fe.type){let ge={...fe};typeof c=="boolean"&&(c&&g.enableAuditing(c),ge.audit=c),n&&(ge.expiration=+n),s&&(ge.eviction=+s),l!==void 0&&(ge.sealed=l),d!==void 0&&(ge.replicate=d),K.type&&(ge.type=K.type),C=!0,J(),R.put(te,ge)}continue}fe?.attribute&&!fe.name&&(fe.indexed=!0);let oe=!fe||fe.type!==K.type||JSON.stringify(fe.indexed)!==JSON.stringify(K.indexed)||fe.nullable!==K.nullable||fe.version!==K.version||JSON.stringify(fe.properties)!==JSON.stringify(K.properties)||JSON.stringify(fe.elements)!==JSON.stringify(K.elements);if(K.indexed){let ge=sq(te,p,K);(oe||fe.indexingPID&&fe.indexingPID!==process.pid||fe.restartNumber<yh.workerData?.restartNumber)&&(C=!0,J(),fe=R.get(te),(oe||fe.indexingPID&&fe.indexingPID!==process.pid||fe.restartNumber<yh.workerData?.restartNumber)&&(C=!0,K.indexNulls===void 0&&(K.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(K.lastIndexedKey=fe?.lastIndexedKey??void 0,K.indexingPID=process.pid,ge.isIndexing=!0,Object.defineProperty(K,"dbi",{value:ge}),$.push(K))),R.put(te,K)),fe?.indexNulls&&K.indexNulls===void 0&&(K.indexNulls=!0),ge.indexNulls=K.indexNulls,j[K.name]=ge}else oe&&(C=!0,J(),R.put(te,K))}}finally{q&&q()}if(C&&(g.schemaVersion++,g.updatedAttributes()),Ir.trace(`${t} table loading, running index`),$.length>0||F.length>0?g.indexingOperation=Voe(g,$,F):C&&Wg.signalSchemaChange(new zg.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=h,C)for(let K of Sh)K(g,h!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Ir.trace(`${t} table loaded`),g;function J(){q||p.transactionSync(()=>({then(K){q=K}}))}o(J,"startTxn")}async function Voe(e,t,r){try{Ir.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await Wg.signalSchemaChange(new zg.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,fd.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 N=(0,Xk.getIndexedValues)(R);if(N)for(let C=0,q=N.length;C<q;C++)y.put(N[C],f)}catch(T){a[g]||(a[g]=!0,Ir.error(`Error indexing attribute ${g}`,T))}}}),s.then(()=>d--,p=>{d--,Ir.error(p)}),yh.workerData&&yh.workerData.restartNumber!==eq.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>Goe?await s:d>$oe&&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 zg.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Ir.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Ir.error("Error in indexing",n)}}function Koe({table:e,database:t}){let r=Xu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function wl(e){return Sh.push(e),{remove(){let t=Sh.indexOf(e);t>-1&&Sh.splice(t,1)}}}function Ah(e){return Th.push(e),{remove(){let t=Th.indexOf(e);t>-1&&Th.splice(t,1)}}}function Jg(){let e=(0,Wt.get)(U.STORAGE_COMPRESSION),t=(0,Wt.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,Wt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||tq,n={startingOffset:32};return t&&(n.dictionary=Rh.readFileSync(t)),r&&(n.threshold=r),e&&n}var Wt,Yg,fd,qt,ss,ud,md,xN,Rh,BN,Xk,Wg,zg,yh,Zk,eq,Ir,FN,Qg,tq,dn,ke,ld,Sh,Th,jg,Bo,dd,Goe,$oe,Me=le(()=>{Wt=w(ae()),Yg=w(Kt()),fd=require("lmdb"),qt=require("path"),ss=require("fs"),ud=w(Nt());B_();md=w(Lm()),xN=w(Dm());H();Rh=w(require("fs-extra")),BN=w(ti()),Xk=w(In()),Wg=w(Po()),zg=w(ai()),yh=require("worker_threads"),Zk=w(z()),eq=w(ze());Mi();Jc();Yn();Jk();Ir=(0,Zk.forComponent)("storage"),FN="data",Qg=Symbol("defined-tables"),tq=((0,Wt.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,Wt.initSync)();dn=Object.create(null),ke=Object.create(null);(0,BN._assignPackageExport)("databases",ke);(0,BN._assignPackageExport)("tables",dn);ld=Symbol.for("next-table-id"),Sh=[],Th=[],Bo=new Map;o(qoe,"getTables");o(ot,"getDatabases");o(hd,"resetDatabases");o(gh,"readMetaDb");o(rq,"ensureDB");o(nq,"setTable");o(Xu,"database");o(UI,"dropDatabase");o(sq,"openIndex");o(je,"table");Goe=1e3,$oe=10;o(Voe,"runIndexing");o(Koe,"dropTableMeta");o(wl,"onUpdatedTable");o(Ah,"onRemovedDB");o(Jg,"getDefaultCompression")});var qN={};Oe(qN,{loadGQLSchema:()=>zoe,start:()=>kN,startOnMainThread:()=>Woe});function kN({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 q=function(F){if(F.kind==="NonNullType"){let K=q(F.type);return K.nullable=!1,K}if(F.kind==="ListType")return{type:"array",elements:q(F.type)};let J={type:F.name?.value};return Object.defineProperty(J,"location",{value:F.loc.startToken}),J};o(q,"getProperty");let T=y.name.value,R=[],N={table:null,database:null,properties:R};m.set(T,N);for(let F of y.directives){if(F.name.value==="table"){for(let J of F.arguments)N[J.name.value]=J.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=T),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,h.push(N)}if(F.name.value==="sealed"&&(N.sealed=!0),F.name.value==="splitSegments"&&(N.splitSegments=!0),F.name.value==="replicate"&&(N.replicate=!0),F.name.value==="export"){N.export=!0;for(let J of F.arguments)typeof N.export!="object"&&(N.export={}),N.export[J.name.value]=J.value.value}}let C=!1,j={};for(let F of y.fields){let $=q(F.type);$.name=F.name.value,R.push($),j[$.name]=void 0;for(let J of F.directives){let K=J.name.value;if(K==="primaryKey")C?console.warn("Can not define two attributes as a primary key at",J.loc):($.isPrimaryKey=!0,C=!0);else if(K==="indexed"){let te={};for(let fe of J.arguments||[])te[fe.name.value]=fe.value.value;$.indexed=te}else if(K==="computed"){for(let te of J.arguments||[])if(te.name.value==="from"){let fe=te.value.value;$.computed={from:g(fe,te,j)},$.version==null&&($.version=fe)}else te.name.value==="version"&&($.version=te.value.value);$.computed=$.computed||!0}else if(K==="relationship"){let te={};for(let fe of J.arguments)te[fe.name.value]=fe.value.value;$.relationship=te}else if(K==="createdTime")$.assignCreatedTime=!0;else if(K==="updatedTime")$.assignUpdatedTime=!0;else if(K==="expiresAt")$.expiresAt=!0;else if(K==="allow"){let te=$.authorizedRoles=[];for(let fe of J.arguments)fe.name.value==="role"&&te.push(fe.value.value)}else server.knownGraphQLDirectives.includes(K)&&console.warn(`@${K} is an unknown directive, at`,J.loc)}}N.type=T,T==="Query"&&(p=N)}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):Yoe.includes(y.type)||(0,oq.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,HN.dirname)(n),y.tableClass):i.set((0,HN.dirname)(n)+"/"+(y.export.name||y.type),y.tableClass,y.export));function g(y,T,R){return new iq.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 HN,iq,oq,Yoe,Woe,zoe,aq=le(()=>{HN=require("path"),iq=require("node:vm");Me();oq=w(ze()),Yoe=["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(kN,"start");Woe=kN,zoe=kN({ensureTable:je}).handleFile});var $N={};Oe($N,{start:()=>nae});function joe(e){if(e.kind!==Be.Kind.OPERATION_DEFINITION&&e.kind!==Be.Kind.FRAGMENT_DEFINITION)throw new Fr(`Unexpected non-executable definition type ${e.kind}.`)}function cq(e){if(typeof e!="object"||e===null)throw new Ji("Request body must be an object.");if(!("query"in e))throw new Ji("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ji("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ji("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ji("Request body `operationName` field must be a string.")}function GN(e){return parseInt(e.value,10)}function uq(e){return parseFloat(e.value)}function dq(e,t,r){let n=r.get(e.name.value);return fq(n)?mq(n,t):{attribute:t,value:n}}function fq(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function mq(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],fq(n)?mq(n,t):{attribute:t,value:n}))}function Qoe(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:GN(e.value)};case Be.Kind.FLOAT:return{attribute:t,value:uq(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:t,value:e.value.value};case Be.Kind.VARIABLE:return dq(e.value,t,r);case Be.Kind.OBJECT:return hq(e.value,t,r);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Fr(`Value type, ${e.value.kind}, is not supported.`)}}function hq(e,t,r){return e.fields.flatMap(n=>Qoe(n,t,r))}function Joe(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:GN(e.value)};case Be.Kind.FLOAT:return{attribute:e.name.value,value:uq(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Be.Kind.VARIABLE:return dq(e.value,e.name.value,t);case Be.Kind.OBJECT:return hq(e.value,[e.name.value],t);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Fr(`Argument type, ${e.value.kind}, is not supported.`)}}function Xoe(e,t){return e.flatMap(r=>Joe(r,t))}function Xg(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 Fr(`Fragment \`${n}\` not found.`);return Xg(s.selectionSet,t)}case Be.Kind.INLINE_FRAGMENT:return Xg(r.selectionSet,t)}})}function pq(e,t){return Xg(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:pq(r.selectionSet,t)}:r.name.value)}async function Zoe(e,t,r,n){let s=bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Fr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:pq(e.selectionSet,r),conditions:Xoe(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 Eq(e){switch(e.kind){case Be.Kind.NULL:return null;case Be.Kind.INT:return GN(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]:Eq(r.value),...t}),{});case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Fr(`Value type, ${e.kind}, is not supported.`)}}function eae(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=Eq(n.defaultValue)),n.type.kind===Be.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Fr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function tae(e,t,r,n){if(e.operation===Be.OperationTypeNode.SUBSCRIPTION)throw new Fr("Subscriptions are not supported.");if(e.operation===Be.OperationTypeNode.MUTATION)throw new Fr("Mutations are not supported yet.");let s=eae(e.variableDefinitions,t),i=await Promise.all(Xg(e.selectionSet,r).map(c=>Zoe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function lq({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(joe(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 Fr("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 Fr(`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 Fr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Fr(`Operation \`${r}\` not found.`);let l=await tae(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function rae(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 cq(r),lq(r,e)}case"POST":{let r=await Ro(e.headers.get("content-type"),!0)(e._nodeRequest);return cq(r),lq(r,e)}default:throw new Ji("Method Not Allowed",405,{Allow:"GET, POST"})}}function nae(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await rae(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Fr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Fr)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,Fr,Ji,_q=le(()=>{Be=w(require("graphql"));yo();qu();o(joe,"assertExecutableDefinitionNode");o(cq,"assertRequestParams");o(GN,"processIntValueNode");o(uq,"processFloatValueNode");o(dq,"processVariableNode");o(fq,"isObject");o(mq,"transformObjectIntoQueryCondition");o(Qoe,"processObjectFieldNode");o(hq,"processObjectValueNode");o(Joe,"processArgumentNode");o(Xoe,"buildConditionsQuery");o(Xg,"fillInFragments");o(pq,"buildSelectQuery");o(Zoe,"processFieldNode");o(Eq,"processConstValueNode");o(eae,"resolveVariables");o(tae,"executeOperation");o(lq,"resolver");Fr=class extends Error{static{o(this,"GraphQLQueryingError")}},Ji=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(rae,"graphqlQueryingHandler");o(nae,"start")});var Aq=M((tve,yq)=>{var pd=require("validate.js"),Sq=st(),Ed=(H(),v(Y)),{handleHDBError:sae,hdbErrors:iae}=_e(),{HDB_ERROR_MSGS:rr,HTTP_STATUS_CODES:oae}=iae,VN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),aae={STRUCTURE_USER:"structure_user"},gq=Object.values(Ed.ROLE_TYPES_ENUM),cae="attribute_permissions",lae="attribute_name",{PERMS_CRUD_ENUM:_d}=Ed,uae=[cae,...Object.values(_d)],Tq=[_d.READ,_d.INSERT,_d.UPDATE],dae=[lae,...Tq];function fae(e){let t=VN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Rq(e,t)}o(fae,"addRoleValidation");function mae(e){let t=VN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Rq(e,t)}o(mae,"alterRoleValidation");function hae(e){let t=VN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Sq.validateObject(e,t)}o(hae,"dropRoleValidation");var pae=["operation","role","id","permission","hdb_user","access"];function Rq(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)pae.includes(n[a])||s.push(n[a]);s.length>0&&mr(rr.INVALID_ROLE_JSON_KEYS(s),r);let i=Sq.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{mr(a,r)}),e.permission){let a=Eae(e);a&&mr(a,r),gq.forEach(c=>{e.permission[c]&&!pd.isBoolean(e.permission[c])&&mr(rr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(gq.indexOf(a)<0){if(a===aae.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]||mr(rr.SCHEMA_NOT_FOUND(f),r)}continue}mr(rr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){mr(rr.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]){mr(rr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{uae.includes(d)||mr(rr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(_d).forEach(d=>{pd.isDefined(u[d])?pd.isBoolean(u[d])||mr(rr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):mr(rr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){mr(rr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){mr(rr.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(_=>{!dae.includes(_)&&_!==_d.DELETE&&mr(rr.INVALID_ATTR_PERM_KEY(_),r,a,l)}),!pd.isDefined(h.attribute_name)){mr(rr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let p=h.attribute_name;if(!d.includes(p)){mr(rr.INVALID_ATTRIBUTE_IN_PERMS(p),r,a,l);continue}Tq.forEach(_=>{pd.isDefined(h[_])?pd.isBoolean(h[_])||mr(rr.ATTR_PERM_NOT_BOOLEAN(_,p),r,a,l):mr(rr.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}`;mr(rr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return _ae(r)}o(Rq,"customValidate");yq.exports={addRoleValidation:fae,alterRoleValidation:mae,dropRoleValidation:hae};function Eae(e){let{operation:t,permission:r}=e;if(t===Ed.OPERATIONS_ENUM.ADD_ROLE||t===Ed.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 rr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?Ed.ROLE_TYPES_ENUM.SUPER_USER:Ed.ROLE_TYPES_ENUM.CLUSTER_USER;return rr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Eae,"validateNoSUPerms");function _ae(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:rr.ROLE_PERMS_ERROR,...e};return sae(new Error,n,oae.BAD_REQUEST)}else return null}o(_ae,"generateRolePermResponse");function mr(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(mr,"addPermError")});var Ih=M((sve,wq)=>{"use strict";var bq=an(),Iq=on(),gae=ka(),YN=Aq(),WN=Po(),nve=require("uuid").v4,Sae=require("util"),Zg=(H(),v(Y)),Tae=ie(),zN=Iq.searchByValue,Rae=Iq.searchByHash,yae=Sae.promisify(gae.delete),Aae=ci(),bae=zu(),{hdbErrors:Iae,handleHDBError:Ol}=_e(),{HDB_ERROR_MSGS:Nq,HTTP_STATUS_CODES:bh}=Iae,{UserEventMsg:jN}=ai();wq.exports={addRole:Nae,alterRole:wae,dropRole:Oae,listRoles:Cae};function KN(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(KN,"scrubRoleDetails");async function Nae(e){let t=YN.addRoleValidation(e);if(t)throw t;e=KN(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 zN(r)||[])}catch(i){throw Ol(i)}if(n&&n.length>0)throw Ol(new Error,Nq.ROLE_ALREADY_EXISTS(e.role),bh.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 bq.insert(s),WN.signalUserChange(new jN(process.pid)),e=KN(e),e}o(Nae,"addRole");async function wae(e){let t=YN.alterRoleValidation(e);if(t)throw t;e=KN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await bq.update(r)}catch(s){throw Ol(s)}if(n&&n?.message==="updated 0 of 1 records")throw Ol(new Error,"Invalid role id",bh.BAD_REQUEST,void 0,void 0,!0);return await WN.signalUserChange(new jN(process.pid)),e}o(wae,"alterRole");async function Oae(e){let t=YN.dropRoleValidation(e);if(t)throw Ol(new Error,t,bh.BAD_REQUEST,void 0,void 0,!0);let r=new bae(Zg.SYSTEM_SCHEMA_NAME,Zg.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Rae(r));if(n.length===0)throw Ol(new Error,Nq.ROLE_NOT_FOUND,bh.NOT_FOUND,void 0,void 0,!0);let s=new Aae(Zg.SYSTEM_SCHEMA_NAME,Zg.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await zN(s)),a=!1;if(Tae.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Ol(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,bh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await yae(c),WN.signalUserChange(new jN(process.pid)),`${n[0].role} successfully deleted`}o(Oae,"dropRole");async function Cae(){return zN({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(Cae,"listRoles")});var QN={};Oe(QN,{start:()=>Pq,startOnMainThread:()=>Dae});function Pq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Oq.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(Pae.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 Lae(i)}}}async function Lae(e){let t=ot().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Cq.isEqual)(i,e)?void 0:(e.id=r.id,(0,eS.alterRole)(e))}return(0,eS.addRole)(e)}var eS,Oq,Cq,Pae,Dae,Lq=le(()=>{Me();eS=w(Ih()),Oq=require("yaml"),Cq=require("lodash"),Pae=["super_user","cluster_user","structure_user"];o(Pq,"start");o(Lae,"ensureRole");Dae=Pq});async function tS(e){let t=(0,vq.pathToFileURL)(e).toString();if(Mae)return Nh||(Nh=vae(xae)),(await(await Nh).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function vae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Nh=new Compartment({console,Math,Date,fetch:Uae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Mq.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Ur,s.tables=dn,s.databases=ke}};let n=await(0,Dq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Nh}function Uae(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 xae(){return{Resource:Ur,tables:dn}}var Dq,Mq,vq,Mae,Nh,JN=le(()=>{Ma();Me();Dq=require("fs/promises"),Mq=require("path"),vq=require("url"),Mae=!1;o(tS,"secureImport");o(vae,"getCompartment");o(Uae,"secureOnlyFetch");o(xae,"getGlobalVars")});var XN={};Oe(XN,{handleApplication:()=>Bae,suppressHandleApplicationWarning:()=>Fae});function xq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Bae(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}tS(t.absolutePath).then(r=>{let n=(0,Uq.dirname)(t.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");xq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),Bq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function Bq(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;xq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&Bq(e,s,i)}}var Uq,Fae,Fq=le(()=>{JN();Uq=require("path");o(xq,"isResource");o(Bae,"handleApplication");o(Bq,"recurseForResources");Fae=!0});var ew={};Oe(ew,{start:()=>Hae});function Hae({resources:e}){e.set("login",ZN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var ZN,Hq=le(()=>{Ma();o(Hae,"start");ZN=class extends Ur{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 Vq(e){let t={openapi:kae,info:{title:"HarperDB HTTP REST interface",version:$q.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:N,elements:C,relationship:q,definition:j}of a){if(q)R==="array"?u[N]={type:"array",items:{$ref:Ya+C.type}}:u[N]={$ref:Ya+R};else{let F=j??C?.definition;if(F){if(!t.components.schemas[F.type]){let $={};F.properties.forEach(J=>{$[J.name]=new sw(tw[J.type],J.type)}),t.components.schemas[F.type]=new Gq($)}R==="array"?u[N]={type:"array",items:{$ref:Ya+F.type}}:u[N]={$ref:Ya+F.type}}else R==="array"?C.type==="Any"||C.type=="ID"?u[N]={type:"array",items:{format:C.type}}:u[N]={type:"array",items:new sw(tw[C.type],C.type)}:R==="Any"||R=="ID"?u[N]={format:R}:u[N]=new sw(tw[R],R)}d.push(new iw(N,"query",u[N]))}let f=Object.keys(u),m=new iw(c,"path",{format:"ID"});m.required=!0,m.description="primary key of record";let h=new iw("property","path",{enum:f});h.required=!0,t.components.schemas[i]=new Gq(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 qae(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new rw(d,r,{200:new nw({$ref:Ya+i})},"search for records by the specified property name and value pairs")),y&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new qq(d,r,"delete all the records that match the provided query",{204:new kq})),T="/"+s+"/{"+c+"}",g&&(t.paths[T]={},t.paths[T].get=new rw([m],r,{200:new nw({$ref:Ya+i})},"retrieve a record by its primary key")),_&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Gae([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 qq([m],r,"delete a record with the given primary key",{204:new kq})),g&&h.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new rw([m,h],r,{200:new nw({enum:f})},"used to retrieve the specified property of the specified record"))}return t}function qae(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ya+e}}}},this.security=t,this.responses={200:{description:ow,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function rw(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function nw(e){this.description=ow,this.content={"application/json":{schema:e}}}function kq(){this.description="successfully processed request, no content returned to client"}function Gae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ya+r}}}},this.responses={200:{description:ow}}}function qq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function Gq(e){this.type="object",this.properties=e}function sw(e,t){this.type=e,this.format=t}function iw(e,t,r){this.name=e,this.in=t,this.schema=r}var $q,kae,tw,Ya,ow,Kq=le(()=>{$q=w(It()),kae="3.0.3",tw={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ya="#/components/schemas/",ow="successful operation";o(Vq,"generateJsonApi");o(qae,"Post");o(rw,"Get");o(nw,"Response200");o(kq,"Response204");o(Gae,"Put");o(qq,"Delete");o(Gq,"ResourceSchema");o(sw,"Type");o(iw,"Parameter")});var Wq={};Oe(Wq,{Request:()=>Wa,createReuseportFd:()=>rS});var Yq,Wa,aw,cw,rS,wh=le(()=>{Yq=require("os"),Wa=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 cw(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 aw(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)}},aw=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)}},cw=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,Yq.platform)()!="win32"&&(rS=require("node-unix-socket").createReuseportFd)});var sS={};Oe(sS,{parseHeaderValue:()=>uw,start:()=>Kae});async function Vae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&U_(e);let i=new Cs;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==zq){let g=nS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new si(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let y=uw(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=uw(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 Ft(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Ro(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new gd.ClientError(g,400)}if(e.authorize=!0,a===zq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return Vq(nS);throw new gd.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 gd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new gd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,h;if(f==null)m=s==="GET"||s==="HEAD"?404:204,lw.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f.status>0&&f.headers){let g=Mk(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=hm(f.data,e,f)),f}else if(h=e.lastModified){$ae[0]=h;let g=String.fromCharCode(34,(zr[0]&63)+62,(zr[0]>>6)+(zr[1]<<2&63)+62,(zr[1]>>4)+(zr[2]<<4&63)+62,(zr[2]>>2)+62,(zr[3]&63)+62,(zr[3]>>6)+(zr[4]<<2&63)+62,(zr[4]>>4)+(zr[5]<<4&63)+62,(zr[5]>>2)+62,(zr[6]&63)+62,(zr[6]>>6)+(zr[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),lw.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=hm(f,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(a){a.statusCode?a.statusCode===500?mi.warn(a):mi.info(a):mi.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=hm(a.contentType?a:Jq(a),e,c),c}}function Kae(e){lw=e,e.includeExpensiveRecordCountEstimates&&(Wa.prototype.includeExpensiveRecordCountEstimates=!0),!jq&&(jq=!0,nS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Vae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Oh++;let s=new Kn;Qq||(Qq=!0,fh(l=>{Oh>0&&l.push({metric:"ws-connections",connections:Oh,byThread:!0})}));let i;t.on("error",l=>{i=!0,mi.warn(l)});let a;t.on("message",o(function(u){a||(a=Ro(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);at(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{Oh--,Wr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=nS.getMatch(l,"ws");if(Wr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,at(p=>({count:p.count,total:Oh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new si(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await Ft(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let h;for(;!(h=await c.next()).done;){let p=await wa(h.value,r);t.send(p),at(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?mi.warn(l):mi.info(l):mi.error(l),t.close(Yae[l.statusCode]||1011,Jq(l))}t.close()},e))}function uw(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 mi,gd,Jq,zr,$ae,lw,zq,jq,nS,Qq,Oh,Yae,Xq=le(()=>{yo();ji();mi=w(z()),gd=w(_e());x_();bu();kc();hh();Kq();wh();F_();({errorToString:Jq}=mi),zr=new Uint8Array(8),$ae=new Float64Array(zr.buffer,0,1),lw={},zq="openapi";o(Vae,"http");Oh=0;o(Kae,"start");Yae={401:3e3,403:3003};o(uw,"parseHeaderValue")});var dw=M((Pve,eG)=>{var{recordAction:iS,recordActionBinary:Zq}=(ji(),v(Bg)),Wae=require("fastify-plugin"),zae=200;eG.exports=Wae(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),iS(a,"duration",u,f,d),Zq(s.raw.statusCode<400,"success",u,f,d),Zq(1,"response_"+s.raw.statusCode,u,f,d);let m=zae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{iS(performance.now()-c,"transfer",u,f,d),iS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,iS(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 rG=M((Lve,tG)=>{var jae=st(),Qae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};tG.exports=function(e){return jae.validateObject(e,Qae)}});var Ch=M((Dve,nG)=>{"use strict";var Jae=(H(),v(Y)).OPERATIONS_ENUM,fw=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Jae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};nG.exports=fw});var Dh={};Oe(Dh,{createTokens:()=>pw,getJWTRSAKeys:()=>uS,refreshOperationToken:()=>Ew,validateOperationToken:()=>_w,validateRefreshToken:()=>dS});async function uS(){if(oS)return oS;try{let e=Ph.default.join(Lh.default.getHdbBasePath(),oA),t=await aS.default.readFile(Ph.default.join(e,Jf.JWT_PASSPHRASE_NAME),"utf8"),r=await aS.default.readFile(Ph.default.join(e,Jf.JWT_PRIVATE_KEY_NAME),"utf8");return oS={publicKey:await aS.default.readFile(Ph.default.join(e,Jf.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},oS}catch(e){throw lS.default.error(e),new hi.ClientError(Td.NO_ENCRYPTION_KEYS,Sd.INTERNAL_SERVER_ERROR)}}async function pw(e){let t=(0,mw.validateBySchema)(e,Xi.default.object({username:Xi.default.string().optional(),password:Xi.default.string().optional(),role:Xi.default.string().optional(),expires_in:Xi.default.alternatives(Xi.default.string(),Xi.default.number()).optional()}));if(t)throw new hi.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,hw.findAndValidateUser)(e.username,e.password,f)}catch(f){throw lS.default.error(f),new hi.ClientError(Td.INVALID_CREDENTIALS,Sd.UNAUTHORIZED)}if(!r)throw new hi.ClientError(Td.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 uS(),c=await Rd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??cG,algorithm:cS,subject:yd.OPERATION}),l=await Rd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Xae,algorithm:cS,subject:yd.REFRESH}),u=eN(l,xr.SHA256);if((await(0,sG.update)(new iG.default(Qf,Ru.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new hi.ClientError(Td.REFRESH_TOKEN_SAVE_FAILED,Sd.INTERNAL_SERVER_ERROR);return oG.default.signalUserChange(new aG.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function Ew(e){let t=(0,mw.validateBySchema)(e,Xi.default.object({refresh_token:Xi.default.string().required()}).required());if(t)throw new hi.ClientError(t.message);let{refresh_token:r}=e;await dS(r);let n=await uS(),s=await Rd.default.decode(r);return{operation_token:await Rd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:cG,algorithm:cS,subject:yd.OPERATION})}}async function _w(e){return lG(e,yd.OPERATION)}async function dS(e){return lG(e,yd.REFRESH)}async function lG(e,t){try{let r=await uS(),n=await Rd.default.verify(e,r.publicKey,{algorithms:cS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,hw.findAndValidateUser)(n.username,void 0,!1);if(t===yd.REFRESH&&!tN(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw lS.default.warn(r),r?.name==="TokenExpiredError"?new hi.ClientError(Td.TOKEN_EXPIRED,Sd.FORBIDDEN):new hi.ClientError(Td.INVALID_TOKEN,Sd.UNAUTHORIZED)}}var Rd,aS,Ph,Xi,mw,hi,lS,hw,sG,iG,oG,aG,Lh,Sd,Td,cG,Xae,cS,yd,oS,Ad=le(()=>{Rd=w(require("jsonwebtoken")),aS=w(require("fs-extra")),Ph=w(require("node:path")),Xi=w(require("joi")),mw=w(st());H();hi=w(_e()),lS=w(z());Ag();hw=w(rs()),sG=w(an()),iG=w(Ch()),oG=w(Po()),aG=w(ai()),Lh=w(ae()),{HTTP_STATUS_CODES:Sd,AUTHENTICATION_ERROR_MSGS:Td}=hi.hdbErrors;Lh.default.initSync();cG=Lh.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Xae=Lh.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",cS="RS256",yd={OPERATION:"operation",REFRESH:"refresh"};o(uS,"getJWTRSAKeys");o(pw,"createTokens");o(Ew,"refreshOperationToken");o(_w,"validateOperationToken");o(dS,"validateRefreshToken");o(lG,"validateToken")});var gw=M((Bve,fG)=>{"use strict";var Zae=rG(),bd=require("passport"),ece=require("passport-local").Strategy,tce=require("passport-http").BasicStrategy,rce=require("util"),nce=rs(),dG=rce.callbackify(nce.findAndValidateUser),xve=rn(),sce=(H(),v(Y)),uG=(Ad(),v(Dh));bd.use(new ece(function(e,t,r){dG(e,t,r)}));bd.use(new tce(function(e,t,r){dG(e,t,r)}));bd.serializeUser(function(e,t){t(null,e)});bd.deserializeUser(function(e,t){t(null,e)});function ice(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":bd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===sce.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?uG.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):uG.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:bd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(ice,"authorize");function oce(e,t){let r=Zae(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(oce,"checkPermissions");fG.exports={authorize:ice,checkPermissions:oce}});var fS=M((Hve,mG)=>{"use strict";var ace=Xn();mG.exports={writeTransaction:cce};function cce(e,t,r){return ace.writeTransaction(e,t,r)}o(cce,"writeTransaction")});var _G=M((Gve,EG)=>{"use strict";var lce=on(),uce=ws(),hG=z(),dce=an(),qve=fS(),fce=require("clone"),Tw=require("alasql"),mce=fg(),pG=require("util"),hce=pG.promisify(uce.getTableSchema),pce=pG.promisify(lce.search),Ece=(H(),v(Y)),Sw=ie();mce(Tw);EG.exports={update:gce};var _ce="There was a problem performing this update. Please check the logs and try again.";async function gce({statement:e,hdb_user:t}){let r=await hce(e.table.databaseid,e.table.tableid),n=Sce(e.columns);Sw.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=fce(s),c=Sw.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=Tw.parse(l).statements[0],d=await pce(u),f=Tce(n,d);return Rce(a,f,t)}o(gce,"update");function Sce(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Tw.compile(`SELECT ${r.expression.toString()} AS [${Ece.FUNC_VAL}] FROM ?`)}),t}catch(t){throw hG.error(t),new Error(_ce)}}o(Sce,"createUpdateRecord");function Tce(e,t){return Sw.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Tce,"buildUpdateRecords");async function Rce(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await dce.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){hG.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Rce,"updateRecords")});var SG=M((Yve,gG)=>{var yce=require("alasql"),Ace=on(),bce=z(),Ice=Xn(),yw=require("util"),Rw=ie(),Nce=(H(),v(Y)),wce=ws(),Vve=fS(),Kve=an(),Oce="record",Cce="successfully deleted",Pce=yw.callbackify(vce),Lce=yw.promisify(Ace.search),Dce=yw.promisify(wce.getTableSchema);gG.exports={convertDelete:Pce};function Mce(e){return`${e.deleted_hashes.length} ${Oce}${e.deleted_hashes.length===1?"":"s"} ${Cce}`}o(Mce,"generateReturnMessage");async function vce({statement:e,hdb_user:t}){let r=await Dce(e.table.databaseid,e.table.tableid);Rw.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Rw.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=yce.parse(a).statements[0],l={operation:Nce.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Lce(c);let u=await Ice.deleteRecords(l);return Rw.isEmptyOrZeroLength(u.message)&&(u.message=Mce(u)),delete u.txn_time,u}catch(u){throw bce.error(u),u.hdb_code?u.message:u}}o(vce,"convertDelete")});var bG=M((zve,AG)=>{"use strict";var Uce=vo(),{hdbErrors:TG}=_e(),{getDatabases:RG}=(Me(),v(gt));AG.exports={checkSchemaExists:yG,checkSchemaTableExists:xce,schemaDescribe:Uce};async function yG(e){if(!RG()[e])return TG.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(yG,"checkSchemaExists");async function xce(e,t){let r=await yG(e);if(r)return r;if(!RG()[e][t])return TG.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(xce,"checkSchemaTableExists")});var ww=M((Zve,xG)=>{"use strict";var{decode:Bce}=require("msgpackr"),{isMainThread:Qve,parentPort:Jve,threadId:Xve}=require("worker_threads"),pS=Gt(),Id=ht(),Iw=(H(),v(Y)),fn=z(),bw=ae(),Fce=(H(),v(Y)),{onMessageByType:Hce}=ze(),OG=Ki(),{recordAction:IG,recordActionBinary:kce}=(ji(),v(Bg)),{publishToStream:qce}=pS,{ConsumerEvents:NG}=require("nats"),Gce=on(),{promisify:$ce}=require("util"),{decodeBlobsWithWrites:Vce}=(Yn(),v(E_)),CG=$ce(setTimeout),ES=1e4,_S,hS,Kce,Yce,PG,Mh=new Map,Nd=new Map;xG.exports={initialize:LG,ingestConsumer:Nw,setSubscription:Wce,setIgnoreOrigin:Qce,getDatabaseSubscriptions:jce,updateConsumer:DG};async function LG(){Hce(Iw.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await DG(n)}),PG=!0,fn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await pS.getNATSReferences();_S=e,hS=e.info.server_name,Kce=t,Yce=r}o(LG,"initialize");async function DG(e){if(e.status==="start"){let{js:t,jsm:r}=await MG(e.node_domain_name);Nw(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Mh.get(e.stream_name+e.node_domain_name);t&&(fn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Mh.set(e.stream_name+e.node_domain_name,"close")),Nd.get(e.node_domain_name)==="failed"&&Nd.set(e.node_domain_name,"close")}}o(DG,"updateConsumer");var gS=new Map;function Wce(e,t,r){let n=gS.get(e);n||gS.set(e,n=new Map),n.set(t,r),PG||LG().then(zce)}o(Wce,"setSubscription");async function zce(){let e=await Gce.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Id.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await MG(r),!n))break;let{schema:a,table:c}=i,l=OG.createNatsTableStreamName(a,c);Nw(l,n,s,r)}}}o(zce,"accessConsumers");async function MG(e){let t,r,n=1;for(;!r;)try{t=await _S.jetstream({domain:e}),r=await _S.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Nd.get(e)==="close")break;Nd.set(e,"failed"),n%10===1&&fn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<ES?n++*100:ES;await CG(i)}return{js:t,jsm:r}}o(MG,"connectToRemoteJS");function jce(){return gS}o(jce,"getDatabaseSubscriptions");var vG;function Qce(e){vG=e}o(Qce,"setIgnoreOrigin");var UG=100,wG=new Array(UG),mS=0;async function Nw(e,t,r,n){let{connection:s}=await pS.getNATSReferences();_S=s,hS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,hS),fn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Nd.get(n)==="close")break;a%10===1&&fn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(fn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await pS.createConsumer(r,e,hS,new Date(Date.now()).toISOString()));let d=a++*100<ES?a++*100:ES;await CG(d)}let c=!1,l;for(;!c;){if(Mh.get(e+n)==="close"||Nd.get(n)==="close"){Mh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:bw.get(Iw.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Mh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===NG.ConsumerDeleted&&(await l.close(),c=!0),d.type===NG.HeartbeatsMissed){let f=d.data;fn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(fn.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 wG[mS],wG[mS]=Jce(d).catch(f=>{fn.error(f)}),++mS>=UG&&(mS=0)}catch(d){d.message==="consumer deleted"?(fn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):fn.error("Error consuming clustering ingest, restarting consumer",d)}}}o(Nw,"ingestConsumer");async function Jce(e){let t;await Vce(()=>{t=Bce(e.data)}),IG(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),fn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=bw.get(Iw.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Id.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Id.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Id.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!vG),kce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Id.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;fn.trace("processing message:",a,c,u,(d?"records: "+d.map(C=>C?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),fn.trace(`messageProcessor nats msg id: ${e.headers.get(Id.MSG_HEADERS.NATS_MSG_ID)}`);let p;d||(d=f);let _=new Promise(C=>p=C),{timestamp:g,user:y,node_name:T}=m||{},R=gS.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:Aw(a),value:d[0],id:f?.[0],expiresAt:h,timestamp:g,table:u,onCommit:p,user:y,nodeName:T});else{let C=d.map((q,j)=>({type:Aw(a),value:q,expiresAt:h,id:f?.[j],table:u}));for(;l;)C.push({type:Aw(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:C,table:u,timestamp:g,onCommit:p,user:y,nodeName:T})}bw.get(Fce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&qce(e.subject.split(".").slice(0,-1).join("."),OG.createNatsTableStreamName(c,u),e.headers,e.data),await _;let N=Date.now()-g;g&&IG(N,"replication-latency",e.subject,a,"ingest")}catch(a){fn.error(a)}e.ack()}o(Jce,"messageProcessor");function Aw(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(Aw,"convertOperation")});var Gt=M((oUe,ZG)=>{"use strict";var Hr=ae();Hr.initSync();var Xce=require("fs-extra"),Zce=require("semver"),xh=require("path"),{monotonicFactory:ele}=require("ulidx"),FG=ele(),tle=require("util"),HG=require("child_process"),rle=tle.promisify(HG.exec),nle=HG.spawn,jr=ht(),Qe=(H(),v(Y)),{packageJson:sle,PACKAGE_ROOT:ile}=It(),SS=ie(),pi=z(),TS=Ki(),ole=fS(),vh=Ot(),{broadcast:ale,onMessageByType:cle,getWorkerIndex:lle}=ze(),{isMainThread:kG}=require("worker_threads"),{Encoder:ule,decode:Lw}=require("msgpackr"),qG=new ule,{isEmpty:Dl}=SS,GG=rs(),tUe=48*36e11;kG&&cle(Qe.ITC_EVENT_TYPES.RESTART,()=>{mn=void 0,Ll=void 0});var{connect:dle,StorageType:fle,RetentionPolicy:mle,AckPolicy:Dw,DeliverPolicy:Mw,DiscardPolicy:hle,NatsConnection:rUe,JetStreamManager:nUe,JetStreamClient:sUe,StringCodec:iUe,JSONCodec:ple,createInbox:vw,headers:Ele,ErrorCode:BG}=require("nats"),{recordAction:_le}=(ji(),v(Bg)),{encodeBlobsAsBuffers:gle}=(Yn(),v(E_)),$G=ple(),Sle="clustering",Tle=sle.engines[jr.NATS_SERVER_NAME],Rle=xh.join(ile,"dependencies"),Pw=xh.join(Rle,`${process.platform}-${process.arch}`,jr.NATS_BINARY_NAME),Ow,Cw,Uh,Cl,Pl;ZG.exports={runCommand:VG,checkNATSServerInstalled:yle,createConnection:Uw,getConnection:Bh,getJetStreamManager:Fh,getJetStream:YG,getNATSReferences:Zi,getServerList:ble,createLocalStream:xw,listStreams:WG,deleteLocalStream:Ile,getServerConfig:wd,listRemoteStreams:Nle,viewStream:wle,viewStreamIterator:Ole,publishToStream:Cle,request:Dle,reloadNATS:Bw,reloadNATSHub:Mle,reloadNATSLeaf:vle,extractServerName:Lle,requestErrorHandler:Ule,createLocalTableStream:JG,createTableStreams:Fle,purgeTableStream:XG,purgeSchemaTableStreams:Hle,getStreamInfo:kle,updateLocalStreams:Gle,closeConnection:Ale,getJsmServerName:RS,addNatsMsgHeader:zG,clearClientCache:KG,updateRemoteConsumer:xle,createConsumer:jG,updateConsumerIterator:Ble};async function VG(e,t=void 0){let{stdout:r,stderr:n}=await rle(e,{cwd:t});if(n)throw new Error(n.replace(`
16
16
  `,""));return r.replace(`
17
- `,"")}o(kG,"runCommand");async function Sle(){try{await jce.access(ww)}catch{return!1}let e=await kG(`${ww} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Qce.eq(t,_le)}o(Sle,"checkNATSServerInstalled");async function Dw(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await FG.getClusterUser();if(Dl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}pi.trace("create nats connection called");let i=await cle({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),pi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&pi.error("Error with Nats client connection, connection closed",a),i===fn&&qG()}),i}o(Dw,"createConnection");function qG(){fn=void 0,Cl=void 0,Pl=void 0,Ll=void 0}o(qG,"clearClientCache");async function Tle(){fn&&(await fn.drain(),fn=void 0,Cl=void 0,Pl=void 0,Ll=void 0)}o(Tle,"closeConnection");var fn,Ll;async function Bh(){return Ll||(Ll=Dw(Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),fn=await Ll),fn||Ll}o(Bh,"getConnection");async function Fh(){if(Cl)return Cl;Dl(fn)&&await Bh();let{domain:e}=wd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Cl=await fn.jetstreamManager({domain:e,timeout:6e4}),Cl}o(Fh,"getJetStreamManager");async function GG(){if(Pl)return Pl;Dl(fn)&&await Bh();let{domain:e}=wd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Pl=fn.jetstream({domain:e,timeout:6e4}),Pl}o(GG,"getJetStream");async function Zi(){let e=fn||await Bh(),t=Cl||await Fh(),r=Pl||await GG();return{connection:e,jsm:t,js:r}}o(Zi,"getNATSReferences");async function Rle(e){let t=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await FG.getClusterUser(),s=await Dw(t,r,n),i=Lw(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=HG.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 SS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Rle,"getServerList");async function Mw(e,t){let{jsm:r}=await Zi(),n=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:lle.File,retention:ule.Limits,subjects:t,discard:dle.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(Mw,"createLocalStream");async function $G(){let{jsm:e}=await Zi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o($G,"listStreams");async function yle(e){let{jsm:t}=await Zi();await t.streams.delete(e)}o(yle,"deleteLocalStream");async function Ale(e){let{connection:t}=await Zi(),r=[],n=Lw(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(HG.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(Ale,"listRemoteStreams");async function ble(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=vG(),a={durable_name:i,ack_policy:Cw.Explicit};t&&(a.deliver_policy=Pw.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=Ow(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(jr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(ble,"viewStream");async function*Ile(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=vG(),a={durable_name:i,ack_policy:Cw.Explicit};t&&(a.deliver_policy=Pw.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=Ow(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(jr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Ile,"viewStreamIterator");async function Nle(e,t,r,n){pi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=VG(n,r);let{js:s}=await Zi(),i=await RS(),a=`${e}.${i}`,c=await ple(()=>n instanceof Uint8Array?n:BG.encode(n));try{pi.trace(`publishToStream publishing to subject: ${a}`),hle(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 YG(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){pi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await Mw(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Nle,"publishToStream");function VG(e,t){t===void 0&&(t=mle());let r=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(jr.MSG_HEADERS.ORIGIN)&&r&&t.append(jr.MSG_HEADERS.ORIGIN,r),t}o(VG,"addNatsMsgHeader");function wd(e){e=e.toLowerCase();let t=xh.join(Hr.get(Qe.CONFIG_PARAMS.ROOTPATH),Ele);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Dl(Nw)&&(Nw={port:vh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:vh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.HUB,config_file:jr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:xh.join(t,jr.PID_FILES.HUB),hdbNatsPath:t}),Nw;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Dl(Iw)&&(Iw={port:vh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:vh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.LEAF,config_file:jr.NATS_CONFIG_FILES.LEAF_SERVER,domain:vh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.LEAF,pid_file_path:xh.join(t,jr.PID_FILES.LEAF),hdbNatsPath:t}),Iw;pi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(wd,"getServerConfig");async function KG(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Cw.Explicit,durable_name:r,deliver_policy:Pw.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(KG,"createConsumer");async function wle(e,t,r){await e.consumers.delete(t,r)}o(wle,"removeConsumer");function Ole(e){return e.split(".")[1]}o(Ole,"extractServerName");async function Cle(e,t,r=6e4,n=Lw()){if(!SS.isObject(t))throw new Error("data param must be an object");let s=BG.encode(t),{connection:i}=await Zi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return Ow(c.data)}o(Cle,"request");function vw(e){return new Promise(async(t,r)=>{let n=ele(ww,["--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(vw,"reloadNATS");async function Ple(){let{pid_file_path:e}=wd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await vw(e)}o(Ple,"reloadNATSHub");async function Lle(){let{pid_file_path:e}=wd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await vw(e)}o(Lle,"reloadNATSLeaf");function Dle(e,t,r){let n;switch(e.code){case MG.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case MG.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(Dle,"requestErrorHandler");async function Mle(e,t){let r=t+jr.SERVER_SUFFIX.LEAF,{connection:n}=await Zi(),{jsm:s}=await qle(r),{schema:i,table:a}=e,c=TS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await YG(async()=>{if(e.subscribe===!0)await KG(s,c,n.info.server_name,l);else try{await wle(s,c,n.info.server_name)}catch(u){pi.trace(u)}})}o(Mle,"updateRemoteConsumer");async function vle(e,t,r,n){let s=TS.createNatsTableStreamName(e,t),i=r+jr.SERVER_SUFFIX.LEAF,a={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!xG&&ole()<Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=bw();await c(a)}await sle(a),n==="stop"&&await SS.asyncSetTimeout(1e3)}o(vle,"updateConsumerIterator");function YG(e){return nle.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(YG,"exclusiveLock");async function WG(e,t){let r=TS.createNatsTableStreamName(e,t),n=await RS(),s=Fle(e,t,n);await Mw(r,[s])}o(WG,"createLocalTableStream");async function Ule(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await WG(n,s)}}o(Ule,"createTableStreams");async function zG(e,t,r=void 0){if(Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=TS.createNatsTableStreamName(e,t),{domain:s}=wd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Bh()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")pi.warn(n);else throw n}}o(zG,"purgeTableStream");async function xle(e,t){if(Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await zG(e,t[r])}o(xle,"purgeSchemaTableStreams");async function Ble(e){return(await Fh()).streams.info(e)}o(Ble,"getStreamInfo");function Fle(e,t,r){return`${jr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(Fle,"createSubjectName");async function RS(){if(Uh)return Uh;if(Uh=(await Fh())?.nc?.info?.server_name,Uh===void 0)throw new Error("Unable to get jetstream manager server name");return Uh}o(RS,"getJsmServerName");async function Hle(){let e=await Fh(),t=await RS(),r=await $G();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=kle(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(".");pi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(Hle,"updateLocalStreams");function kle(e){let{config:t}=e,r=!1,n=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Hr.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(kle,"updateStreamLimits");async function qle(e){let t,r;try{t=await fn.jetstream({domain:e}),r=await fn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw pi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(qle,"connectToRemoteJS")});function Uw(e){let t=e.get(yS),r=t?(0,Od.unpack)(t):null;r||(r={remoteNameToId:{}});let n=et(),s=!1;r.nodeName=et();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:kh(e)??1,nodes:[]})})}i[n]=0,e.putSync(yS,(0,Od.pack)(r))}return r}function Hh(e){return Uw(e).remoteNameToId}function JG(e,t){let r=Uw(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(yS,(0,Od.pack)(r)),s}function AS(e,t){let r=Uw(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(yS,(0,Od.pack)(r))}return QG.trace?.("The remote node name map",e,n,s),s}var QG,Od,yS,xw=ce(()=>{QG=w(ri());is();Od=require("msgpackr"),yS=Symbol.for("remote-ids");o(Uw,"getIdMappingRecord");o(Hh,"exportIdMapping");o(JG,"remoteToLocalNodeId");o(AS,"getIdOfRemoteNode")});var Bw={};we(Bw,{commitsAwaitingReplication:()=>Cd,getHDBNodeTable:()=>zt,getReplicationSharedStatus:()=>Pd,iterateRoutes:()=>Gh,shouldReplicateToNode:()=>qh,subscribeToNodeUpdates:()=>Ld});function zt(){return XG||(XG=je({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 Pd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Ld(e){zt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;r$.debug?.("adding node",n,"on node",et()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==et()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of zt().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 qh(e,t){let r=za.default.get(U.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>(typeof n=="string"?n:n.name)===t&&(!n.sharded||e.shard===za.default.get(U.REPLICATION_SHARD))))&&zt().primaryStore.get(et())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function Gle(){Ld(e=>{ja({},(t,r)=>{let n=e.name,s=ZG.get(n);if(s||ZG.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=Pd(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Cd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Gh(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=za.default.get(U.REPLICATION_SECUREPORT)??(!za.default.get(U.REPLICATION_PORT)&&za.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||za.default.get(U.REPLICATION_PORT)||za.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){e$.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 e$,t$,za,r$,XG,ZG,Cd,Ml=ce(()=>{Me();is();cm();e$=require("worker_threads"),t$=w(ge()),za=w(oe());H();r$=w(ri());server.nodes=[];o(zt,"getHDBNodeTable");o(Pd,"getReplicationSharedStatus");o(Ld,"subscribeToNodeUpdates");o(qh,"shouldReplicateToNode");ZG=new Map;Mv((e,t,r)=>{if(r>server.nodes.length)throw new t$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Cd||(Cd=new Map,Gle());let n=Cd.get(e);return n||(n=[],Cd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(Gle,"startSubscriptionToReplications");o(Gh,"iterateRoutes")});var i$={};we(i$,{connectedToNode:()=>vl,disconnectedFromNode:()=>Md,ensureNode:()=>Fo,requestClusterStatus:()=>s$,startOnMainThread:()=>Hw});async function Hw(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){bS.set(i,kh(l.auditStore));break}}}to.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=et();function c(){let l=zt().primaryStore.get(a);if(l!==null){let u=e.url??Qa();if(l===void 0||l.url!==u||l.shard!==e.shard)return Fo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),zt().primaryStore.get(a)&&c();for(let l of Gh(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)}Ld(s)});let n;function s(i,a=i?.name){let c=et()&&a===et()||Qa()&&i?.url===Qa();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of zt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ct.trace("Setting up node replication for",i),!i){for(let[f,m]of eo){let h;for(let[p,{worker:_,nodes:g}]of m){let R=g[0];if(R&&R.name==a){h=!0;for(let[T,{worker:y}]of m)m.delete(T),ct.warn("Node was deleted, unsubscribing from node",a,T,f),y?.postMessage({type:"unsubscribe-from-node",node:a,database:T,url:f});break}}if(h){eo.get(f).iterator.remove(),eo.delete(f);return}}return}if(c)return;if(!i.url){ct.info(`Node ${i.name} is missing url`);return}let l=eo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ct.info(`Added node ${i.name} at ${i.url} for process ${et()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Dd)if(i.url===m.url){Dd.delete(f);break}Dd.set(i.name,i)}let u=it();if(l||(l=new Map,eo.set(i.url,l)),l.iterator=ja(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]||(ct.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ct.trace("Setting up replication for database",f,"on node",i.name);let h=l.get(f),p,_=[{replicateByDefault:m,...i}];bS.has(f)&&$h.default.get(U.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:m,name:et(),startTime:bS.get(f),endTime:Date.now(),replicates:!0}),bS.delete(f));let g=qh(i,f),R=to.workers.filter(T=>T.name==="http");if(h?(p=h.worker,h.nodes=_):g&&(t=t%R.length,p=R[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):Vh(T)},$le);else{ct.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:zt().primaryStore.get(et())?.replicates}),zt().primaryStore.get(et())?.replicates||(n=!1,ct.info("Disabling replication, this node name",et(),zt().primaryStore.get(et()),f));let T={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};p?p.postMessage(T):NS(T)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Md=o(function(i){try{ct.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Dd.keys()),c=a.sort(),l=c.indexOf(i.name||Ei(i.url));if(l===-1){ct.warn("Disconnected node not found in node map",i.name,a);return}let u=eo.get(i.url),d=u?.get(i.database);if(!d){ct.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!$h.default.get(U.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,h=(l+1)%c.length;for(;l!==h;){let p=c[h],_=Dd.get(p);u=eo.get(_.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){h=(h+1)%c.length;continue}let{worker:R,nodes:T}=g,y=!1;for(let N of d.nodes){if(T.some(O=>O.name===N.name)){ct.info(`Disconnected node is already failing over to ${p} for ${i.database}`);continue}N.endTime<Date.now()||(T.push(N),y=!0)}if(d.nodes=[d.nodes[0]],!y){ct.info(`Disconnected node ${i.name} has no nodes to fail over to ${p}`);return}ct.info(`Failing over ${i.database} from ${i.name} to ${p}`),R?R.postMessage({type:"subscribe-to-node",database:i.database,nodes:T}):Vh({database:i.database,nodes:T});return}ct.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ct.error("Error failing over node",a)}},"disconnectedFromNode"),vl=o(function(i){let a=eo.get(i.url),c=a?.get(i.database);if(!c){ct.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ct.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ct.debug("Connected node is not named yet",i.database,c);return}if(!$h.default.get(U.REPLICATION_FAILOVER))return;c.nodes=[l];let u=!1;for(let d of eo.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:h,connected:p}=f;if(h)if(p===!1&&h[0].shard===l.shard)u=!0,c.nodes.push(h[0]);else{let _=h.filter(g=>g&&g.name!==l.name);_.length<h.length&&(f.nodes=_,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:h}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,to.onMessageByType)("disconnected-from-node",Md),(0,to.onMessageByType)("connected-to-node",vl),(0,to.onMessageByType)("request-cluster-status",s$)}function s$(e,t){let r=[];for(let[n,s]of Dd)try{let i=eo.get(s.url);ct.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(h=>!(h.endTime<Date.now())).map(h=>h.name)});let c=(0,Fw.cloneDeep)(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ct.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Fo(e,t){let r=zt();e=e??Ei(t.url),t.name=e;try{if(t.ca){let s=new n$.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){ct.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ct.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!$h.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,Fw.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])]}ct.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var to,IS,ct,Fw,$h,n$,$le,eo,Md,vl,Dd,bS,Kh=ce(()=>{Me();to=w(ze());is();IS=require("worker_threads");Ml();ct=w(j()),Fw=require("lodash"),$h=w(oe());H();n$=require("crypto"),$le=200,eo=new Map,Dd=new Map,bS=new Map;o(Hw,"startOnMainThread");o(s$,"requestClusterStatus");IS.parentPort&&(Md=o(e=>{IS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),vl=o(e=>{IS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,to.onMessageByType)("subscribe-to-node",e=>{Vh(e)}),(0,to.onMessageByType)("unsubscribe-from-node",e=>{NS(e)}));o(Fo,"ensureNode")});var as=M(jt=>{"use strict";var hr=require("path"),{watch:Vle}=require("chokidar"),Un=require("fs-extra"),vd=require("node-forge"),d$=require("net"),{generateKeyPair:kw,X509Certificate:Ho,createPrivateKey:f$}=require("crypto"),Kle=require("util");kw=Kle.promisify(kw);var Pt=vd.pki,_i=require("joi"),{v4:m$}=require("uuid"),{validateBySchema:Vw}=nt(),{forComponent:Yle}=j(),os=oe(),Ds=(H(),v(Y)),{CONFIG_PARAMS:xl}=Ds,gi=tN(),{ClientError:Xa}=ge(),OS=require("node:tls"),{relative:h$,join:Wle}=require("node:path"),{CERT_PREFERENCE_APP:TUe,CERTIFICATE_VALUES:o$}=gi,zle=Hc(),qw=Ot(),{table:jle,getDatabases:Qle,databases:wS}=(Me(),v(_t)),{getJWTRSAKeys:a$}=(Ad(),v(Dh)),gt=Yle("tls");jt.generateKeys=Ww;jt.updateConfigCert=y$;jt.createCsr=nue;jt.signCertificate=sue;jt.setCertTable=Ud;jt.loadCertificates=S$;jt.reviewSelfSignedCert=jw;jt.createTLSSelector=b$;jt.listCertificates=N$;jt.addCertificate=uue;jt.removeCertificate=fue;jt.createNatsCerts=aue;jt.generateCertsKeys=oue;jt.getReplicationCert=Wh;jt.getReplicationCertAuth=rue;jt.renewSelfSigned=cue;jt.hostnamesFromCert=Jw;jt.getKey=mue;jt.getHostnamesFromCertificate=hue;jt.getPrimaryHostName=Qw;var{urlToNodeName:p$,getThisNodeUrl:Jle,getThisNodeName:PS,clearThisNodeName:Xle}=(is(),v(ko)),{readFileSync:Zle,statSync:E$}=require("node:fs"),RUe=oe(),{getTicketKeys:eue,onMessageFromWorkers:tue}=ze(),Ja=j(),{isMainThread:_$}=require("worker_threads"),{TLSSocket:g$,createSecureContext:yUe}=require("node:tls"),Kw=3650,Yh=["127.0.0.1","localhost","::1"],Yw=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];tue(async e=>{e.type===Ds.ITC_EVENT_TYPES.RESTART&&(os.initSync(!0),await jw())});var Qr;function ec(){return Qr||(Qr=Qle().system.hdb_certificate,Qr||(Qr=jle({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__"}]}))),Qr}o(ec,"getCertTable");async function Wh(){let e=b$("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(PS());if(!r)return;let n=new Ho(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(Wh,"getReplicationCert");async function rue(){ec();let e=(await Wh()).options.cert,r=new Ho(e).issuer.match(/CN=(.*)/)?.[1];return Qr.get(r)}o(rue,"getReplicationCertAuth");var c$,Za=new Map;function S$(){if(c$)return;c$=!0;let e=[{configKey:xl.TLS},{configKey:xl.OPERATIONSAPI_TLS}];ec();let t=hr.dirname(qw.getConfigFilePath()),r;for(let{configKey:n}of e){let s=qw.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&h$(Wle(t,"keys"),a);c&&l$(a,l=>{Za.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&_$){let d;l$(u,f=>{if(o$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let h=A$(u),p=new Ho(h),_;try{_=Qw(p)}catch(y){gt.error("error extracting host name from certificate",y);return}if(_==null){gt.error("No host name found on certificate");return}if(p.checkIssued(new Ho(o$.cert)))return;let g=Qr.primaryStore.get(_),R=E$(u).mtimeMs,T=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=T){R<T&&gt.info(`Certificate ${_} at ${u} is older (${new Date(R)}) than the certificate in the database (${T>1?new Date(T):"only self signed certificate available"})`);return}r=Qr.put({name:_,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:h,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,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(S$,"loadCertificates");function l$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&_$&&gt.warn(`Reloading ${r}:`,i),n=c,t(A$(i)))}catch(c){gt.error(`Error loading ${r}:`,i,c)}},"loadFile");Un.existsSync(e)?s(e,E$(e)):gt.error(`${r} file not found:`,e),Vle(e,{persistent:!1}).on("change",s)}o(l$,"loadAndWatch");function Gw(){let e=Jle();if(e==null){let t=Yh[0];return gt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return p$(e)}o(Gw,"getHost");function CS(){let e=PS();if(e==null){let t=Yh[0];return gt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(CS,"getCommonName");async function nue(){let e=await Wh(),t=Pt.certificateFromPem(e.options.cert),r=Pt.privateKeyFromPem(e.options.key);gt.info("Creating CSR with cert named:",e.name);let n=Pt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:CS()},...Yw];gt.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:T$()}];return gt.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),vd.pki.certificationRequestToPem(n)}o(nue,"createCsr");function T$(){let e=Yh.includes(CS())?Yh:[...Yh,CS()];return e.includes(Gw())||e.push(Gw()),[{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=>d$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(T$,"certExtensions");async function sue(e){let t={},r=hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ec();for await(let d of Qr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Za.has(d.private_key_name)){n=Za.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Un.exists(hr.join(r,d.private_key_name))){n=Un.readFile(hr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await $w();s=d.ca,n=d.private_key}n=Pt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Pt.certificateFromPem(s.certificate);gt.info("Signing CSR with cert named",s.name);let a=Pt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return gt.error(d),new Error("Error verifying CSR: "+d.message)}let c=vd.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()+Kw),gt.info("sign cert setting validity:",c.validity),gt.info("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),gt.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;gt.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,vd.md.sha256.create()),t.certificate=Pt.certificateToPem(c)}else gt.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(sue,"signCertificate");async function iue(e,t){await Ud({name:PS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Ud({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Pt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(iue,"createCertificateTable");async function Ud(e){let t=new Ho(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},ec(),await Qr.patch(e)}o(Ud,"setCertTable");async function Ww(){let e=await kw("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Pt.publicKeyFromPem(e.publicKey),privateKey:Pt.privateKeyFromPem(e.privateKey)}}o(Ww,"generateKeys");async function zw(e,t,r){let n=Pt.createCertificate();if(!t){let a=await Wh();t=Pt.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()+Kw);let i=[{name:"commonName",value:CS()},...Yw];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(T$()),n.sign(e,vd.md.sha256.create()),Pt.certificateToPem(n)}o(zw,"generateCertificates");async function $w(){let e=await N$(),t;for(let r of e){if(!r.is_authority)continue;let n=await I$(r.private_key_name);if(r.private_key_name&&n&&new Ho(r.certificate).checkPrivateKey(f$(n))){gt.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;gt.trace("No CA found with matching private key")}o($w,"getCertAuthority");async function R$(e,t,r=!0){let n=Pt.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()+Kw);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${os.get(xl.REPLICATION_HOSTNAME)??p$(os.get(xl.REPLICATION_URL))??m$().split("-")[0]}`},...Yw];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,vd.md.sha256.create());let a=hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME),c=hr.join(a,gi.PRIVATEKEY_PEM_NAME);return r&&await Un.writeFile(c,Pt.privateKeyToPem(e)),n}o(R$,"generateCertAuthority");async function oue(){let{privateKey:e,publicKey:t}=await Ww(),r=await R$(e,t),n=await zw(e,t,r);await iue(n,r),y$()}o(oue,"generateCertsKeys");async function aue(){let e=await zw(Pt.privateKeyFromPem(gi.CERTIFICATE_VALUES.key),void 0,Pt.certificateFromPem(gi.CERTIFICATE_VALUES.cert)),t=hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME),r=hr.join(t,gi.NATS_CERTIFICATE_PEM_NAME);await Un.exists(r)||await Un.writeFile(r,e);let n=hr.join(t,gi.NATS_CA_PEM_NAME);await Un.exists(n)||await Un.writeFile(n,gi.CERTIFICATE_VALUES.cert)}o(aue,"createNatsCerts");async function cue(){ec();for await(let e of Qr.search([{attribute:"is_self_signed",value:!0}]))await Qr.delete(e.name);await jw()}o(cue,"renewSelfSigned");async function jw(){Xle(),await S$(),ec();let e=await $w();if(!e){gt.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:Pt.privateKeyFromPem(Un.readFileSync(u)),keyPath:u}}catch(d){return gt.warn(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=os.get(xl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=os.get(xl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME),c=h$(a,i);s||(gt.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await Ww(),Un.existsSync(hr.join(a,gi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${m$().split("-")[0]}.pem`),await Un.writeFile(hr.join(a,c),Pt.privateKeyToPem(s)));let l=await R$(s,Pt.setRsaPublicKey(s.n,s.e),!1);await Ud({name:l.subject.getField("CN").value,uses:["https"],certificate:Pt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Wh()){let r=PS();gt.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await $w();let n=Pt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await zw(Pt.privateKeyFromPem(e.private_key),s,n);await Ud({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(jw,"reviewSelfSignedCert");function y$(){let e=zle(Object.keys(Ds.CONFIG_PARAM_MAP),!0),t=hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME),r=hr.join(t,gi.PRIVATEKEY_PEM_NAME),n=hr.join(t,gi.NATS_CERTIFICATE_PEM_NAME),s=hr.join(t,gi.NATS_CA_PEM_NAME),i=Ds.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),qw.updateConfigValue(void 0,void 0,a,!1,!0)}o(y$,"updateConfigCert");function A$(e){return e.startsWith("-----BEGIN")?e:Zle(e,"utf8")}o(A$,"readPEM");var u$=OS.createSecureContext;OS.createSecureContext=function(e){if(!e.cert||!e.key)return u$(e);let t={...e};delete t.key,delete t.cert;let r=u$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var lue=g$.prototype._init;g$.prototype._init=function(e,t){lue.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var Ul=new Map;function b$(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Ul.clear();let d=0;if(wS===void 0){c();return}for await(let f of wS.system.hdb_certificate.search([])){let m=f.certificate,h=new Ho(m);f.is_authority&&(h.asString=m,Ul.set(h.subject,m))}for await(let f of wS.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 I$(f.private_key_name),_=f.certificate,g=new Ho(_);if(Ul.has(g.issuer)&&(_+=`
18
- `+Ul.get(g.issuer)),!p||!_)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:eue(),availableCAs:Ul,ca:t&&Array.from(Ul.values()),cert:_,key:p,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(R.sessionIdContext=a.sessionIdContext);let T=OS.createSecureContext(R);T.name=f.name,T.options=R,T.quality=h,T.certificateAuthorities=Array.from(Ul),T.certStart=_.toString().slice(0,100);let y=f.hostnames??Jw(g);Array.isArray(y)||(y=[y]);let N;for(let O of y)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),O===Gw()&&(h+=2),d$.isIP(O)&&(N=!0);let F=r.get(O)?.quality??0;h>F&&r.set(O,T)}else Ja.error("No hostname found for certificate at",OS.certificate);Ja.trace("Adding TLS",T.name,"for",a.ports||"client","cert named",f.name,"hostnames",y,"quality",h,"best quality",d),h>d&&(i.defaultContext=n=T,d=h,a&&(a.defaultContext=T))}catch(m){Ja.error("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),wS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){Ja.info("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return Ja.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?Ja.debug("No certificate found to match",a,"using the default certificate"):Ja.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Ja.info("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(b$,"createTLSSelector");async function I$(e){let t=Za.get(e);return!t&&e?await Un.readFile(hr.join(os.get(xl.ROOTPATH),Ds.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(I$,"getPrivateKeyByName");async function N$(){ec();let e=[];for await(let t of Qr.search([]))e.push(t);return e}o(N$,"listCertificates");async function uue(e){let t=Vw(e,_i.object({name:_i.string().required(),certificate:_i.string().required(),is_authority:_i.boolean().required(),private_key:_i.string(),hosts:_i.array(),uses:_i.array()}));if(t)throw new Xa(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Ho(n),c=!1,l=!1,u;for(let[h,p]of Za)!s&&!c&&a.checkPrivateKey(f$(p))&&(c=!0,u=h),s&&s===p&&(l=!0,u=h);if(!i&&!s&&!c)throw new Xa("A suitable private key was not found for this certificate");let d;if(!r){try{d=Qw(a)}catch(h){gt.error(h)}if(d==null)throw new Xa("Error extracting certificate host name, please provide a name parameter")}let f=due(r??d);s&&!c&&!l&&(await Un.writeFile(hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME,f+".pem"),s),Za.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Ud(m),"Successfully added certificate: "+f}o(uue,"addCertificate");function due(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(due,"sanitizeName");async function fue(e){let t=Vw(e,_i.object({name:_i.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;ec();let n=await Qr.get(r);if(!n)throw new Xa(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Qr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(gt.info("Removing private key named",s),await Un.remove(hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME,s)))}return await Qr.delete(r),"Successfully removed "+r}o(fue,"removeCertificate");function Qw(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||Jw(e)[0]}o(Qw,"getPrimaryHostName");function Jw(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(Jw,"hostnamesFromCert");async function mue(e){if(e.bypass_auth!==!0)throw new Xa("Unauthorized","401");let t=Vw(e,_i.object({name:_i.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await a$()).privateKey;if(r===".jwtPublic")return(await a$()).publicKey;if(Za.get(r))return Za.get(e.name);throw new Xa("Key not found")}o(mue,"getKey");function hue(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(hue,"getHostnamesFromCertificate")});var z$={};we(z$,{CONFIRMATION_STATUS_POSITION:()=>Y$,LATENCY_POSITION:()=>kS,NodeReplicationConnection:()=>Fd,OPERATION_REQUEST:()=>tO,RECEIVED_TIME_POSITION:()=>FS,RECEIVED_VERSION_POSITION:()=>BS,RECEIVING_STATUS_POSITION:()=>HS,RECEIVING_STATUS_RECEIVING:()=>W$,RECEIVING_STATUS_WAITING:()=>rO,SENDING_TIME_POSITION:()=>zh,createWebSocket:()=>qS,databaseSubscriptions:()=>rc,replicateOverWS:()=>jh,tableUpdateListeners:()=>sO});async function qS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=et(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!Zw){let l=(0,q$.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),Zw=u.secureContexts}if(i=Zw.get(s),i&&ae.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,$$.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(xS?.caCount!==qo.size&&(xS=G$.createSecureContext({...i.options,ca:[...qo,...i.options.availableCAs.values()]}),xS.caCount=qo.size),c.secureContext=xS),new H$.WebSocket(e,"harperdb-replication-v1",c)}function jh(e,t,r){let n=t.port||t.securePort,s=Bl.pid%1e3+"-"+k$.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ae.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||rc,f,m,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){ae.error?.(s,"No authorization provided"),Ss(1008,"Unauthorized");return}let R=new Map,T=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let y,N,O,F,Z,q,W,K=6e4,$,le=0,ue=0,ie=0,me=F$.default.get(U.REPLICATION_BLOBTIMEOUT)??12e4,Pe=new Map,De=[],dt=0,Ye;if(t.url){let E=o(()=>{Z&&ue===e._socket?.bytesRead&&ie===e._socket?.bytesWritten?e.terminate():(Z=performance.now(),e.ping(),ue=e._socket?.bytesRead,ie=e._socket?.bytesWritten)},"sendPing");O=setInterval(E,x$).unref(),E()}else Gn();e._socket?.setMaxListeners(200);function Gn(){clearTimeout(F),ue=e._socket?.bytesRead,ie=e._socket?.bytesWritten,F=setTimeout(()=>{ue===e._socket?.bytesRead&&ie===e._socket?.bytesWritten&&(ae.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},x$*2).unref()}o(Gn,"resetPingTimer");function st(){if(!(!g||!u))return m||(m=Pd(f,u,g)),m}o(st,"getSharedStatus"),u&&Ta(u);let pt,Dc,Mc=[],Vt=[],kf,qf=[],ME=[],vE=[],Wy=150,Gf=25,Ce=0,UE=0,$f=!1,Eo,Pr,Rr,Vf;e.on("message",E=>{le=performance.now();try{let S=E.dataView=new Wc(E.buffer,E.byteOffset,E.byteLength);if(E[0]>127){let P=(0,tt.decode)(E),[L,D,k]=P;switch(L){case O$:{if(D){if(g){if(g!==D){ae.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${D}, disconnecting`),e.send((0,tt.encode)([xd])),Ss(1008,"Node name mismatch");return}}else if(g=D,t.connection?.tentativeNode){let B=t.connection.tentativeNode;B.name=g,t.connection.tentativeNode=null,Fo(g,B)}if(t.connection&&(t.connection.nodeName=g),ae.debug?.(s,"received node name:",g,"db:",u??P[2]),!u)try{Ta(u=P[2]),u==="system"&&(pt=ja(t,(B,de)=>{gu(de)&&Ra(de)}),e.on("close",()=>{pt?.remove()}))}catch(B){ae.warn?.(s,"Error setting database",B),e.send((0,tt.encode)([xd])),Ss(1008,B.message);return}Lr()}break}case v$:{ae.debug?.(s,"Received table definitions for",D.map(B=>B.table));for(let B of D){let de=P[2];B.database=de;let he;gu(de)&&(de==="system"?He[de]?.[B.table]||(he=V(B,He[de]?.[B.table])):he=V(B,He[de]?.[B.table]),f||(f=he?.auditStore),_||(_=it()?.[de]))}break}case xd:Ss();break;case tO:try{let B=r?.replicates||r?.subscribers||r?.name;ae.debug?.("Received operation request",D,"from",g),server.operation(D,{user:r},!B).then(de=>{Array.isArray(de)&&(de={results:de}),de.requestId=D.requestId,e.send((0,tt.encode)([DS,de]))},de=>{e.send((0,tt.encode)([DS,{requestId:D.requestId,error:(0,Bd.errorToString)(de)}]))})}catch(B){e.send((0,tt.encode)([DS,{requestId:D.requestId,error:(0,Bd.errorToString)(B)}]))}break;case DS:let{resolve:C,reject:x}=R.get(D.requestId);D.error?x(new Error(D.error)):C(D),R.delete(D.requestId);break;case Xw:let z=P[3];if(!_){u?ae.error?.(s,"No database found for",u):ae.error?.(s,"Database name never received"),Ss();return}let ne=_[z];ne=V({table:z,database:u,attributes:D.attributes,schemaDefined:D.schemaDefined},ne),Mc[k]={name:z,decoder:new tt.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:D.typedStructs,structures:D.structures}),getEntry(B){return ne.primaryStore.getEntry(B)},rootStore:ne.primaryStore.rootStore};break;case C$:Vf=f?JG(D,f):new Map,kf=P[2],ae.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${kf}`);break;case P$:let re=k;vE[re]=D;break;case M$:st()[Y$]=D,ae.trace?.(s,"received and broadcasting committed update",D),st().buffer.notify();break;case D$:y=D,p.send({type:"end_txn",localTime:y,remoteNodeIds:T}),st(),m[BS]=y,m[FS]=Date.now(),m[HS]=rO;break;case MS:{let B=P[1],{fileId:de,size:he,finished:Se,error:ee}=B,Q=Pe.get(de);ae.debug?.("Received blob",de,"has stream",!!Q,"connectedToBlob",!!Q?.connectedToBlob,"length",P[2].length,"finished",Se),Q||(Q=new eO.PassThrough,Q.expectedSize=he,Pe.set(de,Q)),Q.lastChunk=Date.now();let pe=P[2];ot(pe.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Se?(ee?(Q.on("error",()=>{}),Q.destroy(new Error("Blob error: "+ee+" for record "+(Q.recordId??"unknown")+" from "+g))):Q.end(pe),Q.connectedToBlob&&Pe.delete(de)):Q.write(pe)}catch(Te){ae.error?.(`Error receiving blob for ${Q.recordId} from ${g} and streaming to storage`,Te),Pe.delete(de)}break}case L$:{let B=D,de;try{let he=P[3],Se=Vt[k]||(Vt[k]=_[P[4]]);if(!Se)return ae.warn?.("Unknown table id trying to handle record request",k);let ee=Se.primaryStore.getBinaryFast(Symbol.for("structures")),Q=ee?.length??0;if(Q>0&&Q!==UE){UE=Q;let Te=(0,tt.decode)(ee);e.send((0,tt.encode)([Xw,{typedStructs:Te.typed,structures:Te.named},k,Se.tableName]))}let pe=Se.primaryStore.getBinaryFast(he);if(pe){let Te=Se.primaryStore.decoder.decode(pe,{valueAsBuffer:!0}),fe=ut||{};fe.version=(0,V$.getLastVersion)(),ut&&ut[Lu]&$r&&(Te=Buffer.from(Te),gm(()=>Se.primaryStore.decoder.decode(pe),We=>Sa(We,he),Se.primaryStore.rootStore)),de=(0,tt.encode)([LS,B,{value:Te,expiresAt:fe.expiresAt,version:fe.version,residencyId:fe.residencyId,nodeId:fe.nodeId,user:fe.user}])}else de=(0,tt.encode)([LS,B])}catch(he){de=(0,tt.encode)([LS,B,{error:he.message}])}e.send(de);break}case LS:{let{resolve:B,reject:de,tableId:he,key:Se}=R.get(P[1]),ee=P[2];if(ee?.error)de(new Error(ee.error));else if(ee){let Q;p_(()=>{let pe=Mc[he].decoder.decode(ee.value);ee.value=pe,ee.key=Se,B(ee)||Q&&setTimeout(()=>Q.forEach(f_),6e4).unref()},f?.rootStore,pe=>{let Te=vc(pe,Se);return Q||(Q=[]),Q.push(Te),Te})}else B();R.delete(P[1]);break}case w$:{Rr=D;let B,de,he=!1;if(p){if(u!==p.databaseName&&!p.then){ae.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=d.get(u);if(ae.debug?.(s,"received subscription request for",u,"at",Rr),!p){let Ee;p=new Promise(Et=>{ae.debug?.("Waiting for subscription to database "+u),Ee=Et}),p.ready=Ee,rc.set(u,p)}if(r.name)de=zt().subscribe(r.name),de.then(async Ee=>{B=Ee;for await(let Et of B){let rt=Et.value;if(!(rt?.replicates===!0||rt?.replicates?.receives||rt?.subscriptions?.some(lr=>(lr.database||lr.schema)===u&&lr.publish!==!1))){he=!0,e.send((0,tt.encode)([xd])),Ss(1008,`Unauthorized database subscription to ${u}`);return}}},Ee=>{ae.error?.(s,"Error subscribing to HDB nodes",Ee)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,tt.encode)([xd])),Ss(1008,`Unauthorized database subscription to ${u}`);return}if(Pr&&(ae.debug?.(s,"stopping previous subscription",u),Pr.emit("close")),Rr.length===0)return;let Se=Rr[0],ee=o(Ee=>{if(Ee&&(Se.replicateByDefault?!Se.tables.includes(Ee.tableName):Se.tables.includes(Ee.tableName)))return{table:Ee}},"tableToTableEntry"),Q={txnTime:0},pe,Te,fe=1/0,We,Tt=o((Ee,Et)=>{if(Ee.type==="end_txn"){Q.txnTime&&(a[i]!==66&&ae.error?.("Invalid encoding of message"),Su(9),Su(N_),xc(We=Et),ft()),i=c,Q.txnTime=0;return}let rt=Ee.nodeId,lr=Ee.tableId,xt=Te[lr];if(!xt&&(xt=Te[lr]=ee(p.tableById[lr]),!xt))return ae.debug?.("Not subscribed to table",lr);let Ts=xt.table,Bt=Ts.primaryStore,Xs=Bt.encoder;(Ee.extendedType&L_||!Xs.typedStructs)&&(Xs._mergeStructures(Xs.getStructures()),Xs.typedStructs&&(Xs.lastTypedStructuresLength=Xs.typedStructs.length));let Tu=pe[rt];if(!(Tu&&Tu.startTime<Et&&(!Tu.endTime||Tu.endTime>Et)))return US&&ae.trace?.(s,"skipping replication update",Ee.recordId,"to:",g,"from:",rt,"subscribed:",pe),SM();US&&ae.trace?.(s,"sending replication update",Ee.recordId,"to:",g,"from:",rt,"subscribed:",pe);let zy=Ee.version,Bc=Ee.residencyId,jy=_u(Bc,Ts),BE;if(jy&&!jy.includes(g)){let Zs=_u(Ee.previousResidencyId,Ts);if(Zs&&!Zs.includes(g)&&(Ee.type==="put"||Ee.type==="patch")||Ts.getResidencyById)return SM();let Yf=Ee.recordId;ae.trace?.(s,"sending invalidation",Yf,g,"from",rt);let Wf=0;Bc&&(Wf|=zc),Ee.previousResidencyId&&(Wf|=jc);let Xy,FE=null;for(let TM in Ts.indices){if(!FE){if(Xy=Ee.getValue(Bt,!0),!Xy)break;FE={}}FE[TM]=Xy[TM]}BE=Qc(Ee.version,lr,Yf,null,rt,Ee.user,Ee.type==="put"||Ee.type==="patch"?"invalidate":Ee.type,Xs.encode(FE),Wf,Bc,Ee.previousResidencyId,Ee.expiresAt)}function SM(){return ae.trace?.(s,"skipping audit record",Ee.recordId),q||(q=setTimeout(()=>{q=null,(We||0)+U$/2<fe&&(US&&ae.trace?.(s,"sending skipped sequence update",fe),e.send((0,tt.encode)([D$,fe])))},U$).unref()),new Promise(setImmediate)}o(SM,"skipAuditRecord");let Qy=Xs.typedStructs,Jy=Xs.structures;if((Qy?.length!=xt.typed_length||Jy?.length!=xt.structure_length)&&(xt.typed_length=Qy?.length,xt.structure_length=Jy.length,ae.debug?.(s,"send table struct",xt.typed_length,xt.structure_length),xt.sentName||(xt.sentName=!0),e.send((0,tt.encode)([Xw,{typedStructs:Qy,structures:Jy,attributes:Ts.attributes,schemaDefined:Ts.schemaDefined},lr,xt.table.tableName]))),Bc&&!ME[Bc]&&(e.send((0,tt.encode)([P$,jy,Bc])),ME[Bc]=!0),Q.txnTime!==zy&&(Q.txnTime&&(US&&ae.trace?.(s,"new txn time, sending queued txn",Q.txnTime),a[i]!==66&&ae.error?.("Invalid encoding of message"),ft()),Q.txnTime=zy,i=c,xc(zy)),BE)Su(BE.length),Uc(BE);else{let Zs=Ee.encoded;Ee.extendedType&$r&&gm(()=>Ee.getValue(Bt),Wf=>Sa(Wf,Ee.recordId),Bt.rootStore);let Yf=Zs[0]===66?8:0;Su(Zs.length-Yf),Uc(Zs,Yf),ae.trace?.("wrote record",Ee.recordId,"length:",Zs.length)}return e._socket.writableNeedDrain?new Promise(Zs=>{ae.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",Zs)}):dt>Gf?new Promise(Zs=>{Ye=Zs}):new Promise(setImmediate)},"sendAuditRecord"),ft=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ae.debug?.(s,"Sent message, size:",c-i),ot(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ae.debug?.(s,"skipping empty transaction")},"sendQueuedData");Pr=new nO.EventEmitter,Pr.once("close",()=>{he=!0,B?.end()});for(let{startTime:Ee}of Rr)Ee<fe&&(fe=Ee);(de||Promise.resolve()).then(async()=>{p=await p,f=p.auditStore,Te=p.tableById.map(ee),pe=[];for(let{name:Et,startTime:rt,endTime:lr}of Rr){let xt=AS(Et,f);ae.debug?.("subscription to",Et,"using local id",xt,"starting",rt),pe[xt]={startTime:rt,endTime:lr}}Ra(u),pt||(pt=wl(Et=>{Et.databaseName===u&&Ra(u)}),Dc=Ah(Et=>{Et===u&&(e.send((0,tt.encode)([xd])),Ss())}),e.on("close",()=>{pt?.remove(),Dc?.remove()})),e.send((0,tt.encode)([C$,Hh(p.auditStore),Rr.map(({name:Et})=>Et)]));let Ee=!0;do{isFinite(fe)||(ae.warn?.("Invalid sequence id "+fe),Ss(1008,"Invalid sequence id"+fe));let Et;if(Ee&&!he&&(Ee=!1,fe===0)){ae.info?.("Replicating all tables to",g);let rt=fe,lr=GS(f);for(let xt in _){if(!ee(xt))continue;let Ts=_[xt];for(let Bt of Ts.primaryStore.getRange({snapshot:!1,versions:!0})){if(he)return;if(Bt.localTime>=fe){ae.trace?.(s,"Copying record from",u,xt,Bt.key,Bt.localTime),rt=Math.max(Bt.localTime,rt),st()[zh]=1;let Xs=Qc(Bt.version,Ts.tableId,Bt.key,null,lr,null,"put",gm(()=>Ts.primaryStore.encoder.encode(Bt.value),Tu=>Sa(Tu,Bt.key)),Bt.metadataFlags&-256,Bt.residencyId,null,Bt.expiresAt);await Tt({recordId:Bt.key,tableId:Ts.tableId,type:"put",getValue(){return Bt.value},encoded:Xs,version:Bt.version,residencyId:Bt.residencyId,nodeId:lr,extendedType:Bt.metadataFlags},Bt.localTime)}}}c-i>8&&Tt({type:"end_txn"},fe),st()[zh]=0,fe=rt}for(let{key:rt,value:lr}of f.getRange({start:fe||1,exclusiveStart:!0,snapshot:!1})){if(he)return;let xt=wt(lr);ae.debug?.("sending audit record",new Date(rt)),st()[zh]=rt,fe=rt,await Tt(xt,rt),Pr.startTime=rt}c-i>8&&Tt({type:"end_txn"},fe),st()[zh]=0,await JU(f)}while(!he)}).catch(Ee=>{ae.error?.(s,"Error handling subscription to node",Ee),Ss(1008,"Error handling subscription to node")});break}}return}S.position=8;let A=!0,b,I;do{st();let P=S.readInt();if(P===9&&S.getUint8(S.position)==N_){S.position++,y=I=S.readFloat64(),m[BS]=y,m[FS]=Date.now(),m[HS]=rO,ae.trace?.("received remote sequence update",y,u);break}let L=S.position,D=wt(E,L,L+P),k=Mc[D.tableId];k||ae.error?.(`No table found with an id of ${D.tableId}`);let C;D.residencyId&&(C=vE[D.residencyId],ae.trace?.(s,"received residency list",C,D.type,D.recordId));try{let x=D.recordId;p_(()=>{b={table:k.name,id:D.recordId,type:D.type,nodeId:Vf.get(D.nodeId),residencyList:C,timestamp:D.version,value:D.getValue(k),user:D.user,beginTxn:A,expiresAt:D.expiresAt}},f?.rootStore,z=>vc(z,x))}catch(x){throw x.message+="typed structures for current decoder"+JSON.stringify(k.decoder.typedStructs),x}A=!1,ae.trace?.(s,"received replication message",D.type,"id",b.id,"version",new Date(D.version),"nodeId",b.nodeId),m[BS]=D.version,m[FS]=Date.now(),m[HS]=W$,p.send(b),S.position=L+P}while(S.position<E.byteLength);Ce++,ot(E.byteLength,"bytes-received",`${g}.${u}.${b?.table||"unknown_table"}`,"replication","ingest"),Ce>Wy&&!$f&&($f=!0,e.pause(),ae.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),p.send({type:"end_txn",localTime:y,remoteNodeIds:T,async onCommit(){if(b){let P=Date.now()-b.timestamp;ot(P,"replication-latency",g+"."+u+"."+b.table,b.type,"ingest")}Ce--,$f&&($f=!1,e.resume(),ae.debug?.(`Replication resuming ${g}`)),De.length>0&&await Promise.all(De),ae.trace?.("All blobs finished"),!N&&I&&(ae.trace?.(s,"queuing confirmation of a commit at",I),setTimeout(()=>{e.send((0,tt.encode)([M$,N])),ae.trace?.(s,"sent confirmation of a commit at",N),N=null},Eue)),N=I,ae.debug?.("last sequence committed",new Date(I),u)}})}catch(S){ae.error?.(s,"Error handling incoming replication message",S)}}),e.on("ping",Gn),e.on("pong",()=>{if(t.connection){let E=performance.now()-Z;t.connection.latency=E,st()&&(m[kS]=E),t.isSubscriptionConnection&&vl({name:g,database:u,url:t.url,latency:E})}Z=null}),e.on("close",(E,S)=>{clearInterval(O),clearTimeout(F),clearInterval(W),Pr&&Pr.emit("close"),Eo&&Eo.end();for(let[A,{reject:b}]of R)b(new Error(`Connection closed ${S?.toString()} ${E}`));ae.debug?.(s,"closed",E,S?.toString())});function Ss(E,S){try{e.isFinished=!0,ae.debug?.(s,"closing",g,u,E,S),e.close(E,S),t.connection?.emit("finished")}catch(A){ae.error?.(s,"Error closing connection",A)}}o(Ss,"close");let ga=new Set;async function Sa(E,S){let A=m_(E);if(ga.has(A)){ae.debug?.("Blob already being sent",A);return}ga.add(A);try{let b;dt++;for await(let I of E.stream())b&&(ae.debug?.("Sending blob chunk",A,"length",b.length),e.send((0,tt.encode)([MS,{fileId:A,size:E.size},b]))),b=I,e._socket.writableNeedDrain&&(ae.debug?.("draining",A),await new Promise(P=>e._socket.once("drain",P)),ae.debug?.("drained",A)),ot(I.length,"bytes-sent",`${g}.${u}`,"replication","blob");ae.debug?.("Sending final blob chunk",A,"length",b.length),e.send((0,tt.encode)([MS,{fileId:A,size:E.size,finished:!0},b]))}catch(b){ae.warn?.("Error sending blob",b,"blob id",A,"for record",S),e.send((0,tt.encode)([MS,{fileId:A,finished:!0,error:(0,Bd.errorToString)(b)},Buffer.alloc(0)]))}finally{ga.delete(A),dt--,dt<Gf&&Ye?.()}}o(Sa,"sendBlobs");function vc(E,S){let A=m_(E),b=Pe.get(A);ae.debug?.("Received transaction with blob",A,"has stream",!!b,"ended",!!b?.writableEnded),b?b.writableEnded&&Pe.delete(A):(b=new eO.PassThrough,Pe.set(A,b)),b.connectedToBlob=!0,b.lastChunk=Date.now(),b.recordId=S,E.size===void 0&&b.expectedSize&&(E.size=b.expectedSize);let I=b.blob??createBlob(b,E);b.blob=I;let P=bo(()=>_m(I).saving,p.auditStore?.rootStore);return P&&(P.blobId=A,De.push(P),P.finally(()=>{ae.debug?.(`Finished receiving blob stream ${A}`),De.splice(De.indexOf(P),1)})),I}o(vc,"receiveBlobs");function Lr(){if(h||(h=!0,t.connection?.on("subscriptions-updated",Lr)),!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;f||(f=p?.auditStore);try{for(let b of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let I of b.value.nodes||[])I.lastTxnTime>(E.get(I.id)??0)&&E.set(I.id,I.lastTxnTime)}catch(b){if(!b.message.includes("Can not re"))throw b}let S=t.connection?.nodeSubscriptions?.[0];T=[];let A=t.connection?.nodeSubscriptions.map((b,I)=>{let P=[],{replicateByDefault:L}=b;if(b.subscriptions){for(let x of b.subscriptions)if(x.subscribe&&(x.schema||x.database)===u){let z=x.table;_?.[z]?.replicate!==!1&&P.push(z)}L=!1}else for(let x in _)(L?_[x].replicate===!1:_[x].replicate)&&P.push(x);let D=f&&AS(b.name,f),k=p?.dbisDB?.get([Symbol.for("seq"),D])??1,C=Math.max(k?.seqId??1,(typeof b.startTime=="string"?new Date(b.startTime).getTime():b.startTime)??1);if(ae.debug?.("Starting time recorded in db",b.name,D,u,k?.seqId,"start time:",C,new Date(C)),S!==b){let x=f&&AS(S.name,f),z=p?.dbisDB?.get([Symbol.for("seq"),x])??1;for(let ne of z?.nodes||[])ne.name===b.name&&(C=ne.seqId,ae.debug?.("Using sequence id from proxy node",S.name,C))}if(D===void 0?ae.warn("Starting subscription request from node",b,"but no node id found"):T.push(D),E.get(D)>C&&(C=E.get(D),ae.debug?.("Updating start time from more recent txn recorded",S.name,C)),C===1&&vS)try{new URL(vS).hostname===b.name?(ae.warn?.(`Requesting full copy of database ${u} from ${vS}`),C=0):C=Date.now()-6e4}catch(x){ae.error?.("Error parsing leader URL",vS,x)}return ae.trace?.(s,"defining subscription request",b.name,u,new Date(C)),{name:b.name,replicateByDefault:L,tables:P,startTime:C,endTime:b.endTime}});if(A)if(ae.debug?.(s,"sending subscription request",A,p?.dbisDB?.path),clearTimeout($),A.length>0)e.send((0,tt.encode)([w$,A]));else{let b=o(()=>{let I=performance.now();$=setTimeout(()=>{le<=I?Ss(1008,"Connection has no subscriptions and is no longer used"):b()},K).unref()},"scheduleClose");b()}}o(Lr,"sendSubscriptionRequestUpdate");function _u(E,S){if(!E)return;let A=qf[E];return A||(A=S.getResidencyRecord(E),qf[E]=A),A}o(_u,"getResidence");function gu(E){return!(tc&&tc!="*"&&!tc[E]&&!tc.includes?.(E)&&!tc.some?.(S=>S.name===E))}o(gu,"checkDatabaseAccess");function Ta(E){if(p=p||d.get(E),!gu(E))throw new Error(`Access to database "${E}" is not permitted`);p||ae.warn?.(`No database named "${E}" was declared and registered`),f=p?.auditStore,_||(_=it()?.[E]);let S=et();if(S===g)throw S?new Error("Should not connect to self",S):new Error("Node name not defined");return xE(S,E),!0}o(Ta,"setDatabase");function xE(E,S){let A=it()?.[S],b=[];for(let I in A){let P=A[I];b.push({table:I,schemaDefined:P.schemaDefined,attributes:P.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}ae.trace?.("Sending database info for node",E,"database name",S),e.send((0,tt.encode)([O$,E,S,b]))}o(xE,"sendNodeDBName");function Ra(E){let S=it()?.[E],A=[];for(let b in S){if(Rr&&!Rr.some(P=>P.replicateByDefault?!P.tables.includes(b):P.tables.includes(b)))continue;let I=S[b];A.push({table:b,schemaDefined:I.schemaDefined,attributes:I.attributes.map(P=>({name:P.name,type:P.type,isPrimaryKey:P.isPrimaryKey}))})}e.send((0,tt.encode)([v$,A,E]))}o(Ra,"sendDBSchema"),W=setInterval(()=>{for(let[E,S]of Pe)S.lastChunk+me<Date.now()&&(ae.warn?.(`Timeout waiting for blob stream to finish ${E} for record ${S.recordId??"unknown"} from ${g}`),Pe.delete(E),S.end())},me).unref();let ya=1,Kf=[];return{end(){Eo&&Eo.end(),Pr&&Pr.emit("close")},getRecord(E){let S=ya++;return new Promise((A,b)=>{let I=[L$,S,E.table.tableId,E.id];Kf[E.table.tableId]||(I.push(E.table.tableName),Kf[E.table.tableId]=!0),e.send((0,tt.encode)(I)),le=performance.now(),R.set(S,{tableId:E.table.tableId,key:E.id,resolve(P){let{table:L,entry:D}=E;if(A(P),P)return L._recordRelocate(D,P)},reject:b})})},sendOperation(E){let S=ya++;return E.requestId=S,e.send((0,tt.encode)([tO,E])),new Promise((A,b)=>{R.set(S,{resolve:A,reject:b})})}};function Su(E){Aa(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 Uc(E,S=0,A=E.length){let b=A-S;Aa(b),E.copy(a,c,S,A),c+=b}function xc(E){Aa(8),l.setFloat64(c,E),c+=8}function Aa(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 V(E,S){let A=E.database??"data";if(A!=="data"&&!He[A]){ae.warn?.("Database not found",E.database);return}S||(S={});let b=S.schemaDefined,I=!1,P=E.schemaDefined,L=S.attributes||[];for(let D=0;D<E.attributes?.length;D++){let k=E.attributes[D],C=L.find(x=>x.name===k.name);(!C||C.type!==k.type)&&(b?ae.error?.(`Schema for '${u}.${E.table}' is defined locally, but attribute '${k.name}: ${k.type}' from '${g}' does not match local attribute ${C?"'"+C.name+": "+C.type+"'":"which does not exist"}`):(I=!0,P||(k.indexed=!0),C?L[L.indexOf(C)]=k:L.push(k)))}return I?(ae.debug?.("(Re)creating",E),je({table:E.table,database:E.database,schemaDefined:E.schemaDefined,attributes:L,...S})):S}}var F$,tt,H$,k$,Bd,nO,q$,G$,Bl,$$,eO,V$,K$,ae,w$,O$,C$,xd,P$,Xw,L$,LS,tO,DS,D$,M$,v$,MS,Y$,BS,FS,zh,kS,HS,rO,W$,pue,vS,sO,rc,US,U$,Eue,x$,Zw,xS,B$,Fd,iO=ce(()=>{Me();Mi();xw();hb();is();F$=w(oe());H();Jc();tt=require("msgpackr"),H$=require("ws"),k$=require("worker_threads"),Bd=w(j());Kh();nO=require("events"),q$=w(as()),G$=w(require("node:tls"));Ml();Bl=w(require("node:process")),$$=require("node:net");ji();Yn();eO=require("node:stream"),V$=require("lmdb"),K$=w(require("minimist")),ae=(0,Bd.forComponent)("replication").conditional,w$=129,O$=140,C$=141,xd=142,P$=130,Xw=132,L$=133,LS=134,tO=136,DS=137,D$=143,M$=144,v$=145,MS=146,Y$=0,BS=1,FS=2,zh=3,kS=4,HS=5,rO=0,W$=1,pue=(0,K$.default)(Bl.argv),vS=pue.HDB_LEADER_URL??Bl.env.HDB_LEADER_URL,sO=new Map,rc=new Map,US=!0,U$=300,Eue=2,x$=3e4;o(qS,"createWebSocket");B$=500,Fd=class extends nO.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=B$;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??Ei(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await qS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ae.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Bl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ae[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=B$,this.nodeSubscriptions&&vl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=jh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ae.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"?ae.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`):ae.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Md({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ae.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(jh,"replicateOverWS")});var ko={};we(ko,{clearThisNodeName:()=>Iue,disableReplication:()=>Tue,enabledDatabases:()=>tc,forEachReplicatedDatabase:()=>ja,getThisNodeId:()=>GS,getThisNodeName:()=>et,getThisNodeUrl:()=>Qa,hostnameToUrl:()=>WS,lastTimeInAuditStore:()=>kh,monitorNodeCAs:()=>nV,replicateOperation:()=>wue,replicationCertificateAuthorities:()=>qo,sendOperationToNode:()=>Qh,servers:()=>gue,setReplicator:()=>iV,start:()=>Sue,startOnMainThread:()=>Hw,subscribeToNode:()=>Vh,unsubscribeFromNode:()=>NS,urlToNodeName:()=>Ei});function Sue(e){if(!e.port&&!e.securePort&&(e.port=Ms.default.get(U.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ms.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),!et())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Gh(e))t.set(Ei(s.url),s);Rue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Le.ws(async(s,i,a,c)=>{if(Lt.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(),jh(s,e,i?.user),s.on("error",l=>{l.code!=="ECONNREFUSED"&&Lt.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Le.http((s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){Lt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&Lt.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=zt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,tV.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)){Lt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l;else Lt.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:Lt.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(qo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=YS.createSecureContext(u)}catch(l){Lt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Ms.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1&&i()}nV(()=>{for(let s of n)s()})}function nV(e){let t=0;Ld(r=>{r?.ca&&(qo.add(r.ca),qo.size!==t&&(t=qo.size,e?.()))})}function Tue(e=!0){rV=e}function Rue(e){rV||(it(),tc=e.databases,ja(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||rc;for(let[s,i]of VS){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];iV(r,s,e),sO.get(s)?.forEach(i=>i(s))}}))}function iV(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 sV extends Ur{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||rc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(Lt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Kn,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)||p===Le.hostname)continue;let _=Aue(p,sV.subscription,e);if(_?.isConnected){let g=Pd(t.auditStore,e,p)[kS];(!d||g<m)&&(d=_,f=p,m=g)}}if(!d)throw l||new Z$.ServerError(`No connection to any other nodes are available: ${c}`,502);let h={requestId:_ue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(h)}catch(p){if(d.isConnected)throw p;Lt.warn("Error in load from node",KS,p),l||(l=p)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function yue(e,t,r,n,s){let i=VS.get(e);i||VS.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Fd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function Aue(e,t,r){let n=j$.get(e);n||(n=new Map,j$.set(e,n));let s=n.get(r);if(s)return s;let i=zt().primaryStore.get(e);return i?.url&&(s=new Fd(i.url,t,r,e,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Qh(e,t,r){r||(r={}),r.serverName=e.name;let n=await qS(e.url,r),s=jh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{Lt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{Lt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Vh(e){try{eV.isMainThread&&Lt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=rc.get(e.database);if(!t){let n;t=new Promise(s=>{Lt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,rc.set(e.database,t)}let r=yue(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=>qh(n,e.database)),e.replicateByDefault)}catch(t){Lt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function NS({name:e,url:t,database:r}){Lt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(zt().primaryStore.getRange({})));let n=VS.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function bue(){if(oO!==void 0)return oO;let e=Ms.default.get(U.OPERATIONSAPI_TLS_CERTIFICATE)||Ms.default.get(U.TLS_CERTIFICATE);if(e)return oO=new J$.X509Certificate((0,X$.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function et(){return KS||(KS=Ms.default.get("replication_hostname")??Ei(Ms.default.get("replication_url"))??bue()??Q$("operationsapi_network_secureport")??Q$("operationsapi_network_port")??"127.0.0.1")}function Iue(){KS=void 0}function Q$(e){let t=Ms.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function $S(e){let t=Ms.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function GS(e){return Hh(e)?.[et()]}function Qa(){let e=Ms.default.get("replication_url");return e||WS(et())}function WS(e){let t=$S("replication_port");if(t)return`ws://${e}:${t}`;if(t=$S("replication_secureport"),t)return`wss://${e}:${t}`;if(t=$S("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=$S("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ei(e){if(e)return new URL(e).hostname}function ja(e,t){for(let n of Object.getOwnPropertyNames(He))r(n);return Ah(n=>{r(n)}),wl((n,s)=>{r(n.databaseName)});function r(n){let s=He[n];Lt.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):Nue(n)&&t(s,n,!1)}o(r,"forDatabase")}function Nue(e){let t=He[e];for(let r in t)if(t[r].replicate)return!0}function kh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function wue(e){let t={message:""};if(e.replicated){e.replicated=!1,Lt.trace?.("Replicating operation",e.operation,"to nodes",Le.nodes.map(n=>n.name));let r=await Promise.allSettled(Le.nodes.map(n=>Qh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Le.nodes[s]?.name,i})}return t}var Ms,Lt,J$,X$,YS,Z$,eV,tV,rV,_ue,gue,qo,tc,VS,j$,oO,KS,is=ce(()=>{Me();Ma();bu();iO();Dr();Ms=w(oe()),Lt=w(j()),J$=require("crypto"),X$=require("fs");Kh();Ml();H();xw();YS=w(require("node:tls")),Z$=w(ge()),eV=require("worker_threads"),tV=w(as()),_ue=1,gue=[],qo=Ms.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1?new Set(YS.rootCertificates):new Set;o(Sue,"start");o(nV,"monitorNodeCAs");o(Tue,"disableReplication");o(Rue,"assignReplicationSource");o(iV,"setReplicator");VS=new Map;o(yue,"getSubscriptionConnection");j$=new Map;o(Aue,"getRetrievalConnectionByName");o(Qh,"sendOperationToNode");o(Vh,"subscribeToNode");o(NS,"unsubscribeFromNode");o(bue,"getCommonNameFromCert");o(et,"getThisNodeName");o(Iue,"clearThisNodeName");Object.defineProperty(Le,"hostname",{get(){return et()}});o(Q$,"getHostFromListeningPort");o($S,"getPortFromListeningPort");o(GS,"getThisNodeId");Le.replication={getThisNodeId:GS,exportIdMapping:Hh};o(Qa,"getThisNodeUrl");o(WS,"hostnameToUrl");o(Ei,"urlToNodeName");o(ja,"forEachReplicatedDatabase");o(Nue,"hasExplicitlyReplicatedTable");o(kh,"lastTimeInAuditStore");o(wue,"replicateOperation")});var $d=M((zUe,uV)=>{"use strict";var Hd=TG(),{validateBySchema:Jh}=nt(),{commonValidators:kd,schemaRegex:aO}=qi(),pr=require("joi"),Oue=j(),Cue=require("uuid").v4,QS=Po(),qd=(H(),v(Y)),Pue=require("util"),nc=Xn(),{handleHDBError:Go,hdbErrors:Lue,ClientError:Fl}=ge(),{HDB_ERROR_MSGS:zS,HTTP_STATUS_CODES:$o}=Lue,{SchemaEventMsg:JS}=ai(),oV=Gt(),{getDatabases:Due}=(Me(),v(_t)),{transformReq:Gd}=se(),{replicateOperation:aV}=(is(),v(ko)),{cleanupOrphans:Mue}=(Yn(),v(E_)),jS=pr.string().min(1).max(kd.schema_length.maximum).pattern(aO).messages({"string.pattern.base":"{:#label} "+kd.schema_format.message}),vue=pr.string().min(1).max(kd.schema_length.maximum).pattern(aO).messages({"string.pattern.base":"{:#label} "+kd.schema_format.message}).required(),Uue=pr.string().min(1).max(kd.schema_length.maximum).pattern(aO).messages({"string.pattern.base":"{:#label} "+kd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();uV.exports={createSchema:xue,createSchemaStructure:cV,createTable:Bue,createTableStructure:lV,createAttribute:Gue,dropSchema:Fue,dropTable:Hue,dropAttribute:kue,getBackup:$ue,cleanupOrphanBlobs:Vue};async function xue(e){let t=await cV(e);return QS.signalSchemaChange(new JS(process.pid,e.operation,e.schema)),t}o(xue,"createSchema");async function cV(e){let t=Jh(e,pr.object({database:jS,schema:jS}));if(t)throw new Fl(t.message);if(Gd(e),!await Hd.checkSchemaExists(e.schema))throw Go(new Error,zS.SCHEMA_EXISTS_ERR(e.schema),$o.BAD_REQUEST,qd.LOG_LEVELS.ERROR,zS.SCHEMA_EXISTS_ERR(e.schema),!0);return await nc.createSchema(e),`database '${e.schema}' successfully created`}o(cV,"createSchemaStructure");async function Bue(e){return Gd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await lV(e)}o(Bue,"createTable");async function lV(e){let t=Jh(e,pr.object({database:jS,schema:jS,table:vue,residence:pr.array().items(pr.string().min(1)).optional(),hash_attribute:Uue}));if(t)throw new Fl(t.message);if(!await Hd.checkSchemaTableExists(e.schema,e.table))throw Go(new Error,zS.TABLE_EXISTS_ERR(e.schema,e.table),$o.BAD_REQUEST,qd.LOG_LEVELS.ERROR,zS.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Cue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await nc.createTable(n,e);else throw Go(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",$o.BAD_REQUEST);else await nc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(lV,"createTableStructure");async function Fue(e){let t=Jh(e,pr.object({database:pr.string(),schema:pr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Fl(t.message);Gd(e);let r=await Hd.checkSchemaExists(e.schema);if(r)throw Go(new Error,r,$o.NOT_FOUND,qd.LOG_LEVELS.ERROR,r,!0);let n=await Hd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await nc.dropSchema(e),QS.signalSchemaChange(new JS(process.pid,e.operation,e.schema)),await oV.purgeSchemaTableStreams(e.schema,s);let i=await aV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Fue,"dropSchema");async function Hue(e){let t=Jh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required()}));if(t)throw new Fl(t.message);Gd(e);let r=await Hd.checkSchemaTableExists(e.schema,e.table);if(r)throw Go(new Error,r,$o.NOT_FOUND,qd.LOG_LEVELS.ERROR,r,!0);await nc.dropTable(e),await oV.purgeTableStream(e.schema,e.table);let n=await aV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Hue,"dropTable");async function kue(e){let t=Jh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required(),attribute:pr.string().required()}));if(t)throw new Fl(t.message);Gd(e);let r=await Hd.checkSchemaTableExists(e.schema,e.table);if(r)throw Go(new Error,r,$o.NOT_FOUND,qd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Go(new Error,"You cannot drop a hash attribute",$o.BAD_REQUEST,void 0,void 0,!0);if(qd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Go(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,$o.BAD_REQUEST,void 0,void 0,!0);try{return await nc.dropAttribute(e),que(e),QS.signalSchemaChange(new JS(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Oue.error(`Got an error deleting attribute ${Pue.inspect(e)}.`),n}}o(kue,"dropAttribute");function que(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(que,"dropAttributeFromGlobal");async function Gue(e){Gd(e);let t=Due()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Go(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,$o.BAD_REQUEST,void 0,void 0,!0);return await nc.createAttribute(e),QS.signalSchemaChange(new JS(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Gue,"createAttribute");function $ue(e){return nc.getBackup(e)}o($ue,"getBackup");function Vue(e){if(!e.database)throw new Fl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Fl(`Unknown database '${e.database}'`);return Mue(databases[e.database],e.database),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(Vue,"cleanupOrphanBlobs")});var fV=M((QUe,dV)=>{"use strict";var{OPERATIONS_ENUM:Kue}=(H(),v(Y)),cO=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Kue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};dV.exports=cO});var lO=M((ZUe,_V)=>{"use strict";var Yue=Xn(),XUe=fV(),XS=se(),ZS=(H(),v(Y)),Wue=oe(),{handleHDBError:mV,hdbErrors:zue}=ge(),{HDB_ERROR_MSGS:hV,HTTP_STATUS_CODES:pV}=zue,jue=Object.values(ZS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),EV="To use this operation audit log must be enabled in harperdb-config.yaml";_V.exports=Que;async function Que(e){if(XS.isEmpty(e.schema))throw new Error(hV.SCHEMA_REQUIRED_ERR);if(XS.isEmpty(e.table))throw new Error(hV.TABLE_REQUIRED_ERR);if(!Wue.get(ZS.CONFIG_PARAMS.LOGGING_AUDITLOG))throw mV(new Error,EV,pV.BAD_REQUEST,ZS.LOG_LEVELS.ERROR,EV,!0);let t=XS.checkSchemaTableExist(e.schema,e.table);if(t)throw mV(new Error,t,pV.NOT_FOUND,ZS.LOG_LEVELS.ERROR,t,!0);if(!XS.isEmpty(e.search_type)&&jue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${e.search_type}'`);return await Yue.readAuditLog(e)}o(Que,"readAuditLog")});var SV=M((t0e,gV)=>{"use strict";var{OPERATIONS_ENUM:Jue}=(H(),v(Y)),uO=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Jue.GET_BACKUP,this.schema=t,this.table=r}};gV.exports=uO});var yV=M((s0e,RV)=>{"use strict";var Xue=Xn(),n0e=SV(),dO=se(),Zue=(H(),v(Y)),{handleHDBError:ede,hdbErrors:tde}=ge(),{HDB_ERROR_MSGS:TV,HTTP_STATUS_CODES:rde}=tde;RV.exports=nde;async function nde(e){if(dO.isEmpty(e.schema))throw new Error(TV.SCHEMA_REQUIRED_ERR);if(dO.isEmpty(e.table))throw new Error(TV.TABLE_REQUIRED_ERR);let t=dO.checkSchemaTableExist(e.schema,e.table);if(t)throw ede(new Error,t,rde.NOT_FOUND,Zue.LOG_LEVELS.ERROR,t,!0);return Xue.getBackup(e)}o(nde,"getBackup")});var NV=M((o0e,IV)=>{"use strict";var sde=oe(),sc=require("joi"),ide=nt(),AV=require("moment"),ode=require("fs-extra"),fO=require("path"),ade=require("lodash"),Xh=(H(),v(Y)),{LOG_LEVELS:Hl}=(H(),v(Y)),cde="YYYY-MM-DD hh:mm:ss",lde=fO.resolve(__dirname,"../logs");IV.exports=function(e){return ide.validateBySchema(e,ude)};var ude=sc.object({from:sc.custom(bV),until:sc.custom(bV),level:sc.valid(Hl.NOTIFY,Hl.FATAL,Hl.ERROR,Hl.WARN,Hl.INFO,Hl.DEBUG,Hl.TRACE),order:sc.valid("asc","desc"),limit:sc.number().min(1),start:sc.number().min(0),log_name:sc.custom(dde)});function bV(e,t){if(AV(e,AV.ISO_8601).format(cde)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(bV,"validateDatetime");function dde(e,t){if(ade.invert(Xh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=sde.get(Xh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Xh.LOG_NAMES.HDB:e,i=s===Xh.LOG_NAMES.INSTALL?fO.join(lde,Xh.LOG_NAMES.INSTALL):fO.join(n,s);return ode.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(dde,"validateReadLogPath")});var hO=M((c0e,OV)=>{"use strict";var eT=(H(),v(Y)),fde=j(),mde=oe(),hde=NV(),mO=require("path"),wV=require("fs-extra"),{once:pde}=require("events"),{handleHDBError:Ede,hdbErrors:_de}=ge(),{PACKAGE_ROOT:gde}=It(),{replicateOperation:Sde}=(is(),v(ko)),Tde=mO.join(gde,"logs"),Rde=1e3,yde=200;OV.exports=Ade;async function Ade(e){let t=hde(e);if(t)throw Ede(t,t.message,_de.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Sde(e),n=mde.get(eT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?eT.LOG_NAMES.HDB:e.log_name,i=s===eT.LOG_NAMES.INSTALL?mO.join(Tde,eT.LOG_NAMES.INSTALL):mO.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?Rde: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(wV.statSync(i).size-(_+5)*yde,0));let R=wV.createReadStream(i,{start:g});R.on("error",q=>{fde.error(q)});let T=0,y=[],N="",O;R.on("data",q=>{let W=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let K=0,$;for(;($=W.exec(q))&&!R.destroyed;){O&&(O.message=q.slice(K,$.index),F(O));let[le,ue,ie]=$,me=ie.split("] ["),Pe=me[0],De=me[1];me.splice(0,2),O={timestamp:ue,thread:Pe,level:De,tags:me,message:""},K=$.index+le.length}N=q.slice(K)}),R.on("end",q=>{R.destroyed||O&&(O.message=N.trim(),F(O))}),R.resume();function F(q){let W,K,$;switch(!0){case(a&&l&&d):W=new Date(q.timestamp),K=new Date(u),$=new Date(f),q.level===c&&W>=K&&W<=$&&T<p?T++:q.level===c&&W>=K&&W<=$&&(ro(q,h,y),T++,T===_&&R.destroy());break;case(a&&l):W=new Date(q.timestamp),K=new Date(u),q.level===c&&W>=K&&T<p?T++:q.level===c&&W>=K&&(ro(q,h,y),T++,T===_&&R.destroy());break;case(a&&d):W=new Date(q.timestamp),$=new Date(f),q.level===c&&W<=$&&T<p?T++:q.level===c&&W<=$&&(ro(q,h,y),T++,T===_&&R.destroy());break;case(l&&d):W=new Date(q.timestamp),K=new Date(u),$=new Date(f),W>=K&&W<=$&&T<p?T++:W>=K&&W<=$&&(ro(q,h,y),T++,T===_&&R.destroy());break;case a:q.level===c&&T<p?T++:q.level===c&&(ro(q,h,y),T++,T===_&&R.destroy());break;case l:W=new Date(q.timestamp),K=new Date(u),W>=K&&T<p?T++:W>=K&&T>=p&&(ro(q,h,y),T++,T===_&&R.destroy());break;case d:W=new Date(q.timestamp),$=new Date(f),W<=$&&T<p?T++:W<=$&&T>=p&&(ro(q,h,y),T++,T===_&&R.destroy());break;default:T<p?T++:(ro(q,h,y),T++,T===_&&R.destroy())}}o(F,"onLogMessage"),await pde(R,"close");let Z=await r;if(Z.replicated){for(let q of y)q.node=server.hostname;for(let q of Z.replicated){let W=q.node;if(q.status==="failed")ro({timestamp:new Date().toISOString(),level:"error",node:W,message:`Error retrieving logs: ${q.reason}`},h,y);else for(let K of q.results)K.node=W,ro(K,h,y)}}return y}o(Ade,"readLog");function ro(e,t,r){t==="desc"?bde(e,r):t==="asc"?Ide(e,r):r.push(e)}o(ro,"pushLineToResult");function bde(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(bde,"insertDescending");function Ide(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(Ide,"insertAscending")});var tT=M((h0e,DV)=>{"use strict";var pO=require("joi"),{string:Vd,boolean:CV,date:Nde}=pO.types(),wde=nt(),{validateSchemaExists:u0e,validateTableExists:d0e,validateSchemaName:f0e}=qi(),Ode=(H(),v(Y)),Cde=mt(),PV=oe();PV.initSync();var m0e=Vd.invalid(PV.get(Ode.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Cde.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),LV={operation:Vd.valid("add_node","update_node","set_node_replication"),node_name:Vd.optional(),subscriptions:pO.array().items({table:Vd.optional(),schema:Vd.optional(),database:Vd.optional(),subscribe:CV.required(),publish:CV.required().custom(Lde),start_time:Nde.iso()})};function Pde(e){return wde.validateBySchema(e,pO.object(LV))}o(Pde,"addUpdateNodeValidator");function Lde(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(Lde,"checkForFalsy");DV.exports={addUpdateNodeValidator:Pde,validationSchema:LV}});var ic=M((E0e,MV)=>{"use strict";var EO=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},_O=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};MV.exports={Node:EO,NodeSubscription:_O}});var UV=M((g0e,vV)=>{"use strict";var Dde=(H(),v(Y)).OPERATIONS_ENUM,gO=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Dde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};vV.exports=gO});var Zh=M((T0e,xV)=>{"use strict";var SO=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},TO=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)}};xV.exports={RemotePayloadObject:SO,RemotePayloadSubscription:TO}});var FV=M((y0e,BV)=>{"use strict";var RO=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}};BV.exports=RO});var kV=M((O0e,HV)=>{"use strict";var Mde=FV(),b0e=Kt(),I0e=Rt(),vde=j(),{getSchemaPath:N0e,getTransactionAuditStorePath:w0e}=Nt(),{getDatabases:Ude}=(Me(),v(_t));HV.exports=xde;async function xde(e){let t=new Mde;try{let r=Ude()[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){vde.warn(`unable to stat table dbi due to ${r}`)}return t}o(xde,"lmdbGetTableSize")});var GV=M((P0e,qV)=>{"use strict";var yO=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}};qV.exports=yO});var Yd=M((x0e,YV)=>{"use strict";var Bde=require("fs-extra"),Fde=require("path"),mn=require("systeminformation"),oc=j(),$V=Gt(),D0e=mt(),Kd=(H(),v(Y)),Hde=kV(),kde=vo(),{getThreadInfo:VV}=ze(),ep=oe();ep.initSync();var qde=GV(),{openEnvironment:M0e}=Rt(),{getSchemaPath:v0e}=Nt(),{database:U0e,databases:AO}=(Me(),v(_t)),rT;YV.exports={getHDBProcessInfo:wO,getNetworkInfo:CO,getDiskInfo:OO,getMemoryInfo:NO,getCPUInfo:IO,getTimeInfo:bO,getSystemInformation:PO,systemInformation:Gde,getTableSize:LO,getMetrics:DO};function bO(){return mn.time()}o(bO,"getTimeInfo");async function IO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await mn.cpu();d.cpu_speed=await mn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:h,rawCurrentloadNice:p,rawCurrentloadSystem:_,rawCurrentloadUser:g,cpus:R,...T}=await mn.currentLoad();return T.cpus=[],R.forEach(y=>{let{rawLoad:N,rawLoadIdle:O,rawLoadIrq:F,rawLoadNice:Z,rawLoadSystem:q,rawLoadUser:W,...K}=y;T.cpus.push(K)}),d.current_load=T,d}catch(e){return oc.error(`error in getCPUInfo: ${e}`),{}}}o(IO,"getCPUInfo");async function NO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await mn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return oc.error(`error in getMemoryInfo: ${e}`),{}}}o(NO,"getMemoryInfo");async function wO(){let e={core:[],clustering:[]};try{let t=await mn.processes(),r;try{r=Number.parseInt(await Bde.readFile(Fde.join(ep.get(Kd.CONFIG_PARAMS.ROOTPATH),Kd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Kd.NODE_ERROR_CODES.ENOENT)oc.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 oc.error(`error in getHDBProcessInfo: ${t}`),e}}o(wO,"getHDBProcessInfo");async function OO(){let e={};try{if(!ep.get(Kd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await mn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await mn.fsStats();return e.read_write=u,e.size=await mn.fsSize(),e}catch(t){return oc.error(`error in getDiskInfo: ${t}`),e}}o(OO,"getDiskInfo");async function CO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return ep.get(Kd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await mn.networkInterfaceDefault(),e.latency=await mn.inetChecksite("google.com"),(await mn.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 mn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return oc.error(`error in getNetworkInfo: ${t}`),e}}o(CO,"getNetworkInfo");async function PO(){if(rT!==void 0)return rT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await mn.osInfo();e=c;let l=await mn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,rT=e,rT}catch(t){return oc.error(`error in getSystemInformation: ${t}`),e}}o(PO,"getSystemInformation");async function LO(){let e=[],t=await kde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Hde(n));return e}o(LO,"getTableSize");async function DO(){let e={};for(let t in AO){let r=e[t]={},n=r.tables={};for(let s in AO[t])try{let i=AO[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){oc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(DO,"getMetrics");async function KV(){if(ep.get(Kd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await $V.getNATSReferences(),t=await $V.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(KV,"getNatsStreamInfo");async function Gde(e){let t=new qde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await PO(),t.time=bO(),t.cpu=await IO(),t.memory=await NO(),t.disk=await OO(),t.network=await CO(),t.harperdb_processes=await wO(),t.table_size=await LO(),t.metrics=await DO(),t.threads=await VV(),t.replication=await KV(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await PO();break;case"time":t.time=bO();break;case"cpu":t.cpu=await IO();break;case"memory":t.memory=await NO();break;case"disk":t.disk=await OO();break;case"network":t.network=await CO();break;case"harperdb_processes":t.harperdb_processes=await wO();break;case"table_size":t.table_size=await LO();break;case"database_metrics":case"metrics":t.metrics=await DO();break;case"threads":t.threads=await VV();break;case"replication":t.replication=await KV();break;default:break}return t}o(Gde,"systemInformation")});var vs=M((q0e,QV)=>{"use strict";var $de=on(),MO=se(),Vde=require("util"),kl=(H(),v(Y)),WV=oe();WV.initSync();var Kde=pw(),zV=sn(),{Node:F0e,NodeSubscription:H0e}=ic(),Yde=zu(),Wde=UV(),{RemotePayloadObject:zde,RemotePayloadSubscription:jde}=Zh(),{handleHDBError:Qde,hdbErrors:Jde}=ge(),{HTTP_STATUS_CODES:Xde,HDB_ERROR_MSGS:Zde}=Jde,efe=ci(),tfe=Yd(),{packageJson:rfe}=It(),{getDatabases:nfe}=(Me(),v(_t)),k0e=Vde.promisify(Kde.authorize),sfe=zV.searchByHash,ife=zV.searchByValue;QV.exports={isEmpty:ofe,getNodeRecord:afe,upsertNodeRecord:cfe,buildNodePayloads:lfe,checkClusteringEnabled:ufe,getAllNodeRecords:dfe,getSystemInfo:ffe,reverseSubscription:jV};function ofe(e){return e==null}o(ofe,"isEmpty");async function afe(e){let t=new Yde(kl.SYSTEM_SCHEMA_NAME,kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return sfe(t)}o(afe,"getNodeRecord");async function cfe(e){let t=new Wde(kl.SYSTEM_SCHEMA_NAME,kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return $de.upsert(t)}o(cfe,"upsertNodeRecord");function jV(e){if(MO.isEmpty(e.subscribe)||MO.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(jV,"reverseSubscription");function lfe(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=MO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=jV(c),h=nfe()[l]?.[u],p=new jde(l,u,d,m,f,c.start_time,h.schemaDefined?h.attributes:void 0);s.push(p)}return new zde(r,t,s,n)}o(lfe,"buildNodePayloads");function ufe(){if(!WV.get(kl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Qde(new Error,Zde.CLUSTERING_NOT_ENABLED,Xde.BAD_REQUEST,void 0,void 0,!0)}o(ufe,"checkClusteringEnabled");async function dfe(){let e=new efe(kl.SYSTEM_SCHEMA_NAME,kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await ife(e))}o(dfe,"getAllNodeRecords");async function ffe(){let e=await tfe.getSystemInformation();return{hdb_version:rfe.version,node_version:e.node_version,platform:e.platform}}o(ffe,"getSystemInfo")});var vO=M(($0e,s1)=>{"use strict";var nT=Gt(),JV=se(),XV=mt(),ZV=(H(),v(Y)),sT=j(),e1=$d(),mfe=Qu(),{RemotePayloadObject:hfe}=Zh(),{handleHDBError:t1,hdbErrors:pfe}=ge(),{HTTP_STATUS_CODES:r1}=pfe,{NodeSubscription:n1}=ic();s1.exports=Efe;async function Efe(e,t){let r;try{r=await nT.request(`${t}.${XV.REQUEST_SUFFIX}`,new hfe(ZV.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),sT.trace("Response from remote describe all request:",r)}catch(a){sT.error(`addNode received error from describe all request to remote node: ${a}`);let c=nT.requestErrorHandler(a,"add_node",t);throw t1(new Error,c,r1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===XV.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw t1(new Error,a,r1.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===ZV.SYSTEM_SCHEMA_NAME){await nT.createLocalTableStream(l,c);let p=new n1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p);continue}let u=JV.doesSchemaExist(l),d=n[l]!==void 0,f=c?JV.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(sT.trace(`addNode creating schema: ${l}`),await e1.createSchema({operation:"create_schema",schema:l})),!f&&m){sT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new mfe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await e1.createTable(p)}await nT.createLocalTableStream(l,c);let h=new n1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h)}return{added:i,skipped:s}}o(Efe,"reviewSubscriptions")});var Wd={};we(Wd,{addNodeBack:()=>UO,removeNodeBack:()=>xO,setNode:()=>Tfe});async function Tfe(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=Ei(t)):t=WS(r);let n=(0,o1.validateBySchema)(e,Sfe);if(n)throw(0,Vo.handleHDBError)(n,n.message,gfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Vo.ClientError("url or hostname is required for remove_node operation");let h=r,p=zt(),_=await p.get(h);if(!_)throw new Vo.ClientError(h+" does not exist");try{await Qh({url:_.url},{operation:G.REMOVE_NODE_BACK,name:_?.subscriptions?.length>0?et():h},void 0)}catch(g){cs.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 Vo.ClientError("url required for this operation");let s=Qa();if(s==null)throw new Vo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Us.getReplicationCert)();let h=await(0,Us.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Us.createCsr)(),cs.info("Sending CSR to target node:",t)):h&&(c=h.certificate,cs.info("Sending CA named",h.name,"to target node",t))}let l={operation:G.ADD_NODE_BACK,hostname:(0,cc.get)(U.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,cc.get)(U.REPLICATION_SHARD)!==void 0&&(l.shard=(0,cc.get)(U.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(i1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let h=i1(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 Qh({url:t},l,e)}catch(h){h.message=`Error returned from ${t}: `+h.message,cs.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&&(cs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Us.setCertTable)({name:_fe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Us.setCertTable)({name:et(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let h={url:s,ca:c,replicates:!0,subscriptions:null};(0,cc.get)(U.REPLICATION_SHARD)!==void 0&&(h.shard=(0,cc.get)(U.REPLICATION_SHARD)),e.retain_authorization&&(h.authorization=e.authorization),e.start_time&&(h.start_time=e.start_time),await Fo(et(),h)}await Fo(u?u.nodeName:f.name??Ei(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 UO(e){cs.trace("addNodeBack received request:",e);let t=await(0,Us.signCertificate)(e),r;e.csr?(r=t.signingCA,cs.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,cs.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,Us.getReplicationCertAuth)();if(n.replicates){let i={url:Qa(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,cc.get)(U.REPLICATION_SHARD)!==void 0&&(i.shard=(0,cc.get)(U.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Fo(et(),i)}return await Fo(e.hostname,n),t.nodeName=et(),t.usingCA=s?.certificate,cs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function xO(e){cs.trace("removeNodeBack received request:",e),await zt().delete(e.name)}function i1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Us,o1,ac,cc,cs,Vo,_fe,gfe,Sfe,zd=ce(()=>{Us=w(as()),o1=w(nt()),ac=w(require("joi")),cc=w(oe());H();Kh();Ml();is();cs=w(j()),Vo=w(ge()),{pki:_fe}=require("node-forge"),{HTTP_STATUS_CODES:gfe}=Vo.hdbErrors,Sfe=ac.default.object({hostname:ac.default.string(),verify_tls:ac.default.boolean(),replicates:ac.default.boolean(),subscriptions:ac.default.array(),revoked_certificates:ac.default.array(),shard:ac.default.number()});o(Tfe,"setNode");o(UO,"addNodeBack");o(xO,"removeNodeBack");o(i1,"reverseSubscription")});var lT=M((X0e,c1)=>{"use strict";var{handleHDBError:iT,hdbErrors:Rfe}=ge(),{HTTP_STATUS_CODES:oT}=Rfe,{addUpdateNodeValidator:yfe}=tT(),aT=j(),cT=(H(),v(Y)),a1=mt(),Afe=se(),tp=Gt(),rp=vs(),BO=oe(),bfe=vO(),{Node:Ife,NodeSubscription:Nfe}=ic(),{broadcast:wfe}=ze(),{setNode:Ofe}=(zd(),v(Wd)),Q0e=oe(),J0e=(H(),v(Y)),Cfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Pfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Lfe=BO.get(cT.CONFIG_PARAMS.CLUSTERING_NODENAME);c1.exports=Dfe;async function Dfe(e,t=!1){if(aT.trace("addNode called with:",e),BO.get(cT.CONFIG_PARAMS.REPLICATION_URL)||BO.get(cT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Ofe(e);rp.checkClusteringEnabled();let r=yfe(e);if(r)throw iT(r,r.message,oT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await rp.getNodeRecord(n);if(!Afe.isEmptyOrZeroLength(f))throw iT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,oT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await bfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=Cfe,a;let c=rp.buildNodePayloads(s,Lfe,cT.OPERATIONS_ENUM.ADD_NODE,await rp.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 Nfe(h.schema,h.table,h.publish,h.subscribe))}aT.trace("addNode sending remote payload:",c);let u;try{u=await tp.request(`${n}.${a1.REQUEST_SUFFIX}`,c)}catch(f){aT.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 tp.updateRemoteConsumer(_,n)}let m=tp.requestErrorHandler(f,"add_node",n);throw iT(new Error,m,oT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===a1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw iT(new Error,f,oT.INTERNAL_SERVER_ERROR,"error",f)}aT.trace(u);for(let f=0,m=s.length;f<m;f++){let h=s[f];await tp.updateRemoteConsumer(h,n),h.subscribe===!0&&await tp.updateConsumerIterator(h.schema,h.table,n,"start")}let d=new Ife(n,l,u.system_info);return await rp.upsertNodeRecord(d),wfe({type:"nats_update"}),i.length>0?a.message=Pfe:a.message=`Successfully added '${n}' to manifest`,a}o(Dfe,"addNode")});var qO=M((txe,u1)=>{"use strict";var{handleHDBError:FO,hdbErrors:Mfe}=ge(),{HTTP_STATUS_CODES:HO}=Mfe,{addUpdateNodeValidator:vfe}=tT(),np=j(),uT=(H(),v(Y)),l1=mt(),exe=se(),sp=Gt(),ip=vs(),kO=oe(),{cloneDeep:Ufe}=require("lodash"),xfe=vO(),{Node:Bfe,NodeSubscription:Ffe}=ic(),{broadcast:Hfe}=ze(),{setNode:kfe}=(zd(),v(Wd)),qfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Gfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",$fe=kO.get(uT.CONFIG_PARAMS.CLUSTERING_NODENAME);u1.exports=Vfe;async function Vfe(e){if(np.trace("updateNode called with:",e),kO.get(uT.CONFIG_PARAMS.REPLICATION_URL)??kO.get(uT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return kfe(e);ip.checkClusteringEnabled();let t=vfe(e);if(t)throw FO(t,t.message,HO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await ip.getNodeRecord(r);s.length>0&&(n=Ufe(s));let{added:i,skipped:a}=await xfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=qfe,c;let l=ip.buildNodePayloads(i,$fe,uT.OPERATIONS_ENUM.UPDATE_NODE,await ip.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];np.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}np.trace("updateNode sending remote payload:",l);let u;try{u=await sp.request(`${r}.${l1.REQUEST_SUFFIX}`,l)}catch(d){np.error(`updateNode received error from request: ${d}`);let f=sp.requestErrorHandler(d,"update_node",r);throw FO(new Error,f,HO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===l1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw FO(new Error,d,HO.INTERNAL_SERVER_ERROR,"error",d)}np.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await sp.updateRemoteConsumer(m,r),m.subscribe===!0?await sp.updateConsumerIterator(m.schema,m.table,r,"start"):await sp.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Bfe(r,[],u.system_info)]),await Kfe(n[0],i,u.system_info),a.length>0?c.message=Gfe:c.message=`Successfully updated '${r}'`,c}o(Vfe,"updateNode");async function Kfe(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 Ffe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await ip.upsertNodeRecord(n),Hfe({type:"nats_update"})}o(Kfe,"updateNodeTable")});var p1=M((nxe,h1)=>{"use strict";var m1=require("joi"),{string:d1}=m1.types(),Yfe=nt(),f1=(H(),v(Y)),Wfe=oe(),zfe=mt();h1.exports=jfe;function jfe(e){let t=d1.invalid(Wfe.get(f1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(zfe.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=m1.object({operation:d1.valid(f1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Yfe.validateBySchema(e,r)}o(jfe,"removeNodeValidator")});var dT=M((ixe,T1)=>{"use strict";var{handleHDBError:E1,hdbErrors:Qfe}=ge(),{HTTP_STATUS_CODES:_1}=Qfe,Jfe=p1(),op=j(),g1=vs(),Xfe=se(),jd=(H(),v(Y)),S1=mt(),GO=Gt(),$O=oe(),{RemotePayloadObject:Zfe}=Zh(),{NodeSubscription:eme}=ic(),tme=ju(),rme=ka(),{broadcast:nme}=ze(),{setNode:sme}=(zd(),v(Wd)),ime=$O.get(jd.CONFIG_PARAMS.CLUSTERING_NODENAME);T1.exports=ome;async function ome(e){if(op.trace("removeNode called with:",e),$O.get(jd.CONFIG_PARAMS.REPLICATION_URL)??$O.get(jd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return sme(e);g1.checkClusteringEnabled();let t=Jfe(e);if(t)throw E1(t,t.message,_1.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await g1.getNodeRecord(r);if(Xfe.isEmptyOrZeroLength(n))throw E1(new Error,`Node '${r}' was not found.`,_1.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Zfe(jd.OPERATIONS_ENUM.REMOVE_NODE,ime,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await GO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await GO.updateRemoteConsumer(new eme(d.schema,d.table,!1,!1),r)}catch(f){op.error(f)}}try{i=await GO.request(`${r}.${S1.REQUEST_SUFFIX}`,s),op.trace("Remove node reply from remote node:",r,i)}catch(l){op.error("removeNode received error from request:",l),a=!0}let c=new tme(jd.SYSTEM_SCHEMA_NAME,jd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await rme.deleteRecord(c),nme({type:"nats_update"}),i?.status===S1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(op.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(ome,"removeNode")});var A1=M((axe,y1)=>{"use strict";var R1=require("joi"),{string:ame,array:cme}=R1.types(),lme=nt(),ume=tT();y1.exports=dme;function dme(e){let t=R1.object({operation:ame.valid("configure_cluster").required(),connections:cme.items(ume.validationSchema).required()});return lme.validateBySchema(e,t)}o(dme,"configureClusterValidator")});var VO=M((lxe,O1)=>{"use strict";var b1=(H(),v(Y)),fT=j(),fme=se(),mme=oe(),hme=dT(),pme=lT(),Eme=vs(),_me=A1(),{handleHDBError:I1,hdbErrors:gme}=ge(),{HTTP_STATUS_CODES:N1}=gme,Sme="Configure cluster complete.",Tme="Failed to configure the cluster. Check the logs for more details.",Rme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";O1.exports=yme;async function yme(e){fT.trace("configure cluster called with:",e);let t=_me(e);if(t)throw I1(t,t.message,N1.BAD_REQUEST,void 0,void 0,!0);let r=await Eme.getAllNodeRecords(),n=[];if(mme.get(b1.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await w1(hme,{operation:b1.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}fT.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 w1(pme,f,f.node_name);s.push(m)}fT.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"&&(fT.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(fme.isEmptyOrZeroLength(a))return{message:Sme,connections:c};if(l)return{message:Rme,failed_nodes:a,connections:c};throw I1(new Error,Tme,N1.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(yme,"configureCluster");async function w1(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(w1,"functionWrapper")});var D1=M((dxe,L1)=>{"use strict";var ap=require("joi"),Ame=nt(),{validateSchemaExists:C1,validateTableExists:bme,validateSchemaName:P1}=qi(),Ime=ap.object({operation:ap.string().valid("purge_stream"),schema:ap.string().custom(C1).custom(P1).optional(),database:ap.string().custom(C1).custom(P1).optional(),table:ap.string().custom(bme).required()});function Nme(e){return Ame.validateBySchema(e,Ime)}o(Nme,"purgeStreamValidator");L1.exports=Nme});var KO=M((mxe,M1)=>{"use strict";var{handleHDBError:wme,hdbErrors:Ome}=ge(),{HTTP_STATUS_CODES:Cme}=Ome,Pme=D1(),Lme=Gt(),Dme=vs();M1.exports=Mme;async function Mme(e){e.schema=e.schema??e.database;let t=Pme(e);if(t)throw wme(t,t.message,Cme.BAD_REQUEST,void 0,void 0,!0);Dme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Lme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Mme,"purgeStream")});var zO=M((pxe,k1)=>{"use strict";var WO=vs(),vme=Gt(),hT=oe(),Qd=(H(),v(Y)),ql=mt(),Ume=se(),YO=j(),{RemotePayloadObject:xme}=Zh(),{ErrorCode:v1}=require("nats"),{parentPort:U1}=require("worker_threads"),{onMessageByType:Bme}=ze(),{getThisNodeName:Fme}=(is(),v(ko)),{requestClusterStatus:Hme}=(Kh(),v(i$)),{getReplicationSharedStatus:kme,getHDBNodeTable:qme}=(Ml(),v(Bw)),{CONFIRMATION_STATUS_POSITION:Gme,RECEIVED_VERSION_POSITION:$me,RECEIVED_TIME_POSITION:Vme,SENDING_TIME_POSITION:Kme,RECEIVING_STATUS_POSITION:Yme,RECEIVING_STATUS_RECEIVING:Wme}=(iO(),v(z$)),x1=hT.get(Qd.CONFIG_PARAMS.CLUSTERING_ENABLED),B1=hT.get(Qd.CONFIG_PARAMS.CLUSTERING_NODENAME);k1.exports={clusterStatus:zme,buildNodeStatus:H1};var F1;Bme("cluster-status",async e=>{F1(e)});async function zme(){if(hT.get(Qd.CONFIG_PARAMS.REPLICATION_URL)||hT.get(Qd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(U1){U1.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{F1=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=kme(u,l,a);c.lastCommitConfirmed=mT(d[Gme]),c.lastReceivedRemoteTime=mT(d[$me]),c.lastReceivedLocalTime=mT(d[Vme]),c.sendingMessage=mT(d[Kme]),c.lastReceivedStatus=d[Yme]===Wme?"Receiving":"Waiting"}}}else n=Hme();n.node_name=Fme();let s=qme().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:B1,is_enabled:x1,connections:[]};if(!x1)return e;let t=await WO.getAllNodeRecords();if(Ume.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(H1(t[n],e.connections));return await Promise.allSettled(r),e}o(zme,"clusterStatus");function mT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(mT,"asDate");async function H1(e,t){let r=e.name,n=new xme(Qd.OPERATIONS_ENUM.CLUSTER_STATUS,B1,void 0,await WO.getSystemInfo()),s,i,a=ql.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await vme.request(ql.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ql.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=ql.CLUSTER_STATUS_STATUSES.CLOSED,YO.error(`Error getting node status from ${r} `,s))}catch(l){YO.warn(`Error getting node status from ${r}`,l),l.code===v1.NoResponders?a=ql.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===v1.Timeout?a=ql.CLUSTER_STATUS_STATUSES.TIMEOUT:a=ql.CLUSTER_STATUS_STATUSES.CLOSED}let c=new jme(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!==Qd.PRE_4_0_0_VERSION&&await WO.upsertNodeRecord(l)}catch(l){YO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(H1,"buildNodeStatus");function jme(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(jme,"NodeStatusObject")});var QO=M((_xe,q1)=>{"use strict";var{handleHDBError:Qme,hdbErrors:Jme}=ge(),{HTTP_STATUS_CODES:Xme}=Jme,Zme=Gt(),ehe=vs(),jO=se(),pT=require("joi"),the=nt(),rhe=2e3,nhe=pT.object({timeout:pT.number().min(1),connected_nodes:pT.boolean(),routes:pT.boolean()});q1.exports=she;async function she(e){ehe.checkClusteringEnabled();let t=the.validateBySchema(e,nhe);if(t)throw Qme(t,t.message,Xme.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||jO.autoCastBoolean(n),a=s===void 0||jO.autoCastBoolean(s),c={nodes:[]},l=await Zme.getServerList(r??rhe),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:jO.autoCast(_.split(":")[1])})):[]),c.nodes.push(p)}}return c}o(she,"clusterNetwork")});var K1=M((Sxe,V1)=>{"use strict";var JO=require("joi"),G1=nt(),{routeConstraints:$1}=nN();V1.exports={setRoutesValidator:ihe,deleteRoutesValidator:ohe};function ihe(e){let t=JO.object({server:JO.valid("hub","leaf"),routes:$1.required()});return G1.validateBySchema(e,t)}o(ihe,"setRoutesValidator");function ohe(e){let t=JO.object({routes:$1.required()});return G1.validateBySchema(e,t)}o(ohe,"deleteRoutesValidator")});var ET=M((Rxe,X1)=>{"use strict";var Ko=Ot(),XO=se(),xs=(H(),v(Y)),Jd=oe(),Y1=K1(),{handleHDBError:W1,hdbErrors:ahe}=ge(),{HTTP_STATUS_CODES:z1}=ahe,j1="cluster routes successfully set",Q1="cluster routes successfully deleted";X1.exports={setRoutes:lhe,getRoutes:uhe,deleteRoutes:dhe};function che(e){let t=Ko.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=XO.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"?Ko.updateConfigValue(xs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Ko.updateConfigValue(xs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:j1,set:i,skipped:s}}o(che,"setRoutesNats");function lhe(e){let t=Y1.setRoutesValidator(e);if(t)throw W1(t,t.message,z1.BAD_REQUEST,void 0,void 0,!0);if(Jd.get(xs.CONFIG_PARAMS.CLUSTERING_ENABLED))return che(e);let r=[],n=[],s=Jd.get(xs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{J1(s,i)?n.push(i):(s.push(i),r.push(i))}),Ko.updateConfigValue(xs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:j1,set:r,skipped:n}}o(lhe,"setRoutes");function J1(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(J1,"existsInArray");function uhe(){if(Jd.get(xs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Ko.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Jd.get(xs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(uhe,"getRoutes");function dhe(e){let t=Y1.deleteRoutesValidator(e);if(t)throw W1(t,t.message,z1.BAD_REQUEST,void 0,void 0,!0);if(Jd.get(xs.CONFIG_PARAMS.CLUSTERING_ENABLED))return fhe(e);let r=[],n=[],s=Jd.get(xs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{J1(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Ko.updateConfigValue(xs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:Q1,deleted:r,skipped:n}}o(dhe,"deleteRoutes");function fhe(e){let t=Ko.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=XO.isEmptyOrZeroLength(r)?null:r,Ko.updateConfigValue(xs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=XO.isEmptyOrZeroLength(n)?null:n,Ko.updateConfigValue(xs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Q1,deleted:s,skipped:i}}o(fhe,"deleteRoutesNats")});var eK=M((Axe,Z1)=>{"use strict";var cp=require("alasql"),Gl=require("recursive-iterator"),Si=j(),mhe=se(),lp=(H(),v(Y)),ZO=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,phe(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=>lp.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=>!lp.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][lp.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=hhe(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=>!lp.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new cp.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 hhe(e){return e.filter(t=>t[lp.PERMS_CRUD_ENUM.READ])}o(hhe,"filterReadRestrictedAttrs");function phe(e,t,r,n,s){Ehe(e,t,r,n,s)}o(phe,"interpretAST");function up(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(up,"addSchemaTableToMap");function Ehe(e,t,r,n,s){if(!e){Si.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof cp.yy.Insert?The(e,t,r):e instanceof cp.yy.Select?_he(e,t,r,n,s):e instanceof cp.yy.Update?ghe(e,t,r):e instanceof cp.yy.Delete?She(e,t,r):Si.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(Ehe,"getRecordAttributesAST");function _he(e,t,r,n,s){if(!e){Si.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(mhe.isEmptyOrZeroLength(i)){Si.error("No schema specified");return}e.from.forEach(c=>{up(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),up(c.table,t,r,n,s)});let a=new Gl(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{Si.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 Gl(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{Si.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 Gl(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{Si.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 Gl(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{Si.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(_he,"getSelectAttributes");function ghe(e,t,r){if(!e){Si.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.table.databaseid;up(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&eC(e.table.tableid,s,i.columnid,t,r)}o(ghe,"getUpdateAttributes");function She(e,t,r){if(!e){Si.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Gl(e.where),s=e.table.databaseid;up(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&eC(e.table.tableid,s,i.columnid,t,r)}o(She,"getDeleteAttributes");function The(e,t,r){if(!e){Si.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.into.databaseid;up(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&eC(e.into.tableid,s,i.columnid,t,r)}o(The,"getInsertAttributes");function eC(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(eC,"pushAttribute");Z1.exports=ZO});var rK=M((Ixe,tK)=>{"use strict";var _T=(H(),v(Y)),gT=class{static{o(this,"BaseLicense")}constructor(t=0,r=_T.RAM_ALLOCATION_ENUM.DEFAULT,n=_T.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},tC=class extends gT{static{o(this,"ExtendedLicense")}constructor(t=0,r=_T.RAM_ALLOCATION_ENUM.DEFAULT,n=_T.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};tK.exports={BaseLicense:gT,ExtendedLicense:tC}});var ef=M((wxe,cK)=>{"use strict";var Zd=require("fs-extra"),ST=(Ag(),v(yg)),sK=require("crypto"),Rhe=require("moment"),yhe=require("uuid").v4,hn=j(),nC=require("path"),Ahe=se(),$l=(H(),v(Y)),{totalmem:nK}=require("os"),bhe=rK().ExtendedLicense,Xd="invalid license key format",Ihe="061183",Nhe="mofi25",whe="aes-256-cbc",Ohe=16,Che=32,iK=oe(),{resolvePath:oK}=Ot();iK.initSync();var rC;cK.exports={validateLicense:aK,generateFingerPrint:Lhe,licenseSearch:oC,getLicense:vhe,checkMemoryLimit:Uhe};function sC(){return nC.join(iK.getHdbBasePath(),$l.LICENSE_KEY_DIR_NAME,$l.LICENSE_FILE_NAME)}o(sC,"getLicenseDirPath");function Phe(){let e=sC();return oK(nC.join(e,$l.LICENSE_FILE_NAME))}o(Phe,"getLicenseFilePath");function iC(){let e=sC();return oK(nC.join(e,$l.REG_KEY_FILE_NAME))}o(iC,"getFingerPrintFilePath");async function Lhe(){let e=iC();try{return await Zd.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Dhe();throw hn.error(`Error writing fingerprint file to ${e}`),hn.error(t),new Error("There was an error generating the fingerprint")}}o(Lhe,"generateFingerPrint");async function Dhe(){let e=yhe(),t=ST.hash(e,ST.HASH_FUNCTION.MD5),r=iC();try{await Zd.mkdirp(sC()),await Zd.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw hn.error(`Error writing fingerprint file to ${r}`),hn.error(n),new Error("There was an error generating the fingerprint")}return t}o(Dhe,"writeFingerprint");function aK(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:$l.RAM_ALLOCATION_ENUM.DEFAULT,version:$l.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return hn.error("empty license key passed to validate."),r;let n=iC(),s=!1;try{s=Zd.statSync(n)}catch(i){hn.error(i)}if(s){let i;try{i=Zd.readFileSync(n,"utf8")}catch{hn.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(Nhe),c=a[1];c=Buffer.concat([Buffer.from(c)],Ohe);let l=Buffer.concat([Buffer.from(i)],Che),u=sK.createDecipheriv(whe,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=Mhe(a[0],i);if(h)d=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Xd),hn.error(Xd),new Error(Xd)}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(Xd),hn.error(Xd),new Error(Xd)}else r.exp_date=d;r.exp_date<Rhe().valueOf()&&(r.valid_date=!1),ST.validate(a[1],`${Ihe}${i}${t}`,ST.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||hn.error("Invalid licence"),r}o(aK,"validateLicense");function Mhe(e,t){try{let r=sK.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{hn.warn("Check old license failed")}}o(Mhe,"checkOldLicense");function oC(){let e=new bhe,t=[];try{t=Zd.readFileSync(Phe(),"utf-8").split(`\r
19
- `)}catch(r){r.code==="ENOENT"?hn.debug("no license file found"):hn.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(Ahe.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=aK(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){hn.error("There was an error parsing the license string."),hn.error(s),e.ram_allocation=$l.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return rC=e,e}o(oC,"licenseSearch");async function vhe(){return rC||await oC(),rC}o(vhe,"getLicense");function Uhe(){let e=oC().ram_allocation,t=process.constrainedMemory?.()||nK();if(t=Math.round(Math.min(t,nK())/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(Uhe,"checkMemoryLimit")});var lC=M((Cxe,fK)=>{var TT=ef(),lK=require("chalk"),ls=j(),uK=require("prompt"),{promisify:xhe}=require("util"),aC=(H(),v(Y)),Bhe=require("fs-extra"),Fhe=require("path"),Hhe=se(),{packageJson:khe}=It(),dK=oe();dK.initSync();var qhe=require("moment"),Ghe=xhe(uK.get),$he=Fhe.join(dK.getHdbBasePath(),aC.LICENSE_KEY_DIR_NAME,aC.LICENSE_FILE_NAME,aC.LICENSE_FILE_NAME);fK.exports={getFingerprint:Khe,setLicense:Vhe,parseLicense:cC,register:Yhe,getRegistrationInfo:zhe};async function Vhe(e){if(e&&e.key&&e.company){try{ls.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await cC(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw ls.error(r),ls.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(Vhe,"setLicense");async function Khe(){let e={};try{e=await TT.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw ls.error(r),ls.error(t),new Error(r)}return e}o(Khe,"getFingerprint");async function cC(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");ls.info("Validating license input...");let r=TT.validateLicense(e,t);if(ls.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(ls.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(ls.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{ls.info("writing license to disk"),await Bhe.writeFile($he,JSON.stringify({license_key:e,company:t}))}catch(n){throw ls.error("Failed to write License"),n}return"Registration successful."}o(cC,"parseLicense");async function Yhe(){let e=await Whe();return cC(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(Yhe,"register");async function Whe(){let e=await TT.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:lK.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:lK.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{uK.start()}catch(n){ls.error(n)}let r;try{r=await Ghe(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}o(Whe,"promptForRegistration");async function zhe(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await TT.getLicense()}catch(r){throw ls.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Hhe.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=khe.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=qhe.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(zhe,"getRegistrationInfo")});var hK=M((Lxe,mK)=>{"use strict";var jhe=mt(),uC=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+jhe.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"}};mK.exports=uC});var _K=M((Mxe,EK)=>{"use strict";var pK=mt(),dC=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+pK.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+pK.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"}};EK.exports=dC});var SK=M((Uxe,gK)=>{"use strict";var fC=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};gK.exports=fC});var RK=M((Bxe,TK)=>{"use strict";var Qhe=mt(),mC=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Qhe.SERVER_SUFFIX.ADMIN,this.password=r}};TK.exports=mC});var bT=M((Hxe,bK)=>{"use strict";var Vl=require("path"),Kl=require("fs-extra"),Jhe=hK(),Xhe=_K(),Zhe=SK(),epe=RK(),hC=rs(),rf=se(),xn=Ot(),yT=(H(),v(Y)),dp=mt(),{CONFIG_PARAMS:nr}=yT,nf=j(),fp=oe(),yK=Ki(),pC=Gt(),tpe=as(),tf="clustering",rpe=1e4,AK=50;bK.exports={generateNatsConfig:spe,removeNatsConfig:ipe,getHubConfigPath:npe};function npe(){let e=fp.get(nr.ROOTPATH);return Vl.join(e,tf,dp.NATS_CONFIG_FILES.HUB_SERVER)}o(npe,"getHubConfigPath");async function spe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=fp.get(nr.ROOTPATH);Kl.ensureDirSync(Vl.join(r,"clustering","leaf")),fp.initSync();let n=xn.getConfigFromFile(nr.CLUSTERING_TLS_CERT_AUTH),s=xn.getConfigFromFile(nr.CLUSTERING_TLS_PRIVATEKEY),i=xn.getConfigFromFile(nr.CLUSTERING_TLS_CERTIFICATE);!await Kl.exists(i)&&!await Kl.exists(!n)&&await tpe.createNatsCerts();let a=Vl.join(r,tf,dp.PID_FILES.HUB),c=Vl.join(r,tf,dp.PID_FILES.LEAF),l=xn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Vl.join(r,tf,dp.NATS_CONFIG_FILES.HUB_SERVER),d=Vl.join(r,tf,dp.NATS_CONFIG_FILES.LEAF_SERVER),f=xn.getConfigFromFile(nr.CLUSTERING_TLS_INSECURE),m=xn.getConfigFromFile(nr.CLUSTERING_TLS_VERIFY),h=xn.getConfigFromFile(nr.CLUSTERING_NODENAME),p=xn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await pC.checkNATSServerInstalled()||AT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let _=await hC.listUsers(),g=xn.getConfigFromFile(nr.CLUSTERING_USER),R=await hC.getClusterUser();(rf.isEmpty(R)||R.active!==!0)&&AT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await RT(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await RT(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await RT(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),await RT(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],y=[];for(let[K,$]of _.entries())$.role?.role===yT.ROLE_TYPES_ENUM.CLUSTER_USER&&$.active&&(T.push(new epe($.username,yK.decrypt($.hash))),y.push(new Zhe($.username,yK.decrypt($.hash))));let N=[],{hub_routes:O}=xn.getClusteringRoutes();if(!rf.isEmptyOrZeroLength(O))for(let K of O)N.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${K.host}:${K.port}`);let F=new Jhe(xn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),h,a,i,s,n,f,m,p,xn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NAME),xn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,T,y);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=rf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===yT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Kl.writeJson(u,F),nf.trace(`Hub server config written to ${u}`));let Z=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,q=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,W=new Xhe(xn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,c,l,[Z],[q],T,y,i,s,n,f);n==null&&delete W.tls.ca_file,(t===void 0||t===yT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Kl.writeJson(d,W),nf.trace(`Leaf server config written to ${d}`))}o(spe,"generateNatsConfig");async function RT(e){let t=fp.get(e);return rf.isEmpty(t)&&AT(`port undefined for '${e}'`),await rf.isPortTaken(t)&&AT(`'${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(RT,"isPortAvailable");function AT(e){let t=`Error generating clustering config: ${e}`;nf.error(t),console.error(t),process.exit(1)}o(AT,"generateNatsConfigError");async function ipe(e){let{port:t,config_file:r}=pC.getServerConfig(e),{username:n,decrypt_hash:s}=await hC.getClusterUser(),i=0,a=2e3;for(;i<AK;){try{let d=await pC.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){nf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=AK)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&nf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await rf.asyncSetTimeout(u)}let c="0".repeat(rpe),l=Vl.join(fp.get(nr.ROOTPATH),tf,r);await Kl.writeFile(l,c),await Kl.remove(l),nf.notify(e,"started.")}o(ipe,"removeNatsConfig")});var PK=M((qxe,CK)=>{"use strict";var us=oe(),ope=ef(),Ve=(H(),v(Y)),mp=mt(),Yo=require("path"),{PACKAGE_ROOT:NT}=It(),IK=oe(),IT=se(),sf="/dev/null",ape=Yo.join(NT,"launchServiceScripts"),NK=Yo.join(NT,"utility/scripts"),cpe=Yo.join(NK,Ve.HDB_RESTART_SCRIPT),wK=Yo.resolve(NT,"dependencies",`${process.platform}-${process.arch}`,mp.NATS_BINARY_NAME);function OK(){let t=ope.licenseSearch().ram_allocation||Ve.RAM_ALLOCATION_ENUM.DEFAULT,r=Ve.MEM_SETTING_KEY+t,n={[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return IT.noBootFile()&&(n[Ve.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=IT.getEnvCliRootPath()),{name:Ve.PROCESS_DESCRIPTORS.HDB,script:Ve.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:NT}}o(OK,"generateMainServerConfig");var lpe=9930;function upe(){us.initSync(!0);let e=us.get(Ve.CONFIG_PARAMS.ROOTPATH),t=Yo.join(e,"clustering",mp.NATS_CONFIG_FILES.HUB_SERVER),r=Yo.join(us.get(Ve.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ve.LOG_NAMES.HDB),n=IK.get(Ve.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=mp.LOG_LEVEL_FLAGS[us.get(Ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==lpe?"-"+n:""),script:wK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return us.get(Ve.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=sf,i.error_file=sf),i}o(upe,"generateNatsHubServerConfig");var dpe=9940;function fpe(){us.initSync(!0);let e=us.get(Ve.CONFIG_PARAMS.ROOTPATH),t=Yo.join(e,"clustering",mp.NATS_CONFIG_FILES.LEAF_SERVER),r=Yo.join(us.get(Ve.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ve.LOG_NAMES.HDB),n=IK.get(Ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=mp.LOG_LEVEL_FLAGS[us.get(Ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==dpe?"-"+n:""),script:wK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return us.get(Ve.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=sf,i.error_file=sf),i}o(fpe,"generateNatsLeafServerConfig");function mpe(){us.initSync();let e=Yo.join(us.get(Ve.CONFIG_PARAMS.LOGGING_ROOT),Ve.LOG_NAMES.HDB),t={name:Ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:ape,autorestart:!1};return us.get(Ve.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=sf,t.error_file=sf),t}o(mpe,"generateClusteringUpgradeV4ServiceConfig");function hpe(){let e={[Ve.PROCESS_NAME_ENV_PROP]:Ve.PROCESS_DESCRIPTORS.RESTART_HDB};return IT.noBootFile()&&(e[Ve.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=IT.getEnvCliRootPath()),{...{name:Ve.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:NK},script:cpe}}o(hpe,"generateRestart");function ppe(){return{apps:[OK()]}}o(ppe,"generateAllServiceConfigs");CK.exports={generateAllServiceConfigs:ppe,generateMainServerConfig:OK,generateRestart:hpe,generateNatsHubServerConfig:upe,generateNatsLeafServerConfig:fpe,generateClusteringUpgradeV4ServiceConfig:mpe}});var pp=M((Vxe,VK)=>{"use strict";var lt=(H(),v(Y)),Epe=se(),zo=bT(),wT=Gt(),Wo=mt(),lc=PK(),OT=oe(),Yl=j(),_pe=vs(),{startWorker:LK,onMessageFromWorkers:gpe}=ze(),Spe=Yd(),$xe=require("util"),Tpe=require("child_process"),Rpe=require("fs"),{execFile:ype}=Tpe,Je;VK.exports={enterPM2Mode:Ape,start:uc,stop:EC,reload:MK,restart:vK,list:_C,describe:BK,connect:jo,kill:Ope,startAllServices:Cpe,startService:gC,getUniqueServicesList:FK,restartAllServices:Ppe,isServiceRegistered:HK,reloadStopStart:kK,restartHdb:xK,deleteProcess:Npe,startClusteringProcesses:GK,startClusteringThreads:$K,isHdbRestartRunning:wpe,isClusteringRunning:Dpe,stopClustering:Lpe,reloadClustering:Mpe,expectedRestartOfChildren:UK};var hp=!1;gpe(e=>{e.type==="restart"&&OT.initSync(!0)});function Ape(){hp=!0}o(Ape,"enterPM2Mode");function jo(){return Je||(Je=require("pm2")),new Promise((e,t)=>{Je.connect((r,n)=>{r&&t(r),e(n)})})}o(jo,"connect");var pn,bpe=10,DK;function uc(e,t=!1){if(hp)return Ipe(e);let r=ype(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=pn.indexOf(r);a>-1&&pn.splice(a,1),!DK&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<bpe&&(Rpe.existsSync(zo.getHubConfigPath())?uc(e):(await zo.generateNatsConfig(!0),uc(e),await new Promise(c=>setTimeout(c,3e3)),await zo.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await zo.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=OT.get(lt.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&Wo.LOG_LEVEL_HIERARCHY[a]>=Wo.LOG_LEVEL_HIERARCHY[d||"info"]){let h=d===Wo.LOG_LEVELS.ERR||d===Wo.LOG_LEVELS.WRN?Yl.OUTPUTS.STDERR:Yl.OUTPUTS.STDOUT;Yl.logCustomLevel(d||"info",h,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=Wo.LOG_LEVELS[m]}if(Wo.LOG_LEVEL_HIERARCHY[a]>=Wo.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===Wo.LOG_LEVELS.ERR||d===Wo.LOG_LEVELS.WRN?Yl.OUTPUTS.STDERR:Yl.OUTPUTS.STDOUT;Yl.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(),!pn&&(pn=[],!t)){let i=o(()=>{DK=!0,pn&&(pn.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}pn.push(r)}o(uc,"start");function Ipe(e){return new Promise(async(t,r)=>{try{await jo()}catch(n){r(n)}Je.start(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Ipe,"startWithPM2");function EC(e){if(!hp){for(let t of pn||[])t.name===e&&(pn.splice(pn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await jo()}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(EC,"stop");function MK(e){return new Promise(async(t,r)=>{try{await jo()}catch(n){r(n)}Je.reload(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(MK,"reload");function vK(e){if(!hp){UK();for(let t of pn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await jo()}catch(n){r(n)}Je.restart(e,(n,s)=>{Je.disconnect(),t(s)})})}o(vK,"restart");function UK(){for(let e of pn||[])e.config&&(e.config.restarts=0)}o(UK,"expectedRestartOfChildren");function Npe(e){return new Promise(async(t,r)=>{try{await jo()}catch(n){r(n)}Je.delete(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Npe,"deleteProcess");async function xK(){await uc(lc.generateRestart())}o(xK,"restartHdb");async function wpe(){let e=await _C();for(let t in e)if(e[t].name===lt.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(wpe,"isHdbRestartRunning");function _C(){return new Promise(async(e,t)=>{try{await jo()}catch(r){t(r)}Je.list((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(_C,"list");function BK(e){return new Promise(async(t,r)=>{try{await jo()}catch(n){r(n)}Je.describe(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(BK,"describe");function Ope(){if(!hp){for(let e of pn||[])e.kill();pn=[];return}return new Promise(async(e,t)=>{try{await jo()}catch(r){t(r)}Je.killDaemon((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(Ope,"kill");async function Cpe(){try{await GK(),await $K(),await uc(lc.generateAllServiceConfigs())}catch(e){throw Je?.disconnect(),e}}o(Cpe,"startAllServices");async function gC(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case lt.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=lc.generateMainServerConfig();break;case lt.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=lc.generateNatsIngestServiceConfig();break;case lt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=lc.generateNatsReplyServiceConfig();break;case lt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=lc.generateNatsHubServerConfig(),await uc(r,t),await zo.removeNatsConfig(e);return;case lt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=lc.generateNatsLeafServerConfig(),await uc(r,t),await zo.removeNatsConfig(e);return;case lt.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=lc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await uc(r)}catch(r){throw Je?.disconnect(),r}}o(gC,"startService");async function FK(){try{let e=await _C(),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(FK,"getUniqueServicesList");async function Ppe(e=[]){try{let t=!1,r=await FK();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===lt.PROCESS_DESCRIPTORS.HDB?t=!0:await vK(a))}t&&await kK(lt.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Je?.disconnect(),t}}o(Ppe,"restartAllServices");async function HK(e){if(pn?.find(r=>r.name===e))return!0;let t=await Spe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(HK,"isServiceRegistered");async function kK(e){let t=OT.get(lt.CONFIG_PARAMS.THREADS_COUNT)??OT.get(lt.CONFIG_PARAMS.THREADS),r=await BK(e),n=Epe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await EC(e),await gC(e)):e===lt.PROCESS_DESCRIPTORS.HDB?await xK():await MK(e)}o(kK,"reloadStopStart");var qK;async function GK(e=!1){for(let t in lt.CLUSTERING_PROCESSES){let r=lt.CLUSTERING_PROCESSES[t];await gC(r,e)}}o(GK,"startClusteringProcesses");async function $K(){qK=LK(lt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:lt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await wT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await wT.updateLocalStreams();let e=await _pe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===lt.PRE_4_0_0_VERSION){Yl.info("Starting clustering upgrade 4.0.0 process"),LK(lt.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o($K,"startClusteringThreads");async function Lpe(){for(let e in lt.CLUSTERING_PROCESSES)if(e!==lt.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===lt.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await qK.terminate();else{let t=lt.CLUSTERING_PROCESSES[e];await EC(t)}}o(Lpe,"stopClustering");async function Dpe(){for(let e in lt.CLUSTERING_PROCESSES){let t=lt.CLUSTERING_PROCESSES[e];if(await HK(t)===!1)return!1}return!0}o(Dpe,"isClusteringRunning");async function Mpe(){await zo.generateNatsConfig(!0),await wT.reloadNATSHub(),await wT.reloadNATSLeaf(),await zo.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await zo.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Mpe,"reloadClustering")});var RC={};we(RC,{compactOnStart:()=>vpe,copyDb:()=>QK});async function vpe(){dc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,SC.get)(U.ROOTPATH),t=new Map,r=it();(0,TC.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,CT.join)(e,"backup",n+".mdb"),a=(0,CT.join)(e,Fc,n+"-copy.mdb"),c=0;try{c=await KK(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){dc.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 QK(n,a),console.log("Backing up",n,"to",i);try{await(0,Wl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}console.log("Moving copy compacted",n,"to",s),await(0,Wl.move)(a,s,{overwrite:!0}),await(0,Wl.remove)((0,CT.join)(e,Fc,`${n}-copy.mdb-lock`))}try{hd()}catch(n){dc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}try{hd()}catch(n){dc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){dc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,TC.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,Wl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw hd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=await KK(n);if(console.log("Database",n,"after compact has a total record count of",a),i!==a){let c=`There is a discrepancy between pre and post compact record count for database ${n}.
17
+ `,"")}o(VG,"runCommand");async function yle(){try{await Xce.access(Pw)}catch{return!1}let e=await VG(`${Pw} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Zce.eq(t,Tle)}o(yle,"checkNATSServerInstalled");async function Uw(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await GG.getClusterUser();if(Dl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}pi.trace("create nats connection called");let i=await dle({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),pi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&pi.error("Error with Nats client connection, connection closed",a),i===mn&&KG()}),i}o(Uw,"createConnection");function KG(){mn=void 0,Cl=void 0,Pl=void 0,Ll=void 0}o(KG,"clearClientCache");async function Ale(){mn&&(await mn.drain(),mn=void 0,Cl=void 0,Pl=void 0,Ll=void 0)}o(Ale,"closeConnection");var mn,Ll;async function Bh(){return Ll||(Ll=Uw(Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),mn=await Ll),mn||Ll}o(Bh,"getConnection");async function Fh(){if(Cl)return Cl;Dl(mn)&&await Bh();let{domain:e}=wd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Cl=await mn.jetstreamManager({domain:e,timeout:6e4}),Cl}o(Fh,"getJetStreamManager");async function YG(){if(Pl)return Pl;Dl(mn)&&await Bh();let{domain:e}=wd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Pl=mn.jetstream({domain:e,timeout:6e4}),Pl}o(YG,"getJetStream");async function Zi(){let e=mn||await Bh(),t=Cl||await Fh(),r=Pl||await YG();return{connection:e,jsm:t,js:r}}o(Zi,"getNATSReferences");async function ble(e){let t=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await GG.getClusterUser(),s=await Uw(t,r,n),i=vw(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=$G.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 SS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(ble,"getServerList");async function xw(e,t){let{jsm:r}=await Zi(),n=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:fle.File,retention:mle.Limits,subjects:t,discard:hle.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(xw,"createLocalStream");async function WG(){let{jsm:e}=await Zi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(WG,"listStreams");async function Ile(e){let{jsm:t}=await Zi();await t.streams.delete(e)}o(Ile,"deleteLocalStream");async function Nle(e){let{connection:t}=await Zi(),r=[],n=vw(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push($G.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(Nle,"listRemoteStreams");async function wle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=FG(),a={durable_name:i,ack_policy:Dw.Explicit};t&&(a.deliver_policy=Mw.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=Lw(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(jr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(wle,"viewStream");async function*Ole(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=FG(),a={durable_name:i,ack_policy:Dw.Explicit};t&&(a.deliver_policy=Mw.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=Lw(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(jr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Ole,"viewStreamIterator");async function Cle(e,t,r,n){pi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=zG(n,r);let{js:s}=await Zi(),i=await RS(),a=`${e}.${i}`,c=await gle(()=>n instanceof Uint8Array?n:qG.encode(n));try{pi.trace(`publishToStream publishing to subject: ${a}`),_le(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 QG(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){pi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await xw(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Cle,"publishToStream");function zG(e,t){t===void 0&&(t=Ele());let r=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(jr.MSG_HEADERS.ORIGIN)&&r&&t.append(jr.MSG_HEADERS.ORIGIN,r),t}o(zG,"addNatsMsgHeader");function wd(e){e=e.toLowerCase();let t=xh.join(Hr.get(Qe.CONFIG_PARAMS.ROOTPATH),Sle);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Dl(Cw)&&(Cw={port:vh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:vh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.HUB,config_file:jr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:xh.join(t,jr.PID_FILES.HUB),hdbNatsPath:t}),Cw;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Dl(Ow)&&(Ow={port:vh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:vh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.LEAF,config_file:jr.NATS_CONFIG_FILES.LEAF_SERVER,domain:vh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+jr.SERVER_SUFFIX.LEAF,pid_file_path:xh.join(t,jr.PID_FILES.LEAF),hdbNatsPath:t}),Ow;pi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(wd,"getServerConfig");async function jG(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Dw.Explicit,durable_name:r,deliver_policy:Mw.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(jG,"createConsumer");async function Ple(e,t,r){await e.consumers.delete(t,r)}o(Ple,"removeConsumer");function Lle(e){return e.split(".")[1]}o(Lle,"extractServerName");async function Dle(e,t,r=6e4,n=vw()){if(!SS.isObject(t))throw new Error("data param must be an object");let s=qG.encode(t),{connection:i}=await Zi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return Lw(c.data)}o(Dle,"request");function Bw(e){return new Promise(async(t,r)=>{let n=nle(Pw,["--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(Bw,"reloadNATS");async function Mle(){let{pid_file_path:e}=wd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Bw(e)}o(Mle,"reloadNATSHub");async function vle(){let{pid_file_path:e}=wd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Bw(e)}o(vle,"reloadNATSLeaf");function Ule(e,t,r){let n;switch(e.code){case BG.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case BG.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(Ule,"requestErrorHandler");async function xle(e,t){let r=t+jr.SERVER_SUFFIX.LEAF,{connection:n}=await Zi(),{jsm:s}=await Vle(r),{schema:i,table:a}=e,c=TS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await QG(async()=>{if(e.subscribe===!0)await jG(s,c,n.info.server_name,l);else try{await Ple(s,c,n.info.server_name)}catch(u){pi.trace(u)}})}o(xle,"updateRemoteConsumer");async function Ble(e,t,r,n){let s=TS.createNatsTableStreamName(e,t),i=r+jr.SERVER_SUFFIX.LEAF,a={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!kG&&lle()<Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=ww();await c(a)}await ale(a),n==="stop"&&await SS.asyncSetTimeout(1e3)}o(Ble,"updateConsumerIterator");function QG(e){return ole.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(QG,"exclusiveLock");async function JG(e,t){let r=TS.createNatsTableStreamName(e,t),n=await RS(),s=qle(e,t,n);await xw(r,[s])}o(JG,"createLocalTableStream");async function Fle(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(Fle,"createTableStreams");async function XG(e,t,r=void 0){if(Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=TS.createNatsTableStreamName(e,t),{domain:s}=wd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Bh()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")pi.warn(n);else throw n}}o(XG,"purgeTableStream");async function Hle(e,t){if(Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await XG(e,t[r])}o(Hle,"purgeSchemaTableStreams");async function kle(e){return(await Fh()).streams.info(e)}o(kle,"getStreamInfo");function qle(e,t,r){return`${jr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(qle,"createSubjectName");async function RS(){if(Uh)return Uh;if(Uh=(await Fh())?.nc?.info?.server_name,Uh===void 0)throw new Error("Unable to get jetstream manager server name");return Uh}o(RS,"getJsmServerName");async function Gle(){let e=await Fh(),t=await RS(),r=await WG();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=$le(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(".");pi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(Gle,"updateLocalStreams");function $le(e){let{config:t}=e,r=!1,n=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Hr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Hr.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($le,"updateStreamLimits");async function Vle(e){let t,r;try{t=await mn.jetstream({domain:e}),r=await mn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw pi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(Vle,"connectToRemoteJS")});function Fw(e){let t=e.get(yS),r=t?(0,Od.unpack)(t):null;r||(r={remoteNameToId:{}});let n=et(),s=!1;r.nodeName=et();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:kh(e)??1,nodes:[]})})}i[n]=0,e.putSync(yS,(0,Od.pack)(r))}return r}function Hh(e){return Fw(e).remoteNameToId}function t$(e,t){let r=Fw(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(yS,(0,Od.pack)(r)),s}function AS(e,t){let r=Fw(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(yS,(0,Od.pack)(r))}return e$.trace?.("The remote node name map",e,n,s),s}var e$,Od,yS,Hw=le(()=>{e$=w(ri());is();Od=require("msgpackr"),yS=Symbol.for("remote-ids");o(Fw,"getIdMappingRecord");o(Hh,"exportIdMapping");o(t$,"remoteToLocalNodeId");o(AS,"getIdOfRemoteNode")});var kw={};Oe(kw,{commitsAwaitingReplication:()=>Cd,getHDBNodeTable:()=>zt,getReplicationSharedStatus:()=>Pd,iterateRoutes:()=>Gh,shouldReplicateToNode:()=>qh,subscribeToNodeUpdates:()=>Ld});function zt(){return r$||(r$=je({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 Pd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Ld(e){zt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;o$.debug?.("adding node",n,"on node",et()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==et()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of zt().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 qh(e,t){let r=za.default.get(U.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>(typeof n=="string"?n:n.name)===t&&(!n.sharded||e.shard===za.default.get(U.REPLICATION_SHARD))))&&zt().primaryStore.get(et())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function Kle(){Ld(e=>{ja({},(t,r)=>{let n=e.name,s=n$.get(n);if(s||n$.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=Pd(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Cd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Gh(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=za.default.get(U.REPLICATION_SECUREPORT)??(!za.default.get(U.REPLICATION_PORT)&&za.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||za.default.get(U.REPLICATION_PORT)||za.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){s$.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 s$,i$,za,o$,r$,n$,Cd,Ml=le(()=>{Me();is();cm();s$=require("worker_threads"),i$=w(_e()),za=w(ae());H();o$=w(ri());server.nodes=[];o(zt,"getHDBNodeTable");o(Pd,"getReplicationSharedStatus");o(Ld,"subscribeToNodeUpdates");o(qh,"shouldReplicateToNode");n$=new Map;Bv((e,t,r)=>{if(r>server.nodes.length)throw new i$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Cd||(Cd=new Map,Kle());let n=Cd.get(e);return n||(n=[],Cd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(Kle,"startSubscriptionToReplications");o(Gh,"iterateRoutes")});var l$={};Oe(l$,{connectedToNode:()=>vl,disconnectedFromNode:()=>Md,ensureNode:()=>Fo,requestClusterStatus:()=>c$,startOnMainThread:()=>Gw});async function Gw(e){let t=0,r=ot();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){bS.set(i,kh(l.auditStore));break}}}to.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=et();function c(){let l=zt().primaryStore.get(a);if(l!==null){let u=e.url??Qa();if(l===void 0||l.url!==u||l.shard!==e.shard)return Fo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),zt().primaryStore.get(a)&&c();for(let l of Gh(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)}Ld(s)});let n;function s(i,a=i?.name){let c=et()&&a===et()||Qa()&&i?.url===Qa();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of zt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(lt.trace("Setting up node replication for",i),!i){for(let[f,m]of eo){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),lt.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){eo.get(f).iterator.remove(),eo.delete(f);return}}return}if(c)return;if(!i.url){lt.info(`Node ${i.name} is missing url`);return}let l=eo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(lt.info(`Added node ${i.name} at ${i.url} for process ${et()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Dd)if(i.url===m.url){Dd.delete(f);break}Dd.set(i.name,i)}let u=ot();if(l||(l=new Map,eo.set(i.url,l)),l.iterator=ja(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]||(lt.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){lt.trace("Setting up replication for database",f,"on node",i.name);let h=l.get(f),p,_=[{replicateByDefault:m,...i}];bS.has(f)&&$h.default.get(U.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:m,name:et(),startTime:bS.get(f),endTime:Date.now(),replicates:!0}),bS.delete(f));let g=qh(i,f),y=to.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):Vh(T)},Yle);else{lt.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:zt().primaryStore.get(et())?.replicates}),zt().primaryStore.get(et())?.replicates||(n=!1,lt.info("Disabling replication, this node name",et(),zt().primaryStore.get(et()),f));let T={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};p?p.postMessage(T):NS(T)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Md=o(function(i){try{lt.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Dd.keys()),c=a.sort(),l=c.indexOf(i.name||Ei(i.url));if(l===-1){lt.warn("Disconnected node not found in node map",i.name,a);return}let u=eo.get(i.url),d=u?.get(i.database);if(!d){lt.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!$h.default.get(U.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,h=(l+1)%c.length;for(;l!==h;){let p=c[h],_=Dd.get(p);u=eo.get(_.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){h=(h+1)%c.length;continue}let{worker:y,nodes:T}=g,R=!1;for(let N of d.nodes){if(T.some(C=>C.name===N.name)){lt.info(`Disconnected node is already failing over to ${p} for ${i.database}`);continue}N.endTime<Date.now()||(T.push(N),R=!0)}if(d.nodes=[d.nodes[0]],!R){lt.info(`Disconnected node ${i.name} has no nodes to fail over to ${p}`);return}lt.info(`Failing over ${i.database} from ${i.name} to ${p}`),y?y.postMessage({type:"subscribe-to-node",database:i.database,nodes:T}):Vh({database:i.database,nodes:T});return}lt.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){lt.error("Error failing over node",a)}},"disconnectedFromNode"),vl=o(function(i){let a=eo.get(i.url),c=a?.get(i.database);if(!c){lt.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){lt.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){lt.debug("Connected node is not named yet",i.database,c);return}if(!$h.default.get(U.REPLICATION_FAILOVER))return;c.nodes=[l];let u=!1;for(let d of eo.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:h,connected:p}=f;if(h)if(p===!1&&h[0].shard===l.shard)u=!0,c.nodes.push(h[0]);else{let _=h.filter(g=>g&&g.name!==l.name);_.length<h.length&&(f.nodes=_,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:h}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,to.onMessageByType)("disconnected-from-node",Md),(0,to.onMessageByType)("connected-to-node",vl),(0,to.onMessageByType)("request-cluster-status",c$)}function c$(e,t){let r=[];for(let[n,s]of Dd)try{let i=eo.get(s.url);lt.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(h=>!(h.endTime<Date.now())).map(h=>h.name)});let c=(0,qw.cloneDeep)(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){lt.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Fo(e,t){let r=zt();e=e??Ei(t.url),t.name=e;try{if(t.ca){let s=new a$.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){lt.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(lt.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!$h.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,qw.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])]}lt.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var to,IS,lt,qw,$h,a$,Yle,eo,Md,vl,Dd,bS,Kh=le(()=>{Me();to=w(ze());is();IS=require("worker_threads");Ml();lt=w(z()),qw=require("lodash"),$h=w(ae());H();a$=require("crypto"),Yle=200,eo=new Map,Dd=new Map,bS=new Map;o(Gw,"startOnMainThread");o(c$,"requestClusterStatus");IS.parentPort&&(Md=o(e=>{IS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),vl=o(e=>{IS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,to.onMessageByType)("subscribe-to-node",e=>{Vh(e)}),(0,to.onMessageByType)("unsubscribe-from-node",e=>{NS(e)}));o(Fo,"ensureNode")});var as=M(jt=>{"use strict";var hr=require("path"),{watch:p$}=require("chokidar"),xn=require("fs-extra"),vd=require("node-forge"),E$=require("net"),{generateKeyPair:$w,X509Certificate:Ho,createPrivateKey:_$}=require("crypto"),Wle=require("util");$w=Wle.promisify($w);var Pt=vd.pki,_i=require("joi"),{v4:g$}=require("uuid"),{validateBySchema:Ww}=st(),{forComponent:zle}=z(),os=ae(),Ds=(H(),v(Y)),{CONFIG_PARAMS:xl}=Ds,gi=sN(),{ClientError:Xa}=_e(),CS=require("node:tls"),{relative:S$,join:jle}=require("node:path"),{CERT_PREFERENCE_APP:AUe,CERTIFICATE_VALUES:u$}=gi,Qle=Hc(),OS=Ot(),{table:Jle,getDatabases:Xle,databases:wS}=(Me(),v(gt)),{getJWTRSAKeys:d$}=(Ad(),v(Dh)),ft=zle("tls");jt.generateKeys=Jw;jt.updateConfigCert=I$;jt.createCsr=oue;jt.signCertificate=aue;jt.setCertTable=Ud;jt.loadCertificates=Qw;jt.reviewSelfSignedCert=Zw;jt.createTLSSelector=w$;jt.listCertificates=C$;jt.addCertificate=mue;jt.removeCertificate=pue;jt.createNatsCerts=uue;jt.generateCertsKeys=lue;jt.getReplicationCert=Wh;jt.getReplicationCertAuth=sue;jt.renewSelfSigned=due;jt.hostnamesFromCert=tO;jt.getKey=Eue;jt.getHostnamesFromCertificate=_ue;jt.getPrimaryHostName=eO;var{urlToNodeName:T$,getThisNodeUrl:Zle,getThisNodeName:MS,clearThisNodeName:eue}=(is(),v(ko)),{readFileSync:tue,statSync:R$}=require("node:fs"),bUe=ae(),{getTicketKeys:rue,onMessageFromWorkers:nue}=ze(),Ja=z(),{isMainThread:Vw}=require("worker_threads"),{TLSSocket:y$,createSecureContext:IUe}=require("node:tls"),zw=3650,Yh=["127.0.0.1","localhost","::1"],jw=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];nue(async e=>{e.type===Ds.ITC_EVENT_TYPES.RESTART&&(os.initSync(!0),await Zw())});var Qr;function ec(){return Qr||(Qr=Xle().system.hdb_certificate,Qr||(Qr=Jle({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__"}]}))),Qr}o(ec,"getCertTable");async function Wh(){let e=w$("replication"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(MS());if(!r)return;let n=new Ho(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(Wh,"getReplicationCert");async function sue(){ec();let e=(await Wh()).options.cert,r=new Ho(e).issuer.match(/CN=(.*)/)?.[1];return Qr.get(r)}o(sue,"getReplicationCertAuth");var Kw,Za=new Map,PS=[],f$;function Qw(){if(Kw)return;if(Kw=!0,!f$&&Vw){let n=OS.getConfigFilePath();f$=p$(n,{persistent:!1}).on("change",()=>{ft.warn?.("Config file changed, reloading certificates"),iue()})}let e=[{configKey:xl.TLS},{configKey:xl.OPERATIONSAPI_TLS}];ec();let t=hr.dirname(OS.getConfigFilePath()),r;for(let{configKey:n}of e){let s=OS.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&S$(jle(t,"keys"),a);if(c){let l=m$(a,u=>{Za.set(c,u)},"private key");l&&PS.push(l)}for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&Vw){let d=m$(u,f=>{if(u$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let h=N$(u),p=new Ho(h),_;try{_=!l&&i.name||eO(p)}catch(C){ft.error("error extracting host name from certificate",C);return}if(_==null){ft.error("No host name found on certificate");return}if(p.checkIssued(new Ho(u$.cert)))return;let g=Qr.primaryStore.get(_),y=R$(u).mtimeMs,T=!g||g.is_self_signed?1:g.fileTimestamp??g.__updatedtime__,R=i.uses??["https",...n.includes("operations")?["operations"]:[]],N=g&&y===T&&(JSON.stringify(g.uses)!==JSON.stringify(R)||g.ciphers!==i.ciphers||JSON.stringify(g.hostnames)!==JSON.stringify(m));if(g&&y<=T&&!N){y<T&&ft.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}N&&ft.info?.(`Config values changed for certificate ${_}, updating record`),r=Qr.put({name:_,uses:R,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");d&&PS.push(d)}}}}}return r}o(Qw,"loadCertificates");function iue(){for(let e of PS)e.close();PS.length=0,Kw=!1,Qw()}o(iue,"reloadCertificates");function m$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&Vw&&ft.warn(`Reloading ${r}:`,i),n=c,t(N$(i)))}catch(c){ft.error(`Error loading ${r}:`,i,c)}},"loadFile");return xn.existsSync(e)?s(e,R$(e)):ft.error?.(`${r} file not found:`,e),p$(e,{persistent:!1}).on("change",s)}o(m$,"loadAndWatch");function LS(){let e=Zle();if(e==null){let t=Yh[0];return ft.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return T$(e)}o(LS,"getHost");function DS(){let e=MS();if(e==null){let t=Yh[0];return ft.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(DS,"getCommonName");async function oue(){let e=await Wh(),t=Pt.certificateFromPem(e.options.cert),r=Pt.privateKeyFromPem(e.options.key);ft.info("Creating CSR with cert named:",e.name);let n=Pt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:DS()},...jw];ft.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:A$()}];return ft.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),vd.pki.certificationRequestToPem(n)}o(oue,"createCsr");function A$(){let e=Yh.includes(DS())?Yh:[...Yh,DS()];return e.includes(LS())||e.push(LS()),[{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=>E$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(A$,"certExtensions");async function aue(e){let t={},r=hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ec();for await(let d of Qr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Za.has(d.private_key_name)){n=Za.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await xn.exists(hr.join(r,d.private_key_name))){n=xn.readFile(hr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await Yw();s=d.ca,n=d.private_key}n=Pt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Pt.certificateFromPem(s.certificate);ft.info("Signing CSR with cert named",s.name);let a=Pt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return ft.error(d),new Error("Error verifying CSR: "+d.message)}let c=vd.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()+zw),ft.info("sign cert setting validity:",c.validity),ft.info("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),ft.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;ft.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,vd.md.sha256.create()),t.certificate=Pt.certificateToPem(c)}else ft.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(aue,"signCertificate");async function cue(e,t){await Ud({name:MS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Ud({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Pt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(cue,"createCertificateTable");async function Ud(e){let t=new Ho(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},ec(),await Qr.patch(e)}o(Ud,"setCertTable");async function Jw(){let e=await $w("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Pt.publicKeyFromPem(e.publicKey),privateKey:Pt.privateKeyFromPem(e.privateKey)}}o(Jw,"generateKeys");async function Xw(e,t,r){let n=Pt.createCertificate();if(!t){let a=await Wh();t=Pt.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()+zw);let i=[{name:"commonName",value:DS()},...jw];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(A$()),n.sign(e,vd.md.sha256.create()),Pt.certificateToPem(n)}o(Xw,"generateCertificates");async function Yw(){let e=await C$(),t;for(let r of e){if(!r.is_authority)continue;let n=await O$(r.private_key_name);if(r.private_key_name&&n&&new Ho(r.certificate).checkPrivateKey(_$(n))){ft.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;ft.trace("No CA found with matching private key")}o(Yw,"getCertAuthority");async function b$(e,t,r=!0){let n=Pt.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()+zw);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${os.get(xl.REPLICATION_HOSTNAME)??T$(os.get(xl.REPLICATION_URL))??g$().split("-")[0]}`},...jw];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,vd.md.sha256.create());let a=hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME),c=hr.join(a,gi.PRIVATEKEY_PEM_NAME);return r&&await xn.writeFile(c,Pt.privateKeyToPem(e)),n}o(b$,"generateCertAuthority");async function lue(){let{privateKey:e,publicKey:t}=await Jw(),r=await b$(e,t),n=await Xw(e,t,r);await cue(n,r),I$()}o(lue,"generateCertsKeys");async function uue(){let e=await Xw(Pt.privateKeyFromPem(gi.CERTIFICATE_VALUES.key),void 0,Pt.certificateFromPem(gi.CERTIFICATE_VALUES.cert)),t=hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME),r=hr.join(t,gi.NATS_CERTIFICATE_PEM_NAME);await xn.exists(r)||await xn.writeFile(r,e);let n=hr.join(t,gi.NATS_CA_PEM_NAME);await xn.exists(n)||await xn.writeFile(n,gi.CERTIFICATE_VALUES.cert)}o(uue,"createNatsCerts");async function due(){ec();for await(let e of Qr.search([{attribute:"is_self_signed",value:!0}]))await Qr.delete(e.name);await Zw()}o(due,"renewSelfSigned");async function Zw(){eue(),await Qw(),ec();let e=await Yw();if(!e){ft.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:Pt.privateKeyFromPem(xn.readFileSync(u)),keyPath:u}}catch(d){return ft.warn(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=os.get(xl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=os.get(xl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME),c=S$(a,i);s||(ft.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await Jw(),xn.existsSync(hr.join(a,gi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${g$().split("-")[0]}.pem`),await xn.writeFile(hr.join(a,c),Pt.privateKeyToPem(s)));let l=await b$(s,Pt.setRsaPublicKey(s.n,s.e),!1);await Ud({name:l.subject.getField("CN").value,uses:["https"],certificate:Pt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Wh()){let r=MS();ft.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Yw();let n=Pt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await Xw(Pt.privateKeyFromPem(e.private_key),s,n);await Ud({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(Zw,"reviewSelfSignedCert");function I$(){let e=Qle(Object.keys(Ds.CONFIG_PARAM_MAP),!0),t=hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME),r=hr.join(t,gi.PRIVATEKEY_PEM_NAME),n=hr.join(t,gi.NATS_CERTIFICATE_PEM_NAME),s=hr.join(t,gi.NATS_CA_PEM_NAME),i=Ds.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),OS.updateConfigValue(void 0,void 0,a,!1,!0)}o(I$,"updateConfigCert");function N$(e){return e.startsWith("-----BEGIN")?e:tue(e,"utf8")}o(N$,"readPEM");var h$=CS.createSecureContext;CS.createSecureContext=function(e){if(!e.cert||!e.key)return h$(e);let t={...e};delete t.key,delete t.cert;let r=h$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var fue=y$.prototype._init;y$.prototype._init=function(e,t){fue.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var Ul=new Map;function w$(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Ul.clear();let d=0;if(wS===void 0){c();return}for await(let f of wS.system.hdb_certificate.search([])){let m=f.certificate,h=new Ho(m);f.is_authority&&(h.asString=m,Ul.set(h.subject,m))}for await(let f of wS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",h=f.is_self_signed?1:2;f.uses?.includes(e)&&(h+=1);let p=await O$(f.private_key_name),_=f.certificate,g=new Ho(_);if(Ul.has(g.issuer)&&(_+=`
18
+ `+Ul.get(g.issuer)),!p||!_)throw new Error("Missing private key or certificate for secure server");let y={ciphers:f.ciphers,ticketKeys:rue(),availableCAs:Ul,ca:t&&Array.from(Ul.values()),cert:_,key:p,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(y.sessionIdContext=a.sessionIdContext);let T=f.hostnames??tO(g);Array.isArray(T)||(T=[T]);for(let C of T)C===LS()&&(h+=.1);let R=CS.createSecureContext(y);R.name=f.name,R.options=y,R.quality=h,R.certificateAuthorities=Array.from(Ul),R.certStart=_.toString().slice(0,100),Array.isArray(T)||(T=[T]);let N;for(let C of T)if(C){C[0]==="*"&&(s=!0,C=C.slice(1)),C===LS()&&(h+=2),E$.isIP(C)&&(N=!0);let q=r.get(C)?.quality??0;h>q&&r.set(C,R)}else Ja.error("No hostname found for certificate at",CS.certificate);Ja.trace("Adding TLS",R.name,"for",a.ports||"client","cert named",f.name,"hostnames",T,"quality",h,"best quality",d),h>d&&(i.defaultContext=n=R,d=h,a&&(a.defaultContext=R))}catch(m){Ja.error("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),wS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){Ja.info("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return Ja.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?Ja.debug("No certificate found to match",a,"using the default certificate"):Ja.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Ja.info("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(w$,"createTLSSelector");async function O$(e){let t=Za.get(e);return!t&&e?await xn.readFile(hr.join(os.get(xl.ROOTPATH),Ds.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(O$,"getPrivateKeyByName");async function C$(){ec();let e=[];for await(let t of Qr.search([]))e.push(t);return e}o(C$,"listCertificates");async function mue(e){let t=Ww(e,_i.object({name:_i.string().required(),certificate:_i.string().required(),is_authority:_i.boolean().required(),private_key:_i.string(),hosts:_i.array(),uses:_i.array()}));if(t)throw new Xa(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Ho(n),c=!1,l=!1,u;for(let[h,p]of Za)!s&&!c&&a.checkPrivateKey(_$(p))&&(c=!0,u=h),s&&s===p&&(l=!0,u=h);if(!i&&!s&&!c)throw new Xa("A suitable private key was not found for this certificate");let d;if(!r){try{d=eO(a)}catch(h){ft.error(h)}if(d==null)throw new Xa("Error extracting certificate host name, please provide a name parameter")}let f=hue(r??d);s&&!c&&!l&&(await xn.writeFile(hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME,f+".pem"),s),Za.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Ud(m),"Successfully added certificate: "+f}o(mue,"addCertificate");function hue(e){return e.replace(/[^a-z0-9.]/gi,"-")}o(hue,"sanitizeName");async function pue(e){let t=Ww(e,_i.object({name:_i.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;ec();let n=await Qr.get(r);if(!n)throw new Xa(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Qr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(ft.info("Removing private key named",s),await xn.remove(hr.join(os.getHdbBasePath(),Ds.LICENSE_KEY_DIR_NAME,s)))}return await Qr.delete(r),"Successfully removed "+r}o(pue,"removeCertificate");function eO(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||tO(e)[0]}o(eO,"getPrimaryHostName");function tO(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(tO,"hostnamesFromCert");async function Eue(e){if(e.bypass_auth!==!0)throw new Xa("Unauthorized","401");let t=Ww(e,_i.object({name:_i.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await d$()).privateKey;if(r===".jwtPublic")return(await d$()).publicKey;if(Za.get(r))return Za.get(e.name);throw new Xa("Key not found")}o(Eue,"getKey");function _ue(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(_ue,"getHostnamesFromCertificate")});var J$={};Oe(J$,{CONFIRMATION_STATUS_POSITION:()=>j$,LATENCY_POSITION:()=>$S,NodeReplicationConnection:()=>Fd,OPERATION_REQUEST:()=>iO,RECEIVED_TIME_POSITION:()=>qS,RECEIVED_VERSION_POSITION:()=>kS,RECEIVING_STATUS_POSITION:()=>GS,RECEIVING_STATUS_RECEIVING:()=>Q$,RECEIVING_STATUS_WAITING:()=>oO,SENDING_TIME_POSITION:()=>zh,createWebSocket:()=>VS,databaseSubscriptions:()=>rc,replicateOverWS:()=>jh,tableUpdateListeners:()=>cO});async function VS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=et(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!nO){let l=(0,V$.createTLSSelector)("replication"),u={secureContexts:null};await l.initialize(u),nO=u.secureContexts}if(i=nO.get(s),i&&ce.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,Y$.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(HS?.caCount!==qo.size&&(HS=K$.createSecureContext({...i.options,ca:[...qo,...i.options.availableCAs.values()]}),HS.caCount=qo.size),c.secureContext=HS),new G$.WebSocket(e,"harperdb-replication-v1",c)}function jh(e,t,r){let n=t.port||t.securePort,s=Bl.pid%1e3+"-"+$$.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ce.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||rc,f,m,h=!1,p=t.subscription;p?.then&&p.then(E=>{p=E,p.auditStore&&(f=p.auditStore)});let _=t.tables||u&&ot()[u],g;if(!r){ce.error?.(s,"No authorization provided"),Ss(1008,"Unauthorized");return}let y=new Map,T=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,N,C,q,j,F,$,J=6e4,K,te=0,fe=0,oe=0,ge=q$.default.get(U.REPLICATION_BLOBTIMEOUT)??12e4,Pe=new Map,Te=[],rt=0,xe;if(t.url){let E=o(()=>{j&&fe===e._socket?.bytesRead&&oe===e._socket?.bytesWritten?e.terminate():(j=performance.now(),e.ping(),fe=e._socket?.bytesRead,oe=e._socket?.bytesWritten)},"sendPing");C=setInterval(E,H$).unref(),E()}else tn();e._socket?.setMaxListeners(200);function tn(){clearTimeout(q),fe=e._socket?.bytesRead,oe=e._socket?.bytesWritten,q=setTimeout(()=>{fe===e._socket?.bytesRead&&oe===e._socket?.bytesWritten&&(ce.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},H$*2).unref()}o(tn,"resetPingTimer");function it(){if(!(!g||!u||!f))return m||(m=Pd(f,u,g)),m}o(it,"getSharedStatus"),u&&Ta(u);let Et,Dc,Mc=[],Vt=[],kf,qf=[],ME=[],vE=[],Qy=150,Gf=25,Le=0,UE=0,$f=!1,Eo,Pr,Rr,Vf;e.on("message",E=>{te=performance.now();try{let S=E.dataView=new Wc(E.buffer,E.byteOffset,E.byteLength);if(E[0]>127){let P=(0,tt.decode)(E),[L,D,k]=P;switch(L){case L$:{if(D){if(g){if(g!==D){ce.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${D}, disconnecting`),e.send((0,tt.encode)([xd])),Ss(1008,"Node name mismatch");return}}else if(g=D,t.connection?.tentativeNode){let B=t.connection.tentativeNode;B.name=g,t.connection.tentativeNode=null,Fo(g,B)}if(t.connection&&(t.connection.nodeName=g),ce.debug?.(s,"received node name:",g,"db:",u??P[2]),!u)try{Ta(u=P[2]),u==="system"&&(Et=ja(t,(B,ue)=>{gu(ue)&&Ra(ue)}),e.on("close",()=>{Et?.remove()}))}catch(B){ce.warn?.(s,"Error setting database",B),e.send((0,tt.encode)([xd])),Ss(1008,B.message);return}Lr()}break}case B$:{ce.debug?.(s,"Received table definitions for",D.map(B=>B.table));for(let B of D){let ue=P[2];B.database=ue;let me;gu(ue)&&(ue==="system"?ke[ue]?.[B.table]||(me=V(B,ke[ue]?.[B.table])):me=V(B,ke[ue]?.[B.table]),f||(f=me?.auditStore),_||(_=ot()?.[ue]))}break}case xd:Ss();break;case iO:try{let B=r?.replicates||r?.subscribers||r?.name;ce.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,tt.encode)([US,ue]))},ue=>{e.send((0,tt.encode)([US,{requestId:D.requestId,error:(0,Bd.errorToString)(ue)}]))})}catch(B){e.send((0,tt.encode)([US,{requestId:D.requestId,error:(0,Bd.errorToString)(B)}]))}break;case US:let{resolve:O,reject:x}=y.get(D.requestId);D.error?x(new Error(D.error)):O(D),y.delete(D.requestId);break;case rO:let W=P[3];if(!_){u?ce.error?.(s,"No database found for",u):ce.error?.(s,"Database name never received"),Ss();return}let se=_[W];se=V({table:W,database:u,attributes:D.attributes,schemaDefined:D.schemaDefined},se),Mc[k]={name:W,decoder:new tt.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:D.typedStructs,structures:D.structures}),getEntry(B){return se.primaryStore.getEntry(B)},rootStore:se.primaryStore.rootStore};break;case D$:Vf=f?t$(D,f):new Map,kf=P[2],ce.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${kf}`);break;case M$:let ne=k;vE[ne]=D;break;case x$:it()[j$]=D,ce.trace?.(s,"received and broadcasting committed update",D),it().buffer.notify();break;case U$:R=D,p.send({type:"end_txn",localTime:R,remoteNodeIds:T}),it(),m[kS]=R,m[qS]=Date.now(),m[GS]=oO;break;case xS:{let B=P[1],{fileId:ue,size:me,finished:Se,error:ee}=B,Q=Pe.get(ue);ce.debug?.("Received blob",ue,"has stream",!!Q,"connectedToBlob",!!Q?.connectedToBlob,"length",P[2].length,"finished",Se),Q||(Q=new sO.PassThrough,Q.expectedSize=me,Pe.set(ue,Q)),Q.lastChunk=Date.now();let he=P[2];at(he.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Se?(ee?(Q.on("error",()=>{}),Q.destroy(new Error("Blob error: "+ee+" for record "+(Q.recordId??"unknown")+" from "+g))):Q.end(he),Q.connectedToBlob&&Pe.delete(ue)):Q.write(he)}catch(Re){ce.error?.(`Error receiving blob for ${Q.recordId} from ${g} and streaming to storage`,Re),Pe.delete(ue)}break}case v$:{let B=D,ue;try{let me=P[3],Se=Vt[k]||(Vt[k]=_[P[4]]);if(!Se)return ce.warn?.("Unknown table id trying to handle record request",k);let ee=Se.primaryStore.getBinaryFast(Symbol.for("structures")),Q=ee?.length??0;if(Q>0&&Q!==UE){UE=Q;let Re=(0,tt.decode)(ee);e.send((0,tt.encode)([rO,{typedStructs:Re.typed,structures:Re.named},k,Se.tableName]))}let he=Se.primaryStore.getBinaryFast(me);if(he){let Re=Se.primaryStore.decoder.decode(he,{valueAsBuffer:!0}),de=dt||{};de.version=(0,W$.getLastVersion)(),dt&&dt[Lu]&$r&&(Re=Buffer.from(Re),gm(()=>Se.primaryStore.decoder.decode(he),We=>Sa(We,me),Se.primaryStore.rootStore)),ue=(0,tt.encode)([vS,B,{value:Re,expiresAt:de.expiresAt,version:de.version,residencyId:de.residencyId,nodeId:de.nodeId,user:de.user}])}else ue=(0,tt.encode)([vS,B])}catch(me){ue=(0,tt.encode)([vS,B,{error:me.message}])}e.send(ue);break}case vS:{let{resolve:B,reject:ue,tableId:me,key:Se}=y.get(P[1]),ee=P[2];if(ee?.error)ue(new Error(ee.error));else if(ee){let Q;p_(()=>{let he=Mc[me].decoder.decode(ee.value);ee.value=he,ee.key=Se,B(ee)||Q&&setTimeout(()=>Q.forEach(f_),6e4).unref()},f?.rootStore,he=>{let Re=vc(he,Se);return Q||(Q=[]),Q.push(Re),Re})}else B();y.delete(P[1]);break}case P$:{Rr=D;let B,ue,me=!1;if(p){if(u!==p.databaseName&&!p.then){ce.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=d.get(u);if(ce.debug?.(s,"received subscription request for",u,"at",Rr),!p){let pe;p=new Promise(_t=>{ce.debug?.("Waiting for subscription to database "+u),pe=_t}),p.ready=pe,rc.set(u,p)}if(r.name)ue=zt().subscribe(r.name),ue.then(async pe=>{B=pe;for await(let _t of B){let nt=_t.value;if(!(nt?.replicates===!0||nt?.replicates?.receives||nt?.subscriptions?.some(lr=>(lr.database||lr.schema)===u&&lr.publish!==!1))){me=!0,e.send((0,tt.encode)([xd])),Ss(1008,`Unauthorized database subscription to ${u}`);return}}},pe=>{ce.error?.(s,"Error subscribing to HDB nodes",pe)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,tt.encode)([xd])),Ss(1008,`Unauthorized database subscription to ${u}`);return}if(Pr&&(ce.debug?.(s,"stopping previous subscription",u),Pr.emit("close")),Rr.length===0)return;let Se=Rr[0],ee=o(pe=>{if(pe&&(Se.replicateByDefault?!Se.tables.includes(pe.tableName):Se.tables.includes(pe.tableName)))return{table:pe}},"tableToTableEntry"),Q={txnTime:0},he,Re,de=1/0,We,Tt=o((pe,_t)=>{if(pe.type==="end_txn"){Q.txnTime&&(a[i]!==66&&ce.error?.("Invalid encoding of message"),Su(9),Su(N_),xc(We=_t),mt()),i=c,Q.txnTime=0;return}let nt=pe.nodeId,lr=pe.tableId,xt=Re[lr];if(!xt&&(xt=Re[lr]=ee(p.tableById[lr]),!xt))return ce.debug?.("Not subscribed to table",lr);let Ts=xt.table,Bt=Ts.primaryStore,Xs=Bt.encoder;(pe.extendedType&L_||!Xs.typedStructs)&&(Xs._mergeStructures(Xs.getStructures()),Xs.typedStructs&&(Xs.lastTypedStructuresLength=Xs.typedStructs.length));let Tu=he[nt];if(!(Tu&&Tu.startTime<_t&&(!Tu.endTime||Tu.endTime>_t)))return FS&&ce.trace?.(s,"skipping replication update",pe.recordId,"to:",g,"from:",nt,"subscribed:",he),AM();FS&&ce.trace?.(s,"sending replication update",pe.recordId,"to:",g,"from:",nt,"subscribed:",he);let Jy=pe.version,Bc=pe.residencyId,Xy=_u(Bc,Ts),BE;if(Xy&&!Xy.includes(g)){let Zs=_u(pe.previousResidencyId,Ts);if(Zs&&!Zs.includes(g)&&(pe.type==="put"||pe.type==="patch")||Ts.getResidencyById)return AM();let Yf=pe.recordId;ce.trace?.(s,"sending invalidation",Yf,g,"from",nt);let Wf=0;Bc&&(Wf|=zc),pe.previousResidencyId&&(Wf|=jc);let tA,FE=null;for(let bM in Ts.indices){if(!FE){if(tA=pe.getValue(Bt,!0),!tA)break;FE={}}FE[bM]=tA[bM]}BE=Qc(pe.version,lr,Yf,null,nt,pe.user,pe.type==="put"||pe.type==="patch"?"invalidate":pe.type,Xs.encode(FE),Wf,Bc,pe.previousResidencyId,pe.expiresAt)}function AM(){return ce.trace?.(s,"skipping audit record",pe.recordId),F||(F=setTimeout(()=>{F=null,(We||0)+F$/2<de&&(FS&&ce.trace?.(s,"sending skipped sequence update",de),e.send((0,tt.encode)([U$,de])))},F$).unref()),new Promise(setImmediate)}o(AM,"skipAuditRecord");let Zy=Xs.typedStructs,eA=Xs.structures;if((Zy?.length!=xt.typed_length||eA?.length!=xt.structure_length)&&(xt.typed_length=Zy?.length,xt.structure_length=eA.length,ce.debug?.(s,"send table struct",xt.typed_length,xt.structure_length),xt.sentName||(xt.sentName=!0),e.send((0,tt.encode)([rO,{typedStructs:Zy,structures:eA,attributes:Ts.attributes,schemaDefined:Ts.schemaDefined},lr,xt.table.tableName]))),Bc&&!ME[Bc]&&(e.send((0,tt.encode)([M$,Xy,Bc])),ME[Bc]=!0),Q.txnTime!==Jy&&(Q.txnTime&&(FS&&ce.trace?.(s,"new txn time, sending queued txn",Q.txnTime),a[i]!==66&&ce.error?.("Invalid encoding of message"),mt()),Q.txnTime=Jy,i=c,xc(Jy)),BE)Su(BE.length),Uc(BE);else{let Zs=pe.encoded;pe.extendedType&$r&&gm(()=>pe.getValue(Bt),Wf=>Sa(Wf,pe.recordId),Bt.rootStore);let Yf=Zs[0]===66?8:0;Su(Zs.length-Yf),Uc(Zs,Yf),ce.trace?.("wrote record",pe.recordId,"length:",Zs.length)}return e._socket.writableNeedDrain?new Promise(Zs=>{ce.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Zs)}):rt>Gf?new Promise(Zs=>{xe=Zs}):new Promise(setImmediate)},"sendAuditRecord"),mt=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ce.debug?.(s,"Sent message, size:",c-i),at(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ce.debug?.(s,"skipping empty transaction")},"sendQueuedData");Pr=new aO.EventEmitter,Pr.once("close",()=>{me=!0,B?.end()});for(let{startTime:pe}of Rr)pe<de&&(de=pe);(ue||Promise.resolve()).then(async()=>{p=await p,f=p.auditStore,Re=p.tableById.map(ee),he=[];for(let{name:_t,startTime:nt,endTime:lr}of Rr){let xt=AS(_t,f);ce.debug?.("subscription to",_t,"using local id",xt,"starting",nt),he[xt]={startTime:nt,endTime:lr}}Ra(u),Et||(Et=wl(_t=>{_t.databaseName===u&&Ra(u)}),Dc=Ah(_t=>{_t===u&&(e.send((0,tt.encode)([xd])),Ss())}),e.on("close",()=>{Et?.remove(),Dc?.remove()})),e.send((0,tt.encode)([D$,Hh(p.auditStore),Rr.map(({name:_t})=>_t)]));let pe=!0;do{isFinite(de)||(ce.warn?.("Invalid sequence id "+de),Ss(1008,"Invalid sequence id"+de));let _t;if(pe&&!me&&(pe=!1,de===0)){ce.info?.("Replicating all tables to",g);let nt=de,lr=KS(f);for(let xt in _){if(!ee(xt))continue;let Ts=_[xt];for(let Bt of Ts.primaryStore.getRange({snapshot:!1,versions:!0})){if(me)return;if(Bt.localTime>=de){ce.trace?.(s,"Copying record from",u,xt,Bt.key,Bt.localTime),nt=Math.max(Bt.localTime,nt),it()[zh]=1;let Xs=Qc(Bt.version,Ts.tableId,Bt.key,null,lr,null,"put",gm(()=>Ts.primaryStore.encoder.encode(Bt.value),Tu=>Sa(Tu,Bt.key)),Bt.metadataFlags&-256,Bt.residencyId,null,Bt.expiresAt);await Tt({recordId:Bt.key,tableId:Ts.tableId,type:"put",getValue(){return Bt.value},encoded:Xs,version:Bt.version,residencyId:Bt.residencyId,nodeId:lr,extendedType:Bt.metadataFlags},Bt.localTime)}}}c-i>8&&Tt({type:"end_txn"},de),it()[zh]=0,de=nt}for(let{key:nt,value:lr}of f.getRange({start:de||1,exclusiveStart:!0,snapshot:!1})){if(me)return;let xt=wt(lr);ce.debug?.("sending audit record",new Date(nt)),it()[zh]=nt,de=nt,await Tt(xt,nt),Pr.startTime=nt}c-i>8&&Tt({type:"end_txn"},de),it()[zh]=0,await t0(f)}while(!me)}).catch(pe=>{ce.error?.(s,"Error handling subscription to node",pe),Ss(1008,"Error handling subscription to node")});break}}return}S.position=8;let A=!0,b,I;do{it();let P=S.readInt();if(P===9&&S.getUint8(S.position)==N_){S.position++,R=I=S.readFloat64(),m[kS]=R,m[qS]=Date.now(),m[GS]=oO,ce.trace?.("received remote sequence update",R,u);break}let L=S.position,D=wt(E,L,L+P),k=Mc[D.tableId];k||ce.error?.(`No table found with an id of ${D.tableId}`);let O;D.residencyId&&(O=vE[D.residencyId],ce.trace?.(s,"received residency list",O,D.type,D.recordId));try{let x=D.recordId;p_(()=>{b={table:k.name,id:D.recordId,type:D.type,nodeId:Vf.get(D.nodeId),residencyList:O,timestamp:D.version,value:D.getValue(k),user:D.user,beginTxn:A,expiresAt:D.expiresAt}},f?.rootStore,W=>vc(W,x))}catch(x){throw x.message+="typed structures for current decoder"+JSON.stringify(k.decoder.typedStructs),x}A=!1,ce.trace?.(s,"received replication message",D.type,"id",b.id,"version",new Date(D.version),"nodeId",b.nodeId),m[kS]=D.version,m[qS]=Date.now(),m[GS]=Q$,p.send(b),S.position=L+P}while(S.position<E.byteLength);Le++,at(E.byteLength,"bytes-received",`${g}.${u}.${b?.table||"unknown_table"}`,"replication","ingest"),Le>Qy&&!$f&&($f=!0,e.pause(),ce.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),p.send({type:"end_txn",localTime:R,remoteNodeIds:T,async onCommit(){if(b){let P=Date.now()-b.timestamp;at(P,"replication-latency",g+"."+u+"."+b.table,b.type,"ingest")}Le--,$f&&($f=!1,e.resume(),ce.debug?.(`Replication resuming ${g}`)),Te.length>0&&await Promise.all(Te),ce.trace?.("All blobs finished"),!N&&I&&(ce.trace?.(s,"queuing confirmation of a commit at",I),setTimeout(()=>{e.send((0,tt.encode)([x$,N])),ce.trace?.(s,"sent confirmation of a commit at",N),N=null},Sue)),N=I,ce.debug?.("last sequence committed",new Date(I),u)}})}catch(S){ce.error?.(s,"Error handling incoming replication message",S)}}),e.on("ping",tn),e.on("pong",()=>{if(t.connection){let E=performance.now()-j;t.connection.latency=E,it()&&(m[$S]=E),t.isSubscriptionConnection&&vl({name:g,database:u,url:t.url,latency:E})}j=null}),e.on("close",(E,S)=>{clearInterval(C),clearTimeout(q),clearInterval($),Pr&&Pr.emit("close"),Eo&&Eo.end();for(let[A,{reject:b}]of y)b(new Error(`Connection closed ${S?.toString()} ${E}`));ce.debug?.(s,"closed",E,S?.toString())});function Ss(E,S){try{e.isFinished=!0,ce.debug?.(s,"closing",g,u,E,S),e.close(E,S),t.connection?.emit("finished")}catch(A){ce.error?.(s,"Error closing connection",A)}}o(Ss,"close");let ga=new Set;async function Sa(E,S){let A=m_(E);if(ga.has(A)){ce.debug?.("Blob already being sent",A);return}ga.add(A);try{let b;rt++;for await(let I of E.stream())b&&(ce.debug?.("Sending blob chunk",A,"length",b.length),e.send((0,tt.encode)([xS,{fileId:A,size:E.size},b]))),b=I,e._socket.writableNeedDrain&&(ce.debug?.("draining",A),await new Promise(P=>e._socket.once("drain",P)),ce.debug?.("drained",A)),at(I.length,"bytes-sent",`${g}.${u}`,"replication","blob");ce.debug?.("Sending final blob chunk",A,"length",b.length),e.send((0,tt.encode)([xS,{fileId:A,size:E.size,finished:!0},b]))}catch(b){ce.warn?.("Error sending blob",b,"blob id",A,"for record",S),e.send((0,tt.encode)([xS,{fileId:A,finished:!0,error:(0,Bd.errorToString)(b)},Buffer.alloc(0)]))}finally{ga.delete(A),rt--,rt<Gf&&xe?.()}}o(Sa,"sendBlobs");function vc(E,S){let A=m_(E),b=Pe.get(A);ce.debug?.("Received transaction with blob",A,"has stream",!!b,"ended",!!b?.writableEnded),b?b.writableEnded&&Pe.delete(A):(b=new sO.PassThrough,Pe.set(A,b)),b.connectedToBlob=!0,b.lastChunk=Date.now(),b.recordId=S,E.size===void 0&&b.expectedSize&&(E.size=b.expectedSize);let I=b.blob??createBlob(b,E);b.blob=I;let P=bo(()=>_m(I).saving,p.auditStore?.rootStore);return P&&(P.blobId=A,Te.push(P),P.finally(()=>{ce.debug?.(`Finished receiving blob stream ${A}`),Te.splice(Te.indexOf(P),1)})),I}o(vc,"receiveBlobs");function Lr(){if(h||(h=!0,t.connection?.on("subscriptions-updated",Lr)),!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;f||(f=p?.auditStore);try{for(let b of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let I of b.value.nodes||[])I.lastTxnTime>(E.get(I.id)??0)&&E.set(I.id,I.lastTxnTime)}catch(b){if(!b.message.includes("Can not re"))throw b}let S=t.connection?.nodeSubscriptions?.[0];T=[];let A=t.connection?.nodeSubscriptions.map((b,I)=>{let P=[],{replicateByDefault:L}=b;if(b.subscriptions){for(let x of b.subscriptions)if(x.subscribe&&(x.schema||x.database)===u){let W=x.table;_?.[W]?.replicate!==!1&&P.push(W)}L=!1}else for(let x in _)(L?_[x].replicate===!1:_[x].replicate)&&P.push(x);let D=f&&AS(b.name,f),k=p?.dbisDB?.get([Symbol.for("seq"),D])??1,O=Math.max(k?.seqId??1,(typeof b.startTime=="string"?new Date(b.startTime).getTime():b.startTime)??1);if(ce.debug?.("Starting time recorded in db",b.name,D,u,k?.seqId,"start time:",O,new Date(O)),S!==b){let x=f&&AS(S.name,f),W=p?.dbisDB?.get([Symbol.for("seq"),x])??1;for(let se of W?.nodes||[])se.name===b.name&&(O=se.seqId,ce.debug?.("Using sequence id from proxy node",S.name,O))}if(D===void 0?ce.warn("Starting subscription request from node",b,"but no node id found"):T.push(D),E.get(D)>O&&(O=E.get(D),ce.debug?.("Updating start time from more recent txn recorded",S.name,O)),O===1&&BS)try{new URL(BS).hostname===b.name?(ce.warn?.(`Requesting full copy of database ${u} from ${BS}`),O=0):O=Date.now()-6e4}catch(x){ce.error?.("Error parsing leader URL",BS,x)}return ce.trace?.(s,"defining subscription request",b.name,u,new Date(O)),{name:b.name,replicateByDefault:L,tables:P,startTime:O,endTime:b.endTime}});if(A)if(ce.debug?.(s,"sending subscription request",A,p?.dbisDB?.path),clearTimeout(K),A.length>0)e.send((0,tt.encode)([P$,A]));else{let b=o(()=>{let I=performance.now();K=setTimeout(()=>{te<=I?Ss(1008,"Connection has no subscriptions and is no longer used"):b()},J).unref()},"scheduleClose");b()}}o(Lr,"sendSubscriptionRequestUpdate");function _u(E,S){if(!E)return;let A=qf[E];return A||(A=S.getResidencyRecord(E),qf[E]=A),A}o(_u,"getResidence");function gu(E){return!(tc&&tc!="*"&&!tc[E]&&!tc.includes?.(E)&&!tc.some?.(S=>S.name===E))}o(gu,"checkDatabaseAccess");function Ta(E){if(p=p||d.get(E),!gu(E))throw new Error(`Access to database "${E}" is not permitted`);p||ce.warn?.(`No database named "${E}" was declared and registered`),f=p?.auditStore,_||(_=ot()?.[E]);let S=et();if(S===g)throw S?new Error("Should not connect to self",S):new Error("Node name not defined");return xE(S,E),!0}o(Ta,"setDatabase");function xE(E,S){let A=ot()?.[S],b=[];for(let I in A){let P=A[I];b.push({table:I,schemaDefined:P.schemaDefined,attributes:P.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}ce.trace?.("Sending database info for node",E,"database name",S),e.send((0,tt.encode)([L$,E,S,b]))}o(xE,"sendNodeDBName");function Ra(E){let S=ot()?.[E],A=[];for(let b in S){if(Rr&&!Rr.some(P=>P.replicateByDefault?!P.tables.includes(b):P.tables.includes(b)))continue;let I=S[b];A.push({table:b,schemaDefined:I.schemaDefined,attributes:I.attributes.map(P=>({name:P.name,type:P.type,isPrimaryKey:P.isPrimaryKey}))})}e.send((0,tt.encode)([B$,A,E]))}o(Ra,"sendDBSchema"),$=setInterval(()=>{for(let[E,S]of Pe)S.lastChunk+ge<Date.now()&&(ce.warn?.(`Timeout waiting for blob stream to finish ${E} for record ${S.recordId??"unknown"} from ${g}`),Pe.delete(E),S.end())},ge).unref();let ya=1,Kf=[];return{end(){Eo&&Eo.end(),Pr&&Pr.emit("close")},getRecord(E){let S=ya++;return new Promise((A,b)=>{let I=[v$,S,E.table.tableId,E.id];Kf[E.table.tableId]||(I.push(E.table.tableName),Kf[E.table.tableId]=!0),e.send((0,tt.encode)(I)),te=performance.now(),y.set(S,{tableId:E.table.tableId,key:E.id,resolve(P){let{table:L,entry:D}=E;if(A(P),P)return L._recordRelocate(D,P)},reject:b})})},sendOperation(E){let S=ya++;return E.requestId=S,e.send((0,tt.encode)([iO,E])),new Promise((A,b)=>{y.set(S,{resolve:A,reject:b})})}};function Su(E){Aa(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 Uc(E,S=0,A=E.length){let b=A-S;Aa(b),E.copy(a,c,S,A),c+=b}function xc(E){Aa(8),l.setFloat64(c,E),c+=8}function Aa(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 V(E,S){let A=E.database??"data";if(A!=="data"&&!ke[A]){ce.warn?.("Database not found",E.database);return}S||(S={});let b=S.schemaDefined,I=!1,P=E.schemaDefined,L=S.attributes||[];for(let D=0;D<E.attributes?.length;D++){let k=E.attributes[D],O=L.find(x=>x.name===k.name);(!O||O.type!==k.type)&&(b?ce.error?.(`Schema for '${u}.${E.table}' is defined locally, but attribute '${k.name}: ${k.type}' from '${g}' does not match local attribute ${O?"'"+O.name+": "+O.type+"'":"which does not exist"}`):(I=!0,P||(k.indexed=!0),O?L[L.indexOf(O)]=k:L.push(k)))}return I?(ce.debug?.("(Re)creating",E),je({table:E.table,database:E.database,schemaDefined:E.schemaDefined,attributes:L,...S})):S}}var q$,tt,G$,$$,Bd,aO,V$,K$,Bl,Y$,sO,W$,z$,ce,P$,L$,D$,xd,M$,rO,v$,vS,iO,US,U$,x$,B$,xS,j$,kS,qS,zh,$S,GS,oO,Q$,gue,BS,cO,rc,FS,F$,Sue,H$,nO,HS,k$,Fd,lO=le(()=>{Me();Mi();Hw();_b();is();q$=w(ae());H();Jc();tt=require("msgpackr"),G$=require("ws"),$$=require("worker_threads"),Bd=w(z());Kh();aO=require("events"),V$=w(as()),K$=w(require("node:tls"));Ml();Bl=w(require("node:process")),Y$=require("node:net");ji();Yn();sO=require("node:stream"),W$=require("lmdb"),z$=w(require("minimist")),ce=(0,Bd.forComponent)("replication").conditional,P$=129,L$=140,D$=141,xd=142,M$=130,rO=132,v$=133,vS=134,iO=136,US=137,U$=143,x$=144,B$=145,xS=146,j$=0,kS=1,qS=2,zh=3,$S=4,GS=5,oO=0,Q$=1,gue=(0,z$.default)(Bl.argv),BS=gue.HDB_LEADER_URL??Bl.env.HDB_LEADER_URL,cO=new Map,rc=new Map,FS=!0,F$=300,Sue=2,H$=3e4;o(VS,"createWebSocket");k$=500,Fd=class extends aO.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=k$;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??Ei(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await VS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ce.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Bl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ce[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=k$,this.nodeSubscriptions&&vl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=jh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ce.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ce.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ce.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Md({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ce.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(jh,"replicateOverWS")});var ko={};Oe(ko,{clearThisNodeName:()=>Oue,disableReplication:()=>Aue,enabledDatabases:()=>tc,forEachReplicatedDatabase:()=>ja,getThisNodeId:()=>KS,getThisNodeName:()=>et,getThisNodeUrl:()=>Qa,hostnameToUrl:()=>QS,lastTimeInAuditStore:()=>kh,monitorNodeCAs:()=>oV,replicateOperation:()=>Pue,replicationCertificateAuthorities:()=>qo,sendOperationToNode:()=>Qh,servers:()=>Rue,setReplicator:()=>cV,start:()=>yue,startOnMainThread:()=>Gw,subscribeToNode:()=>Vh,unsubscribeFromNode:()=>NS,urlToNodeName:()=>Ei});function yue(e){if(!e.port&&!e.securePort&&(e.port=Ms.default.get(U.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ms.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),!et())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Gh(e))t.set(Ei(s.url),s);bue(e),e={mtls:!0,usageType:"replication",maxPayload:10*1024*1024*1024,...e};let r=De.ws(async(s,i,a,c)=>{if(Lt.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(),jh(s,e,i?.user),s.on("error",l=>{l.code!=="ECONNREFUSED"&&Lt.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,De.http((s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){Lt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&Lt.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=zt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,sV.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)){Lt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l;else Lt.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:Lt.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(qo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=jS.createSecureContext(u)}catch(l){Lt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Ms.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1&&i()}oV(()=>{for(let s of n)s()})}function oV(e){let t=0;Ld(r=>{r?.ca&&(qo.add(r.ca),qo.size!==t&&(t=qo.size,e?.()))})}function Aue(e=!0){iV=e}function bue(e){iV||(ot(),tc=e.databases,ja(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||rc;for(let[s,i]of WS){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];cV(r,s,e),cO.get(s)?.forEach(i=>i(s))}}))}function cV(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 aV extends Ur{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||rc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(Lt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Kn,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)||p===De.hostname)continue;let _=Nue(p,aV.subscription,e);if(_?.isConnected){let g=Pd(t.auditStore,e,p)[$S];(!d||g<m)&&(d=_,f=p,m=g)}}if(!d)throw l||new rV.ServerError(`No connection to any other nodes are available: ${c}`,502);let h={requestId:Tue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(h)}catch(p){if(d.isConnected)throw p;Lt.warn("Error in load from node",zS,p),l||(l=p)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Iue(e,t,r,n,s){let i=WS.get(e);i||WS.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Fd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function Nue(e,t,r){let n=X$.get(e);n||(n=new Map,X$.set(e,n));let s=n.get(r);if(s)return s;let i=zt().primaryStore.get(e);return i?.url&&(s=new Fd(i.url,t,r,e,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Qh(e,t,r){r||(r={}),r.serverName=e.name;let n=await VS(e.url,r),s=jh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{Lt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{Lt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Vh(e){try{nV.isMainThread&&Lt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=rc.get(e.database);if(!t){let n;t=new Promise(s=>{Lt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,rc.set(e.database,t)}let r=Iue(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=>qh(n,e.database)),e.replicateByDefault)}catch(t){Lt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function NS({name:e,url:t,database:r}){Lt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(zt().primaryStore.getRange({})));let n=WS.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function wue(){if(uO!==void 0)return uO;let e=Ms.default.get(U.OPERATIONSAPI_TLS_CERTIFICATE)||Ms.default.get(U.TLS_CERTIFICATE);if(e)return uO=new eV.X509Certificate((0,tV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function et(){return zS||(zS=Ms.default.get("replication_hostname")??Ei(Ms.default.get("replication_url"))??wue()??Z$("operationsapi_network_secureport")??Z$("operationsapi_network_port")??"127.0.0.1")}function Oue(){zS=void 0}function Z$(e){let t=Ms.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function YS(e){let t=Ms.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[[\]]/g,""):+t}function KS(e){return Hh(e)?.[et()]}function Qa(){let e=Ms.default.get("replication_url");return e||QS(et())}function QS(e){let t=YS("replication_port");if(t)return`ws://${e}:${t}`;if(t=YS("replication_secureport"),t)return`wss://${e}:${t}`;if(t=YS("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=YS("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ei(e){if(e)return new URL(e).hostname}function ja(e,t){for(let n of Object.getOwnPropertyNames(ke))r(n);return Ah(n=>{r(n)}),wl((n,s)=>{r(n.databaseName)});function r(n){let s=ke[n];Lt.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):Cue(n)&&t(s,n,!1)}o(r,"forDatabase")}function Cue(e){let t=ke[e];for(let r in t)if(t[r].replicate)return!0}function kh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Pue(e){let t={message:""};if(e.replicated){e.replicated=!1,Lt.trace?.("Replicating operation",e.operation,"to nodes",De.nodes.map(n=>n.name));let r=await Promise.allSettled(De.nodes.map(n=>Qh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=De.nodes[s]?.name,i})}return t}var Ms,Lt,eV,tV,jS,rV,nV,sV,iV,Tue,Rue,qo,tc,WS,X$,uO,zS,is=le(()=>{Me();Ma();bu();lO();Dr();Ms=w(ae()),Lt=w(z()),eV=require("crypto"),tV=require("fs");Kh();Ml();H();Hw();jS=w(require("node:tls")),rV=w(_e()),nV=require("worker_threads"),sV=w(as()),Tue=1,Rue=[],qo=Ms.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1?new Set(jS.rootCertificates):new Set;o(yue,"start");o(oV,"monitorNodeCAs");o(Aue,"disableReplication");o(bue,"assignReplicationSource");o(cV,"setReplicator");WS=new Map;o(Iue,"getSubscriptionConnection");X$=new Map;o(Nue,"getRetrievalConnectionByName");o(Qh,"sendOperationToNode");o(Vh,"subscribeToNode");o(NS,"unsubscribeFromNode");o(wue,"getCommonNameFromCert");o(et,"getThisNodeName");o(Oue,"clearThisNodeName");Object.defineProperty(De,"hostname",{get(){return et()}});o(Z$,"getHostFromListeningPort");o(YS,"getPortFromListeningPort");o(KS,"getThisNodeId");De.replication={getThisNodeId:KS,exportIdMapping:Hh};o(Qa,"getThisNodeUrl");o(QS,"hostnameToUrl");o(Ei,"urlToNodeName");o(ja,"forEachReplicatedDatabase");o(Cue,"hasExplicitlyReplicatedTable");o(kh,"lastTimeInAuditStore");o(Pue,"replicateOperation")});var $d=M((JUe,mV)=>{"use strict";var Hd=bG(),{validateBySchema:Jh}=st(),{commonValidators:kd,schemaRegex:dO}=qi(),pr=require("joi"),Lue=z(),Due=require("uuid").v4,ZS=Po(),qd=(H(),v(Y)),Mue=require("util"),nc=Xn(),{handleHDBError:Go,hdbErrors:vue,ClientError:Fl}=_e(),{HDB_ERROR_MSGS:JS,HTTP_STATUS_CODES:$o}=vue,{SchemaEventMsg:eT}=ai(),lV=Gt(),{getDatabases:Uue}=(Me(),v(gt)),{transformReq:Gd}=ie(),{replicateOperation:uV}=(is(),v(ko)),{cleanupOrphans:xue}=(Yn(),v(E_)),XS=pr.string().min(1).max(kd.schema_length.maximum).pattern(dO).messages({"string.pattern.base":"{:#label} "+kd.schema_format.message}),Bue=pr.string().min(1).max(kd.schema_length.maximum).pattern(dO).messages({"string.pattern.base":"{:#label} "+kd.schema_format.message}).required(),Fue=pr.string().min(1).max(kd.schema_length.maximum).pattern(dO).messages({"string.pattern.base":"{:#label} "+kd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();mV.exports={createSchema:Hue,createSchemaStructure:dV,createTable:kue,createTableStructure:fV,createAttribute:Kue,dropSchema:que,dropTable:Gue,dropAttribute:$ue,getBackup:Yue,cleanupOrphanBlobs:Wue};async function Hue(e){let t=await dV(e);return ZS.signalSchemaChange(new eT(process.pid,e.operation,e.schema)),t}o(Hue,"createSchema");async function dV(e){let t=Jh(e,pr.object({database:XS,schema:XS}));if(t)throw new Fl(t.message);if(Gd(e),!await Hd.checkSchemaExists(e.schema))throw Go(new Error,JS.SCHEMA_EXISTS_ERR(e.schema),$o.BAD_REQUEST,qd.LOG_LEVELS.ERROR,JS.SCHEMA_EXISTS_ERR(e.schema),!0);return await nc.createSchema(e),`database '${e.schema}' successfully created`}o(dV,"createSchemaStructure");async function kue(e){return Gd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await fV(e)}o(kue,"createTable");async function fV(e){let t=Jh(e,pr.object({database:XS,schema:XS,table:Bue,residence:pr.array().items(pr.string().min(1)).optional(),hash_attribute:Fue}));if(t)throw new Fl(t.message);if(!await Hd.checkSchemaTableExists(e.schema,e.table))throw Go(new Error,JS.TABLE_EXISTS_ERR(e.schema,e.table),$o.BAD_REQUEST,qd.LOG_LEVELS.ERROR,JS.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Due(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await nc.createTable(n,e);else throw Go(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",$o.BAD_REQUEST);else await nc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(fV,"createTableStructure");async function que(e){let t=Jh(e,pr.object({database:pr.string(),schema:pr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Fl(t.message);Gd(e);let r=await Hd.checkSchemaExists(e.schema);if(r)throw Go(new Error,r,$o.NOT_FOUND,qd.LOG_LEVELS.ERROR,r,!0);let n=await Hd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await nc.dropSchema(e),ZS.signalSchemaChange(new eT(process.pid,e.operation,e.schema)),await lV.purgeSchemaTableStreams(e.schema,s);let i=await uV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(que,"dropSchema");async function Gue(e){let t=Jh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required()}));if(t)throw new Fl(t.message);Gd(e);let r=await Hd.checkSchemaTableExists(e.schema,e.table);if(r)throw Go(new Error,r,$o.NOT_FOUND,qd.LOG_LEVELS.ERROR,r,!0);await nc.dropTable(e),await lV.purgeTableStream(e.schema,e.table);let n=await uV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Gue,"dropTable");async function $ue(e){let t=Jh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required(),attribute:pr.string().required()}));if(t)throw new Fl(t.message);Gd(e);let r=await Hd.checkSchemaTableExists(e.schema,e.table);if(r)throw Go(new Error,r,$o.NOT_FOUND,qd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Go(new Error,"You cannot drop a hash attribute",$o.BAD_REQUEST,void 0,void 0,!0);if(qd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Go(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,$o.BAD_REQUEST,void 0,void 0,!0);try{return await nc.dropAttribute(e),Vue(e),ZS.signalSchemaChange(new eT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Lue.error(`Got an error deleting attribute ${Mue.inspect(e)}.`),n}}o($ue,"dropAttribute");function Vue(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(Vue,"dropAttributeFromGlobal");async function Kue(e){Gd(e);let t=Uue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Go(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,$o.BAD_REQUEST,void 0,void 0,!0);return await nc.createAttribute(e),ZS.signalSchemaChange(new eT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Kue,"createAttribute");function Yue(e){return nc.getBackup(e)}o(Yue,"getBackup");function Wue(e){if(!e.database)throw new Fl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Fl(`Unknown database '${e.database}'`);return xue(databases[e.database],e.database),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(Wue,"cleanupOrphanBlobs")});var pV=M((ZUe,hV)=>{"use strict";var{OPERATIONS_ENUM:zue}=(H(),v(Y)),fO=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=zue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};hV.exports=fO});var mO=M((r0e,TV)=>{"use strict";var jue=Xn(),t0e=pV(),tT=ie(),rT=(H(),v(Y)),Que=ae(),{handleHDBError:EV,hdbErrors:Jue}=_e(),{HDB_ERROR_MSGS:_V,HTTP_STATUS_CODES:gV}=Jue,Xue=Object.values(rT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),SV="To use this operation audit log must be enabled in harperdb-config.yaml";TV.exports=Zue;async function Zue(e){if(tT.isEmpty(e.schema))throw new Error(_V.SCHEMA_REQUIRED_ERR);if(tT.isEmpty(e.table))throw new Error(_V.TABLE_REQUIRED_ERR);if(!Que.get(rT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw EV(new Error,SV,gV.BAD_REQUEST,rT.LOG_LEVELS.ERROR,SV,!0);let t=tT.checkSchemaTableExist(e.schema,e.table);if(t)throw EV(new Error,t,gV.NOT_FOUND,rT.LOG_LEVELS.ERROR,t,!0);if(!tT.isEmpty(e.search_type)&&Xue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${e.search_type}'`);return await jue.readAuditLog(e)}o(Zue,"readAuditLog")});var yV=M((s0e,RV)=>{"use strict";var{OPERATIONS_ENUM:ede}=(H(),v(Y)),hO=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=ede.GET_BACKUP,this.schema=t,this.table=r}};RV.exports=hO});var IV=M((a0e,bV)=>{"use strict";var tde=Xn(),o0e=yV(),pO=ie(),rde=(H(),v(Y)),{handleHDBError:nde,hdbErrors:sde}=_e(),{HDB_ERROR_MSGS:AV,HTTP_STATUS_CODES:ide}=sde;bV.exports=ode;async function ode(e){if(pO.isEmpty(e.schema))throw new Error(AV.SCHEMA_REQUIRED_ERR);if(pO.isEmpty(e.table))throw new Error(AV.TABLE_REQUIRED_ERR);let t=pO.checkSchemaTableExist(e.schema,e.table);if(t)throw nde(new Error,t,ide.NOT_FOUND,rde.LOG_LEVELS.ERROR,t,!0);return tde.getBackup(e)}o(ode,"getBackup")});var CV=M((l0e,OV)=>{"use strict";var ade=ae(),sc=require("joi"),cde=st(),NV=require("moment"),lde=require("fs-extra"),EO=require("path"),ude=require("lodash"),Xh=(H(),v(Y)),{LOG_LEVELS:Hl}=(H(),v(Y)),dde="YYYY-MM-DD hh:mm:ss",fde=EO.resolve(__dirname,"../logs");OV.exports=function(e){return cde.validateBySchema(e,mde)};var mde=sc.object({from:sc.custom(wV),until:sc.custom(wV),level:sc.valid(Hl.NOTIFY,Hl.FATAL,Hl.ERROR,Hl.WARN,Hl.INFO,Hl.DEBUG,Hl.TRACE),order:sc.valid("asc","desc"),limit:sc.number().min(1),start:sc.number().min(0),log_name:sc.custom(hde)});function wV(e,t){if(NV(e,NV.ISO_8601).format(dde)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(wV,"validateDatetime");function hde(e,t){if(ude.invert(Xh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=ade.get(Xh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Xh.LOG_NAMES.HDB:e,i=s===Xh.LOG_NAMES.INSTALL?EO.join(fde,Xh.LOG_NAMES.INSTALL):EO.join(n,s);return lde.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(hde,"validateReadLogPath")});var gO=M((d0e,LV)=>{"use strict";var nT=(H(),v(Y)),pde=z(),Ede=ae(),_de=CV(),_O=require("path"),PV=require("fs-extra"),{once:gde}=require("events"),{handleHDBError:Sde,hdbErrors:Tde}=_e(),{PACKAGE_ROOT:Rde}=It(),{replicateOperation:yde}=(is(),v(ko)),Ade=_O.join(Rde,"logs"),bde=1e3,Ide=200;LV.exports=Nde;async function Nde(e){let t=_de(e);if(t)throw Sde(t,t.message,Tde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=yde(e),n=Ede.get(nT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?nT.LOG_NAMES.HDB:e.log_name,i=s===nT.LOG_NAMES.INSTALL?_O.join(Ade,nT.LOG_NAMES.INSTALL):_O.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?bde: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(PV.statSync(i).size-(_+5)*Ide,0));let y=PV.createReadStream(i,{start:g});y.on("error",F=>{pde.error(F)});let T=0,R=[],N="",C;y.on("data",F=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=N+F;let J=0,K;for(;(K=$.exec(F))&&!y.destroyed;){C&&(C.message=F.slice(J,K.index),q(C));let[te,fe,oe]=K,ge=oe.split("] ["),Pe=ge[0],Te=ge[1];ge.splice(0,2),C={timestamp:fe,thread:Pe,level:Te,tags:ge,message:""},J=K.index+te.length}N=F.slice(J)}),y.on("end",F=>{y.destroyed||C&&(C.message=N.trim(),q(C))}),y.resume();function q(F){let $,J,K;switch(!0){case(a&&l&&d):$=new Date(F.timestamp),J=new Date(u),K=new Date(f),F.level===c&&$>=J&&$<=K&&T<p?T++:F.level===c&&$>=J&&$<=K&&(ro(F,h,R),T++,T===_&&y.destroy());break;case(a&&l):$=new Date(F.timestamp),J=new Date(u),F.level===c&&$>=J&&T<p?T++:F.level===c&&$>=J&&(ro(F,h,R),T++,T===_&&y.destroy());break;case(a&&d):$=new Date(F.timestamp),K=new Date(f),F.level===c&&$<=K&&T<p?T++:F.level===c&&$<=K&&(ro(F,h,R),T++,T===_&&y.destroy());break;case(l&&d):$=new Date(F.timestamp),J=new Date(u),K=new Date(f),$>=J&&$<=K&&T<p?T++:$>=J&&$<=K&&(ro(F,h,R),T++,T===_&&y.destroy());break;case a:F.level===c&&T<p?T++:F.level===c&&(ro(F,h,R),T++,T===_&&y.destroy());break;case l:$=new Date(F.timestamp),J=new Date(u),$>=J&&T<p?T++:$>=J&&T>=p&&(ro(F,h,R),T++,T===_&&y.destroy());break;case d:$=new Date(F.timestamp),K=new Date(f),$<=K&&T<p?T++:$<=K&&T>=p&&(ro(F,h,R),T++,T===_&&y.destroy());break;default:T<p?T++:(ro(F,h,R),T++,T===_&&y.destroy())}}o(q,"onLogMessage"),await gde(y,"close");let j=await r;if(j.replicated){for(let F of R)F.node=server.hostname;for(let F of j.replicated){let $=F.node;if(F.status==="failed")ro({timestamp:new Date().toISOString(),level:"error",node:$,message:`Error retrieving logs: ${F.reason}`},h,R);else for(let J of F.results)J.node=$,ro(J,h,R)}}return R}o(Nde,"readLog");function ro(e,t,r){t==="desc"?wde(e,r):t==="asc"?Ode(e,r):r.push(e)}o(ro,"pushLineToResult");function wde(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(wde,"insertDescending");function Ode(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(Ode,"insertAscending")});var sT=M((_0e,UV)=>{"use strict";var SO=require("joi"),{string:Vd,boolean:DV,date:Cde}=SO.types(),Pde=st(),{validateSchemaExists:m0e,validateTableExists:h0e,validateSchemaName:p0e}=qi(),Lde=(H(),v(Y)),Dde=ht(),MV=ae();MV.initSync();var E0e=Vd.invalid(MV.get(Lde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Dde.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),vV={operation:Vd.valid("add_node","update_node","set_node_replication"),node_name:Vd.optional(),subscriptions:SO.array().items({table:Vd.optional(),schema:Vd.optional(),database:Vd.optional(),subscribe:DV.required(),publish:DV.required().custom(vde),start_time:Cde.iso()})};function Mde(e){return Pde.validateBySchema(e,SO.object(vV))}o(Mde,"addUpdateNodeValidator");function vde(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(vde,"checkForFalsy");UV.exports={addUpdateNodeValidator:Mde,validationSchema:vV}});var ic=M((S0e,xV)=>{"use strict";var TO=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},RO=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};xV.exports={Node:TO,NodeSubscription:RO}});var FV=M((R0e,BV)=>{"use strict";var Ude=(H(),v(Y)).OPERATIONS_ENUM,yO=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Ude.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};BV.exports=yO});var Zh=M((A0e,HV)=>{"use strict";var AO=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},bO=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)}};HV.exports={RemotePayloadObject:AO,RemotePayloadSubscription:bO}});var qV=M((I0e,kV)=>{"use strict";var IO=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}};kV.exports=IO});var $V=M((L0e,GV)=>{"use strict";var xde=qV(),w0e=Kt(),O0e=Rt(),Bde=z(),{getSchemaPath:C0e,getTransactionAuditStorePath:P0e}=Nt(),{getDatabases:Fde}=(Me(),v(gt));GV.exports=Hde;async function Hde(e){let t=new xde;try{let r=Fde()[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){Bde.warn(`unable to stat table dbi due to ${r}`)}return t}o(Hde,"lmdbGetTableSize")});var KV=M((M0e,VV)=>{"use strict";var NO=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}};VV.exports=NO});var Yd=M((H0e,jV)=>{"use strict";var kde=require("fs-extra"),qde=require("path"),hn=require("systeminformation"),oc=z(),YV=Gt(),U0e=ht(),Kd=(H(),v(Y)),Gde=$V(),$de=vo(),{getThreadInfo:WV}=ze(),ep=ae();ep.initSync();var Vde=KV(),{openEnvironment:x0e}=Rt(),{getSchemaPath:B0e}=Nt(),{database:F0e,databases:wO}=(Me(),v(gt)),iT;jV.exports={getHDBProcessInfo:LO,getNetworkInfo:MO,getDiskInfo:DO,getMemoryInfo:PO,getCPUInfo:CO,getTimeInfo:OO,getSystemInformation:vO,systemInformation:Kde,getTableSize:UO,getMetrics:xO};function OO(){return hn.time()}o(OO,"getTimeInfo");async function CO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await hn.cpu();d.cpu_speed=await hn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:h,rawCurrentloadNice:p,rawCurrentloadSystem:_,rawCurrentloadUser:g,cpus:y,...T}=await hn.currentLoad();return T.cpus=[],y.forEach(R=>{let{rawLoad:N,rawLoadIdle:C,rawLoadIrq:q,rawLoadNice:j,rawLoadSystem:F,rawLoadUser:$,...J}=R;T.cpus.push(J)}),d.current_load=T,d}catch(e){return oc.error(`error in getCPUInfo: ${e}`),{}}}o(CO,"getCPUInfo");async function PO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await hn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return oc.error(`error in getMemoryInfo: ${e}`),{}}}o(PO,"getMemoryInfo");async function LO(){let e={core:[],clustering:[]};try{let t=await hn.processes(),r;try{r=Number.parseInt(await kde.readFile(qde.join(ep.get(Kd.CONFIG_PARAMS.ROOTPATH),Kd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Kd.NODE_ERROR_CODES.ENOENT)oc.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 oc.error(`error in getHDBProcessInfo: ${t}`),e}}o(LO,"getHDBProcessInfo");async function DO(){let e={};try{if(!ep.get(Kd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await hn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await hn.fsStats();return e.read_write=u,e.size=await hn.fsSize(),e}catch(t){return oc.error(`error in getDiskInfo: ${t}`),e}}o(DO,"getDiskInfo");async function MO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return ep.get(Kd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await hn.networkInterfaceDefault(),e.latency=await hn.inetChecksite("google.com"),(await hn.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 hn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return oc.error(`error in getNetworkInfo: ${t}`),e}}o(MO,"getNetworkInfo");async function vO(){if(iT!==void 0)return iT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await hn.osInfo();e=c;let l=await hn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,iT=e,iT}catch(t){return oc.error(`error in getSystemInformation: ${t}`),e}}o(vO,"getSystemInformation");async function UO(){let e=[],t=await $de.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Gde(n));return e}o(UO,"getTableSize");async function xO(){let e={};for(let t in wO){let r=e[t]={},n=r.tables={};for(let s in wO[t])try{let i=wO[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){oc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(xO,"getMetrics");async function zV(){if(ep.get(Kd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await YV.getNATSReferences(),t=await YV.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(zV,"getNatsStreamInfo");async function Kde(e){let t=new Vde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await vO(),t.time=OO(),t.cpu=await CO(),t.memory=await PO(),t.disk=await DO(),t.network=await MO(),t.harperdb_processes=await LO(),t.table_size=await UO(),t.metrics=await xO(),t.threads=await WV(),t.replication=await zV(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await vO();break;case"time":t.time=OO();break;case"cpu":t.cpu=await CO();break;case"memory":t.memory=await PO();break;case"disk":t.disk=await DO();break;case"network":t.network=await MO();break;case"harperdb_processes":t.harperdb_processes=await LO();break;case"table_size":t.table_size=await UO();break;case"database_metrics":case"metrics":t.metrics=await xO();break;case"threads":t.threads=await WV();break;case"replication":t.replication=await zV();break;default:break}return t}o(Kde,"systemInformation")});var vs=M((V0e,ZV)=>{"use strict";var Yde=an(),BO=ie(),Wde=require("util"),kl=(H(),v(Y)),QV=ae();QV.initSync();var zde=gw(),JV=on(),{Node:q0e,NodeSubscription:G0e}=ic(),jde=zu(),Qde=FV(),{RemotePayloadObject:Jde,RemotePayloadSubscription:Xde}=Zh(),{handleHDBError:Zde,hdbErrors:efe}=_e(),{HTTP_STATUS_CODES:tfe,HDB_ERROR_MSGS:rfe}=efe,nfe=ci(),sfe=Yd(),{packageJson:ife}=It(),{getDatabases:ofe}=(Me(),v(gt)),$0e=Wde.promisify(zde.authorize),afe=JV.searchByHash,cfe=JV.searchByValue;ZV.exports={isEmpty:lfe,getNodeRecord:ufe,upsertNodeRecord:dfe,buildNodePayloads:ffe,checkClusteringEnabled:mfe,getAllNodeRecords:hfe,getSystemInfo:pfe,reverseSubscription:XV};function lfe(e){return e==null}o(lfe,"isEmpty");async function ufe(e){let t=new jde(kl.SYSTEM_SCHEMA_NAME,kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return afe(t)}o(ufe,"getNodeRecord");async function dfe(e){let t=new Qde(kl.SYSTEM_SCHEMA_NAME,kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Yde.upsert(t)}o(dfe,"upsertNodeRecord");function XV(e){if(BO.isEmpty(e.subscribe)||BO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(XV,"reverseSubscription");function ffe(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=BO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=XV(c),h=ofe()[l]?.[u],p=new Xde(l,u,d,m,f,c.start_time,h.schemaDefined?h.attributes:void 0);s.push(p)}return new Jde(r,t,s,n)}o(ffe,"buildNodePayloads");function mfe(){if(!QV.get(kl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zde(new Error,rfe.CLUSTERING_NOT_ENABLED,tfe.BAD_REQUEST,void 0,void 0,!0)}o(mfe,"checkClusteringEnabled");async function hfe(){let e=new nfe(kl.SYSTEM_SCHEMA_NAME,kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await cfe(e))}o(hfe,"getAllNodeRecords");async function pfe(){let e=await sfe.getSystemInformation();return{hdb_version:ife.version,node_version:e.node_version,platform:e.platform}}o(pfe,"getSystemInfo")});var FO=M((Y0e,a1)=>{"use strict";var oT=Gt(),e1=ie(),t1=ht(),r1=(H(),v(Y)),aT=z(),n1=$d(),Efe=Qu(),{RemotePayloadObject:_fe}=Zh(),{handleHDBError:s1,hdbErrors:gfe}=_e(),{HTTP_STATUS_CODES:i1}=gfe,{NodeSubscription:o1}=ic();a1.exports=Sfe;async function Sfe(e,t){let r;try{r=await oT.request(`${t}.${t1.REQUEST_SUFFIX}`,new _fe(r1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),aT.trace("Response from remote describe all request:",r)}catch(a){aT.error(`addNode received error from describe all request to remote node: ${a}`);let c=oT.requestErrorHandler(a,"add_node",t);throw s1(new Error,c,i1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===t1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw s1(new Error,a,i1.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===r1.SYSTEM_SCHEMA_NAME){await oT.createLocalTableStream(l,c);let p=new o1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p);continue}let u=e1.doesSchemaExist(l),d=n[l]!==void 0,f=c?e1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(aT.trace(`addNode creating schema: ${l}`),await n1.createSchema({operation:"create_schema",schema:l})),!f&&m){aT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new Efe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await n1.createTable(p)}await oT.createLocalTableStream(l,c);let h=new o1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h)}return{added:i,skipped:s}}o(Sfe,"reviewSubscriptions")});var Wd={};Oe(Wd,{addNodeBack:()=>HO,removeNodeBack:()=>kO,setNode:()=>Afe});async function Afe(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=Ei(t)):t=QS(r);let n=(0,l1.validateBySchema)(e,yfe);if(n)throw(0,Vo.handleHDBError)(n,n.message,Rfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Vo.ClientError("url or hostname is required for remove_node operation");let h=r,p=zt(),_=await p.get(h);if(!_)throw new Vo.ClientError(h+" does not exist");try{await Qh({url:_.url},{operation:G.REMOVE_NODE_BACK,name:_?.subscriptions?.length>0?et():h},void 0)}catch(g){cs.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 Vo.ClientError("url required for this operation");let s=Qa();if(s==null)throw new Vo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Us.getReplicationCert)();let h=await(0,Us.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed||e.force_signing?(a=await(0,Us.createCsr)(),cs.info("Sending CSR to target node:",t)):h&&(c=h.certificate,cs.info("Sending CA named",h.name,"to target node",t))}let l={operation:G.ADD_NODE_BACK,hostname:(0,cc.get)(U.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,cc.get)(U.REPLICATION_SHARD)!==void 0&&(l.shard=(0,cc.get)(U.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(c1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let h=c1(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 Qh({url:t},l,e)}catch(h){h.message=`Error returned from ${t}: `+h.message,cs.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&&(cs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Us.setCertTable)({name:Tfe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Us.setCertTable)({name:et()+"-replication",uses:["replication"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let h={url:s,ca:c,replicates:!0,subscriptions:null};(0,cc.get)(U.REPLICATION_SHARD)!==void 0&&(h.shard=(0,cc.get)(U.REPLICATION_SHARD)),e.retain_authorization&&(h.authorization=e.authorization),e.start_time&&(h.start_time=e.start_time),await Fo(et(),h)}await Fo(u?u.nodeName:f.name??Ei(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 HO(e){cs.trace("addNodeBack received request:",e);let t=await(0,Us.signCertificate)(e),r;e.csr?(r=t.signingCA,cs.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,cs.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,Us.getReplicationCertAuth)();if(n.replicates){let i={url:Qa(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,cc.get)(U.REPLICATION_SHARD)!==void 0&&(i.shard=(0,cc.get)(U.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Fo(et(),i)}return await Fo(e.hostname,n),t.nodeName=et(),t.usingCA=s?.certificate,cs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function kO(e){cs.trace("removeNodeBack received request:",e),await zt().delete(e.name)}function c1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Us,l1,ac,cc,cs,Vo,Tfe,Rfe,yfe,zd=le(()=>{Us=w(as()),l1=w(st()),ac=w(require("joi")),cc=w(ae());H();Kh();Ml();is();cs=w(z()),Vo=w(_e()),{pki:Tfe}=require("node-forge"),{HTTP_STATUS_CODES:Rfe}=Vo.hdbErrors,yfe=ac.default.object({hostname:ac.default.string(),verify_tls:ac.default.boolean(),replicates:ac.default.boolean(),subscriptions:ac.default.array(),revoked_certificates:ac.default.array(),shard:ac.default.number()});o(Afe,"setNode");o(HO,"addNodeBack");o(kO,"removeNodeBack");o(c1,"reverseSubscription")});var fT=M((txe,d1)=>{"use strict";var{handleHDBError:cT,hdbErrors:bfe}=_e(),{HTTP_STATUS_CODES:lT}=bfe,{addUpdateNodeValidator:Ife}=sT(),uT=z(),dT=(H(),v(Y)),u1=ht(),Nfe=ie(),tp=Gt(),rp=vs(),qO=ae(),wfe=FO(),{Node:Ofe,NodeSubscription:Cfe}=ic(),{broadcast:Pfe}=ze(),{setNode:Lfe}=(zd(),v(Wd)),Z0e=ae(),exe=(H(),v(Y)),Dfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Mfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",vfe=qO.get(dT.CONFIG_PARAMS.CLUSTERING_NODENAME);d1.exports=Ufe;async function Ufe(e,t=!1){if(uT.trace("addNode called with:",e),qO.get(dT.CONFIG_PARAMS.REPLICATION_URL)||qO.get(dT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Lfe(e);rp.checkClusteringEnabled();let r=Ife(e);if(r)throw cT(r,r.message,lT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await rp.getNodeRecord(n);if(!Nfe.isEmptyOrZeroLength(f))throw cT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,lT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await wfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=Dfe,a;let c=rp.buildNodePayloads(s,vfe,dT.OPERATIONS_ENUM.ADD_NODE,await rp.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 Cfe(h.schema,h.table,h.publish,h.subscribe))}uT.trace("addNode sending remote payload:",c);let u;try{u=await tp.request(`${n}.${u1.REQUEST_SUFFIX}`,c)}catch(f){uT.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 tp.updateRemoteConsumer(_,n)}let m=tp.requestErrorHandler(f,"add_node",n);throw cT(new Error,m,lT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===u1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw cT(new Error,f,lT.INTERNAL_SERVER_ERROR,"error",f)}uT.trace(u);for(let f=0,m=s.length;f<m;f++){let h=s[f];await tp.updateRemoteConsumer(h,n),h.subscribe===!0&&await tp.updateConsumerIterator(h.schema,h.table,n,"start")}let d=new Ofe(n,l,u.system_info);return await rp.upsertNodeRecord(d),Pfe({type:"nats_update"}),i.length>0?a.message=Mfe:a.message=`Successfully added '${n}' to manifest`,a}o(Ufe,"addNode")});var KO=M((sxe,m1)=>{"use strict";var{handleHDBError:GO,hdbErrors:xfe}=_e(),{HTTP_STATUS_CODES:$O}=xfe,{addUpdateNodeValidator:Bfe}=sT(),np=z(),mT=(H(),v(Y)),f1=ht(),nxe=ie(),sp=Gt(),ip=vs(),VO=ae(),{cloneDeep:Ffe}=require("lodash"),Hfe=FO(),{Node:kfe,NodeSubscription:qfe}=ic(),{broadcast:Gfe}=ze(),{setNode:$fe}=(zd(),v(Wd)),Vfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Kfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Yfe=VO.get(mT.CONFIG_PARAMS.CLUSTERING_NODENAME);m1.exports=Wfe;async function Wfe(e){if(np.trace("updateNode called with:",e),VO.get(mT.CONFIG_PARAMS.REPLICATION_URL)??VO.get(mT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return $fe(e);ip.checkClusteringEnabled();let t=Bfe(e);if(t)throw GO(t,t.message,$O.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await ip.getNodeRecord(r);s.length>0&&(n=Ffe(s));let{added:i,skipped:a}=await Hfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Vfe,c;let l=ip.buildNodePayloads(i,Yfe,mT.OPERATIONS_ENUM.UPDATE_NODE,await ip.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];np.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}np.trace("updateNode sending remote payload:",l);let u;try{u=await sp.request(`${r}.${f1.REQUEST_SUFFIX}`,l)}catch(d){np.error(`updateNode received error from request: ${d}`);let f=sp.requestErrorHandler(d,"update_node",r);throw GO(new Error,f,$O.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===f1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw GO(new Error,d,$O.INTERNAL_SERVER_ERROR,"error",d)}np.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await sp.updateRemoteConsumer(m,r),m.subscribe===!0?await sp.updateConsumerIterator(m.schema,m.table,r,"start"):await sp.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new kfe(r,[],u.system_info)]),await zfe(n[0],i,u.system_info),a.length>0?c.message=Kfe:c.message=`Successfully updated '${r}'`,c}o(Wfe,"updateNode");async function zfe(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 qfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await ip.upsertNodeRecord(n),Gfe({type:"nats_update"})}o(zfe,"updateNodeTable")});var g1=M((oxe,_1)=>{"use strict";var E1=require("joi"),{string:h1}=E1.types(),jfe=st(),p1=(H(),v(Y)),Qfe=ae(),Jfe=ht();_1.exports=Xfe;function Xfe(e){let t=h1.invalid(Qfe.get(p1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Jfe.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=E1.object({operation:h1.valid(p1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return jfe.validateBySchema(e,r)}o(Xfe,"removeNodeValidator")});var hT=M((cxe,A1)=>{"use strict";var{handleHDBError:S1,hdbErrors:Zfe}=_e(),{HTTP_STATUS_CODES:T1}=Zfe,eme=g1(),op=z(),R1=vs(),tme=ie(),jd=(H(),v(Y)),y1=ht(),YO=Gt(),WO=ae(),{RemotePayloadObject:rme}=Zh(),{NodeSubscription:nme}=ic(),sme=ju(),ime=ka(),{broadcast:ome}=ze(),{setNode:ame}=(zd(),v(Wd)),cme=WO.get(jd.CONFIG_PARAMS.CLUSTERING_NODENAME);A1.exports=lme;async function lme(e){if(op.trace("removeNode called with:",e),WO.get(jd.CONFIG_PARAMS.REPLICATION_URL)??WO.get(jd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ame(e);R1.checkClusteringEnabled();let t=eme(e);if(t)throw S1(t,t.message,T1.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await R1.getNodeRecord(r);if(tme.isEmptyOrZeroLength(n))throw S1(new Error,`Node '${r}' was not found.`,T1.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new rme(jd.OPERATIONS_ENUM.REMOVE_NODE,cme,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await YO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await YO.updateRemoteConsumer(new nme(d.schema,d.table,!1,!1),r)}catch(f){op.error(f)}}try{i=await YO.request(`${r}.${y1.REQUEST_SUFFIX}`,s),op.trace("Remove node reply from remote node:",r,i)}catch(l){op.error("removeNode received error from request:",l),a=!0}let c=new sme(jd.SYSTEM_SCHEMA_NAME,jd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await ime.deleteRecord(c),ome({type:"nats_update"}),i?.status===y1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(op.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(lme,"removeNode")});var N1=M((uxe,I1)=>{"use strict";var b1=require("joi"),{string:ume,array:dme}=b1.types(),fme=st(),mme=sT();I1.exports=hme;function hme(e){let t=b1.object({operation:ume.valid("configure_cluster").required(),connections:dme.items(mme.validationSchema).required()});return fme.validateBySchema(e,t)}o(hme,"configureClusterValidator")});var zO=M((fxe,L1)=>{"use strict";var w1=(H(),v(Y)),pT=z(),pme=ie(),Eme=ae(),_me=hT(),gme=fT(),Sme=vs(),Tme=N1(),{handleHDBError:O1,hdbErrors:Rme}=_e(),{HTTP_STATUS_CODES:C1}=Rme,yme="Configure cluster complete.",Ame="Failed to configure the cluster. Check the logs for more details.",bme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";L1.exports=Ime;async function Ime(e){pT.trace("configure cluster called with:",e);let t=Tme(e);if(t)throw O1(t,t.message,C1.BAD_REQUEST,void 0,void 0,!0);let r=await Sme.getAllNodeRecords(),n=[];if(Eme.get(w1.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await P1(_me,{operation:w1.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}pT.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 P1(gme,f,f.node_name);s.push(m)}pT.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"&&(pT.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(pme.isEmptyOrZeroLength(a))return{message:yme,connections:c};if(l)return{message:bme,failed_nodes:a,connections:c};throw O1(new Error,Ame,C1.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(Ime,"configureCluster");async function P1(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(P1,"functionWrapper")});var U1=M((hxe,v1)=>{"use strict";var ap=require("joi"),Nme=st(),{validateSchemaExists:D1,validateTableExists:wme,validateSchemaName:M1}=qi(),Ome=ap.object({operation:ap.string().valid("purge_stream"),schema:ap.string().custom(D1).custom(M1).optional(),database:ap.string().custom(D1).custom(M1).optional(),table:ap.string().custom(wme).required()});function Cme(e){return Nme.validateBySchema(e,Ome)}o(Cme,"purgeStreamValidator");v1.exports=Cme});var jO=M((Exe,x1)=>{"use strict";var{handleHDBError:Pme,hdbErrors:Lme}=_e(),{HTTP_STATUS_CODES:Dme}=Lme,Mme=U1(),vme=Gt(),Ume=vs();x1.exports=xme;async function xme(e){e.schema=e.schema??e.database;let t=Mme(e);if(t)throw Pme(t,t.message,Dme.BAD_REQUEST,void 0,void 0,!0);Ume.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await vme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(xme,"purgeStream")});var XO=M((gxe,$1)=>{"use strict";var JO=vs(),Bme=Gt(),_T=ae(),Qd=(H(),v(Y)),ql=ht(),Fme=ie(),QO=z(),{RemotePayloadObject:Hme}=Zh(),{ErrorCode:B1}=require("nats"),{parentPort:F1}=require("worker_threads"),{onMessageByType:kme}=ze(),{getThisNodeName:qme}=(is(),v(ko)),{requestClusterStatus:Gme}=(Kh(),v(l$)),{getReplicationSharedStatus:$me,getHDBNodeTable:Vme}=(Ml(),v(kw)),{CONFIRMATION_STATUS_POSITION:Kme,RECEIVED_VERSION_POSITION:Yme,RECEIVED_TIME_POSITION:Wme,SENDING_TIME_POSITION:zme,RECEIVING_STATUS_POSITION:jme,RECEIVING_STATUS_RECEIVING:Qme}=(lO(),v(J$)),H1=_T.get(Qd.CONFIG_PARAMS.CLUSTERING_ENABLED),k1=_T.get(Qd.CONFIG_PARAMS.CLUSTERING_NODENAME);$1.exports={clusterStatus:Jme,buildNodeStatus:G1};var q1;kme("cluster-status",async e=>{q1(e)});async function Jme(){if(_T.get(Qd.CONFIG_PARAMS.REPLICATION_URL)||_T.get(Qd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(F1){F1.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{q1=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=$me(u,l,a);c.lastCommitConfirmed=ET(d[Kme]),c.lastReceivedRemoteTime=ET(d[Yme]),c.lastReceivedLocalTime=ET(d[Wme]),c.sendingMessage=ET(d[zme]),c.lastReceivedStatus=d[jme]===Qme?"Receiving":"Waiting"}}}else n=Gme();n.node_name=qme();let s=Vme().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:k1,is_enabled:H1,connections:[]};if(!H1)return e;let t=await JO.getAllNodeRecords();if(Fme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(G1(t[n],e.connections));return await Promise.allSettled(r),e}o(Jme,"clusterStatus");function ET(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(ET,"asDate");async function G1(e,t){let r=e.name,n=new Hme(Qd.OPERATIONS_ENUM.CLUSTER_STATUS,k1,void 0,await JO.getSystemInfo()),s,i,a=ql.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Bme.request(ql.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ql.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=ql.CLUSTER_STATUS_STATUSES.CLOSED,QO.error(`Error getting node status from ${r} `,s))}catch(l){QO.warn(`Error getting node status from ${r}`,l),l.code===B1.NoResponders?a=ql.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===B1.Timeout?a=ql.CLUSTER_STATUS_STATUSES.TIMEOUT:a=ql.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Xme(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!==Qd.PRE_4_0_0_VERSION&&await JO.upsertNodeRecord(l)}catch(l){QO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(G1,"buildNodeStatus");function Xme(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(Xme,"NodeStatusObject")});var eC=M((Txe,V1)=>{"use strict";var{handleHDBError:Zme,hdbErrors:ehe}=_e(),{HTTP_STATUS_CODES:the}=ehe,rhe=Gt(),nhe=vs(),ZO=ie(),gT=require("joi"),she=st(),ihe=2e3,ohe=gT.object({timeout:gT.number().min(1),connected_nodes:gT.boolean(),routes:gT.boolean()});V1.exports=ahe;async function ahe(e){nhe.checkClusteringEnabled();let t=she.validateBySchema(e,ohe);if(t)throw Zme(t,t.message,the.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||ZO.autoCastBoolean(n),a=s===void 0||ZO.autoCastBoolean(s),c={nodes:[]},l=await rhe.getServerList(r??ihe),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:ZO.autoCast(_.split(":")[1])})):[]),c.nodes.push(p)}}return c}o(ahe,"clusterNetwork")});var z1=M((yxe,W1)=>{"use strict";var tC=require("joi"),K1=st(),{routeConstraints:Y1}=oN();W1.exports={setRoutesValidator:che,deleteRoutesValidator:lhe};function che(e){let t=tC.object({server:tC.valid("hub","leaf"),routes:Y1.required()});return K1.validateBySchema(e,t)}o(che,"setRoutesValidator");function lhe(e){let t=tC.object({routes:Y1.required()});return K1.validateBySchema(e,t)}o(lhe,"deleteRoutesValidator")});var ST=M((bxe,tK)=>{"use strict";var Ko=Ot(),rC=ie(),xs=(H(),v(Y)),Jd=ae(),j1=z1(),{handleHDBError:Q1,hdbErrors:uhe}=_e(),{HTTP_STATUS_CODES:J1}=uhe,X1="cluster routes successfully set",Z1="cluster routes successfully deleted";tK.exports={setRoutes:fhe,getRoutes:mhe,deleteRoutes:hhe};function dhe(e){let t=Ko.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=rC.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"?Ko.updateConfigValue(xs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Ko.updateConfigValue(xs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:X1,set:i,skipped:s}}o(dhe,"setRoutesNats");function fhe(e){let t=j1.setRoutesValidator(e);if(t)throw Q1(t,t.message,J1.BAD_REQUEST,void 0,void 0,!0);if(Jd.get(xs.CONFIG_PARAMS.CLUSTERING_ENABLED))return dhe(e);let r=[],n=[],s=Jd.get(xs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{eK(s,i)?n.push(i):(s.push(i),r.push(i))}),Ko.updateConfigValue(xs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:X1,set:r,skipped:n}}o(fhe,"setRoutes");function eK(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(eK,"existsInArray");function mhe(){if(Jd.get(xs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Ko.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Jd.get(xs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(mhe,"getRoutes");function hhe(e){let t=j1.deleteRoutesValidator(e);if(t)throw Q1(t,t.message,J1.BAD_REQUEST,void 0,void 0,!0);if(Jd.get(xs.CONFIG_PARAMS.CLUSTERING_ENABLED))return phe(e);let r=[],n=[],s=Jd.get(xs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{eK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Ko.updateConfigValue(xs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:Z1,deleted:r,skipped:n}}o(hhe,"deleteRoutes");function phe(e){let t=Ko.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=rC.isEmptyOrZeroLength(r)?null:r,Ko.updateConfigValue(xs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=rC.isEmptyOrZeroLength(n)?null:n,Ko.updateConfigValue(xs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Z1,deleted:s,skipped:i}}o(phe,"deleteRoutesNats")});var nK=M((Nxe,rK)=>{"use strict";var cp=require("alasql"),Gl=require("recursive-iterator"),Si=z(),Ehe=ie(),lp=(H(),v(Y)),nC=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,ghe(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=>lp.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=>!lp.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][lp.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=_he(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=>!lp.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new cp.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 _he(e){return e.filter(t=>t[lp.PERMS_CRUD_ENUM.READ])}o(_he,"filterReadRestrictedAttrs");function ghe(e,t,r,n,s){She(e,t,r,n,s)}o(ghe,"interpretAST");function up(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(up,"addSchemaTableToMap");function She(e,t,r,n,s){if(!e){Si.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof cp.yy.Insert?Ahe(e,t,r):e instanceof cp.yy.Select?The(e,t,r,n,s):e instanceof cp.yy.Update?Rhe(e,t,r):e instanceof cp.yy.Delete?yhe(e,t,r):Si.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(She,"getRecordAttributesAST");function The(e,t,r,n,s){if(!e){Si.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Ehe.isEmptyOrZeroLength(i)){Si.error("No schema specified");return}e.from.forEach(c=>{up(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),up(c.table,t,r,n,s)});let a=new Gl(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{Si.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 Gl(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{Si.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 Gl(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{Si.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 Gl(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{Si.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(The,"getSelectAttributes");function Rhe(e,t,r){if(!e){Si.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.table.databaseid;up(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&sC(e.table.tableid,s,i.columnid,t,r)}o(Rhe,"getUpdateAttributes");function yhe(e,t,r){if(!e){Si.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Gl(e.where),s=e.table.databaseid;up(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&sC(e.table.tableid,s,i.columnid,t,r)}o(yhe,"getDeleteAttributes");function Ahe(e,t,r){if(!e){Si.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.into.databaseid;up(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&sC(e.into.tableid,s,i.columnid,t,r)}o(Ahe,"getInsertAttributes");function sC(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(sC,"pushAttribute");rK.exports=nC});var iK=M((Oxe,sK)=>{"use strict";var TT=(H(),v(Y)),RT=class{static{o(this,"BaseLicense")}constructor(t=0,r=TT.RAM_ALLOCATION_ENUM.DEFAULT,n=TT.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},iC=class extends RT{static{o(this,"ExtendedLicense")}constructor(t=0,r=TT.RAM_ALLOCATION_ENUM.DEFAULT,n=TT.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};sK.exports={BaseLicense:RT,ExtendedLicense:iC}});var ef=M((Pxe,dK)=>{"use strict";var Zd=require("fs-extra"),yT=(Ag(),v(yg)),aK=require("crypto"),bhe=require("moment"),Ihe=require("uuid").v4,pn=z(),aC=require("path"),Nhe=ie(),$l=(H(),v(Y)),{totalmem:oK}=require("os"),whe=iK().ExtendedLicense,Xd="invalid license key format",Ohe="061183",Che="mofi25",Phe="aes-256-cbc",Lhe=16,Dhe=32,cK=ae(),{resolvePath:lK}=Ot();cK.initSync();var oC;dK.exports={validateLicense:uK,generateFingerPrint:vhe,licenseSearch:uC,getLicense:Bhe,checkMemoryLimit:Fhe};function cC(){return aC.join(cK.getHdbBasePath(),$l.LICENSE_KEY_DIR_NAME,$l.LICENSE_FILE_NAME)}o(cC,"getLicenseDirPath");function Mhe(){let e=cC();return lK(aC.join(e,$l.LICENSE_FILE_NAME))}o(Mhe,"getLicenseFilePath");function lC(){let e=cC();return lK(aC.join(e,$l.REG_KEY_FILE_NAME))}o(lC,"getFingerPrintFilePath");async function vhe(){let e=lC();try{return await Zd.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Uhe();throw pn.error(`Error writing fingerprint file to ${e}`),pn.error(t),new Error("There was an error generating the fingerprint")}}o(vhe,"generateFingerPrint");async function Uhe(){let e=Ihe(),t=yT.hash(e,yT.HASH_FUNCTION.MD5),r=lC();try{await Zd.mkdirp(cC()),await Zd.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw pn.error(`Error writing fingerprint file to ${r}`),pn.error(n),new Error("There was an error generating the fingerprint")}return t}o(Uhe,"writeFingerprint");function uK(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:$l.RAM_ALLOCATION_ENUM.DEFAULT,version:$l.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return pn.error("empty license key passed to validate."),r;let n=lC(),s=!1;try{s=Zd.statSync(n)}catch(i){pn.error(i)}if(s){let i;try{i=Zd.readFileSync(n,"utf8")}catch{pn.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(Che),c=a[1];c=Buffer.concat([Buffer.from(c)],Lhe);let l=Buffer.concat([Buffer.from(i)],Dhe),u=aK.createDecipheriv(Phe,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=xhe(a[0],i);if(h)d=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Xd),pn.error(Xd),new Error(Xd)}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(Xd),pn.error(Xd),new Error(Xd)}else r.exp_date=d;r.exp_date<bhe().valueOf()&&(r.valid_date=!1),yT.validate(a[1],`${Ohe}${i}${t}`,yT.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||pn.error("Invalid licence"),r}o(uK,"validateLicense");function xhe(e,t){try{let r=aK.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{pn.warn("Check old license failed")}}o(xhe,"checkOldLicense");function uC(){let e=new whe,t=[];try{t=Zd.readFileSync(Mhe(),"utf-8").split(`\r
19
+ `)}catch(r){r.code==="ENOENT"?pn.debug("no license file found"):pn.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(Nhe.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=uK(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){pn.error("There was an error parsing the license string."),pn.error(s),e.ram_allocation=$l.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return oC=e,e}o(uC,"licenseSearch");async function Bhe(){return oC||await uC(),oC}o(Bhe,"getLicense");function Fhe(){let e=uC().ram_allocation,t=process.constrainedMemory?.()||oK();if(t=Math.round(Math.min(t,oK())/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(Fhe,"checkMemoryLimit")});var mC=M((Dxe,pK)=>{var AT=ef(),fK=require("chalk"),ls=z(),mK=require("prompt"),{promisify:Hhe}=require("util"),dC=(H(),v(Y)),khe=require("fs-extra"),qhe=require("path"),Ghe=ie(),{packageJson:$he}=It(),hK=ae();hK.initSync();var Vhe=require("moment"),Khe=Hhe(mK.get),Yhe=qhe.join(hK.getHdbBasePath(),dC.LICENSE_KEY_DIR_NAME,dC.LICENSE_FILE_NAME,dC.LICENSE_FILE_NAME);pK.exports={getFingerprint:zhe,setLicense:Whe,parseLicense:fC,register:jhe,getRegistrationInfo:Jhe};async function Whe(e){if(e&&e.key&&e.company){try{ls.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await fC(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw ls.error(r),ls.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(Whe,"setLicense");async function zhe(){let e={};try{e=await AT.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw ls.error(r),ls.error(t),new Error(r)}return e}o(zhe,"getFingerprint");async function fC(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");ls.info("Validating license input...");let r=AT.validateLicense(e,t);if(ls.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(ls.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(ls.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{ls.info("writing license to disk"),await khe.writeFile(Yhe,JSON.stringify({license_key:e,company:t}))}catch(n){throw ls.error("Failed to write License"),n}return"Registration successful."}o(fC,"parseLicense");async function jhe(){let e=await Qhe();return fC(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(jhe,"register");async function Qhe(){let e=await AT.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:fK.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:fK.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{mK.start()}catch(n){ls.error(n)}let r;try{r=await Khe(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}o(Qhe,"promptForRegistration");async function Jhe(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await AT.getLicense()}catch(r){throw ls.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Ghe.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=$he.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Vhe.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(Jhe,"getRegistrationInfo")});var _K=M((vxe,EK)=>{"use strict";var Xhe=ht(),hC=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+Xhe.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"}};EK.exports=hC});var TK=M((xxe,SK)=>{"use strict";var gK=ht(),pC=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+gK.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+gK.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"}};SK.exports=pC});var yK=M((Fxe,RK)=>{"use strict";var EC=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};RK.exports=EC});var bK=M((kxe,AK)=>{"use strict";var Zhe=ht(),_C=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Zhe.SERVER_SUFFIX.ADMIN,this.password=r}};AK.exports=_C});var wT=M((Gxe,wK)=>{"use strict";var Vl=require("path"),Kl=require("fs-extra"),epe=_K(),tpe=TK(),rpe=yK(),npe=bK(),gC=rs(),rf=ie(),Bn=Ot(),IT=(H(),v(Y)),dp=ht(),{CONFIG_PARAMS:nr}=IT,nf=z(),fp=ae(),IK=Ki(),SC=Gt(),spe=as(),tf="clustering",ipe=1e4,NK=50;wK.exports={generateNatsConfig:ape,removeNatsConfig:cpe,getHubConfigPath:ope};function ope(){let e=fp.get(nr.ROOTPATH);return Vl.join(e,tf,dp.NATS_CONFIG_FILES.HUB_SERVER)}o(ope,"getHubConfigPath");async function ape(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=fp.get(nr.ROOTPATH);Kl.ensureDirSync(Vl.join(r,"clustering","leaf")),fp.initSync();let n=Bn.getConfigFromFile(nr.CLUSTERING_TLS_CERT_AUTH),s=Bn.getConfigFromFile(nr.CLUSTERING_TLS_PRIVATEKEY),i=Bn.getConfigFromFile(nr.CLUSTERING_TLS_CERTIFICATE);!await Kl.exists(i)&&!await Kl.exists(!n)&&await spe.createNatsCerts();let a=Vl.join(r,tf,dp.PID_FILES.HUB),c=Vl.join(r,tf,dp.PID_FILES.LEAF),l=Bn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Vl.join(r,tf,dp.NATS_CONFIG_FILES.HUB_SERVER),d=Vl.join(r,tf,dp.NATS_CONFIG_FILES.LEAF_SERVER),f=Bn.getConfigFromFile(nr.CLUSTERING_TLS_INSECURE),m=Bn.getConfigFromFile(nr.CLUSTERING_TLS_VERIFY),h=Bn.getConfigFromFile(nr.CLUSTERING_NODENAME),p=Bn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await SC.checkNATSServerInstalled()||NT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let _=await gC.listUsers(),g=Bn.getConfigFromFile(nr.CLUSTERING_USER),y=await gC.getClusterUser();(rf.isEmpty(y)||y.active!==!0)&&NT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await bT(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await bT(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await bT(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),await bT(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],R=[];for(let[J,K]of _.entries())K.role?.role===IT.ROLE_TYPES_ENUM.CLUSTER_USER&&K.active&&(T.push(new npe(K.username,IK.decrypt(K.hash))),R.push(new rpe(K.username,IK.decrypt(K.hash))));let N=[],{hub_routes:C}=Bn.getClusteringRoutes();if(!rf.isEmptyOrZeroLength(C))for(let J of C)N.push(`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@${J.host}:${J.port}`);let q=new epe(Bn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),h,a,i,s,n,f,m,p,Bn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Bn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,T,R);n==null&&(delete q.tls.ca_file,delete q.leafnodes.tls.ca_file),t=rf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===IT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Kl.writeJson(u,q),nf.trace(`Hub server config written to ${u}`));let j=`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@0.0.0.0:${p}`,F=`tls://${y.uri_encoded_name}:${y.uri_encoded_d_hash}@0.0.0.0:${p}`,$=new tpe(Bn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,c,l,[j],[F],T,R,i,s,n,f);n==null&&delete $.tls.ca_file,(t===void 0||t===IT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Kl.writeJson(d,$),nf.trace(`Leaf server config written to ${d}`))}o(ape,"generateNatsConfig");async function bT(e){let t=fp.get(e);return rf.isEmpty(t)&&NT(`port undefined for '${e}'`),await rf.isPortTaken(t)&&NT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(bT,"isPortAvailable");function NT(e){let t=`Error generating clustering config: ${e}`;nf.error(t),console.error(t),process.exit(1)}o(NT,"generateNatsConfigError");async function cpe(e){let{port:t,config_file:r}=SC.getServerConfig(e),{username:n,decrypt_hash:s}=await gC.getClusterUser(),i=0,a=2e3;for(;i<NK;){try{let d=await SC.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){nf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=NK)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&nf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await rf.asyncSetTimeout(u)}let c="0".repeat(ipe),l=Vl.join(fp.get(nr.ROOTPATH),tf,r);await Kl.writeFile(l,c),await Kl.remove(l),nf.notify(e,"started.")}o(cpe,"removeNatsConfig")});var MK=M((Vxe,DK)=>{"use strict";var us=ae(),lpe=ef(),Ke=(H(),v(Y)),mp=ht(),Yo=require("path"),{PACKAGE_ROOT:CT}=It(),OK=ae(),OT=ie(),sf="/dev/null",upe=Yo.join(CT,"launchServiceScripts"),CK=Yo.join(CT,"utility/scripts"),dpe=Yo.join(CK,Ke.HDB_RESTART_SCRIPT),PK=Yo.resolve(CT,"dependencies",`${process.platform}-${process.arch}`,mp.NATS_BINARY_NAME);function LK(){let t=lpe.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 OT.noBootFile()&&(n[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=OT.getEnvCliRootPath()),{name:Ke.PROCESS_DESCRIPTORS.HDB,script:Ke.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:CT}}o(LK,"generateMainServerConfig");var fpe=9930;function mpe(){us.initSync(!0);let e=us.get(Ke.CONFIG_PARAMS.ROOTPATH),t=Yo.join(e,"clustering",mp.NATS_CONFIG_FILES.HUB_SERVER),r=Yo.join(us.get(Ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ke.LOG_NAMES.HDB),n=OK.get(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=mp.LOG_LEVEL_FLAGS[us.get(Ke.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==fpe?"-"+n:""),script:PK,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 us.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=sf,i.error_file=sf),i}o(mpe,"generateNatsHubServerConfig");var hpe=9940;function ppe(){us.initSync(!0);let e=us.get(Ke.CONFIG_PARAMS.ROOTPATH),t=Yo.join(e,"clustering",mp.NATS_CONFIG_FILES.LEAF_SERVER),r=Yo.join(us.get(Ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ke.LOG_NAMES.HDB),n=OK.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=mp.LOG_LEVEL_FLAGS[us.get(Ke.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==hpe?"-"+n:""),script:PK,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 us.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=sf,i.error_file=sf),i}o(ppe,"generateNatsLeafServerConfig");function Epe(){us.initSync();let e=Yo.join(us.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:upe,autorestart:!1};return us.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=sf,t.error_file=sf),t}o(Epe,"generateClusteringUpgradeV4ServiceConfig");function _pe(){let e={[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.RESTART_HDB};return OT.noBootFile()&&(e[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=OT.getEnvCliRootPath()),{...{name:Ke.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:CK},script:dpe}}o(_pe,"generateRestart");function gpe(){return{apps:[LK()]}}o(gpe,"generateAllServiceConfigs");DK.exports={generateAllServiceConfigs:gpe,generateMainServerConfig:LK,generateRestart:_pe,generateNatsHubServerConfig:mpe,generateNatsLeafServerConfig:ppe,generateClusteringUpgradeV4ServiceConfig:Epe}});var pp=M((Wxe,WK)=>{"use strict";var ut=(H(),v(Y)),Spe=ie(),zo=wT(),PT=Gt(),Wo=ht(),lc=MK(),LT=ae(),Yl=z(),Tpe=vs(),{startWorker:vK,onMessageFromWorkers:Rpe}=ze(),ype=Yd(),Yxe=require("util"),Ape=require("child_process"),bpe=require("fs"),{execFile:Ipe}=Ape,Je;WK.exports={enterPM2Mode:Npe,start:uc,stop:TC,reload:xK,restart:BK,list:RC,describe:kK,connect:jo,kill:Lpe,startAllServices:Dpe,startService:yC,getUniqueServicesList:qK,restartAllServices:Mpe,isServiceRegistered:GK,reloadStopStart:$K,restartHdb:HK,deleteProcess:Cpe,startClusteringProcesses:KK,startClusteringThreads:YK,isHdbRestartRunning:Ppe,isClusteringRunning:Upe,stopClustering:vpe,reloadClustering:xpe,expectedRestartOfChildren:FK};var hp=!1;Rpe(e=>{e.type==="restart"&&LT.initSync(!0)});function Npe(){hp=!0}o(Npe,"enterPM2Mode");function jo(){return Je||(Je=require("pm2")),new Promise((e,t)=>{Je.connect((r,n)=>{r&&t(r),e(n)})})}o(jo,"connect");var En,wpe=10,UK;function uc(e,t=!1){if(hp)return Ope(e);let r=Ipe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=En.indexOf(r);a>-1&&En.splice(a,1),!UK&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<wpe&&(bpe.existsSync(zo.getHubConfigPath())?uc(e):(await zo.generateNatsConfig(!0),uc(e),await new Promise(c=>setTimeout(c,3e3)),await zo.removeNatsConfig(ut.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await zo.removeNatsConfig(ut.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=LT.get(ut.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&Wo.LOG_LEVEL_HIERARCHY[a]>=Wo.LOG_LEVEL_HIERARCHY[d||"info"]){let h=d===Wo.LOG_LEVELS.ERR||d===Wo.LOG_LEVELS.WRN?Yl.OUTPUTS.STDERR:Yl.OUTPUTS.STDOUT;Yl.logCustomLevel(d||"info",h,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=Wo.LOG_LEVELS[m]}if(Wo.LOG_LEVEL_HIERARCHY[a]>=Wo.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===Wo.LOG_LEVELS.ERR||d===Wo.LOG_LEVELS.WRN?Yl.OUTPUTS.STDERR:Yl.OUTPUTS.STDOUT;Yl.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(),!En&&(En=[],!t)){let i=o(()=>{UK=!0,En&&(En.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}En.push(r)}o(uc,"start");function Ope(e){return new Promise(async(t,r)=>{try{await jo()}catch(n){r(n)}Je.start(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Ope,"startWithPM2");function TC(e){if(!hp){for(let t of En||[])t.name===e&&(En.splice(En.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await jo()}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(TC,"stop");function xK(e){return new Promise(async(t,r)=>{try{await jo()}catch(n){r(n)}Je.reload(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(xK,"reload");function BK(e){if(!hp){FK();for(let t of En||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await jo()}catch(n){r(n)}Je.restart(e,(n,s)=>{Je.disconnect(),t(s)})})}o(BK,"restart");function FK(){for(let e of En||[])e.config&&(e.config.restarts=0)}o(FK,"expectedRestartOfChildren");function Cpe(e){return new Promise(async(t,r)=>{try{await jo()}catch(n){r(n)}Je.delete(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Cpe,"deleteProcess");async function HK(){await uc(lc.generateRestart())}o(HK,"restartHdb");async function Ppe(){let e=await RC();for(let t in e)if(e[t].name===ut.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Ppe,"isHdbRestartRunning");function RC(){return new Promise(async(e,t)=>{try{await jo()}catch(r){t(r)}Je.list((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(RC,"list");function kK(e){return new Promise(async(t,r)=>{try{await jo()}catch(n){r(n)}Je.describe(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(kK,"describe");function Lpe(){if(!hp){for(let e of En||[])e.kill();En=[];return}return new Promise(async(e,t)=>{try{await jo()}catch(r){t(r)}Je.killDaemon((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(Lpe,"kill");async function Dpe(){try{await KK(),await YK(),await uc(lc.generateAllServiceConfigs())}catch(e){throw Je?.disconnect(),e}}o(Dpe,"startAllServices");async function yC(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ut.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=lc.generateMainServerConfig();break;case ut.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=lc.generateNatsIngestServiceConfig();break;case ut.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=lc.generateNatsReplyServiceConfig();break;case ut.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=lc.generateNatsHubServerConfig(),await uc(r,t),await zo.removeNatsConfig(e);return;case ut.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=lc.generateNatsLeafServerConfig(),await uc(r,t),await zo.removeNatsConfig(e);return;case ut.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=lc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await uc(r)}catch(r){throw Je?.disconnect(),r}}o(yC,"startService");async function qK(){try{let e=await RC(),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(qK,"getUniqueServicesList");async function Mpe(e=[]){try{let t=!1,r=await qK();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===ut.PROCESS_DESCRIPTORS.HDB?t=!0:await BK(a))}t&&await $K(ut.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Je?.disconnect(),t}}o(Mpe,"restartAllServices");async function GK(e){if(En?.find(r=>r.name===e))return!0;let t=await ype.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(GK,"isServiceRegistered");async function $K(e){let t=LT.get(ut.CONFIG_PARAMS.THREADS_COUNT)??LT.get(ut.CONFIG_PARAMS.THREADS),r=await kK(e),n=Spe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await TC(e),await yC(e)):e===ut.PROCESS_DESCRIPTORS.HDB?await HK():await xK(e)}o($K,"reloadStopStart");var VK;async function KK(e=!1){for(let t in ut.CLUSTERING_PROCESSES){let r=ut.CLUSTERING_PROCESSES[t];await yC(r,e)}}o(KK,"startClusteringProcesses");async function YK(){VK=vK(ut.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ut.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await PT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await PT.updateLocalStreams();let e=await Tpe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ut.PRE_4_0_0_VERSION){Yl.info("Starting clustering upgrade 4.0.0 process"),vK(ut.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(YK,"startClusteringThreads");async function vpe(){for(let e in ut.CLUSTERING_PROCESSES)if(e!==ut.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ut.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await VK.terminate();else{let t=ut.CLUSTERING_PROCESSES[e];await TC(t)}}o(vpe,"stopClustering");async function Upe(){for(let e in ut.CLUSTERING_PROCESSES){let t=ut.CLUSTERING_PROCESSES[e];if(await GK(t)===!1)return!1}return!0}o(Upe,"isClusteringRunning");async function xpe(){await zo.generateNatsConfig(!0),await PT.reloadNATSHub(),await PT.reloadNATSLeaf(),await zo.removeNatsConfig(ut.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await zo.removeNatsConfig(ut.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(xpe,"reloadClustering")});var IC={};Oe(IC,{compactOnStart:()=>Bpe,copyDb:()=>ZK});async function Bpe(){dc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,AC.get)(U.ROOTPATH),t=new Map,r=ot();(0,bC.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,DT.join)(e,"backup",n+".mdb"),a=(0,DT.join)(e,Fc,n+"-copy.mdb"),c=0;try{c=await zK(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){dc.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 ZK(n,a),console.log("Backing up",n,"to",i);try{await(0,Wl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}console.log("Moving copy compacted",n,"to",s),await(0,Wl.move)(a,s,{overwrite:!0}),await(0,Wl.remove)((0,DT.join)(e,Fc,`${n}-copy.mdb-lock`))}try{hd()}catch(n){dc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}try{hd()}catch(n){dc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){dc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,bC.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,Wl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw hd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=await zK(n);if(console.log("Database",n,"after compact has a total record count of",a),i!==a){let c=`There is a discrepancy between pre and post compact record count for database ${n}.
20
20
  Total record count before compaction: ${i}, total after: ${a}.
21
- Database backup has not been removed and can be found here: ${s}`;dc.error(c),console.error(c)}(0,SC.get)(U.STORAGE_COMPACTONSTARTKEEPBACKUP)!==!0&&(console.log("Removing backup",s),await(0,Wl.remove)(s))}}async function KK(e){let t=await(0,jK.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function of(){}async function QK(e,t){console.log(`Copying database ${e} to ${t}`);let r=it()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=of,m.primaryStore.remove=of;for(let h in m.indices){let p=m.indices[h];p.put=of,p.remove=of}m.auditStore&&(m.auditStore.put=of,m.auditStore.remove=of),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,a=(0,YK.open)(new WK.default(t)),c=a.openDB(PT.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=Jg(),g?h.compression=g:delete h.compression,_?.dictionary?.toString()===g?.dictionary?.toString()&&(_=null,g=null)),c.put(m,h),!(p||h.indexed))continue;let R=new zK.default(!p,p);R.encoding="binary",R.compression=_;let T=n.openDB(m,R);T.decoder=null,T.decoderCopies=!1,T.encoding="binary",R.compression=g;let y=a.openDB(m,R);y.encoder=null,console.log("copying",m,"from",e,"to",t),await f(T,y,p,d)}if(i){let m=n.openDB(PT.AUDIT_STORE_NAME,ym);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,h,p,_){let g=0,R=0,T=0,y=1e7,N=null;for(;y-- >0;)try{for(let O of m.getKeys({start:N,transaction:_}))try{N=O;let{value:F,version:Z}=m.getEntry(O,{transaction:_});if(F?.length<14&&p){T++;continue}l=h.put(O,F,p?Z:void 0),g++,_.openTimer&&(_.openTimer=0),R+=(O?.length||10)+F.length,u++>5e3&&(await l,console.log("copied",g,"entries",T,"delete records,",R,"bytes"),u=0)}catch(F){console.error("Error copying record",typeof O=="symbol"?"symbol":O,"from",e,"to",t,F)}console.log("finish copying, copied",g,"entries",T,"delete records,",R,"bytes");return}catch{if(typeof N=="string"){if(N==="z")return console.error("Reached end of dbi",N,"for",e,"to",t);N=N.slice(0,-2)+"z"}else if(typeof N=="number")N++;else return console.error("Unknown key type",N,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var YK,CT,Wl,SC,WK,zK,PT,jK,TC,dc,yC=ce(()=>{Me();YK=require("lmdb"),CT=require("path"),Wl=require("fs-extra"),SC=w(oe()),WK=w(Dm()),zK=w(Lm()),PT=w(Kt());H();Mi();jK=w(vo()),TC=w(Ot()),dc=w(j());o(vpe,"compactOnStart");o(KK,"getTotalDBRecordCount");o(of,"noop");o(QK,"copyDb")});var cf=M((Zxe,nY)=>{"use strict";var Upe=require("minimist"),{isMainThread:bC,parentPort:_p,threadId:Qxe}=require("worker_threads"),ht=(H(),v(Y)),no=j(),IC=se(),DT=bT(),LT=Gt(),Jxe=mt(),eY=Ot(),Ti=pp(),JK=Yd(),{compactOnStart:xpe}=(yC(),v(RC)),Bpe=Hc(),{restartWorkers:MT,onMessageByType:Fpe}=ze(),{handleHDBError:Hpe,hdbErrors:kpe}=ge(),{HTTP_STATUS_CODES:qpe}=kpe,gp=oe(),{sendOperationToNode:XK,getThisNodeName:Gpe,monitorNodeCAs:$pe}=(is(),v(ko)),{getHDBNodeTable:Xxe}=(Ml(),v(Bw));gp.initSync();var Ep=`Restarting HarperDB. This may take up to ${ht.RESTART_TIMEOUT_MS/1e3} seconds.`,Vpe="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",ZK="Clustering is not enabled so cannot be restarted",Kpe="Invalid service",af,Bs;nY.exports={restart:tY,restartService:NC};bC&&Fpe(ht.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await NC({service:e.workerType}):tY({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function tY(e){Bs=Object.keys(e).length===0,af=await Ti.isServiceRegistered(ht.PROCESS_DESCRIPTORS.HDB);let t=Upe(process.argv);if(t.service){await NC(t);return}if(Bs&&!af){console.error(Vpe);return}if(Bs&&console.log(Ep),af){Ti.enterPM2Mode(),no.notify(Ep);let r=Bpe(Object.keys(ht.CONFIG_PARAM_MAP),!0);return IC.isEmptyOrZeroLength(Object.keys(r))||eY.updateConfigValue(void 0,void 0,r,!0,!0),Ype(),Ep}return bC?(no.notify(Ep),gp.get(ht.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await xpe(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{MT()},50)):_p.postMessage({type:ht.ITC_EVENT_TYPES.RESTART}),Ep}o(tY,"restart");async function NC(e){let{service:t}=e;if(ht.HDB_PROCESS_SERVICES[t]===void 0)throw Hpe(new Error,Kpe,qpe.BAD_REQUEST,void 0,void 0,!0);if(Ti.expectedRestartOfChildren(),af=await Ti.isServiceRegistered(ht.PROCESS_DESCRIPTORS.HDB),!bC){e.replicated&&$pe(),_p.postMessage({type:ht.ITC_EVENT_TYPES.RESTART,workerType:t}),_p.ref(),await new Promise(s=>{_p.on("message",i=>{i.type==="restart-complete"&&(s(),_p.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Gpe())continue;let i;try{({job_id:i}=await XK(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 XK(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 ht.HDB_PROCESS_SERVICES.clustering:if(!gp.get(ht.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=ZK;break}Bs&&console.log("Restarting clustering"),no.notify("Restarting clustering"),await rY();break;case ht.HDB_PROCESS_SERVICES.clustering_config:case ht.HDB_PROCESS_SERVICES["clustering config"]:if(!gp.get(ht.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=ZK;break}Bs&&console.log("Restarting clusteringConfig"),no.notify("Restarting clustering_config"),await Ti.reloadClustering();break;case"custom_functions":case"custom functions":case ht.HDB_PROCESS_SERVICES.harperdb:case ht.HDB_PROCESS_SERVICES.http_workers:case ht.HDB_PROCESS_SERVICES.http:if(Bs&&!af){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}Bs&&console.log("Restarting httpWorkers"),no.notify("Restarting http_workers"),Bs?await Ti.restart(ht.PROCESS_DESCRIPTORS.HDB):await MT("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(no.error(r),Bs&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(NC,"restartService");async function Ype(){await rY(),await Ti.restart(ht.PROCESS_DESCRIPTORS.HDB),await IC.asyncSetTimeout(2e3),gp.get(ht.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await AC(),Bs&&(await LT.closeConnection(),process.exit(0))}o(Ype,"restartPM2Mode");async function rY(){if(!eY.getConfigFromFile(ht.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await JK.getHDBProcessInfo()).clustering.length===0)no.trace("Clustering not running, restart will start clustering services"),await DT.generateNatsConfig(!0),await Ti.startClusteringProcesses(),await Ti.startClusteringThreads(),await AC(),Bs&&await LT.closeConnection();else{await DT.generateNatsConfig(!0),af?(no.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ti.restart(ht.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ti.restart(ht.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await JK.getHDBProcessInfo()).clustering.forEach(s=>{no.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await IC.asyncSetTimeout(3e3),await AC(),await LT.updateLocalStreams(),Bs&&await LT.closeConnection(),no.trace("Restart clustering restarting ingest and reply service threads");let t=MT(ht.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=MT(ht.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(rY,"restartClustering");async function AC(){await DT.removeNatsConfig(ht.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await DT.removeNatsConfig(ht.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(AC,"removeNatsConfig")});var hY=M((rBe,mY)=>{"use strict";var tBe=require("lodash"),Bn=(H(),v(Y)),{handleHDBError:sY,hdbErrors:Wpe}=ge(),{HDB_ERROR_MSGS:zpe,HTTP_STATUS_CODES:jpe}=Wpe,wC=j();mY.exports={getRolePermissions:Jpe};var zl=Object.create(null),Qpe=o(e=>({key:e,perms:{}}),"permsTemplateObj"),cY=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),lY=o((e=!1,t=!1,r=!1,n=!1)=>({[Bn.PERMS_CRUD_ENUM.READ]:e,[Bn.PERMS_CRUD_ENUM.INSERT]:t,[Bn.PERMS_CRUD_ENUM.UPDATE]:r,[Bn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),OC=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...lY(t,r,n,s)}),"tablePermsTemplate"),iY=o((e,t=lY())=>({attribute_name:e,describe:fY(t),[Sp]:t[Sp],[CC]:t[CC],[PC]:t[PC]}),"attrPermsTemplate"),oY=o((e,t=!1)=>({attribute_name:e,describe:t,[Sp]:t}),"timestampAttrPermsTemplate"),{READ:Sp,INSERT:CC,UPDATE:PC}=Bn.PERMS_CRUD_ENUM,uY=Object.values(Bn.PERMS_CRUD_ENUM),dY=[Sp,CC,PC];function Jpe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[Bn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(zl[t]&&zl[t].key===n)return zl[t].perms;let s=Xpe(e,r);return zl[t]?zl[t].key=n:zl[t]=Qpe(n),zl[t].perms=s,s}catch(r){if(!e[Bn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Bn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Bn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw wC.error(n),wC.debug(r),sY(new Error,zpe.OUTDATED_PERMS_TRANSLATION_ERROR,jpe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
22
- ${r.stack}`;throw wC.error(n),sY(new Error)}}}o(Jpe,"getRolePermissions");function Xpe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Bn.SYSTEM_SCHEMA_NAME]=n[Bn.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]=Zpe(t[i]);return}r[i]=cY(),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=eEe(c,l);r[i].describe||uY.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=OC()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=OC()})}),r}o(Xpe,"translateRolePermissions");function Zpe(e){let t=cY(!0);return Object.keys(e).forEach(r=>{t.tables[r]=OC(!0,!0,!0,!0,!0)}),t}o(Zpe,"createStructureUserPermissions");function eEe(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 Bn.TIME_STAMP_NAMES.includes(f)&&(m=oY(f,d[Sp])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=iY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=fY(d),s.attribute_permissions.push(d),c||tEe(d,l)}else if(u!==a){let d;Bn.TIME_STAMP_NAMES.includes(u)?d=oY(u):d=iY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=aY(s),s}else return e.describe=aY(e),e}o(eEe,"getTableAttrPerms");function aY(e){return uY.filter(t=>e[t]).length>0}o(aY,"getSchemaTableDescribePerm");function fY(e){return dY.filter(t=>e[t]).length>0}o(fY,"getAttributeDescribePerm");function tEe(e,t){dY.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(tEe,"checkForHashPerms")});var Tp={};we(Tp,{authentication:()=>yY,bypassAuth:()=>uEe,login:()=>MC,logout:()=>vC,start:()=>dEe});function uEe(){RY=!0}async function yY(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let h=e.isOperationsServer?oEe?iEe:[]:sEe?nEe:[];if(h.includes(i)||h.includes("*")){if(e.method==="OPTIONS"){let p=En.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",_=new Cs([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return vT&&_.set("Access-Control-Allow-Credentials","true"),{status:200,headers:_}}a.push("Access-Control-Allow-Origin",i),vT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(vT){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 pY.get(l);break}e.session=u||(u={})}let d=o((h,p,_)=>{let g=new UT.AuthAuditLog(h,p,ba.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===ei.SUCCESS?LC.notify(g):LC.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&LC.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 Le.getUser(h,null,e),d(h,ei.SUCCESS,"mTLS")):rEe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=jl.get(n),!f){let h=n.indexOf(" "),p=n.slice(0,h),_=n.slice(h+1),g,R;try{switch(p){case"Basic":let T=atob(_),y=T.indexOf(":");g=T.slice(0,y),R=T.slice(y+1),f=g||R?await Le.getUser(g,R,e):null;break;case"Bearer":try{f=await hw(_)}catch(N){if(N.message==="invalid token")try{return await dS(_),c({status:-1})}catch{throw N}}break}}catch(T){return cEe&&(jl.get(_)||(jl.set(_,_),d(g,ei.FAILURE,p))),c({status:401,body:wa({error:T.message},e)})}jl.set(n,f),aEe&&d(f.username,ei.SUCCESS,p)}e.user=f}else u?.user?e.user=await Le.getUser(u.user,null,e):(RY&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,_Y.getSuperUser)());vT&&(e.session.update=function(h){let p=En.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,gY.v4)();let g=En.get(U.AUTHENTICATION_COOKIE_DOMAINS),R=p?new Date(Date.now()+(0,DC.convertToMS)(p)).toUTCString():lEe,T=g?.find(O=>r.host?.endsWith(O)),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;T&&(N+=`; Domain=${T}`),_&&(N+="; SameSite=None; Secure"),a?a.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}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,pY.put(h,{expiresAt:p?Date.now()+(0,DC.convertToMS)(p):void 0})},e.login=async function(h,p){let _=e.user=await Le.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")&&bs.loginPath?(m.status=302,m.headers.set("Location",bs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Cs);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function dEe({server:e,port:t,securePort:r}){e.http(yY,t||r?{port:t,securePort:r}:{port:"all"}),EY||(EY=!0,setInterval(()=>{jl=new Map},En.get(U.AUTHENTICATION_CACHETTL)).unref(),SY.user.addListener(()=>{jl=new Map}))}async function MC(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 vC(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var _Y,gY,En,UT,SY,DC,TY,rEe,LC,nEe,sEe,iEe,oEe,pY,vT,RY,aEe,cEe,lEe,jl,EY,xT=ce(()=>{_Y=w(rs());Dr();qu();Ad();Me();gY=require("uuid"),En=w(oe());H();UT=w(j()),SY=w(ch());hh();DC=w(se());yo();TY=(0,UT.forComponent)("authentication"),{debug:rEe}=TY,LC=TY.withTag("auth-event");En.initSync();nEe=En.get(U.HTTP_CORSACCESSLIST),sEe=En.get(U.HTTP_CORS),iEe=En.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),oEe=En.get(U.OPERATIONSAPI_NETWORK_CORS),pY=je({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),vT=En.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,RY=process.env.AUTHENTICATION_AUTHORIZELOCAL??En.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,aEe=En.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,cEe=En.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,lEe="Tue, 01 Oct 8307 19:33:20 GMT",jl=new Map;Le.onInvalidatedUser(()=>{jl=new Map});o(uEe,"bypassAuth");o(yY,"authentication");o(dEe,"start");o(MC,"login");o(vC,"logout")});var CY=M((fBe,OY)=>{"use strict";var Ne=require("joi"),AY=require("fs-extra"),bY=require("path"),ds=nt(),IY=oe(),NY=(H(),v(Y)),wY=j(),{hdbErrors:fEe}=ge(),{HDB_ERROR_MSGS:_n}=fEe,Qo=/^[a-zA-Z0-9-_]+$/,mEe=/^[a-zA-Z0-9-_]+$/;OY.exports={getDropCustomFunctionValidator:pEe,setCustomFunctionValidator:EEe,addComponentValidator:TEe,dropCustomFunctionProjectValidator:REe,packageComponentValidator:yEe,deployComponentValidator:AEe,setComponentFileValidator:_Ee,getComponentFileValidator:SEe,dropComponentFileValidator:gEe,addSSHKeyValidator:bEe,updateSSHKeyValidator:IEe,deleteSSHKeyValidator:NEe,setSSHKnownHostsValidator:wEe};function BT(e,t,r){try{let n=IY.get(NY.CONFIG_PARAMS.COMPONENTSROOT),s=bY.join(n,t);return AY.existsSync(s)?e?t:r.message(_n.PROJECT_EXISTS):e?r.message(_n.NO_PROJECT):t}catch(n){return wY.error(n),r.message(_n.VALIDATION_ERR)}}o(BT,"checkProjectExists");function Rp(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(Rp,"checkFilePath");function hEe(e,t,r,n){try{let s=IY.get(NY.CONFIG_PARAMS.COMPONENTSROOT),i=bY.join(s,e,t,r+".js");return AY.existsSync(i)?r:n.message(_n.NO_FILE)}catch(s){return wY.error(s),n.message(_n.VALIDATION_ERR)}}o(hEe,"checkFileExists");function pEe(e){let t=Ne.object({project:Ne.string().pattern(Qo).custom(BT.bind(null,!0)).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(Qo).custom(hEe.bind(null,e.project,e.type)).custom(Rp).required().messages({"string.pattern.base":_n.BAD_FILE_NAME})});return ds.validateBySchema(e,t)}o(pEe,"getDropCustomFunctionValidator");function EEe(e){let t=Ne.object({project:Ne.string().pattern(Qo).custom(BT.bind(null,!0)).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(Rp).required(),function_content:Ne.string().required()});return ds.validateBySchema(e,t)}o(EEe,"setCustomFunctionValidator");function _Ee(e){let t=Ne.object({project:Ne.string().pattern(Qo).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),file:Ne.string().custom(Rp).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ds.validateBySchema(e,t)}o(_Ee,"setComponentFileValidator");function gEe(e){let t=Ne.object({project:Ne.string().pattern(Qo).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),file:Ne.string().custom(Rp).optional()});return ds.validateBySchema(e,t)}o(gEe,"dropComponentFileValidator");function SEe(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(Rp).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ds.validateBySchema(e,t)}o(SEe,"getComponentFileValidator");function TEe(e){let t=Ne.object({project:Ne.string().pattern(Qo).custom(BT.bind(null,!1)).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME})});return ds.validateBySchema(e,t)}o(TEe,"addComponentValidator");function REe(e){let t=Ne.object({project:Ne.string().pattern(Qo).custom(BT.bind(null,!0)).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME})});return ds.validateBySchema(e,t)}o(REe,"dropCustomFunctionProjectValidator");function yEe(e){let t=Ne.object({project:Ne.string().pattern(Qo).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean(),skip_symlinks:Ne.boolean()});return ds.validateBySchema(e,t)}o(yEe,"packageComponentValidator");function AEe(e){let t=Ne.object({project:Ne.string().pattern(Qo).required().messages({"string.pattern.base":_n.BAD_PROJECT_NAME}),package:Ne.string().optional(),restart:Ne.alternatives().try(Ne.boolean(),Ne.string().valid("rolling")).optional()});return ds.validateBySchema(e,t)}o(AEe,"deployComponentValidator");function bEe(e){let t=Ne.object({name:Ne.string().pattern(mEe).required().messages({"string.pattern.base":_n.BAD_SSH_KEY_NAME}),key:Ne.string().required(),host:Ne.string().required(),hostname:Ne.string().required(),known_hosts:Ne.string().optional()});return ds.validateBySchema(e,t)}o(bEe,"addSSHKeyValidator");function IEe(e){let t=Ne.object({name:Ne.string().required(),key:Ne.string().required()});return ds.validateBySchema(e,t)}o(IEe,"updateSSHKeyValidator");function NEe(e){let t=Ne.object({name:Ne.string().required()});return ds.validateBySchema(e,t)}o(NEe,"deleteSSHKeyValidator");function wEe(e){let t=Ne.object({known_hosts:Ne.string().required()});return ds.validateBySchema(e,t)}o(wEe,"setSSHKnownHostsValidator")});var bp=M((hBe,vY)=>{"use strict";var FT=require("joi"),fc=require("path"),lf=require("fs-extra"),{exec:OEe,spawn:CEe}=require("child_process"),PEe=require("util"),LEe=PEe.promisify(OEe),uf=(H(),v(Y)),{PACKAGE_ROOT:DEe}=It(),{handleHDBError:yp,hdbErrors:MEe}=ge(),{HTTP_STATUS_CODES:Ap}=MEe,Ql=oe(),vEe=nt(),mc=j(),{once:UEe}=require("events");Ql.initSync();var UC=Ql.get(uf.CONFIG_PARAMS.COMPONENTSROOT),PY="npm install --force --omit=dev --json",xEe=`${PY} --dry-run`,BEe=Ql.get(uf.CONFIG_PARAMS.ROOTPATH),HT=fc.join(BEe,"ssh");vY.exports={installModules:qEe,auditModules:GEe,installAllRootModules:FEe,uninstallRootModule:HEe,linkHarperdb:kEe,runCommand:df};async function FEe(e=!1,t=Ql.get(uf.CONFIG_PARAMS.ROOTPATH)){await kT();let r=!1,n=process.env;lf.pathExistsSync(HT)&&lf.readdirSync(HT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+fc.join(HT,"config")+" -o UserKnownHostsFile="+fc.join(HT,"known_hosts"),...process.env},r=!0)});try{let s=Ql.get(uf.CONFIG_PARAMS.ROOTPATH),i=fc.join(s,"node_modules","harperdb");lf.lstatSync(i).isSymbolicLink()&&lf.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&mc.error("Error removing symlink:",s)}await df(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(FEe,"installAllRootModules");async function HEe(e){await df(`npm uninstall ${e}`,Ql.get(uf.CONFIG_PARAMS.ROOTPATH))}o(HEe,"uninstallRootModule");async function kEe(){await kT(),await df(`npm link ${DEe}`,Ql.get(uf.CONFIG_PARAMS.ROOTPATH))}o(kEe,"linkHarperdb");async function df(e,t=void 0,r=process.env){mc.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=CEe(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();mc.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();mc.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await UEe(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(df,"runCommand");async function qEe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";mc.warn(t,e.projects);let r=MY(e);if(r)throw yp(r,r.message,Ap.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?xEe:PY;await kT(),await DY(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=fc.join(UC,u),f,m=null;try{let{stdout:h,stderr:p}=await LEe(i,{cwd:d});f=h?h.replace(`
21
+ Database backup has not been removed and can be found here: ${s}`;dc.error(c),console.error(c)}(0,AC.get)(U.STORAGE_COMPACTONSTARTKEEPBACKUP)!==!0&&(console.log("Removing backup",s),await(0,Wl.remove)(s))}}async function zK(e){let t=await(0,XK.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function of(){}async function ZK(e,t){console.log(`Copying database ${e} to ${t}`);let r=ot()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=of,m.primaryStore.remove=of;for(let h in m.indices){let p=m.indices[h];p.put=of,p.remove=of}m.auditStore&&(m.auditStore.put=of,m.auditStore.remove=of),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,a=(0,jK.open)(new QK.default(t)),c=a.openDB(MT.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=Jg(),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 JK.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(MT.AUDIT_STORE_NAME,ym);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=0,R=1e7,N=null;for(;R-- >0;)try{for(let C of m.getKeys({start:N,transaction:_}))try{N=C;let{value:q,version:j}=m.getEntry(C,{transaction:_});if(q?.length<14&&p){T++;continue}l=h.put(C,q,p?j:void 0),g++,_.openTimer&&(_.openTimer=0),y+=(C?.length||10)+q.length,u++>5e3&&(await l,console.log("copied",g,"entries",T,"delete records,",y,"bytes"),u=0)}catch(q){console.error("Error copying record",typeof C=="symbol"?"symbol":C,"from",e,"to",t,q)}console.log("finish copying, copied",g,"entries",T,"delete records,",y,"bytes");return}catch{if(typeof N=="string"){if(N==="z")return console.error("Reached end of dbi",N,"for",e,"to",t);N=N.slice(0,-2)+"z"}else if(typeof N=="number")N++;else return console.error("Unknown key type",N,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var jK,DT,Wl,AC,QK,JK,MT,XK,bC,dc,NC=le(()=>{Me();jK=require("lmdb"),DT=require("path"),Wl=require("fs-extra"),AC=w(ae()),QK=w(Dm()),JK=w(Lm()),MT=w(Kt());H();Mi();XK=w(vo()),bC=w(Ot()),dc=w(z());o(Bpe,"compactOnStart");o(zK,"getTotalDBRecordCount");o(of,"noop");o(ZK,"copyDb")});var cf=M((rBe,oY)=>{"use strict";var Fpe=require("minimist"),{isMainThread:OC,parentPort:_p,threadId:Zxe}=require("worker_threads"),pt=(H(),v(Y)),no=z(),CC=ie(),UT=wT(),vT=Gt(),eBe=ht(),nY=Ot(),Ti=pp(),eY=Yd(),{compactOnStart:Hpe}=(NC(),v(IC)),kpe=Hc(),{restartWorkers:xT,onMessageByType:qpe}=ze(),{handleHDBError:Gpe,hdbErrors:$pe}=_e(),{HTTP_STATUS_CODES:Vpe}=$pe,gp=ae(),{sendOperationToNode:tY,getThisNodeName:Kpe,monitorNodeCAs:Ype}=(is(),v(ko)),{getHDBNodeTable:tBe}=(Ml(),v(kw));gp.initSync();var Ep=`Restarting HarperDB. This may take up to ${pt.RESTART_TIMEOUT_MS/1e3} seconds.`,Wpe="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",rY="Clustering is not enabled so cannot be restarted",zpe="Invalid service",af,Bs;oY.exports={restart:sY,restartService:PC};OC&&qpe(pt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await PC({service:e.workerType}):sY({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function sY(e){Bs=Object.keys(e).length===0,af=await Ti.isServiceRegistered(pt.PROCESS_DESCRIPTORS.HDB);let t=Fpe(process.argv);if(t.service){await PC(t);return}if(Bs&&!af){console.error(Wpe);return}if(Bs&&console.log(Ep),af){Ti.enterPM2Mode(),no.notify(Ep);let r=kpe(Object.keys(pt.CONFIG_PARAM_MAP),!0);return CC.isEmptyOrZeroLength(Object.keys(r))||nY.updateConfigValue(void 0,void 0,r,!0,!0),jpe(),Ep}return OC?(no.notify(Ep),gp.get(pt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Hpe(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{xT()},50)):_p.postMessage({type:pt.ITC_EVENT_TYPES.RESTART}),Ep}o(sY,"restart");async function PC(e){let{service:t}=e;if(pt.HDB_PROCESS_SERVICES[t]===void 0)throw Gpe(new Error,zpe,Vpe.BAD_REQUEST,void 0,void 0,!0);if(Ti.expectedRestartOfChildren(),af=await Ti.isServiceRegistered(pt.PROCESS_DESCRIPTORS.HDB),!OC){e.replicated&&Ype(),_p.postMessage({type:pt.ITC_EVENT_TYPES.RESTART,workerType:t}),_p.ref(),await new Promise(s=>{_p.on("message",i=>{i.type==="restart-complete"&&(s(),_p.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Kpe())continue;let i;try{({job_id:i}=await tY(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 tY(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 pt.HDB_PROCESS_SERVICES.clustering:if(!gp.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=rY;break}Bs&&console.log("Restarting clustering"),no.notify("Restarting clustering"),await iY();break;case pt.HDB_PROCESS_SERVICES.clustering_config:case pt.HDB_PROCESS_SERVICES["clustering config"]:if(!gp.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=rY;break}Bs&&console.log("Restarting clusteringConfig"),no.notify("Restarting clustering_config"),await Ti.reloadClustering();break;case"custom_functions":case"custom functions":case pt.HDB_PROCESS_SERVICES.harperdb:case pt.HDB_PROCESS_SERVICES.http_workers:case pt.HDB_PROCESS_SERVICES.http:if(Bs&&!af){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}Bs&&console.log("Restarting httpWorkers"),no.notify("Restarting http_workers"),Bs?await Ti.restart(pt.PROCESS_DESCRIPTORS.HDB):await xT("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(no.error(r),Bs&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(PC,"restartService");async function jpe(){await iY(),await Ti.restart(pt.PROCESS_DESCRIPTORS.HDB),await CC.asyncSetTimeout(2e3),gp.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await wC(),Bs&&(await vT.closeConnection(),process.exit(0))}o(jpe,"restartPM2Mode");async function iY(){if(!nY.getConfigFromFile(pt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await eY.getHDBProcessInfo()).clustering.length===0)no.trace("Clustering not running, restart will start clustering services"),await UT.generateNatsConfig(!0),await Ti.startClusteringProcesses(),await Ti.startClusteringThreads(),await wC(),Bs&&await vT.closeConnection();else{await UT.generateNatsConfig(!0),af?(no.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ti.restart(pt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ti.restart(pt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await eY.getHDBProcessInfo()).clustering.forEach(s=>{no.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await CC.asyncSetTimeout(3e3),await wC(),await vT.updateLocalStreams(),Bs&&await vT.closeConnection(),no.trace("Restart clustering restarting ingest and reply service threads");let t=xT(pt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=xT(pt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(iY,"restartClustering");async function wC(){await UT.removeNatsConfig(pt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await UT.removeNatsConfig(pt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(wC,"removeNatsConfig")});var _Y=M((iBe,EY)=>{"use strict";var sBe=require("lodash"),Fn=(H(),v(Y)),{handleHDBError:aY,hdbErrors:Qpe}=_e(),{HDB_ERROR_MSGS:Jpe,HTTP_STATUS_CODES:Xpe}=Qpe,LC=z();EY.exports={getRolePermissions:eEe};var zl=Object.create(null),Zpe=o(e=>({key:e,perms:{}}),"permsTemplateObj"),dY=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),fY=o((e=!1,t=!1,r=!1,n=!1)=>({[Fn.PERMS_CRUD_ENUM.READ]:e,[Fn.PERMS_CRUD_ENUM.INSERT]:t,[Fn.PERMS_CRUD_ENUM.UPDATE]:r,[Fn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),DC=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...fY(t,r,n,s)}),"tablePermsTemplate"),cY=o((e,t=fY())=>({attribute_name:e,describe:pY(t),[Sp]:t[Sp],[MC]:t[MC],[vC]:t[vC]}),"attrPermsTemplate"),lY=o((e,t=!1)=>({attribute_name:e,describe:t,[Sp]:t}),"timestampAttrPermsTemplate"),{READ:Sp,INSERT:MC,UPDATE:vC}=Fn.PERMS_CRUD_ENUM,mY=Object.values(Fn.PERMS_CRUD_ENUM),hY=[Sp,MC,vC];function eEe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[Fn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(zl[t]&&zl[t].key===n)return zl[t].perms;let s=tEe(e,r);return zl[t]?zl[t].key=n:zl[t]=Zpe(n),zl[t].perms=s,s}catch(r){if(!e[Fn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Fn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Fn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw LC.error(n),LC.debug(r),aY(new Error,Jpe.OUTDATED_PERMS_TRANSLATION_ERROR,Xpe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
22
+ ${r.stack}`;throw LC.error(n),aY(new Error)}}}o(eEe,"getRolePermissions");function tEe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Fn.SYSTEM_SCHEMA_NAME]=n[Fn.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]=rEe(t[i]);return}r[i]=dY(),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=nEe(c,l);r[i].describe||mY.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=DC()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=DC()})}),r}o(tEe,"translateRolePermissions");function rEe(e){let t=dY(!0);return Object.keys(e).forEach(r=>{t.tables[r]=DC(!0,!0,!0,!0,!0)}),t}o(rEe,"createStructureUserPermissions");function nEe(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 Fn.TIME_STAMP_NAMES.includes(f)&&(m=lY(f,d[Sp])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=cY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=pY(d),s.attribute_permissions.push(d),c||sEe(d,l)}else if(u!==a){let d;Fn.TIME_STAMP_NAMES.includes(u)?d=lY(u):d=cY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=uY(s),s}else return e.describe=uY(e),e}o(nEe,"getTableAttrPerms");function uY(e){return mY.filter(t=>e[t]).length>0}o(uY,"getSchemaTableDescribePerm");function pY(e){return hY.filter(t=>e[t]).length>0}o(pY,"getAttributeDescribePerm");function sEe(e,t){hY.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(sEe,"checkForHashPerms")});var Tp={};Oe(Tp,{authentication:()=>IY,bypassAuth:()=>mEe,login:()=>BC,logout:()=>FC,start:()=>hEe});function mEe(){bY=!0}async function IY(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let h=e.isOperationsServer?lEe?cEe:[]:aEe?oEe:[];if(h.includes(i)||h.includes("*")){if(e.method==="OPTIONS"){let p=_n.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",_=new Cs([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return BT&&_.set("Access-Control-Allow-Credentials","true"),{status:200,headers:_}}a.push("Access-Control-Allow-Origin",i),BT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(BT){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 gY.get(l);break}e.session=u||(u={})}let d=o((h,p,_)=>{let g=new FT.AuthAuditLog(h,p,ba.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===ei.SUCCESS?UC.notify(g):UC.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&UC.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 De.getUser(h,null,e),d(h,ei.SUCCESS,"mTLS")):iEe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=jl.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 De.getUser(g,y,e):null;break;case"Bearer":try{f=await _w(_)}catch(N){if(N.message==="invalid token")try{return await dS(_),c({status:-1})}catch{throw N}}break}}catch(T){return dEe&&(jl.get(_)||(jl.set(_,_),d(g,ei.FAILURE,p))),c({status:401,body:wa({error:T.message},e)})}jl.set(n,f),uEe&&d(f.username,ei.SUCCESS,p)}e.user=f}else u?.user?e.user=await De.getUser(u.user,null,e):(bY&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,TY.getSuperUser)());BT&&(e.session.update=function(h){let p=_n.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,RY.v4)();let g=_n.get(U.AUTHENTICATION_COOKIE_DOMAINS),y=p?new Date(Date.now()+(0,xC.convertToMS)(p)).toUTCString():fEe,T=g?.find(C=>r.host?.endsWith(C)),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${y}; HttpOnly`;T&&(N+=`; Domain=${T}`),_&&(N+="; SameSite=None; Secure"),a?a.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}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,gY.put(h,{expiresAt:p?Date.now()+(0,xC.convertToMS)(p):void 0})},e.login=async function(h,p){let _=e.user=await De.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")&&bs.loginPath?(m.status=302,m.headers.set("Location",bs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Cs);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function hEe({server:e,port:t,securePort:r}){e.http(IY,t||r?{port:t,securePort:r}:{port:"all"}),SY||(SY=!0,setInterval(()=>{jl=new Map},_n.get(U.AUTHENTICATION_CACHETTL)).unref(),yY.user.addListener(()=>{jl=new Map}))}async function BC(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 FC(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var TY,RY,_n,FT,yY,xC,AY,iEe,UC,oEe,aEe,cEe,lEe,gY,BT,bY,uEe,dEe,fEe,jl,SY,HT=le(()=>{TY=w(rs());Dr();qu();Ad();Me();RY=require("uuid"),_n=w(ae());H();FT=w(z()),yY=w(ch());hh();xC=w(ie());yo();AY=(0,FT.forComponent)("authentication"),{debug:iEe}=AY,UC=AY.withTag("auth-event");_n.initSync();oEe=_n.get(U.HTTP_CORSACCESSLIST),aEe=_n.get(U.HTTP_CORS),cEe=_n.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),lEe=_n.get(U.OPERATIONSAPI_NETWORK_CORS),gY=je({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),BT=_n.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,bY=process.env.AUTHENTICATION_AUTHORIZELOCAL??_n.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,uEe=_n.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,dEe=_n.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,fEe="Tue, 01 Oct 8307 19:33:20 GMT",jl=new Map;De.onInvalidatedUser(()=>{jl=new Map});o(mEe,"bypassAuth");o(IY,"authentication");o(hEe,"start");o(BC,"login");o(FC,"logout")});var DY=M((pBe,LY)=>{"use strict";var we=require("joi"),NY=require("fs-extra"),wY=require("path"),ds=st(),OY=ae(),CY=(H(),v(Y)),PY=z(),{hdbErrors:pEe}=_e(),{HDB_ERROR_MSGS:gn}=pEe,Qo=/^[a-zA-Z0-9-_]+$/,EEe=/^[a-zA-Z0-9-_]+$/;LY.exports={getDropCustomFunctionValidator:gEe,setCustomFunctionValidator:SEe,addComponentValidator:AEe,dropCustomFunctionProjectValidator:bEe,packageComponentValidator:IEe,deployComponentValidator:NEe,setComponentFileValidator:TEe,getComponentFileValidator:yEe,dropComponentFileValidator:REe,addSSHKeyValidator:wEe,updateSSHKeyValidator:OEe,deleteSSHKeyValidator:CEe,setSSHKnownHostsValidator:PEe};function kT(e,t,r){try{let n=OY.get(CY.CONFIG_PARAMS.COMPONENTSROOT),s=wY.join(n,t);return NY.existsSync(s)?e?t:r.message(gn.PROJECT_EXISTS):e?r.message(gn.NO_PROJECT):t}catch(n){return PY.error(n),r.message(gn.VALIDATION_ERR)}}o(kT,"checkProjectExists");function Rp(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(Rp,"checkFilePath");function _Ee(e,t,r,n){try{let s=OY.get(CY.CONFIG_PARAMS.COMPONENTSROOT),i=wY.join(s,e,t,r+".js");return NY.existsSync(i)?r:n.message(gn.NO_FILE)}catch(s){return PY.error(s),n.message(gn.VALIDATION_ERR)}}o(_Ee,"checkFileExists");function gEe(e){let t=we.object({project:we.string().pattern(Qo).custom(kT.bind(null,!0)).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(Qo).custom(_Ee.bind(null,e.project,e.type)).custom(Rp).required().messages({"string.pattern.base":gn.BAD_FILE_NAME})});return ds.validateBySchema(e,t)}o(gEe,"getDropCustomFunctionValidator");function SEe(e){let t=we.object({project:we.string().pattern(Qo).custom(kT.bind(null,!0)).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(Rp).required(),function_content:we.string().required()});return ds.validateBySchema(e,t)}o(SEe,"setCustomFunctionValidator");function TEe(e){let t=we.object({project:we.string().pattern(Qo).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),file:we.string().custom(Rp).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ds.validateBySchema(e,t)}o(TEe,"setComponentFileValidator");function REe(e){let t=we.object({project:we.string().pattern(Qo).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),file:we.string().custom(Rp).optional()});return ds.validateBySchema(e,t)}o(REe,"dropComponentFileValidator");function yEe(e){let t=we.object({project:we.string().required(),file:we.string().custom(Rp).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ds.validateBySchema(e,t)}o(yEe,"getComponentFileValidator");function AEe(e){let t=we.object({project:we.string().pattern(Qo).custom(kT.bind(null,!1)).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME})});return ds.validateBySchema(e,t)}o(AEe,"addComponentValidator");function bEe(e){let t=we.object({project:we.string().pattern(Qo).custom(kT.bind(null,!0)).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME})});return ds.validateBySchema(e,t)}o(bEe,"dropCustomFunctionProjectValidator");function IEe(e){let t=we.object({project:we.string().pattern(Qo).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),skip_node_modules:we.boolean(),skip_symlinks:we.boolean()});return ds.validateBySchema(e,t)}o(IEe,"packageComponentValidator");function NEe(e){let t=we.object({project:we.string().pattern(Qo).required().messages({"string.pattern.base":gn.BAD_PROJECT_NAME}),package:we.string().optional(),restart:we.alternatives().try(we.boolean(),we.string().valid("rolling")).optional()});return ds.validateBySchema(e,t)}o(NEe,"deployComponentValidator");function wEe(e){let t=we.object({name:we.string().pattern(EEe).required().messages({"string.pattern.base":gn.BAD_SSH_KEY_NAME}),key:we.string().required(),host:we.string().required(),hostname:we.string().required(),known_hosts:we.string().optional()});return ds.validateBySchema(e,t)}o(wEe,"addSSHKeyValidator");function OEe(e){let t=we.object({name:we.string().required(),key:we.string().required()});return ds.validateBySchema(e,t)}o(OEe,"updateSSHKeyValidator");function CEe(e){let t=we.object({name:we.string().required()});return ds.validateBySchema(e,t)}o(CEe,"deleteSSHKeyValidator");function PEe(e){let t=we.object({known_hosts:we.string().required()});return ds.validateBySchema(e,t)}o(PEe,"setSSHKnownHostsValidator")});var bp=M((_Be,BY)=>{"use strict";var qT=require("joi"),fc=require("path"),lf=require("fs-extra"),{exec:LEe,spawn:DEe}=require("child_process"),MEe=require("util"),vEe=MEe.promisify(LEe),uf=(H(),v(Y)),{PACKAGE_ROOT:UEe}=It(),{handleHDBError:yp,hdbErrors:xEe}=_e(),{HTTP_STATUS_CODES:Ap}=xEe,Ql=ae(),BEe=st(),mc=z(),{once:FEe}=require("events");Ql.initSync();var HC=Ql.get(uf.CONFIG_PARAMS.COMPONENTSROOT),MY="npm install --force --omit=dev --json",HEe=`${MY} --dry-run`,kEe=Ql.get(uf.CONFIG_PARAMS.ROOTPATH),GT=fc.join(kEe,"ssh");BY.exports={installModules:VEe,auditModules:KEe,installAllRootModules:qEe,uninstallRootModule:GEe,linkHarperdb:$Ee,runCommand:df};async function qEe(e=!1,t=Ql.get(uf.CONFIG_PARAMS.ROOTPATH)){await $T();let r=!1,n=process.env;lf.pathExistsSync(GT)&&lf.readdirSync(GT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+fc.join(GT,"config")+" -o UserKnownHostsFile="+fc.join(GT,"known_hosts"),...process.env},r=!0)});try{let s=Ql.get(uf.CONFIG_PARAMS.ROOTPATH),i=fc.join(s,"node_modules","harperdb");lf.lstatSync(i).isSymbolicLink()&&lf.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&mc.error("Error removing symlink:",s)}await df(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(qEe,"installAllRootModules");async function GEe(e){await df(`npm uninstall ${e}`,Ql.get(uf.CONFIG_PARAMS.ROOTPATH))}o(GEe,"uninstallRootModule");async function $Ee(){await $T(),await df(`npm link ${UEe}`,Ql.get(uf.CONFIG_PARAMS.ROOTPATH))}o($Ee,"linkHarperdb");async function df(e,t=void 0,r=process.env){mc.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=DEe(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();mc.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();mc.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await FEe(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(df,"runCommand");async function VEe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";mc.warn(t,e.projects);let r=xY(e);if(r)throw yp(r,r.message,Ap.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?HEe:MY;await $T(),await UY(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=fc.join(HC,u),f,m=null;try{let{stdout:h,stderr:p}=await vEe(i,{cwd:d});f=h?h.replace(`
23
23
  `,""):null,m=p?p.replace(`
24
- `,""):null}catch(h){h.stderr?a[u].npm_error=LY(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 mc.info(`finished installModules with response ${a}`),a.warning=t,a}o(qEe,"installModules");function LY(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
25
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(LY,"parseNPMStdErr");async function GEe(e){mc.info(`starting auditModules for request: ${e}`);let t=MY(e);if(t)throw yp(t,t.message,Ap.BAD_REQUEST);let{projects:r}=e;await kT(),await DY(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=fc.join(UC,a);n[a]={npm_output:null,npm_error:null};try{let l=await df("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=LY(l.stderr)}}return mc.info(`finished auditModules with response ${n}`),n}o(GEe,"auditModules");async function kT(){return await df("npm -v"),!0}o(kT,"checkNPMInstalled");async function DY(e){if(!Array.isArray(e)||e.length===0)throw yp(new Error,"projects argument must be an array with at least 1 element",Ap.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=fc.join(UC,i.toString());if(!await lf.pathExists(a)){t.push(i);continue}let l=fc.join(a,"package.json");await lf.pathExists(l)||r.push(i)}if(t.length>0)throw yp(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ap.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw yp(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ap.BAD_REQUEST,void 0,void 0,!0)}o(DY,"checkProjectPaths");function MY(e){let t=FT.object({projects:FT.array().min(1).items(FT.string()).required(),dry_run:FT.boolean().default(!1)});return vEe.validateBySchema(e,t)}o(MY,"modulesValidator")});var BC=M((EBe,kY)=>{"use strict";var Fs=require("fs-extra"),Np=require("path"),Ip=j(),UY=se(),{PACKAGE_ROOT:$Ee}=It(),xC=(H(),v(Y)),HY=oe(),VEe=Ot();kY.exports=KEe;async function KEe(){let e=YEe(),t=HY.get(xC.CONFIG_PARAMS.ROOTPATH),r=Np.join(t,"package.json"),n={dependencies:{harperdb:"file:"+$Ee}},s=Np.join(t,"node_modules");Fs.ensureDirSync(s);let i,a=!0,c=!1;try{i=Fs.readJsonSync(r)}catch(l){if(UY.isEmptyOrZeroLength(e))return;if(l.code!==xC.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!UY.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=BY(u);n.dependencies[l]=d+u}if(!a){Ip.notify("Installing components"),await FY(r,n,null),await xY(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=BY(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(Fs.statSync(new URL(u+"/package.json")).mtimeMs>Fs.statSync(r).mtimeMs){c=!0;break}}catch(m){Ip.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Ip.notify("Removing component",l),c=!0);c&&(Ip.notify("Updating components."),await FY(r,n,i),await xY(t,e))}o(KEe,"installComponents");function xY(e,t){return Promise.all(t.map(({name:r})=>{let n=Np.join(e,"node_modules",r),s=Np.join(e,"components",r);if(Fs.existsSync(n)&&Fs.lstatSync(n).isDirectory())return Fs.move(n,s,{overwrite:!0}).then(()=>{Fs.symlink(s,n)})}))}o(xY,"moveModuleToComponents");function YEe(){let e=VEe.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(YEe,"getComponentsConfig");function BY(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Np.extname(e)||Fs.existsSync(e)?"file:":"github:"}o(BY,"getPkgPrefix");async function FY(e,t,r){Ip.trace("npm installing components package.json",t),Fs.writeFileSync(e,JSON.stringify(t,null," "));try{await bp().installAllRootModules(HY.get(xC.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Fs.writeFileSync(e,JSON.stringify(r,null," ")):Fs.unlinkSync(e),n}}o(FY,"installPackages")});var VY={};we(VY,{packageDirectory:()=>WEe});function WEe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];GY.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,qY.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,$Y.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var qY,GY,$Y,KY=ce(()=>{qY=require("path"),GY=w(require("tar-fs")),$Y=require("node:zlib");o(WEe,"packageDirectory")});var kC=M(ir=>{"use strict";var Ie=require("fs-extra"),FC=require("fast-glob"),Oe=require("path"),zEe=require("tar-fs"),jEe=require("gunzip-maybe"),HC=require("normalize-path"),Fn=CY(),Qt=j(),St=(H(),v(Y)),sr=oe(),qT=Ot(),QEe=se(),{PACKAGE_ROOT:JEe}=It(),{handleHDBError:Jt,hdbErrors:XEe}=ge(),{basename:ZEe}=require("path"),e_e=BC(),WY=oe(),{Readable:t_e}=require("stream"),{isMainThread:r_e}=require("worker_threads"),{HDB_ERROR_MSGS:Jl,HTTP_STATUS_CODES:Xt}=XEe,zY=ze(),{replicateOperation:Ri}=(is(),v(ko)),{packageDirectory:n_e}=(KY(),v(VY)),YY=bp(),s_e=Oe.join(JEe,"application-template"),i_e=sr.get(St.CONFIG_PARAMS.ROOTPATH),hc=Oe.join(i_e,"ssh"),Jo=Oe.join(hc,"known_hosts");function o_e(){Qt.trace("getting custom api status");let e={};try{e={port:sr.get(St.CONFIG_PARAMS.HTTP_PORT),directory:sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Jt(new Error,Jl.FUNCTION_STATUS,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,t)}return e}o(o_e,"customFunctionsStatus");function a_e(){Qt.trace("getting custom api endpoints");let e={},t=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT);try{FC.sync(HC(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:FC.sync(HC(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:FC.sync(HC(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Jt(new Error,Jl.GET_FUNCTIONS,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,r)}return e}o(a_e,"getCustomFunctions");function c_e(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=Fn.getDropCustomFunctionValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("getting custom api endpoint file content");let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Oe.join(r,n,s,i+".js");try{return Ie.readFileSync(a,{encoding:"utf8"})}catch(c){throw Jt(new Error,Jl.GET_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,c)}}o(c_e,"getCustomFunction");async function l_e(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=Fn.setCustomFunctionValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("setting custom function file content");let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Ie.outputFileSync(Oe.join(r,n,s,i+".js"),a);let c=await Ri(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Jt(new Error,Jl.SET_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,c)}}o(l_e,"setCustomFunction");async function u_e(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=Fn.getDropCustomFunctionValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("dropping custom function file");let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ie.unlinkSync(Oe.join(r,n,s,i+".js"));let a=await Ri(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Jt(new Error,Jl.DROP_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,a)}}o(u_e,"dropCustomFunction");async function d_e(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Fn.addComponentValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("adding component");let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Oe.join(r,n);Ie.mkdirSync(s,{recursive:!0}),Ie.copySync(s_e,s);let i=await Ri(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Jt(new Error,Jl.ADD_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,s)}}o(d_e,"addComponent");async function f_e(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Fn.dropCustomFunctionProjectValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("dropping custom function project");let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=sr.get(St.CONFIG_PARAMS.APPS);if(!QEe.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return qT.updateConfigValue(St.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Oe.join(r,n);Ie.rmSync(i,{recursive:!0});let a=await Ri(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Jt(new Error,Jl.DROP_FUNCTION_PROJECT,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,i)}}o(f_e,"dropCustomFunctionProject");async function m_e(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Fn.packageComponentValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Qt.trace("packaging component",n);let s;try{s=await Ie.realpath(Oe.join(r,n))}catch(a){if(a.code!==St.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Ie.realpath(Oe.join(sr.get(St.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===St.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await n_e(s,e)).toString("base64");return{project:n,payload:i}}o(m_e,"packageComponent");async function h_e(e){e.project?e.project=Oe.parse(e.project).name:e.package&&(e.project=p_e(e.package));let t=Fn.deployComponentValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(Qt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Oe.join(r,n),i="file:"+c,await Ie.emptyDir(c);let _=t_e.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((T,y)=>{_.pipe(jEe()).pipe(zEe.extract(c,{finish:T})).on("error",y)});let g=await Ie.readdir(c);g.length===1&&g[0]==="package"&&(await Ie.copy(Oe.join(c,"package"),c),await Ie.remove(Oe.join(c,"package")));let R=Oe.join(c,"node_modules");a?await YY.runCommand(a,c):Ie.existsSync(R)||await YY.installAllRootModules(!1,c)}else{await qT.addConfig(n,{package:i}),await e_e();let _=WY.get(St.CONFIG_PARAMS.ROOTPATH);c=Oe.join(_,"node_modules",n)}if(r_e)return;let l=new Map;l.isWorker=!0;let u=(ff(),v(wp)),d;u.setErrorReporter(_=>d=_);let f=ZEe(c),m=u.componentErrors.get(f);try{await u.loadComponent(c,l)}finally{u.componentErrors.set(f,m)}if(d)throw d;Qt.info("Installed component");let h=e.restart==="rolling";e.restart=h?!1:e.restart;let p=await Ri(e);if(e.restart===!0)zY.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(h){let g=await(GC(),v(qC)).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(h_e,"deployComponent");function p_e(e){if(e.startsWith("git+ssh://"))return Oe.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Oe.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ie.readFileSync(Oe.join(e,"package.json"),"utf8"));return Oe.basename(t)}catch{}return Oe.basename(e)}o(p_e,"getProjectNameFromPackage");async function E_e(){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=Oe.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:Oe.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return Qt.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{name:sr.get(St.CONFIG_PARAMS.COMPONENTSROOT).split(Oe.sep).slice(-1).pop(),entries:[]}),n=(ff(),v(wp)).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(E_e,"getComponents");async function __e(e){let t=Fn.getComponentFileValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let n=qT.getConfigObj()[e.project]||e.project==="harperdb"?Oe.join(WY.get(St.CONFIG_PARAMS.ROOTPATH),"node_modules"):sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ie.stat(Oe.join(n,e.project,e.file));return{message:await Ie.readFile(Oe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===St.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Oe.join(e.project,e.file)}'`):i}}o(__e,"getComponentFile");async function g_e(e){let t=Fn.setComponentFileValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Oe.join(sr.get(St.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 Ri(e);return s.message="Successfully set component: "+e.file,s}o(g_e,"setComponentFile");async function S_e(e){let t=Fn.dropComponentFileValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Oe.join(r,n):r,i=Oe.join(sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),s),a=Oe.join(sr.get(St.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ie.pathExists(a)&&await Ie.unlink(a),await Ie.pathExists(i)&&await Ie.remove(i);let c=Oe.join(sr.get(St.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")}qT.deleteConfigFromFile([r]);let l=await Ri(e);return e.restart===!0?(zY.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(S_e,"dropComponent");async function T_e(e){let t=Fn.addSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;Qt.trace("adding ssh key",r);let c=Oe.join(hc,r+".key"),l=Oe.join(hc,"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}
24
+ `,""):null}catch(h){h.stderr?a[u].npm_error=vY(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 mc.info(`finished installModules with response ${a}`),a.warning=t,a}o(VEe,"installModules");function vY(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
25
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(vY,"parseNPMStdErr");async function KEe(e){mc.info(`starting auditModules for request: ${e}`);let t=xY(e);if(t)throw yp(t,t.message,Ap.BAD_REQUEST);let{projects:r}=e;await $T(),await UY(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=fc.join(HC,a);n[a]={npm_output:null,npm_error:null};try{let l=await df("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=vY(l.stderr)}}return mc.info(`finished auditModules with response ${n}`),n}o(KEe,"auditModules");async function $T(){return await df("npm -v"),!0}o($T,"checkNPMInstalled");async function UY(e){if(!Array.isArray(e)||e.length===0)throw yp(new Error,"projects argument must be an array with at least 1 element",Ap.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=fc.join(HC,i.toString());if(!await lf.pathExists(a)){t.push(i);continue}let l=fc.join(a,"package.json");await lf.pathExists(l)||r.push(i)}if(t.length>0)throw yp(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ap.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw yp(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ap.BAD_REQUEST,void 0,void 0,!0)}o(UY,"checkProjectPaths");function xY(e){let t=qT.object({projects:qT.array().min(1).items(qT.string()).required(),dry_run:qT.boolean().default(!1)});return BEe.validateBySchema(e,t)}o(xY,"modulesValidator")});var qC=M((SBe,$Y)=>{"use strict";var Fs=require("fs-extra"),Np=require("path"),Ip=z(),FY=ie(),{PACKAGE_ROOT:YEe}=It(),kC=(H(),v(Y)),GY=ae(),WEe=Ot();$Y.exports=zEe;async function zEe(){let e=jEe(),t=GY.get(kC.CONFIG_PARAMS.ROOTPATH),r=Np.join(t,"package.json"),n={dependencies:{harperdb:"file:"+YEe}},s=Np.join(t,"node_modules");Fs.ensureDirSync(s);let i,a=!0,c=!1;try{i=Fs.readJsonSync(r)}catch(l){if(FY.isEmptyOrZeroLength(e))return;if(l.code!==kC.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!FY.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=kY(u);n.dependencies[l]=d+u}if(!a){Ip.notify("Installing components"),await qY(r,n,null),await HY(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=kY(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(Fs.statSync(new URL(u+"/package.json")).mtimeMs>Fs.statSync(r).mtimeMs){c=!0;break}}catch(m){Ip.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Ip.notify("Removing component",l),c=!0);c&&(Ip.notify("Updating components."),await qY(r,n,i),await HY(t,e))}o(zEe,"installComponents");function HY(e,t){return Promise.all(t.map(({name:r})=>{let n=Np.join(e,"node_modules",r),s=Np.join(e,"components",r);if(Fs.existsSync(n)&&Fs.lstatSync(n).isDirectory())return Fs.move(n,s,{overwrite:!0}).then(()=>{Fs.symlink(s,n)})}))}o(HY,"moveModuleToComponents");function jEe(){let e=WEe.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(jEe,"getComponentsConfig");function kY(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Np.extname(e)||Fs.existsSync(e)?"file:":"github:"}o(kY,"getPkgPrefix");async function qY(e,t,r){Ip.trace("npm installing components package.json",t),Fs.writeFileSync(e,JSON.stringify(t,null," "));try{await bp().installAllRootModules(GY.get(kC.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Fs.writeFileSync(e,JSON.stringify(r,null," ")):Fs.unlinkSync(e),n}}o(qY,"installPackages")});var WY={};Oe(WY,{packageDirectory:()=>QEe});function QEe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];KY.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,VY.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,YY.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var VY,KY,YY,zY=le(()=>{VY=require("path"),KY=w(require("tar-fs")),YY=require("node:zlib");o(QEe,"packageDirectory")});var VC=M(ir=>{"use strict";var Ne=require("fs-extra"),GC=require("fast-glob"),Ce=require("path"),JEe=require("tar-fs"),XEe=require("gunzip-maybe"),$C=require("normalize-path"),Hn=DY(),Qt=z(),St=(H(),v(Y)),sr=ae(),VT=Ot(),ZEe=ie(),{PACKAGE_ROOT:e_e}=It(),{handleHDBError:Jt,hdbErrors:t_e}=_e(),{basename:r_e}=require("path"),n_e=qC(),QY=ae(),{Readable:s_e}=require("stream"),{isMainThread:i_e}=require("worker_threads"),{HDB_ERROR_MSGS:Jl,HTTP_STATUS_CODES:Xt}=t_e,JY=ze(),{replicateOperation:Ri}=(is(),v(ko)),{packageDirectory:o_e}=(zY(),v(WY)),jY=bp(),a_e=Ce.join(e_e,"application-template"),c_e=sr.get(St.CONFIG_PARAMS.ROOTPATH),hc=Ce.join(c_e,"ssh"),Jo=Ce.join(hc,"known_hosts");function l_e(){Qt.trace("getting custom api status");let e={};try{e={port:sr.get(St.CONFIG_PARAMS.HTTP_PORT),directory:sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Jt(new Error,Jl.FUNCTION_STATUS,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,t)}return e}o(l_e,"customFunctionsStatus");function u_e(){Qt.trace("getting custom api endpoints");let e={},t=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT);try{GC.sync($C(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:GC.sync($C(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:GC.sync($C(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Jt(new Error,Jl.GET_FUNCTIONS,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,r)}return e}o(u_e,"getCustomFunctions");function d_e(e){e.project&&(e.project=Ce.parse(e.project).name),e.file&&(e.file=Ce.parse(e.file).name);let t=Hn.getDropCustomFunctionValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("getting custom api endpoint file content");let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Ce.join(r,n,s,i+".js");try{return Ne.readFileSync(a,{encoding:"utf8"})}catch(c){throw Jt(new Error,Jl.GET_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,c)}}o(d_e,"getCustomFunction");async function f_e(e){e.project&&(e.project=Ce.parse(e.project).name),e.file&&(e.file=Ce.parse(e.file).name);let t=Hn.setCustomFunctionValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("setting custom function file content");let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Ne.outputFileSync(Ce.join(r,n,s,i+".js"),a);let c=await Ri(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Jt(new Error,Jl.SET_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,c)}}o(f_e,"setCustomFunction");async function m_e(e){e.project&&(e.project=Ce.parse(e.project).name),e.file&&(e.file=Ce.parse(e.file).name);let t=Hn.getDropCustomFunctionValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("dropping custom function file");let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ne.unlinkSync(Ce.join(r,n,s,i+".js"));let a=await Ri(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Jt(new Error,Jl.DROP_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,a)}}o(m_e,"dropCustomFunction");async function h_e(e){e.project&&(e.project=Ce.parse(e.project).name);let t=Hn.addComponentValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("adding component");let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Ce.join(r,n);Ne.mkdirSync(s,{recursive:!0}),Ne.copySync(a_e,s);let i=await Ri(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Jt(new Error,Jl.ADD_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,s)}}o(h_e,"addComponent");async function p_e(e){e.project&&(e.project=Ce.parse(e.project).name);let t=Hn.dropCustomFunctionProjectValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("dropping custom function project");let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=sr.get(St.CONFIG_PARAMS.APPS);if(!ZEe.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 VT.updateConfigValue(St.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Ce.join(r,n);Ne.rmSync(i,{recursive:!0});let a=await Ri(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Jt(new Error,Jl.DROP_FUNCTION_PROJECT,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,i)}}o(p_e,"dropCustomFunctionProject");async function E_e(e){e.project&&(e.project=Ce.parse(e.project).name);let t=Hn.packageComponentValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Qt.trace("packaging component",n);let s;try{s=await Ne.realpath(Ce.join(r,n))}catch(a){if(a.code!==St.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Ne.realpath(Ce.join(sr.get(St.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===St.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await o_e(s,e)).toString("base64");return{project:n,payload:i}}o(E_e,"packageComponent");async function __e(e){e.project?e.project=Ce.parse(e.project).name:e.package&&(e.project=g_e(e.package));let t=Hn.deployComponentValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let r=sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(Qt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Ce.join(r,n),i="file:"+c,await Ne.emptyDir(c);let _=s_e.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((T,R)=>{_.pipe(XEe()).pipe(JEe.extract(c,{finish:T})).on("error",R)});let g=await Ne.readdir(c);g.length===1&&g[0]==="package"&&(await Ne.copy(Ce.join(c,"package"),c),await Ne.remove(Ce.join(c,"package")));let y=Ce.join(c,"node_modules");a?await jY.runCommand(a,c):Ne.existsSync(y)||await jY.installAllRootModules(!1,c)}else{await VT.addConfig(n,{package:i}),await n_e();let _=QY.get(St.CONFIG_PARAMS.ROOTPATH);c=Ce.join(_,"node_modules",n)}if(i_e)return;let l=new Map;l.isWorker=!0;let u=(ff(),v(wp)),d;u.setErrorReporter(_=>d=_);let f=r_e(c),m=u.componentErrors.get(f);try{await u.loadComponent(c,l)}finally{u.componentErrors.set(f,m)}if(d)throw d;Qt.info("Installed component");let h=e.restart==="rolling";e.restart=h?!1:e.restart;let p=await Ri(e);if(e.restart===!0)JY.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(h){let g=await(YC(),v(KC)).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(__e,"deployComponent");function g_e(e){if(e.startsWith("git+ssh://"))return Ce.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Ce.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ne.readFileSync(Ce.join(e,"package.json"),"utf8"));return Ce.basename(t)}catch{}return Ce.basename(e)}o(g_e,"getProjectNameFromPackage");async function S_e(){let e=o(async(s,i)=>{try{let a=await Ne.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Ce.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 Ne.stat(u),f={name:Ce.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return Qt.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),{name:sr.get(St.CONFIG_PARAMS.COMPONENTSROOT).split(Ce.sep).slice(-1).pop(),entries:[]}),n=(ff(),v(wp)).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(S_e,"getComponents");async function T_e(e){let t=Hn.getComponentFileValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let n=VT.getConfigObj()[e.project]||e.project==="harperdb"?Ce.join(QY.get(St.CONFIG_PARAMS.ROOTPATH),"node_modules"):sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ne.stat(Ce.join(n,e.project,e.file));return{message:await Ne.readFile(Ce.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===St.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Ce.join(e.project,e.file)}'`):i}}o(T_e,"getComponentFile");async function R_e(e){let t=Hn.setComponentFileValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Ce.join(sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ne.ensureFile(n),await Ne.outputFile(n,e.payload,r)):await Ne.ensureDir(n);let s=await Ri(e);return s.message="Successfully set component: "+e.file,s}o(R_e,"setComponentFile");async function y_e(e){let t=Hn.dropComponentFileValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Ce.join(r,n):r,i=Ce.join(sr.get(St.CONFIG_PARAMS.COMPONENTSROOT),s),a=Ce.join(sr.get(St.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ne.pathExists(a)&&await Ne.unlink(a),await Ne.pathExists(i)&&await Ne.remove(i);let c=Ce.join(sr.get(St.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ne.pathExists(c)){let u=JSON.parse(await Ne.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ne.writeFile(c,JSON.stringify(u,null,2),"utf8")}VT.deleteConfigFromFile([r]);let l=await Ri(e);return e.restart===!0?(JY.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(y_e,"dropComponent");async function A_e(e){let t=Hn.addSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;Qt.trace("adding ssh key",r);let c=Ce.join(hc,r+".key"),l=Ce.join(hc,"config");if(await Ne.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ne.outputFile(c,n),await Ne.chmod(c,"0600");let u=`#${r}
26
26
  Host ${s}
27
27
  HostName ${i}
28
28
  User git
29
29
  IdentityFile ${c}
30
- IdentitiesOnly yes`;await Ie.pathExists(l)?await Ie.appendFile(l,`
31
- `+u):await Ie.outputFile(l,u);let d="";if(await Ie.pathExists(Jo)||(await Ie.writeFile(Jo,""),await Ie.chmod(Jo,"0600")),i=="github.com"&&!(await Ie.readFile(Jo,"utf8")).includes("github.com"))try{let _=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of _)Ie.appendFile(Jo,"github.com "+g+`
32
- `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Ie.appendFile(Jo,a);let f=await Ri(e);return f.message=`Added ssh key: ${r}${d}`,f}o(T_e,"addSSHKey");async function R_e(e){let t=Fn.updateSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r,key:n}=e;Qt.trace("updating ssh key",r);let s=Oe.join(hc,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 Ri(e);return i.message=`Updated ssh key: ${r}`,i}o(R_e,"updateSSHKey");async function y_e(e){let t=Fn.deleteSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r}=e;Qt.trace("deleting ssh key",r);let n=Oe.join(hc,r+".key"),s=Oe.join(hc,"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 Ri(e);return c.message=`Deleted ssh key: ${r}`,c}o(y_e,"deleteSSHKey");async function A_e(e){let t=[];return await Ie.pathExists(hc)&&(await Ie.readdir(hc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(A_e,"listSSHKeys");async function b_e(e){let t=Fn.setSSHKnownHostsValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{known_hosts:r}=e;await Ie.outputFile(Jo,r);let n=await Ri(e);return n.message="Known hosts successfully set",n}o(b_e,"setSSHKnownHosts");async function I_e(e){return await Ie.pathExists(Jo)?{known_hosts:await Ie.readFile(Jo,"utf8")}:{known_hosts:null}}o(I_e,"getSSHKnownHosts");ir.customFunctionsStatus=o_e;ir.getCustomFunctions=a_e;ir.getCustomFunction=c_e;ir.setCustomFunction=l_e;ir.dropCustomFunction=u_e;ir.addComponent=d_e;ir.dropCustomFunctionProject=f_e;ir.packageComponent=m_e;ir.deployComponent=h_e;ir.getComponents=E_e;ir.getComponentFile=__e;ir.setComponentFile=g_e;ir.dropComponent=S_e;ir.addSSHKey=T_e;ir.updateSSHKey=R_e;ir.deleteSSHKey=y_e;ir.listSSHKeys=A_e;ir.setSSHKnownHosts=b_e;ir.getSSHKnownHosts=I_e});var $C=M((RBe,QY)=>{"use strict";var Hs=require("joi"),jY=nt();QY.exports={readTransactionLogValidator:N_e,deleteTransactionLogsBeforeValidator:w_e};function N_e(e){let t=Hs.object({schema:Hs.string(),database:Hs.string(),table:Hs.string().required(),from:Hs.date().timestamp(),to:Hs.date().timestamp(),limit:Hs.number().min(1)});return jY.validateBySchema(e,t)}o(N_e,"readTransactionLogValidator");function w_e(e){let t=Hs.object({schema:Hs.string(),database:Hs.string(),table:Hs.string().required(),timestamp:Hs.date().timestamp().required()});return jY.validateBySchema(e,t)}o(w_e,"deleteTransactionLogsBeforeValidator")});var VT=M((ABe,rW)=>{"use strict";var VC=(H(),v(Y)),Op=Gt(),JY=se(),XY=oe(),ZY=Ki(),eW=j(),{handleHDBError:GT,hdbErrors:O_e}=ge(),{HTTP_STATUS_CODES:$T}=O_e,{readTransactionLogValidator:C_e,deleteTransactionLogsBeforeValidator:P_e}=$C(),tW=Xn(),L_e="Logs successfully deleted from transaction log.",D_e="All logs successfully deleted from transaction log.";rW.exports={readTransactionLog:M_e,deleteTransactionLogsBefore:U_e};async function M_e(e){let t=C_e(e);if(t)throw GT(t,t.message,$T.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=JY.checkSchemaTableExist(e.database,e.table);if(r)throw GT(new Error,r,$T.NOT_FOUND,void 0,void 0,!0);return XY.get(VC.CONFIG_PARAMS.CLUSTERING_ENABLED)?await v_e(e):(eW.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),tW.readAuditLog(e))}o(M_e,"readTransactionLog");async function*v_e(e){let t=ZY.createNatsTableStreamName(e.database,e.table),r=await Op.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===VC.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(v_e,"readTransactionLogNats");async function U_e(e){let t=P_e(e);if(t)throw GT(t,t.message,$T.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!XY.get(VC.CONFIG_PARAMS.CLUSTERING_ENABLED))return eW.info("Delete transaction logs called for Plexus"),tW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=JY.checkSchemaTableExist(r,n);if(i)throw GT(new Error,i,$T.NOT_FOUND,void 0,void 0,!0);let a=ZY.createNatsTableStreamName(r,n),{jsm:c}=await Op.getNATSReferences(),l=await Op.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=L_e,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=D_e):f=(await Op.viewStream(a,parseInt(s),1))[0].nats_sequence,await Op.purgeTableStream(r,n,{seq:f}),d}o(U_e,"deleteTransactionLogsBefore")});var zC={};we(zC,{describeMetric:()=>cW,describeMetricOp:()=>WC,get:()=>oW,getOp:()=>KC,listMetrics:()=>aW,listMetricsOp:()=>YC});async function B_e(e){return(await Dg().get(e)).hostname}function nW(e,t){return e.length===0||e.includes(t)}function KC(e){return Cp.trace?.("get_analytics request:",e),oW(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function iW(e){return"conditions"in e?{...e,conditions:e.conditions.map(iW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function oW(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(iW));let a=t??[];nW(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return a.length>0&&(c.select=a),Cp.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],nW(a,"node")&&(Cp.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await B_e(d)),Cp.trace?.("get_analytics result:",JSON.stringify(u)),u})}function YC(e){return aW(e.metric_types,e.custom_metrics_window)}async function aW(e=["builtin"],t=x_e){let r=[],n=Object.values(xo);if(e.includes("builtin")&&(r=n),e.includes("custom")){let i=[{attribute:"id",comparator:"greater_than",value:Date.now()-t}],a=n.map(d=>({attribute:"metric",comparator:"not_equal",value:d}));i.push(...a);let c={select:["metric"],conditions:i},l=new Set,u=await databases.system.hdb_analytics.search(c);for await(let d of u)l.add(d.metric);r.push(...Array.from(l.values()))}return r}function WC(e){return cW(e.metric)}async function cW(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return Cp.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var sW,x_e,Cp,jC=ce(()=>{sW=w(j());RN();yN();x_e=1e3*60*60*24*7,Cp=(0,sW.forComponent)("analytics").conditional;o(B_e,"lookupHostname");o(nW,"isSelected");o(KC,"getOp");o(iW,"conformCondition");o(oW,"get");o(YC,"listMetricsOp");o(aW,"listMetrics");o(WC,"describeMetricOp");o(cW,"describeMetric")});var KT,YT,Pp,WT=ce(()=>{KT={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},YT=Object.keys(KT),Pp="primary"});function uW(e){return lW.validateBySchema(e,q_e)}var Lp,lW,F_e,H_e,k_e,q_e,dW=ce(()=>{Lp=w(require("joi")),lW=w(nt());WT();F_e=YT,H_e=Object.entries(KT).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),k_e=o(()=>{let e=Lp.default.string().min(1).max(512);return Object.entries(KT).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:Lp.default.string().valid(...r.allowedValues).messages({"any.only":H_e[t]})}))}),e.required()},"createStatusValidationSchema"),q_e=Lp.default.object({id:Lp.default.string().valid(...F_e).required(),status:k_e()});o(uW,"validateStatus")});var eP={};we(eP,{DEFAULT_STATUS_ID:()=>Pp,STATUS_IDS:()=>YT,Status:()=>Xo,clear:()=>JC,get:()=>XC,set:()=>ZC});function Mp(){return QC||(QC=je({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),QC}function JC({id:e}){return Dp.debug?.("clearStatus",e),Mp().delete(e)}function $_e(){return Dp.debug?.("getAllStatus"),Mp().get({})}function XC({id:e}){return e?(Dp.debug?.("getStatus",e),Mp().get(e)):(Dp.debug?.("getStatus","all"),$_e())}function ZC({status:e,id:t=Pp}){let r=uW({status:e,id:t});if(r)throw(0,zT.handleHDBError)(r,r.message,G_e.BAD_REQUEST);return Dp.debug?.("setStatus",t,e),Mp().put(t,{status:e})}var zT,fW,G_e,QC,Xo,Dp,vp=ce(()=>{Me();zT=w(ge()),fW=w(ri());dW();WT();WT();({HTTP_STATUS_CODES:G_e}=zT.hdbErrors);o(Mp,"getStatusTable");Xo={get primaryStore(){return Mp().primaryStore}},Dp=(0,fW.loggerWithTag)("status");o(JC,"clearStatus");o($_e,"getAllStatus");o(XC,"getStatus");o(ZC,"setStatus")});var hW=M((qBe,mW)=>{"use strict";var tP=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};mW.exports=tP});var EW=M(($Be,pW)=>{"use strict";var rP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};pW.exports=rP});var sP=M((KBe,gW)=>{"use strict";var _W=hW(),V_e=EW(),{HDB_ERROR_MSGS:K_e}=tn(),nP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=K_e.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 _W(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new V_e(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 _W(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}};gW.exports=nP});var XT=M((WBe,UW)=>{"use strict";var iP=on(),jT=sn(),ks=$d(),Bp=vo(),oP=ka(),Y_e=lO(),W_e=yV(),Fp=rs(),QT=Ih(),Nr=j(),z_e=hO(),j_e=lT(),Q_e=qO(),J_e=dT(),X_e=VO(),Z_e=KO(),ege=zO(),tge=QO(),aP=ET(),Zo=se(),rge=eK(),cP=lC(),RW=cf(),gn=(H(),v(Y)),yW=hY(),nge=Yd(),AW=(Ad(),v(Dh)),bW=(xT(),v(Tp)),IW=Ot(),Er=kC(),sge=require("alasql"),NW=VT(),wW=bp(),mf=as(),OW=(zd(),v(Wd)),lP=(jC(),v(zC)),uP=(vp(),v(eP)),CW=sP(),{handleHDBError:Hn,hdbErrors:PW}=ge(),{HDB_ERROR_MSGS:Jr,HTTP_STATUS_CODES:Up}=PW,{cleanupOrphanBlobs:ige}=$d(),X=new Map,LW="delete",pc="insert",qs="read",Xl="update",xp="describe",SW=Bp.describeSchema.name,TW=Bp.describeTable.name,DW={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},oge={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},age="catchup",cge="handleGetJob",lge="handleGetJobsByStartDate",JT={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},uge=[ks.createTable.name,ks.createAttribute.name,ks.dropTable.name,ks.dropAttribute.name],MW={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},te=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};X.set(iP.insert.name,new te(!1,[pc]));X.set(iP.update.name,new te(!1,[Xl]));X.set(iP.upsert.name,new te(!1,[pc,Xl]));X.set(jT.searchByConditions.name,new te(!1,[qs]));X.set(jT.searchByHash.name,new te(!1,[qs]));X.set(jT.searchByValue.name,new te(!1,[qs]));X.set(jT.search.name,new te(!1,[qs]));X.set(ks.createSchema.name,new te(!0,[]));X.set(ks.createTable.name,new te(!0,[]));X.set(ks.createAttribute.name,new te(!1,[pc]));X.set(ks.dropSchema.name,new te(!0,[]));X.set(ks.dropTable.name,new te(!0,[]));X.set(ks.dropAttribute.name,new te(!0,[]));X.set(Bp.describeSchema.name,new te(!1,[qs]));X.set(Bp.describeTable.name,new te(!1,[qs]));X.set(oP.deleteRecord.name,new te(!1,[LW]));X.set(Fp.addUser.name,new te(!0,[]));X.set(Fp.alterUser.name,new te(!0,[]));X.set(Fp.dropUser.name,new te(!0,[]));X.set(Fp.listUsersExternal.name,new te(!0,[]));X.set(QT.listRoles.name,new te(!0,[]));X.set(QT.addRole.name,new te(!0,[]));X.set(QT.alterRole.name,new te(!0,[]));X.set(QT.dropRole.name,new te(!0,[]));X.set(z_e.name,new te(!0,[]));X.set(j_e.name,new te(!0,[]));X.set(Q_e.name,new te(!0,[]));X.set(J_e.name,new te(!0,[]));X.set(X_e.name,new te(!0,[]));X.set(Z_e.name,new te(!0,[]));X.set(aP.setRoutes.name,new te(!0,[]));X.set(aP.getRoutes.name,new te(!0,[]));X.set(aP.deleteRoutes.name,new te(!0,[]));X.set(IW.setConfiguration.name,new te(!0,[]));X.set(ege.clusterStatus.name,new te(!0,[]));X.set(tge.name,new te(!0,[]));X.set(cP.getFingerprint.name,new te(!0,[]));X.set(cP.setLicense.name,new te(!0,[]));X.set(oP.deleteFilesBefore.name,new te(!0,[]));X.set(oP.deleteAuditLogsBefore.name,new te(!0,[]));X.set(RW.restart.name,new te(!0,[]));X.set(RW.restartService.name,new te(!0,[]));X.set(Y_e.name,new te(!0,[]));X.set(W_e.name,new te(!0,[qs]));X.set(ige.name,new te(!0,[]));X.set(nge.systemInformation.name,new te(!0,[]));X.set(IW.getConfiguration.name,new te(!0,[]));X.set(NW.readTransactionLog.name,new te(!0,[]));X.set(NW.deleteTransactionLogsBefore.name,new te(!0,[]));X.set(wW.installModules.name,new te(!0,[]));X.set(wW.auditModules.name,new te(!0,[]));X.set(mf.createCsr.name,new te(!0,[]));X.set(mf.signCertificate.name,new te(!0,[]));X.set(mf.listCertificates.name,new te(!0,[]));X.set(mf.addCertificate.name,new te(!0,[]));X.set(mf.removeCertificate.name,new te(!0,[]));X.set(mf.getKey.name,new te(!0,[]));X.set(OW.addNodeBack.name,new te(!0,[]));X.set(OW.removeNodeBack.name,new te(!0,[]));X.set(lP.getOp.name,new te(!1,[qs]));X.set(lP.listMetricsOp.name,new te(!1,[qs]));X.set(lP.describeMetricOp.name,new te(!1,[qs]));X.set(uP.clear.name,new te(!0,[]));X.set(uP.get.name,new te(!0,[]));X.set(uP.set.name,new te(!0,[]));X.set(AW.createTokens.name,new te(!1,[]));X.set(AW.refreshOperationToken.name,new te(!1,[]));X.set(bW.login.name,new te(!1,[]));X.set(bW.logout.name,new te(!1,[]));X.set(Er.customFunctionsStatus.name,new te(!0,[]));X.set(Er.getCustomFunctions.name,new te(!0,[]));X.set(Er.getComponents.name,new te(!0,[]));X.set(Er.getComponentFile.name,new te(!0,[]));X.set(Er.setComponentFile.name,new te(!0,[]));X.set(Er.dropComponent.name,new te(!0,[]));X.set(Er.getCustomFunction.name,new te(!0,[]));X.set(Er.setCustomFunction.name,new te(!0,[]));X.set(Er.dropCustomFunction.name,new te(!0,[]));X.set(Er.addComponent.name,new te(!0,[]));X.set(Er.dropCustomFunctionProject.name,new te(!0,[]));X.set(Er.packageComponent.name,new te(!0,[]));X.set(Er.deployComponent.name,new te(!0,[]));X.set(Er.addSSHKey.name,new te(!0,[]));X.set(Er.updateSSHKey.name,new te(!0,[]));X.set(Er.deleteSSHKey.name,new te(!0,[]));X.set(Er.listSSHKeys.name,new te(!0,[]));X.set(Er.setSSHKnownHosts.name,new te(!0,[]));X.set(Er.getSSHKnownHosts.name,new te(!0,[]));X.set(cP.getRegistrationInfo.name,new te(!1,[]));X.set(Fp.userInfo.name,new te(!1,[]));X.set(Bp.describeAll.name,new te(!1,[]));X.set(cge,new te(!1,[]));X.set(lge,new te(!0,[]));X.set(age,new te(!0,[]));X.set(JT.CSV_DATA_LOAD,new te(!1,[pc,Xl]));X.set(JT.CSV_URL_LOAD,new te(!1,[pc,Xl]));X.set(JT.CSV_FILE_LOAD,new te(!1,[pc,Xl]));X.set(JT.IMPORT_FROM_S3,new te(!1,[pc,Xl]));X.set(MW.EXPORT_TO_S3,new te(!0,[]));X.set(MW.EXPORT_LOCAL,new te(!0,[]));X.set(gn.VALID_SQL_OPS_ENUM.DELETE,new te(!1,[LW]));X.set(gn.VALID_SQL_OPS_ENUM.SELECT,new te(!1,[qs]));X.set(gn.VALID_SQL_OPS_ENUM.INSERT,new te(!1,[pc]));X.set(gn.VALID_SQL_OPS_ENUM.UPDATE,new te(!1,[Xl]));UW.exports={verifyPerms:fge,verifyPermsAst:dge,verifyBulkLoadAttributePerms:hge};function dge(e,t,r){if(Zo.isEmptyOrZeroLength(e))throw Nr.info("verify_perms_ast has an empty user parameter"),Hn(new Error);if(Zo.isEmptyOrZeroLength(t))throw Nr.info("verify_perms_ast has an empty user parameter"),Hn(new Error);if(Zo.isEmptyOrZeroLength(r))throw Nr.info("verify_perms_ast has a null operation parameter"),Hn(new Error);try{let n=new CW,s=new rge(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Nr.info("No schemas defined in verifyPermsAst(), will not continue."),Hn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&DW[r])throw Hn(new Error,Jr.DROP_SYSTEM,Up.FORBIDDEN);if(c&&!l)return null;let u=yW.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof sge.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=vW(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]),_=fP(t.role.permission,m,f[h]);dP(p,_,r,f[h],m,n)}}),n.getPermsResponse())}catch(n){throw Hn(n)}}o(dge,"verifyPermsAst");function fge(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Nr.info("null required parameter in verifyPerms"),Hn(new Error,Jr.DEFAULT_INVALID_REQUEST,Up.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 CW;if(Zo.isEmptyOrZeroLength(e.hdb_user?.role)||Zo.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Nr.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(gn.SYSTEM_SCHEMA_NAME)||s===gn.SYSTEM_SCHEMA_NAME;if(l&&d&&oge[e.operation]&&(i===gn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&DW[r])throw Hn(new Error,Jr.DROP_SYSTEM,Up.FORBIDDEN);if(l&&!d||u===!0&&(r===ks.createSchema.name||r===ks.dropSchema.name))return null;if(uge.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=yW.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===SW||r===TW)&&!f.super_user){if(s===gn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Jr.SCHEMA_PERM_ERROR(s));if(r===SW&&(!f[s]||!f[s][xp]))return c.handleInvalidItem(Jr.SCHEMA_NOT_FOUND(s));if(r===TW&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][xp]))return c.handleInvalidItem(Jr.TABLE_NOT_FOUND(s,i))}let m=vW(e.hdb_user,r,a,c,n);if(m)return m;if(X.get(r)&&X.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&gn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let _=[],g=f[s].tables[i];g[gn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(T=>T[gn.PERMS_CRUD_ENUM.READ]).forEach(T=>{_.push(T.attribute_name)}):_=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=_)}let h=mge(e),p=fP(e.hdb_user?.role?.permission,s,i);return dP(h,p,r,i,s,c,n),c.getPermsResponse()}o(fge,"verifyPerms");function vW(e,t,r,n,s){if(Zo.arrayHasEmptyValues([e,t,r]))throw Nr.info("hasPermissions has an invalid parameter"),Hn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||X.get(t).requires_su))return null;if(!X.get(t))throw Nr.info(`operation ${t} not found.`),Hn(new Error,Jr.OP_NOT_FOUND(t),Up.BAD_REQUEST);if(X.get(t)&&X.get(t).requires_su)return Nr.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][xp]===!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[xp]===!1)n.addInvalidItem(Jr.TABLE_NOT_FOUND(l,d));else try{let m=[],h=X.get(t).perms;!Zo.isEmpty(s)&&h.includes(s)&&(h=[s]);for(let p=0;p<h.length;p++){let _=h[p],g=f[_];(g==null||g===!1)&&(Nr.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 Nr.error(h),Nr.error(m),Hn(PW.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?n.getPermsResponse():null}o(vW,"hasPermissions");function dP(e,t,r,n,s,i,a){if(!e||!t)throw Nr.info("no attributes specified in checkAttributePerms."),Hn(new Error);let c=X.get(r).perms;if(!c||c==="")throw Nr.info(`no permissions found for ${r} in checkAttributePerms().`),Hn(new Error);if(Zo.isEmptyOrZeroLength(t))return Nr.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[xp]===!1){i.addInvalidItem(Jr.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(gn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==qs)throw Hn(new Error,Jr.SYSTEM_TIMESTAMP_PERMS_ERR,Up.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(dP,"checkAttributePerms");function mge(e){let t=new Set;try{if(e.action)return t;if(e.operation===gn.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){Nr.info(r)}return t}o(mge,"getRecordAttributes");function fP(e,t,r){let n=new Map;if(Zo.isEmpty(e))return Nr.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{Nr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(fP,"getAttributePermissions");function hge(e,t,r,n,s,i,a){let c=new Set(i),l=fP(e,n,s);dP(c,l,t,s,n,a,r)}o(hge,"verifyBulkLoadAttributePerms")});var eR=M((jBe,kW)=>{"use strict";kW.exports={evaluateSQL:wge,processAST:HW,convertSQLToAST:FW,checkASTPermissions:BW};var pge=on(),xW=require("util"),Ege=xW.callbackify(pge.insert),_ge=sn().search,gge=mG().update,Sge=xW.callbackify(gge),Tge=pG().convertDelete,Ec=require("alasql"),Rge=XT(),ZT=j(),yge=fg(),Age=se(),Hp=(H(),v(Y)),{hdbErrors:bge,handleHDBError:mP}=ge(),{HTTP_STATUS_CODES:hP}=bge;yge(Ec);var Ige=403,Nge="There was a problem performing this insert. Please check the logs and try again.",pP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function wge(e,t){let r=e.parsed_sql_object;if(!r){r=FW(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ec.yy.Insert?n=s.into.databaseid:s instanceof Ec.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ec.yy.Update||s instanceof Ec.yy.Delete?n=s.table.databaseid:ZT.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ec.yy.Select)&&Age.isEmptyOrZeroLength(n))return t("No schema specified",null)}HW(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(wge,"evaluateSQL");function BW(e,t){let r;try{r=Rge.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(BW,"checkASTPermissions");function FW(e){let t=new pP;if(!e)throw mP(new Error,"The 'sql' parameter is missing from the request body",hP.BAD_REQUEST);try{let r=e.trim(),n=Ec.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
33
- `);throw n[1]?mP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,hP.BAD_REQUEST):mP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",hP.BAD_REQUEST)}return t}o(FW,"convertSQLToAST");function HW(e,t,r){try{let n=Oge;if(!e.bypass_auth&&!t.permissions_checked){let i=BW(e,t);if(i&&i.length>0)return r(Ige,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Hp.VALID_SQL_OPS_ENUM.SELECT:n=_ge,s=t.ast.statements[0];break;case Hp.VALID_SQL_OPS_ENUM.INSERT:n=Cge;break;case Hp.VALID_SQL_OPS_ENUM.UPDATE:n=Sge;break;case Hp.VALID_SQL_OPS_ENUM.DELETE:n=Tge;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(HW,"processAST");function Oge(e,t){ZT.info(e),t("unknown sql statement")}o(Oge,"nullFunction");function Cge({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=Pge(i,e.values)}catch(a){return r(a)}Ege(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){ZT.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(Cge,"convertInsert");function Pge(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]]=Ec.compile(`SELECT ${s.toString()} AS [${Hp.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw ZT.error(r),new Error(Nge)}}o(Pge,"createDataObjects")});var RP=M((ZBe,VW)=>{var sR=require("clone"),iR=nt(),Lge=se(),rR=(H(),v(Y)),JBe=j(),EP=require("fs"),gP=require("joi"),{string:nR}=gP.types(),{hdbErrors:Dge,handleHDBError:tR}=ge(),{HDB_ERROR_MSGS:XBe,HTTP_STATUS_CODES:_P}=Dge,{commonValidators:hf}=qi(),qW=" is required",Mge=["insert","update","upsert"],SP={database:{presence:!1,format:hf.schema_format,length:hf.schema_length},schema:{presence:!1,format:hf.schema_format,length:hf.schema_length},table:{presence:!0,format:hf.schema_format,length:hf.schema_length},action:{inclusion:{within:Mge,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},vge={schema:nR.required(),table:nR.required(),action:nR.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Uge,AWS_SECRET:xge,AWS_BUCKET:Bge,AWS_FILE_KEY:Fge,REGION:Hge}=rR.S3_BUCKET_AUTH_KEYS,kge={s3:{presence:!0},[`s3.${Uge}`]:{presence:!0,type:"String"},[`s3.${xge}`]:{presence:!0,type:"String"},[`s3.${Bge}`]:{presence:!0,type:"String"},[`s3.${Fge}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Hge}`]:{presence:!0,type:"String"}},GW=sR(SP);GW.data.presence={message:qW};var $W=sR(SP);$W.file_path.presence={message:qW};var qge=Object.assign(sR(SP),kge),TP=sR(vge);TP.csv_url=nR.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();TP.passthrough_headers=gP.object();function Gge(e){let t=iR.validateObject(e,GW);return oR(e,t)}o(Gge,"dataObject");function $ge(e){let t=iR.validateBySchema(e,gP.object(TP));return oR(e,t)}o($ge,"urlObject");function Vge(e){let t=iR.validateObject(e,$W);return oR(e,t)}o(Vge,"fileObject");function Kge(e){let t=iR.validateObject(e,qge);return oR(e,t)}o(Kge,"s3FileObject");function oR(e,t){if(!t){let r=Lge.checkGlobalSchemaTable(e.schema,e.table);if(r)return tR(new Error,r,_P.BAD_REQUEST);if(e.operation===rR.OPERATIONS_ENUM.CSV_FILE_LOAD)try{EP.accessSync(e.file_path,EP.constants.R_OK|EP.constants.F_OK)}catch(n){return n.code===rR.NODE_ERROR_CODES.ENOENT?tR(n,`No such file or directory ${n.path}`,_P.BAD_REQUEST):n.code===rR.NODE_ERROR_CODES.EACCES?tR(n,`Permission denied ${n.path}`,_P.BAD_REQUEST):tR(n)}}return t}o(oR,"postValidateChecks");VW.exports={dataObject:Gge,urlObject:$ge,fileObject:Vge,s3FileObject:Kge}});var yP=M((tFe,KW)=>{"use strict";var kp=j(),aR=(H(),v(Y));async function Yge(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===aR.OPERATIONS_ENUM.INSERT||t.operation===aR.OPERATIONS_ENUM.UPDATE||t.operation===aR.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===aR.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(kp.info(i.message),i):i.http_resp_msg?(kp.error(`Error calling operation: ${e.name}`),kp.error(i.http_resp_msg),i):(kp.error(`Error calling operation: ${e.name}`),kp.error(i),i)}}o(Yge,"callOperationFunctionAsAwait");KW.exports={callOperationFunctionAsAwait:Yge}});var AP=M((nFe,WW)=>{"use strict";var{S3:Wge,GetObjectCommand:zge}=require("@aws-sdk/client-s3");WW.exports={getFileStreamFromS3:jge,getS3AuthObj:YW};async function jge(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await YW(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new zge(r))).Body}o(jge,"getFileStreamFromS3");function YW(e,t,r){return new Wge({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(YW,"getS3AuthObj")});var jW=M((iFe,zW)=>{"use strict";var bP=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}},IP=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};zW.exports={BulkLoadFileObject:bP,BulkLoadDataObject:IP}});var wP=M((aFe,QW)=>{"use strict";var NP=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};QW.exports=NP});var MP=M((mFe,mz)=>{"use strict";var cR=on(),uR=RP(),Qge=require("needle"),yi=(H(),v(Y)),lFe=mt(),pf=se(),{handleHDBError:Zt,hdbErrors:iz}=ge(),{HTTP_STATUS_CODES:Xr,HDB_ERROR_MSGS:wr,CHECK_LOGS_WRAPPER:eu}=iz,Ef=j(),OP=require("papaparse");pf.promisifyPapaParse();var Ai=require("fs-extra"),Jge=require("path"),{chain:JW}=require("stream-chain"),XW=require("stream-json/streamers/StreamArray"),ZW=require("stream-json/utils/Batch"),ez=require("stream-chain/utils/comp"),{finished:tz}=require("stream"),Xge=oe(),oz=yP(),Zge=AP(),{BulkLoadFileObject:PP,BulkLoadDataObject:eSe}=jW(),LP=sP(),{verifyBulkLoadAttributePerms:az}=XT(),uFe=wP(),dFe=Gt(),fFe=Ki(),{databases:tSe}=(Me(),v(_t)),{coerceType:rSe}=(B_(),v(Gk)),rz="No records parsed from csv file.",Zl=`${Xge.get("HDB_ROOT")}/tmp`,{schemaRegex:nSe}=qi(),nz=1024*1024*2,sz=5e3,sSe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};mz.exports={csvDataLoad:iSe,csvURLLoad:oSe,csvFileLoad:aSe,importFromS3:cSe};async function iSe(e,t){let r=uR.dataObject(e);if(r)throw Zt(r,r.message,Xr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=uz(e.schema,e.table),i=OP.parse(e.data,{header:!0,skipEmptyLines:!0,transform:CP.bind(null,s),dynamicTyping:!1}),a=new LP;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&az(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,Xr.BAD_REQUEST,void 0,void 0,!0);let l=new eSe(e.action,e.schema,e.table,i.data);return n=await oz.callOperationFunctionAsAwait(dz,l,null),n.message===rz?rz:fz(n.records,n.number_written)}catch(s){throw tu(s)}}o(iSe,"csvDataLoad");async function oSe(e){let t=uR.urlObject(e);if(t)throw Zt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Zl}/${r}`;try{await lSe(e,r)}catch(s){throw Ef.error(wr.DOWNLOAD_FILE_ERR(r)+" - "+s),Zt(s,eu(wr.DOWNLOAD_FILE_ERR(r)))}try{let s=new PP(this.job_operation_function.name,e.action,e.schema,e.table,n,yi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await DP(s);return await lR(n),i}catch(s){throw await lR(n),tu(s)}}o(oSe,"csvURLLoad");async function aSe(e){let t=uR.fileObject(e);if(t)throw Zt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r=new PP(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,yi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await DP(r)}catch(n){throw tu(n)}}o(aSe,"csvFileLoad");async function cSe(e){let t=uR.s3FileObject(e);if(t)throw Zt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Jge.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Zl}/${s}`;let i=new PP(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await uSe(s,e);let a=await DP(i);return await lR(r),a}catch(n){throw await lR(r),tu(n)}}o(cSe,"importFromS3");async function lSe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Qge("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,yi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}fSe(r,e.csv_url),await dSe(t,r.raw)}o(lSe,"downloadCSVFile");async function uSe(e,t){try{let r=`${Zl}/${e}`;await Ai.mkdirp(Zl),await Ai.writeFile(`${Zl}/${e}`,"",{flag:"a+"});let n=await Ai.createWriteStream(r),s=await Zge.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(wr.S3_DOWNLOAD_ERR+" - "+r),Zt(r,eu(wr.S3_DOWNLOAD_ERR))}}o(uSe,"downloadFileFromS3");async function dSe(e,t){try{await Ai.mkdirp(Zl),await Ai.writeFile(`${Zl}/${e}`,t)}catch(r){throw Ef.error(wr.WRITE_TEMP_FILE_ERR),Zt(r,eu(wr.DEFAULT_BULK_LOAD_ERR))}}o(dSe,"writeFileToTempFolder");async function lR(e){if(e)try{await Ai.access(e),await Ai.unlink(e)}catch{Ef.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(lR,"deleteTempFile");function fSe(e,t){if(e.statusCode!==iz.HTTP_STATUS_CODES.OK)throw Zt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Xr.BAD_REQUEST);if(!sSe[e.headers["content-type"]])throw Zt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Xr.BAD_REQUEST);if(!e.raw)throw Zt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Xr.BAD_REQUEST)}o(fSe,"validateURLResponse");async function DP(e){try{let t;switch(e.file_type){case yi.VALID_S3_FILE_TYPES.CSV:t=await mSe(e);break;case yi.VALID_S3_FILE_TYPES.JSON:t=await hSe(e);break;default:throw Zt(new Error,wr.DEFAULT_BULK_LOAD_ERR,Xr.BAD_REQUEST,yi.LOG_LEVELS.ERROR,wr.INVALID_FILE_EXT_ERR(e))}return fz(t.records,t.number_written)}catch(t){throw tu(t)}}o(DP,"fileLoad");async function cz(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 cR.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&az(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(cz,"validateChunk");async function lz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;pf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!pf.isEmpty(c)&&!pf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await oz.callOperationFunctionAsAwait(dz,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Zt(c,eu(wr.INSERT_CSV_ERR),Xr.INTERNAL_SERVER_ERROR,yi.LOG_LEVELS.ERROR,wr.INSERT_CSV_ERR+" - "+c);r(l)}}o(lz,"insertChunk");async function mSe(e){let t={records:0,number_written:0},r=uz(e.schema,e.table);try{let n=new LP,s=Ai.createReadStream(e.file_path,{highWaterMark:nz});s.setEncoding("utf8"),await OP.parsePromise(s,cz.bind(null,e,n),CP.bind(null,r));let i=n.getPermsResponse();if(i)throw Zt(new Error,i,Xr.BAD_REQUEST);return s=Ai.createReadStream(e.file_path,{highWaterMark:nz}),s.setEncoding("utf8"),await OP.parsePromise(s,lz.bind(null,e,t),CP.bind(null,r)),s.destroy(),t}catch(n){throw Zt(n,eu(wr.PAPA_PARSE_ERR),Xr.INTERNAL_SERVER_ERROR,yi.LOG_LEVELS.ERROR,wr.PAPA_PARSE_ERR+n)}}o(mSe,"callPapaParse");function uz(e,t){let r=tSe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>rSe(i,s));return n}o(uz,"createTransformMap");function CP(e,t,r){let n=e.get(r);return n?n(t):pf.autoCast(t)}o(CP,"typeFunction");async function hSe(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new LP,s=JW([Ai.createReadStream(e.file_path,{encoding:"utf-8"}),XW.withParser(),c=>c.value,new ZW({batchSize:sz}),ez(async c=>{await cz(e,n,r,c)})]);await new Promise((c,l)=>{tz(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Zt(new Error,i,Xr.BAD_REQUEST);let a=JW([Ai.createReadStream(e.file_path,{encoding:"utf-8"}),XW.withParser(),c=>c.value,new ZW({batchSize:sz}),ez(async c=>{await lz(e,t,r,c)})]);return await new Promise((c,l)=>{tz(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Zt(n,eu(wr.INSERT_JSON_ERR),Xr.INTERNAL_SERVER_ERROR,yi.LOG_LEVELS.ERROR,wr.INSERT_JSON_ERR+n)}}o(hSe,"insertJson");async function dz(e){let t={};try{e.data&&e.data.length>0&&pSe(e.data[0])?t=await ESe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ef.info(t.message))}catch(r){throw tu(r)}return t}o(dz,"callBulkFileLoad");function pSe(e){let t=Object.keys(e);for(let r of t)if(!nSe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(pSe,"validateColumnNames");async function ESe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=cR.insert;break;case"update":i=cR.update;break;case"upsert":i=cR.upsert;break;default:throw Zt(new Error,wr.INVALID_ACTION_PARAM_ERR(n),Xr.BAD_REQUEST,yi.LOG_LEVELS.ERROR,wr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=pf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw tu(a)}}o(ESe,"bulkFileLoad");function fz(e,t){return`successfully loaded ${t} of ${e} records`}o(fz,"buildResponseMsg");function tu(e){return Zt(e,eu(wr.DEFAULT_BULK_LOAD_ERR),Xr.INTERNAL_SERVER_ERROR,yi.LOG_LEVELS.ERROR,wr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(tu,"buildTopLevelErrMsg")});var xP=M((pFe,Rz)=>{"use strict";var UP=sn(),_Se=AP(),{AsyncParser:gSe}=require("json2csv"),dR=require("stream"),fs=se(),vP=require("fs-extra"),SSe=require("path"),Gs=j(),{promisify:Ez}=require("util"),qp=se(),{handleHDBError:_r,hdbErrors:TSe}=ge(),{HDB_ERROR_MSGS:kn,HTTP_STATUS_CODES:gr}=TSe,{streamAsJSON:RSe}=(CA(),v(Vv)),{Upload:ySe}=require("@aws-sdk/lib-storage"),{toCsvStream:ASe}=(yo(),v(eU)),hz=["search_by_value","search_by_hash","sql","search_by_conditions"],pz=["json","csv"],_z="json",gz="csv",bSe="Successfully exported JSON locally.",ISe="Successfully exported CSV locally.",NSe=1e3,wSe=UP.searchByHash,OSe=UP.searchByValue,CSe=Ez(dR.finished);Rz.exports={export_to_s3:MSe,export_local:PSe};async function PSe(e){Gs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Sz(e);if(!fs.isEmpty(t))throw Gs.error(t),_r(new Error,t,gr.BAD_REQUEST,void 0,void 0,!0);if(fs.isEmpty(e.path))throw Gs.error(kn.MISSING_VALUE("path")),_r(new Error,kn.MISSING_VALUE("path"),gr.BAD_REQUEST,void 0,void 0,!0);let r=(fs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(SSe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=fs.buildFolderPath(e.path,r);await LSe(e.path);let s=await Tz(e);return await DSe(n,e.format,s)}o(PSe,"export_local");async function LSe(e){if(Gs.trace("in confirmPath"),fs.isEmptyOrZeroLength(e))throw _r(new Error,`Invalid path: ${e}`,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await vP.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,Gs.error(n),_r(new Error,n,gr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Gs.error(r),_r(new Error,r,gr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(LSe,"confirmPath");async function DSe(e,t,r){if(Gs.trace("in saveToLocal"),qp.isEmptyOrZeroLength(e))throw _r(new Error,kn.INVALID_VALUE("file_path"),gr.BAD_REQUEST,void 0,void 0,!0);if(qp.isEmptyOrZeroLength(t))throw _r(new Error,kn.INVALID_VALUE("Source format"),gr.BAD_REQUEST,void 0,void 0,!0);if(qp.isEmpty(r))throw _r(new Error,kn.NOT_FOUND("Data"),gr.BAD_REQUEST,void 0,void 0,!0);if(t===_z){let n=vP.createWriteStream(e);return RSe(r).pipe(n),await CSe(n),{message:bSe,path:e}}else if(t===gz){let n=vP.createWriteStream(e),s=dR.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new gSe(i,c).fromInput(s).toOutput(n).promise(!1),{message:ISe,path:e}}throw _r(new Error,kn.INVALID_VALUE("format"),gr.BAD_REQUEST)}o(DSe,"saveToLocal");async function MSe(e){if(!e.s3||Object.keys(e.s3).length===0)throw _r(new Error,kn.MISSING_VALUE("S3 object"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw _r(new Error,kn.MISSING_VALUE("aws_access_key_id"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw _r(new Error,kn.MISSING_VALUE("aws_secret_access_key"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.bucket))throw _r(new Error,kn.MISSING_VALUE("bucket"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.key))throw _r(new Error,kn.MISSING_VALUE("key"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.region))throw _r(new Error,kn.MISSING_VALUE("region"),gr.BAD_REQUEST);let t=Sz(e);if(!fs.isEmpty(t))throw _r(new Error,t,gr.BAD_REQUEST);Gs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Tz(e)}catch(l){throw Gs.error(l),l}let n,s=await _Se.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new dR.PassThrough;if(e.format===gz){i=e.s3.key+".csv";let l=ASe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===_z){i=e.s3.key+".json";let l=new dR.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%NSe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw _r(new Error,kn.INVALID_VALUE("format"),gr.BAD_REQUEST);return new ySe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(MSe,"export_to_s3");function Sz(e){if(Gs.trace("in exportCoreValidation"),fs.isEmpty(e.format))return"format missing";if(pz.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${pz.join(", ")}`;let t=e.search_operation.operation;if(fs.isEmpty(t))return"search_operation.operation missing";if(hz.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${hz.join(", ")}`}o(Sz,"exportCoreValidation");async function Tz(e){Gs.trace("in getRecords");let t,r;if(qp.isEmpty(e.search_operation)||qp.isEmptyOrZeroLength(e.search_operation.operation))throw _r(new Error,kn.INVALID_VALUE("Search operation"),gr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=OSe;break;case"search_by_hash":t=wSe;break;case"search_by_conditions":t=UP.searchByConditions;break;case"sql":{let n=eR();t=Ez(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Gs.error(r),_r(new Error,r,gr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(Tz,"getRecords")});var Az=M((_Fe,yz)=>{"use strict";var BP=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};yz.exports=BP});var Nz=M((SFe,Iz)=>{"use strict";var vSe=(H(),v(Y)),bz=require("moment"),USe=require("uuid").v4,FP=class{static{o(this,"JobObject")}constructor(){this.id=USe(),this.type=void 0,this.start_datetime=bz().valueOf(),this.created_datetime=bz().valueOf(),this.end_datetime=void 0,this.status=vSe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Iz.exports=FP});var HP=M((RFe,vz)=>{"use strict";var xSe=require("uuid").v4,Lz=on(),Dz=sn(),BSe=ci(),FSe=zu(),HSe=Az(),Dt=(H(),v(Y)),kSe=Nz(),qSe=Ch(),bi=j(),GSe=im(),_f=se(),{promisify:$Se}=require("util"),ru=require("moment"),VSe=eR(),fR=RP(),wz=qI(),{deleteTransactionLogsBeforeValidator:KSe}=$C(),{handleHDBError:Oz,hdbErrors:YSe,ClientError:WSe}=ge(),{HTTP_STATUS_CODES:Cz}=YSe,Pz=Dz.searchByValue,zSe=Dz.searchByHash,jSe=Lz.insert,QSe=$Se(VSe.evaluateSQL),JSe=Lz.update;vz.exports={addJob:eTe,updateJob:rTe,handleGetJob:XSe,handleGetJobsByStartDate:ZSe,getJobById:Mz};async function XSe(e){if(e.id===void 0)throw new WSe("'id' is required");let t=await Mz(e.id);return _f.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(XSe,"handleGetJob");async function ZSe(e){try{let t=await tTe(e);if(bi.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=ru(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=ru(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 bi.error(r),new Error(r)}}o(ZSe,"handleGetJobsByStartDate");async function eTe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||_f.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return bi.info(d),t.error=d,t}if(!Dt.JOB_TYPE_ENUM[e.operation])return bi.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Dt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=fR.fileObject(e);break;case Dt.OPERATIONS_ENUM.CSV_URL_LOAD:n=fR.urlObject(e);break;case Dt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=fR.dataObject(e);break;case Dt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=fR.s3FileObject(e);break;case Dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=wz(e,"date");break;case Dt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=wz(e,"timestamp");break;case Dt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=KSe(e);break;case Dt.OPERATIONS_ENUM.RESTART_SERVICE:if(Dt.HDB_PROCESS_SERVICES[e.service]===void 0)throw Oz(new Error,"Invalid service",Cz.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw Oz(n,n.message,Cz.BAD_REQUEST,void 0,void 0,!0);let s=new kSe;s.type=e.operation===Dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new BSe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await Pz(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return bi.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=xSe();try{a=await Pz(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return bi.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return bi.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new GSe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await jSe(l)}catch(d){return bi.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,bi.trace(d)}return t}o(eTe,"addJob");async function tTe(e){let t=ru(e.from_date,ru.ISO_8601),r=ru(e.to_date,ru.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 HSe(n,e.hdb_user);try{return await QSe(s)}catch(i){throw bi.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(tTe,"getJobsInDateRange");async function Mz(e){if(_f.isEmptyOrZeroLength(e))return _f.errorizeMessage("Invalid job ID specified.");let t=new FSe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await zSe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return bi.error(n),_f.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(Mz,"getJobById");async function rTe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(_f.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Dt.JOB_STATUS_ENUM.COMPLETE||e.status===Dt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=ru().valueOf());let t=new qSe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await JSe(t),r}o(rTe,"updateJob")});var Gz=M((AFe,qz)=>{"use strict";var Uz=se(),Or=(H(),v(Y)),nTe=require("moment"),mR=MP(),Gp=j(),xz=HP(),Bz=xP(),Fz=ka(),Hz=ze(),sTe=VT(),iTe=cf(),{parentPort:oTe,isMainThread:kz}=require("worker_threads"),{onMessageByType:aTe}=ze(),kP=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function cTe(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(Uz.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Uz.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Or.JOB_TYPE_ENUM.csv_file_load:await so(e,mR.csvFileLoad);break;case Or.JOB_TYPE_ENUM.csv_url_load:await so(e,mR.csvURLLoad);break;case Or.JOB_TYPE_ENUM.csv_data_load:await so(e,mR.csvDataLoad);break;case Or.JOB_TYPE_ENUM.import_from_s3:await so(e,mR.importFromS3);break;case Or.JOB_TYPE_ENUM.empty_trash:break;case Or.JOB_TYPE_ENUM.export_local:await so(e,Bz.export_local);break;case Or.JOB_TYPE_ENUM.export_to_s3:await so(e,Bz.export_to_s3);break;case Or.JOB_TYPE_ENUM.delete_files_before:case Or.JOB_TYPE_ENUM.delete_records_before:await so(e,Fz.deleteFilesBefore);break;case Or.JOB_TYPE_ENUM.delete_audit_logs_before:await so(e,Fz.deleteAuditLogsBefore);break;case Or.JOB_TYPE_ENUM.delete_transaction_logs_before:await so(e,sTe.deleteTransactionLogsBefore);break;case Or.JOB_TYPE_ENUM.restart_service:return await so(e,iTe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(cTe,"parseMessage");async function so(e,t){try{e.job.status=Or.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=nTe().valueOf(),await xz.updateJob(e.job),await lTe(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):Gp.error(`There was an error running ${t.name} job with id ${e.job.id}`),Gp.error(n),e.job.message=n,e.job.status=Or.JOB_STATUS_ENUM.ERROR;try{await xz.updateJob(e.job)}catch(s){throw Gp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(so,"runJob");async function lTe(e){Gp.trace("launching job thread:",e),kz?Hz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):oTe.postMessage({type:Or.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(lTe,"launchJobThread");kz&&aTe(Or.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Hz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){Gp.error(r)}});qz.exports={parseMessage:cTe,RunnerMessage:kP}});var Vz=M((IFe,$z)=>{"use strict";var uTe=se(),qP=oe(),_c=(H(),v(Y)),dTe=mt(),fTe=Gt(),io=j(),mTe=wP(),hTe=Ki();qP.initSync();$z.exports={postOperationHandler:ETe,sendOperationTransaction:$p};async function $p(e,t,r,n){if(e.schema===_c.SYSTEM_SCHEMA_NAME)return;let s=pTe(e,t,r);s&&(io.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await fTe.publishToStream(`${dTe.SUBJECT_PREFIXES.TXN}.${e.schema}`,hTe.createNatsTableStreamName(e.schema,e.table),n,s))}o($p,"sendOperationTransaction");function pTe(e,t,r){if(uTe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===_c.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(pTe,"convertCRUDOperationToTransaction");async function ETe(e,t,r){if(!qP.get(_c.CONFIG_PARAMS.CLUSTERING_ENABLED))return;io.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=qP.get(_c.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new mTe(t.txn_time,n,s);switch(e.operation){case _c.OPERATIONS_ENUM.INSERT:try{await $p(e,t.inserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for insert."),io.error(a)}break;case _c.OPERATIONS_ENUM.DELETE:try{await $p(e,t.deleted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for delete."),io.error(a)}break;case _c.OPERATIONS_ENUM.UPDATE:try{await $p(e,t.update_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for update."),io.error(a)}break;case _c.OPERATIONS_ENUM.UPSERT:try{await $p(e,t.upserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for upsert."),io.error(a)}break;default:break}return t}o(ETe,"postOperationHandler")});var J,Kz=ce(()=>{J=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 qC={};we(qC,{chooseOperation:()=>uj,executeJob:()=>$s,getOperationFunction:()=>dj,operation:()=>QP,processLocalTransaction:()=>lj});async function lj(e,t){try{if(e.body.operation!=="read_log"&&(Wp.default.log_level===jf.INFO||Wp.default.log_level===jf.DEBUG||Wp.default.log_level===jf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;Sn.info(c)}}catch(n){Sn.error(n)}let r=await aj.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return STe[e.body.operation]&&nj.default.setSchemaDataToGlobal(n=>{n&&Sn.error(n)}),r}function uj(e){let t;try{t=dj(e)}catch(s){throw Sn.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=ER.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=ER.default.checkASTPermissions(e,i);if(a)throw Sn.error(`${Yz.FORBIDDEN} from operation ${e.operation}`),Sn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Vs.handleHDBError)(new Error,a,Vs.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=rj.default.verifyPerms(i,s);if(a)throw Sn.error(`${Yz.FORBIDDEN} from operation ${e.operation}`),Sn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Vs.handleHDBError)(new Error,a,Vs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Vs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function dj(e){if(Sn.trace(`getOperationFunction with operation: ${e.operation}`),Wz.has(e.operation))return Wz.get(e.operation);throw(0,Vs.handleHDBError)(new Error,Vs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Vs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function QP(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=uj(e);return lj({body:e},n)}async function TTe(e){Sn.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[oA]=!0;let a;switch(i.operation){case G.INSERT:a=await su.default.insert(i);break;case G.UPDATE:a=await su.default.update(i);break;case G.UPSERT:a=await su.default.upsert(i);break;case G.DELETE:a=await Tf.default.deleteRecord(i);break;default:Sn.warn("invalid operation in catchup");break}await cj.transactToClusteringUtils.postOperationHandler(i,a,e)}catch(a){Sn.info("Invalid operation in transaction"),Sn.error(a)}}async function $s(e){(0,oj.transformReq)(e);let t,r;try{if(r=await _R.default.addJob(e),r){t=r.createdJob,Sn.info("addJob result",r);let n=new KP.default.RunnerMessage(t,e);return{message:await KP.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 Sn.error(i),(0,Vs.handleHDBError)(n,i)}}function RTe(){let e=new Map;return e.set(G.INSERT,new J(su.default.insert)),e.set(G.UPDATE,new J(su.default.update)),e.set(G.UPSERT,new J(su.default.upsert)),e.set(G.SEARCH_BY_CONDITIONS,new J(Sf.default.searchByConditions)),e.set(G.SEARCH_BY_HASH,new J(Sf.default.searchByHash)),e.set(G.SEARCH_BY_ID,new J(Sf.default.searchByHash)),e.set(G.SEARCH_BY_VALUE,new J(Sf.default.searchByValue)),e.set(G.SEARCH,new J(_Te)),e.set(G.SQL,new J(gTe)),e.set(G.CSV_DATA_LOAD,new J($s,Vp.default.csvDataLoad)),e.set(G.CSV_FILE_LOAD,new J($s,Vp.default.csvFileLoad)),e.set(G.CSV_URL_LOAD,new J($s,Vp.default.csvURLLoad)),e.set(G.IMPORT_FROM_S3,new J($s,Vp.default.importFromS3)),e.set(G.CREATE_SCHEMA,new J(Ii.default.createSchema)),e.set(G.CREATE_DATABASE,new J(Ii.default.createSchema)),e.set(G.CREATE_TABLE,new J(Ii.default.createTable)),e.set(G.CREATE_ATTRIBUTE,new J(Ii.default.createAttribute)),e.set(G.DROP_SCHEMA,new J(Ii.default.dropSchema)),e.set(G.DROP_DATABASE,new J(Ii.default.dropSchema)),e.set(G.DROP_TABLE,new J(Ii.default.dropTable)),e.set(G.DROP_ATTRIBUTE,new J(Ii.default.dropAttribute)),e.set(G.DESCRIBE_SCHEMA,new J(Kp.default.describeSchema)),e.set(G.DESCRIBE_DATABASE,new J(Kp.default.describeSchema)),e.set(G.DESCRIBE_TABLE,new J(Kp.default.describeTable)),e.set(G.DESCRIBE_ALL,new J(Kp.default.describeAll)),e.set(G.DELETE,new J(Tf.default.deleteRecord)),e.set(G.ADD_USER,new J(gf.default.addUser)),e.set(G.ALTER_USER,new J(gf.default.alterUser)),e.set(G.DROP_USER,new J(gf.default.dropUser)),e.set(G.LIST_USERS,new J(gf.default.listUsersExternal)),e.set(G.LIST_ROLES,new J(Yp.default.listRoles)),e.set(G.ADD_ROLE,new J(Yp.default.addRole)),e.set(G.ALTER_ROLE,new J(Yp.default.alterRole)),e.set(G.DROP_ROLE,new J(Yp.default.dropRole)),e.set(G.USER_INFO,new J(gf.default.userInfo)),e.set(G.READ_LOG,new J(jz.default)),e.set(G.ADD_NODE,new J(Qz.default)),e.set(G.UPDATE_NODE,new J(GP.default)),e.set(G.SET_NODE_REPLICATION,new J(GP.default)),e.set(G.REMOVE_NODE,new J(Jz.default)),e.set(G.CONFIGURE_CLUSTER,new J(Xz.default)),e.set(G.PURGE_STREAM,new J(Zz.default)),e.set(G.SET_CONFIGURATION,new J(YP.default.setConfiguration)),e.set(G.CLUSTER_STATUS,new J(ej.default.clusterStatus)),e.set(G.CLUSTER_NETWORK,new J(tj.default)),e.set(G.CLUSTER_SET_ROUTES,new J(hR.default.setRoutes)),e.set(G.CLUSTER_GET_ROUTES,new J(hR.default.getRoutes)),e.set(G.CLUSTER_DELETE_ROUTES,new J(hR.default.deleteRoutes)),e.set(G.EXPORT_TO_S3,new J($s,$P.default.export_to_s3)),e.set(G.CREATE_CSR,new J(nu.default.createCsr)),e.set(G.SIGN_CERTIFICATE,new J(nu.default.signCertificate)),e.set(G.LIST_CERTIFICATES,new J(nu.default.listCertificates)),e.set(G.ADD_CERTIFICATES,new J(nu.default.addCertificate)),e.set(G.REMOVE_CERTIFICATE,new J(nu.default.removeCertificate)),e.set(G.GET_KEY,new J(nu.default.getKey)),e.set(G.ADD_NODE_BACK,new J(UO)),e.set(G.REMOVE_NODE_BACK,new J(xO)),e.set(G.DELETE_FILES_BEFORE,new J($s,Tf.default.deleteFilesBefore)),e.set(G.DELETE_RECORDS_BEFORE,new J($s,Tf.default.deleteFilesBefore)),e.set(G.EXPORT_LOCAL,new J($s,$P.default.export_local)),e.set(G.SEARCH_JOBS_BY_START_DATE,new J(_R.default.handleGetJobsByStartDate)),e.set(G.GET_JOB,new J(_R.default.handleGetJob)),e.set(G.GET_FINGERPRINT,new J(pR.default.getFingerprint)),e.set(G.SET_LICENSE,new J(pR.default.setLicense)),e.set(G.GET_REGISTRATION_INFO,new J(pR.default.getRegistrationInfo)),e.set(G.RESTART,new J(VP.default.restart)),e.set(G.RESTART_SERVICE,new J($s,VP.default.restartService)),e.set(G.CATCHUP,new J(TTe)),e.set(G.SYSTEM_INFORMATION,new J(sj.default.systemInformation)),e.set(G.DELETE_AUDIT_LOGS_BEFORE,new J($s,Tf.default.deleteAuditLogsBefore)),e.set(G.READ_AUDIT_LOG,new J(zz.default)),e.set(G.CREATE_AUTHENTICATION_TOKENS,new J(fw)),e.set(G.REFRESH_OPERATION_TOKEN,new J(mw)),e.set(G.LOGIN,new J(MC)),e.set(G.LOGOUT,new J(vC)),e.set(G.GET_CONFIGURATION,new J(YP.default.getConfiguration)),e.set(G.CUSTOM_FUNCTIONS_STATUS,new J(Mt.default.customFunctionsStatus)),e.set(G.GET_CUSTOM_FUNCTIONS,new J(Mt.default.getCustomFunctions)),e.set(G.GET_COMPONENT_FILE,new J(Mt.default.getComponentFile)),e.set(G.GET_COMPONENTS,new J(Mt.default.getComponents)),e.set(G.SET_COMPONENT_FILE,new J(Mt.default.setComponentFile)),e.set(G.DROP_COMPONENT,new J(Mt.default.dropComponent)),e.set(G.GET_CUSTOM_FUNCTION,new J(Mt.default.getCustomFunction)),e.set(G.SET_CUSTOM_FUNCTION,new J(Mt.default.setCustomFunction)),e.set(G.DROP_CUSTOM_FUNCTION,new J(Mt.default.dropCustomFunction)),e.set(G.ADD_CUSTOM_FUNCTION_PROJECT,new J(Mt.default.addComponent)),e.set(G.ADD_COMPONENT,new J(Mt.default.addComponent)),e.set(G.DROP_CUSTOM_FUNCTION_PROJECT,new J(Mt.default.dropCustomFunctionProject)),e.set(G.PACKAGE_CUSTOM_FUNCTION_PROJECT,new J(Mt.default.packageComponent)),e.set(G.PACKAGE_COMPONENT,new J(Mt.default.packageComponent)),e.set(G.DEPLOY_CUSTOM_FUNCTION_PROJECT,new J(Mt.default.deployComponent)),e.set(G.DEPLOY_COMPONENT,new J(Mt.default.deployComponent)),e.set(G.READ_TRANSACTION_LOG,new J(WP.default.readTransactionLog)),e.set(G.DELETE_TRANSACTION_LOGS_BEFORE,new J($s,WP.default.deleteTransactionLogsBefore)),e.set(G.INSTALL_NODE_MODULES,new J(zP.default.installModules)),e.set(G.AUDIT_NODE_MODULES,new J(zP.default.auditModules)),e.set(G.GET_BACKUP,new J(Ii.default.getBackup)),e.set(G.CLEANUP_ORPHAN_BLOBS,new J(Ii.default.cleanupOrphanBlobs)),e.set(G.ADD_SSH_KEY,new J(Mt.default.addSSHKey)),e.set(G.UPDATE_SSH_KEY,new J(Mt.default.updateSSHKey)),e.set(G.DELETE_SSH_KEY,new J(Mt.default.deleteSSHKey)),e.set(G.LIST_SSH_KEYS,new J(Mt.default.listSSHKeys)),e.set(G.SET_SSH_KNOWN_HOSTS,new J(Mt.default.setSSHKnownHosts)),e.set(G.GET_SSH_KNOWN_HOSTS,new J(Mt.default.getSSHKnownHosts)),e.set(G.GET_ANALYTICS,new J(KC)),e.set(G.LIST_METRICS,new J(YC)),e.set(G.DESCRIBE_METRIC,new J(WC)),e.set(G.GET_STATUS,new J(XC)),e.set(G.SET_STATUS,new J(ZC)),e.set(G.CLEAR_STATUS,new J(JC)),e}var Sf,ER,Vp,Ii,Kp,Tf,zz,gf,Yp,Mt,Wp,jz,Qz,GP,Jz,Xz,Zz,ej,tj,hR,$P,rj,_R,Vs,pR,VP,jP,su,nj,sj,KP,YP,WP,zP,ij,oj,nu,aj,cj,Yz,Sn,_Te,gTe,STe,Wz,GC=ce(()=>{Sf=w(sn()),ER=w(eR()),Vp=w(MP()),Ii=w($d()),Kp=w(vo()),Tf=w(ka()),zz=w(lO()),gf=w(rs()),Yp=w(Ih()),Mt=w(kC()),Wp=w(j()),jz=w(hO()),Qz=w(lT()),GP=w(qO()),Jz=w(dT()),Xz=w(VO()),Zz=w(KO()),ej=w(zO()),tj=w(QO()),hR=w(ET()),$P=w(xP()),rj=w(XT()),_R=w(HP());H();Vs=w(ge()),pR=w(lC()),VP=w(cf()),jP=w(require("util")),su=w(on()),nj=w(ws()),sj=w(Yd()),KP=w(Gz());Ad();xT();YP=w(Ot()),WP=w(VT()),zP=w(bp()),ij=w(ti()),oj=w(se());Dr();nu=w(as());zd();jC();aj=w(yP()),cj=w(Vz());vp();Kz();({HTTP_STATUS_CODES:Yz}=Vs.hdbErrors),Sn=Wp.default.loggerWithTag("operation"),_Te=jP.promisify(Sf.default.search),gTe=jP.promisify(ER.default.evaluateSQL),STe={[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(lj,"processLocalTransaction");Wz=RTe();Le.operation=QP;o(uj,"chooseOperation");o(dj,"getOperationFunction");(0,ij._assignPackageExport)("operation",QP);o(QP,"operation");o(TTe,"catchup");o($s,"executeJob");o(RTe,"initializeOperationFunctionMap")});var TR=M((DFe,hj)=>{"use strict";var gR=(H(),v(Y)),yTe=se(),zp=j(),{handleHDBError:JP,hdbErrors:SR}=ge(),{isMainThread:ATe}=require("worker_threads"),{Readable:bTe}=require("stream"),fj=require("os"),ITe=require("util"),NTe=pw(),wTe=ITe.promisify(NTe.authorize),mj=(GC(),v(qC)),{createGzip:OTe,constants:CTe}=require("zlib"),PTe=[gR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,gR.OPERATIONS_ENUM.LOGIN,gR.OPERATIONS_ENUM.LOGOUT];function LTe(e){let t=`Found an uncaught exception with message: ${e.message}. ${fj.EOL}Stack: ${e.stack} ${fj.EOL}Terminating ${ATe?"HDB":"thread"}.`;console.error(t),zp.fatal(t),process.exit(1)}o(LTe,"handleServerUncaughtException");function DTe(e,t,r){if(zp[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:SR.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(DTe,"serverErrorHandler");function MTe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=JP(new Error,"Invalid JSON.",SR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(yTe.isEmpty(e.body.operation)){let n=JP(new Error,"Request body must include an 'operation' property.",SR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(MTe,"reqBodyValidationHandler");function vTe(e,t,r){let n;!PTe.includes(e.body.operation)||e.body.operation===gR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?wTe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{zp.warn(i),zp.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(JP(i,a,SR.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(vTe,"authHandler");async function UTe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=mj.chooseOperation(e.body);let s=await mj.processLocalTransaction(e,n);if(s instanceof bTe&&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(OTe({level:CTe.Z_BEST_SPEED})))}return s}catch(s){throw zp.error(s),s}}o(UTe,"handlePostRequest");hj.exports={authHandler:vTe,handlePostRequest:UTe,handleServerUncaughtException:LTe,serverErrorHandler:DTe,reqBodyValidationHandler:MTe}});var gj=M((vFe,_j)=>{"use strict";var xTe=require("fastify-plugin"),{handlePostRequest:pj,authHandler:BTe,reqBodyValidationHandler:FTe}=TR();async function HTe(e){e.decorate("hdbCore",{preValidation:[FTe,BTe],request:o((t,r)=>Ej(pj(t,r)),"request"),requestWithoutAuthentication:o((t,r)=>Ej(pj(t,r,!0)),"requestWithoutAuthentication")})}o(HTe,"hdbCore");async function Ej(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(Ej,"convertAsyncIterators");_j.exports=xTe(HTe)});var Tj=M((BFe,Sj)=>{"use strict";var xFe=require("fs"),RR=oe();RR.initSync();var{CONFIG_PARAMS:XP}=(H(),v(Y)),kTe=1024*1024*1024;function qTe(e){let t=RR.get(XP.HTTP_TIMEOUT),r=RR.get(XP.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:kTe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:RR.get(XP.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(qTe,"getServerOptions");Sj.exports=qTe});var Aj=M((HFe,yj)=>{"use strict";var ZP=oe();ZP.initSync();var{CONFIG_PARAMS:Rj}=(H(),v(Y));function GTe(){let e=ZP.get(Rj.HTTP_CORSACCESSLIST),t=ZP.get(Rj.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(GTe,"getCORSOptions");yj.exports=GTe});var Nj=M((qFe,Ij)=>{"use strict";var bj=oe();bj.initSync();var $Te=(H(),v(Y));function VTe(){return bj.get($Te.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(VTe,"getHeaderTimeoutConfig");Ij.exports=VTe});var tL={};we(tL,{customFunctionsServer:()=>WTe,ready:()=>kj,start:()=>YTe});function YTe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){ea||(ea=Hj(t),Le.http((await ea).server));let a=await ea,c=(0,eL.dirname)(s),l=(0,eL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!wj.has(c)){wj.add(c);try{a.register(jTe(c,l))}catch(u){if(u.message==="Root plugin has already booted")At.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:kj}}async function WTe(){try{At.info("In Custom Functions Fastify server"+process.cwd()),At.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),At.debug(`Custom Functions server process ${process.pid} starting up.`),await zTe();let e=Mj.get(U.HTTP_SECUREPORT)>0,t;try{t=ea=await Hj(e)}catch(r){throw At.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw At.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){At.error(`Custom Functions ${process.pid} Error: ${e}`),At.error(e),process.exit(1)}}async function zTe(){try{At.info("Custom Functions starting configuration."),await vj.setUsersWithRolesCache(),At.info("Custom Functions completed configuration.")}catch(e){At.error(e)}}function jTe(e,t){return async function(r){try{At.info("Custom Functions starting buildRoutes"),At.trace("Loading fastify routes folder "+e),(0,Oj.existsSync)(e)&&r.register(Dj.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:At.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?At.error(s.message):s&&At.error(s),a()})}catch(n){At.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Hj(e){At.info("Custom Functions starting buildServer.");let t=(0,Uj.default)(e),r=(0,Cj.default)(t);r.server.headersTimeout=(0,Bj.default)(),r.setErrorHandler(Fj.serverErrorHandler);let n=(0,xj.default)();return n&&r.register(Pj.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){l.sent||l.raw.headersSent||l.raw.writableEnded||r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(Lj.default),await r.register(KTe),await r.after(),mm(r),At.info("Custom Functions completed buildServer."),r}function kj(){if(ea)return ea.then?ea.then(e=>e.ready()):ea.ready()}var eL,Oj,Cj,Pj,Lj,Dj,Mj,At,KTe,vj,Uj,xj,Bj,Fj,ea,wj,qj=ce(()=>{eL=require("path"),Oj=require("fs"),Cj=w(require("fastify")),Pj=w(require("@fastify/cors")),Lj=w(cw()),Dj=w(require("@fastify/autoload")),Mj=w(oe());H();At=w(j()),KTe=w(gj()),vj=w(rs()),Uj=w(Tj()),xj=w(Aj()),Bj=w(Nj()),Fj=w(TR());yo();Dr();wj=new Set;o(YTe,"start");o(WTe,"customFunctionsServer");o(zTe,"setUp");o(jTe,"buildRouteFolder");o(Hj,"buildServer");o(kj,"ready")});var rL={};we(rL,{start:()=>QTe});function QTe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Yj.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){$j||($j=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let a=Gj.get(s.pathname);if(a)return{handlesHeaders:!0,body:(0,Vj.default)(s,(0,Kj.realpathSync)(a))}}return i(s)},{runFirst:!0})),Gj.set(r,n)}}}var Vj,Kj,Yj,Gj,$j,Wj=ce(()=>{Vj=w(require("send")),Kj=require("fs"),Yj=w(require("serve-static")),Gj=new Map;o(QTe,"start")});var nL={};we(nL,{start:()=>JTe});function JTe({override:e}){return{handleFile:o((t,r,n)=>{yR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,zj.parse)(t))){if(process.env[s]!==void 0)if(yR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)yR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var zj,yR,jj=ce(()=>{zj=require("dotenv"),yR=w(j());o(JTe,"start")});var oL={};we(oL,{DataLoaderError:()=>ms,DataLoaderResult:()=>Rf,EmptyFileError:()=>NR,FileParseError:()=>IR,InvalidPropertyTypeError:()=>wR,MissingRequiredPropertyError:()=>jp,RecordProcessingError:()=>Qp,SystemDatabaseError:()=>OR,UnsupportedFileExtensionError:()=>bR,computeRecordHash:()=>iL,handleApplication:()=>eRe,loadDataFile:()=>n2,suppressHandleApplicationWarning:()=>ZTe});function iL(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,Jj.createHash)("sha256").update(n).digest("hex")}function r2(e){return e.system&&e.system[sL]?e.system[sL]:AR||(AR=je({database:"system",table:sL,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),AR)}async function XTe(e,t,r,n){try{let s=r2(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return Ks.error?.(`Failed to get stored hash: ${s.message}`),null}}async function Qj(e,t,r,n,s){try{let i=r2(s),a=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:a,hash:n})}catch(i){Ks.error?.(`Failed to store hash: ${i.message}`)}}function eRe(e){if((0,Zj.getWorkerIndex)()!==0){Ks.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||n2(t,un,He).then(r=>{Ks.debug?.("Data loader processed file: %s: %s",(0,ta.basename)(t.absolutePath),r.message)})})}async function n2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,ta.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,Xj.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new bR(t,i)}catch(f){throw f instanceof ms?f:new IR(t,f)}if(!a)throw new NR(t);let{database:c,table:l,records:u}=a;if(!l)throw new jp(t,"table");if(!u)throw new jp(t,"records");if(!Array.isArray(u))throw new wR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new OR(c,l);try{let f;if(c&&s[c]&&s[c][l])Ks.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])Ks.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{Ks.debug?.(`Table ${d} not found, creating new table`);let R=[];if(u.length>0){let T=u[0];Object.keys(T).map(y=>{let N={name:y,type:typeof T[y]};return y==="id"&&(N.isPrimaryKey=!0),N}).forEach(y=>{R.push(y)})}f=await je({database:c,table:l,attributes:R})}let m=u.length,h=0,p=0,_=0,g=100;for(let R=0;R<u.length;R+=g){let T=u.slice(R,R+g),y=[];for(let N of T)y.push(async()=>{try{let O=null,F=N.id;F!==void 0&&(O=await f.get(F));let Z=iL(N);if(!O){h++;let $=await f.put(N);return await Qj(c,l,F,Z,s),$}let q=await XTe(c,l,F,s);if(!q)return _++,Promise.resolve({inserted:0,updated:0});let W={};for(let $ of Object.keys(N))$ in O&&(W[$]=O[$]);return iL(W)!==q?(_++,Promise.resolve({inserted:0,updated:0})):Z!==q?(p++,await f.patch(F,N),await Qj(c,l,F,Z,s),{updated:1}):(_++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof ms)Ks.error?.(`Record processing error: ${O.message}`);else{let F=new Qp(d,O);Ks.error?.(`Record processing error: ${F.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(y.map(N=>N()))}if(h>0||p>0){let R=`Loaded ${h} new and updated ${p} records in ${d}`;return _>0&&(R+=` (${_} records skipped)`),Ks.info?.(R),new Rf(t,c,l,"success",h+p,R)}else if(_>0){let R=`All ${_} records in ${d} already up-to-date`;return Ks.info?.(R),new Rf(t,c,l,"skipped",m,R)}else{let R=`No records to process in ${d}`;return Ks.info?.(R),new Rf(t,c,l,"success",0,R)}}catch(f){throw f instanceof ms?f:new Qp(d,f)}}var ta,Jj,Xj,Zj,ra,e2,t2,Ks,sL,AR,ZTe,ms,bR,IR,NR,jp,wR,OR,Qp,Rf,s2=ce(()=>{ta=require("node:path"),Jj=require("node:crypto"),Xj=require("yaml");Me();Zj=w(ze()),ra=w(tn()),e2=w(ge()),t2=w(j()),Ks=t2.default.forComponent("dataLoader"),sL="hdb_dataloader_hash";o(iL,"computeRecordHash");o(r2,"getHashTrackingTable");o(XTe,"getStoredHash");o(Qj,"storeHash");ZTe=!0;o(eRe,"handleApplication");o(n2,"loadDataFile");ms=class extends e2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=ra.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},bR=class extends ms{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,ta.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},IR=class extends ms{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,ta.basename)(t)}: ${r.message}`,ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},NR=class extends ms{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,ta.basename)(t)} is empty or invalid`,ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},jp=class extends ms{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,ta.basename)(t)} is missing required "${r}" property`,ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},wR=class extends ms{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,ta.basename)(t)} has invalid "${r}" property, expected ${n}`,ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},OR=class extends ms{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,ra.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},Qp=class extends ms{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,ra.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Rf=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var cL=M((ZFe,i2)=>{"use strict";var Jp=oe();Jp.initSync();var yf=require("fs-extra"),aL=require("path"),Af=(H(),v(Y)),tRe=require("crypto"),rRe=require("uuid").v4;i2.exports=nRe;function nRe(){if(Jp.getHdbBasePath()!==void 0){let e=aL.join(Jp.getHdbBasePath(),Af.LICENSE_KEY_DIR_NAME,Af.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=aL.join(Jp.getHdbBasePath(),Af.LICENSE_KEY_DIR_NAME,Af.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=aL.join(Jp.getHdbBasePath(),Af.LICENSE_KEY_DIR_NAME,Af.JWT_ENUM.JWT_PASSPHRASE_NAME);try{yf.accessSync(r),yf.accessSync(e),yf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=rRe(),i=tRe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});yf.writeFileSync(r,s),yf.writeFileSync(e,i.privateKey),yf.writeFileSync(t,i.publicKey)}else throw n}}}o(nRe,"checkJWTTokenExist")});var a2=M((tHe,o2)=>{"use strict";var lL=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};o2.exports={HdbInfoInsertObject:lL}});var u2=M((nHe,l2)=>{"use strict";var c2=(H(),v(Y)),uL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[c2.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[c2.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};l2.exports={UpgradeObject:uL}});var CR=M((iHe,f2)=>{"use strict";var Ys=require("prompt"),bf=require("chalk"),d2=j(),Ni=require("os"),dL=Hc(),fL=["yes","y"];async function sRe(e){let t=`${Ni.EOL}`+bf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ni.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ni.EOL}${Ni.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ni.EOL}`;Ys.override=dL(["CONFIRM_UPGRADE"]),Ys.start(),Ys.message=t;let r={properties:{CONFIRM_UPGRADE:{description:bf.magenta(`${Ni.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Ys.get([r])}catch(s){return d2.error("There was an error when prompting user about an upgrade."),d2.error(s),!1}return fL.includes(n.CONFIRM_UPGRADE)}o(sRe,"forceUpdatePrompt");async function iRe(e){let t=`${Ni.EOL}`+bf.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ni.EOL}`);Ys.override=dL(["CONFIRM_DOWNGRADE"]),Ys.start(),Ys.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:bf.magenta(`${Ni.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Ys.get([r]);return fL.includes(n.CONFIRM_DOWNGRADE)}o(iRe,"forceDowngradePrompt");async function oRe(){let e=`${Ni.EOL}`+bf.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");Ys.override=dL(["GENERATE_CERTS"]),Ys.start(),Ys.message=e;let t={properties:{GENERATE_CERTS:{description:bf.magenta(`${Ni.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Ys.get([t]);return fL.includes(r.GENERATE_CERTS)}o(oRe,"upgradeCertsPrompt");f2.exports={forceUpdatePrompt:sRe,forceDowngradePrompt:iRe,upgradeCertsPrompt:oRe}});var hL=M((aHe,m2)=>{"use strict";var mL=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};m2.exports=mL});var p2=M((mHe,h2)=>{"use strict";var aRe=se(),cRe=Ot(),lHe=j(),uHe=require("path"),dHe=require("fs"),fHe=(H(),v(Y));h2.exports={getOldPropsValue:lRe};function lRe(e,t,r=!1){let n=t.getRaw(e);return aRe.isNotEmptyAndHasValue(n)?n:r?cRe.getDefaultConfig(e):""}o(lRe,"getOldPropsValue")});var S2=M((pHe,g2)=>{"use strict";var gc=require("path"),Sc=require("fs-extra"),uRe=require("properties-reader"),dRe=hL(),Sr=j(),{getOldPropsValue:bt}=p2(),{HDB_SETTINGS_NAMES:ye,CONFIG_PARAMS:iu}=(H(),v(Y)),ou=Ot(),PR=oe(),E2=se(),oo=(H(),v(Y)),pL=new dRe("3.1.0"),_2=[];function fRe(){let e=uRe(PR.get(ye.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Sr.info(t);let r=` ;Settings for the HarperDB process.
30
+ IdentitiesOnly yes`;await Ne.pathExists(l)?await Ne.appendFile(l,`
31
+ `+u):await Ne.outputFile(l,u);let d="";if(await Ne.pathExists(Jo)||(await Ne.writeFile(Jo,""),await Ne.chmod(Jo,"0600")),i=="github.com"&&!(await Ne.readFile(Jo,"utf8")).includes("github.com"))try{let _=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of _)Ne.appendFile(Jo,"github.com "+g+`
32
+ `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Ne.appendFile(Jo,a);let f=await Ri(e);return f.message=`Added ssh key: ${r}${d}`,f}o(A_e,"addSSHKey");async function b_e(e){let t=Hn.updateSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r,key:n}=e;Qt.trace("updating ssh key",r);let s=Ce.join(hc,r+".key");if(!await Ne.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Ne.outputFile(s,n);let i=await Ri(e);return i.message=`Updated ssh key: ${r}`,i}o(b_e,"updateSSHKey");async function I_e(e){let t=Hn.deleteSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r}=e;Qt.trace("deleting ssh key",r);let n=Ce.join(hc,r+".key"),s=Ce.join(hc,"config");if(!await Ne.pathExists(n))throw new Error("Key does not exist");let i=await Ne.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Ne.outputFile(s,i),Ne.removeSync(n);let c=await Ri(e);return c.message=`Deleted ssh key: ${r}`,c}o(I_e,"deleteSSHKey");async function N_e(e){let t=[];return await Ne.pathExists(hc)&&(await Ne.readdir(hc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(N_e,"listSSHKeys");async function w_e(e){let t=Hn.setSSHKnownHostsValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{known_hosts:r}=e;await Ne.outputFile(Jo,r);let n=await Ri(e);return n.message="Known hosts successfully set",n}o(w_e,"setSSHKnownHosts");async function O_e(e){return await Ne.pathExists(Jo)?{known_hosts:await Ne.readFile(Jo,"utf8")}:{known_hosts:null}}o(O_e,"getSSHKnownHosts");ir.customFunctionsStatus=l_e;ir.getCustomFunctions=u_e;ir.getCustomFunction=d_e;ir.setCustomFunction=f_e;ir.dropCustomFunction=m_e;ir.addComponent=h_e;ir.dropCustomFunctionProject=p_e;ir.packageComponent=E_e;ir.deployComponent=__e;ir.getComponents=S_e;ir.getComponentFile=T_e;ir.setComponentFile=R_e;ir.dropComponent=y_e;ir.addSSHKey=A_e;ir.updateSSHKey=b_e;ir.deleteSSHKey=I_e;ir.listSSHKeys=N_e;ir.setSSHKnownHosts=w_e;ir.getSSHKnownHosts=O_e});var WC=M((bBe,ZY)=>{"use strict";var Hs=require("joi"),XY=st();ZY.exports={readTransactionLogValidator:C_e,deleteTransactionLogsBeforeValidator:P_e};function C_e(e){let t=Hs.object({schema:Hs.string(),database:Hs.string(),table:Hs.string().required(),from:Hs.date().timestamp(),to:Hs.date().timestamp(),limit:Hs.number().min(1)});return XY.validateBySchema(e,t)}o(C_e,"readTransactionLogValidator");function P_e(e){let t=Hs.object({schema:Hs.string(),database:Hs.string(),table:Hs.string().required(),timestamp:Hs.date().timestamp().required()});return XY.validateBySchema(e,t)}o(P_e,"deleteTransactionLogsBeforeValidator")});var WT=M((NBe,iW)=>{"use strict";var zC=(H(),v(Y)),Op=Gt(),eW=ie(),tW=ae(),rW=Ki(),nW=z(),{handleHDBError:KT,hdbErrors:L_e}=_e(),{HTTP_STATUS_CODES:YT}=L_e,{readTransactionLogValidator:D_e,deleteTransactionLogsBeforeValidator:M_e}=WC(),sW=Xn(),v_e="Logs successfully deleted from transaction log.",U_e="All logs successfully deleted from transaction log.";iW.exports={readTransactionLog:x_e,deleteTransactionLogsBefore:F_e};async function x_e(e){let t=D_e(e);if(t)throw KT(t,t.message,YT.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=eW.checkSchemaTableExist(e.database,e.table);if(r)throw KT(new Error,r,YT.NOT_FOUND,void 0,void 0,!0);return tW.get(zC.CONFIG_PARAMS.CLUSTERING_ENABLED)?await B_e(e):(nW.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),sW.readAuditLog(e))}o(x_e,"readTransactionLog");async function*B_e(e){let t=rW.createNatsTableStreamName(e.database,e.table),r=await Op.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===zC.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(B_e,"readTransactionLogNats");async function F_e(e){let t=M_e(e);if(t)throw KT(t,t.message,YT.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!tW.get(zC.CONFIG_PARAMS.CLUSTERING_ENABLED))return nW.info("Delete transaction logs called for Plexus"),sW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=eW.checkSchemaTableExist(r,n);if(i)throw KT(new Error,i,YT.NOT_FOUND,void 0,void 0,!0);let a=rW.createNatsTableStreamName(r,n),{jsm:c}=await Op.getNATSReferences(),l=await Op.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=v_e,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=U_e):f=(await Op.viewStream(a,parseInt(s),1))[0].nats_sequence,await Op.purgeTableStream(r,n,{seq:f}),d}o(F_e,"deleteTransactionLogsBefore")});var XC={};Oe(XC,{describeMetric:()=>dW,describeMetricOp:()=>JC,get:()=>lW,getOp:()=>jC,listMetrics:()=>uW,listMetricsOp:()=>QC});async function k_e(e){return(await Dg().get(e)).hostname}function oW(e,t){return e.length===0||e.includes(t)}function jC(e){return Cp.trace?.("get_analytics request:",e),lW(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function cW(e){return"conditions"in e?{...e,conditions:e.conditions.map(cW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function lW(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(cW));let a=t??[];oW(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return a.length>0&&(c.select=a),Cp.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],oW(a,"node")&&(Cp.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await k_e(d)),Cp.trace?.("get_analytics result:",JSON.stringify(u)),u})}function QC(e){return uW(e.metric_types,e.custom_metrics_window)}async function uW(e=["builtin"],t=H_e){let r=[],n=Object.values(xo);if(e.includes("builtin")&&(r=n),e.includes("custom")){let i=[{attribute:"id",comparator:"greater_than",value:Date.now()-t}],a=n.map(d=>({attribute:"metric",comparator:"not_equal",value:d}));i.push(...a);let c={select:["metric"],conditions:i},l=new Set,u=await databases.system.hdb_analytics.search(c);for await(let d of u)l.add(d.metric);r.push(...Array.from(l.values()))}return r}function JC(e){return dW(e.metric)}async function dW(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return Cp.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var aW,H_e,Cp,ZC=le(()=>{aW=w(z());bN();IN();H_e=1e3*60*60*24*7,Cp=(0,aW.forComponent)("analytics").conditional;o(k_e,"lookupHostname");o(oW,"isSelected");o(jC,"getOp");o(cW,"conformCondition");o(lW,"get");o(QC,"listMetricsOp");o(uW,"listMetrics");o(JC,"describeMetricOp");o(dW,"describeMetric")});var zT,jT,Pp,QT=le(()=>{zT={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},jT=Object.keys(zT),Pp="primary"});function mW(e){return fW.validateBySchema(e,V_e)}var Lp,fW,q_e,G_e,$_e,V_e,hW=le(()=>{Lp=w(require("joi")),fW=w(st());QT();q_e=jT,G_e=Object.entries(zT).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),$_e=o(()=>{let e=Lp.default.string().min(1).max(512);return Object.entries(zT).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:Lp.default.string().valid(...r.allowedValues).messages({"any.only":G_e[t]})}))}),e.required()},"createStatusValidationSchema"),V_e=Lp.default.object({id:Lp.default.string().valid(...q_e).required(),status:$_e()});o(mW,"validateStatus")});var sP={};Oe(sP,{DEFAULT_STATUS_ID:()=>Pp,STATUS_IDS:()=>jT,Status:()=>Xo,clear:()=>tP,get:()=>rP,set:()=>nP});function Mp(){return eP||(eP=je({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),eP}function tP({id:e}){return Dp.debug?.("clearStatus",e),Mp().delete(e)}function Y_e(){return Dp.debug?.("getAllStatus"),Mp().get({})}function rP({id:e}){return e?(Dp.debug?.("getStatus",e),Mp().get(e)):(Dp.debug?.("getStatus","all"),Y_e())}function nP({status:e,id:t=Pp}){let r=mW({status:e,id:t});if(r)throw(0,JT.handleHDBError)(r,r.message,K_e.BAD_REQUEST);return Dp.debug?.("setStatus",t,e),Mp().put(t,{status:e})}var JT,pW,K_e,eP,Xo,Dp,vp=le(()=>{Me();JT=w(_e()),pW=w(ri());hW();QT();QT();({HTTP_STATUS_CODES:K_e}=JT.hdbErrors);o(Mp,"getStatusTable");Xo={get primaryStore(){return Mp().primaryStore}},Dp=(0,pW.loggerWithTag)("status");o(tP,"clearStatus");o(Y_e,"getAllStatus");o(rP,"getStatus");o(nP,"setStatus")});var _W=M((VBe,EW)=>{"use strict";var iP=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}};EW.exports=iP});var SW=M((YBe,gW)=>{"use strict";var oP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};gW.exports=oP});var cP=M((zBe,RW)=>{"use strict";var TW=_W(),W_e=SW(),{HDB_ERROR_MSGS:z_e}=rn(),aP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=z_e.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 TW(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new W_e(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 TW(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}};RW.exports=aP});var tR=M((QBe,FW)=>{"use strict";var lP=an(),XT=on(),ks=$d(),Bp=vo(),uP=ka(),j_e=mO(),Q_e=IV(),Fp=rs(),ZT=Ih(),Nr=z(),J_e=gO(),X_e=fT(),Z_e=KO(),ege=hT(),tge=zO(),rge=jO(),nge=XO(),sge=eC(),dP=ST(),Zo=ie(),ige=nK(),fP=mC(),bW=cf(),Sn=(H(),v(Y)),IW=_Y(),oge=Yd(),NW=(Ad(),v(Dh)),wW=(HT(),v(Tp)),OW=Ot(),Er=VC(),age=require("alasql"),CW=WT(),PW=bp(),mf=as(),LW=(zd(),v(Wd)),mP=(ZC(),v(XC)),hP=(vp(),v(sP)),DW=cP(),{handleHDBError:kn,hdbErrors:MW}=_e(),{HDB_ERROR_MSGS:Jr,HTTP_STATUS_CODES:Up}=MW,{cleanupOrphanBlobs:cge}=$d(),Z=new Map,vW="delete",pc="insert",qs="read",Xl="update",xp="describe",yW=Bp.describeSchema.name,AW=Bp.describeTable.name,UW={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},lge={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},uge="catchup",dge="handleGetJob",fge="handleGetJobsByStartDate",eR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},mge=[ks.createTable.name,ks.createAttribute.name,ks.dropTable.name,ks.dropAttribute.name],xW={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(lP.insert.name,new re(!1,[pc]));Z.set(lP.update.name,new re(!1,[Xl]));Z.set(lP.upsert.name,new re(!1,[pc,Xl]));Z.set(XT.searchByConditions.name,new re(!1,[qs]));Z.set(XT.searchByHash.name,new re(!1,[qs]));Z.set(XT.searchByValue.name,new re(!1,[qs]));Z.set(XT.search.name,new re(!1,[qs]));Z.set(ks.createSchema.name,new re(!0,[]));Z.set(ks.createTable.name,new re(!0,[]));Z.set(ks.createAttribute.name,new re(!1,[pc]));Z.set(ks.dropSchema.name,new re(!0,[]));Z.set(ks.dropTable.name,new re(!0,[]));Z.set(ks.dropAttribute.name,new re(!0,[]));Z.set(Bp.describeSchema.name,new re(!1,[qs]));Z.set(Bp.describeTable.name,new re(!1,[qs]));Z.set(uP.deleteRecord.name,new re(!1,[vW]));Z.set(Fp.addUser.name,new re(!0,[]));Z.set(Fp.alterUser.name,new re(!0,[]));Z.set(Fp.dropUser.name,new re(!0,[]));Z.set(Fp.listUsersExternal.name,new re(!0,[]));Z.set(ZT.listRoles.name,new re(!0,[]));Z.set(ZT.addRole.name,new re(!0,[]));Z.set(ZT.alterRole.name,new re(!0,[]));Z.set(ZT.dropRole.name,new re(!0,[]));Z.set(J_e.name,new re(!0,[]));Z.set(X_e.name,new re(!0,[]));Z.set(Z_e.name,new re(!0,[]));Z.set(ege.name,new re(!0,[]));Z.set(tge.name,new re(!0,[]));Z.set(rge.name,new re(!0,[]));Z.set(dP.setRoutes.name,new re(!0,[]));Z.set(dP.getRoutes.name,new re(!0,[]));Z.set(dP.deleteRoutes.name,new re(!0,[]));Z.set(OW.setConfiguration.name,new re(!0,[]));Z.set(nge.clusterStatus.name,new re(!0,[]));Z.set(sge.name,new re(!0,[]));Z.set(fP.getFingerprint.name,new re(!0,[]));Z.set(fP.setLicense.name,new re(!0,[]));Z.set(uP.deleteFilesBefore.name,new re(!0,[]));Z.set(uP.deleteAuditLogsBefore.name,new re(!0,[]));Z.set(bW.restart.name,new re(!0,[]));Z.set(bW.restartService.name,new re(!0,[]));Z.set(j_e.name,new re(!0,[]));Z.set(Q_e.name,new re(!0,[qs]));Z.set(cge.name,new re(!0,[]));Z.set(oge.systemInformation.name,new re(!0,[]));Z.set(OW.getConfiguration.name,new re(!0,[]));Z.set(CW.readTransactionLog.name,new re(!0,[]));Z.set(CW.deleteTransactionLogsBefore.name,new re(!0,[]));Z.set(PW.installModules.name,new re(!0,[]));Z.set(PW.auditModules.name,new re(!0,[]));Z.set(mf.createCsr.name,new re(!0,[]));Z.set(mf.signCertificate.name,new re(!0,[]));Z.set(mf.listCertificates.name,new re(!0,[]));Z.set(mf.addCertificate.name,new re(!0,[]));Z.set(mf.removeCertificate.name,new re(!0,[]));Z.set(mf.getKey.name,new re(!0,[]));Z.set(LW.addNodeBack.name,new re(!0,[]));Z.set(LW.removeNodeBack.name,new re(!0,[]));Z.set(mP.getOp.name,new re(!1,[qs]));Z.set(mP.listMetricsOp.name,new re(!1,[qs]));Z.set(mP.describeMetricOp.name,new re(!1,[qs]));Z.set(hP.clear.name,new re(!0,[]));Z.set(hP.get.name,new re(!0,[]));Z.set(hP.set.name,new re(!0,[]));Z.set(NW.createTokens.name,new re(!1,[]));Z.set(NW.refreshOperationToken.name,new re(!1,[]));Z.set(wW.login.name,new re(!1,[]));Z.set(wW.logout.name,new re(!1,[]));Z.set(Er.customFunctionsStatus.name,new re(!0,[]));Z.set(Er.getCustomFunctions.name,new re(!0,[]));Z.set(Er.getComponents.name,new re(!0,[]));Z.set(Er.getComponentFile.name,new re(!0,[]));Z.set(Er.setComponentFile.name,new re(!0,[]));Z.set(Er.dropComponent.name,new re(!0,[]));Z.set(Er.getCustomFunction.name,new re(!0,[]));Z.set(Er.setCustomFunction.name,new re(!0,[]));Z.set(Er.dropCustomFunction.name,new re(!0,[]));Z.set(Er.addComponent.name,new re(!0,[]));Z.set(Er.dropCustomFunctionProject.name,new re(!0,[]));Z.set(Er.packageComponent.name,new re(!0,[]));Z.set(Er.deployComponent.name,new re(!0,[]));Z.set(Er.addSSHKey.name,new re(!0,[]));Z.set(Er.updateSSHKey.name,new re(!0,[]));Z.set(Er.deleteSSHKey.name,new re(!0,[]));Z.set(Er.listSSHKeys.name,new re(!0,[]));Z.set(Er.setSSHKnownHosts.name,new re(!0,[]));Z.set(Er.getSSHKnownHosts.name,new re(!0,[]));Z.set(fP.getRegistrationInfo.name,new re(!1,[]));Z.set(Fp.userInfo.name,new re(!1,[]));Z.set(Bp.describeAll.name,new re(!1,[]));Z.set(dge,new re(!1,[]));Z.set(fge,new re(!0,[]));Z.set(uge,new re(!0,[]));Z.set(eR.CSV_DATA_LOAD,new re(!1,[pc,Xl]));Z.set(eR.CSV_URL_LOAD,new re(!1,[pc,Xl]));Z.set(eR.CSV_FILE_LOAD,new re(!1,[pc,Xl]));Z.set(eR.IMPORT_FROM_S3,new re(!1,[pc,Xl]));Z.set(xW.EXPORT_TO_S3,new re(!0,[]));Z.set(xW.EXPORT_LOCAL,new re(!0,[]));Z.set(Sn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[vW]));Z.set(Sn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[qs]));Z.set(Sn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[pc]));Z.set(Sn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[Xl]));FW.exports={verifyPerms:pge,verifyPermsAst:hge,verifyBulkLoadAttributePerms:_ge};function hge(e,t,r){if(Zo.isEmptyOrZeroLength(e))throw Nr.info("verify_perms_ast has an empty user parameter"),kn(new Error);if(Zo.isEmptyOrZeroLength(t))throw Nr.info("verify_perms_ast has an empty user parameter"),kn(new Error);if(Zo.isEmptyOrZeroLength(r))throw Nr.info("verify_perms_ast has a null operation parameter"),kn(new Error);try{let n=new DW,s=new ige(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Nr.info("No schemas defined in verifyPermsAst(), will not continue."),kn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&UW[r])throw kn(new Error,Jr.DROP_SYSTEM,Up.FORBIDDEN);if(c&&!l)return null;let u=IW.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof age.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=BW(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]),_=EP(t.role.permission,m,f[h]);pP(p,_,r,f[h],m,n)}}),n.getPermsResponse())}catch(n){throw kn(n)}}o(hge,"verifyPermsAst");function pge(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Nr.info("null required parameter in verifyPerms"),kn(new Error,Jr.DEFAULT_INVALID_REQUEST,Up.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 DW;if(Zo.isEmptyOrZeroLength(e.hdb_user?.role)||Zo.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Nr.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(Sn.SYSTEM_SCHEMA_NAME)||s===Sn.SYSTEM_SCHEMA_NAME;if(l&&d&&lge[e.operation]&&(i===Sn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Sn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Sn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&UW[r])throw kn(new Error,Jr.DROP_SYSTEM,Up.FORBIDDEN);if(l&&!d||u===!0&&(r===ks.createSchema.name||r===ks.dropSchema.name))return null;if(mge.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=IW.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===yW||r===AW)&&!f.super_user){if(s===Sn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Jr.SCHEMA_PERM_ERROR(s));if(r===yW&&(!f[s]||!f[s][xp]))return c.handleInvalidItem(Jr.SCHEMA_NOT_FOUND(s));if(r===AW&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][xp]))return c.handleInvalidItem(Jr.TABLE_NOT_FOUND(s,i))}let m=BW(e.hdb_user,r,a,c,n);if(m)return m;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Sn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let _=[],g=f[s].tables[i];g[Sn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(T=>T[Sn.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=Ege(e),p=EP(e.hdb_user?.role?.permission,s,i);return pP(h,p,r,i,s,c,n),c.getPermsResponse()}o(pge,"verifyPerms");function BW(e,t,r,n,s){if(Zo.arrayHasEmptyValues([e,t,r]))throw Nr.info("hasPermissions has an invalid parameter"),kn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||Z.get(t).requires_su))return null;if(!Z.get(t))throw Nr.info(`operation ${t} not found.`),kn(new Error,Jr.OP_NOT_FOUND(t),Up.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return Nr.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][xp]===!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[xp]===!1)n.addInvalidItem(Jr.TABLE_NOT_FOUND(l,d));else try{let m=[],h=Z.get(t).perms;!Zo.isEmpty(s)&&h.includes(s)&&(h=[s]);for(let p=0;p<h.length;p++){let _=h[p],g=f[_];(g==null||g===!1)&&(Nr.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 Nr.error(h),Nr.error(m),kn(MW.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?n.getPermsResponse():null}o(BW,"hasPermissions");function pP(e,t,r,n,s,i,a){if(!e||!t)throw Nr.info("no attributes specified in checkAttributePerms."),kn(new Error);let c=Z.get(r).perms;if(!c||c==="")throw Nr.info(`no permissions found for ${r} in checkAttributePerms().`),kn(new Error);if(Zo.isEmptyOrZeroLength(t))return Nr.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[xp]===!1){i.addInvalidItem(Jr.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Sn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==qs)throw kn(new Error,Jr.SYSTEM_TIMESTAMP_PERMS_ERR,Up.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(pP,"checkAttributePerms");function Ege(e){let t=new Set;try{if(e.action)return t;if(e.operation===Sn.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){Nr.info(r)}return t}o(Ege,"getRecordAttributes");function EP(e,t,r){let n=new Map;if(Zo.isEmpty(e))return Nr.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{Nr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(EP,"getAttributePermissions");function _ge(e,t,r,n,s,i,a){let c=new Set(i),l=EP(e,n,s);pP(c,l,t,s,n,a,r)}o(_ge,"verifyBulkLoadAttributePerms")});var nR=M((XBe,$W)=>{"use strict";$W.exports={evaluateSQL:Pge,processAST:GW,convertSQLToAST:qW,checkASTPermissions:kW};var gge=an(),HW=require("util"),Sge=HW.callbackify(gge.insert),Tge=on().search,Rge=_G().update,yge=HW.callbackify(Rge),Age=SG().convertDelete,Ec=require("alasql"),bge=tR(),rR=z(),Ige=fg(),Nge=ie(),Hp=(H(),v(Y)),{hdbErrors:wge,handleHDBError:_P}=_e(),{HTTP_STATUS_CODES:gP}=wge;Ige(Ec);var Oge=403,Cge="There was a problem performing this insert. Please check the logs and try again.",SP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Pge(e,t){let r=e.parsed_sql_object;if(!r){r=qW(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ec.yy.Insert?n=s.into.databaseid:s instanceof Ec.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ec.yy.Update||s instanceof Ec.yy.Delete?n=s.table.databaseid:rR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ec.yy.Select)&&Nge.isEmptyOrZeroLength(n))return t("No schema specified",null)}GW(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(Pge,"evaluateSQL");function kW(e,t){let r;try{r=bge.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(kW,"checkASTPermissions");function qW(e){let t=new SP;if(!e)throw _P(new Error,"The 'sql' parameter is missing from the request body",gP.BAD_REQUEST);try{let r=e.trim(),n=Ec.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
33
+ `);throw n[1]?_P(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,gP.BAD_REQUEST):_P(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",gP.BAD_REQUEST)}return t}o(qW,"convertSQLToAST");function GW(e,t,r){try{let n=Lge;if(!e.bypass_auth&&!t.permissions_checked){let i=kW(e,t);if(i&&i.length>0)return r(Oge,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Hp.VALID_SQL_OPS_ENUM.SELECT:n=Tge,s=t.ast.statements[0];break;case Hp.VALID_SQL_OPS_ENUM.INSERT:n=Dge;break;case Hp.VALID_SQL_OPS_ENUM.UPDATE:n=yge;break;case Hp.VALID_SQL_OPS_ENUM.DELETE:n=Age;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(GW,"processAST");function Lge(e,t){rR.info(e),t("unknown sql statement")}o(Lge,"nullFunction");function Dge({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=Mge(i,e.values)}catch(a){return r(a)}Sge(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){rR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(Dge,"convertInsert");function Mge(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]]=Ec.compile(`SELECT ${s.toString()} AS [${Hp.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw rR.error(r),new Error(Cge)}}o(Mge,"createDataObjects")});var IP=M((rFe,WW)=>{var aR=require("clone"),cR=st(),vge=ie(),iR=(H(),v(Y)),eFe=z(),TP=require("fs"),yP=require("joi"),{string:oR}=yP.types(),{hdbErrors:Uge,handleHDBError:sR}=_e(),{HDB_ERROR_MSGS:tFe,HTTP_STATUS_CODES:RP}=Uge,{commonValidators:hf}=qi(),VW=" is required",xge=["insert","update","upsert"],AP={database:{presence:!1,format:hf.schema_format,length:hf.schema_length},schema:{presence:!1,format:hf.schema_format,length:hf.schema_length},table:{presence:!0,format:hf.schema_format,length:hf.schema_length},action:{inclusion:{within:xge,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Bge={schema:oR.required(),table:oR.required(),action:oR.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Fge,AWS_SECRET:Hge,AWS_BUCKET:kge,AWS_FILE_KEY:qge,REGION:Gge}=iR.S3_BUCKET_AUTH_KEYS,$ge={s3:{presence:!0},[`s3.${Fge}`]:{presence:!0,type:"String"},[`s3.${Hge}`]:{presence:!0,type:"String"},[`s3.${kge}`]:{presence:!0,type:"String"},[`s3.${qge}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Gge}`]:{presence:!0,type:"String"}},KW=aR(AP);KW.data.presence={message:VW};var YW=aR(AP);YW.file_path.presence={message:VW};var Vge=Object.assign(aR(AP),$ge),bP=aR(Bge);bP.csv_url=oR.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();bP.passthrough_headers=yP.object();function Kge(e){let t=cR.validateObject(e,KW);return lR(e,t)}o(Kge,"dataObject");function Yge(e){let t=cR.validateBySchema(e,yP.object(bP));return lR(e,t)}o(Yge,"urlObject");function Wge(e){let t=cR.validateObject(e,YW);return lR(e,t)}o(Wge,"fileObject");function zge(e){let t=cR.validateObject(e,Vge);return lR(e,t)}o(zge,"s3FileObject");function lR(e,t){if(!t){let r=vge.checkGlobalSchemaTable(e.schema,e.table);if(r)return sR(new Error,r,RP.BAD_REQUEST);if(e.operation===iR.OPERATIONS_ENUM.CSV_FILE_LOAD)try{TP.accessSync(e.file_path,TP.constants.R_OK|TP.constants.F_OK)}catch(n){return n.code===iR.NODE_ERROR_CODES.ENOENT?sR(n,`No such file or directory ${n.path}`,RP.BAD_REQUEST):n.code===iR.NODE_ERROR_CODES.EACCES?sR(n,`Permission denied ${n.path}`,RP.BAD_REQUEST):sR(n)}}return t}o(lR,"postValidateChecks");WW.exports={dataObject:Kge,urlObject:Yge,fileObject:Wge,s3FileObject:zge}});var NP=M((sFe,zW)=>{"use strict";var kp=z(),uR=(H(),v(Y));async function jge(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===uR.OPERATIONS_ENUM.INSERT||t.operation===uR.OPERATIONS_ENUM.UPDATE||t.operation===uR.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===uR.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(kp.info(i.message),i):i.http_resp_msg?(kp.error(`Error calling operation: ${e.name}`),kp.error(i.http_resp_msg),i):(kp.error(`Error calling operation: ${e.name}`),kp.error(i),i)}}o(jge,"callOperationFunctionAsAwait");zW.exports={callOperationFunctionAsAwait:jge}});var wP=M((oFe,QW)=>{"use strict";var{S3:Qge,GetObjectCommand:Jge}=require("@aws-sdk/client-s3");QW.exports={getFileStreamFromS3:Xge,getS3AuthObj:jW};async function Xge(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await jW(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Jge(r))).Body}o(Xge,"getFileStreamFromS3");function jW(e,t,r){return new Qge({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(jW,"getS3AuthObj")});var XW=M((cFe,JW)=>{"use strict";var OP=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}},CP=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};JW.exports={BulkLoadFileObject:OP,BulkLoadDataObject:CP}});var LP=M((uFe,ZW)=>{"use strict";var PP=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};ZW.exports=PP});var BP=M((EFe,Ez)=>{"use strict";var dR=an(),mR=IP(),Zge=require("needle"),yi=(H(),v(Y)),fFe=ht(),pf=ie(),{handleHDBError:Zt,hdbErrors:cz}=_e(),{HTTP_STATUS_CODES:Xr,HDB_ERROR_MSGS:wr,CHECK_LOGS_WRAPPER:eu}=cz,Ef=z(),DP=require("papaparse");pf.promisifyPapaParse();var Ai=require("fs-extra"),eSe=require("path"),{chain:ez}=require("stream-chain"),tz=require("stream-json/streamers/StreamArray"),rz=require("stream-json/utils/Batch"),nz=require("stream-chain/utils/comp"),{finished:sz}=require("stream"),tSe=ae(),lz=NP(),rSe=wP(),{BulkLoadFileObject:vP,BulkLoadDataObject:nSe}=XW(),UP=cP(),{verifyBulkLoadAttributePerms:uz}=tR(),mFe=LP(),hFe=Gt(),pFe=Ki(),{databases:sSe}=(Me(),v(gt)),{coerceType:iSe}=(B_(),v(Yk)),iz="No records parsed from csv file.",Zl=`${tSe.get("HDB_ROOT")}/tmp`,{schemaRegex:oSe}=qi(),oz=1024*1024*2,az=5e3,aSe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Ez.exports={csvDataLoad:cSe,csvURLLoad:lSe,csvFileLoad:uSe,importFromS3:dSe};async function cSe(e,t){let r=mR.dataObject(e);if(r)throw Zt(r,r.message,Xr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=mz(e.schema,e.table),i=DP.parse(e.data,{header:!0,skipEmptyLines:!0,transform:MP.bind(null,s),dynamicTyping:!1}),a=new UP;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&uz(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,Xr.BAD_REQUEST,void 0,void 0,!0);let l=new nSe(e.action,e.schema,e.table,i.data);return n=await lz.callOperationFunctionAsAwait(hz,l,null),n.message===iz?iz:pz(n.records,n.number_written)}catch(s){throw tu(s)}}o(cSe,"csvDataLoad");async function lSe(e){let t=mR.urlObject(e);if(t)throw Zt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Zl}/${r}`;try{await fSe(e,r)}catch(s){throw Ef.error(wr.DOWNLOAD_FILE_ERR(r)+" - "+s),Zt(s,eu(wr.DOWNLOAD_FILE_ERR(r)))}try{let s=new vP(this.job_operation_function.name,e.action,e.schema,e.table,n,yi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await xP(s);return await fR(n),i}catch(s){throw await fR(n),tu(s)}}o(lSe,"csvURLLoad");async function uSe(e){let t=mR.fileObject(e);if(t)throw Zt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r=new vP(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,yi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await xP(r)}catch(n){throw tu(n)}}o(uSe,"csvFileLoad");async function dSe(e){let t=mR.s3FileObject(e);if(t)throw Zt(t,t.message,Xr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=eSe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Zl}/${s}`;let i=new vP(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await mSe(s,e);let a=await xP(i);return await fR(r),a}catch(n){throw await fR(r),tu(n)}}o(dSe,"importFromS3");async function fSe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Zge("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,yi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}pSe(r,e.csv_url),await hSe(t,r.raw)}o(fSe,"downloadCSVFile");async function mSe(e,t){try{let r=`${Zl}/${e}`;await Ai.mkdirp(Zl),await Ai.writeFile(`${Zl}/${e}`,"",{flag:"a+"});let n=await Ai.createWriteStream(r),s=await rSe.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(wr.S3_DOWNLOAD_ERR+" - "+r),Zt(r,eu(wr.S3_DOWNLOAD_ERR))}}o(mSe,"downloadFileFromS3");async function hSe(e,t){try{await Ai.mkdirp(Zl),await Ai.writeFile(`${Zl}/${e}`,t)}catch(r){throw Ef.error(wr.WRITE_TEMP_FILE_ERR),Zt(r,eu(wr.DEFAULT_BULK_LOAD_ERR))}}o(hSe,"writeFileToTempFolder");async function fR(e){if(e)try{await Ai.access(e),await Ai.unlink(e)}catch{Ef.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(fR,"deleteTempFile");function pSe(e,t){if(e.statusCode!==cz.HTTP_STATUS_CODES.OK)throw Zt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Xr.BAD_REQUEST);if(!aSe[e.headers["content-type"]])throw Zt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Xr.BAD_REQUEST);if(!e.raw)throw Zt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Xr.BAD_REQUEST)}o(pSe,"validateURLResponse");async function xP(e){try{let t;switch(e.file_type){case yi.VALID_S3_FILE_TYPES.CSV:t=await ESe(e);break;case yi.VALID_S3_FILE_TYPES.JSON:t=await _Se(e);break;default:throw Zt(new Error,wr.DEFAULT_BULK_LOAD_ERR,Xr.BAD_REQUEST,yi.LOG_LEVELS.ERROR,wr.INVALID_FILE_EXT_ERR(e))}return pz(t.records,t.number_written)}catch(t){throw tu(t)}}o(xP,"fileLoad");async function dz(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 dR.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&uz(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(dz,"validateChunk");async function fz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;pf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!pf.isEmpty(c)&&!pf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await lz.callOperationFunctionAsAwait(hz,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Zt(c,eu(wr.INSERT_CSV_ERR),Xr.INTERNAL_SERVER_ERROR,yi.LOG_LEVELS.ERROR,wr.INSERT_CSV_ERR+" - "+c);r(l)}}o(fz,"insertChunk");async function ESe(e){let t={records:0,number_written:0},r=mz(e.schema,e.table);try{let n=new UP,s=Ai.createReadStream(e.file_path,{highWaterMark:oz});s.setEncoding("utf8"),await DP.parsePromise(s,dz.bind(null,e,n),MP.bind(null,r));let i=n.getPermsResponse();if(i)throw Zt(new Error,i,Xr.BAD_REQUEST);return s=Ai.createReadStream(e.file_path,{highWaterMark:oz}),s.setEncoding("utf8"),await DP.parsePromise(s,fz.bind(null,e,t),MP.bind(null,r)),s.destroy(),t}catch(n){throw Zt(n,eu(wr.PAPA_PARSE_ERR),Xr.INTERNAL_SERVER_ERROR,yi.LOG_LEVELS.ERROR,wr.PAPA_PARSE_ERR+n)}}o(ESe,"callPapaParse");function mz(e,t){let r=sSe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>iSe(i,s));return n}o(mz,"createTransformMap");function MP(e,t,r){let n=e.get(r);return n?n(t):pf.autoCast(t)}o(MP,"typeFunction");async function _Se(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new UP,s=ez([Ai.createReadStream(e.file_path,{encoding:"utf-8"}),tz.withParser(),c=>c.value,new rz({batchSize:az}),nz(async c=>{await dz(e,n,r,c)})]);await new Promise((c,l)=>{sz(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Zt(new Error,i,Xr.BAD_REQUEST);let a=ez([Ai.createReadStream(e.file_path,{encoding:"utf-8"}),tz.withParser(),c=>c.value,new rz({batchSize:az}),nz(async c=>{await fz(e,t,r,c)})]);return await new Promise((c,l)=>{sz(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Zt(n,eu(wr.INSERT_JSON_ERR),Xr.INTERNAL_SERVER_ERROR,yi.LOG_LEVELS.ERROR,wr.INSERT_JSON_ERR+n)}}o(_Se,"insertJson");async function hz(e){let t={};try{e.data&&e.data.length>0&&gSe(e.data[0])?t=await SSe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ef.info(t.message))}catch(r){throw tu(r)}return t}o(hz,"callBulkFileLoad");function gSe(e){let t=Object.keys(e);for(let r of t)if(!oSe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(gSe,"validateColumnNames");async function SSe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=dR.insert;break;case"update":i=dR.update;break;case"upsert":i=dR.upsert;break;default:throw Zt(new Error,wr.INVALID_ACTION_PARAM_ERR(n),Xr.BAD_REQUEST,yi.LOG_LEVELS.ERROR,wr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=pf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw tu(a)}}o(SSe,"bulkFileLoad");function pz(e,t){return`successfully loaded ${t} of ${e} records`}o(pz,"buildResponseMsg");function tu(e){return Zt(e,eu(wr.DEFAULT_BULK_LOAD_ERR),Xr.INTERNAL_SERVER_ERROR,yi.LOG_LEVELS.ERROR,wr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(tu,"buildTopLevelErrMsg")});var kP=M((gFe,bz)=>{"use strict";var HP=on(),TSe=wP(),{AsyncParser:RSe}=require("json2csv"),hR=require("stream"),fs=ie(),FP=require("fs-extra"),ySe=require("path"),Gs=z(),{promisify:Sz}=require("util"),qp=ie(),{handleHDBError:_r,hdbErrors:ASe}=_e(),{HDB_ERROR_MSGS:qn,HTTP_STATUS_CODES:gr}=ASe,{streamAsJSON:bSe}=(DA(),v(zv)),{Upload:ISe}=require("@aws-sdk/lib-storage"),{toCsvStream:NSe}=(yo(),v(sU)),_z=["search_by_value","search_by_hash","sql","search_by_conditions"],gz=["json","csv"],Tz="json",Rz="csv",wSe="Successfully exported JSON locally.",OSe="Successfully exported CSV locally.",CSe=1e3,PSe=HP.searchByHash,LSe=HP.searchByValue,DSe=Sz(hR.finished);bz.exports={export_to_s3:xSe,export_local:MSe};async function MSe(e){Gs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=yz(e);if(!fs.isEmpty(t))throw Gs.error(t),_r(new Error,t,gr.BAD_REQUEST,void 0,void 0,!0);if(fs.isEmpty(e.path))throw Gs.error(qn.MISSING_VALUE("path")),_r(new Error,qn.MISSING_VALUE("path"),gr.BAD_REQUEST,void 0,void 0,!0);let r=(fs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(ySe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=fs.buildFolderPath(e.path,r);await vSe(e.path);let s=await Az(e);return await USe(n,e.format,s)}o(MSe,"export_local");async function vSe(e){if(Gs.trace("in confirmPath"),fs.isEmptyOrZeroLength(e))throw _r(new Error,`Invalid path: ${e}`,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await FP.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,Gs.error(n),_r(new Error,n,gr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Gs.error(r),_r(new Error,r,gr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(vSe,"confirmPath");async function USe(e,t,r){if(Gs.trace("in saveToLocal"),qp.isEmptyOrZeroLength(e))throw _r(new Error,qn.INVALID_VALUE("file_path"),gr.BAD_REQUEST,void 0,void 0,!0);if(qp.isEmptyOrZeroLength(t))throw _r(new Error,qn.INVALID_VALUE("Source format"),gr.BAD_REQUEST,void 0,void 0,!0);if(qp.isEmpty(r))throw _r(new Error,qn.NOT_FOUND("Data"),gr.BAD_REQUEST,void 0,void 0,!0);if(t===Tz){let n=FP.createWriteStream(e);return bSe(r).pipe(n),await DSe(n),{message:wSe,path:e}}else if(t===Rz){let n=FP.createWriteStream(e),s=hR.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new RSe(i,c).fromInput(s).toOutput(n).promise(!1),{message:OSe,path:e}}throw _r(new Error,qn.INVALID_VALUE("format"),gr.BAD_REQUEST)}o(USe,"saveToLocal");async function xSe(e){if(!e.s3||Object.keys(e.s3).length===0)throw _r(new Error,qn.MISSING_VALUE("S3 object"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw _r(new Error,qn.MISSING_VALUE("aws_access_key_id"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw _r(new Error,qn.MISSING_VALUE("aws_secret_access_key"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.bucket))throw _r(new Error,qn.MISSING_VALUE("bucket"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.key))throw _r(new Error,qn.MISSING_VALUE("key"),gr.BAD_REQUEST);if(fs.isEmptyOrZeroLength(e.s3.region))throw _r(new Error,qn.MISSING_VALUE("region"),gr.BAD_REQUEST);let t=yz(e);if(!fs.isEmpty(t))throw _r(new Error,t,gr.BAD_REQUEST);Gs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Az(e)}catch(l){throw Gs.error(l),l}let n,s=await TSe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new hR.PassThrough;if(e.format===Rz){i=e.s3.key+".csv";let l=NSe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===Tz){i=e.s3.key+".json";let l=new hR.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%CSe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw _r(new Error,qn.INVALID_VALUE("format"),gr.BAD_REQUEST);return new ISe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(xSe,"export_to_s3");function yz(e){if(Gs.trace("in exportCoreValidation"),fs.isEmpty(e.format))return"format missing";if(gz.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${gz.join(", ")}`;let t=e.search_operation.operation;if(fs.isEmpty(t))return"search_operation.operation missing";if(_z.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${_z.join(", ")}`}o(yz,"exportCoreValidation");async function Az(e){Gs.trace("in getRecords");let t,r;if(qp.isEmpty(e.search_operation)||qp.isEmptyOrZeroLength(e.search_operation.operation))throw _r(new Error,qn.INVALID_VALUE("Search operation"),gr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=LSe;break;case"search_by_hash":t=PSe;break;case"search_by_conditions":t=HP.searchByConditions;break;case"sql":{let n=nR();t=Sz(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Gs.error(r),_r(new Error,r,gr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(Az,"getRecords")});var Nz=M((TFe,Iz)=>{"use strict";var qP=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Iz.exports=qP});var Cz=M((yFe,Oz)=>{"use strict";var BSe=(H(),v(Y)),wz=require("moment"),FSe=require("uuid").v4,GP=class{static{o(this,"JobObject")}constructor(){this.id=FSe(),this.type=void 0,this.start_datetime=wz().valueOf(),this.created_datetime=wz().valueOf(),this.end_datetime=void 0,this.status=BSe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Oz.exports=GP});var $P=M((bFe,Bz)=>{"use strict";var HSe=require("uuid").v4,vz=an(),Uz=on(),kSe=ci(),qSe=zu(),GSe=Nz(),Dt=(H(),v(Y)),$Se=Cz(),VSe=Ch(),bi=z(),KSe=im(),_f=ie(),{promisify:YSe}=require("util"),ru=require("moment"),WSe=nR(),pR=IP(),Pz=VI(),{deleteTransactionLogsBeforeValidator:zSe}=WC(),{handleHDBError:Lz,hdbErrors:jSe,ClientError:QSe}=_e(),{HTTP_STATUS_CODES:Dz}=jSe,Mz=Uz.searchByValue,JSe=Uz.searchByHash,XSe=vz.insert,ZSe=YSe(WSe.evaluateSQL),eTe=vz.update;Bz.exports={addJob:nTe,updateJob:iTe,handleGetJob:tTe,handleGetJobsByStartDate:rTe,getJobById:xz};async function tTe(e){if(e.id===void 0)throw new QSe("'id' is required");let t=await xz(e.id);return _f.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(tTe,"handleGetJob");async function rTe(e){try{let t=await sTe(e);if(bi.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=ru(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=ru(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 bi.error(r),new Error(r)}}o(rTe,"handleGetJobsByStartDate");async function nTe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||_f.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return bi.info(d),t.error=d,t}if(!Dt.JOB_TYPE_ENUM[e.operation])return bi.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Dt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=pR.fileObject(e);break;case Dt.OPERATIONS_ENUM.CSV_URL_LOAD:n=pR.urlObject(e);break;case Dt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=pR.dataObject(e);break;case Dt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=pR.s3FileObject(e);break;case Dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Pz(e,"date");break;case Dt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Pz(e,"timestamp");break;case Dt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=zSe(e);break;case Dt.OPERATIONS_ENUM.RESTART_SERVICE:if(Dt.HDB_PROCESS_SERVICES[e.service]===void 0)throw Lz(new Error,"Invalid service",Dz.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw Lz(n,n.message,Dz.BAD_REQUEST,void 0,void 0,!0);let s=new $Se;s.type=e.operation===Dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new kSe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await Mz(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return bi.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=HSe();try{a=await Mz(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return bi.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return bi.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new KSe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await XSe(l)}catch(d){return bi.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,bi.trace(d)}return t}o(nTe,"addJob");async function sTe(e){let t=ru(e.from_date,ru.ISO_8601),r=ru(e.to_date,ru.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 GSe(n,e.hdb_user);try{return await ZSe(s)}catch(i){throw bi.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(sTe,"getJobsInDateRange");async function xz(e){if(_f.isEmptyOrZeroLength(e))return _f.errorizeMessage("Invalid job ID specified.");let t=new qSe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await JSe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return bi.error(n),_f.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(xz,"getJobById");async function iTe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(_f.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Dt.JOB_STATUS_ENUM.COMPLETE||e.status===Dt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=ru().valueOf());let t=new VSe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await eTe(t),r}o(iTe,"updateJob")});var Kz=M((NFe,Vz)=>{"use strict";var Fz=ie(),Or=(H(),v(Y)),oTe=require("moment"),ER=BP(),Gp=z(),Hz=$P(),kz=kP(),qz=ka(),Gz=ze(),aTe=WT(),cTe=cf(),{parentPort:lTe,isMainThread:$z}=require("worker_threads"),{onMessageByType:uTe}=ze(),VP=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function dTe(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(Fz.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Fz.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Or.JOB_TYPE_ENUM.csv_file_load:await so(e,ER.csvFileLoad);break;case Or.JOB_TYPE_ENUM.csv_url_load:await so(e,ER.csvURLLoad);break;case Or.JOB_TYPE_ENUM.csv_data_load:await so(e,ER.csvDataLoad);break;case Or.JOB_TYPE_ENUM.import_from_s3:await so(e,ER.importFromS3);break;case Or.JOB_TYPE_ENUM.empty_trash:break;case Or.JOB_TYPE_ENUM.export_local:await so(e,kz.export_local);break;case Or.JOB_TYPE_ENUM.export_to_s3:await so(e,kz.export_to_s3);break;case Or.JOB_TYPE_ENUM.delete_files_before:case Or.JOB_TYPE_ENUM.delete_records_before:await so(e,qz.deleteFilesBefore);break;case Or.JOB_TYPE_ENUM.delete_audit_logs_before:await so(e,qz.deleteAuditLogsBefore);break;case Or.JOB_TYPE_ENUM.delete_transaction_logs_before:await so(e,aTe.deleteTransactionLogsBefore);break;case Or.JOB_TYPE_ENUM.restart_service:return await so(e,cTe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(dTe,"parseMessage");async function so(e,t){try{e.job.status=Or.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=oTe().valueOf(),await Hz.updateJob(e.job),await fTe(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):Gp.error(`There was an error running ${t.name} job with id ${e.job.id}`),Gp.error(n),e.job.message=n,e.job.status=Or.JOB_STATUS_ENUM.ERROR;try{await Hz.updateJob(e.job)}catch(s){throw Gp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(so,"runJob");async function fTe(e){Gp.trace("launching job thread:",e),$z?Gz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):lTe.postMessage({type:Or.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(fTe,"launchJobThread");$z&&uTe(Or.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Gz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){Gp.error(r)}});Vz.exports={parseMessage:dTe,RunnerMessage:VP}});var Wz=M((OFe,Yz)=>{"use strict";var mTe=ie(),KP=ae(),_c=(H(),v(Y)),hTe=ht(),pTe=Gt(),io=z(),ETe=LP(),_Te=Ki();KP.initSync();Yz.exports={postOperationHandler:STe,sendOperationTransaction:$p};async function $p(e,t,r,n){if(e.schema===_c.SYSTEM_SCHEMA_NAME)return;let s=gTe(e,t,r);s&&(io.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await pTe.publishToStream(`${hTe.SUBJECT_PREFIXES.TXN}.${e.schema}`,_Te.createNatsTableStreamName(e.schema,e.table),n,s))}o($p,"sendOperationTransaction");function gTe(e,t,r){if(mTe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===_c.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(gTe,"convertCRUDOperationToTransaction");async function STe(e,t,r){if(!KP.get(_c.CONFIG_PARAMS.CLUSTERING_ENABLED))return;io.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=KP.get(_c.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new ETe(t.txn_time,n,s);switch(e.operation){case _c.OPERATIONS_ENUM.INSERT:try{await $p(e,t.inserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for insert."),io.error(a)}break;case _c.OPERATIONS_ENUM.DELETE:try{await $p(e,t.deleted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for delete."),io.error(a)}break;case _c.OPERATIONS_ENUM.UPDATE:try{await $p(e,t.update_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for update."),io.error(a)}break;case _c.OPERATIONS_ENUM.UPSERT:try{await $p(e,t.upserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for upsert."),io.error(a)}break;default:break}return t}o(STe,"postOperationHandler")});var X,zz=le(()=>{X=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 KC={};Oe(KC,{chooseOperation:()=>mj,executeJob:()=>$s,getOperationFunction:()=>hj,operation:()=>eL,processLocalTransaction:()=>fj});async function fj(e,t){try{if(e.body.operation!=="read_log"&&(Wp.default.log_level===jf.INFO||Wp.default.log_level===jf.DEBUG||Wp.default.log_level===jf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;Tn.info(c)}}catch(n){Tn.error(n)}let r=await uj.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return yTe[e.body.operation]&&oj.default.setSchemaDataToGlobal(n=>{n&&Tn.error(n)}),r}function mj(e){let t;try{t=hj(e)}catch(s){throw Tn.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=SR.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=SR.default.checkASTPermissions(e,i);if(a)throw Tn.error(`${jz.FORBIDDEN} from operation ${e.operation}`),Tn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Vs.handleHDBError)(new Error,a,Vs.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=ij.default.verifyPerms(i,s);if(a)throw Tn.error(`${jz.FORBIDDEN} from operation ${e.operation}`),Tn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Vs.handleHDBError)(new Error,a,Vs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Vs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function hj(e){if(Tn.trace(`getOperationFunction with operation: ${e.operation}`),Qz.has(e.operation))return Qz.get(e.operation);throw(0,Vs.handleHDBError)(new Error,Vs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Vs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function eL(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=mj(e);return fj({body:e},n)}async function ATe(e){Tn.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[lA]=!0;let a;switch(i.operation){case G.INSERT:a=await su.default.insert(i);break;case G.UPDATE:a=await su.default.update(i);break;case G.UPSERT:a=await su.default.upsert(i);break;case G.DELETE:a=await Tf.default.deleteRecord(i);break;default:Tn.warn("invalid operation in catchup");break}await dj.transactToClusteringUtils.postOperationHandler(i,a,e)}catch(a){Tn.info("Invalid operation in transaction"),Tn.error(a)}}async function $s(e){(0,lj.transformReq)(e);let t,r;try{if(r=await TR.default.addJob(e),r){t=r.createdJob,Tn.info("addJob result",r);let n=new jP.default.RunnerMessage(t,e);return{message:await jP.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 Tn.error(i),(0,Vs.handleHDBError)(n,i)}}function bTe(){let e=new Map;return e.set(G.INSERT,new X(su.default.insert)),e.set(G.UPDATE,new X(su.default.update)),e.set(G.UPSERT,new X(su.default.upsert)),e.set(G.SEARCH_BY_CONDITIONS,new X(Sf.default.searchByConditions)),e.set(G.SEARCH_BY_HASH,new X(Sf.default.searchByHash)),e.set(G.SEARCH_BY_ID,new X(Sf.default.searchByHash)),e.set(G.SEARCH_BY_VALUE,new X(Sf.default.searchByValue)),e.set(G.SEARCH,new X(TTe)),e.set(G.SQL,new X(RTe)),e.set(G.CSV_DATA_LOAD,new X($s,Vp.default.csvDataLoad)),e.set(G.CSV_FILE_LOAD,new X($s,Vp.default.csvFileLoad)),e.set(G.CSV_URL_LOAD,new X($s,Vp.default.csvURLLoad)),e.set(G.IMPORT_FROM_S3,new X($s,Vp.default.importFromS3)),e.set(G.CREATE_SCHEMA,new X(Ii.default.createSchema)),e.set(G.CREATE_DATABASE,new X(Ii.default.createSchema)),e.set(G.CREATE_TABLE,new X(Ii.default.createTable)),e.set(G.CREATE_ATTRIBUTE,new X(Ii.default.createAttribute)),e.set(G.DROP_SCHEMA,new X(Ii.default.dropSchema)),e.set(G.DROP_DATABASE,new X(Ii.default.dropSchema)),e.set(G.DROP_TABLE,new X(Ii.default.dropTable)),e.set(G.DROP_ATTRIBUTE,new X(Ii.default.dropAttribute)),e.set(G.DESCRIBE_SCHEMA,new X(Kp.default.describeSchema)),e.set(G.DESCRIBE_DATABASE,new X(Kp.default.describeSchema)),e.set(G.DESCRIBE_TABLE,new X(Kp.default.describeTable)),e.set(G.DESCRIBE_ALL,new X(Kp.default.describeAll)),e.set(G.DELETE,new X(Tf.default.deleteRecord)),e.set(G.ADD_USER,new X(gf.default.addUser)),e.set(G.ALTER_USER,new X(gf.default.alterUser)),e.set(G.DROP_USER,new X(gf.default.dropUser)),e.set(G.LIST_USERS,new X(gf.default.listUsersExternal)),e.set(G.LIST_ROLES,new X(Yp.default.listRoles)),e.set(G.ADD_ROLE,new X(Yp.default.addRole)),e.set(G.ALTER_ROLE,new X(Yp.default.alterRole)),e.set(G.DROP_ROLE,new X(Yp.default.dropRole)),e.set(G.USER_INFO,new X(gf.default.userInfo)),e.set(G.READ_LOG,new X(Xz.default)),e.set(G.ADD_NODE,new X(Zz.default)),e.set(G.UPDATE_NODE,new X(YP.default)),e.set(G.SET_NODE_REPLICATION,new X(YP.default)),e.set(G.REMOVE_NODE,new X(ej.default)),e.set(G.CONFIGURE_CLUSTER,new X(tj.default)),e.set(G.PURGE_STREAM,new X(rj.default)),e.set(G.SET_CONFIGURATION,new X(QP.default.setConfiguration)),e.set(G.CLUSTER_STATUS,new X(nj.default.clusterStatus)),e.set(G.CLUSTER_NETWORK,new X(sj.default)),e.set(G.CLUSTER_SET_ROUTES,new X(_R.default.setRoutes)),e.set(G.CLUSTER_GET_ROUTES,new X(_R.default.getRoutes)),e.set(G.CLUSTER_DELETE_ROUTES,new X(_R.default.deleteRoutes)),e.set(G.EXPORT_TO_S3,new X($s,WP.default.export_to_s3)),e.set(G.CREATE_CSR,new X(nu.default.createCsr)),e.set(G.SIGN_CERTIFICATE,new X(nu.default.signCertificate)),e.set(G.LIST_CERTIFICATES,new X(nu.default.listCertificates)),e.set(G.ADD_CERTIFICATES,new X(nu.default.addCertificate)),e.set(G.REMOVE_CERTIFICATE,new X(nu.default.removeCertificate)),e.set(G.GET_KEY,new X(nu.default.getKey)),e.set(G.ADD_NODE_BACK,new X(HO)),e.set(G.REMOVE_NODE_BACK,new X(kO)),e.set(G.DELETE_FILES_BEFORE,new X($s,Tf.default.deleteFilesBefore)),e.set(G.DELETE_RECORDS_BEFORE,new X($s,Tf.default.deleteFilesBefore)),e.set(G.EXPORT_LOCAL,new X($s,WP.default.export_local)),e.set(G.SEARCH_JOBS_BY_START_DATE,new X(TR.default.handleGetJobsByStartDate)),e.set(G.GET_JOB,new X(TR.default.handleGetJob)),e.set(G.GET_FINGERPRINT,new X(gR.default.getFingerprint)),e.set(G.SET_LICENSE,new X(gR.default.setLicense)),e.set(G.GET_REGISTRATION_INFO,new X(gR.default.getRegistrationInfo)),e.set(G.RESTART,new X(zP.default.restart)),e.set(G.RESTART_SERVICE,new X($s,zP.default.restartService)),e.set(G.CATCHUP,new X(ATe)),e.set(G.SYSTEM_INFORMATION,new X(aj.default.systemInformation)),e.set(G.DELETE_AUDIT_LOGS_BEFORE,new X($s,Tf.default.deleteAuditLogsBefore)),e.set(G.READ_AUDIT_LOG,new X(Jz.default)),e.set(G.CREATE_AUTHENTICATION_TOKENS,new X(pw)),e.set(G.REFRESH_OPERATION_TOKEN,new X(Ew)),e.set(G.LOGIN,new X(BC)),e.set(G.LOGOUT,new X(FC)),e.set(G.GET_CONFIGURATION,new X(QP.default.getConfiguration)),e.set(G.CUSTOM_FUNCTIONS_STATUS,new X(Mt.default.customFunctionsStatus)),e.set(G.GET_CUSTOM_FUNCTIONS,new X(Mt.default.getCustomFunctions)),e.set(G.GET_COMPONENT_FILE,new X(Mt.default.getComponentFile)),e.set(G.GET_COMPONENTS,new X(Mt.default.getComponents)),e.set(G.SET_COMPONENT_FILE,new X(Mt.default.setComponentFile)),e.set(G.DROP_COMPONENT,new X(Mt.default.dropComponent)),e.set(G.GET_CUSTOM_FUNCTION,new X(Mt.default.getCustomFunction)),e.set(G.SET_CUSTOM_FUNCTION,new X(Mt.default.setCustomFunction)),e.set(G.DROP_CUSTOM_FUNCTION,new X(Mt.default.dropCustomFunction)),e.set(G.ADD_CUSTOM_FUNCTION_PROJECT,new X(Mt.default.addComponent)),e.set(G.ADD_COMPONENT,new X(Mt.default.addComponent)),e.set(G.DROP_CUSTOM_FUNCTION_PROJECT,new X(Mt.default.dropCustomFunctionProject)),e.set(G.PACKAGE_CUSTOM_FUNCTION_PROJECT,new X(Mt.default.packageComponent)),e.set(G.PACKAGE_COMPONENT,new X(Mt.default.packageComponent)),e.set(G.DEPLOY_CUSTOM_FUNCTION_PROJECT,new X(Mt.default.deployComponent)),e.set(G.DEPLOY_COMPONENT,new X(Mt.default.deployComponent)),e.set(G.READ_TRANSACTION_LOG,new X(JP.default.readTransactionLog)),e.set(G.DELETE_TRANSACTION_LOGS_BEFORE,new X($s,JP.default.deleteTransactionLogsBefore)),e.set(G.INSTALL_NODE_MODULES,new X(XP.default.installModules)),e.set(G.AUDIT_NODE_MODULES,new X(XP.default.auditModules)),e.set(G.GET_BACKUP,new X(Ii.default.getBackup)),e.set(G.CLEANUP_ORPHAN_BLOBS,new X(Ii.default.cleanupOrphanBlobs)),e.set(G.ADD_SSH_KEY,new X(Mt.default.addSSHKey)),e.set(G.UPDATE_SSH_KEY,new X(Mt.default.updateSSHKey)),e.set(G.DELETE_SSH_KEY,new X(Mt.default.deleteSSHKey)),e.set(G.LIST_SSH_KEYS,new X(Mt.default.listSSHKeys)),e.set(G.SET_SSH_KNOWN_HOSTS,new X(Mt.default.setSSHKnownHosts)),e.set(G.GET_SSH_KNOWN_HOSTS,new X(Mt.default.getSSHKnownHosts)),e.set(G.GET_ANALYTICS,new X(jC)),e.set(G.LIST_METRICS,new X(QC)),e.set(G.DESCRIBE_METRIC,new X(JC)),e.set(G.GET_STATUS,new X(rP)),e.set(G.SET_STATUS,new X(nP)),e.set(G.CLEAR_STATUS,new X(tP)),e}var Sf,SR,Vp,Ii,Kp,Tf,Jz,gf,Yp,Mt,Wp,Xz,Zz,YP,ej,tj,rj,nj,sj,_R,WP,ij,TR,Vs,gR,zP,ZP,su,oj,aj,jP,QP,JP,XP,cj,lj,nu,uj,dj,jz,Tn,TTe,RTe,yTe,Qz,YC=le(()=>{Sf=w(on()),SR=w(nR()),Vp=w(BP()),Ii=w($d()),Kp=w(vo()),Tf=w(ka()),Jz=w(mO()),gf=w(rs()),Yp=w(Ih()),Mt=w(VC()),Wp=w(z()),Xz=w(gO()),Zz=w(fT()),YP=w(KO()),ej=w(hT()),tj=w(zO()),rj=w(jO()),nj=w(XO()),sj=w(eC()),_R=w(ST()),WP=w(kP()),ij=w(tR()),TR=w($P());H();Vs=w(_e()),gR=w(mC()),zP=w(cf()),ZP=w(require("util")),su=w(an()),oj=w(ws()),aj=w(Yd()),jP=w(Kz());Ad();HT();QP=w(Ot()),JP=w(WT()),XP=w(bp()),cj=w(ti()),lj=w(ie());Dr();nu=w(as());zd();ZC();uj=w(NP()),dj=w(Wz());vp();zz();({HTTP_STATUS_CODES:jz}=Vs.hdbErrors),Tn=Wp.default.loggerWithTag("operation"),TTe=ZP.promisify(Sf.default.search),RTe=ZP.promisify(SR.default.evaluateSQL),yTe={[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(fj,"processLocalTransaction");Qz=bTe();De.operation=eL;o(mj,"chooseOperation");o(hj,"getOperationFunction");(0,cj._assignPackageExport)("operation",eL);o(eL,"operation");o(ATe,"catchup");o($s,"executeJob");o(bTe,"initializeOperationFunctionMap")});var AR=M((UFe,_j)=>{"use strict";var RR=(H(),v(Y)),ITe=ie(),zp=z(),{handleHDBError:tL,hdbErrors:yR}=_e(),{isMainThread:NTe}=require("worker_threads"),{Readable:wTe}=require("stream"),pj=require("os"),OTe=require("util"),CTe=gw(),PTe=OTe.promisify(CTe.authorize),Ej=(YC(),v(KC)),{createGzip:LTe,constants:DTe}=require("zlib"),MTe=[RR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,RR.OPERATIONS_ENUM.LOGIN,RR.OPERATIONS_ENUM.LOGOUT];function vTe(e){let t=`Found an uncaught exception with message: ${e.message}. ${pj.EOL}Stack: ${e.stack} ${pj.EOL}Terminating ${NTe?"HDB":"thread"}.`;console.error(t),zp.fatal(t),process.exit(1)}o(vTe,"handleServerUncaughtException");function UTe(e,t,r){if(zp[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:yR.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(UTe,"serverErrorHandler");function xTe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=tL(new Error,"Invalid JSON.",yR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(ITe.isEmpty(e.body.operation)){let n=tL(new Error,"Request body must include an 'operation' property.",yR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(xTe,"reqBodyValidationHandler");function BTe(e,t,r){let n;!MTe.includes(e.body.operation)||e.body.operation===RR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?PTe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{zp.warn(i),zp.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(tL(i,a,yR.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(BTe,"authHandler");async function FTe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=Ej.chooseOperation(e.body);let s=await Ej.processLocalTransaction(e,n);if(s instanceof wTe&&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(LTe({level:DTe.Z_BEST_SPEED})))}return s}catch(s){throw zp.error(s),s}}o(FTe,"handlePostRequest");_j.exports={authHandler:BTe,handlePostRequest:FTe,handleServerUncaughtException:vTe,serverErrorHandler:UTe,reqBodyValidationHandler:xTe}});var Rj=M((BFe,Tj)=>{"use strict";var HTe=require("fastify-plugin"),{handlePostRequest:gj,authHandler:kTe,reqBodyValidationHandler:qTe}=AR();async function GTe(e){e.decorate("hdbCore",{preValidation:[qTe,kTe],request:o((t,r)=>Sj(gj(t,r)),"request"),requestWithoutAuthentication:o((t,r)=>Sj(gj(t,r,!0)),"requestWithoutAuthentication")})}o(GTe,"hdbCore");async function Sj(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(Sj,"convertAsyncIterators");Tj.exports=HTe(GTe)});var Aj=M((kFe,yj)=>{"use strict";var HFe=require("fs"),bR=ae();bR.initSync();var{CONFIG_PARAMS:rL}=(H(),v(Y)),$Te=1024*1024*1024;function VTe(e){let t=bR.get(rL.HTTP_TIMEOUT),r=bR.get(rL.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:$Te,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:bR.get(rL.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(VTe,"getServerOptions");yj.exports=VTe});var Nj=M((GFe,Ij)=>{"use strict";var nL=ae();nL.initSync();var{CONFIG_PARAMS:bj}=(H(),v(Y));function KTe(){let e=nL.get(bj.HTTP_CORSACCESSLIST),t=nL.get(bj.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(KTe,"getCORSOptions");Ij.exports=KTe});var Cj=M((VFe,Oj)=>{"use strict";var wj=ae();wj.initSync();var YTe=(H(),v(Y));function WTe(){return wj.get(YTe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(WTe,"getHeaderTimeoutConfig");Oj.exports=WTe});var iL={};Oe(iL,{customFunctionsServer:()=>QTe,ready:()=>$j,start:()=>jTe});function jTe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){ea||(ea=Gj(t),De.http((await ea).server));let a=await ea,c=(0,sL.dirname)(s),l=(0,sL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Pj.has(c)){Pj.add(c);try{a.register(XTe(c,l))}catch(u){if(u.message==="Root plugin has already booted")At.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:$j}}async function QTe(){try{At.info("In Custom Functions Fastify server"+process.cwd()),At.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),At.debug(`Custom Functions server process ${process.pid} starting up.`),await JTe();let e=xj.get(U.HTTP_SECUREPORT)>0,t;try{t=ea=await Gj(e)}catch(r){throw At.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw At.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){At.error(`Custom Functions ${process.pid} Error: ${e}`),At.error(e),process.exit(1)}}async function JTe(){try{At.info("Custom Functions starting configuration."),await Bj.setUsersWithRolesCache(),At.info("Custom Functions completed configuration.")}catch(e){At.error(e)}}function XTe(e,t){return async function(r){try{At.info("Custom Functions starting buildRoutes"),At.trace("Loading fastify routes folder "+e),(0,Lj.existsSync)(e)&&r.register(Uj.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:At.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?At.error(s.message):s&&At.error(s),a()})}catch(n){At.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Gj(e){At.info("Custom Functions starting buildServer.");let t=(0,Fj.default)(e),r=(0,Dj.default)(t);r.server.headersTimeout=(0,kj.default)(),r.setErrorHandler(qj.serverErrorHandler);let n=(0,Hj.default)();return n&&r.register(Mj.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){l.sent||l.raw.headersSent||l.raw.writableEnded||r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(vj.default),await r.register(zTe),await r.after(),mm(r),At.info("Custom Functions completed buildServer."),r}function $j(){if(ea)return ea.then?ea.then(e=>e.ready()):ea.ready()}var sL,Lj,Dj,Mj,vj,Uj,xj,At,zTe,Bj,Fj,Hj,kj,qj,ea,Pj,Vj=le(()=>{sL=require("path"),Lj=require("fs"),Dj=w(require("fastify")),Mj=w(require("@fastify/cors")),vj=w(dw()),Uj=w(require("@fastify/autoload")),xj=w(ae());H();At=w(z()),zTe=w(Rj()),Bj=w(rs()),Fj=w(Aj()),Hj=w(Nj()),kj=w(Cj()),qj=w(AR());yo();Dr();Pj=new Set;o(jTe,"start");o(QTe,"customFunctionsServer");o(JTe,"setUp");o(XTe,"buildRouteFolder");o(Gj,"buildServer");o($j,"ready")});var oL={};Oe(oL,{start:()=>ZTe});function ZTe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,jj.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){Yj||(Yj=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let a=Kj.get(s.pathname);if(a)return{handlesHeaders:!0,body:(0,Wj.default)(s,(0,zj.realpathSync)(a))}}return i(s)},{runFirst:!0})),Kj.set(r,n)}}}var Wj,zj,jj,Kj,Yj,Qj=le(()=>{Wj=w(require("send")),zj=require("fs"),jj=w(require("serve-static")),Kj=new Map;o(ZTe,"start")});var aL={};Oe(aL,{start:()=>eRe});function eRe({override:e}){return{handleFile:o((t,r,n)=>{IR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,Jj.parse)(t))){if(process.env[s]!==void 0)if(IR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)IR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var Jj,IR,Xj=le(()=>{Jj=require("dotenv"),IR=w(z());o(eRe,"start")});var uL={};Oe(uL,{DataLoaderError:()=>ms,DataLoaderResult:()=>Rf,EmptyFileError:()=>CR,FileParseError:()=>OR,InvalidPropertyTypeError:()=>PR,MissingRequiredPropertyError:()=>jp,RecordProcessingError:()=>Qp,SystemDatabaseError:()=>LR,UnsupportedFileExtensionError:()=>wR,computeRecordHash:()=>lL,handleApplication:()=>nRe,loadDataFile:()=>o2,suppressHandleApplicationWarning:()=>rRe});function lL(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,e2.createHash)("sha256").update(n).digest("hex")}function i2(e){return e.system&&e.system[cL]?e.system[cL]:NR||(NR=je({database:"system",table:cL,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),NR)}async function tRe(e,t,r,n){try{let s=i2(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return Ks.error?.(`Failed to get stored hash: ${s.message}`),null}}async function Zj(e,t,r,n,s){try{let i=i2(s),a=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:a,hash:n})}catch(i){Ks.error?.(`Failed to store hash: ${i.message}`)}}function nRe(e){if((0,r2.getWorkerIndex)()!==0){Ks.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||o2(t,dn,ke).then(r=>{Ks.debug?.("Data loader processed file: %s: %s",(0,ta.basename)(t.absolutePath),r.message)})})}async function o2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,ta.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,t2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new wR(t,i)}catch(f){throw f instanceof ms?f:new OR(t,f)}if(!a)throw new CR(t);let{database:c,table:l,records:u}=a;if(!l)throw new jp(t,"table");if(!u)throw new jp(t,"records");if(!Array.isArray(u))throw new PR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new LR(c,l);try{let f;if(c&&s[c]&&s[c][l])Ks.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])Ks.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{Ks.debug?.(`Table ${d} not found, creating new table`);let y=[];if(u.length>0){let T=u[0];Object.keys(T).map(R=>{let N={name:R,type:typeof T[R]};return R==="id"&&(N.isPrimaryKey=!0),N}).forEach(R=>{y.push(R)})}f=await je({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 N of T)R.push(async()=>{try{let C=null,q=N.id;q!==void 0&&(C=await f.get(q));let j=lL(N);if(!C){h++;let K=await f.put(N);return await Zj(c,l,q,j,s),K}let F=await tRe(c,l,q,s);if(!F)return _++,Promise.resolve({inserted:0,updated:0});let $={};for(let K of Object.keys(N))K in C&&($[K]=C[K]);return lL($)!==F?(_++,Promise.resolve({inserted:0,updated:0})):j!==F?(p++,await f.patch(q,N),await Zj(c,l,q,j,s),{updated:1}):(_++,Promise.resolve({inserted:0,updated:0}))}catch(C){if(C instanceof ms)Ks.error?.(`Record processing error: ${C.message}`);else{let q=new Qp(d,C);Ks.error?.(`Record processing error: ${q.message}`)}return Promise.resolve({inserted:0,updated:0,error:C.message})}});await Promise.all(R.map(N=>N()))}if(h>0||p>0){let y=`Loaded ${h} new and updated ${p} records in ${d}`;return _>0&&(y+=` (${_} records skipped)`),Ks.info?.(y),new Rf(t,c,l,"success",h+p,y)}else if(_>0){let y=`All ${_} records in ${d} already up-to-date`;return Ks.info?.(y),new Rf(t,c,l,"skipped",m,y)}else{let y=`No records to process in ${d}`;return Ks.info?.(y),new Rf(t,c,l,"success",0,y)}}catch(f){throw f instanceof ms?f:new Qp(d,f)}}var ta,e2,t2,r2,ra,n2,s2,Ks,cL,NR,rRe,ms,wR,OR,CR,jp,PR,LR,Qp,Rf,a2=le(()=>{ta=require("node:path"),e2=require("node:crypto"),t2=require("yaml");Me();r2=w(ze()),ra=w(rn()),n2=w(_e()),s2=w(z()),Ks=s2.default.forComponent("dataLoader"),cL="hdb_dataloader_hash";o(lL,"computeRecordHash");o(i2,"getHashTrackingTable");o(tRe,"getStoredHash");o(Zj,"storeHash");rRe=!0;o(nRe,"handleApplication");o(o2,"loadDataFile");ms=class extends n2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=ra.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},wR=class extends ms{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,ta.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},OR=class extends ms{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,ta.basename)(t)}: ${r.message}`,ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},CR=class extends ms{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,ta.basename)(t)} is empty or invalid`,ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},jp=class extends ms{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,ta.basename)(t)} is missing required "${r}" property`,ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},PR=class extends ms{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,ta.basename)(t)} has invalid "${r}" property, expected ${n}`,ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},LR=class extends ms{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,ra.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},Qp=class extends ms{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,ra.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Rf=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var fL=M((rHe,c2)=>{"use strict";var Jp=ae();Jp.initSync();var yf=require("fs-extra"),dL=require("path"),Af=(H(),v(Y)),sRe=require("crypto"),iRe=require("uuid").v4;c2.exports=oRe;function oRe(){if(Jp.getHdbBasePath()!==void 0){let e=dL.join(Jp.getHdbBasePath(),Af.LICENSE_KEY_DIR_NAME,Af.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=dL.join(Jp.getHdbBasePath(),Af.LICENSE_KEY_DIR_NAME,Af.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=dL.join(Jp.getHdbBasePath(),Af.LICENSE_KEY_DIR_NAME,Af.JWT_ENUM.JWT_PASSPHRASE_NAME);try{yf.accessSync(r),yf.accessSync(e),yf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=iRe(),i=sRe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});yf.writeFileSync(r,s),yf.writeFileSync(e,i.privateKey),yf.writeFileSync(t,i.publicKey)}else throw n}}}o(oRe,"checkJWTTokenExist")});var u2=M((sHe,l2)=>{"use strict";var mL=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};l2.exports={HdbInfoInsertObject:mL}});var m2=M((oHe,f2)=>{"use strict";var d2=(H(),v(Y)),hL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[d2.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[d2.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};f2.exports={UpgradeObject:hL}});var DR=M((cHe,p2)=>{"use strict";var Ys=require("prompt"),bf=require("chalk"),h2=z(),Ni=require("os"),pL=Hc(),EL=["yes","y"];async function aRe(e){let t=`${Ni.EOL}`+bf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ni.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ni.EOL}${Ni.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ni.EOL}`;Ys.override=pL(["CONFIRM_UPGRADE"]),Ys.start(),Ys.message=t;let r={properties:{CONFIRM_UPGRADE:{description:bf.magenta(`${Ni.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Ys.get([r])}catch(s){return h2.error("There was an error when prompting user about an upgrade."),h2.error(s),!1}return EL.includes(n.CONFIRM_UPGRADE)}o(aRe,"forceUpdatePrompt");async function cRe(e){let t=`${Ni.EOL}`+bf.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ni.EOL}`);Ys.override=pL(["CONFIRM_DOWNGRADE"]),Ys.start(),Ys.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:bf.magenta(`${Ni.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Ys.get([r]);return EL.includes(n.CONFIRM_DOWNGRADE)}o(cRe,"forceDowngradePrompt");async function lRe(){let e=`${Ni.EOL}`+bf.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");Ys.override=pL(["GENERATE_CERTS"]),Ys.start(),Ys.message=e;let t={properties:{GENERATE_CERTS:{description:bf.magenta(`${Ni.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Ys.get([t]);return EL.includes(r.GENERATE_CERTS)}o(lRe,"upgradeCertsPrompt");p2.exports={forceUpdatePrompt:aRe,forceDowngradePrompt:cRe,upgradeCertsPrompt:lRe}});var gL=M((uHe,E2)=>{"use strict";var _L=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};E2.exports=_L});var g2=M((EHe,_2)=>{"use strict";var uRe=ie(),dRe=Ot(),fHe=z(),mHe=require("path"),hHe=require("fs"),pHe=(H(),v(Y));_2.exports={getOldPropsValue:fRe};function fRe(e,t,r=!1){let n=t.getRaw(e);return uRe.isNotEmptyAndHasValue(n)?n:r?dRe.getDefaultConfig(e):""}o(fRe,"getOldPropsValue")});var y2=M((gHe,R2)=>{"use strict";var gc=require("path"),Sc=require("fs-extra"),mRe=require("properties-reader"),hRe=gL(),Sr=z(),{getOldPropsValue:bt}=g2(),{HDB_SETTINGS_NAMES:Ae,CONFIG_PARAMS:iu}=(H(),v(Y)),ou=Ot(),MR=ae(),S2=ie(),oo=(H(),v(Y)),SL=new hRe("3.1.0"),T2=[];function pRe(){let e=mRe(MR.get(Ae.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Sr.info(t);let r=` ;Settings for the HarperDB process.
34
34
 
35
35
  ;The directory selected during install where the database files reside.
36
- ${ye.HDB_ROOT_KEY} = ${bt(ye.HDB_ROOT_KEY,e)}
36
+ ${Ae.HDB_ROOT_KEY} = ${bt(Ae.HDB_ROOT_KEY,e)}
37
37
  ;The port the HarperDB REST interface will listen on.
38
- ${ye.SERVER_PORT_KEY} = ${bt(ye.SERVER_PORT_KEY,e)}
38
+ ${Ae.SERVER_PORT_KEY} = ${bt(Ae.SERVER_PORT_KEY,e)}
39
39
  ;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
40
- ${ye.HTTP_SECURE_ENABLED_KEY} = ${bt(ye.HTTP_SECURE_ENABLED_KEY,e)}
40
+ ${Ae.HTTP_SECURE_ENABLED_KEY} = ${bt(Ae.HTTP_SECURE_ENABLED_KEY,e)}
41
41
  ;The path to the SSL certificate used when running with HTTPS enabled.
42
- ${ye.CERT_KEY} = ${bt(ye.CERT_KEY,e)}
42
+ ${Ae.CERT_KEY} = ${bt(Ae.CERT_KEY,e)}
43
43
  ;The path to the SSL private key used when running with HTTPS enabled.
44
- ${ye.PRIVATE_KEY_KEY} = ${bt(ye.PRIVATE_KEY_KEY,e)}
44
+ ${Ae.PRIVATE_KEY_KEY} = ${bt(Ae.PRIVATE_KEY_KEY,e)}
45
45
  ;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
46
- ${ye.CORS_ENABLED_KEY} = ${bt(ye.CORS_ENABLED_KEY,e)}
46
+ ${Ae.CORS_ENABLED_KEY} = ${bt(Ae.CORS_ENABLED_KEY,e)}
47
47
  ;Allows for setting allowable domains with CORS. Comma separated list.
48
- ${ye.CORS_WHITELIST_KEY} = ${bt(ye.CORS_WHITELIST_KEY,e)}
48
+ ${Ae.CORS_WHITELIST_KEY} = ${bt(Ae.CORS_WHITELIST_KEY,e)}
49
49
  ;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
50
- ${ye.SERVER_TIMEOUT_KEY} = ${bt(ye.SERVER_TIMEOUT_KEY,e,!0)}
50
+ ${Ae.SERVER_TIMEOUT_KEY} = ${bt(Ae.SERVER_TIMEOUT_KEY,e,!0)}
51
51
  ;The number of milliseconds of inactivity a server needs to wait for additional incoming data, after it has finished writing the last response. Defaults to 5,000 ms (5 seconds).
52
- ${ye.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${bt(ye.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
52
+ ${Ae.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${bt(Ae.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
53
53
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
54
- ${ye.SERVER_HEADERS_TIMEOUT_KEY} = ${bt(ye.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
54
+ ${Ae.SERVER_HEADERS_TIMEOUT_KEY} = ${bt(Ae.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
55
55
  ;Define whether to log to file or not.
56
- ${ye.LOG_TO_FILE} = ${ou.getDefaultConfig(iu.LOGGING_FILE)}
56
+ ${Ae.LOG_TO_FILE} = ${ou.getDefaultConfig(iu.LOGGING_FILE)}
57
57
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
58
- ${ye.LOG_TO_STDSTREAMS} = ${ou.getDefaultConfig(iu.LOGGING_STDSTREAMS)}
58
+ ${Ae.LOG_TO_STDSTREAMS} = ${ou.getDefaultConfig(iu.LOGGING_STDSTREAMS)}
59
59
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
60
- ${ye.LOG_LEVEL_KEY} = ${bt(ye.LOG_LEVEL_KEY,e)}
60
+ ${Ae.LOG_LEVEL_KEY} = ${bt(Ae.LOG_LEVEL_KEY,e)}
61
61
  ;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
62
- ${ye.LOG_PATH_KEY} = ${bt(ye.LOG_PATH_KEY,e)}
62
+ ${Ae.LOG_PATH_KEY} = ${bt(Ae.LOG_PATH_KEY,e)}
63
63
  ;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
64
- ${ye.LOG_DAILY_ROTATE_KEY} = ${bt(ye.LOG_DAILY_ROTATE_KEY,e)}
64
+ ${Ae.LOG_DAILY_ROTATE_KEY} = ${bt(Ae.LOG_DAILY_ROTATE_KEY,e)}
65
65
  ;Set the number of daily log files to maintain when LOG_DAILY_ROTATE is enabled. If no integer value is set, no limit will be set for
66
66
  ;daily log files which may consume a large amount of storage depending on your log settings.
67
- ${ye.LOG_MAX_DAILY_FILES_KEY} = ${bt(ye.LOG_MAX_DAILY_FILES_KEY,e)}
67
+ ${Ae.LOG_MAX_DAILY_FILES_KEY} = ${bt(Ae.LOG_MAX_DAILY_FILES_KEY,e)}
68
68
  ;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
69
- ${ye.PROPS_ENV_KEY} = ${bt(ye.PROPS_ENV_KEY,e)}
69
+ ${Ae.PROPS_ENV_KEY} = ${bt(Ae.PROPS_ENV_KEY,e)}
70
70
  ;This allows self signed certificates to be used in clustering. This is a security risk
71
71
  ;as clustering will not validate the cert, so should only be used internally.
72
72
  ;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
73
- ${ye.ALLOW_SELF_SIGNED_SSL_CERTS} = ${bt(ye.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
73
+ ${Ae.ALLOW_SELF_SIGNED_SSL_CERTS} = ${bt(Ae.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
74
74
  ;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
75
- ${ye.MAX_HDB_PROCESSES} = ${bt(ye.MAX_HDB_PROCESSES,e)}
75
+ ${Ae.MAX_HDB_PROCESSES} = ${bt(Ae.MAX_HDB_PROCESSES,e)}
76
76
  ;Set to true to enable clustering. Requires a valid enterprise license.
77
- ${ye.CLUSTERING_ENABLED_KEY} = ${bt(ye.CLUSTERING_ENABLED_KEY,e,!0)}
77
+ ${Ae.CLUSTERING_ENABLED_KEY} = ${bt(Ae.CLUSTERING_ENABLED_KEY,e,!0)}
78
78
  ;The port that will be used for HarperDB clustering.
79
- ${ye.CLUSTERING_PORT_KEY} = ${bt(ye.CLUSTERING_PORT_KEY,e)}
79
+ ${Ae.CLUSTERING_PORT_KEY} = ${bt(Ae.CLUSTERING_PORT_KEY,e)}
80
80
  ;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
81
- ${ye.CLUSTERING_NODE_NAME_KEY} = ${bt(ye.CLUSTERING_NODE_NAME_KEY,e)}
81
+ ${Ae.CLUSTERING_NODE_NAME_KEY} = ${bt(Ae.CLUSTERING_NODE_NAME_KEY,e)}
82
82
  ;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
83
- ${ye.CLUSTERING_USER_KEY} = ${bt(ye.CLUSTERING_USER_KEY,e)}
83
+ ${Ae.CLUSTERING_USER_KEY} = ${bt(Ae.CLUSTERING_USER_KEY,e)}
84
84
  ;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
85
- ${ye.DISABLE_TRANSACTION_LOG_KEY} = ${bt(ye.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
85
+ ${Ae.DISABLE_TRANSACTION_LOG_KEY} = ${bt(Ae.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
86
86
  ;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
87
- ${ye.OPERATION_TOKEN_TIMEOUT_KEY} = ${bt(ye.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
87
+ ${Ae.OPERATION_TOKEN_TIMEOUT_KEY} = ${bt(Ae.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
88
88
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
89
- ${ye.REFRESH_TOKEN_TIMEOUT_KEY} = ${bt(ye.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
89
+ ${Ae.REFRESH_TOKEN_TIMEOUT_KEY} = ${bt(Ae.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
90
90
  ;The port the IPC server will run on.
91
- ${ye.IPC_SERVER_PORT} = ${ou.getDefaultConfig(iu.IPC_NETWORK_PORT)}
91
+ ${Ae.IPC_SERVER_PORT} = ${ou.getDefaultConfig(iu.IPC_NETWORK_PORT)}
92
92
  ;Run HDB in the foreground.
93
- ${ye.RUN_IN_FOREGROUND} = ${ou.getDefaultConfig(iu.OPERATIONSAPI_FOREGROUND)}
93
+ ${Ae.RUN_IN_FOREGROUND} = ${ou.getDefaultConfig(iu.OPERATIONSAPI_FOREGROUND)}
94
94
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
95
- ${ye.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${ou.getDefaultConfig(iu.CUSTOMFUNCTIONS_ENABLED)}
95
+ ${Ae.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${ou.getDefaultConfig(iu.CUSTOMFUNCTIONS_ENABLED)}
96
96
  ;The port used to access the custom functions server.
97
- ${ye.CUSTOM_FUNCTIONS_PORT_KEY} = ${ou.getDefaultConfig(iu.HTTP_PORT)}
97
+ ${Ae.CUSTOM_FUNCTIONS_PORT_KEY} = ${ou.getDefaultConfig(iu.HTTP_PORT)}
98
98
  ;The path to the folder containing HarperDB custom function files.
99
- ${ye.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${gc.join(bt(ye.HDB_ROOT_KEY,e),"custom_functions")}
99
+ ${Ae.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${gc.join(bt(Ae.HDB_ROOT_KEY,e),"custom_functions")}
100
100
  ;Set the max number of processes HarperDB will start for the Custom Functions server
101
- ${ye.MAX_CUSTOM_FUNCTION_PROCESSES} = ${ou.getDefaultConfig(iu.HTTP_THREADS)}
102
- `,n=PR.get("settings_path"),s=gc.dirname(n),i=gc.join(s,"3_1_0_upgrade_settings.bak");try{Sr.info(`Backing up old settings file to: ${i}`),Sc.copySync(n,i)}catch(c){throw Sr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Sr.info("New settings file values for 3.1.0 upgrade:",r),Sr.info(`Creating new/upgraded settings file at '${n}'`),Sc.writeFileSync(n,r),Sr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Sr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Sr.error(c),Sc.copySync(i,n),c}PR.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Sr.info(a),a}o(fRe,"updateSettingsFile310");function mRe(){let e=gc.join(E2.getHomeDir(),oo.HDB_HOME_DIR_NAME,oo.LICENSE_KEY_DIR_NAME,oo.LICENSE_FILE_NAME),t=gc.join(E2.getHomeDir(),oo.HDB_HOME_DIR_NAME,oo.LICENSE_KEY_DIR_NAME,oo.REG_KEY_FILE_NAME),r=gc.join(PR.getHdbBasePath(),oo.LICENSE_KEY_DIR_NAME,oo.LICENSE_FILE_NAME),n=gc.join(r,oo.LICENSE_FILE_NAME),s=gc.join(r,oo.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Sr.info(i);let a="Creating .license directory";console.log(a),Sr.info(a),Sc.mkdirpSync(r);try{Sc.accessSync(e);try{let c="Moving licence file";console.log(c),Sr.info(c),Sc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving license file failed";console.error(l),Sr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Sr.warn(l)}try{Sc.accessSync(t);try{let c="Moving registration file";console.log(c),Sr.info(c),Sc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving registration file failed";console.error(l),Sr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Sr.warn(l)}}o(mRe,"moveLicenseFiles");pL.sync_functions.push(fRe);pL.sync_functions.push(mRe);_2.push(pL);g2.exports=_2});var b2=M((_He,A2)=>{"use strict";var hs=Rt(),{insertRecords:hRe}=il(),pRe=bn(),Tc=Kt(),ERe=se(),na=j(),_Re=se(),ao=require("fs-extra"),sa=require("path"),gRe=require("cli-progress"),Xp=require("assert"),SRe=require("pino"),TRe=oe();A2.exports=RRe;var LR,T2,DR,EL,Tn,Zp=!1;async function RRe(e=!0){return LR=TRe.getHdbBasePath(),T2=sa.join(LR,"schema"),DR=sa.join(LR,"4_0_0_upgrade_tmp"),EL=sa.join(LR,"transactions"),console.info("Reindexing upgrade started for schemas"),na.notify("Reindexing upgrade started for schemas"),await R2(T2,!1,e),await ao.pathExists(EL)&&(console.info(`
101
+ ${Ae.MAX_CUSTOM_FUNCTION_PROCESSES} = ${ou.getDefaultConfig(iu.HTTP_THREADS)}
102
+ `,n=MR.get("settings_path"),s=gc.dirname(n),i=gc.join(s,"3_1_0_upgrade_settings.bak");try{Sr.info(`Backing up old settings file to: ${i}`),Sc.copySync(n,i)}catch(c){throw Sr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Sr.info("New settings file values for 3.1.0 upgrade:",r),Sr.info(`Creating new/upgraded settings file at '${n}'`),Sc.writeFileSync(n,r),Sr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Sr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Sr.error(c),Sc.copySync(i,n),c}MR.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Sr.info(a),a}o(pRe,"updateSettingsFile310");function ERe(){let e=gc.join(S2.getHomeDir(),oo.HDB_HOME_DIR_NAME,oo.LICENSE_KEY_DIR_NAME,oo.LICENSE_FILE_NAME),t=gc.join(S2.getHomeDir(),oo.HDB_HOME_DIR_NAME,oo.LICENSE_KEY_DIR_NAME,oo.REG_KEY_FILE_NAME),r=gc.join(MR.getHdbBasePath(),oo.LICENSE_KEY_DIR_NAME,oo.LICENSE_FILE_NAME),n=gc.join(r,oo.LICENSE_FILE_NAME),s=gc.join(r,oo.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Sr.info(i);let a="Creating .license directory";console.log(a),Sr.info(a),Sc.mkdirpSync(r);try{Sc.accessSync(e);try{let c="Moving licence file";console.log(c),Sr.info(c),Sc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving license file failed";console.error(l),Sr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Sr.warn(l)}try{Sc.accessSync(t);try{let c="Moving registration file";console.log(c),Sr.info(c),Sc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving registration file failed";console.error(l),Sr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Sr.warn(l)}}o(ERe,"moveLicenseFiles");SL.sync_functions.push(pRe);SL.sync_functions.push(ERe);T2.push(SL);R2.exports=T2});var w2=M((THe,N2)=>{"use strict";var hs=Rt(),{insertRecords:_Re}=il(),gRe=In(),Tc=Kt(),SRe=ie(),na=z(),TRe=ie(),ao=require("fs-extra"),sa=require("path"),RRe=require("cli-progress"),Xp=require("assert"),yRe=require("pino"),ARe=ae();N2.exports=bRe;var vR,A2,UR,TL,Rn,Zp=!1;async function bRe(e=!0){return vR=ARe.getHdbBasePath(),A2=sa.join(vR,"schema"),UR=sa.join(vR,"4_0_0_upgrade_tmp"),TL=sa.join(vR,"transactions"),console.info("Reindexing upgrade started for schemas"),na.notify("Reindexing upgrade started for schemas"),await b2(A2,!1,e),await ao.pathExists(TL)&&(console.info(`
103
103
 
104
- Reindexing upgrade started for transaction logs`),na.notify("Reindexing upgrade started for transaction logs"),await R2(EL,!0,e)),na.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Zp?", but errors occurred":"")}o(RRe,"reindexUpgrade");async function R2(e,t,r){let n=await ao.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=sa.join(e,a.toString());if(a===".DS_Store")continue;let l=await ao.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&ao.statSync(sa.join(c,f)).isDirectory())try{await yRe(a,f,t),Tn.info(`Reindexing started for ${a}.${f}`),na.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await bRe(a,f,c,t,r),Tn.info(`Reindexing completed for ${a}.${f}`),na.notify(`Reindexing completed for ${a}.${f}`)}catch(m){Zp=!0,m.schema_path=c,m.table_name=f,na.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),na.error(m),Tn.error(m),console.error(m)}}}if(!Zp)try{await ao.rm(DR,{recursive:!0})}catch{}}o(R2,"processTables");async function yRe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=sa.join(DR,s);await ao.ensureDir(DR),await ao.writeFile(i,""),Tn=SRe({level:"debug",formatters:{bindings(){}}},i)}o(yRe,"initPinoLogger");var ARe=20;async function bRe(e,t,r,n,s){let i;try{i=await hs.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){na.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`),Tn.error(T);return}throw T}let a=wRe(i.dbis),c=hs.openDBI(i,a),l=Object.keys(i.dbis),u=hs.statDBI(i,a);Tn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new gRe.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 hs.createEnvironment(r,t,!1);hs.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>ARe&&await h();await h()}catch(T){throw Zp=!0,Tn.error(T),T}async function h(){let T,y=m.map(({value:O})=>O);n?T=await Promise.all(y.map(O=>IRe(f,O))):T=await hRe(f,a,l.filter(O=>O!=="__blob__"),y,!1);for(let O=0,F=m.length;O<F;O++){let{key:Z,value:q}=m[O];Tn.info(`Record hash value: ${Z} hash: ${a}`);let W;n?W=T[O]:W=T.written_hashes.indexOf(Z)>-1,Xp(W,!0),NRe(f,a,q[a],n),Tn.info(`Insert success, written hashes: ${T.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&na.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),Tn.info(`${d.value}/${d.total} records inserted`)}o(h,"finishOutstanding"),d.stop();let p=hs.statDBI(i,a),_=hs.statDBI(f,a);if(Tn.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${_.entryCount}`),Xp.deepStrictEqual(p.entryCount,_.entryCount),await hs.closeEnvironment(i),await hs.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let T=sa.join(r,t),y=sa.join(T,"data.mdb"),N=sa.join(T,"lock.mdb");await ao.unlink(y),await ao.unlink(N),await ao.rmdir(T),Tn.info(`Deleted old environment files from schema folder: ${y}, ${N}`)}let g=await hs.openEnvironment(r,t),R=hs.statDBI(g,a);Tn.info(`New stats: ${JSON.stringify(_)}. New stats after move: ${JSON.stringify(R)}`),Xp.deepStrictEqual(R.entryCount,_.entryCount),await hs.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(bRe,"processTable");async function IRe(e,t){hs.initializeDBIs(e,Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Tc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),_Re.isEmpty(t.user_name)||e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(IRe,"insertTransaction");function NRe(e,t,r,n){let i=e.dbis[t].get(r);Xp.deepStrictEqual(typeof i,"object");let a;if(n){let c={[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Tc.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&&!ERe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];y2(e,c,f,r)}else y2(e,c,l,r)}o(NRe,"validateIndices");function y2(e,t,r,n){try{let s=!1,i=pRe.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||Tn.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),Xp.deepStrictEqual(s,!0)}catch(s){Zp=!0,Tn.error(s),console.error(s)}}o(y2,"validateIndex");function wRe(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(wRe,"getHashDBI")});var C2=M((THe,O2)=>{"use strict";var MR=require("path"),Rc=require("fs-extra"),ORe=hL(),au=j(),I2=Ot(),_L=oe(),wi=(H(),v(Y)),vR=se(),CRe=require("properties-reader"),PRe=ci(),LRe=Ch(),DRe=sn(),SHe=require("util"),MRe=DRe.searchByValue,vRe=on(),URe=ET(),xRe=mt(),BRe=b2(),N2=as(),FRe=CR(),rE=new ORe("4.0.0"),w2=[],eE,tE;async function HRe(){try{if(await FRe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),eE){let t=vR.changeExtension(eE,".bak");await Rc.move(eE,t)}if(tE){let t=vR.changeExtension(tE,".bak");await Rc.move(tE,t)}await N2.generateKeys()}else console.log("Using existing certificates."),N2.updateConfigCert(eE,tE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(HRe,"generateNewKeys");async function kRe(){console.log("Updating HarperDB nodes."),au.info("Updating HarperDB nodes.");let e=[];try{let t=new PRe(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await MRe(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!xRe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,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:wi.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(vR.isEmptyOrZeroLength(n))return;let s=new LRe(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await vRe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{URe.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(kRe,"updateNodes");async function qRe(){let e=_L.get(wi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(MR.join("config","settings.js"))){au.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),au.info(t);let r=MR.dirname(e),n=_L.get(wi.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=MR.join(n,"backup","4_0_0_upgrade_settings.bak"),i=MR.join(n,wi.HDB_CONFIG_FILE);try{au.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Rc.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{au.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),au.info("Updating env variables with new settings values");let f=I2.initOldConfig(e);eE=f[wi.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],tE=f[wi.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],I2.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=vR.getPropsFilePath();Rc.accessSync(a,Rc.constants.F_OK|Rc.constants.R_OK);let l=CRe(a).get(wi.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
105
- install_user = ${l}`;try{Rc.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{_L.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{Rc.removeSync(r),console.log(d),au.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(qRe,"updateSettingsFile400");rE.async_functions.push(qRe);rE.async_functions.push(HRe);rE.async_functions.push(BRe);rE.async_functions.push(kRe);w2.push(rE);O2.exports=w2});var gL=M((yHe,M2)=>{"use strict";var cu=se(),GRe=(H(),v(Y)),P2=j(),{DATA_VERSION:$Re,UPGRADE_VERSION:VRe}=GRe.UPGRADE_JSON_FIELD_NAMES_ENUM,L2=S2(),UR=C2(),lu=new Map;L2&&L2.forEach(e=>{lu.set(e.version,e)});UR&&UR.forEach(e=>{lu.set(e.version,e)});UR&&UR.forEach(e=>{lu.set(e.version,e)});function KRe(){return[...lu.keys()].sort(cu.compareVersions)}o(KRe,"getSortedVersions");function D2(e){let t=e[$Re],r=e[VRe];return cu.isEmptyOrZeroLength(t)||cu.isEmptyOrZeroLength(r)?(P2.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),P2.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."),[]):[...lu.keys()].sort(cu.compareVersions).filter(function(n){return cu.compareVersions(n,t)>0&&cu.compareVersions(n,r)<=0})}o(D2,"getVersionsForUpgrade");function YRe(e){return D2(e).length>0}o(YRe,"hasUpgradesRequired");function WRe(e){return cu.isEmptyOrZeroLength(e)?null:lu.has(e)?lu.get(e):null}o(WRe,"getDirectiveByVersion");M2.exports={getSortedVersions:KRe,getDirectiveByVersion:WRe,getVersionsForUpgrade:D2,hasUpgradesRequired:YRe}});var BR=M((bHe,F2)=>{"use strict";var zRe=require("util"),SL=require("chalk"),jRe=require("os"),U2=on(),QRe=sn(),ps=(H(),v(Y)),x2=a2(),RL=YI(),{UpgradeObject:v2}=u2(),{forceDowngradePrompt:JRe}=CR(),{packageJson:XRe}=It(),xR=j(),If=se(),yL=ws(),ZRe=(Me(),v(_t)),eye=gL(),tye=zRe.promisify(yL.setSchemaDataToGlobal),rye=QRe.searchByValue,nye="info_id",sye="2.9.9",iye="3.0.0";async function oye(e){let t=new x2.HdbInfoInsertObject(1,e,e),r=new RL.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return yL.setSchemaDataToGlobal(),U2.insert(r)}o(oye,"insertHdbInstallInfo");async function TL(e){let t,r=await B2(),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 x2.HdbInfoInsertObject(i,e,e);let a=new RL.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await tye(),U2.insert(a)}o(TL,"insertHdbUpgradeInfo");async function B2(){let e=new RL.NoSQLSeachObject(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,nye,ps.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await rye(e))}catch(r){console.error(r)}return t}o(B2,"getAllHdbInfoRecords");async function aye(){let e=await B2();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(aye,"getLatestHdbInfoRecord");async function cye(){xR.info("Checking if HDB software has been updated");try{let e=XRe.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await aye(),r;if(If.isEmpty(t))r=sye;else if(r=t.data_version_num,If.compareVersions(r.toString(),e.toString())>0){if(!If.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(SL.yellow(`This instance's data was last run on version ${r}`)),console.error(SL.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.${jRe.EOL}${ps.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");If.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(SL.yellow(`This instance's data was last run on version ${r}`)),await JRe(new v2(r,e))?await TL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(yL.setSchemaDataToGlobal(),lye(r),e.toString()===r.toString())return;let n=new v2(r,e);if(eye.hasUpgradesRequired(n))return n;If.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await TL(n.upgrade_version),xR.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw xR.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),xR.fatal(e),e}}o(cye,"getVersionUpdateInfo");function lye(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 ${ps.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in ZRe.databases.system))throw console.log(t),new Error(t);if(!If.isEmpty(e)&&e<iye)throw console.log(t),new Error(t)}o(lye,"checkIfInstallIsSupported");F2.exports={insertHdbInstallInfo:oye,insertHdbUpgradeInfo:TL,getVersionUpdateInfo:cye}});var G2=M((NHe,q2)=>{"use strict";var FR=require("joi"),{boolean:uye,string:AL,number:dye}=FR.types(),H2=require("fs-extra"),nE=(H(),v(Y)),k2=require("path"),fye=nt();q2.exports=mye;function mye(e){let t=AL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=FR.object({[nE.INSTALL_PROMPTS.ROOTPATH]:FR.custom(hye),[nE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:FR.alternatives([dye.min(0),AL]).allow("null",null),[nE.INSTALL_PROMPTS.TC_AGREEMENT]:AL.valid("yes","YES","Yes"),[nE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[nE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:uye});return fye.validateBySchema(e,r)}o(mye,"installValidator");function hye(e,t){if(H2.existsSync(k2.join(e,"system/hdb_user/data.mdb"))||H2.existsSync(k2.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(hye,"validateRootAvailable")});var V2=M((OHe,$2)=>{"use strict";var{mkdirpSync:pye,copySync:Eye}=require("fs-extra"),yc=require("path"),sE=(H(),v(Y)),{PACKAGE_ROOT:_ye}=It(),IL=j(),gye=Xn(),bL=wo(),Sye=Nt();$2.exports=Tye;async function Tye(e){IL.trace("Mounting HarperDB"),uu(e),uu(yc.join(e,"backup")),uu(yc.join(e,"keys")),uu(yc.join(e,"keys",sE.LICENSE_FILE_NAME)),uu(yc.join(e,"log")),uu(yc.join(e,"database")),uu(yc.join(e,"components")),Eye(yc.resolve(_ye,"./utility/install/README.md"),yc.join(e,"README.md")),await Rye()}o(Tye,"mountHdb");async function Rye(){let e=Qu(),t=Object.keys(bL);for(let r=0;r<t.length;r++){let n=t[r],s=bL[n].hash_attribute;try{Sye.initSystemSchemaPaths(sE.SYSTEM_SCHEMA_NAME,n);let i=new e(sE.SYSTEM_SCHEMA_NAME,n,s);i.attributes=bL[n].attributes;let a=i.attributes.find(({attribute:c})=>c===s);a.isPrimaryKey=!0,["hdb_user","hdb_role","hdb_nodes"].includes(n)&&(i.audit=!0),await gye.createTable(n,i)}catch(i){throw IL.error(`issue creating environment for ${sE.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}o(Rye,"createLMDBTables");function uu(e){pye(e,{mode:sE.HDB_FILE_PERMISSIONS}),IL.info(`Directory ${e} created`)}o(uu,"makeDirectory")});var sQ=M((DHe,nQ)=>{"use strict";var wL=require("os"),j2=require("inquirer"),zs=require("fs-extra"),yye=require("properties-reader"),fu=require("chalk"),lo=require("path"),Aye=require("human-readable-ids").hri,bye=require("ora"),Iye=require("yaml"),Tr=j(),Ac=oe(),iE=se(),kR=Hc(),Q2=BR(),{packageJson:J2}=It(),_e=(H(),v(Y)),{CONFIG_PARAM_MAP:PHe,CONFIG_PARAMS:$t}=_e,Nye=G2(),wye=V2(),OL=Ot(),Oye=rs(),Cye=Ih(),Pye=cL(),Lye=ws(),Dye=require("util").promisify,Mye=Dye(Lye.setSchemaDataToGlobal),K2=as(),du=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),en=o(e=>fu.magenta.bold(e),"HDB_PROMPT_MSG"),vye="https://harperdb.io/legal/end-user-license-agreement",bc=wL.EOL,ia="",Uye="yes",Y2="Starting HarperDB install...",W2="HarperDB installation was successful.",z2="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",xye="An out of date version of HarperDB is already installed.",NL="It appears that HarperDB is already installed. Exiting install...",Bye="Aborting install",LHe=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])$/),Fye=new RegExp(/^[^\s.,*>]+$/),Hye=wL.homedir(),kye=lo.join(Hye,_e.HDB_ROOT_DIR_NAME),qye="HDB_ADMIN",Gye="CLUSTER_USER",$ye="dev",Vye="localhost",HR={[$t.HTTP_CORS]:!0,[$t.HTTP_CORSACCESSLIST]:["*"],[$t.HTTP_PORT]:9926,[$t.AUTHENTICATION_AUTHORIZELOCAL]:!0,[$t.THREADS_COUNT]:1,[$t.THREADS_DEBUG]:!0,[$t.LOGGING_STDSTREAMS]:!0,[$t.LOGGING_LEVEL]:"info",[$t.OPERATIONSAPI_NETWORK_PORT]:9925,[$t.LOCALSTUDIO_ENABLED]:!0},Zr={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:"},Ic=kR([_e.INSTALL_PROMPTS.HDB_CONFIG]),co,X2=!1,CL=!1,Z2=!1;nQ.exports={install:eQ,updateConfigEnv:tAe,setIgnoreExisting:rAe};eQ.createSuperUser=rQ;async function eQ(){console.log(en(bc+Y2+bc)),Tr.notify(Y2);let e;Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Kye());let t=Wye();Object.assign(t,e),t[_e.INSTALL_PROMPTS.TC_AGREEMENT]&&t[_e.INSTALL_PROMPTS.ROOTPATH]&&t[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[_e.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(Z2=!0,t[_e.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Nye(t);if(r)throw r.message;await zye(),await jye(t);let n=await Yye(t);co=n[_e.INSTALL_PROMPTS.ROOTPATH],Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&lo.dirname(Ic[_e.INSTALL_PROMPTS.HDB_CONFIG])===co&&(X2=!0),!CL&&!Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&await zs.pathExists(lo.join(co,_e.HDB_CONFIG_FILE))&&(console.error(NL),process.exit());let s=bye({prefixText:en("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),iE.isEmpty(co))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ac.setHdbBasePath(co),await wye(co),await Qye(),await Jye(n),Tr.initLogSettings(!0),await rQ(n),await Zye(n),await K2.updateConfigCert(),await K2.generateCertsKeys(),await eAe(),Pye(),s.stop(),console.log(en(bc+W2+bc)),Tr.notify(W2)}o(eQ,"install");function Kye(){let e=Iye.parseDocument(zs.readFileSync(Ic[_e.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=OL.flattenConfig(e.toJSON());return t[_e.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[_e.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(Kye,"getConfigFromFile");async function Yye(e){Tr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:du,when:oa(e[_e.INSTALL_PROMPTS.ROOTPATH],Zr.DESTINATION),name:_e.INSTALL_PROMPTS.ROOTPATH,prefix:ia,default:kye,validate:o(async s=>Ws(s)?Ws(s):await zs.pathExists(lo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:en(Zr.DESTINATION)},{type:"input",transformer:du,when:oa(e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Zr.HDB_USERNAME),name:_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ia,default:qye,validate:o(s=>Ws(s)?Ws(s):(t=s,!0),"validate"),message:en(Zr.HDB_USERNAME)},{type:"password",when:oa(e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Zr.HDB_PASS),name:_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ia,validate:o(s=>Ws(s)?Ws(s):!0,"validate"),message:en(Zr.HDB_PASS)},{type:"input",transformer:du,when:oa(e[_e.INSTALL_PROMPTS.DEFAULTS_MODE],Zr.DEFAULTS_MODE),name:_e.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:ia,default:$ye,validate:o(s=>Ws(s)?Ws(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:en(Zr.DEFAULTS_MODE)}];if(Z2||r.push({type:"input",name:_e.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:du,when:oa(e[_e.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Zr.REPLICATION_HOSTNAME),prefix:ia,default:Vye,message:en(Zr.REPLICATION_HOSTNAME)}),iE.autoCastBoolean(e[_e.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:du,when:oa(e[_e.INSTALL_PROMPTS.CLUSTERING_NODENAME],Zr.NODE_NAME),name:_e.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ia,default:Aye.random(),validate:o(i=>Fye.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:en(Zr.NODE_NAME)},{type:"input",transformer:du,when:oa(e[_e.INSTALL_PROMPTS.CLUSTERING_USER],Zr.CLUSTER_USERNAME),name:_e.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ia,default:Gye,validate:o(i=>Ws(i)?Ws(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:en(Zr.CLUSTER_USERNAME)},{type:"password",when:oa(e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Zr.CLUSTER_PASS),name:_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ia,validate:o(i=>Ws(i)?Ws(i):!0,"validate"),message:en(Zr.CLUSTER_PASS)}];r.push(...s)}let n=await j2.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(Yye,"installPrompts");function oa(e,t){return e!==void 0?(t.includes("password")?(console.log(`${en(t)} ${fu.gray("[hidden]")}`),Tr.trace(`${en(t)} [hidden]`)):(console.log(`${en(t)} ${e}`),Tr.trace(`${en(t)} ${e}`)),!1):!0}o(oa,"displayCmdEnvVar");function Ws(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Ws,"checkForEmptyValue");function Wye(){let e=Object.keys(_e.INSTALL_PROMPTS),t=kR(e),r=kR(Object.keys(_e.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=_e.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(Wye,"checkForPromptOverride");async function zye(){Tr.trace("Checking for existing install.");let e=iE.getPropsFilePath(),t=await zs.pathExists(e),r;if(t){Tr.trace(`Install found an existing boot prop file at:${e}`);let n=yye(e),s=OL.getConfigValue(_e.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(_e.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await zs.pathExists(s)}if(!t&&iE.noBootFile()&&(r=!0),r&&!CL){if(Tr.trace(`Install found existing HDB config at:${e}`),await Q2.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${J2.version}. Exiting install...`;console.log(bc+fu.magenta.bold(xye)),console.log(fu.magenta.bold(s)),Tr.error(s)}else console.log(bc+fu.magenta.bold(NL)),Tr.error(NL);process.exit(0)}}o(zye,"checkForExistingInstall");async function jye(e){Tr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${vye}${bc}and can be viewed by typing or copying and pasting the URL into your web browser.${bc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:ia,transformer:du,when:oa(e[_e.INSTALL_PROMPTS.TC_AGREEMENT],t),name:_e.INSTALL_PROMPTS.TC_AGREEMENT,message:en(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:fu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await j2.prompt([r]);n[_e.INSTALL_PROMPTS.TC_AGREEMENT]&&n[_e.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Uye&&(console.log(fu.yellow(z2)),Tr.error(z2),process.exit(0))}o(jye,"termsAgreement");async function Qye(){let e=lo.join(co,_e.HDB_CONFIG_FILE),t;try{t=wL.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}
106
- install_user = ${t}`,n=iE.getHomeDir(),s=lo.join(n,_e.HDB_HOME_DIR_NAME),i=lo.join(s,_e.LICENSE_KEY_DIR_NAME);try{zs.mkdirpSync(s,{mode:_e.HDB_FILE_PERMISSIONS}),zs.mkdirpSync(i,{mode:_e.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${_e.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=lo.join(s,_e.BOOT_PROPS_FILE_NAME);try{await zs.writeFile(a,r)}catch(c){throw Tr.error(`There was an error creating the boot file at path: ${a}`),c}Ac.setProperty(_e.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ac.setProperty(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ac.setProperty(Ac.BOOT_PROPS_FILE_PATH,a)}}o(Qye,"createBootPropertiesFile");async function Jye(e){Tr.trace("Creating HarperDB config file");let t=kR(Object.keys(_e.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[_e.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in HR){if(r===$t.HTTP_PORT&&t[$t.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??HR[r],t[$t.HTTP_SECUREPORT]=null;continue}else if(r===$t.HTTP_PORT)continue;if(r===$t.OPERATIONSAPI_NETWORK_PORT&&t[$t.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??HR[r],t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===$t.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=HR[r])}}else t[$t.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[$t.HTTP_PORT.toLowerCase()]&&(t[$t.HTTP_SECUREPORT]=null);try{Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]||OL.createConfigFile(t),Ac.initSync()}catch(r){Xye(r)}}o(Jye,"createConfigFile");function Xye(e){Tr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Bye);let t=lo.resolve(Ac.get(Ac.BOOT_PROPS_FILE_PATH),"../");t&&zs.removeSync(t),co&&(X2?zs.readdirSync(co,{withFileTypes:!0}).forEach(n=>{let s=lo.join(n.path,n.name);s!==Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]&&zs.removeSync(s)}):zs.removeSync(co)),process.exit(1)}o(Xye,"rollbackInstall");async function tQ(e,t){Tr.trace("Creating admin user"),await Mye();let r;try{r=await Cye.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 Oye.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(tQ,"createAdminUser");async function rQ(e){Tr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await tQ(t,r),delete e[_e.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[_e.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(rQ,"createSuperUser");async function Zye(e){Tr.trace("Creating Cluster user.");let t;e[_e.INSTALL_PROMPTS.CLUSTERING_USER]&&e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[_e.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await tQ({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[_e.INSTALL_PROMPTS.CLUSTERING_USER],delete e[_e.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(Zye,"createClusterUser");async function eAe(){let e=J2.version;if(e)await Q2.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(eAe,"insertHdbVersionInfo");function tAe(e){Ic[_e.INSTALL_PROMPTS.HDB_CONFIG]=e}o(tAe,"updateConfigEnv");function rAe(e){CL=e}o(rAe,"setIgnoreExisting")});var aQ=M((vHe,oQ)=>{"use strict";var PL=se(),Es=j(),iQ=gL();oQ.exports={processDirectives:nAe};async function nAe(e){console.log("Starting upgrade process...");let t=iQ.getVersionsForUpgrade(e),r=oAe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;Es.notify(c),console.log(c);let l=[],u=[];try{l=sAe(a.sync_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await iAe(a.async_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(nAe,"processDirectives");function sAe(e){if(PL.isEmptyOrZeroLength(e))return Es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Es.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Es.info(`Running function ${r.name}`),!(r instanceof Function)){Es.info("Variable being processed is not a function");continue}let n=r();Es.info(n),t.push(n)}return t}o(sAe,"runSyncFunctions");async function iAe(e){if(PL.isEmptyOrZeroLength(e))return Es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Es.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Es.info(`Running function ${s.name}`),!(s instanceof Function)){Es.info("Variable being processed is not a function");continue}let i=await s();Es.info(i),t.push(i)}return t}o(iAe,"runAsyncFunctions");function oAe(e){if(PL.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=iQ.getDirectiveByVersion(r);n&&t.push(n)}return t}o(oAe,"getUpgradeDirectivesToInstall")});var hQ=M((xHe,mQ)=>{"use strict";var qR=oe();qR.initSync();var dQ=require("chalk"),cQ=require("fs-extra"),ca=j(),aa=(H(),v(Y)),aAe=aQ(),LL=se(),fQ=BR(),cAe=CR(),lQ=dA(),lAe=ws(),{packageJson:uQ}=It(),uAe=require("util").promisify,dAe=uAe(lAe.setSchemaDataToGlobal),DL,{UPGRADE_VERSION:ML}=aa.UPGRADE_JSON_FIELD_NAMES_ENUM;mQ.exports={upgrade:fAe};async function fAe(e){await dAe(),DL===void 0&&(DL=pp()),cQ.existsSync(qR.get(qR.BOOT_PROPS_FILE_PATH))||(oE("The hdb_boot_properties file was not found. Please install HDB.",aa.LOG_LEVELS.ERROR),process.exit(1)),cQ.existsSync(qR.get(aa.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(oE("The hdb settings file was not found. Please make sure HDB is installed.",aa.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await fQ.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),oE(`This version of HarperDB is ${uQ.version}`,aa.LOG_LEVELS.INFO);let r=t[ML]??uQ.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${aa.HDB_SUPPORT_ADDRESS}`),ca.notify("Missing new version field from upgrade info object"),process.exit(1)),await mAe();let n,s=0;try{n=await cAe.forceUpdatePrompt(t)}catch(i){ca.error("There was an error when prompting user about upgrade."),ca.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),ca.info(`Starting upgrade to version ${r}`),await hAe(t),oE(`HarperDB was successfully upgraded to version ${t[ML]}`,aa.LOG_LEVELS.INFO)}o(fAe,"upgrade");async function mAe(){let e=!1,t=await lQ.findPs(aa.HDB_PROC_NAME);if(LL.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await lQ.findPs("hdb_express");LL.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await DL.list();LL.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(dQ.red(r)),ca.error(r),process.exit(1)}}o(mAe,"checkIfRunning");async function hAe(e){try{await aAe.processDirectives(e)}catch(t){throw oE("There was an error during the data upgrade. Please check the logs.",aa.LOG_LEVELS.ERROR),t}try{await fQ.insertHdbUpgradeInfo(e[ML])}catch(t){ca.error("Error updating the 'hdb_info' system table."),ca.error(t)}}o(hAe,"runUpgrade");function oE(e,t=void 0){t||(t=ca.info),ca[t](e),console.log(dQ.magenta(e))}o(oE,"printToLogAndConsole")});var RQ=M(aE=>{"use strict";var Ae=oe();Ae.initSync();cf();var or=(H(),v(Y)),{CONFIG_PARAMS:Ue}=or,_s=j(),la=require("fs-extra"),ua=require("path"),pAe=cL(),{install:EAe}=sQ(),vL=require("chalk"),{packageJson:_Ae,PACKAGE_ROOT:gAe}=It(),da=se(),UL=Ot(),EQ=Hc(),pQ=bT(),SAe=hQ(),{compactOnStart:TAe}=(yC(),v(RC)),RAe=require("minimist"),yAe=as(),{startHTTPThreads:AAe}=(xL(),v(yQ)),bAe=BR(),{isMainThread:IAe}=require("worker_threads"),FHe=wo(),HHe=vo(),kHe=fI(),qHe=Qu(),GR=(H(),v(Y)),uo,Nf,_Q=!1,NAe="Upgrade complete. Starting HarperDB.",wAe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",OAe="HarperDB not found, starting install process.",CAe="There was an error during install, check install_log.log for more details. Exiting.",PAe="HarperDB successfully started.";function LAe(){if(!_Q){let e=o(()=>{la.removeSync(ua.join(Ae.get(or.CONFIG_PARAMS.ROOTPATH),or.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(LAe,"addExitListeners");async function gQ(e=!1,t=!1){if(console.log(vL.magenta("Starting HarperDB...")),_s.suppressLogging?.(()=>{console.log(vL.magenta(""+la.readFileSync(ua.join(gAe,"utility/install/ascii_logo.txt"))))}),await TQ()===!1){console.log(OAe);try{await EAe()}catch(l){console.error(CAe,l),_s.error(l),process.exit(1)}}if(!e){let l=EQ(Object.keys(or.CONFIG_PARAM_MAP),!0);!da.isEmpty(l)&&!da.isEmptyOrZeroLength(Object.keys(l))&&UL.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Nf?.service==="clustering";Nf?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=ua.join(Ae.get(or.CONFIG_PARAMS.ROOTPATH),or.HDB_PID_FILE),i=xAe(s);i&&i!==1&&BAe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),uo===void 0&&(uo=pp()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await pQ.generateNatsConfig(),await uo.startClusteringProcesses(!0),process.exit()),LAe(),await la.writeFile(ua.join(Ae.get(GR.CONFIG_PARAMS.ROOTPATH),GR.HDB_PID_FILE),`${process.pid}`),_s.info("HarperDB PID",process.pid);let a;try{let l=await bAe.getVersionUpdateInfo();l!==void 0&&(a=l[or.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await SAe.upgrade(l),console.log(NAe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),_s.error(l)):(console.error(wAe,l),_s.error(l)),process.exit(1)}pAe(),vAe(),await yAe.reviewSelfSignedCert(),da.autoCastBoolean(Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&IAe&&await pQ.generateNatsConfig(t)}o(gQ,"initialize");async function DAe(e=!1){try{Nf=RAe(process.argv),Nf.ROOTPATH&&UL.updateConfigObject("settings_path",ua.join(Nf.ROOTPATH,or.HDB_CONFIG_FILE)),await gQ(e,!0),Ae.get(or.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await TAe();let t=process.env.IS_SCRIPTED_SERVICE&&!Nf.service;da.autoCastBoolean(Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await uo.startClusteringProcesses(),await uo.startClusteringThreads()),await AAe(process.env.DEV_MODE?1:Ae.get(GR.CONFIG_PARAMS.THREADS_COUNT)??Ae.get(GR.CONFIG_PARAMS.THREADS)),t||SQ()}catch(t){console.error(t),_s.error(t),process.exit(1)}}o(DAe,"main");function SQ(){_s.suppressLogging(()=>{console.log(vL.magenta(`HarperDB ${_Ae.version} successfully started`))}),_s.notify(PAe)}o(SQ,"started");async function MAe(e=!0){_Q=!e;try{uo===void 0&&(uo=pp()),uo.enterPM2Mode(),await gQ(),da.autoCastBoolean(Ae.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await uo.startClusteringProcesses(),await uo.startService(or.PROCESS_DESCRIPTORS.HDB),SQ(),e&&process.exit(0)}catch(t){console.error(t),_s.error(t),process.exit(1)}}o(MAe,"launch");function vAe(){let e=ua.join(Ae.get(or.CONFIG_PARAMS.ROOTPATH),or.LICENSE_KEY_DIR_NAME,or.LICENSE_FILE_NAME),t=ua.join(e,or.LICENSE_FILE_NAME),r=ua.join(e,or.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=EQ(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(da.isEmpty(n)||da.isEmpty(s))return;la.mkdirpSync(e),la.writeFileSync(r,n),la.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),_s.error(s)}}o(vAe,"writeLicenseFromVars");aE.launch=MAe;aE.main=DAe;aE.isHdbInstalled=TQ;aE.startupLog=UAe;async function TQ(){try{await la.stat(da.getPropsFilePath()),await la.stat(Ae.get(or.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(da.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw _s.error(`Error checking for HDB install - ${e}`),e}return!0}o(TQ,"isHdbInstalled");function UAe(e){let r=o(h=>h.padEnd(20),"pad"),n=`
107
- `;Ae.get(Ue.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${Ae.get(Ue.REPLICATION_HOSTNAME)}
108
- `),Ae.get(Ue.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${Ae.get(Ue.REPLICATION_URL)}
109
- `),n+=`${r("Worker Threads:")}${Ae.get(Ue.THREADS_COUNT)}
110
- `,n+=`${r("Root Path:")}${Ae.get(Ue.ROOTPATH)}
111
- `,Ae.get(Ue.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=Ae.get(Ue.THREADS_DEBUG_PORT)?`, TCP: ${Ae.get(Ue.THREADS_DEBUG_PORT)}
104
+ Reindexing upgrade started for transaction logs`),na.notify("Reindexing upgrade started for transaction logs"),await b2(TL,!0,e)),na.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Zp?", but errors occurred":"")}o(bRe,"reindexUpgrade");async function b2(e,t,r){let n=await ao.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=sa.join(e,a.toString());if(a===".DS_Store")continue;let l=await ao.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&ao.statSync(sa.join(c,f)).isDirectory())try{await IRe(a,f,t),Rn.info(`Reindexing started for ${a}.${f}`),na.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await wRe(a,f,c,t,r),Rn.info(`Reindexing completed for ${a}.${f}`),na.notify(`Reindexing completed for ${a}.${f}`)}catch(m){Zp=!0,m.schema_path=c,m.table_name=f,na.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),na.error(m),Rn.error(m),console.error(m)}}}if(!Zp)try{await ao.rm(UR,{recursive:!0})}catch{}}o(b2,"processTables");async function IRe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=sa.join(UR,s);await ao.ensureDir(UR),await ao.writeFile(i,""),Rn=yRe({level:"debug",formatters:{bindings(){}}},i)}o(IRe,"initPinoLogger");var NRe=20;async function wRe(e,t,r,n,s){let i;try{i=await hs.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){na.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Rn.error(T);return}throw T}let a=PRe(i.dbis),c=hs.openDBI(i,a),l=Object.keys(i.dbis),u=hs.statDBI(i,a);Rn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new RRe.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 hs.createEnvironment(r,t,!1);hs.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>NRe&&await h();await h()}catch(T){throw Zp=!0,Rn.error(T),T}async function h(){let T,R=m.map(({value:C})=>C);n?T=await Promise.all(R.map(C=>ORe(f,C))):T=await _Re(f,a,l.filter(C=>C!=="__blob__"),R,!1);for(let C=0,q=m.length;C<q;C++){let{key:j,value:F}=m[C];Rn.info(`Record hash value: ${j} hash: ${a}`);let $;n?$=T[C]:$=T.written_hashes.indexOf(j)>-1,Xp($,!0),CRe(f,a,F[a],n),Rn.info(`Insert success, written hashes: ${T.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&na.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),Rn.info(`${d.value}/${d.total} records inserted`)}o(h,"finishOutstanding"),d.stop();let p=hs.statDBI(i,a),_=hs.statDBI(f,a);if(Rn.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${_.entryCount}`),Xp.deepStrictEqual(p.entryCount,_.entryCount),await hs.closeEnvironment(i),await hs.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let T=sa.join(r,t),R=sa.join(T,"data.mdb"),N=sa.join(T,"lock.mdb");await ao.unlink(R),await ao.unlink(N),await ao.rmdir(T),Rn.info(`Deleted old environment files from schema folder: ${R}, ${N}`)}let g=await hs.openEnvironment(r,t),y=hs.statDBI(g,a);Rn.info(`New stats: ${JSON.stringify(_)}. New stats after move: ${JSON.stringify(y)}`),Xp.deepStrictEqual(y.entryCount,_.entryCount),await hs.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(wRe,"processTable");async function ORe(e,t){hs.initializeDBIs(e,Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Tc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),TRe.isEmpty(t.user_name)||e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(ORe,"insertTransaction");function CRe(e,t,r,n){let i=e.dbis[t].get(r);Xp.deepStrictEqual(typeof i,"object");let a;if(n){let c={[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Tc.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&&!SRe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];I2(e,c,f,r)}else I2(e,c,l,r)}o(CRe,"validateIndices");function I2(e,t,r,n){try{let s=!1,i=gRe.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||Rn.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),Xp.deepStrictEqual(s,!0)}catch(s){Zp=!0,Rn.error(s),console.error(s)}}o(I2,"validateIndex");function PRe(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(PRe,"getHashDBI")});var D2=M((AHe,L2)=>{"use strict";var xR=require("path"),Rc=require("fs-extra"),LRe=gL(),au=z(),O2=Ot(),RL=ae(),wi=(H(),v(Y)),BR=ie(),DRe=require("properties-reader"),MRe=ci(),vRe=Ch(),URe=on(),yHe=require("util"),xRe=URe.searchByValue,BRe=an(),FRe=ST(),HRe=ht(),kRe=w2(),C2=as(),qRe=DR(),rE=new LRe("4.0.0"),P2=[],eE,tE;async function GRe(){try{if(await qRe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),eE){let t=BR.changeExtension(eE,".bak");await Rc.move(eE,t)}if(tE){let t=BR.changeExtension(tE,".bak");await Rc.move(tE,t)}await C2.generateKeys()}else console.log("Using existing certificates."),C2.updateConfigCert(eE,tE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(GRe,"generateNewKeys");async function $Re(){console.log("Updating HarperDB nodes."),au.info("Updating HarperDB nodes.");let e=[];try{let t=new MRe(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await xRe(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!HRe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,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:wi.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(BR.isEmptyOrZeroLength(n))return;let s=new vRe(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await BRe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{FRe.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($Re,"updateNodes");async function VRe(){let e=RL.get(wi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(xR.join("config","settings.js"))){au.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),au.info(t);let r=xR.dirname(e),n=RL.get(wi.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=xR.join(n,"backup","4_0_0_upgrade_settings.bak"),i=xR.join(n,wi.HDB_CONFIG_FILE);try{au.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Rc.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{au.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),au.info("Updating env variables with new settings values");let f=O2.initOldConfig(e);eE=f[wi.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],tE=f[wi.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],O2.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=BR.getPropsFilePath();Rc.accessSync(a,Rc.constants.F_OK|Rc.constants.R_OK);let l=DRe(a).get(wi.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
105
+ install_user = ${l}`;try{Rc.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{RL.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{Rc.removeSync(r),console.log(d),au.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(VRe,"updateSettingsFile400");rE.async_functions.push(VRe);rE.async_functions.push(GRe);rE.async_functions.push(kRe);rE.async_functions.push($Re);P2.push(rE);L2.exports=P2});var yL=M((IHe,x2)=>{"use strict";var cu=ie(),KRe=(H(),v(Y)),M2=z(),{DATA_VERSION:YRe,UPGRADE_VERSION:WRe}=KRe.UPGRADE_JSON_FIELD_NAMES_ENUM,v2=y2(),FR=D2(),lu=new Map;v2&&v2.forEach(e=>{lu.set(e.version,e)});FR&&FR.forEach(e=>{lu.set(e.version,e)});FR&&FR.forEach(e=>{lu.set(e.version,e)});function zRe(){return[...lu.keys()].sort(cu.compareVersions)}o(zRe,"getSortedVersions");function U2(e){let t=e[YRe],r=e[WRe];return cu.isEmptyOrZeroLength(t)||cu.isEmptyOrZeroLength(r)?(M2.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),M2.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."),[]):[...lu.keys()].sort(cu.compareVersions).filter(function(n){return cu.compareVersions(n,t)>0&&cu.compareVersions(n,r)<=0})}o(U2,"getVersionsForUpgrade");function jRe(e){return U2(e).length>0}o(jRe,"hasUpgradesRequired");function QRe(e){return cu.isEmptyOrZeroLength(e)?null:lu.has(e)?lu.get(e):null}o(QRe,"getDirectiveByVersion");x2.exports={getSortedVersions:zRe,getDirectiveByVersion:QRe,getVersionsForUpgrade:U2,hasUpgradesRequired:jRe}});var kR=M((wHe,q2)=>{"use strict";var JRe=require("util"),AL=require("chalk"),XRe=require("os"),F2=an(),ZRe=on(),ps=(H(),v(Y)),H2=u2(),IL=jI(),{UpgradeObject:B2}=m2(),{forceDowngradePrompt:eye}=DR(),{packageJson:tye}=It(),HR=z(),If=ie(),NL=ws(),rye=(Me(),v(gt)),nye=yL(),sye=JRe.promisify(NL.setSchemaDataToGlobal),iye=ZRe.searchByValue,oye="info_id",aye="2.9.9",cye="3.0.0";async function lye(e){let t=new H2.HdbInfoInsertObject(1,e,e),r=new IL.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return NL.setSchemaDataToGlobal(),F2.insert(r)}o(lye,"insertHdbInstallInfo");async function bL(e){let t,r=await k2(),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 H2.HdbInfoInsertObject(i,e,e);let a=new IL.InsertObject(ps.OPERATIONS_ENUM.INSERT,ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ps.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await sye(),F2.insert(a)}o(bL,"insertHdbUpgradeInfo");async function k2(){let e=new IL.NoSQLSeachObject(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,oye,ps.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await iye(e))}catch(r){console.error(r)}return t}o(k2,"getAllHdbInfoRecords");async function uye(){let e=await k2();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(uye,"getLatestHdbInfoRecord");async function dye(){HR.info("Checking if HDB software has been updated");try{let e=tye.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await uye(),r;if(If.isEmpty(t))r=aye;else if(r=t.data_version_num,If.compareVersions(r.toString(),e.toString())>0){if(!If.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(AL.yellow(`This instance's data was last run on version ${r}`)),console.error(AL.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.${XRe.EOL}${ps.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");If.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(AL.yellow(`This instance's data was last run on version ${r}`)),await eye(new B2(r,e))?await bL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(NL.setSchemaDataToGlobal(),fye(r),e.toString()===r.toString())return;let n=new B2(r,e);if(nye.hasUpgradesRequired(n))return n;If.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await bL(n.upgrade_version),HR.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw HR.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),HR.fatal(e),e}}o(dye,"getVersionUpdateInfo");function fye(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 ${ps.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in rye.databases.system))throw console.log(t),new Error(t);if(!If.isEmpty(e)&&e<cye)throw console.log(t),new Error(t)}o(fye,"checkIfInstallIsSupported");q2.exports={insertHdbInstallInfo:lye,insertHdbUpgradeInfo:bL,getVersionUpdateInfo:dye}});var K2=M((CHe,V2)=>{"use strict";var qR=require("joi"),{boolean:mye,string:wL,number:hye}=qR.types(),G2=require("fs-extra"),nE=(H(),v(Y)),$2=require("path"),pye=st();V2.exports=Eye;function Eye(e){let t=wL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=qR.object({[nE.INSTALL_PROMPTS.ROOTPATH]:qR.custom(_ye),[nE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:qR.alternatives([hye.min(0),wL]).allow("null",null),[nE.INSTALL_PROMPTS.TC_AGREEMENT]:wL.valid("yes","YES","Yes"),[nE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[nE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:mye});return pye.validateBySchema(e,r)}o(Eye,"installValidator");function _ye(e,t){if(G2.existsSync($2.join(e,"system/hdb_user/data.mdb"))||G2.existsSync($2.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(_ye,"validateRootAvailable")});var W2=M((LHe,Y2)=>{"use strict";var{mkdirpSync:gye,copySync:Sye}=require("fs-extra"),yc=require("path"),sE=(H(),v(Y)),{PACKAGE_ROOT:Tye}=It(),CL=z(),Rye=Xn(),OL=wo(),yye=Nt();Y2.exports=Aye;async function Aye(e){CL.trace("Mounting HarperDB"),uu(e),uu(yc.join(e,"backup")),uu(yc.join(e,"keys")),uu(yc.join(e,"keys",sE.LICENSE_FILE_NAME)),uu(yc.join(e,"log")),uu(yc.join(e,"database")),uu(yc.join(e,"components")),Sye(yc.resolve(Tye,"./utility/install/README.md"),yc.join(e,"README.md")),await bye()}o(Aye,"mountHdb");async function bye(){let e=Qu(),t=Object.keys(OL);for(let r=0;r<t.length;r++){let n=t[r],s=OL[n].hash_attribute;try{yye.initSystemSchemaPaths(sE.SYSTEM_SCHEMA_NAME,n);let i=new e(sE.SYSTEM_SCHEMA_NAME,n,s);i.attributes=OL[n].attributes;let a=i.attributes.find(({attribute:c})=>c===s);a.isPrimaryKey=!0,["hdb_user","hdb_role","hdb_nodes"].includes(n)&&(i.audit=!0),await Rye.createTable(n,i)}catch(i){throw CL.error(`issue creating environment for ${sE.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}o(bye,"createLMDBTables");function uu(e){gye(e,{mode:sE.HDB_FILE_PERMISSIONS}),CL.info(`Directory ${e} created`)}o(uu,"makeDirectory")});var aQ=M((UHe,oQ)=>{"use strict";var LL=require("os"),X2=require("inquirer"),zs=require("fs-extra"),Iye=require("properties-reader"),fu=require("chalk"),lo=require("path"),Nye=require("human-readable-ids").hri,wye=require("ora"),Oye=require("yaml"),Tr=z(),Ac=ae(),iE=ie(),$R=Hc(),Z2=kR(),{packageJson:eQ}=It(),Ee=(H(),v(Y)),{CONFIG_PARAM_MAP:MHe,CONFIG_PARAMS:$t}=Ee,Cye=K2(),Pye=W2(),DL=Ot(),Lye=rs(),Dye=Ih(),Mye=fL(),vye=ws(),Uye=require("util").promisify,xye=Uye(vye.setSchemaDataToGlobal),z2=as(),du=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),en=o(e=>fu.magenta.bold(e),"HDB_PROMPT_MSG"),Bye="https://harperdb.io/legal/end-user-license-agreement",bc=LL.EOL,ia="",Fye="yes",j2="Starting HarperDB install...",Q2="HarperDB installation was successful.",J2="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Hye="An out of date version of HarperDB is already installed.",PL="It appears that HarperDB is already installed. Exiting install...",kye="Aborting install",vHe=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])$/),qye=new RegExp(/^[^\s.,*>]+$/),Gye=LL.homedir(),$ye=lo.join(Gye,Ee.HDB_ROOT_DIR_NAME),Vye="HDB_ADMIN",Kye="CLUSTER_USER",Yye="dev",Wye="localhost",GR={[$t.HTTP_CORS]:!0,[$t.HTTP_CORSACCESSLIST]:["*"],[$t.HTTP_PORT]:9926,[$t.AUTHENTICATION_AUTHORIZELOCAL]:!0,[$t.THREADS_COUNT]:1,[$t.THREADS_DEBUG]:!0,[$t.LOGGING_STDSTREAMS]:!0,[$t.LOGGING_LEVEL]:"info",[$t.OPERATIONSAPI_NETWORK_PORT]:9925,[$t.LOCALSTUDIO_ENABLED]:!0},Zr={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:"},Ic=$R([Ee.INSTALL_PROMPTS.HDB_CONFIG]),co,tQ=!1,ML=!1,rQ=!1;oQ.exports={install:nQ,updateConfigEnv:sAe,setIgnoreExisting:iAe};nQ.createSuperUser=iQ;async function nQ(){console.log(en(bc+j2+bc)),Tr.notify(j2);let e;Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG]&&(e=zye());let t=Qye();Object.assign(t,e),t[Ee.INSTALL_PROMPTS.TC_AGREEMENT]&&t[Ee.INSTALL_PROMPTS.ROOTPATH]&&t[Ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[Ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[Ee.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(rQ=!0,t[Ee.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Cye(t);if(r)throw r.message;await Jye(),await Xye(t);let n=await jye(t);co=n[Ee.INSTALL_PROMPTS.ROOTPATH],Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG]&&lo.dirname(Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG])===co&&(tQ=!0),!ML&&!Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG]&&await zs.pathExists(lo.join(co,Ee.HDB_CONFIG_FILE))&&(console.error(PL),process.exit());let s=wye({prefixText:en("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),iE.isEmpty(co))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ac.setHdbBasePath(co),await Pye(co),await Zye(),await eAe(n),Tr.initLogSettings(!0),await iQ(n),await rAe(n),await z2.updateConfigCert(),await z2.generateCertsKeys(),await nAe(),Mye(),s.stop(),console.log(en(bc+Q2+bc)),Tr.notify(Q2)}o(nQ,"install");function zye(){let e=Oye.parseDocument(zs.readFileSync(Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=DL.flattenConfig(e.toJSON());return t[Ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[Ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(zye,"getConfigFromFile");async function jye(e){Tr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:du,when:oa(e[Ee.INSTALL_PROMPTS.ROOTPATH],Zr.DESTINATION),name:Ee.INSTALL_PROMPTS.ROOTPATH,prefix:ia,default:$ye,validate:o(async s=>Ws(s)?Ws(s):await zs.pathExists(lo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:en(Zr.DESTINATION)},{type:"input",transformer:du,when:oa(e[Ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Zr.HDB_USERNAME),name:Ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ia,default:Vye,validate:o(s=>Ws(s)?Ws(s):(t=s,!0),"validate"),message:en(Zr.HDB_USERNAME)},{type:"password",when:oa(e[Ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Zr.HDB_PASS),name:Ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ia,validate:o(s=>Ws(s)?Ws(s):!0,"validate"),message:en(Zr.HDB_PASS)},{type:"input",transformer:du,when:oa(e[Ee.INSTALL_PROMPTS.DEFAULTS_MODE],Zr.DEFAULTS_MODE),name:Ee.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:ia,default:Yye,validate:o(s=>Ws(s)?Ws(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:en(Zr.DEFAULTS_MODE)}];if(rQ||r.push({type:"input",name:Ee.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:du,when:oa(e[Ee.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Zr.REPLICATION_HOSTNAME),prefix:ia,default:Wye,message:en(Zr.REPLICATION_HOSTNAME)}),iE.autoCastBoolean(e[Ee.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:du,when:oa(e[Ee.INSTALL_PROMPTS.CLUSTERING_NODENAME],Zr.NODE_NAME),name:Ee.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ia,default:Nye.random(),validate:o(i=>qye.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:en(Zr.NODE_NAME)},{type:"input",transformer:du,when:oa(e[Ee.INSTALL_PROMPTS.CLUSTERING_USER],Zr.CLUSTER_USERNAME),name:Ee.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ia,default:Kye,validate:o(i=>Ws(i)?Ws(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:en(Zr.CLUSTER_USERNAME)},{type:"password",when:oa(e[Ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Zr.CLUSTER_PASS),name:Ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ia,validate:o(i=>Ws(i)?Ws(i):!0,"validate"),message:en(Zr.CLUSTER_PASS)}];r.push(...s)}let n=await X2.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(jye,"installPrompts");function oa(e,t){return e!==void 0?(t.includes("password")?(console.log(`${en(t)} ${fu.gray("[hidden]")}`),Tr.trace(`${en(t)} [hidden]`)):(console.log(`${en(t)} ${e}`),Tr.trace(`${en(t)} ${e}`)),!1):!0}o(oa,"displayCmdEnvVar");function Ws(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Ws,"checkForEmptyValue");function Qye(){let e=Object.keys(Ee.INSTALL_PROMPTS),t=$R(e),r=$R(Object.keys(Ee.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=Ee.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(Qye,"checkForPromptOverride");async function Jye(){Tr.trace("Checking for existing install.");let e=iE.getPropsFilePath(),t=await zs.pathExists(e),r;if(t){Tr.trace(`Install found an existing boot prop file at:${e}`);let n=Iye(e),s=DL.getConfigValue(Ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(Ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await zs.pathExists(s)}if(!t&&iE.noBootFile()&&(r=!0),r&&!ML){if(Tr.trace(`Install found existing HDB config at:${e}`),await Z2.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${eQ.version}. Exiting install...`;console.log(bc+fu.magenta.bold(Hye)),console.log(fu.magenta.bold(s)),Tr.error(s)}else console.log(bc+fu.magenta.bold(PL)),Tr.error(PL);process.exit(0)}}o(Jye,"checkForExistingInstall");async function Xye(e){Tr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Bye}${bc}and can be viewed by typing or copying and pasting the URL into your web browser.${bc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:ia,transformer:du,when:oa(e[Ee.INSTALL_PROMPTS.TC_AGREEMENT],t),name:Ee.INSTALL_PROMPTS.TC_AGREEMENT,message:en(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:fu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await X2.prompt([r]);n[Ee.INSTALL_PROMPTS.TC_AGREEMENT]&&n[Ee.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Fye&&(console.log(fu.yellow(J2)),Tr.error(J2),process.exit(0))}o(Xye,"termsAgreement");async function Zye(){let e=lo.join(co,Ee.HDB_CONFIG_FILE),t;try{t=LL.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}
106
+ install_user = ${t}`,n=iE.getHomeDir(),s=lo.join(n,Ee.HDB_HOME_DIR_NAME),i=lo.join(s,Ee.LICENSE_KEY_DIR_NAME);try{zs.mkdirpSync(s,{mode:Ee.HDB_FILE_PERMISSIONS}),zs.mkdirpSync(i,{mode:Ee.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${Ee.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=lo.join(s,Ee.BOOT_PROPS_FILE_NAME);try{await zs.writeFile(a,r)}catch(c){throw Tr.error(`There was an error creating the boot file at path: ${a}`),c}Ac.setProperty(Ee.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ac.setProperty(Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ac.setProperty(Ac.BOOT_PROPS_FILE_PATH,a)}}o(Zye,"createBootPropertiesFile");async function eAe(e){Tr.trace("Creating HarperDB config file");let t=$R(Object.keys(Ee.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[Ee.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in GR){if(r===$t.HTTP_PORT&&t[$t.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??GR[r],t[$t.HTTP_SECUREPORT]=null;continue}else if(r===$t.HTTP_PORT)continue;if(r===$t.OPERATIONSAPI_NETWORK_PORT&&t[$t.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??GR[r],t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===$t.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=GR[r])}}else t[$t.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[$t.HTTP_PORT.toLowerCase()]&&(t[$t.HTTP_SECUREPORT]=null);try{Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG]||DL.createConfigFile(t),Ac.initSync()}catch(r){tAe(r)}}o(eAe,"createConfigFile");function tAe(e){Tr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(kye);let t=lo.resolve(Ac.get(Ac.BOOT_PROPS_FILE_PATH),"../");t&&zs.removeSync(t),co&&(tQ?zs.readdirSync(co,{withFileTypes:!0}).forEach(n=>{let s=lo.join(n.path,n.name);s!==Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG]&&zs.removeSync(s)}):zs.removeSync(co)),process.exit(1)}o(tAe,"rollbackInstall");async function sQ(e,t){Tr.trace("Creating admin user"),await xye();let r;try{r=await Dye.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 Lye.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(sQ,"createAdminUser");async function iQ(e){Tr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[Ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[Ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await sQ(t,r),delete e[Ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[Ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(iQ,"createSuperUser");async function rAe(e){Tr.trace("Creating Cluster user.");let t;e[Ee.INSTALL_PROMPTS.CLUSTERING_USER]&&e[Ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[Ee.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[Ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await sQ({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[Ee.INSTALL_PROMPTS.CLUSTERING_USER],delete e[Ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(rAe,"createClusterUser");async function nAe(){let e=eQ.version;if(e)await Z2.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(nAe,"insertHdbVersionInfo");function sAe(e){Ic[Ee.INSTALL_PROMPTS.HDB_CONFIG]=e}o(sAe,"updateConfigEnv");function iAe(e){ML=e}o(iAe,"setIgnoreExisting")});var uQ=M((BHe,lQ)=>{"use strict";var vL=ie(),Es=z(),cQ=yL();lQ.exports={processDirectives:oAe};async function oAe(e){console.log("Starting upgrade process...");let t=cQ.getVersionsForUpgrade(e),r=lAe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;Es.notify(c),console.log(c);let l=[],u=[];try{l=aAe(a.sync_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await cAe(a.async_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(oAe,"processDirectives");function aAe(e){if(vL.isEmptyOrZeroLength(e))return Es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Es.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Es.info(`Running function ${r.name}`),!(r instanceof Function)){Es.info("Variable being processed is not a function");continue}let n=r();Es.info(n),t.push(n)}return t}o(aAe,"runSyncFunctions");async function cAe(e){if(vL.isEmptyOrZeroLength(e))return Es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Es.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Es.info(`Running function ${s.name}`),!(s instanceof Function)){Es.info("Variable being processed is not a function");continue}let i=await s();Es.info(i),t.push(i)}return t}o(cAe,"runAsyncFunctions");function lAe(e){if(vL.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=cQ.getDirectiveByVersion(r);n&&t.push(n)}return t}o(lAe,"getUpgradeDirectivesToInstall")});var _Q=M((HHe,EQ)=>{"use strict";var VR=ae();VR.initSync();var hQ=require("chalk"),dQ=require("fs-extra"),ca=z(),aa=(H(),v(Y)),uAe=uQ(),UL=ie(),pQ=kR(),dAe=DR(),fQ=hA(),fAe=ws(),{packageJson:mQ}=It(),mAe=require("util").promisify,hAe=mAe(fAe.setSchemaDataToGlobal),xL,{UPGRADE_VERSION:BL}=aa.UPGRADE_JSON_FIELD_NAMES_ENUM;EQ.exports={upgrade:pAe};async function pAe(e){await hAe(),xL===void 0&&(xL=pp()),dQ.existsSync(VR.get(VR.BOOT_PROPS_FILE_PATH))||(oE("The hdb_boot_properties file was not found. Please install HDB.",aa.LOG_LEVELS.ERROR),process.exit(1)),dQ.existsSync(VR.get(aa.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(oE("The hdb settings file was not found. Please make sure HDB is installed.",aa.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await pQ.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),oE(`This version of HarperDB is ${mQ.version}`,aa.LOG_LEVELS.INFO);let r=t[BL]??mQ.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${aa.HDB_SUPPORT_ADDRESS}`),ca.notify("Missing new version field from upgrade info object"),process.exit(1)),await EAe();let n,s=0;try{n=await dAe.forceUpdatePrompt(t)}catch(i){ca.error("There was an error when prompting user about upgrade."),ca.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),ca.info(`Starting upgrade to version ${r}`),await _Ae(t),oE(`HarperDB was successfully upgraded to version ${t[BL]}`,aa.LOG_LEVELS.INFO)}o(pAe,"upgrade");async function EAe(){let e=!1,t=await fQ.findPs(aa.HDB_PROC_NAME);if(UL.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await fQ.findPs("hdb_express");UL.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await xL.list();UL.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(hQ.red(r)),ca.error(r),process.exit(1)}}o(EAe,"checkIfRunning");async function _Ae(e){try{await uAe.processDirectives(e)}catch(t){throw oE("There was an error during the data upgrade. Please check the logs.",aa.LOG_LEVELS.ERROR),t}try{await pQ.insertHdbUpgradeInfo(e[BL])}catch(t){ca.error("Error updating the 'hdb_info' system table."),ca.error(t)}}o(_Ae,"runUpgrade");function oE(e,t=void 0){t||(t=ca.info),ca[t](e),console.log(hQ.magenta(e))}o(oE,"printToLogAndConsole")});var bQ=M(aE=>{"use strict";var be=ae();be.initSync();cf();var or=(H(),v(Y)),{CONFIG_PARAMS:Ue}=or,_s=z(),la=require("fs-extra"),ua=require("path"),gAe=fL(),{install:SAe}=aQ(),FL=require("chalk"),{packageJson:TAe,PACKAGE_ROOT:RAe}=It(),da=ie(),HL=Ot(),SQ=Hc(),gQ=wT(),yAe=_Q(),{compactOnStart:AAe}=(NC(),v(IC)),bAe=require("minimist"),IAe=as(),{startHTTPThreads:NAe}=(kL(),v(IQ)),wAe=kR(),{isMainThread:OAe}=require("worker_threads"),qHe=wo(),GHe=vo(),$He=pI(),VHe=Qu(),KR=(H(),v(Y)),uo,Nf,TQ=!1,CAe="Upgrade complete. Starting HarperDB.",PAe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",LAe="HarperDB not found, starting install process.",DAe="There was an error during install, check install_log.log for more details. Exiting.",MAe="HarperDB successfully started.";function vAe(){if(!TQ){let e=o(()=>{la.removeSync(ua.join(be.get(or.CONFIG_PARAMS.ROOTPATH),or.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(vAe,"addExitListeners");async function RQ(e=!1,t=!1){if(console.log(FL.magenta("Starting HarperDB...")),_s.suppressLogging?.(()=>{console.log(FL.magenta(""+la.readFileSync(ua.join(RAe,"utility/install/ascii_logo.txt"))))}),await AQ()===!1){console.log(LAe);try{await SAe()}catch(l){console.error(DAe,l),_s.error(l),process.exit(1)}}if(!e){let l=SQ(Object.keys(or.CONFIG_PARAM_MAP),!0);!da.isEmpty(l)&&!da.isEmptyOrZeroLength(Object.keys(l))&&HL.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Nf?.service==="clustering";Nf?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=ua.join(be.get(or.CONFIG_PARAMS.ROOTPATH),or.HDB_PID_FILE),i=HAe(s);i&&i!==1&&kAe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),uo===void 0&&(uo=pp()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),be.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await gQ.generateNatsConfig(),await uo.startClusteringProcesses(!0),process.exit()),vAe(),await la.writeFile(ua.join(be.get(KR.CONFIG_PARAMS.ROOTPATH),KR.HDB_PID_FILE),`${process.pid}`),_s.info("HarperDB PID",process.pid);let a;try{let l=await wAe.getVersionUpdateInfo();l!==void 0&&(a=l[or.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await yAe.upgrade(l),console.log(CAe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),_s.error(l)):(console.error(PAe,l),_s.error(l)),process.exit(1)}gAe(),BAe(),await IAe.reviewSelfSignedCert(),da.autoCastBoolean(be.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&OAe&&await gQ.generateNatsConfig(t)}o(RQ,"initialize");async function UAe(e=!1){try{Nf=bAe(process.argv),Nf.ROOTPATH&&HL.updateConfigObject("settings_path",ua.join(Nf.ROOTPATH,or.HDB_CONFIG_FILE)),await RQ(e,!0),be.get(or.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await AAe();let t=process.env.IS_SCRIPTED_SERVICE&&!Nf.service;da.autoCastBoolean(be.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await uo.startClusteringProcesses(),await uo.startClusteringThreads()),await NAe(process.env.DEV_MODE?1:be.get(KR.CONFIG_PARAMS.THREADS_COUNT)??be.get(KR.CONFIG_PARAMS.THREADS)),t||yQ()}catch(t){console.error(t),_s.error(t),process.exit(1)}}o(UAe,"main");function yQ(){_s.suppressLogging(()=>{console.log(FL.magenta(`HarperDB ${TAe.version} successfully started`))}),_s.notify(MAe)}o(yQ,"started");async function xAe(e=!0){TQ=!e;try{uo===void 0&&(uo=pp()),uo.enterPM2Mode(),await RQ(),da.autoCastBoolean(be.get(or.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await uo.startClusteringProcesses(),await uo.startService(or.PROCESS_DESCRIPTORS.HDB),yQ(),e&&process.exit(0)}catch(t){console.error(t),_s.error(t),process.exit(1)}}o(xAe,"launch");function BAe(){let e=ua.join(be.get(or.CONFIG_PARAMS.ROOTPATH),or.LICENSE_KEY_DIR_NAME,or.LICENSE_FILE_NAME),t=ua.join(e,or.LICENSE_FILE_NAME),r=ua.join(e,or.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=SQ(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(da.isEmpty(n)||da.isEmpty(s))return;la.mkdirpSync(e),la.writeFileSync(r,n),la.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),_s.error(s)}}o(BAe,"writeLicenseFromVars");aE.launch=xAe;aE.main=UAe;aE.isHdbInstalled=AQ;aE.startupLog=FAe;async function AQ(){try{await la.stat(da.getPropsFilePath()),await la.stat(be.get(or.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(da.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw _s.error(`Error checking for HDB install - ${e}`),e}return!0}o(AQ,"isHdbInstalled");function FAe(e){let r=o(h=>h.padEnd(20),"pad"),n=`
107
+ `;be.get(Ue.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${be.get(Ue.REPLICATION_HOSTNAME)}
108
+ `),be.get(Ue.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${be.get(Ue.REPLICATION_URL)}
109
+ `),n+=`${r("Worker Threads:")}${be.get(Ue.THREADS_COUNT)}
110
+ `,n+=`${r("Root Path:")}${be.get(Ue.ROOTPATH)}
111
+ `,be.get(Ue.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=be.get(Ue.THREADS_DEBUG_PORT)?`, TCP: ${be.get(Ue.THREADS_DEBUG_PORT)}
112
112
  `:`
113
- `);let s=ua.join(Ae.get(Ue.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${Ae.get(Ue.LOGGING_LEVEL)}, location: ${s+(Ae.get(Ue.LOGGING_STDSTREAMS)?", stdout/err":"")}
114
- `,n+=r("Default:"),n+=Ae.get(Ue.HTTP_PORT)?`HTTP (and WS): ${Ae.get(Ue.HTTP_PORT)}, `:"",n+=Ae.get(Ue.HTTP_SECUREPORT)?`HTTPS (and WS): ${Ae.get(Ue.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${Ae.get(Ue.HTTP_CORS)?`enabled for ${Ae.get(Ue.HTTP_CORSACCESSLIST)}`:"disabled"}
115
- `,n+=r("Operations API:"),n+=Ae.get(Ue.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${Ae.get(Ue.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=Ae.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${Ae.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${Ae.get(Ue.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${Ae.get(Ue.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${Ae.get(Ue.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
116
- `,n+=r("MQTT:"),n+=Ae.get(Ue.MQTT_NETWORK_PORT)?`TCP: ${Ae.get(Ue.MQTT_NETWORK_PORT)}, `:"",n+=Ae.get(Ue.MQTT_NETWORK_SECUREPORT)?`TLS: ${Ae.get(Ue.MQTT_NETWORK_SECUREPORT)}`:"",n+=Ae.get(Ue.MQTT_WEBSOCKET)&&Ae.get(Ue.HTTP_PORT)?`, WS: ${Ae.get(Ue.HTTP_PORT)}`:"",n+=Ae.get(Ue.MQTT_WEBSOCKET)&&Ae.get(Ue.HTTP_SECUREPORT)?`, WSS: ${Ae.get(Ue.HTTP_SECUREPORT)}
113
+ `);let s=ua.join(be.get(Ue.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${be.get(Ue.LOGGING_LEVEL)}, location: ${s+(be.get(Ue.LOGGING_STDSTREAMS)?", stdout/err":"")}
114
+ `,n+=r("Default:"),n+=be.get(Ue.HTTP_PORT)?`HTTP (and WS): ${be.get(Ue.HTTP_PORT)}, `:"",n+=be.get(Ue.HTTP_SECUREPORT)?`HTTPS (and WS): ${be.get(Ue.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${be.get(Ue.HTTP_CORS)?`enabled for ${be.get(Ue.HTTP_CORSACCESSLIST)}`:"disabled"}
115
+ `,n+=r("Operations API:"),n+=be.get(Ue.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${be.get(Ue.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=be.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${be.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${be.get(Ue.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${be.get(Ue.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${be.get(Ue.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
116
+ `,n+=r("MQTT:"),n+=be.get(Ue.MQTT_NETWORK_PORT)?`TCP: ${be.get(Ue.MQTT_NETWORK_PORT)}, `:"",n+=be.get(Ue.MQTT_NETWORK_SECUREPORT)?`TLS: ${be.get(Ue.MQTT_NETWORK_SECUREPORT)}`:"",n+=be.get(Ue.MQTT_WEBSOCKET)&&be.get(Ue.HTTP_PORT)?`, WS: ${be.get(Ue.HTTP_PORT)}`:"",n+=be.get(Ue.MQTT_WEBSOCKET)&&be.get(Ue.HTTP_SECUREPORT)?`, WSS: ${be.get(Ue.HTTP_SECUREPORT)}
117
117
  `:`
118
- `;let i=Ae.get(Ue.REPLICATION_PORT)??Ae.get(Ue.OPERATIONSAPI_NETWORK_PORT),a=Ae.get(Ue.REPLICATION_SECUREPORT)??Ae.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=a?`WSS: ${a} `:"",n+=`${c.slice(0,-2)}
119
- `;let l=[],u=UL.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
- `);let m=Ae.get(Ue.HTTP_PORT)?`HTTP: ${Ae.get(Ue.HTTP_PORT)}, `:"";m+=Ae.get(Ue.HTTP_SECUREPORT)?`HTTPS: ${Ae.get(Ue.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)}
118
+ `;let i=be.get(Ue.REPLICATION_PORT)??be.get(Ue.OPERATIONSAPI_NETWORK_PORT),a=be.get(Ue.REPLICATION_SECUREPORT)??be.get(Ue.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=a?`WSS: ${a} `:"",n+=`${c.slice(0,-2)}
119
+ `;let l=[],u=HL.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
+ `);let m=be.get(Ue.HTTP_PORT)?`HTTP: ${be.get(Ue.HTTP_PORT)}, `:"";m+=be.get(Ue.HTTP_SECUREPORT)?`HTTPS: ${be.get(Ue.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),Ae.get(Ue.LOGGING_STDSTREAMS)&&_s.logsAtLevel("info")&&_s.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(UAe,"startupLog");function xAe(e){try{return Number.parseInt(la.readFileSync(e,"utf8"),10)}catch{return null}}o(xAe,"readPidFile");function BAe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(BAe,"isProcessRunning")});var AQ={};we(AQ,{SERVERS:()=>wf,portServer:()=>BL,setPortServerMap:()=>$R});function $R(e,t){let r=BL.get(e)??[];BL.set(e,[...r,t])}var wf,BL,FL=ce(()=>{wf={},BL=new Map;o($R,"setPortServerMap")});var jR={};we(jR,{deliverSocket:()=>xQ,getHttpOptions:()=>qAe,getRequestId:()=>kQ,handleApplication:()=>kAe,httpServer:()=>YL,logRequest:()=>uE,proxyRequest:()=>GAe,registerServer:()=>VL,suppressHandleApplicationWarning:()=>HAe});function kAe(e){dE=e.options.getAll(),e.options.on("change",t=>{dE=e.options.getAll()})}function qAe(){return dE}function xQ(e,t,r){let n=e?.read?e:new OQ.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=wf[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=wf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(fa.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function GAe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=bQ.get(s),r){case"connection":i=xQ(void 0,t),bQ.set(s,i),i.write=(c,l,u)=>(KR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(KR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),KR.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 VL(e,t,r=!0){t||(t=Cr.default.get(U.HTTP_PORT));let n=wf[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",wQ),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else wf[t]=e;e.on("unhandled",wQ)}function KL(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=[],Cr.default.get(U.HTTP_PORT)!=null&&t.push({port:Cr.default.get(U.HTTP_PORT),secure:Cr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Cr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Cr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Cr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,CQ.resolvePath)(Cr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function YL(e,t){let r=[];for(let{port:n,secure:s}of KL(t))r.push(BQ(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?GL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,VL(e,n,!1)),YR[n]=WR(GL,n);return r}function BQ(e,t,r,n){if($R(e,{protocol_name:t?"HTTPS":"HTTP",name:QR()}),!VR[e]){let s=r?"operationsApi_network":"http",i=Cr.default.get(s+"_keepAliveTimeout"),a=Cr.default.get(s+"_timeout"),c=Cr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Cr.default.get(U.HTTP_MAXHEADERSIZE)},u=Cr.default.get(s+"_mtls"),d=Cr.default.get(s+"_mtls_required"),f;if(t){let g=Cr.default.get("tls");f=Cr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,PQ.getTicketKeys)(),SNICallback:(0,LQ.createTLSSelector)(r?"operations-api":"server",u),ciphers:g.ciphers??g[0]?.ciphers})}let m=(0,DQ.checkMemoryLimit)(),h=o(async(g,R)=>{let T=performance.now(),y=0;try{let O=new Wa(g,R);r&&(O.isOperationsServer=!0),dE.logging?.id&&(O.requestId=y=kQ());let F=await YR[e](O);if(!F){if(O._nodeResponse.statusCode){uE(g,O._nodeResponse.statusCode,y,performance.now()-T);return}F=FQ(O)}if(F.headers?.set||(F.headers=new Cs(F.headers)),m?F.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):F.headers?.set?.("Server","HarperDB"),F.status===-1){for(let me of F.headers||[])R.setHeader(me[0],me[1]);return g.baseRequest=O,R.baseResponse=F,VR[e].emit("unhandled",g,R)}let Z=F.status||200,q=performance.now(),W=q-T,K=F.body,$,le=!1;if(!F.handlesHeaders){let me=F.headers||new Cs;K?K.length>=0?(typeof K=="string"?me.set("Content-Length",Buffer.byteLength(K)):me.set("Content-Length",K.length),$=!0):K instanceof Rs&&(K.size?me.set("Content-Length",K.size):K.on&&(le=!0,K.on("size",De=>{R.headersSent||R.setHeader("Content-Length",De)})),K=K.stream()):(me.set("Content-Length","0"),$=!0);let Pe=`hdb;dur=${W.toFixed(2)}`;if(F.wasCacheMiss&&(Pe+=", miss"),mh(me,"Server-Timing",Pe,!0),!R.headersSent)if(le){if(R.statusCode=Z,me)if(me[Symbol.iterator])for(let[De,dt]of me)R.setHeader(De,dt);else for(let De in me)R.setHeader(De,me[De])}else R.writeHead(Z,me&&(me[Symbol.iterator]?Array.from(me):me));$&&R.end(K)}let ue=O.handlerPath,ie=O.method;if(ot(W,"duration",ue,ie,F.wasCacheMiss==null?void 0:F.wasCacheMiss?"cache-miss":"cache-hit"),Wr(Z<400,"success",ue,ie),Wr(1,"response_"+Z,ue,ie),uE(g,Z,y,W),!$)if(K instanceof ReadableStream&&(K=qL.Readable.fromWeb(K)),(K[Symbol.iterator]||K[Symbol.asyncIterator])&&(K=qL.Readable.from(K)),K?.pipe){K.pipe(R),K.destroy&&R.on("close",()=>{K.destroy()});let me=0;K.on("data",Pe=>{me+=Pe.length}),K.on("end",()=>{ot(performance.now()-q,"transfer",ue,ie),ot(me,"bytes-sent",ue,ie)})}else K?.then?K.then(me=>{R.end(me)},N):R.end(K)}catch(O){N(O)}function N(O){let F=O.headers,Z=O.statusCode||500;R.writeHead(Z,F&&(F[Symbol.iterator]?Array.from(F):F)),R.end(FAe(O)),uE(g,Z,y,performance.now()-T),O.statusCode?O.statusCode===500?fa.default.warn(O):fa.default.info(O):fa.default.error(O)}o(N,"onError")},"requestHandler"),p=Fg(h,(g,R)=>{R.statusCode=503,R.end("Service unavailable, exceeded request queue limit"),ot(!0,"service-unavailable",e)},Cr.default.get(s+"_requestQueueLimit")),_=VR[e]=(t?f?MQ.createSecureServer:vQ.createServer:zR.createServer)(l,(g,R)=>{let T=g.method;T==="GET"||T==="OPTIONS"||T==="HEAD"?h(g,R):p(g,R)});i>=0&&(_.keepAliveTimeout=i),c>=0&&(_.headersTimeout=c),t&&(_.ports||(_.ports=[]),_.ports.push(e),l.SNICallback.initialize(_),u&&(_.mtlsConfig=u),_.on("secureConnection",g=>{g._parent.startTime&&ot(performance.now()-g._parent.startTime,"tls-handshake",e),ot(g.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),VL(_,e)}return VR[e]}function WR(e,t){let r=FQ;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 FQ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Cs}}function $Ae(e,t){YL(e,{requestOnly:!0,...t})}function HQ(e,t){for(let{port:r}of KL(t))IQ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),$L[r]=WR(IQ,r)}function VAe(e,t){let r=[];for(let{port:n,secure:s}of KL(t)){$R(n,{protocol_name:s?"WSS":"WS",name:QR()});let i=BQ(n,s,t?.isOperationsServer,t?.mtls);cE[n]||(cE[n]=new UQ.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),cE[n].on("connection",(a,c)=>{try{let l=new Wa(c);l.isWebSocket=!0;let u=YR[n](l);fa.default.debug("Received WS connection, calling listeners",HL),NQ[n](a,l,u)}catch(l){fa.default.warn("Error in handling WS connection",l)}}),HQ((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):cE[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),cE[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{$L[n]&&$L[n](a,c,l)})),r.push(i),HL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),NQ[n]=WR(HL,n),YR[n]=WR(GL,n)}return r}function wQ(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
123
- `),uE(e,404,0,e.requestId))}function uE(e,t,r,n){let s=dE.logging;if(s){kL||(kL=fa.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";kL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+KAe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function KAe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function kQ(){return lE||(lE=new BigInt64Array([1n]),lE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",lE.buffer))),Number(Atomics.add(lE,0,1n))}var OQ,fa,KR,Cr,CQ,PQ,LQ,DQ,MQ,vQ,zR,qL,UQ,FAe,cE,VR,YR,GL,dE,HAe,bQ,IQ,$L,HL,NQ,kL,lE,WL=ce(()=>{OQ=require("node:net"),fa=w(j()),KR=require("node:worker_threads"),Cr=w(oe());H();CQ=w(Ot()),PQ=w(ze()),LQ=w(as()),DQ=w(ef()),MQ=require("node:http2"),vQ=require("node:https"),zR=require("node:http");wh();hh();Yn();ji();qL=require("node:stream");Dr();FL();ff();CN();UQ=require("ws"),{errorToString:FAe}=fa.default;Le.http=YL;Le.request=$Ae;Le.ws=VAe;Le.upgrade=HQ;cE={},VR={},YR={},GL=[],dE={},HAe=!0;o(kAe,"handleApplication");o(qAe,"getHttpOptions");o(xQ,"deliverSocket");bQ=new Map;o(GAe,"proxyRequest");o(VL,"registerServer");o(KL,"getPorts");o(YL,"httpServer");o(BQ,"getHTTPServer");o(WR,"makeCallbackChain");o(FQ,"unhandled");o($Ae,"onRequest");Object.defineProperty(zR.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){}});IQ=[],$L={};o(HQ,"onUpgrade");HL=[],NQ={};o(VAe,"onWebSocket");o(wQ,"defaultNotFound");o(uE,"logRequest");o(KAe,"headersToString");o(kQ,"getRequestId")});var jL=M(mE=>{"use strict";uA();var{isMainThread:zL,parentPort:qQ,threadId:JR,workerData:YAe}=require("node:worker_threads"),{createServer:WAe}=require("node:net"),{unlinkSync:VQ,existsSync:zAe}=require("fs"),KQ;mE.whenComponentsLoaded=new Promise(e=>{KQ=e});var Oi=j(),js=oe(),gs=(H(),v(Y)),{server:jAe}=(Dr(),v(Xf)),{createServer:QAe}=require("node:tls"),{restartNumber:JAe,getWorkerIndex:Of}=ze(),{createReuseportFd:fE}=(wh(),v($q)),{createTLSSelector:XAe}=as(),{resolvePath:ZAe}=Ot(),{startupLog:ebe}=RQ(),{SERVERS:Cf,setPortServerMap:GQ,portServer:tbe}=(FL(),v(AQ)),$Q=(WL(),v(jR)),rbe=ti(),YQ=js.get(gs.CONFIG_PARAMS.THREADS_DEBUG),nbe=js.get(gs.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);jAe.socket=sbe;if(YQ){let e;if(zL)e=js.get(gs.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Oi.info("Could not close debugger",t)}});else{let t=js.get(gs.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Of()>=0&&(e=t+Of())}if(e){let t=js.get(gs.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=js.get(gs.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Oi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&zL)try{require("inspector").open(9229)}catch(e){JAe<=1&&Oi.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&Oi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:eke,CONFIG_PARAMS:tke}=gs;js.initSync();mE.globals=rbe;mE.listenOnPorts=zQ;mE.startServers=WQ;function WQ(){let e=js.get(gs.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=XR().loadRootComponents(!0).then(()=>{qQ?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)$Q.deliverSocket(i,s,a);else if(n.requestId)$Q.proxyRequest(n);else if(n.type===gs.ITC_EVENT_TYPES.SHUTDOWN){Oi.trace("received shutdown request",JR);for(let c in Cf){let l=Cf[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;if(!l[f]){p&&l.closeAllConnections?.(),clearInterval(h);return}let _=l[f][p?"all":"idle"]?.()||[];if(_.length===0){p&&clearInterval(h);return}m===1?Oi.info(`Closing ${_.length} idle connections`):p&&Oi.warn(`Forcefully closing ${_.length} active connections`);for(let g=0,R=_.length;g<R;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),be.get(Ue.LOGGING_STDSTREAMS)&&_s.logsAtLevel("info")&&_s.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(FAe,"startupLog");function HAe(e){try{return Number.parseInt(la.readFileSync(e,"utf8"),10)}catch{return null}}o(HAe,"readPidFile");function kAe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(kAe,"isProcessRunning")});var NQ={};Oe(NQ,{SERVERS:()=>wf,portServer:()=>qL,setPortServerMap:()=>YR});function YR(e,t){let r=qL.get(e)??[];qL.set(e,[...r,t])}var wf,qL,GL=le(()=>{wf={},qL=new Map;o(YR,"setPortServerMap")});var XR={};Oe(XR,{deliverSocket:()=>HQ,getHttpOptions:()=>VAe,getRequestId:()=>$Q,handleApplication:()=>$Ae,httpServer:()=>QL,logRequest:()=>uE,proxyRequest:()=>KAe,registerServer:()=>zL,suppressHandleApplicationWarning:()=>GAe});function $Ae(e){dE=e.options.getAll(),e.options.on("change",t=>{dE=e.options.getAll()})}function VAe(){return dE}function HQ(e,t,r){let n=e?.read?e:new LQ.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=wf[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=wf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(fa.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function KAe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=wQ.get(s),r){case"connection":i=HQ(void 0,t),wQ.set(s,i),i.write=(c,l,u)=>(zR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(zR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),zR.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 zL(e,t,r=!0){t||(t=Cr.default.get(U.HTTP_PORT));let n=wf[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",PQ),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else wf[t]=e;e.on("unhandled",PQ)}function jL(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=[],Cr.default.get(U.HTTP_PORT)!=null&&t.push({port:Cr.default.get(U.HTTP_PORT),secure:Cr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Cr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Cr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Cr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,DQ.resolvePath)(Cr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function QL(e,t){let r=[];for(let{port:n,secure:s}of jL(t))r.push(kQ(n,s,t)),typeof e=="function"?YL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,zL(e,n,!1)),jR[n]=QR(YL,n);return r}function kQ(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(YR(e,{protocol_name:t?"HTTPS":"HTTP",name:ZR()}),!WR[e]){let a=i?"operationsApi_network":s??"http",c=Cr.default.get(a+"_keepAliveTimeout"),l=Cr.default.get(a+"_timeout"),u=Cr.default.get(a+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Cr.default.get(U.HTTP_MAXHEADERSIZE)},f=Cr.default.get(a+"_mtls"),m=Cr.default.get(a+"_mtls_required"),h;if(t){let T=Cr.default.get("tls");h=Cr.default.get(a+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,MQ.getTicketKeys)(),SNICallback:(0,vQ.createTLSSelector)(s??"server",f),ciphers:T.ciphers??T[0]?.ciphers})}let p=(0,UQ.checkMemoryLimit)(),_=o(async(T,R)=>{let N=performance.now(),C=0;try{let j=new Wa(T,R);i&&(j.isOperationsServer=!0),dE.logging?.id&&(j.requestId=C=$Q());let F=await jR[e](j);if(!F){if(j._nodeResponse.statusCode){uE(T,j._nodeResponse.statusCode,C,performance.now()-N);return}F=qQ(j)}if(F.headers?.set||(F.headers=new Cs(F.headers)),p?F.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):F.headers?.set?.("Server","HarperDB"),F.status===-1){for(let Te of F.headers||[])R.setHeader(Te[0],Te[1]);return T.baseRequest=j,R.baseResponse=F,WR[e].emit("unhandled",T,R)}let $=F.status||200,J=performance.now(),K=J-N,te=F.body,fe,oe=!1;if(!F.handlesHeaders){let Te=F.headers||new Cs;te?te.length>=0?(typeof te=="string"?Te.set("Content-Length",Buffer.byteLength(te)):Te.set("Content-Length",te.length),fe=!0):te instanceof Rs&&(te.size?Te.set("Content-Length",te.size):te.on&&(oe=!0,te.on("size",xe=>{R.headersSent||R.setHeader("Content-Length",xe)})),te=te.stream()):(Te.set("Content-Length","0"),fe=!0);let rt=`hdb;dur=${K.toFixed(2)}`;if(F.wasCacheMiss&&(rt+=", miss"),mh(Te,"Server-Timing",rt,!0),!R.headersSent)if(oe){if(R.statusCode=$,Te)if(Te[Symbol.iterator])for(let[xe,tn]of Te)R.setHeader(xe,tn);else for(let xe in Te)R.setHeader(xe,Te[xe])}else R.writeHead($,Te&&(Te[Symbol.iterator]?Array.from(Te):Te));fe&&R.end(te)}let ge=j.handlerPath,Pe=j.method;if(at(K,"duration",ge,Pe,F.wasCacheMiss==null?void 0:F.wasCacheMiss?"cache-miss":"cache-hit"),Wr($<400,"success",ge,Pe),Wr(1,"response_"+$,ge,Pe),uE(T,$,C,K),!fe)if(te instanceof ReadableStream&&(te=KL.Readable.fromWeb(te)),(te[Symbol.iterator]||te[Symbol.asyncIterator])&&(te=KL.Readable.from(te)),te?.pipe){te.pipe(R),te.destroy&&R.on("close",()=>{te.destroy()});let Te=0;te.on("data",rt=>{Te+=rt.length}),te.on("end",()=>{at(performance.now()-J,"transfer",ge,Pe),at(Te,"bytes-sent",ge,Pe)})}else te?.then?te.then(Te=>{R.end(Te)},q):R.end(te)}catch(j){q(j)}function q(j){let F=j.headers,$=j.statusCode||500;try{R.writeHead($,F&&(F[Symbol.iterator]?Array.from(F):F))}catch{}R.end(qAe(j)),uE(T,$,C,performance.now()-N),j.statusCode?j.statusCode===500?fa.default.warn(j):fa.default.info(j):fa.default.error(j)}o(q,"onError")},"requestHandler"),g=Fg(_,(T,R)=>{R.statusCode=503,R.end("Service unavailable, exceeded request queue limit"),at(!0,"service-unavailable",e)},Cr.default.get(a+"_requestQueueLimit")),y=WR[e]=(t?h?xQ.createSecureServer:BQ.createServer:JR.createServer)(d,(T,R)=>{let N=T.method;N==="GET"||N==="OPTIONS"||N==="HEAD"?_(T,R):g(T,R)});c>=0&&(y.keepAliveTimeout=c),u>=0&&(y.headersTimeout=u),t&&(y.ports||(y.ports=[]),y.ports.push(e),d.SNICallback.initialize(y),f&&(y.mtlsConfig=f),y.on("secureConnection",T=>{T._parent.startTime&&at(performance.now()-T._parent.startTime,"tls-handshake",e),at(T.isSessionReused(),"tls-reused",e)}),y.isSecure=!0),zL(y,e)}return WR[e]}function QR(e,t){let r=qQ;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 qQ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Cs}}function YAe(e,t){QL(e,{requestOnly:!0,...t})}function GQ(e,t){for(let{port:r}of jL(t))OQ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),WL[r]=QR(OQ,r)}function WAe(e,t){let r=[];for(let{port:n,secure:s}of jL(t)){YR(n,{protocol_name:s?"WSS":"WS",name:ZR()});let i=kQ(n,s,t);cE[n]||(cE[n]=new FQ.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),cE[n].on("connection",(a,c)=>{try{let l=new Wa(c);l.isWebSocket=!0;let u=jR[n](l);fa.default.debug("Received WS connection, calling listeners",$L),CQ[n](a,l,u)}catch(l){fa.default.warn("Error in handling WS connection",l)}}),GQ((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):cE[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),cE[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{WL[n]&&WL[n](a,c,l)})),r.push(i),$L[t?.runFirst?"unshift":"push"]({listener:e,port:n}),CQ[n]=QR($L,n),jR[n]=QR(YL,n)}return r}function PQ(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
123
+ `),uE(e,404,0,e.requestId))}function uE(e,t,r,n){let s=dE.logging;if(s){VL||(VL=fa.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";VL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+zAe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function zAe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function $Q(){return lE||(lE=new BigInt64Array([1n]),lE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",lE.buffer))),Number(Atomics.add(lE,0,1n))}var LQ,fa,zR,Cr,DQ,MQ,vQ,UQ,xQ,BQ,JR,KL,FQ,qAe,cE,WR,jR,YL,dE,GAe,wQ,OQ,WL,$L,CQ,VL,lE,JL=le(()=>{LQ=require("node:net"),fa=w(z()),zR=require("node:worker_threads"),Cr=w(ae());H();DQ=w(Ot()),MQ=w(ze()),vQ=w(as()),UQ=w(ef()),xQ=require("node:http2"),BQ=require("node:https"),JR=require("node:http");wh();hh();Yn();ji();KL=require("node:stream");Dr();GL();ff();DN();FQ=require("ws"),{errorToString:qAe}=fa.default;De.http=QL;De.request=YAe;De.ws=WAe;De.upgrade=GQ;cE={},WR={},jR={},YL=[],dE={},GAe=!0;o($Ae,"handleApplication");o(VAe,"getHttpOptions");o(HQ,"deliverSocket");wQ=new Map;o(KAe,"proxyRequest");o(zL,"registerServer");o(jL,"getPorts");o(QL,"httpServer");o(kQ,"getHTTPServer");o(QR,"makeCallbackChain");o(qQ,"unhandled");o(YAe,"onRequest");Object.defineProperty(JR.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){}});OQ=[],WL={};o(GQ,"onUpgrade");$L=[],CQ={};o(WAe,"onWebSocket");o(PQ,"defaultNotFound");o(uE,"logRequest");o(zAe,"headersToString");o($Q,"getRequestId")});var ZL=M(mE=>{"use strict";mA();var{isMainThread:XL,parentPort:VQ,threadId:ey,workerData:jAe}=require("node:worker_threads"),{createServer:QAe}=require("node:net"),{unlinkSync:WQ,existsSync:JAe}=require("fs"),zQ;mE.whenComponentsLoaded=new Promise(e=>{zQ=e});var Oi=z(),js=ae(),gs=(H(),v(Y)),{server:XAe}=(Dr(),v(Xf)),{createServer:ZAe}=require("node:tls"),{restartNumber:ebe,getWorkerIndex:Of}=ze(),{createReuseportFd:fE}=(wh(),v(Wq)),{createTLSSelector:tbe}=as(),{resolvePath:rbe}=Ot(),{startupLog:nbe}=bQ(),{SERVERS:Cf,setPortServerMap:KQ,portServer:sbe}=(GL(),v(NQ)),YQ=(JL(),v(XR)),ibe=ti(),jQ=js.get(gs.CONFIG_PARAMS.THREADS_DEBUG),obe=js.get(gs.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);XAe.socket=abe;if(jQ){let e;if(XL)e=js.get(gs.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Oi.info("Could not close debugger",t)}});else{let t=js.get(gs.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Of()>=0&&(e=t+Of())}if(e){let t=js.get(gs.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=js.get(gs.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Oi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&XL)try{require("inspector").open(9229)}catch(e){ebe<=1&&Oi.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&Oi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:nke,CONFIG_PARAMS:ske}=gs;js.initSync();mE.globals=ibe;mE.listenOnPorts=JQ;mE.startServers=QQ;function QQ(){let e=js.get(gs.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=ty().loadRootComponents(!0).then(()=>{VQ?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)YQ.deliverSocket(i,s,a);else if(n.requestId)YQ.proxyRequest(n);else if(n.type===gs.ITC_EVENT_TYPES.SHUTDOWN){Oi.trace("received shutdown request",ey);for(let c in Cf){let l=Cf[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;if(!l[f]){p&&l.closeAllConnections?.(),clearInterval(h);return}let _=l[f][p?"all":"idle"]?.()||[];if(_.length===0){p&&clearInterval(h);return}m===1?Oi.info(`Closing ${_.length} idle connections`):p&&Oi.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(js.get(gs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Of()==0)try{VQ(ZAe(js.get(gs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,JR),l.cantCleanupProperly||Oi.warn("Had to forcefully exit the thread",JR),process.exit(0)},5e3).unref()})}if(YQ||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Oi.info("Could not close debugger",c)}}}).ref();let r;fE&&!nbe&&(r=zQ()),Promise.resolve(r).then(()=>{if(Of()===0)try{ebe(tbe)}catch(n){console.error("Error displaying start-up log",n)}qQ?.postMessage({type:gs.ITC_EVENT_TYPES.CHILD_STARTED})})});return KQ(t),t}o(WQ,"startServers");function zQ(){let e=[];for(let t in Cf){let r=Cf[t];if(t.includes?.("/")&&Of()==0){zAe(t)&&VQ(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Oi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=js.get(gs.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=Of();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?fE?n={fd:fE(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:fE?n={fd:fE(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Oi.trace("Listening on port "+t,JR)}).on("error",c)}))}return Promise.all(e)}o(zQ,"listenOnPorts");!zL&&!YAe?.noServerStart&&WQ();function sbe(e,t){let r=(ff(),v(wp)).getComponentName,n;if(t.securePort){GQ(t.securePort,{protocol_name:"TLS",name:r()});let s=XAe("server",t.mtls),i=js.get("tls");n=QAe({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),Cf[t.securePort]=n}return t.port&&(GQ(t.port,{protocol_name:"TCP",name:r()}),n=WAe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Cf[t.port]=n),n}o(sbe,"onSocket")});var yQ={};we(yQ,{startHTTPThreads:()=>obe,startSocketServer:()=>eD,updateWorkerIdleness:()=>nJ});async function obe(e=2,t){IN().catch(r=>vf.error?.("Error recording hostname for analytics:",r));try{if(t)XL(0,1,!0);else{let{loadRootComponents:r}=XR();if(e===0)return(0,Qs.setMainIsWorker)(!0),await jL().startServers(),Promise.resolve([]);await r()}rJ();for(let r=0;r<e;r++)XL(r,e);return Promise.all(tJ)}finally{(0,Qs.threadsHaveStarted)()}}function rJ(){let e=(0,XQ.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),JL=setInterval(()=>{vf.notify(e)},ibe).unref())}function XL(e,t=1,r){if(QL++,(0,Qs.startWorker)("server/threads/threadServer.js",{name:lA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===iA.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});tJ.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=ey.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"),Lf){let a=Lf;Lf=[];for(let c of a)eJ[c.localPort](null,c)}}}),r){let n=setInterval(()=>{ZL?ZL=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Qs.shutdownWorkers)(),QL=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function eD(e=0,t){if(typeof e=="string")try{(0,ty.existsSync)(e)&&(0,ty.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=abe:r=cbe(t):r=tD;let n=(0,Df.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=eJ[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),ZL=!0,r(i,(a,c)=>{if(!a){if(jQ){let u=i._socket||new Df.Socket({handle:i,writable:!0,readable:!0});jQ.deliverSocket(u,e,c),u.resume()}else QL>0?(Lf.length===0&&setTimeout(()=>{Lf.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,Lf.push(i)):(console.log("start up a dynamic thread to handle request"),XL(0));ot(!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 Df.Socket({handle:i,writable:!0,readable:!0});dbe(u,a,e)}ot(!0,"socket-routed")})},vf.info(`HarperDB ${ZQ.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 tD(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>=ZR)return ZR=i,t(r);n=i}ZR=0,t(r)}function abe(e,t){let r={};e.getpeername(r);let n=r.address,s=Mf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);tD(e,a=>{Mf.set(n,{worker:a,lastUsed:i}),t(a)})}function cbe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Df.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=Mf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);tD(n,f=>{Mf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function nJ(){ZR=0;for(let e of Pf)e.expectedIdle=e.recentELU.idle+lbe,e.requests=1;Pf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function dbe(e,t,r){let n=ube++;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(),ey.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")),ey.delete(n)),s.event=="destroy"&&(e.destroy(),ey.delete(n))})}var Qs,Df,vf,ty,JQ,XQ,ZQ,Pf,Lf,eJ,jQ,QL,tJ,JL,ibe,ZL,ZR,QQ,Mf,lbe,ey,ube,xL=ce(()=>{Qs=w(ze()),Df=require("net");H();vf=w(j()),ty=require("fs");ji();JQ=require("worker_threads"),XQ=w(ef()),ZQ=w(It()),Pf=[],Lf=[],eJ=[],QL=0,tJ=[];JQ.isMainThread&&(process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Qs.onMessageFromWorkers)(e=>{e.type===cA.RESTART&&JL&&(clearInterval(JL),rJ())}));ibe=6e5;o(obe,"startHTTPThreads");o(rJ,"licenseWarning");o(XL,"startHTTPWorker");o(eD,"startSocketServer");ZR=0;o(tD,"findMostIdleWorker");QQ=36e5,Mf=new Map;o(abe,"findByRemoteAddressAffinity");o(cbe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Mf)r.lastUsed+QQ<e&&Mf.delete(t)},QQ).unref();lbe=1e3;o(nJ,"updateWorkerIdleness");(0,Qs.setMonitorListener)(nJ);ey=new Map,ube=1;o(dbe,"proxySocket")});var rD={};we(rD,{hdbServer:()=>pbe,start:()=>pbe});async function pbe(e){try{fo.default.debug("In Fastify server"+process.cwd()),fo.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),fo.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=sJ.default.isMaster,await Ebe();let t=e.securePort>0;Uf=_be(t),await Uf.ready(),e||(e={}),e.isOperationsServer=!0;try{Le.http(Uf.server,e),Uf.server.closeIdleConnections||await Uf.listen({port:0,host:"::"})}catch(r){throw Uf.close(),fo.default.error(r),fo.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),fo.default.fatal(t),process.exit(1)}}async function Ebe(){fo.default.trace("Configuring HarperDB process."),fJ.default.setSchemaDataToGlobal(),await hJ.default.setUsersWithRolesCache(),await pJ.default.getLicense()}function _be(e){fo.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=gbe(e),r=(0,iJ.default)(t);r.server.headersTimeout=Tbe(),r.setErrorHandler(wc.serverErrorHandler);let n=Sbe();n&&r.register(oJ.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){u.sent||u.raw.headersSent||u.raw.writableEnded||r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(lJ.default),r.register(aJ.default),r.register(cJ.default,{root:uJ.default.join(dJ.PACKAGE_ROOT,"studio/build-local")}),mm(r);let s=Nc.default.get(sA.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!mJ.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[wc.reqBodyValidationHandler,wc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,wc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),fo.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function gbe(e){let t=Nc.default.get(hE.OPERATIONSAPI_NETWORK_TIMEOUT),r=Nc.default.get(hE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:mbe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function Sbe(){let e=Nc.default.get(hE.OPERATIONSAPI_NETWORK_CORS),t=Nc.default.get(hE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===hbe)&&(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 Tbe(){return Nc.default.get(hE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??fbe}var sJ,Nc,fo,iJ,oJ,aJ,cJ,lJ,uJ,dJ,fJ,mJ,hJ,pJ,wc,fbe,mbe,hbe,hE,Uf,EJ=ce(()=>{sJ=w(require("cluster")),Nc=w(oe());H();fo=w(j()),iJ=w(require("fastify")),oJ=w(require("@fastify/cors")),aJ=w(require("@fastify/compress")),cJ=w(require("@fastify/static")),lJ=w(cw()),uJ=w(require("path")),dJ=w(It()),fJ=w(ws()),mJ=w(se()),hJ=w(rs()),pJ=w(ef());Dr();wc=w(TR());yo();Nc.default.initSync();fbe=6e4,mbe=1024*1024*1024,hbe="TRUE",{CONFIG_PARAMS:hE}=Y;o(pbe,"operationsServer");o(Ebe,"setUp");o(_be,"buildServer");o(gbe,"getServerOptions");o(Sbe,"getCORSOpts");o(Tbe,"getHeaderTimeoutConfig")});var cD={};we(cD,{disableNATS:()=>ybe,publishToStream:()=>sy,setNATSReplicator:()=>nD,setPublishToStream:()=>Abe,setSubscription:()=>aD,start:()=>Rbe});function Rbe(){pE.default.get(U.CLUSTERING_ENABLED)&&Ibe()}function ybe(e=!0){RJ=e}function Abe(e,t){sy=e,aD=t}function Ibe(){if(RJ||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];nD(s,r,i)}}wl((r,n)=>{nD(r.tableName,r.databaseName,r),n&&AJ(r)}),!_J&&(_J=!0)}function nD(e,t,r){if(t==="system"&&Nbe.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 Ur{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){AJ(i)}static subscribe(){let i=new Kn;return aD(t,e,i),i}static subscribeOnThisThread(i){return i<(pE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??bbe)}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 ry(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=yJ;return i}o(n,"getNATSTransaction")}function AJ(e){let t=pE.default.get(U.CLUSTERING_NODENAME);sy(`${iD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,oD.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 gJ,iD,oD,SJ,TJ,pE,ny,RJ,sy,aD,bbe,yJ,_J,Nbe,ry,sD,bJ=ce(()=>{Me();Ma();gJ=w(Gt()),iD=w(mt()),oD=w(Ki());bu();SJ=w(bw()),TJ=w(bn()),pE=w(oe());H();ny=w(j());o(Rbe,"start");o(ybe,"disableNATS");sy=gJ.publishToStream,aD=SJ.setSubscription;o(Abe,"setPublishToStream");bbe=2;o(Ibe,"assignReplicationSource");Nbe=["hdb_job","hdb_raw_analytics","hdb_info","hdb_license"];o(nD,"setNATSReplicator");o(AJ,"publishSchema");ry=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=pE.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||(ny.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(sy(`${iD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,oD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw ny.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},sD=class extends ry{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,TJ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};yJ=new sD});async function CJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await lD.get(e,{returnNonexistent:!0});i=new fD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await lD.get(e);a&&a.delete()}i=new oy(e,t)}return n&&(n.id=e,n.user={username:t?.username},EE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function uD(){return iy++,iy>65500&&(iy=1),iy}function dD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=bs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new si(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return Ft(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var NJ,Oc,wJ,OJ,IJ,lD,EE,iy,oy,fD,PJ=ce(()=>{Me();qu();NJ=w(bn()),Oc=w(j());kc();wJ=w(ze()),OJ=w(jL());Dr();F_();IJ=100,lD=je({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"}]}}]}),EE=je({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,wJ.getWorkerIndex)()===0&&(async()=>{await OJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of EE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Le.getUser(r.user.username));try{await dD(r,t,r)}catch{(0,Oc.warn)("Failed to publish will",t)}EE.delete(e.id)}})();o(CJ,"getSession");iy=1;o(uD,"getNextMessageId");oy=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,Oc.trace)("Resuming subscription from",s,"from",a);let h=bs.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 y=T.split("/"),N;for(let Z=0;Z<y.length;Z++)if(y[Z].indexOf("+")>-1)if(y[Z]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let O=!0;y[y.length-1]==="#"&&(y.length--,O=!1),N&&(n=o(Z=>{let q=Z.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(O&&q.length!==y.length)return!1;for(let W=0;W<y.length;W++)if(y[W]!=="+"&&y[W]!==q[W])return!1;return!0},"filter"));let F=y.indexOf("+");m.url="/"+(F>-1?y.slice(0,F):y).concat("").join("/")}}else m.isCollection=!1;let _=h.path,g=h.Resource,R=await Ft(m,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i,T.isCollection=m.isCollection;let y=await g.subscribe(m,T);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let O of y)try{let F;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,F=this.needsAcknowledge(O)):(O.acknowledge?.(),F=uD());let Z=O.id;if(Array.isArray(Z)&&(Z=ku(Z)),Z==null&&(Z=""),await this.listener(_+"/"+Z,O.value,F,t)===!1)break;this.awaitingAcks?.size>IJ?await new Promise(W=>setTimeout(W,this.awaitingAcks.size-IJ)):await new Promise(setImmediate)}catch(F){(0,Oc.warn)(F)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=uD();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return dD(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();Ft(r,async()=>{try{if(!t){let n=await EE.get(this.sessionId);n?.doesExist()&&await dD(n,n.data,r)}}finally{await EE.delete(this.sessionId)}}).catch(n=>{(0,Oc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(dD,"publish");fD=class extends oy{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=uD(),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,Oc.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,NJ.getNextMonotonicTime)()),(0,Oc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),lD.put(this.sessionRecord)}}});var mD={};we(mD,{bypassAuth:()=>wbe,start:()=>Cbe});function wbe(){BJ=!0}function Cbe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new xJ.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),ar.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:h,onClose:p}=DJ(u,_=>{u.send(_)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",h),u.on("close",p),u.on("error",_=>{ar.info?.("WebSocket error",_)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),ar.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,xf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&cy.notify?.({username:d?.username,status:ei.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(p){throw(0,xf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&cy.error?.({username:h,status:ei.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),p}}else ar.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(h){a.events.emit("error",h,u),ar.error?.(h)}else if(l.required)return ar.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&Obe(u.remoteAddress)&&(d=await(0,MJ.getSuperUser)(),ar.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=DJ(u,h=>u.write(h),null,d,a);u.on("data",f),u.on("close",m),u.on("error",h=>{ar.info?.("Socket error",h)})},{port:t,securePort:s,mtls:l})),c}function DJ(e,t,r,n,s){LJ||(LJ=!0,fh(f=>{ay>0&&f.push({metric:"mqtt-connections",connections:ay,byThread:!0})}));let i;ay++;let a,c={protocolVersion:4},l=(0,ly.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){ay--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),Wr(!1,"connection","mqtt","disconnect"),ar.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),ar.info?.(y);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){ar.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;ot(f.length,"bytes-received",_,R(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Le.getUser(f.username,f.password.toString(),r),(0,xf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&cy.notify?.({username:n?.username,status:ei.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(K){return(0,xf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&cy.error?.({username:f.username,status:ei.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,K),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let K=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?K(f.will.payload):void 0,delete f.will.payload}a=CJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(K){return ar.error?.(K),s.events.emit("auth-failed",f,e,K),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:K.code||5,returnCode:K.code||128})}s.events.emit("connected",a,e),Wr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let y=o(async(K,$,le,ue)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",K);let ie=K.indexOf("/",1),me=ie>0?K.slice(0,ie):K;g({cmd:"publish",topic:K,payload:await T($),messageId:le||Math.floor(Math.random()*1e8),qos:ue.qos},me);let Pe=e._socket??e;return Pe.writableNeedDrain?new Promise(De=>Pe.once("drain",De)):!Pe.closed}catch(ie){return ar.error?.(ie),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(y),a.sessionWasPresent&&await a.resume();break;case"subscribe":let N=[];for(let K of f.subscriptions){let $;try{let le=await a.addSubscription(K,K.qos>=1);$=le?le.qos||0:c.protocolVersion<5?128:143}catch(le){s.events.emit("error",le,e,K,a),le.statusCode?le.statusCode===500?ar.warn?.(le):ar.info?.(le):ar.error?.(le),$=c.protocolVersion<5?128:le.statusCode===403?135:le.statusCode===404?143:128}N.push($)}await a.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let K=[];for(let $ of f.unsubscriptions)K.push(a.removeSubscription($)?0:17);g({cmd:"unsuback",granted:K,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let O=f.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?F(f.payload):void 0,W;try{W=await a.publish(f,q)}catch(K){s.events.emit("error",K,e,f,a),ar.warn?.(K),f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:W===!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),Wr(!0,"connection","mqtt","disconnect"),ar.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,a),ar.error?.(y),g({cmd:"disconnect"})}function g(y,N){let O=(0,ly.generate)(y,c);t(O),ot(O.length,"bytes-sent",N,R(y),"mqtt")}o(g,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}o(R,"packetMethodName");function T(y){return wa(y,r)}o(T,"serialize")}),l.on("error",f=>{ar.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var ly,MJ,xf,vJ,UJ,xJ,cy,ar,BJ,Obe,LJ,ay,FJ=ce(()=>{ly=require("mqtt-packet");PJ();MJ=w(rs());yo();ji();Dr();xf=w(oe());H();vJ=w(ri()),UJ=w(j()),xJ=require("events"),cy=(0,vJ.loggerWithTag)("auth-event"),ar=(0,UJ.forComponent)("mqtt"),BJ=(0,xf.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(wbe,"bypassAuth");Obe=o(e=>BJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(Cbe,"start");ay=0;o(DJ,"onSocket")});function uy(e,t){if(t?.includes(".."))throw new hD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var hD,pD=ce(()=>{hD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(uy,"resolveBaseURLPath")});function HJ(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 kJ=ce(()=>{o(HJ,"deriveCommonPatternBase")});function dy(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 ED=ce(()=>{o(dy,"deriveGlobOptions")});var qJ,_D,_E,GJ=ce(()=>{pD();kJ();ED();qJ=require("micromatch"),_D=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"}},_E=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=uy(this.name,this.config.urlPath),this.globOptions=dy(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new _D(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,qJ.scan)(s).base),this.commonPatternBase=HJ(this.patternBases)}}});function $J(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function mu(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($J(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if($J(n,t)){t=t.slice(n.length+1);break}}}return(0,VJ.join)(e.baseURLPath,t)}var VJ,gD=ce(()=>{VJ=require("node:path");o($J,"pathStartsWithBase");o(mu,"deriveURLPath")});function KJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var my,YJ,WJ,SD,zJ,jJ,fy,QJ=ce(()=>{my=require("node:events");GJ();YJ=w(j()),WJ=w(require("chokidar")),SD=require("node:path"),zJ=require("node:fs/promises");gD();jJ=require("micromatch"),fy=class extends my.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new _E(t,r,KJ(n)),this.#r=s||YJ.default.loggerWithTag(t),this.ready=(0,my.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,jJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,SD.join)(this.directory,r);switch(t){case"add":case"change":{let i=mu(this.#e,r,"file");(0,zJ.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=mu(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=mu(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,SD.join)(this.#e.directory,r));return this.#t=WJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>{let n=r.replace(/\\/g,"/"),s=t.map(i=>i.replace(/\\/g,"/"));return n!==this.#e.directory.replace(/\\/g,"/")&&s.every(i=>!n.startsWith(i))},"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 _E(this.name,this.directory,KJ(t)),this.#a()}};o(KJ,"castConfig")});var hy,TD=ce(()=>{hy={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var Ey,JJ,XJ,ZJ,e4,t4,RD,yD,AD,bD,ID,py,r4=ce(()=>{Ey=require("events"),JJ=w(require("yaml")),XJ=w(require("chokidar")),ZJ=require("node:fs/promises"),e4=require("util"),t4=w(j());TD();RD=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},yD=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},AD=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"}},bD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},ID=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},py=class extends Ey.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||t4.default.loggerWithTag(t),this.ready=(0,Ey.once)(this,"ready"),this.#t=XJ.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,ZJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=JJ.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 RD(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=hy,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,e4.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new yD;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new AD(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 bD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new ID(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 n4(){Lbe[0]=1}var Pbe,Lbe,s4=ce(()=>{vp();Pbe=Xo.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),Lbe=new Uint8Array(Pbe);o(n4,"requestRestart")});var Sy,i4,_y,gy,o4=ce(()=>{Sy=require("node:events");QJ();r4();i4=w(j());s4();_y=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},gy=class extends Sy.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=i4.default.forComponent(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,Sy.once)(this,"ready"),this.options=new py(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 fy(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{files:t.files,urlPath:t.urlPath}}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 _y);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 _y);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}`),n4()}}});function hu(e){return typeof e=="string"&&e.trim()!==""}function ND(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>hu(t))}function u4(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function Dbe(e){e.config.root&&gE.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 MD(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(u4(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);Ty.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 d4(e){let t=!1;if(t=await Dbe(e),t)return t;let r=await(0,a4.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=mu(e,n.path,"directory");Ty.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=mu(e,n.path,"file"),a=await(0,c4.readFile)(s);Ty.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 gE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var Ty,a4,gE,SE,c4,l4,Ry,Ci,wD,OD,CD,PD,LD,DD,MD,vD,UD,f4=ce(()=>{Ty=require("node:worker_threads"),a4=w(require("fast-glob")),gE=w(j());pD();ED();SE=require("node:path"),c4=require("node:fs/promises");gD();l4=require("micromatch"),Ry=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!hu(this.config.files)&&!ND(this.config.files)&&!u4(this.config.files))throw new wD(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!ND(this.config.files.source)&&!hu(this.config.files.source))throw new OD(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new CD(this);if(this.config.files.ignore!==void 0&&!ND(this.config.files.ignore)&&!hu(this.config.files.ignore))throw new PD(this)}if(this.config.root!==void 0&&!hu(this.config.root))throw new DD(this);if(this.config.path!==void 0&&!hu(this.config.path))throw new vD(this);if(this.config.path&&(gE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!hu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new UD(this);this.globOptions=dy(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new LD(this,r);return r.startsWith("/")&&(gE.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,l4.scan)(r).base),this.baseURLPath=uy(this.name,this.config.urlPath)}},Ci=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,SE.basename)(r.directory)}) ${t}`)}},wD=class extends Ci{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)}},OD=class extends Ci{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},CD=class extends Ci{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},PD=class extends Ci{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},LD=class extends Ci{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},DD=class extends Ci{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)}},MD=class extends Ci{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)}},vD=class extends Ci{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},UD=class extends Ci{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(hu,"isNonEmptyString");o(ND,"isArrayOfNonEmptyStrings");o(u4,"isObject");o(Dbe,"handleRoots");o(d4,"processResourceExtensionComponent")});var wp={};we(wp,{componentErrors:()=>TE,getComponentName:()=>QR,loadComponent:()=>Iy,loadComponentDirectories:()=>p4,setErrorReporter:()=>vbe});function p4(e,t){t&&(BD=t),e&&(qD=e);let r=[];if((0,vt.existsSync)(xD)){let s=(0,vt.readdirSync)(xD,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,kr.join)(xD,a);r.push(Iy(c,BD,eA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Iy(n,BD,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{h4=!0})}function vbe(e){Ay=e}function Ube(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{Xo.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(Xo.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,vt.rmSync)(t,{recursive:!0,force:!0}),(0,vt.existsSync)((0,kr.join)(e,"node_modules"))||(0,vt.mkdirSync)((0,kr.join)(e,"node_modules")),(0,vt.symlinkSync)($D.PACKAGE_ROOT,t,"dir"),r()}finally{Xo.primaryStore.unlock(e,0)}})}function E4(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;if(!Xo.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(E4(e,t))}))return new Promise((a,c)=>{n=a,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)});let i;return Promise.race([t.handleApplication(e),new Promise((a,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{Xo.primaryStore.unlock(e.name,0),clearTimeout(i)})})}async function Iy(e,t,r,n,s,i){let a=(0,vt.realpathSync)(e);if(yy.has(a))return yy.get(a);yy.set(a,!0),s&&(qD=s);try{let c;n&&(TE=new Map);let l=(0,kr.join)(e,"harperdb-config.yaml");(0,vt.existsSync)(l)?c=n?(0,Ny.getConfigObj)():(0,HD.parseDocument)((0,vt.readFileSync)(l,"utf8")).toJSON():!n&&(0,vt.existsSync)(l=(0,kr.join)(e,"config.yaml"))?c=(0,HD.parseDocument)((0,vt.readFileSync)(l,"utf8")).toJSON():c=hy;try{let m=(0,kr.join)(e,"node_modules","harperdb");(n||((0,vt.existsSync)(m)||!e.startsWith((0,kD.getHdbBasePath)()))&&(!(0,vt.existsSync)(m)||(0,vt.realpathSync)($D.PACKAGE_ROOT)!==(0,vt.realpathSync)(m)))&&await Ube(e,m)}catch(m){ma.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&ma.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=by,d={};for(let m in c){by=m;let h=c[m];if(TE.set(n?m:(0,kr.basename)(e),!1),!h)continue;let p,_=h.package;try{if(_){let N=e,O;for(;!(0,vt.existsSync)(O=(0,kr.join)(N,"node_modules",m));)if(N=(0,kr.dirname)(N),N.length<(0,kD.getHdbBasePath)().length){O=null;break}if(O)p=await Iy(O,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else p=Mbe[m];if(!p)continue;let g=o(N=>(N.origin=r,je(N)),"ensureTable"),R=h.network||(h.port||h.securePort)&&h,T=R?.securePort||R?.https&&R.port,y=!R?.https&&R?.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&&ma.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let N=new gy(m,e,l,t,Le);await E4(N,p);continue}if(FD.isMainThread&&(p=await p.startOnMainThread?.({server:Le,ensureTable:g,port:y,securePort:T,resources:t,...h})||p,n&&R))for(let N of[y,T])try{if(+N&&!m4.includes(N)){let O=GD.get(U.HTTP_SESSIONAFFINITY);O&&ma.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!rS)&&(m4.push(N),eD(N,O))}}catch(O){console.error("Error listening on socket",N,O,m)}if(t.isWorker&&(p=await p.start?.({server:Le,ensureTable:g,port:y,securePort:T,resources:t,...h})||p),qD.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&h.files!=null){let N=new Ry({config:h,name:m,directory:e,module:p,resources:t});d[m]=await d4(N)}}catch(g){g.message=`Could not load component '${m}' for application '${(0,kr.basename)(e)}' due to: ${g.message}`,Ay?.(g),((0,RE.getWorkerIndex)()===0?console:ma.default).error(g),t.set(h.path||"/",new nl(g),null,!0),TE.set(n?m:(0,kr.basename)(e),g.message)}}if(by=u,FD.isMainThread&&!h4&&i&&(0,RE.watchDir)(e,async()=>p4()),c.extensionModule||c.pluginModule){let m=await tS((0,kr.join)(e,c.extensionModule||c.pluginModule));return yy.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?`;Ay?.(new Error(m)),((0,RE.getWorkerIndex)()===0?console:ma.default).error(m),TE.set((0,kr.basename)(e),m)}for(let[m,h]of Object.entries(d))h||ma.default.warn(`Component ${m} from (${(0,kr.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}`,Ay?.(c),t.set("",new nl(c))}}var vt,kr,FD,HD,GD,$D,ma,RE,kD,Ny,xD,qD,h4,BD,TE,Mbe,m4,yy,Ay,by,QR,ff=ce(()=>{vt=require("node:fs"),kr=require("node:path"),FD=require("node:worker_threads"),HD=require("yaml"),GD=w(oe()),$D=w(It());H();nq();mq();wq();vq();Uq();zq();qj();Wj();jj();ma=w(j());s2();RE=w(ze());zN();Dr();Me();xL();kD=w(oe());EJ();xT();bJ();is();FJ();Ny=w(Ot());wh();ub();o4();f4();WL();vp();TD();xD=(0,Ny.resolvePath)(GD.get(U.COMPONENTSROOT)),qD=new Map,TE=new Map;o(p4,"loadComponentDirectories");Mbe={REST:sS,rest:sS,graphql:kN,graphqlSchema:FN,roles:WN,jsResource:jN,fastifyRoutes:tL,login:JN,static:rL,operationsApi:rD,customFunctions:{},http:jR,clustering:cD,replication:ko,authentication:Tp,mqtt:mD,loadEnv:nL,logging:ma.default,dataLoader:oL},m4=[],yy=new Map;o(vbe,"setErrorReporter");QR=o(()=>by,"getComponentName");o(Ube,"symlinkHarperModule");o(E4,"sequentiallyHandleApplication");o(Iy,"loadComponent")});var XR=M((Dqe,g4)=>{var{isMainThread:_4}=require("worker_threads"),{getTables:xbe,getDatabases:Pqe,table:Lqe}=(Me(),v(_t)),{loadComponentDirectories:Bbe,loadComponent:Fbe}=(ff(),v(wp)),{resetResources:Hbe}=(qu(),v(YU)),kbe=BC(),qbe=Ot(),{dirname:Gbe}=require("path"),{getConnection:$be}=Gt(),Vbe=oe(),{CONFIG_PARAMS:Kbe}=(H(),v(Y)),{loadCertificates:Ybe}=as(),VD=new Map;async function Wbe(e=!1){!_4&&Vbe.get(Kbe.CLUSTERING_ENABLED)&&$be();try{_4&&await kbe()}catch(n){console.error(n)}let t=Hbe();xbe(),t.isWorker=e,await Ybe(),await Fbe(Gbe(qbe.getConfigFilePath()),t,"hdb",!0,VD),await Bbe(VD,t);let r=[];for(let[n]of VD)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(Wbe,"loadRootComponents");g4.exports.loadRootComponents=Wbe});var ze=M((vqe,Li)=>{"use strict";uA();var{Worker:zbe,MessageChannel:jbe,parentPort:mo,isMainThread:jD,threadId:Qbe,workerData:ho}=require("worker_threads"),{PACKAGE_ROOT:Jbe}=It(),{join:y4,isAbsolute:Xbe,extname:Zbe}=require("path"),{server:A4}=(Dr(),v(Xf)),{watch:eIe,readdir:tIe}=require("fs/promises"),{totalmem:S4}=require("os"),{setHeapSnapshotNearHeapLimit:rIe}=require("v8"),Cc=(H(),v(Y)),Cy=oe(),Pi=j(),{randomBytes:nIe}=require("crypto"),{_assignPackageExport:sIe}=ti(),T4=1024*1024,Pc=[],Js=[],iIe=50,QD=1e4,oIe="restart",b4="request_thread_info",I4="resource_report",N4="thread_info",w4="added-port",aIe="ack",KD;sIe("threads",Js);Li.exports={startWorker:YD,restartWorkers:XD,shutdownWorkers:fIe,workers:Pc,setMonitorListener:TIe,onMessageFromWorkers:mIe,onMessageByType:v4,broadcast:pIe,broadcastWithAcknowledgement:_Ie,setChildListenerByType:dIe,getWorkerIndex:O4,getWorkerCount:C4,getTicketKeys:L4,setMainIsWorker:lIe,setTerminateTimeout:cIe,restartNumber:ho?.restartNumber||1};Js.onMessageByType=v4;Js.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Js.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Li.exports.whenThreadsStarted=new Promise(e=>{Li.exports.threadsHaveStarted=e});Cy.get(Cc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&rIe(1);var JD;function cIe(e){QD=e}o(cIe,"setTerminateTimeout");function O4(){return ho?ho.workerIndex:JD?0:void 0}o(O4,"getWorkerIndex");function C4(){return ho?ho.workerCount:JD?1:void 0}o(C4,"getWorkerCount");function lIe(e){JD=e,Li.exports.threadsHaveStarted()}o(lIe,"setMainIsWorker");var P4=1,wy;function L4(){return wy||(wy=jD?nIe(48):ho.ticketKeys,wy)}o(L4,"getTicketKeys");Object.defineProperty(A4,"workerIndex",{get(){return O4()}});Object.defineProperty(A4,"workerCount",{get(){return C4()}});var D4={[b4](e,t){gIe(t)},[I4](e,t){SIe(t,e)}};function YD(e,t={}){let r=process.constrainedMemory?.()||S4();r=Math.min(r,S4(),2e4*T4);let n=Cy.get(Cc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/T4/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let u of Js){let d=new jbe;d.existingPort=u,i.push(d),a.push(d.port2)}Zbe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];Cy.get(Cc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new zbe(Xbe(e)?e:y4(Jbe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:P4=t.threadCount,name:t.name,restartNumber:Li.exports.restartNumber,ticketKeys:L4()},transferList:a,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:w4,port:u,threadId:l.threadId},[u]);return Py(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>YD(e,t),l.on("error",u=>{Pi.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{Pc.splice(Pc.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<iIe?(t.unexpectedRestarts=l.unexpectedRestarts+1,YD(e,t)):Pi.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{D4[u.type]?.(u,l)}),Pc.push(l),yIe(),t.onStarted&&t.onStarted(l),l.name=t.name,l}o(YD,"startWorker");var uIe=[Cc.THREAD_TYPES.HTTP];async function XD(e=null,t=Math.max(P4>3,1),r=!0){if(jD){try{process.chdir(process.cwd())}catch(a){Pi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=XR();await a()}Li.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;Pi.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Li.exports.restartNumber,type:Cc.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=uIe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Pi.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},QD*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===Cc.ITC_EVENT_TYPES.CHILD_STARTED&&(Pi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Pi.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}=cf();r&&(e==="http"||!e)&&Cy.get(Cc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else mo.postMessage({type:oIe,workerType:e})}o(XD,"restartWorkers");function dIe(e,t){D4[e]=t}o(dIe,"setChildListenerByType");function fIe(e){return XD(e,1/0,!1)}o(fIe,"shutdownWorkers");var M4=[];function mIe(e){M4.push(e)}o(mIe,"onMessageFromWorkers");var WD=new Map;function v4(e,t){let r=WD.get(e);r||WD.set(e,r=[]),r.push(t)}o(v4,"onMessageByType");var hIe=10;async function pIe(e,t){let r=0;for(let n of Js)try{n.postMessage(e),r++>hIe&&(r=0,await new Promise(setImmediate))}catch(s){Pi.error("Unable to send message to worker",s)}t&&x4(e,null)}o(pIe,"broadcast");var Oy=new Map,EIe=1;function _Ie(e){return new Promise(t=>{let r=0;for(let n of Js)try{let s=EIe++,i=o(()=>{Oy.delete(s),--r===0&&t(),n!==mo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Oy.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of Oy)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Pi.error("Unable to send message to worker",s)}r===0&&t()})}o(_Ie,"broadcastWithAcknowledgement");function gIe(e){e.postMessage({type:N4,workers:U4()})}o(gIe,"sendThreadInfo");function U4(){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(U4,"getChildWorkerInfo");function SIe(e,t){e.resources=t,e.resources.updated=Date.now()}o(SIe,"recordResourceReport");var zD;function TIe(e){zD=e}o(TIe,"setMonitorListener");var RIe=1e3,R4=!1;function yIe(){R4||(R4=!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}zD&&zD()},RIe).unref())}o(yIe,"startMonitoring");var AIe=1e3;if(mo&&ho?.addPorts){Py(mo);for(let e=0,t=ho.addPorts.length;e<t;e++){let r=ho.addPorts[e];r.threadId=ho.addThreadIds[e],Py(r)}setInterval(()=>{let e=process.memoryUsage();mo.postMessage({type:I4,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},AIe).unref(),KD=o(()=>new Promise((e,t)=>{mo.on("message",r),mo.postMessage({type:b4});function r(n){n.type===N4&&(mo.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else KD=U4;Li.exports.getThreadInfo=KD;function Py(e,t){Js.push(e),e.on("message",r=>{if(r.type===w4)r.port.threadId=r.threadId,Py(r.port);else if(r.type===aIe){let n=Oy.get(r.id);n&&n()}else x4(r,e)}).on("close",()=>{Js.splice(Js.indexOf(e),1)}).on("exit",()=>{Js.splice(Js.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(Py,"addPort");function x4(e,t){for(let n of M4)n(e,t);let r=WD.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Pi.error(s)}}o(x4,"notifyMessageListeners");if(jD){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await tIe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(y4(s,a.name));try{for await(let{filename:a}of eIe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await XD(),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");Li.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else mo.on("message",async e=>{let{type:t}=e;t===Cc.ITC_EVENT_TYPES.SHUTDOWN&&(Li.exports.restartNumber=e.restartNumber,mo.unref(),setTimeout(()=>{Pi.warn("Thread did not voluntarily terminate",Qbe),process.exit(0)},QD).unref())})});var G4=M((Fqe,q4)=>{"use strict";var{promises:Bf,createReadStream:bIe,createWriteStream:IIe}=require("fs"),{createGzip:NIe}=require("zlib"),{promisify:wIe}=require("util"),{pipeline:OIe}=require("stream"),CIe=wIe(OIe),eM=require("path"),k4=oe();k4.initSync();var Ly=j(),{CONFIG_PARAMS:PIe,ITC_EVENT_TYPES:xqe}=(H(),v(Y)),{onMessageFromWorkers:Bqe}=ze(),{convertToMS:B4}=se(),{onStorageReclamation:LIe}=(T_(),v(pU)),DIe=6e4,MIe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",vIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",ZD,F4;q4.exports=UIe;function UIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(LIe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(MIe);if(!i)throw new Error(vIe);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=B4(r));let d;return ZD=Date.now(),Ly.trace("Log rotate enabled, maxSize:",t,"interval:",r),F4=setInterval(async()=>{if(l){let f;f=await Bf.stat(e.path),f.size>=l&&(d=await H4(e.path,i))}if(u&&Date.now()-ZD>=u&&(d=await H4(e.path,i),ZD=Date.now()),n||c){let f=B4(n??"1M")/(1+c);c=0;let m=await Bf.readdir(i);for(let h of m)try{let p=await Bf.stat(eM.join(i,h));Date.now()-p.mtimeMs>f&&await Bf.unlink(eM.join(i,h))}catch(p){Ly.error("Error trying to remove log",h,p)}}},a??DIe).unref(),{end(){clearInterval(F4)},getLastRotatedLogPath(){return d}}}o(UIe,"logRotator");async function H4(e,t){let r=k4.get(PIe.LOGGING_ROTATION_COMPRESS),n=eM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Bf.rename(e,n),r&&(e=n,n+=".gz",await CIe(bIe(e),NIe(),IIe(n)),await Bf.unlink(e)),Ly.closeLogFile(),Ly.notify(`hdb.log rotated, old log moved to ${n}`),n}o(H4,"moveLogFile")});var W4={};we(W4,{RootConfigWatcher:()=>tM});var $4,V4,K4,Dy,Y4,tM,z4=ce(()=>{$4=w(require("chokidar")),V4=require("node:fs/promises"),K4=w(Ot()),Dy=require("node:stream"),Y4=require("yaml"),tM=class extends Dy.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;constructor(){super(),this.#e=(0,K4.getConfigFilePath)(),this.#t=$4.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,V4.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,Y4.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,Dy.once)(this,"ready")}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var j=M(($qe,ky)=>{"use strict";var ha=require("fs-extra"),{workerData:xIe,threadId:BIe,isMainThread:t3}=require("worker_threads"),bE=require("path"),r3=require("yaml"),n3=require("properties-reader"),qr=(H(),v(Y)),j4=Hc(),FIe=require("os"),{PACKAGE_ROOT:cM}=It(),{_assignPackageExport:HIe}=ti(),{Console:kIe}=require("console"),Q4=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),J4=new Map,{join:pa}=bE,X4=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},qIe={STDOUT:"stdOut",STDERR:"stdErr"},Gqe=pa(cM,"logs"),GIe=pa(cM,"config/yaml/",qr.HDB_DEFAULT_CONFIG_FILE),$Ie=1e4,IE,NE,My,po,nM,rM,Uy,Ut,qn,xy,By,Ff,AE,yE;function vy(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=bE.dirname(n)):t.root?n=pa(t.root,nM):(n=Ut.path,t.root||(t.root=bE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Ut?.level??cr.info,s3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Ut.path===e.path&&r)}o(vy,"updateLogger");function s3(e){let t=e.conditional??(e.conditional={});t.notify=cr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=cr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=cr.error>=e.level?e.error.bind(e):void 0,t.warn=cr.warn>=e.level?e.warn.bind(e):void 0,t.info=cr.info>=e.level?e.info.bind(e):void 0,t.debug=cr.debug>=e.level?e.debug.bind(e):void 0,t.trace=cr.trace>=e.level?e.trace.bind(e):void 0}o(s3,"updateConditional");async function sM(){yE||(yE=new cNe,await yE.ready(),yE.on("change",sM));let e=yE.config,t=e.logging??{};vy(Ut,t),Uy=Ut.path,IE=t.console??!1,t.external&&vy(qn,t.external);for(let r in e){let n=e[r];n.logging?vy(Ut.forComponent(r),n.logging,r):Ut.hasComponent(r)&&vy(Ut.forComponent(r),t,r)}}o(sM,"updateLogSettings");var iM=class extends kIe{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){Rn="trace",this.level<=cr.trace&&super.info(...t),Rn="info"}debug(...t){Rn="debug",this.level<=cr.debug&&super.info(...t),Rn="info"}info(...t){Rn="info",this.level<=cr.info&&super.info(...t),Rn="info"}warn(...t){Rn="warn",this.level<=cr.warn&&super.warn(...t),Rn="info"}error(...t){Rn="error",this.level<=cr.error&&super.error(...t),Rn="info"}fatal(...t){Ff=!0;try{Rn="fatal",this.level<=cr.fatal&&super.error(...t),Rn="info"}finally{Ff=!1}}notify(...t){Ff=!0;try{Rn="notify",this.level<=cr.notify&&super.info(...t),Rn="info"}finally{Ff=!1}}withTag(t){return o3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};AE===void 0&&i3();ky.exports={notify:JIe,fatal:XIe,error:aM,warn:ZIe,info:zIe,debug:QIe,trace:jIe,logLevel:po,loggerWithTag:o3,suppressLogging:YIe,initLogSettings:i3,logCustomLevel:eNe,closeLogFile:a3,createLogger:Hy,logsAtLevel:VIe,getLogFilePath:o(()=>Uy,"getLogFilePath"),forComponent:o(e=>Ut.forComponent(e),"forComponent"),setMainLogger:oNe,setLogLevel:rNe,OUTPUTS:qIe,AuthAuditLog:aNe,start:sM,startOnMainThread:sM,errorToString:iNe};ky.exports.externalLogger={notify(...e){qn.notify(...e)},fatal(...e){qn.fatal(...e)},error(...e){qn.error(...e)},warn(...e){qn.warn(...e)},info(...e){qn.info(...e)},debug(...e){qn.debug(...e)},trace(...e){qn.trace(...e)},withTag(e){return qn.withTag(e)},loggerWithTag(e){return qn.withTag(e)}};HIe("logger",ky.exports.externalLogger);function VIe(e){return cr[po]<=cr[e]}o(VIe,"logsAtLevel");function i3(e=!1){try{if(AE===void 0||e){a3();let t=tNe(),r=j4(["ROOTPATH"]);try{AE=n3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ha.pathExistsSync(pa(r.ROOTPATH,qr.HDB_CONFIG_FILE)))throw s}let n;if({level:po,configLogPath:rM,toFile:NE,logConsole:IE,rotation:n,toStream:My}=nNe(r.ROOTPATH?pa(r.ROOTPATH,qr.HDB_CONFIG_FILE):AE.get("settings_path")),nM=qr.LOG_NAMES.HDB,Uy=pa(rM,nM),Ut=Hy({path:Uy,level:po,stdStreams:My,rotation:n}),qn=Ut.forComponent("external"),qn.tag=null,t3)try{require("segfault-handler").registerHandler(pa(rM,"crash.log"))}catch{}}}catch(t){if(AE=void 0,t.code===qr.NODE_ERROR_CODES.ENOENT||t.code===qr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=j4(Object.keys(qr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=qr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===qr.CONFIG_PARAMS.LOGGING_LEVEL){po=a;continue}i===qr.CONFIG_PARAMS.LOGGING_CONSOLE&&(IE=i)}let{defaultLevel:n}=sNe();NE=!1,My=!0,po=po===void 0?n:po,Ut=Hy({level:po}),qn=Ut.forComponent("external"),qn.tag=null;return}throw aM("Error initializing log settings"),aM(t),t}process.env.DEV_MODE&&(My=!0),KIe()}o(i3,"initLogSettings");var Lc=!0;function KIe(){NE&&(process.stdout.write=function(e){return typeof e=="string"&&Lc&&IE&&(e=e.toString(),e[e.length-1]===`
127
- `&&(e=e.slice(0,-1)),By(e)),Q4.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Lc&&IE&&(e[e.length-1]===`
128
- `&&(e=e.slice(0,-1)),By(e)),Q4.apply(process.stderr,arguments)})}o(KIe,"stdioLogging");function o3(e,t,r=Ut){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=cr[i]?function(...a){Fy=e;try{return s.call(r,...a)}finally{Fy=void 0}}:null}o(n,"logWithTag")}o(o3,"loggerWithTag");function YIe(e){try{Lc=!1,e()}finally{Lc=!0}}o(YIe,"suppressLogging");var WIe=xIe?.name?.replace(/ /g,"-")||"main",Rn="info",oM,Fy;function Hy({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=cr[t],l;function u(h){if(NE)if(l.logToStdstreams){f(h.replace(/\x1b\[[0-9;]*m/g,"")),Lc=!1;try{process.stdout.write(h)}finally{Lc=!0}}else f(h);else r&&process.stdout.write(h)}o(u,"logStdOut");function d(h){if(NE){if(f(h),r){Lc=!1;try{process.stderr.write(h)}finally{Lc=!0}}}else r&&process.stderr.write(h)}o(d,"logStdErr");let f=e&&e3(e,n,s);function m(h){return{write(p){let _=[Rn];_.unshift(oM||WIe+"/"+BIe),Fy&&_.push(Fy),l.tag&&_.push(l.tag),h(`[${_.join("] [")}]: ${p}`)}}}if(o(m,"logPrepend"),s&&(By=f),l=new iM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),s3(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(h){e=h,f=e3(e,l.rotation,s),s&&(By=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let h=new Map;l.forComponent=function(p){let _=h.get(p);return _||(_=Hy({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(Hy,"createLogger");var Z4=100;function e3(e,t,r){let n=J4.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,J4.set(e,n)),t3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let p=G4();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(js.get(gs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Of()==0)try{WQ(rbe(js.get(gs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,ey),l.cantCleanupProperly||Oi.warn("Had to forcefully exit the thread",ey),process.exit(0)},5e3).unref()})}if(jQ||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Oi.info("Could not close debugger",c)}}}).ref();let r;fE&&!obe&&(r=JQ()),Promise.resolve(r).then(()=>{if(Of()===0)try{nbe(sbe)}catch(n){console.error("Error displaying start-up log",n)}VQ?.postMessage({type:gs.ITC_EVENT_TYPES.CHILD_STARTED})})});return zQ(t),t}o(QQ,"startServers");function JQ(){let e=[];for(let t in Cf){let r=Cf[t];if(t.includes?.("/")&&Of()==0){JAe(t)&&WQ(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Oi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=js.get(gs.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=Of();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?fE?n={fd:fE(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:fE?n={fd:fE(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Oi.trace("Listening on port "+t,ey)}).on("error",c)}))}return Promise.all(e)}o(JQ,"listenOnPorts");!XL&&!jAe?.noServerStart&&QQ();function abe(e,t){let r=(ff(),v(wp)).getComponentName,n;if(t.securePort){KQ(t.securePort,{protocol_name:"TLS",name:r()});let s=tbe("server",t.mtls),i=js.get("tls");n=ZAe({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),Cf[t.securePort]=n}return t.port&&(KQ(t.port,{protocol_name:"TCP",name:r()}),n=QAe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Cf[t.port]=n),n}o(abe,"onSocket")});var IQ={};Oe(IQ,{startHTTPThreads:()=>lbe,startSocketServer:()=>sD,updateWorkerIdleness:()=>oJ});async function lbe(e=2,t){ON().catch(r=>vf.error?.("Error recording hostname for analytics:",r));try{if(t)rD(0,1,!0);else{let{loadRootComponents:r}=ty();if(e===0)return(0,Qs.setMainIsWorker)(!0),await ZL().startServers(),Promise.resolve([]);await r()}iJ();for(let r=0;r<e;r++)rD(r,e);return Promise.all(sJ)}finally{(0,Qs.threadsHaveStarted)()}}function iJ(){let e=(0,tJ.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),tD=setInterval(()=>{vf.notify(e)},cbe).unref())}function rD(e,t=1,r){if(eD++,(0,Qs.startWorker)("server/threads/threadServer.js",{name:fA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===cA.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});sJ.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=ny.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"),Lf){let a=Lf;Lf=[];for(let c of a)nJ[c.localPort](null,c)}}}),r){let n=setInterval(()=>{nD?nD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Qs.shutdownWorkers)(),eD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function sD(e=0,t){if(typeof e=="string")try{(0,sy.existsSync)(e)&&(0,sy.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=ube:r=dbe(t):r=iD;let n=(0,Df.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=nJ[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),nD=!0,r(i,(a,c)=>{if(!a){if(XQ){let u=i._socket||new Df.Socket({handle:i,writable:!0,readable:!0});XQ.deliverSocket(u,e,c),u.resume()}else eD>0?(Lf.length===0&&setTimeout(()=>{Lf.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,Lf.push(i)):(console.log("start up a dynamic thread to handle request"),rD(0));at(!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 Df.Socket({handle:i,writable:!0,readable:!0});hbe(u,a,e)}at(!0,"socket-routed")})},vf.info(`HarperDB ${rJ.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function iD(e,t){let r,n=0;for(let s of Pf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=ry)return ry=i,t(r);n=i}ry=0,t(r)}function ube(e,t){let r={};e.getpeername(r);let n=r.address,s=Mf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);iD(e,a=>{Mf.set(n,{worker:a,lastUsed:i}),t(a)})}function dbe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Df.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=Mf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);iD(n,f=>{Mf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function oJ(){ry=0;for(let e of Pf)e.expectedIdle=e.recentELU.idle+fbe,e.requests=1;Pf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function hbe(e,t,r){let n=mbe++;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(),ny.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")),ny.delete(n)),s.event=="destroy"&&(e.destroy(),ny.delete(n))})}var Qs,Df,vf,sy,eJ,tJ,rJ,Pf,Lf,nJ,XQ,eD,sJ,tD,cbe,nD,ry,ZQ,Mf,fbe,ny,mbe,kL=le(()=>{Qs=w(ze()),Df=require("net");H();vf=w(z()),sy=require("fs");ji();eJ=require("worker_threads"),tJ=w(ef()),rJ=w(It()),Pf=[],Lf=[],nJ=[],eD=0,sJ=[];eJ.isMainThread&&(process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Qs.onMessageFromWorkers)(e=>{e.type===dA.RESTART&&tD&&(clearInterval(tD),iJ())}));cbe=6e5;o(lbe,"startHTTPThreads");o(iJ,"licenseWarning");o(rD,"startHTTPWorker");o(sD,"startSocketServer");ry=0;o(iD,"findMostIdleWorker");ZQ=36e5,Mf=new Map;o(ube,"findByRemoteAddressAffinity");o(dbe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Mf)r.lastUsed+ZQ<e&&Mf.delete(t)},ZQ).unref();fbe=1e3;o(oJ,"updateWorkerIdleness");(0,Qs.setMonitorListener)(oJ);ny=new Map,mbe=1;o(hbe,"proxySocket")});var oD={};Oe(oD,{hdbServer:()=>gbe,start:()=>gbe});async function gbe(e){try{fo.default.debug("In Fastify server"+process.cwd()),fo.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),fo.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=aJ.default.isMaster,await Sbe();let t=e.securePort>0;Uf=Tbe(t),await Uf.ready(),e||(e={}),e.usageType="operations-api";try{De.http(Uf.server,e),Uf.server.closeIdleConnections||await Uf.listen({port:0,host:"::"})}catch(r){throw Uf.close(),fo.default.error(r),fo.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),fo.default.fatal(t),process.exit(1)}}async function Sbe(){fo.default.trace("Configuring HarperDB process."),pJ.default.setSchemaDataToGlobal(),await _J.default.setUsersWithRolesCache(),await gJ.default.getLicense()}function Tbe(e){fo.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Rbe(e),r=(0,cJ.default)(t);r.server.headersTimeout=Abe(),r.setErrorHandler(wc.serverErrorHandler);let n=ybe();n&&r.register(lJ.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){u.sent||u.raw.headersSent||u.raw.writableEnded||r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(fJ.default),r.register(uJ.default),r.register(dJ.default,{root:mJ.default.join(hJ.PACKAGE_ROOT,"studio/build-local")}),mm(r);let s=Nc.default.get(aA.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!EJ.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[wc.reqBodyValidationHandler,wc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,wc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),fo.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function Rbe(e){let t=Nc.default.get(hE.OPERATIONSAPI_NETWORK_TIMEOUT),r=Nc.default.get(hE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Ebe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function ybe(){let e=Nc.default.get(hE.OPERATIONSAPI_NETWORK_CORS),t=Nc.default.get(hE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===_be)&&(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 Abe(){return Nc.default.get(hE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??pbe}var aJ,Nc,fo,cJ,lJ,uJ,dJ,fJ,mJ,hJ,pJ,EJ,_J,gJ,wc,pbe,Ebe,_be,hE,Uf,SJ=le(()=>{aJ=w(require("cluster")),Nc=w(ae());H();fo=w(z()),cJ=w(require("fastify")),lJ=w(require("@fastify/cors")),uJ=w(require("@fastify/compress")),dJ=w(require("@fastify/static")),fJ=w(dw()),mJ=w(require("path")),hJ=w(It()),pJ=w(ws()),EJ=w(ie()),_J=w(rs()),gJ=w(ef());Dr();wc=w(AR());yo();Nc.default.initSync();pbe=6e4,Ebe=1024*1024*1024,_be="TRUE",{CONFIG_PARAMS:hE}=Y;o(gbe,"operationsServer");o(Sbe,"setUp");o(Tbe,"buildServer");o(Rbe,"getServerOptions");o(ybe,"getCORSOpts");o(Abe,"getHeaderTimeoutConfig")});var fD={};Oe(fD,{disableNATS:()=>Ibe,publishToStream:()=>ay,setNATSReplicator:()=>aD,setPublishToStream:()=>Nbe,setSubscription:()=>dD,start:()=>bbe});function bbe(){pE.default.get(U.CLUSTERING_ENABLED)&&Obe()}function Ibe(e=!0){bJ=e}function Nbe(e,t){ay=e,dD=t}function Obe(){if(bJ||process.env._DISABLE_NATS)return;let e=ot(),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];aD(s,r,i)}}wl((r,n)=>{aD(r.tableName,r.databaseName,r),n&&NJ(r)}),!TJ&&(TJ=!0)}function aD(e,t,r){if(t==="system"&&Cbe.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 Ur{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){NJ(i)}static subscribe(){let i=new Kn;return dD(t,e,i),i}static subscribeOnThisThread(i){return i<(pE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??wbe)}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 iy(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=IJ;return i}o(n,"getNATSTransaction")}function NJ(e){let t=pE.default.get(U.CLUSTERING_NODENAME);ay(`${lD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,uD.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 RJ,lD,uD,yJ,AJ,pE,oy,bJ,ay,dD,wbe,IJ,TJ,Cbe,iy,cD,wJ=le(()=>{Me();Ma();RJ=w(Gt()),lD=w(ht()),uD=w(Ki());bu();yJ=w(ww()),AJ=w(In()),pE=w(ae());H();oy=w(z());o(bbe,"start");o(Ibe,"disableNATS");ay=RJ.publishToStream,dD=yJ.setSubscription;o(Nbe,"setPublishToStream");wbe=2;o(Obe,"assignReplicationSource");Cbe=["hdb_job","hdb_raw_analytics","hdb_info","hdb_license"];o(aD,"setNATSReplicator");o(NJ,"publishSchema");iy=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=pE.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||(oy.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(ay(`${lD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,uD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw oy.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},cD=class extends iy{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,AJ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};IJ=new cD});async function DJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await mD.get(e,{returnNonexistent:!0});i=new ED(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await mD.get(e);a&&a.delete()}i=new ly(e,t)}return n&&(n.id=e,n.user={username:t?.username},EE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function hD(){return cy++,cy>65500&&(cy=1),cy}function pD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=bs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new si(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return Ft(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var CJ,Oc,PJ,LJ,OJ,mD,EE,cy,ly,ED,MJ=le(()=>{Me();qu();CJ=w(In()),Oc=w(z());kc();PJ=w(ze()),LJ=w(ZL());Dr();F_();OJ=100,mD=je({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"}]}}]}),EE=je({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,PJ.getWorkerIndex)()===0&&(async()=>{await LJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of EE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await De.getUser(r.user.username));try{await pD(r,t,r)}catch{(0,Oc.warn)("Failed to publish will",t)}EE.delete(e.id)}})();o(DJ,"getSession");cy=1;o(hD,"getNextMessageId");ly=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,Oc.trace)("Resuming subscription from",s,"from",a);let h=bs.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("/"),N;for(let j=0;j<R.length;j++)if(R[j].indexOf("+")>-1)if(R[j]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let C=!0;R[R.length-1]==="#"&&(R.length--,C=!1),N&&(n=o(j=>{let F=j.id;if(!Array.isArray(F))if(F?.indexOf?.("/")>-1)F=F.split("/");else return!1;if(C&&F.length!==R.length)return!1;for(let $=0;$<R.length;$++)if(R[$]!=="+"&&R[$]!==F[$])return!1;return!0},"filter"));let q=R.indexOf("+");m.url="/"+(q>-1?R.slice(0,q):R).concat("").join("/")}}else m.isCollection=!1;let _=h.path,g=h.Resource,y=await Ft(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 N=(async()=>{for await(let C of R)try{let q;if(C.type&&C.type!=="put"&&C.type!=="delete"&&C.type!=="message"&&C.type!=="patch"||n&&!n(C))continue;r?(C.topic=s,q=this.needsAcknowledge(C)):(C.acknowledge?.(),q=hD());let j=C.id;if(Array.isArray(j)&&(j=ku(j)),j==null&&(j=""),await this.listener(_+"/"+j,C.value,q,t)===!1)break;this.awaitingAcks?.size>OJ?await new Promise($=>setTimeout($,this.awaitingAcks.size-OJ)):await new Promise(setImmediate)}catch(q){(0,Oc.warn)(q)}})();return R});if(y)return y.topic=s,y.qos=t.qos,this.subscriptions.push(y),y}resume(){}needsAcknowledge(t){let r=hD();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 pD(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();Ft(r,async()=>{try{if(!t){let n=await EE.get(this.sessionId);n?.doesExist()&&await pD(n,n.data,r)}}finally{await EE.delete(this.sessionId)}}).catch(n=>{(0,Oc.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(pD,"publish");ED=class extends ly{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=hD(),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,Oc.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,CJ.getNextMonotonicTime)()),(0,Oc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),mD.put(this.sessionRecord)}}});var _D={};Oe(_D,{bypassAuth:()=>Pbe,start:()=>Dbe});function Pbe(){kJ=!0}function Dbe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new HJ.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),ar.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:h,onClose:p}=UJ(u,_=>{u.send(_)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",h),u.on("close",p),u.on("error",_=>{ar.info?.("WebSocket error",_)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),ar.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,xf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&dy.notify?.({username:d?.username,status:ei.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(p){throw(0,xf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&dy.error?.({username:h,status:ei.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),p}}else ar.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(h){a.events.emit("error",h,u),ar.error?.(h)}else if(l.required)return ar.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&Lbe(u.remoteAddress)&&(d=await(0,xJ.getSuperUser)(),ar.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=UJ(u,h=>u.write(h),null,d,a);u.on("data",f),u.on("close",m),u.on("error",h=>{ar.info?.("Socket error",h)})},{port:t,securePort:s,mtls:l})),c}function UJ(e,t,r,n,s){vJ||(vJ=!0,fh(f=>{uy>0&&f.push({metric:"mqtt-connections",connections:uy,byThread:!0})}));let i;uy++;let a,c={protocolVersion:4},l=(0,fy.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){uy--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),Wr(!1,"connection","mqtt","disconnect"),ar.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"),ar.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){ar.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;at(f.length,"bytes-received",_,y(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await De.getUser(f.username,f.password.toString(),r),(0,xf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&dy.notify?.({username:n?.username,status:ei.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(J){return(0,xf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&dy.error?.({username:f.username,status:ei.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,J),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),Wr(!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=Ro(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?J(f.will.payload):void 0,delete f.will.payload}a=DJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(J){return ar.error?.(J),s.events.emit("auth-failed",f,e,J),Wr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:J.code||5,returnCode:J.code||128})}s.events.emit("connected",a,e),Wr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(J,K,te,fe)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",J);let oe=J.indexOf("/",1),ge=oe>0?J.slice(0,oe):J;g({cmd:"publish",topic:J,payload:await T(K),messageId:te||Math.floor(Math.random()*1e8),qos:fe.qos},ge);let Pe=e._socket??e;return Pe.writableNeedDrain?new Promise(Te=>Pe.once("drain",Te)):!Pe.closed}catch(oe){return ar.error?.(oe),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let N=[];for(let J of f.subscriptions){let K;try{let te=await a.addSubscription(J,J.qos>=1);K=te?te.qos||0:c.protocolVersion<5?128:143}catch(te){s.events.emit("error",te,e,J,a),te.statusCode?te.statusCode===500?ar.warn?.(te):ar.info?.(te):ar.error?.(te),K=c.protocolVersion<5?128:te.statusCode===403?135:te.statusCode===404?143:128}N.push(K)}await a.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let J=[];for(let K of f.unsubscriptions)J.push(a.removeSubscription(K)?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 C=f.qos===2?"pubrec":"puback",q=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type"))),F=(f.payload?.length||0)>0?q(f.payload):void 0,$;try{$=await a.publish(f,F)}catch(J){s.events.emit("error",J,e,f,a),ar.warn?.(J),f.qos>0&&g({cmd:C,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:C,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),Wr(!0,"connection","mqtt","disconnect"),ar.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),ar.error?.(R),g({cmd:"disconnect"})}function g(R,N){let C=(0,fy.generate)(R,c);t(C),at(C.length,"bytes-sent",N,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 wa(R,r)}o(T,"serialize")}),l.on("error",f=>{ar.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var fy,xJ,xf,BJ,FJ,HJ,dy,ar,kJ,Lbe,vJ,uy,qJ=le(()=>{fy=require("mqtt-packet");MJ();xJ=w(rs());yo();ji();Dr();xf=w(ae());H();BJ=w(ri()),FJ=w(z()),HJ=require("events"),dy=(0,BJ.loggerWithTag)("auth-event"),ar=(0,FJ.forComponent)("mqtt"),kJ=(0,xf.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(Pbe,"bypassAuth");Lbe=o(e=>kJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(Dbe,"start");uy=0;o(UJ,"onSocket")});function my(e,t){if(t?.includes(".."))throw new gD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var gD,SD=le(()=>{gD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(my,"resolveBaseURLPath")});function GJ(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 $J=le(()=>{o(GJ,"deriveCommonPatternBase")});function hy(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 TD=le(()=>{o(hy,"deriveGlobOptions")});var VJ,RD,_E,KJ=le(()=>{SD();$J();TD();VJ=require("micromatch"),RD=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"}},_E=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=my(this.name,this.config.urlPath),this.globOptions=hy(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new RD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,VJ.scan)(s).base),this.commonPatternBase=GJ(this.patternBases)}}});function YJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function mu(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(YJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(YJ(n,t)){t=t.slice(n.length+1);break}}}return(0,WJ.join)(e.baseURLPath,t)}var WJ,yD=le(()=>{WJ=require("node:path");o(YJ,"pathStartsWithBase");o(mu,"deriveURLPath")});function zJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var Ey,jJ,QJ,AD,JJ,XJ,py,ZJ=le(()=>{Ey=require("node:events");KJ();jJ=w(z()),QJ=w(require("chokidar")),AD=require("node:path"),JJ=require("node:fs/promises");yD();XJ=require("micromatch"),py=class extends Ey.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new _E(t,r,zJ(n)),this.#r=s||jJ.default.loggerWithTag(t),this.ready=(0,Ey.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,XJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,AD.join)(this.directory,r);switch(t){case"add":case"change":{let i=mu(this.#e,r,"file");(0,JJ.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=mu(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=mu(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,AD.join)(this.#e.directory,r));return this.#t=QJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>{let n=r.replace(/\\/g,"/"),s=t.map(i=>i.replace(/\\/g,"/"));return n!==this.#e.directory.replace(/\\/g,"/")&&s.every(i=>!n.startsWith(i))},"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 _E(this.name,this.directory,zJ(t)),this.#a()}};o(zJ,"castConfig")});var _y,bD=le(()=>{_y={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var Sy,e4,t4,r4,n4,s4,ID,ND,wD,OD,CD,gy,i4=le(()=>{Sy=require("events"),e4=w(require("yaml")),t4=w(require("chokidar")),r4=require("node:fs/promises"),n4=require("util"),s4=w(z());bD();ID=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"}},ND=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},wD=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},OD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},CD=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},gy=class extends Sy.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||s4.default.loggerWithTag(t),this.ready=(0,Sy.once)(this,"ready"),this.#t=t4.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,r4.readFile)(this.#e,"utf-8").then(t=>{this.#n=e4.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 ID(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=_y,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,n4.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 ND;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new wD(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new OD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new CD(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 o4(){vbe[0]=1}var Mbe,vbe,a4=le(()=>{vp();Mbe=Xo.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),vbe=new Uint8Array(Mbe);o(o4,"requestRestart")});var yy,c4,Ty,Ry,l4=le(()=>{yy=require("node:events");ZJ();i4();c4=w(z());a4();Ty=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},Ry=class extends yy.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=c4.default.forComponent(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,yy.once)(this,"ready"),this.options=new gy(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 py(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{files:t.files,urlPath:t.urlPath}}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 Ty);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 Ty);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}`),o4()}}});function hu(e){return typeof e=="string"&&e.trim()!==""}function PD(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>hu(t))}function m4(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function Ube(e){e.config.root&&gE.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 BD(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(m4(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);Ay.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 h4(e){let t=!1;if(t=await Ube(e),t)return t;let r=await(0,u4.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=mu(e,n.path,"directory");Ay.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=mu(e,n.path,"file"),a=await(0,d4.readFile)(s);Ay.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 gE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var Ay,u4,gE,SE,d4,f4,by,Ci,LD,DD,MD,vD,UD,xD,BD,FD,HD,p4=le(()=>{Ay=require("node:worker_threads"),u4=w(require("fast-glob")),gE=w(z());SD();TD();SE=require("node:path"),d4=require("node:fs/promises");yD();f4=require("micromatch"),by=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!hu(this.config.files)&&!PD(this.config.files)&&!m4(this.config.files))throw new LD(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!PD(this.config.files.source)&&!hu(this.config.files.source))throw new DD(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new MD(this);if(this.config.files.ignore!==void 0&&!PD(this.config.files.ignore)&&!hu(this.config.files.ignore))throw new vD(this)}if(this.config.root!==void 0&&!hu(this.config.root))throw new xD(this);if(this.config.path!==void 0&&!hu(this.config.path))throw new FD(this);if(this.config.path&&(gE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!hu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new HD(this);this.globOptions=hy(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new UD(this,r);return r.startsWith("/")&&(gE.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,f4.scan)(r).base),this.baseURLPath=my(this.name,this.config.urlPath)}},Ci=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,SE.basename)(r.directory)}) ${t}`)}},LD=class extends Ci{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)}},DD=class extends Ci{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},MD=class extends Ci{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},vD=class extends Ci{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},UD=class extends Ci{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},xD=class extends Ci{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)}},BD=class extends Ci{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)}},FD=class extends Ci{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},HD=class extends Ci{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(hu,"isNonEmptyString");o(PD,"isArrayOfNonEmptyStrings");o(m4,"isObject");o(Ube,"handleRoots");o(h4,"processResourceExtensionComponent")});var wp={};Oe(wp,{componentErrors:()=>TE,getComponentName:()=>ZR,loadComponent:()=>Oy,loadComponentDirectories:()=>g4,setErrorReporter:()=>Bbe});function g4(e,t){t&&(qD=t),e&&(KD=e);let r=[];if((0,vt.existsSync)(kD)){let s=(0,vt.readdirSync)(kD,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,kr.join)(kD,a);r.push(Oy(c,qD,nA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Oy(n,qD,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{_4=!0})}function Bbe(e){Ny=e}function Fbe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{Xo.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(Xo.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,vt.rmSync)(t,{recursive:!0,force:!0}),(0,vt.existsSync)((0,kr.join)(e,"node_modules"))||(0,vt.mkdirSync)((0,kr.join)(e,"node_modules")),(0,vt.symlinkSync)(WD.PACKAGE_ROOT,t,"dir"),r()}finally{Xo.primaryStore.unlock(e,0)}})}function S4(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;if(!Xo.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(S4(e,t))}))return new Promise((a,c)=>{n=a,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)});let i;return Promise.race([t.handleApplication(e),new Promise((a,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{Xo.primaryStore.unlock(e.name,0),clearTimeout(i)})})}async function Oy(e,t,r,n,s,i){let a=(0,vt.realpathSync)(e);if(Iy.has(a))return Iy.get(a);Iy.set(a,!0),s&&(KD=s);try{let c;n&&(TE=new Map);let l=(0,kr.join)(e,"harperdb-config.yaml");(0,vt.existsSync)(l)?c=n?(0,Cy.getConfigObj)():(0,$D.parseDocument)((0,vt.readFileSync)(l,"utf8")).toJSON():!n&&(0,vt.existsSync)(l=(0,kr.join)(e,"config.yaml"))?c=(0,$D.parseDocument)((0,vt.readFileSync)(l,"utf8")).toJSON():c=_y;try{let m=(0,kr.join)(e,"node_modules","harperdb");(n||((0,vt.existsSync)(m)||!e.startsWith((0,VD.getHdbBasePath)()))&&(!(0,vt.existsSync)(m)||(0,vt.realpathSync)(WD.PACKAGE_ROOT)!==(0,vt.realpathSync)(m)))&&await Fbe(e,m)}catch(m){ma.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&ma.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=wy,d={};for(let m in c){wy=m;let h=c[m];if(TE.set(n?m:(0,kr.basename)(e),!1),!h)continue;let p,_=h.package;try{if(_){let N=e,C;for(;!(0,vt.existsSync)(C=(0,kr.join)(N,"node_modules",m));)if(N=(0,kr.dirname)(N),N.length<(0,VD.getHdbBasePath)().length){C=null;break}if(C)p=await Oy(C,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else p=xbe[m];if(!p)continue;let g=o(N=>(N.origin=r,je(N)),"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&&ma.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let N=new Ry(m,e,l,t,De);await S4(N,p);continue}if(GD.isMainThread&&(p=await p.startOnMainThread?.({server:De,ensureTable:g,port:R,securePort:T,resources:t,...h})||p,n&&y))for(let N of[R,T])try{if(+N&&!E4.includes(N)){let C=YD.get(U.HTTP_SESSIONAFFINITY);C&&ma.default.warn("Session affinity is not recommended and may cause memory leaks"),(C||!rS)&&(E4.push(N),sD(N,C))}}catch(C){console.error("Error listening on socket",N,C,m)}if(t.isWorker&&(p=await p.start?.({server:De,ensureTable:g,port:R,securePort:T,resources:t,...h})||p),KD.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&h.files!=null){let N=new by({config:h,name:m,directory:e,module:p,resources:t});d[m]=await h4(N)}}catch(g){g.message=`Could not load component '${m}' for application '${(0,kr.basename)(e)}' due to: ${g.message}`,Ny?.(g),((0,RE.getWorkerIndex)()===0?console:ma.default).error(g),t.set(h.path||"/",new nl(g),null,!0),TE.set(n?m:(0,kr.basename)(e),g.message)}}if(wy=u,GD.isMainThread&&!_4&&i&&(0,RE.watchDir)(e,async()=>g4()),c.extensionModule||c.pluginModule){let m=await tS((0,kr.join)(e,c.extensionModule||c.pluginModule));return Iy.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?`;Ny?.(new Error(m)),((0,RE.getWorkerIndex)()===0?console:ma.default).error(m),TE.set((0,kr.basename)(e),m)}for(let[m,h]of Object.entries(d))h||ma.default.warn(`Component ${m} from (${(0,kr.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}`,Ny?.(c),t.set("",new nl(c))}}var vt,kr,GD,$D,YD,WD,ma,RE,VD,Cy,kD,KD,_4,qD,TE,xbe,E4,Iy,Ny,wy,ZR,ff=le(()=>{vt=require("node:fs"),kr=require("node:path"),GD=require("node:worker_threads"),$D=require("yaml"),YD=w(ae()),WD=w(It());H();aq();_q();Lq();Fq();Hq();Xq();Vj();Qj();Xj();ma=w(z());a2();RE=w(ze());JN();Dr();Me();kL();VD=w(ae());SJ();HT();wJ();is();qJ();Cy=w(Ot());wh();mb();l4();p4();JL();vp();bD();kD=(0,Cy.resolvePath)(YD.get(U.COMPONENTSROOT)),KD=new Map,TE=new Map;o(g4,"loadComponentDirectories");xbe={REST:sS,rest:sS,graphql:$N,graphqlSchema:qN,roles:QN,jsResource:XN,fastifyRoutes:iL,login:ew,static:oL,operationsApi:oD,customFunctions:{},http:XR,clustering:fD,replication:ko,authentication:Tp,mqtt:_D,loadEnv:aL,logging:ma.default,dataLoader:uL},E4=[],Iy=new Map;o(Bbe,"setErrorReporter");ZR=o(()=>wy,"getComponentName");o(Fbe,"symlinkHarperModule");o(S4,"sequentiallyHandleApplication");o(Oy,"loadComponent")});var ty=M((Uqe,R4)=>{var{isMainThread:T4}=require("worker_threads"),{getTables:Hbe,getDatabases:Mqe,table:vqe}=(Me(),v(gt)),{loadComponentDirectories:kbe,loadComponent:qbe}=(ff(),v(wp)),{resetResources:Gbe}=(qu(),v(QU)),$be=qC(),Vbe=Ot(),{dirname:Kbe}=require("path"),{getConnection:Ybe}=Gt(),Wbe=ae(),{CONFIG_PARAMS:zbe}=(H(),v(Y)),{loadCertificates:jbe}=as(),zD=new Map;async function Qbe(e=!1){!T4&&Wbe.get(zbe.CLUSTERING_ENABLED)&&Ybe();try{T4&&await $be()}catch(n){console.error(n)}let t=Gbe();Hbe(),t.isWorker=e,await jbe(),await qbe(Kbe(Vbe.getConfigFilePath()),t,"hdb",!0,zD),await kbe(zD,t);let r=[];for(let[n]of zD)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(Qbe,"loadRootComponents");R4.exports.loadRootComponents=Qbe});var ze=M((Bqe,Li)=>{"use strict";mA();var{Worker:Jbe,MessageChannel:Xbe,parentPort:mo,isMainThread:ZD,threadId:Zbe,workerData:ho}=require("worker_threads"),{PACKAGE_ROOT:eIe}=It(),{join:I4,isAbsolute:tIe,extname:rIe}=require("path"),{server:N4}=(Dr(),v(Xf)),{watch:nIe,readdir:sIe}=require("fs/promises"),{totalmem:y4}=require("os"),{setHeapSnapshotNearHeapLimit:iIe}=require("v8"),Cc=(H(),v(Y)),Dy=ae(),Pi=z(),{randomBytes:oIe}=require("crypto"),{_assignPackageExport:aIe}=ti(),A4=1024*1024,Pc=[],Js=[],cIe=50,eM=1e4,lIe="restart",w4="request_thread_info",O4="resource_report",C4="thread_info",P4="added-port",uIe="ack",jD;aIe("threads",Js);Li.exports={startWorker:QD,restartWorkers:rM,shutdownWorkers:pIe,workers:Pc,setMonitorListener:AIe,onMessageFromWorkers:EIe,onMessageByType:B4,broadcast:gIe,broadcastWithAcknowledgement:TIe,setChildListenerByType:hIe,getWorkerIndex:L4,getWorkerCount:D4,getTicketKeys:v4,setMainIsWorker:fIe,setTerminateTimeout:dIe,restartNumber:ho?.restartNumber||1};Js.onMessageByType=B4;Js.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Js.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Li.exports.whenThreadsStarted=new Promise(e=>{Li.exports.threadsHaveStarted=e});Dy.get(Cc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&iIe(1);var tM;function dIe(e){eM=e}o(dIe,"setTerminateTimeout");function L4(){return ho?ho.workerIndex:tM?0:void 0}o(L4,"getWorkerIndex");function D4(){return ho?ho.workerCount:tM?1:void 0}o(D4,"getWorkerCount");function fIe(e){tM=e,Li.exports.threadsHaveStarted()}o(fIe,"setMainIsWorker");var M4=1,Py;function v4(){return Py||(Py=ZD?oIe(48):ho.ticketKeys,Py)}o(v4,"getTicketKeys");Object.defineProperty(N4,"workerIndex",{get(){return L4()}});Object.defineProperty(N4,"workerCount",{get(){return D4()}});var U4={[w4](e,t){RIe(t)},[O4](e,t){yIe(t,e)}};function QD(e,t={}){let r=process.constrainedMemory?.()||y4();r=Math.min(r,y4(),2e4*A4);let n=Dy.get(Cc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/A4/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let u of Js){let d=new Xbe;d.existingPort=u,i.push(d),a.push(d.port2)}rIe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];Dy.get(Cc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new Jbe(tIe(e)?e:I4(eIe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:M4=t.threadCount,name:t.name,restartNumber:Li.exports.restartNumber,ticketKeys:v4()},transferList:a,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:P4,port:u,threadId:l.threadId},[u]);return My(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>QD(e,t),l.on("error",u=>{Pi.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{Pc.splice(Pc.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<cIe?(t.unexpectedRestarts=l.unexpectedRestarts+1,QD(e,t)):Pi.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{U4[u.type]?.(u,l)}),Pc.push(l),IIe(),t.onStarted&&t.onStarted(l),l.name=t.name,l}o(QD,"startWorker");var mIe=[Cc.THREAD_TYPES.HTTP];async function rM(e=null,t=Math.max(M4>3,1),r=!0){if(ZD){try{process.chdir(process.cwd())}catch(a){Pi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=ty();await a()}Li.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;Pi.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Li.exports.restartNumber,type:Cc.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=mIe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Pi.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},eM*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===Cc.ITC_EVENT_TYPES.CHILD_STARTED&&(Pi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Pi.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}=cf();r&&(e==="http"||!e)&&Dy.get(Cc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else mo.postMessage({type:lIe,workerType:e})}o(rM,"restartWorkers");function hIe(e,t){U4[e]=t}o(hIe,"setChildListenerByType");function pIe(e){return rM(e,1/0,!1)}o(pIe,"shutdownWorkers");var x4=[];function EIe(e){x4.push(e)}o(EIe,"onMessageFromWorkers");var JD=new Map;function B4(e,t){let r=JD.get(e);r||JD.set(e,r=[]),r.push(t)}o(B4,"onMessageByType");var _Ie=10;async function gIe(e,t){let r=0;for(let n of Js)try{n.postMessage(e),r++>_Ie&&(r=0,await new Promise(setImmediate))}catch(s){Pi.error("Unable to send message to worker",s)}t&&H4(e,null)}o(gIe,"broadcast");var Ly=new Map,SIe=1;function TIe(e){return new Promise(t=>{let r=0;for(let n of Js)try{let s=SIe++,i=o(()=>{Ly.delete(s),--r===0&&t(),n!==mo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Ly.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of Ly)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Pi.error("Unable to send message to worker",s)}r===0&&t()})}o(TIe,"broadcastWithAcknowledgement");function RIe(e){e.postMessage({type:C4,workers:F4()})}o(RIe,"sendThreadInfo");function F4(){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(F4,"getChildWorkerInfo");function yIe(e,t){e.resources=t,e.resources.updated=Date.now()}o(yIe,"recordResourceReport");var XD;function AIe(e){XD=e}o(AIe,"setMonitorListener");var bIe=1e3,b4=!1;function IIe(){b4||(b4=!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}XD&&XD()},bIe).unref())}o(IIe,"startMonitoring");var NIe=1e3;if(mo&&ho?.addPorts){My(mo);for(let e=0,t=ho.addPorts.length;e<t;e++){let r=ho.addPorts[e];r.threadId=ho.addThreadIds[e],My(r)}setInterval(()=>{let e=process.memoryUsage();mo.postMessage({type:O4,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},NIe).unref(),jD=o(()=>new Promise((e,t)=>{mo.on("message",r),mo.postMessage({type:w4});function r(n){n.type===C4&&(mo.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else jD=F4;Li.exports.getThreadInfo=jD;function My(e,t){Js.push(e),e.on("message",r=>{if(r.type===P4)r.port.threadId=r.threadId,My(r.port);else if(r.type===uIe){let n=Ly.get(r.id);n&&n()}else H4(r,e)}).on("close",()=>{Js.splice(Js.indexOf(e),1)}).on("exit",()=>{Js.splice(Js.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(My,"addPort");function H4(e,t){for(let n of x4)n(e,t);let r=JD.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Pi.error(s)}}o(H4,"notifyMessageListeners");if(ZD){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await sIe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(I4(s,a.name));try{for await(let{filename:a}of nIe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await rM(),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");Li.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else mo.on("message",async e=>{let{type:t}=e;t===Cc.ITC_EVENT_TYPES.SHUTDOWN&&(Li.exports.restartNumber=e.restartNumber,mo.unref(),setTimeout(()=>{Pi.warn("Thread did not voluntarily terminate",Zbe),process.exit(0)},eM).unref())})});var K4=M((qqe,V4)=>{"use strict";var{promises:Bf,createReadStream:wIe,createWriteStream:OIe}=require("fs"),{createGzip:CIe}=require("zlib"),{promisify:PIe}=require("util"),{pipeline:LIe}=require("stream"),DIe=PIe(LIe),sM=require("path"),$4=ae();$4.initSync();var vy=z(),{CONFIG_PARAMS:MIe,ITC_EVENT_TYPES:Hqe}=(H(),v(Y)),{onMessageFromWorkers:kqe}=ze(),{convertToMS:k4}=ie(),{onStorageReclamation:vIe}=(T_(),v(SU)),UIe=6e4,xIe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",BIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",nM,q4;V4.exports=FIe;function FIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(vIe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(xIe);if(!i)throw new Error(BIe);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=k4(r));let d;return nM=Date.now(),vy.trace("Log rotate enabled, maxSize:",t,"interval:",r),q4=setInterval(async()=>{if(l){let f;f=await Bf.stat(e.path),f.size>=l&&(d=await G4(e.path,i))}if(u&&Date.now()-nM>=u&&(d=await G4(e.path,i),nM=Date.now()),n||c){let f=k4(n??"1M")/(1+c);c=0;let m=await Bf.readdir(i);for(let h of m)try{let p=await Bf.stat(sM.join(i,h));Date.now()-p.mtimeMs>f&&await Bf.unlink(sM.join(i,h))}catch(p){vy.error("Error trying to remove log",h,p)}}},a??UIe).unref(),{end(){clearInterval(q4)},getLastRotatedLogPath(){return d}}}o(FIe,"logRotator");async function G4(e,t){let r=$4.get(MIe.LOGGING_ROTATION_COMPRESS),n=sM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Bf.rename(e,n),r&&(e=n,n+=".gz",await DIe(wIe(e),CIe(),OIe(n)),await Bf.unlink(e)),vy.closeLogFile(),vy.notify(`hdb.log rotated, old log moved to ${n}`),n}o(G4,"moveLogFile")});var Q4={};Oe(Q4,{RootConfigWatcher:()=>iM});var Y4,W4,z4,Uy,j4,iM,J4=le(()=>{Y4=w(require("chokidar")),W4=require("node:fs/promises"),z4=w(Ot()),Uy=require("node:stream"),j4=require("yaml"),iM=class extends Uy.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;constructor(){super(),this.#e=(0,z4.getConfigFilePath)(),this.#t=Y4.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,W4.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,j4.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,Uy.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((Yqe,$y)=>{"use strict";var ha=require("fs-extra"),{workerData:HIe,threadId:kIe,isMainThread:s3}=require("worker_threads"),bE=require("path"),i3=require("yaml"),o3=require("properties-reader"),qr=(H(),v(Y)),X4=Hc(),qIe=require("os"),{PACKAGE_ROOT:fM}=It(),{_assignPackageExport:GIe}=ti(),{Console:$Ie}=require("console"),Z4=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),e3=new Map,{join:pa}=bE,t3=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},VIe={STDOUT:"stdOut",STDERR:"stdErr"},Kqe=pa(fM,"logs"),KIe=pa(fM,"config/yaml/",qr.HDB_DEFAULT_CONFIG_FILE),YIe=1e4,IE,NE,xy,po,aM,oM,Fy,Ut,Gn,Hy,ky,Ff,AE,yE;function By(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=bE.dirname(n)):t.root?n=pa(t.root,aM):(n=Ut.path,t.root||(t.root=bE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Ut?.level??cr.info,a3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Ut.path===e.path&&r)}o(By,"updateLogger");function a3(e){let t=e.conditional??(e.conditional={});t.notify=cr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=cr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=cr.error>=e.level?e.error.bind(e):void 0,t.warn=cr.warn>=e.level?e.warn.bind(e):void 0,t.info=cr.info>=e.level?e.info.bind(e):void 0,t.debug=cr.debug>=e.level?e.debug.bind(e):void 0,t.trace=cr.trace>=e.level?e.trace.bind(e):void 0}o(a3,"updateConditional");async function cM(){yE||(yE=new dNe,await yE.ready(),yE.on("change",cM));let e=yE.config,t=e.logging??{};By(Ut,t),Fy=Ut.path,IE=t.console??!1,t.external&&By(Gn,t.external);for(let r in e){let n=e[r];n.logging?By(Ut.forComponent(r),n.logging,r):Ut.hasComponent(r)&&By(Ut.forComponent(r),t,r)}}o(cM,"updateLogSettings");var lM=class extends $Ie{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){yn="trace",this.level<=cr.trace&&super.info(...t),yn="info"}debug(...t){yn="debug",this.level<=cr.debug&&super.info(...t),yn="info"}info(...t){yn="info",this.level<=cr.info&&super.info(...t),yn="info"}warn(...t){yn="warn",this.level<=cr.warn&&super.warn(...t),yn="info"}error(...t){yn="error",this.level<=cr.error&&super.error(...t),yn="info"}fatal(...t){Ff=!0;try{yn="fatal",this.level<=cr.fatal&&super.error(...t),yn="info"}finally{Ff=!1}}notify(...t){Ff=!0;try{yn="notify",this.level<=cr.notify&&super.info(...t),yn="info"}finally{Ff=!1}}withTag(t){return l3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};AE===void 0&&c3();$y.exports={notify:eNe,fatal:tNe,error:dM,warn:rNe,info:JIe,debug:ZIe,trace:XIe,logLevel:po,loggerWithTag:l3,suppressLogging:jIe,initLogSettings:c3,logCustomLevel:nNe,closeLogFile:u3,createLogger:Gy,logsAtLevel:WIe,getLogFilePath:o(()=>Fy,"getLogFilePath"),forComponent:o(e=>Ut.forComponent(e),"forComponent"),setMainLogger:lNe,setLogLevel:iNe,OUTPUTS:VIe,AuthAuditLog:uNe,start:cM,startOnMainThread:cM,errorToString:cNe};$y.exports.externalLogger={notify(...e){Gn.notify(...e)},fatal(...e){Gn.fatal(...e)},error(...e){Gn.error(...e)},warn(...e){Gn.warn(...e)},info(...e){Gn.info(...e)},debug(...e){Gn.debug(...e)},trace(...e){Gn.trace(...e)},withTag(e){return Gn.withTag(e)},loggerWithTag(e){return Gn.withTag(e)}};GIe("logger",$y.exports.externalLogger);function WIe(e){return cr[po]<=cr[e]}o(WIe,"logsAtLevel");function c3(e=!1){try{if(AE===void 0||e){u3();let t=sNe(),r=X4(["ROOTPATH"]);try{AE=o3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ha.pathExistsSync(pa(r.ROOTPATH,qr.HDB_CONFIG_FILE)))throw s}let n;if({level:po,configLogPath:oM,toFile:NE,logConsole:IE,rotation:n,toStream:xy}=oNe(r.ROOTPATH?pa(r.ROOTPATH,qr.HDB_CONFIG_FILE):AE.get("settings_path")),aM=qr.LOG_NAMES.HDB,Fy=pa(oM,aM),Ut=Gy({path:Fy,level:po,stdStreams:xy,rotation:n}),Gn=Ut.forComponent("external"),Gn.tag=null,s3)try{require("segfault-handler").registerHandler(pa(oM,"crash.log"))}catch{}}}catch(t){if(AE=void 0,t.code===qr.NODE_ERROR_CODES.ENOENT||t.code===qr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=X4(Object.keys(qr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=qr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===qr.CONFIG_PARAMS.LOGGING_LEVEL){po=a;continue}i===qr.CONFIG_PARAMS.LOGGING_CONSOLE&&(IE=i)}let{defaultLevel:n}=aNe();NE=!1,xy=!0,po=po===void 0?n:po,Ut=Gy({level:po}),Gn=Ut.forComponent("external"),Gn.tag=null;return}throw dM("Error initializing log settings"),dM(t),t}process.env.DEV_MODE&&(xy=!0),zIe()}o(c3,"initLogSettings");var Lc=!0;function zIe(){NE&&(process.stdout.write=function(e){return typeof e=="string"&&Lc&&IE&&(e=e.toString(),e[e.length-1]===`
127
+ `&&(e=e.slice(0,-1)),ky(e)),Z4.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Lc&&IE&&(e[e.length-1]===`
128
+ `&&(e=e.slice(0,-1)),ky(e)),Z4.apply(process.stderr,arguments)})}o(zIe,"stdioLogging");function l3(e,t,r=Ut){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=cr[i]?function(...a){qy=e;try{return s.call(r,...a)}finally{qy=void 0}}:null}o(n,"logWithTag")}o(l3,"loggerWithTag");function jIe(e){try{Lc=!1,e()}finally{Lc=!0}}o(jIe,"suppressLogging");var QIe=HIe?.name?.replace(/ /g,"-")||"main",yn="info",uM,qy;function Gy({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=cr[t],l;function u(h){if(NE)if(l.logToStdstreams){f(h.replace(/\x1b\[[0-9;]*m/g,"")),Lc=!1;try{process.stdout.write(h)}finally{Lc=!0}}else f(h);else r&&process.stdout.write(h)}o(u,"logStdOut");function d(h){if(NE){if(f(h),r){Lc=!1;try{process.stderr.write(h)}finally{Lc=!0}}}else r&&process.stderr.write(h)}o(d,"logStdErr");let f=e&&n3(e,n,s);function m(h){return{write(p){let _=[yn];_.unshift(uM||QIe+"/"+kIe),qy&&_.push(qy),l.tag&&_.push(l.tag),h(`[${_.join("] [")}]: ${p}`)}}}if(o(m,"logPrepend"),s&&(ky=f),l=new lM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),a3(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(h){e=h,f=n3(e,l.rotation,s),s&&(ky=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let h=new Map;l.forComponent=function(p){let _=h.get(p);return _||(_=Gy({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(Gy,"createLogger");var r3=100;function n3(e,t,r){let n=e3.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,e3.set(e,n)),s3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let p=K4();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<X4?c.push(_):c.length===X4&&c.push(`Maximum log buffer rate reached, logs will be throttled
131
- `),Ff&&(clearTimeout(a),f())):Ff||l<performance.now()+Z4?f(_):(l=Math.min(l,performance.now()+Z4),c=[_],a=setTimeout(f,1))}function f(p){if(h(),s){let _=performance.now();ha.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{ha.closeSync(s)}catch{}s=null,r&&(xy=null)}function h(p){if(!s){try{s=ha.openSync(e,"a"),r&&(xy=s)}catch(_){if(_.code==="ENOENT"&&!p)return ha.mkdirpSync(bE.dirname(e)),h(!0);i||(i=!0,console.error(_))}setTimeout(()=>{m()},$Ie).unref()}}}o(e3,"getFileLogger");function zIe(...e){Ut.info(...e)}o(zIe,"info");function jIe(...e){Ut.trace(...e)}o(jIe,"trace");function aM(...e){Ut.error(...e)}o(aM,"error");function QIe(...e){Ut.debug(...e)}o(QIe,"debug");function JIe(...e){Ut.notify(...e)}o(JIe,"notify");function XIe(...e){Ut.fatal(...e)}o(XIe,"fatal");function ZIe(...e){Ut.warn(...e)}o(ZIe,"warn");function eNe(e,t,r,...n){oM=r.service_name;try{Ut[e](...n)}finally{oM=void 0}}o(eNe,"logCustomLevel");function tNe(){let e;try{e=FIe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=pa(e,qr.HDB_HOME_DIR_NAME,qr.BOOT_PROPS_FILE_NAME);return ha.existsSync(t)||(t=pa(cM,"utility/hdb_boot_properties.file")),t}o(tNe,"getPropsFilePath");function rNe(e){po=e}o(rNe,"setLogLevel");function nNe(e){try{if(e.includes("config/settings.js")){let l=n3(e);return{level:l.get(qr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:bE.dirname(l.get(qr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(qr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(qr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=r3.parseDocument(ha.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===qr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(nNe,"getLogConfig");function sNe(){try{let e=r3.parseDocument(ha.readFileSync(GIe,"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(sNe,"getDefaultConfig");function iNe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(iNe,"errorToString");function oNe(e){Ut=e}o(oNe,"setMainLogger");function a3(){try{ha.closeSync(xy)}catch{}xy=null}o(a3,"closeLogFile");function aNe(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(aNe,"AuthAuditLog");var{RootConfigWatcher:cNe}=(z4(),v(W4))});var oe=M((d3,f3)=>{"use strict";var lM=require("fs-extra"),pu=require("path"),c3=require("os"),lNe=require("properties-reader"),OE=j(),wE=se(),Be=(H(),v(Y)),qy=Ot(),uNe="Error initializing environment manager",Gy="BOOT_PROPS_FILE_PATH",l3=!1,dNe={[Be.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ea={};Object.assign(d3,f3.exports={BOOT_PROPS_FILE_PATH:Gy,getHdbBasePath:fNe,setHdbBasePath:mNe,get:u3,initSync:pNe,setProperty:Xe,initTestEnvironment:ENe});function fNe(){return Ea[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(fNe,"getHdbBasePath");function mNe(e){Ea[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(mNe,"setHdbBasePath");function u3(e){let t=qy.getConfigValue(e);return t===void 0?Ea[e]:t}o(u3,"get");function Xe(e,t){dNe[e]&&(Ea[e]=t),qy.updateConfigObject(e,t)}o(Xe,"setProperty");function hNe(){let e;try{e=wE.getPropsFilePath(),lM.accessSync(e,lM.constants.F_OK|lM.constants.R_OK),l3=!0;let t=lNe(e);return Ea[Be.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Be.HDB_SETTINGS_NAMES.INSTALL_USER),Ea[Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ea[Gy]=e,!0}catch{return OE.trace(`Environment manager found no properties file at ${e}`),!1}}o(hNe,"doesPropFileExist");function pNe(e=!1){try{(l3||hNe()||wE.noBootFile()||e)&&(qy.initConfig(e),Ea[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=qy.getConfigValue(Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){OE.error(uNe),OE.error(t),console.error(t),process.exit(1)}}o(pNe,"initSync");function ENe(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=pu.join(__dirname,"../../","unitTests");Ea[Gy]=pu.join(l,"hdb_boot_properties.file"),Xe(Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,pu.join(l,"settings.test")),Xe(Be.HDB_SETTINGS_NAMES.INSTALL_USER,c3.userInfo()?c3.userInfo().username:void 0),Xe(Be.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Xe(Be.HDB_SETTINGS_NAMES.LOG_PATH_KEY,pu.join(l,"envDir","log")),Xe(Be.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Xe(Be.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Xe(Be.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Xe(Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,pu.join(l,"envDir")),Xe(Be.CONFIG_PARAMS.STORAGE_PATH,pu.join(l,"envDir")),s&&(Xe(Be.CONFIG_PARAMS.HTTP_SECUREPORT,u3(Be.CONFIG_PARAMS.HTTP_PORT)),Xe(Be.CONFIG_PARAMS.HTTP_PORT,null)),Xe(Be.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Xe(Be.CONFIG_PARAMS.HTTP_PORT,9926),Xe(Be.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Xe(Be.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Xe(Be.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,wE.isEmpty(i)?!1:i),Xe(Be.CONFIG_PARAMS.HTTP_CORS,wE.isEmpty(i)?!1:i),Xe(Be.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Xe(Be.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Xe(Be.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Xe(Be.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Xe(Be.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,pu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Xe(Be.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,wE.isEmpty(c)?!1:c),a&&(Xe("CORS_ACCESSLIST",a),Xe(Be.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(Xe(Be.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Xe(Be.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Xe(Be.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Xe(Be.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Xe(Be.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Xe(Be.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Gy}. Please check your boot props and settings files`;OE.fatal(r),OE.error(t)}}o(ENe,"initTestEnvironment")});var _3=M((Yqe,E3)=>{"use strict";var p3=require("joi"),{string:CE,boolean:m3,array:_Ne}=p3.types(),h3=(H(),v(Y)),gNe=nt();E3.exports=SNe;function SNe(e){let t=p3.object({operation:CE.valid(h3.OPERATIONS_ENUM.ADD_NODE,h3.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:CE.required(),subscriptions:_Ne.items({schema:CE.required(),table:CE.optional(),hash_attribute:CE.optional(),subscribe:m3.required(),publish:m3.required()}).min(1).required()});return gNe.validateBySchema(e,t)}o(SNe,"updateRemoteSourceValidator")});var PE=M((zqe,g3)=>{"use strict";var uM=class{static{o(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};g3.exports=uM});var y3=M((Qqe,R3)=>{"use strict";var TNe=_3(),_a=j(),dM=mt(),RNe=(H(),v(Y)),fM=vs(),Eu=Gt(),S3=$d(),yNe=Qu(),{Node:ANe,NodeSubscription:T3}=ic(),mM=PE(),hM=se(),bNe=oe(),{cloneDeep:INe}=require("lodash"),{broadcast:NNe}=ze();R3.exports=wNe;async function wNe(e){try{let t=TNe(e);if(t)return _a.error(`Validation error in updateRemoteSource: ${t.message}`),new mM(dM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],a=INe(await fM.getNodeRecord(n)),c=!hM.isEmptyOrZeroLength(a);a=c?a[0]:a,c&&_a.trace(`Existing record found for ${n}, updating records subscriptions`);for(let u=0,d=r.length;u<d;u++){let f=r[u],m=f.schema,h=f.table;if(!hM.doesSchemaExist(m)){_a.trace(`updateRemoteSource creating schema: ${m}`);try{await S3.createSchema({operation:"create_schema",schema:m})}catch(p){_a.error(p)}}if(h&&!hM.doesTableExist(m,h)){let p=new yNe(m,h,f.hash_attribute);f.attributes&&(p.attributes=f.attributes),_a.trace(`updateRemoteSource creating table: ${h} in schema: ${m} with attributes: ${JSON.stringify(f.attributes)}`);try{await S3.createTable(p)}catch(_){_a.error(_)}}if(_a.trace(`Creating local stream for ${m}.${h}`),await Eu.createLocalTableStream(m,h),c?(await Eu.updateConsumerIterator(m,h,n,"stop"),await Eu.updateRemoteConsumer(f,n),f.subscribe===!0&&await Eu.updateConsumerIterator(m,h,n,"start")):(await Eu.updateRemoteConsumer(f,n),f.subscribe===!0?await Eu.updateConsumerIterator(m,h,n,"start"):await Eu.updateConsumerIterator(m,h,n,"stop")),c){let p=!1;for(let _=0,g=a.subscriptions.length;_<g;_++){let R=a.subscriptions[_];if(R.schema===m&&R.table===h){R.publish=f.publish,R.subscribe=f.subscribe,p=!0;break}}p||a.subscriptions.push(new T3(m,h,f.publish,f.subscribe))}else i.push(new T3(m,h,f.publish,f.subscribe))}c||(a=new ANe(n,i,void 0),_a.trace(`No record found for ${n}, creating a new one`));let l=Object.create({});return Object.assign(l,a),l.system_info=s,await fM.upsertNodeRecord(l),NNe({type:"nats_update"}),new mM(dM.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${bNe.get(RNe.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await fM.getSystemInfo())}catch(t){_a.error(t);let r=t.message?t.message:t;return new mM(dM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(wNe,"updateRemoteSource")});var N3=M((Xqe,I3)=>{"use strict";var b3=require("joi"),{string:A3}=b3.types(),ONe=(H(),v(Y)),CNe=nt();I3.exports=PNe;function PNe(e){let t=b3.object({operation:A3.valid(ONe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:A3.required()});return CNe.validateBySchema(e,t)}o(PNe,"removeRemoteSourceValidator")});var C3=M((eGe,O3)=>{"use strict";var LNe=N3(),$y=j(),Vy=mt(),pM=(H(),v(Y)),DNe=vs(),MNe=se(),w3=Gt(),vNe=oe(),Ky=PE(),{NodeSubscription:UNe}=ic(),xNe=ju(),BNe=ka(),{broadcast:FNe}=ze(),HNe=vNe.get(pM.CONFIG_PARAMS.CLUSTERING_NODENAME);O3.exports=kNe;async function kNe(e){try{let t=LNe(e);if(t)return $y.error(`Validation error in removeRemoteSource: ${t.message}`),new Ky(Vy.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await DNe.getNodeRecord(r);if(MNe.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return $y.error(i),new Ky(Vy.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,a=n.subscriptions.length;i<a;i++){let c=n.subscriptions[i];$y.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let l=new UNe(c.schema,c.table,!1,!1);await w3.updateConsumerIterator(c.schema,c.table,r,"stop"),await w3.updateRemoteConsumer(l,r)}let s=new xNe(pM.SYSTEM_SCHEMA_NAME,pM.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await BNe.deleteRecord(s),FNe({type:"nats_update"}),new Ky(Vy.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${HNe} successfully removed node '${r}'.`)}catch(t){$y.error(t);let r=t.message?t.message:t;return new Ky(Vy.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(kNe,"removeRemoteSource")});var M3=M((rGe,D3)=>{"use strict";var Yy=j(),LE=(H(),v(Y)),P3=mt(),EM=oe(),qNe=se(),L3=PE(),GNe=vs(),$Ne=Ch(),VNe=on();D3.exports=KNe;async function KNe(e){try{Yy.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=qNe.ms_to_time(t),n=new YNe(EM.get(LE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),EM.get(LE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??EM.get(LE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await GNe.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new $Ne(LE.SYSTEM_SCHEMA_NAME,LE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await VNe.update(i)}catch(s){Yy.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return Yy.trace("getRemoteSourceConfig response:",n),new L3(P3.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){Yy.error(t);let r=t.message?t.message:t;return new L3(P3.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(KNe,"getRemoteSourceConfig");function YNe(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}o(YNe,"ConfigResponseObject")});var B3=M((sGe,x3)=>{"use strict";var v3=oe();v3.initSync();var U3=Gt(),DE=j(),Hf=(H(),v(Y)),_M=mt(),WNe=y3(),zNe=C3(),jNe=M3(),QNe=PE(),{encode:JNe,decode:XNe}=require("msgpackr"),ZNe=ws(),ewe=vo(),twe=require("util"),rwe=(H(),v(Y)),{isMainThread:nwe,parentPort:swe}=require("worker_threads");ze();var iwe=twe.promisify(ZNe.setSchemaDataToGlobal),gM=v3.get(Hf.CONFIG_PARAMS.CLUSTERING_NODENAME);x3.exports=owe;async function owe(){try{DE.notify("Starting reply service."),await iwe();let e=await U3.getConnection(),t=`${gM}.__request__`,r=e.subscribe(t,{queue:gM});await awe(r)}catch(e){DE.error(e)}}o(owe,"initialize");async function awe(e){for await(let t of e){let r=XNe(t.data),n;switch(r.operation){case Hf.OPERATIONS_ENUM.ADD_NODE:case Hf.OPERATIONS_ENUM.UPDATE_NODE:n=await WNe(r);break;case Hf.OPERATIONS_ENUM.REMOVE_NODE:n=await zNe(r);break;case Hf.OPERATIONS_ENUM.CLUSTER_STATUS:n=await jNe(r);break;case Hf.OPERATIONS_ENUM.DESCRIBE_ALL:n=await cwe();break;default:let s=`node '${gM}' reply service received unrecognized request operation`;DE.error(s),n=new QNe(_M.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}DE.trace(n),t.respond(JNe(n))}}o(awe,"handleRequest");async function cwe(){try{return{status:_M.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await ewe.describeAll({bypass_auth:!0})}}catch(e){return DE.error(e),{status:_M.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}o(cwe,"getRemoteDescribeAll");nwe||swe.on("message",async e=>{let{type:t}=e;t===rwe.ITC_EVENT_TYPES.SHUTDOWN&&U3.closeConnection()})});var lwe=B3();(async()=>{try{await lwe()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
130
+ `}`;c?(c.length<t3?c.push(_):c.length===t3&&c.push(`Maximum log buffer rate reached, logs will be throttled
131
+ `),Ff&&(clearTimeout(a),f())):Ff||l<performance.now()+r3?f(_):(l=Math.min(l,performance.now()+r3),c=[_],a=setTimeout(f,1))}function f(p){if(h(),s){let _=performance.now();ha.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{ha.closeSync(s)}catch{}s=null,r&&(Hy=null)}function h(p){if(!s){try{s=ha.openSync(e,"a"),r&&(Hy=s)}catch(_){if(_.code==="ENOENT"&&!p)return ha.mkdirpSync(bE.dirname(e)),h(!0);i||(i=!0,console.error(_))}setTimeout(()=>{m()},YIe).unref()}}}o(n3,"getFileLogger");function JIe(...e){Ut.info(...e)}o(JIe,"info");function XIe(...e){Ut.trace(...e)}o(XIe,"trace");function dM(...e){Ut.error(...e)}o(dM,"error");function ZIe(...e){Ut.debug(...e)}o(ZIe,"debug");function eNe(...e){Ut.notify(...e)}o(eNe,"notify");function tNe(...e){Ut.fatal(...e)}o(tNe,"fatal");function rNe(...e){Ut.warn(...e)}o(rNe,"warn");function nNe(e,t,r,...n){uM=r.service_name;try{Ut[e](...n)}finally{uM=void 0}}o(nNe,"logCustomLevel");function sNe(){let e;try{e=qIe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=pa(e,qr.HDB_HOME_DIR_NAME,qr.BOOT_PROPS_FILE_NAME);return ha.existsSync(t)||(t=pa(fM,"utility/hdb_boot_properties.file")),t}o(sNe,"getPropsFilePath");function iNe(e){po=e}o(iNe,"setLogLevel");function oNe(e){try{if(e.includes("config/settings.js")){let l=o3(e);return{level:l.get(qr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:bE.dirname(l.get(qr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(qr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(qr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=i3.parseDocument(ha.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===qr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(oNe,"getLogConfig");function aNe(){try{let e=i3.parseDocument(ha.readFileSync(KIe,"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(aNe,"getDefaultConfig");function cNe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(cNe,"errorToString");function lNe(e){Ut=e}o(lNe,"setMainLogger");function u3(){try{ha.closeSync(Hy)}catch{}Hy=null}o(u3,"closeLogFile");function uNe(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(uNe,"AuthAuditLog");var{RootConfigWatcher:dNe}=(J4(),v(Q4))});var ae=M((h3,p3)=>{"use strict";var mM=require("fs-extra"),pu=require("path"),d3=require("os"),fNe=require("properties-reader"),OE=z(),wE=ie(),Fe=(H(),v(Y)),Vy=Ot(),mNe="Error initializing environment manager",Ky="BOOT_PROPS_FILE_PATH",f3=!1,hNe={[Fe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ea={};Object.assign(h3,p3.exports={BOOT_PROPS_FILE_PATH:Ky,getHdbBasePath:pNe,setHdbBasePath:ENe,get:m3,initSync:gNe,setProperty:Xe,initTestEnvironment:SNe});function pNe(){return Ea[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(pNe,"getHdbBasePath");function ENe(e){Ea[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(ENe,"setHdbBasePath");function m3(e){let t=Vy.getConfigValue(e);return t===void 0?Ea[e]:t}o(m3,"get");function Xe(e,t){hNe[e]&&(Ea[e]=t),Vy.updateConfigObject(e,t)}o(Xe,"setProperty");function _Ne(){let e;try{e=wE.getPropsFilePath(),mM.accessSync(e,mM.constants.F_OK|mM.constants.R_OK),f3=!0;let t=fNe(e);return Ea[Fe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Fe.HDB_SETTINGS_NAMES.INSTALL_USER),Ea[Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ea[Ky]=e,!0}catch{return OE.trace(`Environment manager found no properties file at ${e}`),!1}}o(_Ne,"doesPropFileExist");function gNe(e=!1){try{(f3||_Ne()||wE.noBootFile()||e)&&(Vy.initConfig(e),Ea[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Vy.getConfigValue(Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){OE.error(mNe),OE.error(t),console.error(t),process.exit(1)}}o(gNe,"initSync");function SNe(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=pu.join(__dirname,"../../","unitTests");Ea[Ky]=pu.join(l,"hdb_boot_properties.file"),Xe(Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,pu.join(l,"settings.test")),Xe(Fe.HDB_SETTINGS_NAMES.INSTALL_USER,d3.userInfo()?d3.userInfo().username:void 0),Xe(Fe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Xe(Fe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,pu.join(l,"envDir","log")),Xe(Fe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Xe(Fe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Xe(Fe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Xe(Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,pu.join(l,"envDir")),Xe(Fe.CONFIG_PARAMS.STORAGE_PATH,pu.join(l,"envDir")),s&&(Xe(Fe.CONFIG_PARAMS.HTTP_SECUREPORT,m3(Fe.CONFIG_PARAMS.HTTP_PORT)),Xe(Fe.CONFIG_PARAMS.HTTP_PORT,null)),Xe(Fe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Xe(Fe.CONFIG_PARAMS.HTTP_PORT,9926),Xe(Fe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Xe(Fe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Xe(Fe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,wE.isEmpty(i)?!1:i),Xe(Fe.CONFIG_PARAMS.HTTP_CORS,wE.isEmpty(i)?!1:i),Xe(Fe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Xe(Fe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Xe(Fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Xe(Fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Xe(Fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,pu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Xe(Fe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,wE.isEmpty(c)?!1:c),a&&(Xe("CORS_ACCESSLIST",a),Xe(Fe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(Xe(Fe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Xe(Fe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Xe(Fe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Xe(Fe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Xe(Fe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Xe(Fe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Ky}. Please check your boot props and settings files`;OE.fatal(r),OE.error(t)}}o(SNe,"initTestEnvironment")});var T3=M((jqe,S3)=>{"use strict";var g3=require("joi"),{string:CE,boolean:E3,array:TNe}=g3.types(),_3=(H(),v(Y)),RNe=st();S3.exports=yNe;function yNe(e){let t=g3.object({operation:CE.valid(_3.OPERATIONS_ENUM.ADD_NODE,_3.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:CE.required(),subscriptions:TNe.items({schema:CE.required(),table:CE.optional(),hash_attribute:CE.optional(),subscribe:E3.required(),publish:E3.required()}).min(1).required()});return RNe.validateBySchema(e,t)}o(yNe,"updateRemoteSourceValidator")});var PE=M((Jqe,R3)=>{"use strict";var hM=class{static{o(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};R3.exports=hM});var I3=M((Zqe,b3)=>{"use strict";var ANe=T3(),_a=z(),pM=ht(),bNe=(H(),v(Y)),EM=vs(),Eu=Gt(),y3=$d(),INe=Qu(),{Node:NNe,NodeSubscription:A3}=ic(),_M=PE(),gM=ie(),wNe=ae(),{cloneDeep:ONe}=require("lodash"),{broadcast:CNe}=ze();b3.exports=PNe;async function PNe(e){try{let t=ANe(e);if(t)return _a.error(`Validation error in updateRemoteSource: ${t.message}`),new _M(pM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],a=ONe(await EM.getNodeRecord(n)),c=!gM.isEmptyOrZeroLength(a);a=c?a[0]:a,c&&_a.trace(`Existing record found for ${n}, updating records subscriptions`);for(let u=0,d=r.length;u<d;u++){let f=r[u],m=f.schema,h=f.table;if(!gM.doesSchemaExist(m)){_a.trace(`updateRemoteSource creating schema: ${m}`);try{await y3.createSchema({operation:"create_schema",schema:m})}catch(p){_a.error(p)}}if(h&&!gM.doesTableExist(m,h)){let p=new INe(m,h,f.hash_attribute);f.attributes&&(p.attributes=f.attributes),_a.trace(`updateRemoteSource creating table: ${h} in schema: ${m} with attributes: ${JSON.stringify(f.attributes)}`);try{await y3.createTable(p)}catch(_){_a.error(_)}}if(_a.trace(`Creating local stream for ${m}.${h}`),await Eu.createLocalTableStream(m,h),c?(await Eu.updateConsumerIterator(m,h,n,"stop"),await Eu.updateRemoteConsumer(f,n),f.subscribe===!0&&await Eu.updateConsumerIterator(m,h,n,"start")):(await Eu.updateRemoteConsumer(f,n),f.subscribe===!0?await Eu.updateConsumerIterator(m,h,n,"start"):await Eu.updateConsumerIterator(m,h,n,"stop")),c){let p=!1;for(let _=0,g=a.subscriptions.length;_<g;_++){let y=a.subscriptions[_];if(y.schema===m&&y.table===h){y.publish=f.publish,y.subscribe=f.subscribe,p=!0;break}}p||a.subscriptions.push(new A3(m,h,f.publish,f.subscribe))}else i.push(new A3(m,h,f.publish,f.subscribe))}c||(a=new NNe(n,i,void 0),_a.trace(`No record found for ${n}, creating a new one`));let l=Object.create({});return Object.assign(l,a),l.system_info=s,await EM.upsertNodeRecord(l),CNe({type:"nats_update"}),new _M(pM.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${wNe.get(bNe.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await EM.getSystemInfo())}catch(t){_a.error(t);let r=t.message?t.message:t;return new _M(pM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(PNe,"updateRemoteSource")});var C3=M((tGe,O3)=>{"use strict";var w3=require("joi"),{string:N3}=w3.types(),LNe=(H(),v(Y)),DNe=st();O3.exports=MNe;function MNe(e){let t=w3.object({operation:N3.valid(LNe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:N3.required()});return DNe.validateBySchema(e,t)}o(MNe,"removeRemoteSourceValidator")});var D3=M((nGe,L3)=>{"use strict";var vNe=C3(),Yy=z(),Wy=ht(),SM=(H(),v(Y)),UNe=vs(),xNe=ie(),P3=Gt(),BNe=ae(),zy=PE(),{NodeSubscription:FNe}=ic(),HNe=ju(),kNe=ka(),{broadcast:qNe}=ze(),GNe=BNe.get(SM.CONFIG_PARAMS.CLUSTERING_NODENAME);L3.exports=$Ne;async function $Ne(e){try{let t=vNe(e);if(t)return Yy.error(`Validation error in removeRemoteSource: ${t.message}`),new zy(Wy.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await UNe.getNodeRecord(r);if(xNe.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return Yy.error(i),new zy(Wy.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,a=n.subscriptions.length;i<a;i++){let c=n.subscriptions[i];Yy.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let l=new FNe(c.schema,c.table,!1,!1);await P3.updateConsumerIterator(c.schema,c.table,r,"stop"),await P3.updateRemoteConsumer(l,r)}let s=new HNe(SM.SYSTEM_SCHEMA_NAME,SM.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await kNe.deleteRecord(s),qNe({type:"nats_update"}),new zy(Wy.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${GNe} successfully removed node '${r}'.`)}catch(t){Yy.error(t);let r=t.message?t.message:t;return new zy(Wy.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o($Ne,"removeRemoteSource")});var x3=M((iGe,U3)=>{"use strict";var jy=z(),LE=(H(),v(Y)),M3=ht(),TM=ae(),VNe=ie(),v3=PE(),KNe=vs(),YNe=Ch(),WNe=an();U3.exports=zNe;async function zNe(e){try{jy.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=VNe.ms_to_time(t),n=new jNe(TM.get(LE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),TM.get(LE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??TM.get(LE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await KNe.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new YNe(LE.SYSTEM_SCHEMA_NAME,LE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await WNe.update(i)}catch(s){jy.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return jy.trace("getRemoteSourceConfig response:",n),new v3(M3.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){jy.error(t);let r=t.message?t.message:t;return new v3(M3.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(zNe,"getRemoteSourceConfig");function jNe(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}o(jNe,"ConfigResponseObject")});var k3=M((aGe,H3)=>{"use strict";var B3=ae();B3.initSync();var F3=Gt(),DE=z(),Hf=(H(),v(Y)),RM=ht(),QNe=I3(),JNe=D3(),XNe=x3(),ZNe=PE(),{encode:ewe,decode:twe}=require("msgpackr"),rwe=ws(),nwe=vo(),swe=require("util"),iwe=(H(),v(Y)),{isMainThread:owe,parentPort:awe}=require("worker_threads");ze();var cwe=swe.promisify(rwe.setSchemaDataToGlobal),yM=B3.get(Hf.CONFIG_PARAMS.CLUSTERING_NODENAME);H3.exports=lwe;async function lwe(){try{DE.notify("Starting reply service."),await cwe();let e=await F3.getConnection(),t=`${yM}.__request__`,r=e.subscribe(t,{queue:yM});await uwe(r)}catch(e){DE.error(e)}}o(lwe,"initialize");async function uwe(e){for await(let t of e){let r=twe(t.data),n;switch(r.operation){case Hf.OPERATIONS_ENUM.ADD_NODE:case Hf.OPERATIONS_ENUM.UPDATE_NODE:n=await QNe(r);break;case Hf.OPERATIONS_ENUM.REMOVE_NODE:n=await JNe(r);break;case Hf.OPERATIONS_ENUM.CLUSTER_STATUS:n=await XNe(r);break;case Hf.OPERATIONS_ENUM.DESCRIBE_ALL:n=await dwe();break;default:let s=`node '${yM}' reply service received unrecognized request operation`;DE.error(s),n=new ZNe(RM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}DE.trace(n),t.respond(ewe(n))}}o(uwe,"handleRequest");async function dwe(){try{return{status:RM.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await nwe.describeAll({bypass_auth:!0})}}catch(e){return DE.error(e),{status:RM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}o(dwe,"getRemoteDescribeAll");owe||awe.on("message",async e=>{let{type:t}=e;t===iwe.ITC_EVENT_TYPES.SHUTDOWN&&F3.closeConnection()})});var fwe=k3();(async()=>{try{await fwe()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();