harperdb 4.7.6 → 4.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- "use strict";var KX=Object.create;var Em=Object.defineProperty;var YX=Object.getOwnPropertyDescriptor;var WX=Object.getOwnPropertyNames;var jX=Object.getPrototypeOf,zX=Object.prototype.hasOwnProperty;var a=(e,t)=>Em(e,"name",{value:t,configurable:!0});var se=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ye=(e,t)=>{for(var r in t)Em(e,r,{get:t[r],enumerable:!0})},sU=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of WX(t))!zX.call(e,s)&&s!==r&&Em(e,s,{get:()=>t[s],enumerable:!(n=YX(t,s))||n.enumerable});return e};var b=(e,t,r)=>(r=e!=null?KX(jX(e)):{},sU(t||!e||!e.__esModule?Em(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>sU(Em({},"__esModule",{value:!0}),e);var yt=M((vCe,aU)=>{var{join:JX,dirname:iU}=require("node:path"),{existsSync:QX,readFileSync:XX}=require("node:fs");function ZX(){let t=__dirname,r,n=0;for(;!QX(r=JX(t,"package.json"));)if(t===(t=iU(t))||n++>10)throw new Error("Could not find package root");return r}a(ZX,"findPackageJson");var oU=ZX(),e5=JSON.parse(XX(oU,"utf8")),t5=iU(oU);aU.exports={packageJson:e5,PACKAGE_ROOT:t5}});var j={};ye(j,{AUTH_AUDIT_STATUS:()=>oi,AUTH_AUDIT_TYPES:()=>Ka,BACKUP_DIR_NAME:()=>eA,BOOT_PROPS_FILE_NAME:()=>A5,BOOT_PROP_PARAMS:()=>uU,CLUSTERING_FLAG:()=>rA,CLUSTERING_PROCESSES:()=>d5,CLUSTER_MESSAGE_TYPE_ENUM:()=>tA,CLUSTER_OPERATIONS:()=>H5,CONFIG_PARAMS:()=>x,CONFIG_PARAM_MAP:()=>dU,DATABASES_DIR_NAME:()=>el,DATABASES_PARAM_CONFIG:()=>V5,DEFAULT_DATABASE_NAME:()=>m5,ESCAPED_FORWARD_SLASH_REGEX:()=>R5,FORWARD_SLASH_REGEX:()=>T5,FUNC_VAL:()=>t8,GEO_CONVERSION_ENUM:()=>q5,HDB_COMPONENT_CONFIG_FILE:()=>s5,HDB_CONFIG_FILE:()=>r5,HDB_DEFAULT_CONFIG_FILE:()=>n5,HDB_FILE_PERMISSIONS:()=>w5,HDB_HOME_DIR_NAME:()=>b5,HDB_PID_FILE:()=>f5,HDB_PROCESS_SERVICES:()=>u5,HDB_PROC_NAME:()=>i5,HDB_RESTART_SCRIPT:()=>o5,HDB_ROOT_DIR_NAME:()=>Jb,HDB_SETTINGS_NAMES:()=>Sm,HDB_SUPPORT_ADDRESS:()=>lU,INFO_TABLE_HASH_ATTRIBUTE:()=>D5,INSERT_MAX_CHARACTER_SIZE:()=>P5,INSTALL_PROMPTS:()=>O5,ITC_EVENT_TYPES:()=>T_,JOB_STATUS_ENUM:()=>x5,JOB_TYPE_ENUM:()=>K5,JWT_ENUM:()=>Tm,LAUNCH_SERVICE_SCRIPTS:()=>h5,LEGACY_CONFIG_PARAMS:()=>$5,LEGACY_DATABASES_DIR_NAME:()=>__,LICENSE_FILE_NAME:()=>U5,LICENSE_KEY_DIR_NAME:()=>Zb,LICENSE_VALUES:()=>Y5,LOG_LEVELS:()=>_m,LOG_NAMES:()=>p5,METADATA_PROPERTY:()=>z5,NODE_ERROR_CODES:()=>j5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>Z5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>X5,PRE_4_0_0_VERSION:()=>r8,PROCESS_DESCRIPTORS:()=>l5,PROCESS_NAME_ENV_PROP:()=>C5,RAM_ALLOCATION_ENUM:()=>W5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>S_,REG_KEY_FILE_NAME:()=>M5,RESTART_TIMEOUT_MS:()=>I5,ROLE_TYPES_ENUM:()=>E5,S3_BUCKET_AUTH_KEYS:()=>F5,SEARCH_NOT_FOUND_MESSAGE:()=>g5,SEARCH_WILDCARDS:()=>e8,SERVICE_ACTIONS_ENUM:()=>G5,SUPPORT_HELP_MSG:()=>_5,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>v5,SYSTEM_SCHEMA_NAME:()=>gm,SYSTEM_TABLE_NAMES:()=>xu,THREAD_TYPES:()=>sA,TIME_STAMP_NAMES:()=>Q5,TIME_STAMP_NAMES_ENUM:()=>J5,TRANSACTIONS_DIR_NAME:()=>N5,UNICODE_FORWARD_SLASH:()=>y5,UNICODE_PERIOD:()=>S5,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>L5,VALID_S3_FILE_TYPES:()=>B5,VALID_SQL_OPS_ENUM:()=>k5,VALUE_SEARCH_COMPARATORS:()=>g_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>nA});var h_,E_,r5,n5,Jb,s5,i5,o5,cU,zb,Qb,Xb,a5,c5,l5,u5,d5,f5,m5,p5,_m,h5,E5,lU,_5,g5,S5,T5,y5,R5,gm,b5,Zb,A5,I5,w5,el,__,N5,eA,C5,uU,O5,P5,L5,xu,D5,v5,M5,U5,x5,V,B5,F5,k5,H5,G5,q5,Sm,$5,x,dU,V5,K5,tA,Y5,W5,j5,z5,rA,fU,mU,J5,Q5,X5,g_,nA,Z5,e8,t8,S_,Tm,T_,sA,r8,oi,Ka,G=se(()=>{h_=require("node:path"),E_=b(yt()),r5="harperdb-config.yaml",n5="defaultConfig.yaml",Jb="hdb",s5="config.yaml",i5="harperdb.js",o5="restartHdb.js",cU="HarperDB",zb="Custom Functions",Qb="Clustering Hub",Xb="Clustering Leaf",a5="Clustering Ingest Service",c5="Clustering Reply Service",l5={HDB:cU,CLUSTERING_HUB:Qb,CLUSTERING_LEAF:Xb,CLUSTERING_INGEST_SERVICE:a5,CLUSTERING_REPLY_SERVICE:c5,CUSTOM_FUNCTIONS:zb,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"},u5={harperdb:cU,"clustering hub":Qb,"clustering leaf":Xb,"custom functions":zb,custom_functions:zb,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},d5={CLUSTERING_HUB_PROC_DESCRIPTOR:Qb,CLUSTERING_LEAF_PROC_DESCRIPTOR:Xb},f5="hdb.pid",m5="data",p5={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},_m={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},h5={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,h_.join)(E_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,h_.join)(E_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,h_.join)(E_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},E5={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},lU="support@harperdb.io",_5=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${lU}`,g5="None of the specified records were found.",S5="U+002E",T5=/\//g,y5="U+002F",R5=/U\+002F/g,gm="system",b5=".harperdb",Zb="keys",A5="hdb_boot_properties.file",I5=6e4,w5=448,el="database",__="schema",N5="transactions",eA="backup",C5="PROCESS_NAME",uU={SETTINGS_PATH_KEY:"settings_path"},O5={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"},P5=250,L5={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},xu={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"},D5="info_id",v5={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"},M5="060493.ks",U5=".license",x5={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_REGISTRATION_INFO:"registration_info",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",GET_SSH_KEY:"get_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},B5={CSV:".csv",JSON:".json"},F5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},k5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},H5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},G5={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},q5={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Sm={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},$5={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"},x={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_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL:"http_mtls_certificateVerification_crl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"http_mtls_certificateVerification_crl_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"http_mtls_certificateVerification_crl_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"http_mtls_certificateVerification_crl_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"http_mtls_certificateVerification_crl_gracePeriod",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP:"http_mtls_certificateVerification_ocsp",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"http_mtls_certificateVerification_ocsp_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"http_mtls_certificateVerification_ocsp_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"http_mtls_certificateVerification_ocsp_errorCacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"http_mtls_certificateVerification_ocsp_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_COLORS:"logging_colors",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_MTLS_CERTIFICATEVERIFICATION:"replication_mtls_certificateVerification",REPLICATION_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"replication_mtls_certificateVerification_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL:"replication_mtls_certificateVerification_crl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"replication_mtls_certificateVerification_crl_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"replication_mtls_certificateVerification_crl_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"replication_mtls_certificateVerification_crl_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"replication_mtls_certificateVerification_crl_gracePeriod",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP:"replication_mtls_certificateVerification_ocsp",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"replication_mtls_certificateVerification_ocsp_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"replication_mtls_certificateVerification_ocsp_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"replication_mtls_certificateVerification_ocsp_errorCacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"replication_mtls_certificateVerification_ocsp_failureMode",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_MAXTRANSACTIONOPENTIME:"storage_maxTransactionOpenTime",STORAGE_DEBUGLONGTRANSACTIONS:"storage_debugLongTransactions",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"},dU={settings_path:uU.SETTINGS_PATH_KEY,hdb_root_key:x.ROOTPATH,hdb_root:x.ROOTPATH,rootpath:x.ROOTPATH,server_port_key:x.OPERATIONSAPI_NETWORK_PORT,server_port:x.OPERATIONSAPI_NETWORK_PORT,cert_key:x.TLS_CERTIFICATE,certificate:x.TLS_CERTIFICATE,private_key_key:x.TLS_PRIVATEKEY,private_key:x.TLS_PRIVATEKEY,http_secure_enabled_key:x.OPERATIONSAPI_NETWORK_HTTPS,https_on:x.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:x.OPERATIONSAPI_NETWORK_CORS,cors_on:x.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:x.LOGGING_LEVEL,log_level:x.LOGGING_LEVEL,log_path_key:x.LOGGING_ROOT,log_path:x.LOGGING_ROOT,clustering_node_name_key:x.CLUSTERING_NODENAME,node_name:x.CLUSTERING_NODENAME,clustering_enabled_key:x.CLUSTERING_ENABLED,clustering:x.CLUSTERING_ENABLED,max_http_threads:x.THREADS_COUNT,max_hdb_processes:x.THREADS_COUNT,server_timeout_key:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:x.LOGGING_AUDITLOG,disable_transaction_log:x.LOGGING_AUDITLOG,operation_token_timeout_key:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:x.HTTP_PORT,custom_functions_port:x.HTTP_PORT,custom_functions_directory_key:x.COMPONENTSROOT,custom_functions_directory:x.COMPONENTSROOT,max_custom_function_processes:x.THREADS_COUNT,logging_console:x.LOGGING_CONSOLE,log_to_file:x.LOGGING_FILE,log_to_stdstreams:x.LOGGING_STDSTREAMS,local_studio_on:x.LOCALSTUDIO_ENABLED,clustering_port:x.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:x.CLUSTERING_USER,customfunctions_network_port:x.HTTP_PORT,customfunctions_tls_certificate:x.TLS_CERTIFICATE,customfunctions_network_cors:x.HTTP_CORS,customfunctions_network_corsaccesslist:x.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:x.HTTP_HEADERSTIMEOUT,customfunctions_network_https:x.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:x.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:x.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:x.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:x.HTTP_TIMEOUT,customfunctions_tls:x.TLS,http_threads:x.THREADS_COUNT,threads:x.THREADS_COUNT,threads_count:x.THREADS_COUNT,customfunctions_processes:x.THREADS_COUNT,customfunctions_root:x.COMPONENTSROOT,operationsapi_root:x.ROOTPATH};for(let e in x){let t=x[e];dU[t.toLowerCase()]=t}V5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},K5={csv_file_load:"csv_file_load",csv_data_load:V.CSV_DATA_LOAD,csv_url_load:V.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},tA={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"},Y5={VERSION_DEFAULT:"2.2.0"},W5={DEVELOPMENT:8192,DEFAULT:512},j5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},z5=Symbol("metadata"),rA="__clustering__",fU="__createdtime__",mU="__updatedtime__",J5={CREATED_TIME:fU,UPDATED_TIME:mU},Q5=[fU,mU],X5=15984864e5,g_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},nA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},Z5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},e8=["*","%"],t8="func_val",S_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Tm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},T_={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},sA={HTTP:"http"},r8="3.x.x",oi={SUCCESS:"success",FAILURE:"failure"},Ka={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var tl=M((UCe,EU)=>{"use strict";var pU=require("minimist");EU.exports=n8;function n8(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=hU(process.env),n=hU(pU(process.argv))):(r=process.env,n=pU(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(n8,"assignCMDENVVariables");function hU(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(hU,"objKeysToLowerCase")});var ai=M(ts=>{"use strict";global.Resource=ts.Resource=void 0;global.tables=ts.tables={};global.databases=ts.databases={};global.getUser=ts.getUser=void 0;global.authenticateUser=ts.authenticateUser=void 0;global.server=ts.server={};global.contentTypes=ts.contentTypes=null;global.threads=ts.threads=[];global.logger={};global.RequestTarget=ts.RequestTarget=void 0;global.operation=ts.operation=void 0;ts._assignPackageExport=(e,t)=>{global[e]=ts[e]=t}});var iA=M((FCe,_U)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n,basename:s}=require("node:path"),{existsSync:i,statSync:o,readFileSync:c,writeFileSync:l,unlinkSync:u}=require("node:fs"),{isMainThread:d}=require("node:worker_threads"),{spawnSync:f,spawn:m}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:p}=yt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,y=!1;if(y=i(n(p,E))){let w=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:p}).forEach(I=>{let H=0,X=0;try{w.add(I),H=o(n(p,I)).mtimeMs-5e3,X=o(n(p,E,I.replace(/.ts$/,".js"))).mtimeMs}catch{}H>X&&(S=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(p,E)}).forEach(I=>{if(!w.has(I.replace(/.js$/,".ts")))try{u(n(p,E,I))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let w=f("npx",["tsc"],{cwd:p});if(w.stdout?.length&&console.log(w.stdout.toString()),w.stderr?.length&&console.log(w.stderr.toString()),y){let I=n(t(),"harperdb-tsc.pid"),H=!1;if(i(I))try{process.kill(+c(I,"utf8"),0),H=!0}catch{}if(!H){console.log("Starting background TypeScript compilation...");let X=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});X.on("error",q=>{console.error("Error trying to compile TypeScript",q)}),X.pid&&l(I,String(X.pid),"utf-8"),X.unref()}}}}let _=_U.constructor,R=_._findPath;_._findPath=function(S,y,w){if(S.startsWith(".")&&!w&&y.length===1&&y[0].startsWith(p)&&!y[0].includes("node_modules")){let I=r(p,y[0]),H;I.startsWith(E)?H=n(p,r(E,I)):H=n(p,E,I),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let X=n(H,S),q=X+".js";if(i(q))return q;if(s(X).includes(".")&&i(X))return X}return R(S,y,w)}}});var ym={};ye(ym,{server:()=>Ue});var gU,Ue,Hr=se(()=>{gU=b(ai()),Ue={};(0,gU._assignPackageExport)("server",Ue)});var Jt=M((kCe,TU)=>{"use strict";var s8="__dbis__",i8="__txns__",o8="__environment_name__",a8="__dbi_defintion__",c8={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"},l8=["__createdtime__","__updatedtime__"],u8="\uFFFF",SU={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},d8=Object.values(SU);TU.exports={AUDIT_STORE_NAME:i8,INTERNAL_DBIS_NAME:s8,DBI_DEFINITION_NAME:a8,SEARCH_TYPES:c8,TIMESTAMP_NAMES:l8,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:o8,TRANSACTIONS_DBI_NAMES_ENUM:SU,TRANSACTIONS_DBIS:d8,OVERFLOW_MARKER:u8}});var Jr=M((HCe,OU)=>{"use strict";var yU=(G(),v(j)),RU=Jt(),bU={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},AU=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),IU={500:AU("There was an error processing your request."),400:"Invalid request"},f8=IU[bU.INTERNAL_SERVER_ERROR],m8={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},p8={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},h8={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},E8={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"value is required",SEARCH_VALUE_TOO_LARGE:"value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${RU.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${RU.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"},_8={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${yU.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 ${yU.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"},wU={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"},g8={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},S8={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},T8={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},y8={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},R8={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},NU={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},CU={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},b8={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"},A8={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},I8={...wU,...h8,...m8,...g8,...S8,...T8,...y8,...R8,..._8,...NU,...CU,...b8,...A8,...p8};OU.exports={CHECK_LOGS_WRAPPER:AU,HDB_ERROR_MSGS:I8,DEFAULT_ERROR_MSGS:IU,DEFAULT_ERROR_RESP:f8,HTTP_STATUS_CODES:bU,LMDB_ERRORS_ENUM:E8,AUTHENTICATION_ERROR_MSGS:wU,VALIDATION_ERROR_MSGS:NU,ITC_ERRORS:CU}});var ae=M(we=>{"use strict";var Ya=require("path"),MU=require("fs-extra"),vn=Q(),PU=require("fs-extra"),y_=require("os"),w8=require("net"),N8=require("recursive-iterator"),wr=(G(),v(j)),{PACKAGE_ROOT:C8}=yt(),LU=require("papaparse"),R_=require("moment"),{inspect:O8}=require("util"),DU=require("is-number"),P8=require("minimist"),L8=require("https"),D8=require("http"),v8=/^((\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)))$/,M8=require("util").promisify(setTimeout),U8="",x8=4,vU={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};we.isEmpty=rs;we.isEmptyOrZeroLength=qi;we.arrayHasEmptyValues=k8;we.arrayHasEmptyOrZeroLengthValues=H8;we.buildFolderPath=G8;we.isBoolean=UU;we.errorizeMessage=B8;we.stripFileExtension=$8;we.autoCast=V8;we.autoCastJSON=xU;we.autoCastJSONDeep=aA;we.removeDir=K8;we.compareVersions=Y8;we.isCompatibleDataVersion=W8;we.escapeRawValue=j8;we.unescapeValue=z8;we.stringifyProps=J8;we.timeoutPromise=X8;we.isClusterOperation=eZ;we.getClusterUser=rZ;we.checkGlobalSchemaTable=tZ;we.getHomeDir=FU;we.getPropsFilePath=Q8;we.promisifyPapaParse=nZ;we.removeBOM=kU;we.createEventPromise=sZ;we.checkSchemaTableExist=iZ;we.checkSchemaExists=HU;we.checkTableExists=GU;we.getStartOfTomorrowInSeconds=oZ;we.getLimitKey=aZ;we.isObject=q8;we.isNotEmptyAndHasValue=F8;we.autoCasterIsNumberCheck=BU;we.backtickASTSchemaItems=cZ;we.isPortTaken=Z8;we.createForkArgs=lZ;we.autoCastBoolean=uZ;we.autoCastBooleanStrict=dZ;we.asyncSetTimeout=M8;we.getTableHashAttribute=fZ;we.doesSchemaExist=mZ;we.doesTableExist=pZ;we.stringifyObj=hZ;we.ms_to_time=EZ;we.changeExtension=_Z;we.getEnvCliRootPath=cA;we.noBootFile=gZ;we.httpRequest=SZ;we.transformReq=TZ;we.convertToMS=yZ;we.PACKAGE_ROOT=C8;function B8(e){return e instanceof Error?e:new Error(e)}a(B8,"errorizeMessage");function rs(e){return e==null}a(rs,"isEmpty");function F8(e){return!rs(e)&&(e||e===0||e===""||UU(e))}a(F8,"isNotEmptyAndHasValue");function qi(e){return rs(e)||e.length===0||e.size===0}a(qi,"isEmptyOrZeroLength");function k8(e){if(rs(e))return!0;for(let t=0;t<e.length;t++)if(rs(e[t]))return!0;return!1}a(k8,"arrayHasEmptyValues");function H8(e){if(qi(e))return!0;for(let t=0;t<e.length;t++)if(qi(e[t]))return!0;return!1}a(H8,"arrayHasEmptyOrZeroLengthValues");function G8(...e){try{return e.join(Ya.sep)}catch{console.error(e)}}a(G8,"buildFolderPath");function UU(e){return rs(e)?!1:e===!0||e===!1}a(UU,"isBoolean");function q8(e){return rs(e)?!1:typeof e=="object"}a(q8,"isObject");function $8(e){return qi(e)?U8:e.slice(0,-x8)}a($8,"stripFileExtension");function V8(e){return rs(e)||e===""||typeof e!="string"?e:vU[e]!==void 0?vU[e]:BU(e)===!0?Number(e):v8.test(e)?new Date(e):e}a(V8,"autoCast");function xU(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(xU,"autoCastJSON");function aA(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=aA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=aA(r);n!==r&&(e[t]=n)}return e}else return xU(e)}a(aA,"autoCastJSONDeep");function BU(e){if(e.startsWith("0.")&&DU(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&DU(e))}a(BU,"autoCasterIsNumberCheck");async function K8(e){if(qi(e))throw new Error(`Directory path: ${e} does not exist`);try{await PU.emptyDir(e),await PU.remove(e)}catch(t){throw vn.error(`Error removing files in ${e} -- ${t}`),t}}a(K8,"removeDir");function Y8(e,t){if(qi(e)){vn.info("Invalid current version sent as parameter.");return}if(qi(t)){vn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(Y8,"compareVersions");function W8(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(W8,"isCompatibleDataVersion");function j8(e){if(rs(e))return e;let t=String(e);return t==="."?wr.UNICODE_PERIOD:t===".."?wr.UNICODE_PERIOD+wr.UNICODE_PERIOD:t.replace(wr.FORWARD_SLASH_REGEX,wr.UNICODE_FORWARD_SLASH)}a(j8,"escapeRawValue");function z8(e){if(rs(e))return e;let t=String(e);return t===wr.UNICODE_PERIOD?".":t===wr.UNICODE_PERIOD+wr.UNICODE_PERIOD?"..":String(e).replace(wr.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(z8,"unescapeValue");function J8(e,t){if(rs(e))return vn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+y_.EOL}!qi(n)&&n[0]===";"?r+=" "+n+s+y_.EOL:qi(n)||(r+=n+"="+s+y_.EOL)}catch{vn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(J8,"stringifyProps");function FU(){let e;try{e=y_.homedir()}catch{e=process.env.HOME}return e}a(FU,"getHomeDir");function Q8(){let e=Ya.join(FU(),wr.HDB_HOME_DIR_NAME,wr.BOOT_PROPS_FILE_NAME);return MU.existsSync(e)||(e=Ya.join(__dirname,"../","hdb_boot_properties.file")),e}a(Q8,"getPropsFilePath");function X8(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(X8,"timeoutPromise");async function Z8(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=w8.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Z8,"isPortTaken");function eZ(e){try{return wr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){vn.error(`Error checking operation against cluster ops ${t}`)}return!1}a(eZ,"isClusterOperation");function tZ(e,t){let r=(Oe(),v(ft)).getDatabases();if(!r[e])return b_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return b_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(tZ,"checkGlobalSchemaTable");function rZ(e,t){if(rs(t)){vn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(rs(e)||qi(e)){vn.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){vn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){vn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(rZ,"getClusterUser");function nZ(){LU.parsePromise=function(e,t,r){return new Promise(function(n,s){LU.parse(e,{header:!0,transformHeader:kU,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(nZ,"promisifyPapaParse");function kU(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(kU,"removeBOM");function sZ(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;vn.info(`Got cluster status event response: ${O8(s)}`);try{i.cancel()}catch{vn.error("Error trying to cancel timeout.")}n(s)})})}a(sZ,"createEventPromise");function iZ(e,t){let r=HU(e);if(r)return r;let n=GU(e,t);if(n)return n}a(iZ,"checkSchemaTableExist");function HU(e){let{getDatabases:t}=(Oe(),v(ft));if(!t()[e])return b_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(HU,"checkSchemaExists");function GU(e,t){let{getDatabases:r}=(Oe(),v(ft));if(!r()[e][t])return b_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(GU,"checkTableExists");function oZ(){let e=R_().utc().add(1,"d").startOf("d").unix(),t=R_().utc().unix();return e-t}a(oZ,"getStartOfTomorrowInSeconds");function aZ(){return R_().utc().format("DD-MM-YYYY")}a(aZ,"getLimitKey");function cZ(e){try{let t=new N8(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){vn.error("Got an error back ticking items."),vn.error(t)}}a(cZ,"backtickASTSchemaItems");function lZ(e){return[e]}a(lZ,"createForkArgs");function uZ(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(uZ,"autoCastBoolean");function dZ(e){if(typeof e=="string"){let t=e.toLowerCase();if(t==="true")return!0;if(t==="false")return!1}return e}a(dZ,"autoCastBooleanStrict");function fZ(e,t){let{getDatabases:r}=(Oe(),v(ft)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(fZ,"getTableHashAttribute");function mZ(e){let{getDatabases:t}=(Oe(),v(ft));return t()[e]!==void 0}a(mZ,"doesSchemaExist");function pZ(e,t){let{getDatabases:r}=(Oe(),v(ft));return r()[e]?.[t]!==void 0}a(pZ,"doesTableExist");function hZ(e){try{return JSON.stringify(e)}catch{return e}}a(hZ,"stringifyObj");function EZ(e){let t=R_.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(EZ,"ms_to_time");function _Z(e,t){let r=Ya.basename(e,Ya.extname(e));return Ya.join(Ya.dirname(e),r+t)}a(_Z,"changeExtension");function cA(){if(process.env[wr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[wr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=P8(process.argv);if(e[wr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[wr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(cA,"getEnvCliRootPath");var oA;function gZ(){if(oA)return oA;let e=cA();if(cA()&&MU.pathExistsSync(Ya.join(e,wr.HDB_CONFIG_FILE)))return oA=!0,!0}a(gZ,"noBootFile");function SZ(e,t){let r;return e.protocol==="http:"?r=D8:r=L8,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(SZ,"httpRequest");function TZ(e){if(!e.schema&&!e.database){e.schema=wr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(TZ,"transformReq");function yZ(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(yZ,"convertToMS");var b_=Jr()});var Rt=M((VCe,jU)=>{"use strict";var wm=(G(),v(j)),RZ=ae(),Mn=fe(),Nm=require("path"),bZ=require("minimist"),qU=require("fs-extra"),$U=require("lodash");Mn.initSync();var{CONFIG_PARAMS:Wa,DATABASES_PARAM_CONFIG:Rm,SYSTEM_SCHEMA_NAME:A_}=wm,bm,Am,Im;function VU(){if(bm!==void 0)return bm;if(Mn.getHdbBasePath()!==void 0)return bm=Mn.get(Wa.STORAGE_PATH)||Nm.join(Mn.getHdbBasePath(),wm.DATABASES_DIR_NAME),bm}a(VU,"getBaseSchemaPath");function KU(){if(Am!==void 0)return Am;if(Mn.getHdbBasePath()!==void 0)return Am=WU(A_),Am}a(KU,"getSystemSchemaPath");function YU(){if(Im!==void 0)return Im;if(Mn.getHdbBasePath()!==void 0)return Im=Mn.get(wm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Nm.join(Mn.getHdbBasePath(),wm.TRANSACTIONS_DIR_NAME),Im}a(YU,"getTransactionAuditStoreBasePath");function AZ(e,t){let r=Mn.get(Wa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Nm.join(YU(),e.toString())}a(AZ,"getTransactionAuditStorePath");function WU(e,t){e=e.toString(),t=t&&t.toString();let r=Mn.get(wm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Nm.join(VU(),e)}a(WU,"getSchemaPath");function IZ(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,bZ(process.argv));let n=r[Wa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!RZ.isObject(n))throw o;i=n}for(let o of i){let c=o[A_];if(!c)continue;let l=Mn.get(Wa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Rm.PATH];if(u)return $U.set(l,[A_,Rm.TABLES,t,Rm.PATH],u),Mn.setProperty(Wa.DATABASES,l),u;let d=c?.[Rm.PATH];if(d)return $U.set(l,[A_,Rm.PATH],d),Mn.setProperty(Wa.DATABASES,l),d}}let s=r[Wa.STORAGE_PATH.toUpperCase()];if(s){if(!qU.pathExistsSync(s))throw new Error(s+" does not exist");let i=Nm.join(s,e);return qU.mkdirsSync(i),Mn.setProperty(Wa.STORAGE_PATH,s),i}return KU()}a(IZ,"initSystemSchemaPaths");function wZ(){bm=void 0,Am=void 0,Im=void 0}a(wZ,"resetPaths");jU.exports={getBaseSchemaPath:VU,getSystemSchemaPath:KU,getTransactionAuditStorePath:AZ,getTransactionAuditStoreBasePath:YU,getSchemaPath:WU,initSystemSchemaPaths:IZ,resetPaths:wZ}});var Un=M((jCe,ZU)=>{"use strict";var NZ=Jr().LMDB_ERRORS_ENUM,YCe=require("lmdb"),CZ=Jt(),WCe=require("buffer").Buffer,{OVERFLOW_MARKER:zU,MAX_SEARCH_KEY_LENGTH:I_}=CZ,JU=["number","string","symbol","boolean","bigint"];function OZ(e){if(e=e?.primaryStore||e,!e)throw new Error(NZ.ENV_REQUIRED)}a(OZ,"validateEnv");function PZ(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(PZ,"stringifyData");function LZ(e){return e instanceof Date?e.valueOf():e}a(LZ,"convertKeyValueToWrite");function DZ(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(JU.includes(typeof e))return e.length>I_?[e.slice(0,I_)+zU]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(JU.includes(typeof i))i.length>I_?r.push(i.slice(0,I_)+zU):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(DZ,"getIndexedValues");var w_=0,QU=0;function XU(){QU=Date.now()-performance.now()}a(XU,"adjustStartTime");XU();var vZ=6e4;setInterval(XU,vZ).unref();function MZ(){let e=performance.now()+QU;return e>w_?(w_=e,e):(w_+=488e-6,w_)}a(MZ,"getNextMonotonicTime");ZU.exports={validateEnv:OZ,stringifyData:PZ,convertKeyValueToWrite:LZ,getNextMonotonicTime:MZ,getIndexedValues:DZ}});var Cm=M((JCe,ex)=>{"use strict";var UZ=(G(),v(j)).OPERATIONS_ENUM,lA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=UZ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};ex.exports=lA});var Ee=M((XCe,nx)=>{"use strict";var Bu=Jr(),xZ=(G(),v(j)),N_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,tx),this.statusCode=n||Bu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Bu.DEFAULT_ERROR_MSGS[n]?Bu.DEFAULT_ERROR_MSGS[n]:Bu.DEFAULT_ERROR_MSGS[Bu.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&&Q()[s](i)}},uA=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},dA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function tx(e,t,r,n=xZ.LOG_LEVELS.ERROR,s=null,i=!1){if(rx(e))return e;let o=new N_(e,t,r,n,s);return i&&delete o.stack,o}a(tx,"handleHDBError");function Fu(e){this.message=e}a(Fu,"Violation");Fu.prototype=Object.create(Error.prototype);Fu.prototype.constructor=Fu;Fu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var fA=class extends Fu{static{a(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function rx(e){return e.__proto__.constructor.name===N_.name}a(rx,"isHDBError");nx.exports={isHDBError:rx,handleHDBError:tx,ClientError:uA,ServerError:dA,AccessViolation:fA,Violation:Fu,hdbErrors:Bu}});var Om=M((tOe,ax)=>{"use strict";var eOe=Cm(),C_=(G(),v(j)),mA=ae(),sx=Q(),BZ=require("uuid"),{handleHDBError:O_,hdbErrors:FZ}=Ee(),{HDB_ERROR_MSGS:P_,HTTP_STATUS_CODES:L_}=FZ;ax.exports=ix;function ix(e,t,r){for(let s=0;s<t.length;s++)ox(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];kZ(i,r,e.operation)}}a(ix,"processRows");ix.validateAttribute=ox;function ox(e){if(Buffer.byteLength(String(e))>C_.INSERT_MAX_CHARACTER_SIZE)throw O_(new Error,P_.ATTR_NAME_LENGTH_ERR(e),L_.BAD_REQUEST,void 0,void 0,!0);if(mA.isEmptyOrZeroLength(e)||mA.isEmpty(e.trim()))throw O_(new Error,P_.ATTR_NAME_NULLISH_ERR,L_.BAD_REQUEST,void 0,void 0,!0)}a(ox,"validateAttribute");function kZ(e,t,r){if(!e.hasOwnProperty(t)||mA.isEmptyOrZeroLength(e[t])){if(r===C_.OPERATIONS_ENUM.INSERT||r===C_.OPERATIONS_ENUM.UPSERT){e[t]=BZ.v4();return}throw sx.error("Update transaction aborted due to record with no hash value:",e),O_(new Error,P_.RECORD_MISSING_HASH_ERR,L_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>C_.INSERT_MAX_CHARACTER_SIZE)throw sx.error(e),O_(new Error,P_.HASH_VAL_LENGTH_ERR,L_.BAD_REQUEST,void 0,void 0,!0)}a(kZ,"validateHash")});function mx(e){EA=e}function qZ(){GZ=setInterval(function(){for(let e of pA)if(e.timeout<=0){let t=e.getContext()?.url;dx.error(`Transaction was open too long and has been committed, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`,...e.startedFrom?[`was started from ${e.startedFrom.resourceName}.${e.startedFrom.method}`]:[],...hA?["starting stack trace",e.stackTraces]:[]),e.commit(),e.timeout=D_}else e.timeout-=D_},D_).unref()}var _A,ux,dx,U_,fx,cx,pA,HZ,hA,Uo,Pm,lx,EA,D_,v_,xo,M_,GZ,Lm=se(()=>{_A=b(Un()),ux=b(Ee()),dx=b(Q()),U_=b(fe());G();fx=b(ae()),cx=100,pA=new Set,HZ=(0,fx.convertToMS)(U_.get(x.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,hA=U_.get(x.STORAGE_DEBUGLONGTRANSACTIONS),Uo={CLOSED:0,OPEN:1,LINGERING:2};a(mx,"replicationConfirmation");D_=U_.get(x.STORAGE_MAXTRANSACTIONOPENTIME)??3e4,v_=class extends Error{static{a(this,"StartedTransaction")}},xo=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;timeout;validated=0;timestamp=0;overloadChecked;open=Uo.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.timeout=D_,this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Uo.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,hA&&(this.stackTraces=[new v_]),this.readTxn.openTimer&&(this.readTxn.openTimer=0),pA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,hA&&this.stackTraces.push(new v_),this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(pA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Pm&&!this.overloadChecked&&performance.now()-lx>HZ)throw new ux.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Uo.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Uo.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,_A.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let _=this.writes[E];if(!_)continue;let R=_[p===0?"before":"beforeIntermediate"];if(R){let S=R();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Uo.LINGERING:Uo.OPEN;let s,i=[],o=0;this.writes=this.writes.filter(f=>f);let c=a(f=>{f.commit(r,f.entry,n)},"doWrite"),l=a(()=>{let f=this.writes[o++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<cx>>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 Pm||(Pm=s,lx=performance.now(),Pm.then(()=>{Pm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];EA&&p&&i.push(EA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,this.timestamp=0,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+cx/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=Uo.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},M_=class extends xo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,_A.getNextMonotonicTime)())}getReadTxn(){}};a(qZ,"startMonitoringTxns");qZ()});var px,ns,gA,ku=se(()=>{px=require("events"),ns=class extends px.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext=null;queue;hasDataListeners;drainCloseListener;currentDrainResolver=null;[Symbol.asyncIterator](){let t=new gA;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)}},gA=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0,value:void 0}}}});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Uo.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 xo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var hx,ja=se(()=>{hx=b(ai());Lm();a(bt,"transaction");(0,hx._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var TA={};ye(TA,{add:()=>x_,applyReverse:()=>Ex,getRecordAtTime:()=>SA,rebuildUpdateBefore:()=>B_});function x_(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 B_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,x_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Ex(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=$Z[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=_x}}function SA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=At(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":Ex(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===_x&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=At(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)o[f]&&(s[f]=d[f],o[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var $Z,_x,F_=se(()=>{$i();a(x_,"add");x_.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)};$Z={add:x_};a(B_,"rebuildUpdateBefore");a(Ex,"applyReverse");_x={};a(SA,"getRecordAtTime")});var ir=M(H_=>{var k_=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])k_.logsAtLevel(e)&&(H_[e]=k_[e]);H_.loggerWithTag=e=>k_.loggerWithTag(e,!0);H_.setLogLevel=k_.setLogLevel});var Ax={};ye(Ax,{parse:()=>bA,streamAsJSON:()=>vm,stringify:()=>rl});function vm(e){return new yA({value:e})}function gx(e){return console.error(e),JSON.stringify(Dm(e))}function Sx(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function rl(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Rx)return bx(e);if(t.resolution)return t.resolution.then(()=>rl(e));throw t}}function bx(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+=bx(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+rl(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function bA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),YZ.test(e)?VZ.parse(e):JSON.parse(e)):null}var Tx,RA,yx,VZ,KZ,Rx,Dm,yA,YZ,AA=se(()=>{Tx=require("stream"),RA=b(Q()),yx=b(require("json-bigint-fixes")),VZ=(0,yx.default)({useNativeBigInt:!0}),KZ=1e4,Rx={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw Rx};({errorToString:Dm}=RA);a(vm,"streamAsJSON");yA=class extends Tx.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(RA.warn("Error serializing in stream",c),o={done:!1,value:{error:Dm(c)}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:Dm(c)}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),gx)}catch(s){yield gx(s)}else yield rl(t)}else yield rl(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Sx(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Dm(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>KZ?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 Sx(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(Dm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(gx,"handleError");a(Sx,"when");a(rl,"stringify");a(bx,"jsStringify");YZ=/[[,:]\s*-?\d{16,}/;a(bA,"parse")});var Mx={};ye(Mx,{asyncSerialization:()=>OA,contentTypes:()=>CA,findBestSerializer:()=>q_,getDeserializer:()=>Ho,hasAsyncSerialization:()=>PA,registerContentHandlers:()=>xm,serialize:()=>Bm,serializeMessage:()=>ko,toCsvStream:()=>G_});function WZ(e){try{return e?.[0]===123?NA(e):e}catch{return e}}function xm(e){e.register(jZ,{serializers:[{regex:/^application\/json$/,serializer:vm},{regex:/^application\/cbor$/,serializer:a(function(t){return new nl.EncoderStream(Um).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?sl.Readable.from((0,Vi.encodeIter)(t,Um)):(0,Vi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),G_(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,nl.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function q_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=hn.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,o=m)}}if(!n){if(r)throw new Nx.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(hn.keys()).join(", "),406);n=hn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Bm(e,t,r){let n=wx&&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 Ds)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=q_(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}),wA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Fo.createBrotliCompress)({params:{[Fo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Fo.constants.BROTLI_MODE_TEXT:Fo.constants.BROTLI_MODE_GENERIC,[Fo.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>wx?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Fo.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function ko(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Bo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=q_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=Mm(e);return Bo?.length>0?(Bo.length===1?Bo[0]:Promise.all(Bo)).then(()=>ko(e,t,!0)):n}finally{Bo=void 0}}function OA(e){if(Bo)Bo.push(e);else throw new Error("Unable to serialize asynchronously")}function PA(){return!!Bo}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 QZ(e){return JZ.includes(e)}function XZ(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Ho(e="",t=!1){let r=XZ(e),n=r.type&&hn.get(r.type)?.deserialize||ZZ(r);return t?s=>zZ(s).then(n):n}function ZZ(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!QZ(e.parameters.charset)&&wA.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 NA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function e9(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 G_(e,t){let r=sl.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new Px.Transform(n,s);return r.pipe(i)}var Vi,nl,Fo,Nx,sl,Cx,IA,Ox,wA,Px,Lx,Dx,Mm,NA,Um,hn,CA,Ix,vx,jZ,wx,Bo,JZ,Go=se(()=>{AA();Vi=require("msgpackr"),nl=require("cbor-x"),Fo=require("zlib"),Nx=b(Ee()),sl=b(require("stream"));Hr();Cx=b(ai()),IA=b(fe());G();Ox=b(require("yaml")),wA=b(ir());ss();Px=require("json2csv"),Lx=b(require("fastify-plugin")),Dx=IA.default.get(x.SERIALIZATION_BIGINT)!==!1,Mm=Dx?rl:JSON.stringify,NA=Dx?bA:JSON.parse,Um={useRecords:!1,useToJSON:!0},hn=new Map,CA=hn;Ue.contentTypes=CA;(0,Cx._assignPackageExport)("contentTypes",CA);hn.set("application/json",{serializeStream:vm,serialize:Mm,deserialize(e){return NA(e)},q:.8});Ix=new nl.Encoder(Um);hn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new nl.EncoderStream(Um).end(e)},serialize:Ix.encode,deserialize:Ix.decode,q:1});hn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?sl.Readable.from((0,Vi.encodeIter)(e,Um)):(0,Vi.pack)(e)},serialize:Vi.pack,deserialize:Vi.unpack,q:.9});hn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),G_(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]),G_(e,e?.getColumns?.())},q:.1});hn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return sl.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});hn.set("text/yaml",{serialize(e){return Ox.stringify(e,{aliasDuplicateObjects:!1})},q:.7});hn.set("text/event-stream",{serializeStream:a(function(e){return sl.Readable.from(e9(e,this.serialize))},"serializeStream"),serialize:a(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
1
+ "use strict";var KX=Object.create;var Em=Object.defineProperty;var YX=Object.getOwnPropertyDescriptor;var WX=Object.getOwnPropertyNames;var jX=Object.getPrototypeOf,zX=Object.prototype.hasOwnProperty;var a=(e,t)=>Em(e,"name",{value:t,configurable:!0});var se=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ye=(e,t)=>{for(var r in t)Em(e,r,{get:t[r],enumerable:!0})},sU=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of WX(t))!zX.call(e,s)&&s!==r&&Em(e,s,{get:()=>t[s],enumerable:!(n=YX(t,s))||n.enumerable});return e};var b=(e,t,r)=>(r=e!=null?KX(jX(e)):{},sU(t||!e||!e.__esModule?Em(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>sU(Em({},"__esModule",{value:!0}),e);var yt=M((vCe,aU)=>{var{join:JX,dirname:iU}=require("node:path"),{existsSync:QX,readFileSync:XX}=require("node:fs");function ZX(){let t=__dirname,r,n=0;for(;!QX(r=JX(t,"package.json"));)if(t===(t=iU(t))||n++>10)throw new Error("Could not find package root");return r}a(ZX,"findPackageJson");var oU=ZX(),e5=JSON.parse(XX(oU,"utf8")),t5=iU(oU);aU.exports={packageJson:e5,PACKAGE_ROOT:t5}});var j={};ye(j,{AUTH_AUDIT_STATUS:()=>oi,AUTH_AUDIT_TYPES:()=>Ka,BACKUP_DIR_NAME:()=>eA,BOOT_PROPS_FILE_NAME:()=>A5,BOOT_PROP_PARAMS:()=>uU,CLUSTERING_FLAG:()=>rA,CLUSTERING_PROCESSES:()=>d5,CLUSTER_MESSAGE_TYPE_ENUM:()=>tA,CLUSTER_OPERATIONS:()=>H5,CONFIG_PARAMS:()=>x,CONFIG_PARAM_MAP:()=>dU,DATABASES_DIR_NAME:()=>el,DATABASES_PARAM_CONFIG:()=>V5,DEFAULT_DATABASE_NAME:()=>m5,ESCAPED_FORWARD_SLASH_REGEX:()=>R5,FORWARD_SLASH_REGEX:()=>T5,FUNC_VAL:()=>t8,GEO_CONVERSION_ENUM:()=>q5,HDB_COMPONENT_CONFIG_FILE:()=>s5,HDB_CONFIG_FILE:()=>r5,HDB_DEFAULT_CONFIG_FILE:()=>n5,HDB_FILE_PERMISSIONS:()=>w5,HDB_HOME_DIR_NAME:()=>b5,HDB_PID_FILE:()=>f5,HDB_PROCESS_SERVICES:()=>u5,HDB_PROC_NAME:()=>i5,HDB_RESTART_SCRIPT:()=>o5,HDB_ROOT_DIR_NAME:()=>Jb,HDB_SETTINGS_NAMES:()=>Sm,HDB_SUPPORT_ADDRESS:()=>lU,INFO_TABLE_HASH_ATTRIBUTE:()=>D5,INSERT_MAX_CHARACTER_SIZE:()=>P5,INSTALL_PROMPTS:()=>O5,ITC_EVENT_TYPES:()=>T_,JOB_STATUS_ENUM:()=>x5,JOB_TYPE_ENUM:()=>K5,JWT_ENUM:()=>Tm,LAUNCH_SERVICE_SCRIPTS:()=>h5,LEGACY_CONFIG_PARAMS:()=>$5,LEGACY_DATABASES_DIR_NAME:()=>__,LICENSE_FILE_NAME:()=>U5,LICENSE_KEY_DIR_NAME:()=>Zb,LICENSE_VALUES:()=>Y5,LOG_LEVELS:()=>_m,LOG_NAMES:()=>p5,METADATA_PROPERTY:()=>z5,NODE_ERROR_CODES:()=>j5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>Z5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>X5,PRE_4_0_0_VERSION:()=>r8,PROCESS_DESCRIPTORS:()=>l5,PROCESS_NAME_ENV_PROP:()=>C5,RAM_ALLOCATION_ENUM:()=>W5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>S_,REG_KEY_FILE_NAME:()=>M5,RESTART_TIMEOUT_MS:()=>I5,ROLE_TYPES_ENUM:()=>E5,S3_BUCKET_AUTH_KEYS:()=>F5,SEARCH_NOT_FOUND_MESSAGE:()=>g5,SEARCH_WILDCARDS:()=>e8,SERVICE_ACTIONS_ENUM:()=>G5,SUPPORT_HELP_MSG:()=>_5,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>v5,SYSTEM_SCHEMA_NAME:()=>gm,SYSTEM_TABLE_NAMES:()=>xu,THREAD_TYPES:()=>sA,TIME_STAMP_NAMES:()=>Q5,TIME_STAMP_NAMES_ENUM:()=>J5,TRANSACTIONS_DIR_NAME:()=>N5,UNICODE_FORWARD_SLASH:()=>y5,UNICODE_PERIOD:()=>S5,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>L5,VALID_S3_FILE_TYPES:()=>B5,VALID_SQL_OPS_ENUM:()=>k5,VALUE_SEARCH_COMPARATORS:()=>g_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>nA});var h_,E_,r5,n5,Jb,s5,i5,o5,cU,zb,Qb,Xb,a5,c5,l5,u5,d5,f5,m5,p5,_m,h5,E5,lU,_5,g5,S5,T5,y5,R5,gm,b5,Zb,A5,I5,w5,el,__,N5,eA,C5,uU,O5,P5,L5,xu,D5,v5,M5,U5,x5,V,B5,F5,k5,H5,G5,q5,Sm,$5,x,dU,V5,K5,tA,Y5,W5,j5,z5,rA,fU,mU,J5,Q5,X5,g_,nA,Z5,e8,t8,S_,Tm,T_,sA,r8,oi,Ka,G=se(()=>{h_=require("node:path"),E_=b(yt()),r5="harperdb-config.yaml",n5="defaultConfig.yaml",Jb="hdb",s5="config.yaml",i5="harperdb.js",o5="restartHdb.js",cU="HarperDB",zb="Custom Functions",Qb="Clustering Hub",Xb="Clustering Leaf",a5="Clustering Ingest Service",c5="Clustering Reply Service",l5={HDB:cU,CLUSTERING_HUB:Qb,CLUSTERING_LEAF:Xb,CLUSTERING_INGEST_SERVICE:a5,CLUSTERING_REPLY_SERVICE:c5,CUSTOM_FUNCTIONS:zb,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"},u5={harperdb:cU,"clustering hub":Qb,"clustering leaf":Xb,"custom functions":zb,custom_functions:zb,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},d5={CLUSTERING_HUB_PROC_DESCRIPTOR:Qb,CLUSTERING_LEAF_PROC_DESCRIPTOR:Xb},f5="hdb.pid",m5="data",p5={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},_m={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},h5={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,h_.join)(E_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,h_.join)(E_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,h_.join)(E_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},E5={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},lU="support@harperdb.io",_5=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${lU}`,g5="None of the specified records were found.",S5="U+002E",T5=/\//g,y5="U+002F",R5=/U\+002F/g,gm="system",b5=".harperdb",Zb="keys",A5="hdb_boot_properties.file",I5=6e4,w5=448,el="database",__="schema",N5="transactions",eA="backup",C5="PROCESS_NAME",uU={SETTINGS_PATH_KEY:"settings_path"},O5={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"},P5=250,L5={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},xu={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"},D5="info_id",v5={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"},M5="060493.ks",U5=".license",x5={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_REGISTRATION_INFO:"registration_info",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",GET_SSH_KEY:"get_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},B5={CSV:".csv",JSON:".json"},F5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},k5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},H5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},G5={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},q5={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Sm={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},$5={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"},x={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_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL:"http_mtls_certificateVerification_crl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"http_mtls_certificateVerification_crl_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"http_mtls_certificateVerification_crl_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"http_mtls_certificateVerification_crl_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"http_mtls_certificateVerification_crl_gracePeriod",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP:"http_mtls_certificateVerification_ocsp",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"http_mtls_certificateVerification_ocsp_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"http_mtls_certificateVerification_ocsp_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"http_mtls_certificateVerification_ocsp_errorCacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"http_mtls_certificateVerification_ocsp_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_COLORS:"logging_colors",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_MTLS_CERTIFICATEVERIFICATION:"replication_mtls_certificateVerification",REPLICATION_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"replication_mtls_certificateVerification_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL:"replication_mtls_certificateVerification_crl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"replication_mtls_certificateVerification_crl_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"replication_mtls_certificateVerification_crl_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"replication_mtls_certificateVerification_crl_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"replication_mtls_certificateVerification_crl_gracePeriod",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP:"replication_mtls_certificateVerification_ocsp",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"replication_mtls_certificateVerification_ocsp_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"replication_mtls_certificateVerification_ocsp_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"replication_mtls_certificateVerification_ocsp_errorCacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"replication_mtls_certificateVerification_ocsp_failureMode",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_MAXTRANSACTIONOPENTIME:"storage_maxTransactionOpenTime",STORAGE_DEBUGLONGTRANSACTIONS:"storage_debugLongTransactions",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"},dU={settings_path:uU.SETTINGS_PATH_KEY,hdb_root_key:x.ROOTPATH,hdb_root:x.ROOTPATH,rootpath:x.ROOTPATH,server_port_key:x.OPERATIONSAPI_NETWORK_PORT,server_port:x.OPERATIONSAPI_NETWORK_PORT,cert_key:x.TLS_CERTIFICATE,certificate:x.TLS_CERTIFICATE,private_key_key:x.TLS_PRIVATEKEY,private_key:x.TLS_PRIVATEKEY,http_secure_enabled_key:x.OPERATIONSAPI_NETWORK_HTTPS,https_on:x.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:x.OPERATIONSAPI_NETWORK_CORS,cors_on:x.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:x.LOGGING_LEVEL,log_level:x.LOGGING_LEVEL,log_path_key:x.LOGGING_ROOT,log_path:x.LOGGING_ROOT,clustering_node_name_key:x.CLUSTERING_NODENAME,node_name:x.CLUSTERING_NODENAME,clustering_enabled_key:x.CLUSTERING_ENABLED,clustering:x.CLUSTERING_ENABLED,max_http_threads:x.THREADS_COUNT,max_hdb_processes:x.THREADS_COUNT,server_timeout_key:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:x.LOGGING_AUDITLOG,disable_transaction_log:x.LOGGING_AUDITLOG,operation_token_timeout_key:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:x.HTTP_PORT,custom_functions_port:x.HTTP_PORT,custom_functions_directory_key:x.COMPONENTSROOT,custom_functions_directory:x.COMPONENTSROOT,max_custom_function_processes:x.THREADS_COUNT,logging_console:x.LOGGING_CONSOLE,log_to_file:x.LOGGING_FILE,log_to_stdstreams:x.LOGGING_STDSTREAMS,local_studio_on:x.LOCALSTUDIO_ENABLED,clustering_port:x.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:x.CLUSTERING_USER,customfunctions_network_port:x.HTTP_PORT,customfunctions_tls_certificate:x.TLS_CERTIFICATE,customfunctions_network_cors:x.HTTP_CORS,customfunctions_network_corsaccesslist:x.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:x.HTTP_HEADERSTIMEOUT,customfunctions_network_https:x.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:x.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:x.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:x.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:x.HTTP_TIMEOUT,customfunctions_tls:x.TLS,http_threads:x.THREADS_COUNT,threads:x.THREADS_COUNT,threads_count:x.THREADS_COUNT,customfunctions_processes:x.THREADS_COUNT,customfunctions_root:x.COMPONENTSROOT,operationsapi_root:x.ROOTPATH};for(let e in x){let t=x[e];dU[t.toLowerCase()]=t}V5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},K5={csv_file_load:"csv_file_load",csv_data_load:V.CSV_DATA_LOAD,csv_url_load:V.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},tA={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"},Y5={VERSION_DEFAULT:"2.2.0"},W5={DEVELOPMENT:8192,DEFAULT:512},j5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},z5=Symbol("metadata"),rA="__clustering__",fU="__createdtime__",mU="__updatedtime__",J5={CREATED_TIME:fU,UPDATED_TIME:mU},Q5=[fU,mU],X5=15984864e5,g_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},nA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},Z5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},e8=["*","%"],t8="func_val",S_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Tm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},T_={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},sA={HTTP:"http"},r8="3.x.x",oi={SUCCESS:"success",FAILURE:"failure"},Ka={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var tl=M((UCe,EU)=>{"use strict";var pU=require("minimist");EU.exports=n8;function n8(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=hU(process.env),n=hU(pU(process.argv))):(r=process.env,n=pU(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(n8,"assignCMDENVVariables");function hU(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(hU,"objKeysToLowerCase")});var ai=M(ts=>{"use strict";global.Resource=ts.Resource=void 0;global.tables=ts.tables={};global.databases=ts.databases={};global.getUser=ts.getUser=void 0;global.authenticateUser=ts.authenticateUser=void 0;global.server=ts.server={};global.contentTypes=ts.contentTypes=null;global.threads=ts.threads=[];global.logger={};global.RequestTarget=ts.RequestTarget=void 0;global.operation=ts.operation=void 0;ts._assignPackageExport=(e,t)=>{global[e]=ts[e]=t}});var iA=M((FCe,_U)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n,basename:s}=require("node:path"),{existsSync:i,statSync:o,readFileSync:c,writeFileSync:l,unlinkSync:u}=require("node:fs"),{isMainThread:d}=require("node:worker_threads"),{spawnSync:f,spawn:m}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:p}=yt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,y=!1;if(y=i(n(p,E))){let w=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:p}).forEach(I=>{let H=0,X=0;try{w.add(I),H=o(n(p,I)).mtimeMs-5e3,X=o(n(p,E,I.replace(/.ts$/,".js"))).mtimeMs}catch{}H>X&&(S=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(p,E)}).forEach(I=>{if(!w.has(I.replace(/.js$/,".ts")))try{u(n(p,E,I))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let w=f("npx",["tsc"],{cwd:p});if(w.stdout?.length&&console.log(w.stdout.toString()),w.stderr?.length&&console.log(w.stderr.toString()),y){let I=n(t(),"harperdb-tsc.pid"),H=!1;if(i(I))try{process.kill(+c(I,"utf8"),0),H=!0}catch{}if(!H){console.log("Starting background TypeScript compilation...");let X=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});X.on("error",q=>{console.error("Error trying to compile TypeScript",q)}),X.pid&&l(I,String(X.pid),"utf-8"),X.unref()}}}}let _=_U.constructor,R=_._findPath;_._findPath=function(S,y,w){if(S.startsWith(".")&&!w&&y.length===1&&y[0].startsWith(p)&&!y[0].includes("node_modules")){let I=r(p,y[0]),H;I.startsWith(E)?H=n(p,r(E,I)):H=n(p,E,I),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let X=n(H,S),q=X+".js";if(i(q))return q;if(s(X).includes(".")&&i(X))return X}return R(S,y,w)}}});var ym={};ye(ym,{server:()=>Ue});var gU,Ue,Hr=se(()=>{gU=b(ai()),Ue={};(0,gU._assignPackageExport)("server",Ue)});var Jt=M((kCe,TU)=>{"use strict";var s8="__dbis__",i8="__txns__",o8="__environment_name__",a8="__dbi_defintion__",c8={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"},l8=["__createdtime__","__updatedtime__"],u8="\uFFFF",SU={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},d8=Object.values(SU);TU.exports={AUDIT_STORE_NAME:i8,INTERNAL_DBIS_NAME:s8,DBI_DEFINITION_NAME:a8,SEARCH_TYPES:c8,TIMESTAMP_NAMES:l8,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:o8,TRANSACTIONS_DBI_NAMES_ENUM:SU,TRANSACTIONS_DBIS:d8,OVERFLOW_MARKER:u8}});var Jr=M((HCe,OU)=>{"use strict";var yU=(G(),v(j)),RU=Jt(),bU={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},AU=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),IU={500:AU("There was an error processing your request."),400:"Invalid request"},f8=IU[bU.INTERNAL_SERVER_ERROR],m8={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},p8={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},h8={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},E8={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"value is required",SEARCH_VALUE_TOO_LARGE:"value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${RU.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${RU.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"},_8={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${yU.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 ${yU.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"},wU={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"},g8={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},S8={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},T8={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},y8={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},R8={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},NU={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},CU={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},b8={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"},A8={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},I8={...wU,...h8,...m8,...g8,...S8,...T8,...y8,...R8,..._8,...NU,...CU,...b8,...A8,...p8};OU.exports={CHECK_LOGS_WRAPPER:AU,HDB_ERROR_MSGS:I8,DEFAULT_ERROR_MSGS:IU,DEFAULT_ERROR_RESP:f8,HTTP_STATUS_CODES:bU,LMDB_ERRORS_ENUM:E8,AUTHENTICATION_ERROR_MSGS:wU,VALIDATION_ERROR_MSGS:NU,ITC_ERRORS:CU}});var ae=M(we=>{"use strict";var Ya=require("path"),MU=require("fs-extra"),vn=Q(),PU=require("fs-extra"),y_=require("os"),w8=require("net"),N8=require("recursive-iterator"),wr=(G(),v(j)),{PACKAGE_ROOT:C8}=yt(),LU=require("papaparse"),R_=require("moment"),{inspect:O8}=require("util"),DU=require("is-number"),P8=require("minimist"),L8=require("https"),D8=require("http"),v8=/^((\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)))$/,M8=require("util").promisify(setTimeout),U8="",x8=4,vU={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};we.isEmpty=rs;we.isEmptyOrZeroLength=qi;we.arrayHasEmptyValues=k8;we.arrayHasEmptyOrZeroLengthValues=H8;we.buildFolderPath=G8;we.isBoolean=UU;we.errorizeMessage=B8;we.stripFileExtension=$8;we.autoCast=V8;we.autoCastJSON=xU;we.autoCastJSONDeep=aA;we.removeDir=K8;we.compareVersions=Y8;we.isCompatibleDataVersion=W8;we.escapeRawValue=j8;we.unescapeValue=z8;we.stringifyProps=J8;we.timeoutPromise=X8;we.isClusterOperation=eZ;we.getClusterUser=rZ;we.checkGlobalSchemaTable=tZ;we.getHomeDir=FU;we.getPropsFilePath=Q8;we.promisifyPapaParse=nZ;we.removeBOM=kU;we.createEventPromise=sZ;we.checkSchemaTableExist=iZ;we.checkSchemaExists=HU;we.checkTableExists=GU;we.getStartOfTomorrowInSeconds=oZ;we.getLimitKey=aZ;we.isObject=q8;we.isNotEmptyAndHasValue=F8;we.autoCasterIsNumberCheck=BU;we.backtickASTSchemaItems=cZ;we.isPortTaken=Z8;we.createForkArgs=lZ;we.autoCastBoolean=uZ;we.autoCastBooleanStrict=dZ;we.asyncSetTimeout=M8;we.getTableHashAttribute=fZ;we.doesSchemaExist=mZ;we.doesTableExist=pZ;we.stringifyObj=hZ;we.ms_to_time=EZ;we.changeExtension=_Z;we.getEnvCliRootPath=cA;we.noBootFile=gZ;we.httpRequest=SZ;we.transformReq=TZ;we.convertToMS=yZ;we.PACKAGE_ROOT=C8;function B8(e){return e instanceof Error?e:new Error(e)}a(B8,"errorizeMessage");function rs(e){return e==null}a(rs,"isEmpty");function F8(e){return!rs(e)&&(e||e===0||e===""||UU(e))}a(F8,"isNotEmptyAndHasValue");function qi(e){return rs(e)||e.length===0||e.size===0}a(qi,"isEmptyOrZeroLength");function k8(e){if(rs(e))return!0;for(let t=0;t<e.length;t++)if(rs(e[t]))return!0;return!1}a(k8,"arrayHasEmptyValues");function H8(e){if(qi(e))return!0;for(let t=0;t<e.length;t++)if(qi(e[t]))return!0;return!1}a(H8,"arrayHasEmptyOrZeroLengthValues");function G8(...e){try{return e.join(Ya.sep)}catch{console.error(e)}}a(G8,"buildFolderPath");function UU(e){return rs(e)?!1:e===!0||e===!1}a(UU,"isBoolean");function q8(e){return rs(e)?!1:typeof e=="object"}a(q8,"isObject");function $8(e){return qi(e)?U8:e.slice(0,-x8)}a($8,"stripFileExtension");function V8(e){return rs(e)||e===""||typeof e!="string"?e:vU[e]!==void 0?vU[e]:BU(e)===!0?Number(e):v8.test(e)?new Date(e):e}a(V8,"autoCast");function xU(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(xU,"autoCastJSON");function aA(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=aA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=aA(r);n!==r&&(e[t]=n)}return e}else return xU(e)}a(aA,"autoCastJSONDeep");function BU(e){if(e.startsWith("0.")&&DU(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&DU(e))}a(BU,"autoCasterIsNumberCheck");async function K8(e){if(qi(e))throw new Error(`Directory path: ${e} does not exist`);try{await PU.emptyDir(e),await PU.remove(e)}catch(t){throw vn.error(`Error removing files in ${e} -- ${t}`),t}}a(K8,"removeDir");function Y8(e,t){if(qi(e)){vn.info("Invalid current version sent as parameter.");return}if(qi(t)){vn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(Y8,"compareVersions");function W8(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(W8,"isCompatibleDataVersion");function j8(e){if(rs(e))return e;let t=String(e);return t==="."?wr.UNICODE_PERIOD:t===".."?wr.UNICODE_PERIOD+wr.UNICODE_PERIOD:t.replace(wr.FORWARD_SLASH_REGEX,wr.UNICODE_FORWARD_SLASH)}a(j8,"escapeRawValue");function z8(e){if(rs(e))return e;let t=String(e);return t===wr.UNICODE_PERIOD?".":t===wr.UNICODE_PERIOD+wr.UNICODE_PERIOD?"..":String(e).replace(wr.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(z8,"unescapeValue");function J8(e,t){if(rs(e))return vn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+y_.EOL}!qi(n)&&n[0]===";"?r+=" "+n+s+y_.EOL:qi(n)||(r+=n+"="+s+y_.EOL)}catch{vn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(J8,"stringifyProps");function FU(){let e;try{e=y_.homedir()}catch{e=process.env.HOME}return e}a(FU,"getHomeDir");function Q8(){let e=Ya.join(FU(),wr.HDB_HOME_DIR_NAME,wr.BOOT_PROPS_FILE_NAME);return MU.existsSync(e)||(e=Ya.join(__dirname,"../","hdb_boot_properties.file")),e}a(Q8,"getPropsFilePath");function X8(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(X8,"timeoutPromise");async function Z8(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=w8.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Z8,"isPortTaken");function eZ(e){try{return wr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){vn.error(`Error checking operation against cluster ops ${t}`)}return!1}a(eZ,"isClusterOperation");function tZ(e,t){let r=(Oe(),v(ft)).getDatabases();if(!r[e])return b_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return b_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(tZ,"checkGlobalSchemaTable");function rZ(e,t){if(rs(t)){vn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(rs(e)||qi(e)){vn.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){vn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){vn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(rZ,"getClusterUser");function nZ(){LU.parsePromise=function(e,t,r){return new Promise(function(n,s){LU.parse(e,{header:!0,transformHeader:kU,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(nZ,"promisifyPapaParse");function kU(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(kU,"removeBOM");function sZ(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;vn.info(`Got cluster status event response: ${O8(s)}`);try{i.cancel()}catch{vn.error("Error trying to cancel timeout.")}n(s)})})}a(sZ,"createEventPromise");function iZ(e,t){let r=HU(e);if(r)return r;let n=GU(e,t);if(n)return n}a(iZ,"checkSchemaTableExist");function HU(e){let{getDatabases:t}=(Oe(),v(ft));if(!t()[e])return b_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(HU,"checkSchemaExists");function GU(e,t){let{getDatabases:r}=(Oe(),v(ft));if(!r()[e][t])return b_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(GU,"checkTableExists");function oZ(){let e=R_().utc().add(1,"d").startOf("d").unix(),t=R_().utc().unix();return e-t}a(oZ,"getStartOfTomorrowInSeconds");function aZ(){return R_().utc().format("DD-MM-YYYY")}a(aZ,"getLimitKey");function cZ(e){try{let t=new N8(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){vn.error("Got an error back ticking items."),vn.error(t)}}a(cZ,"backtickASTSchemaItems");function lZ(e){return[e]}a(lZ,"createForkArgs");function uZ(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(uZ,"autoCastBoolean");function dZ(e){if(typeof e=="string"){let t=e.toLowerCase();if(t==="true")return!0;if(t==="false")return!1}return e}a(dZ,"autoCastBooleanStrict");function fZ(e,t){let{getDatabases:r}=(Oe(),v(ft)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(fZ,"getTableHashAttribute");function mZ(e){let{getDatabases:t}=(Oe(),v(ft));return t()[e]!==void 0}a(mZ,"doesSchemaExist");function pZ(e,t){let{getDatabases:r}=(Oe(),v(ft));return r()[e]?.[t]!==void 0}a(pZ,"doesTableExist");function hZ(e){try{return JSON.stringify(e)}catch{return e}}a(hZ,"stringifyObj");function EZ(e){let t=R_.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(EZ,"ms_to_time");function _Z(e,t){let r=Ya.basename(e,Ya.extname(e));return Ya.join(Ya.dirname(e),r+t)}a(_Z,"changeExtension");function cA(){if(process.env[wr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[wr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=P8(process.argv);if(e[wr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[wr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(cA,"getEnvCliRootPath");var oA;function gZ(){if(oA)return oA;let e=cA();if(cA()&&MU.pathExistsSync(Ya.join(e,wr.HDB_CONFIG_FILE)))return oA=!0,!0}a(gZ,"noBootFile");function SZ(e,t){let r;return e.protocol==="http:"?r=D8:r=L8,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(SZ,"httpRequest");function TZ(e){if(!e.schema&&!e.database){e.schema=wr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(TZ,"transformReq");function yZ(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(yZ,"convertToMS");var b_=Jr()});var Rt=M((VCe,jU)=>{"use strict";var wm=(G(),v(j)),RZ=ae(),Mn=fe(),Nm=require("path"),bZ=require("minimist"),qU=require("fs-extra"),$U=require("lodash");Mn.initSync();var{CONFIG_PARAMS:Wa,DATABASES_PARAM_CONFIG:Rm,SYSTEM_SCHEMA_NAME:A_}=wm,bm,Am,Im;function VU(){if(bm!==void 0)return bm;if(Mn.getHdbBasePath()!==void 0)return bm=Mn.get(Wa.STORAGE_PATH)||Nm.join(Mn.getHdbBasePath(),wm.DATABASES_DIR_NAME),bm}a(VU,"getBaseSchemaPath");function KU(){if(Am!==void 0)return Am;if(Mn.getHdbBasePath()!==void 0)return Am=WU(A_),Am}a(KU,"getSystemSchemaPath");function YU(){if(Im!==void 0)return Im;if(Mn.getHdbBasePath()!==void 0)return Im=Mn.get(wm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Nm.join(Mn.getHdbBasePath(),wm.TRANSACTIONS_DIR_NAME),Im}a(YU,"getTransactionAuditStoreBasePath");function AZ(e,t){let r=Mn.get(Wa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Nm.join(YU(),e.toString())}a(AZ,"getTransactionAuditStorePath");function WU(e,t){e=e.toString(),t=t&&t.toString();let r=Mn.get(wm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Nm.join(VU(),e)}a(WU,"getSchemaPath");function IZ(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,bZ(process.argv));let n=r[Wa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!RZ.isObject(n))throw o;i=n}for(let o of i){let c=o[A_];if(!c)continue;let l=Mn.get(Wa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Rm.PATH];if(u)return $U.set(l,[A_,Rm.TABLES,t,Rm.PATH],u),Mn.setProperty(Wa.DATABASES,l),u;let d=c?.[Rm.PATH];if(d)return $U.set(l,[A_,Rm.PATH],d),Mn.setProperty(Wa.DATABASES,l),d}}let s=r[Wa.STORAGE_PATH.toUpperCase()];if(s){if(!qU.pathExistsSync(s))throw new Error(s+" does not exist");let i=Nm.join(s,e);return qU.mkdirsSync(i),Mn.setProperty(Wa.STORAGE_PATH,s),i}return KU()}a(IZ,"initSystemSchemaPaths");function wZ(){bm=void 0,Am=void 0,Im=void 0}a(wZ,"resetPaths");jU.exports={getBaseSchemaPath:VU,getSystemSchemaPath:KU,getTransactionAuditStorePath:AZ,getTransactionAuditStoreBasePath:YU,getSchemaPath:WU,initSystemSchemaPaths:IZ,resetPaths:wZ}});var Un=M((jCe,ZU)=>{"use strict";var NZ=Jr().LMDB_ERRORS_ENUM,YCe=require("lmdb"),CZ=Jt(),WCe=require("buffer").Buffer,{OVERFLOW_MARKER:zU,MAX_SEARCH_KEY_LENGTH:I_}=CZ,JU=["number","string","symbol","boolean","bigint"];function OZ(e){if(e=e?.primaryStore||e,!e)throw new Error(NZ.ENV_REQUIRED)}a(OZ,"validateEnv");function PZ(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(PZ,"stringifyData");function LZ(e){return e instanceof Date?e.valueOf():e}a(LZ,"convertKeyValueToWrite");function DZ(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(JU.includes(typeof e))return e.length>I_?[e.slice(0,I_)+zU]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(JU.includes(typeof i))i.length>I_?r.push(i.slice(0,I_)+zU):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(DZ,"getIndexedValues");var w_=0,QU=0;function XU(){QU=Date.now()-performance.now()}a(XU,"adjustStartTime");XU();var vZ=6e4;setInterval(XU,vZ).unref();function MZ(){let e=performance.now()+QU;return e>w_?(w_=e,e):(w_+=488e-6,w_)}a(MZ,"getNextMonotonicTime");ZU.exports={validateEnv:OZ,stringifyData:PZ,convertKeyValueToWrite:LZ,getNextMonotonicTime:MZ,getIndexedValues:DZ}});var Cm=M((JCe,ex)=>{"use strict";var UZ=(G(),v(j)).OPERATIONS_ENUM,lA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=UZ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};ex.exports=lA});var Ee=M((XCe,nx)=>{"use strict";var Bu=Jr(),xZ=(G(),v(j)),N_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,tx),this.statusCode=n||Bu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Bu.DEFAULT_ERROR_MSGS[n]?Bu.DEFAULT_ERROR_MSGS[n]:Bu.DEFAULT_ERROR_MSGS[Bu.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&&Q()[s](i)}},uA=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},dA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function tx(e,t,r,n=xZ.LOG_LEVELS.ERROR,s=null,i=!1){if(rx(e))return e;let o=new N_(e,t,r,n,s);return i&&delete o.stack,o}a(tx,"handleHDBError");function Fu(e){this.message=e}a(Fu,"Violation");Fu.prototype=Object.create(Error.prototype);Fu.prototype.constructor=Fu;Fu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var fA=class extends Fu{static{a(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function rx(e){return e.__proto__.constructor.name===N_.name}a(rx,"isHDBError");nx.exports={isHDBError:rx,handleHDBError:tx,ClientError:uA,ServerError:dA,AccessViolation:fA,Violation:Fu,hdbErrors:Bu}});var Om=M((tOe,ax)=>{"use strict";var eOe=Cm(),C_=(G(),v(j)),mA=ae(),sx=Q(),BZ=require("uuid"),{handleHDBError:O_,hdbErrors:FZ}=Ee(),{HDB_ERROR_MSGS:P_,HTTP_STATUS_CODES:L_}=FZ;ax.exports=ix;function ix(e,t,r){for(let s=0;s<t.length;s++)ox(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];kZ(i,r,e.operation)}}a(ix,"processRows");ix.validateAttribute=ox;function ox(e){if(Buffer.byteLength(String(e))>C_.INSERT_MAX_CHARACTER_SIZE)throw O_(new Error,P_.ATTR_NAME_LENGTH_ERR(e),L_.BAD_REQUEST,void 0,void 0,!0);if(mA.isEmptyOrZeroLength(e)||mA.isEmpty(e.trim()))throw O_(new Error,P_.ATTR_NAME_NULLISH_ERR,L_.BAD_REQUEST,void 0,void 0,!0)}a(ox,"validateAttribute");function kZ(e,t,r){if(!e.hasOwnProperty(t)||mA.isEmptyOrZeroLength(e[t])){if(r===C_.OPERATIONS_ENUM.INSERT||r===C_.OPERATIONS_ENUM.UPSERT){e[t]=BZ.v4();return}throw sx.error("Update transaction aborted due to record with no hash value:",e),O_(new Error,P_.RECORD_MISSING_HASH_ERR,L_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>C_.INSERT_MAX_CHARACTER_SIZE)throw sx.error(e),O_(new Error,P_.HASH_VAL_LENGTH_ERR,L_.BAD_REQUEST,void 0,void 0,!0)}a(kZ,"validateHash")});function mx(e){EA=e}function qZ(){GZ=setInterval(function(){for(let e of pA)if(e.timeout<=0){let t=e.getContext()?.url;dx.error(`Transaction was open too long and has been committed, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`,...e.startedFrom?[`was started from ${e.startedFrom.resourceName}.${e.startedFrom.method}`]:[],...hA?["starting stack trace",e.stackTraces]:[]),e.commit(),e.timeout=D_}else e.timeout-=D_},D_).unref()}var _A,ux,dx,U_,fx,cx,pA,HZ,hA,xo,Pm,lx,EA,D_,v_,Bo,M_,GZ,Lm=se(()=>{_A=b(Un()),ux=b(Ee()),dx=b(Q()),U_=b(fe());G();fx=b(ae()),cx=100,pA=new Set,HZ=(0,fx.convertToMS)(U_.get(x.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,hA=U_.get(x.STORAGE_DEBUGLONGTRANSACTIONS),xo={CLOSED:0,OPEN:1,LINGERING:2};a(mx,"replicationConfirmation");D_=U_.get(x.STORAGE_MAXTRANSACTIONOPENTIME)??3e4,v_=class extends Error{static{a(this,"StartedTransaction")}},Bo=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;timeout;validated=0;timestamp=0;overloadChecked;open=xo.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.timeout=D_,this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===xo.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,hA&&(this.stackTraces=[new v_]),this.readTxn.openTimer&&(this.readTxn.openTimer=0),pA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,hA&&this.stackTraces.push(new v_),this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(pA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Pm&&!this.overloadChecked&&performance.now()-lx>HZ)throw new ux.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===xo.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===xo.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,_A.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let _=this.writes[E];if(!_)continue;let R=_[p===0?"before":"beforeIntermediate"];if(R){let S=R();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?xo.LINGERING:xo.OPEN;let s,i=[],o=0;this.writes=this.writes.filter(f=>f);let c=a(f=>{f.commit(r,f.entry,n)},"doWrite"),l=a(()=>{let f=this.writes[o++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<cx>>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 Pm||(Pm=s,lx=performance.now(),Pm.then(()=>{Pm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];EA&&p&&i.push(EA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,this.timestamp=0,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+cx/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=xo.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},M_=class extends Bo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,_A.getNextMonotonicTime)())}getReadTxn(){}};a(qZ,"startMonitoringTxns");qZ()});var px,ns,gA,ku=se(()=>{px=require("events"),ns=class extends px.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext=null;queue;hasDataListeners;drainCloseListener;currentDrainResolver=null;[Symbol.asyncIterator](){let t=new gA;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)}},gA=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0,value:void 0}}}});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===xo.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 Bo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var hx,ja=se(()=>{hx=b(ai());Lm();a(bt,"transaction");(0,hx._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var TA={};ye(TA,{add:()=>x_,applyReverse:()=>Ex,getRecordAtTime:()=>SA,rebuildUpdateBefore:()=>B_});function x_(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 B_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,x_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Ex(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=$Z[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=_x}}function SA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=At(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":Ex(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===_x&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=At(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)o[f]&&(s[f]=d[f],o[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var $Z,_x,F_=se(()=>{$i();a(x_,"add");x_.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)};$Z={add:x_};a(B_,"rebuildUpdateBefore");a(Ex,"applyReverse");_x={};a(SA,"getRecordAtTime")});var ir=M(H_=>{var k_=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])k_.logsAtLevel(e)&&(H_[e]=k_[e]);H_.loggerWithTag=e=>k_.loggerWithTag(e,!0);H_.setLogLevel=k_.setLogLevel});var Ax={};ye(Ax,{parse:()=>bA,streamAsJSON:()=>vm,stringify:()=>rl});function vm(e){return new yA({value:e})}function gx(e){return console.error(e),JSON.stringify(Dm(e))}function Sx(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function rl(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Rx)return bx(e);if(t.resolution)return t.resolution.then(()=>rl(e));throw t}}function bx(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+=bx(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+rl(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function bA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),YZ.test(e)?VZ.parse(e):JSON.parse(e)):null}var Tx,RA,yx,VZ,KZ,Rx,Dm,yA,YZ,AA=se(()=>{Tx=require("stream"),RA=b(Q()),yx=b(require("json-bigint-fixes")),VZ=(0,yx.default)({useNativeBigInt:!0}),KZ=1e4,Rx={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw Rx};({errorToString:Dm}=RA);a(vm,"streamAsJSON");yA=class extends Tx.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(RA.warn("Error serializing in stream",c),o={done:!1,value:{error:Dm(c)}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:Dm(c)}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),gx)}catch(s){yield gx(s)}else yield rl(t)}else yield rl(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Sx(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Dm(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>KZ?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 Sx(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(Dm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(gx,"handleError");a(Sx,"when");a(rl,"stringify");a(bx,"jsStringify");YZ=/[[,:]\s*-?\d{16,}/;a(bA,"parse")});var Mx={};ye(Mx,{asyncSerialization:()=>OA,contentTypes:()=>CA,findBestSerializer:()=>q_,getDeserializer:()=>Go,hasAsyncSerialization:()=>PA,registerContentHandlers:()=>xm,serialize:()=>Bm,serializeMessage:()=>Ho,toCsvStream:()=>G_});function WZ(e){try{return e?.[0]===123?NA(e):e}catch{return e}}function xm(e){e.register(jZ,{serializers:[{regex:/^application\/json$/,serializer:vm},{regex:/^application\/cbor$/,serializer:a(function(t){return new nl.EncoderStream(Um).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?sl.Readable.from((0,Vi.encodeIter)(t,Um)):(0,Vi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),G_(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,nl.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function q_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=hn.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,o=m)}}if(!n){if(r)throw new Nx.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(hn.keys()).join(", "),406);n=hn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Bm(e,t,r){let n=wx&&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 Ds)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=q_(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}),wA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,ko.createBrotliCompress)({params:{[ko.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?ko.constants.BROTLI_MODE_TEXT:ko.constants.BROTLI_MODE_GENERIC,[ko.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>wx?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,ko.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Ho(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Fo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=q_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=Mm(e);return Fo?.length>0?(Fo.length===1?Fo[0]:Promise.all(Fo)).then(()=>Ho(e,t,!0)):n}finally{Fo=void 0}}function OA(e){if(Fo)Fo.push(e);else throw new Error("Unable to serialize asynchronously")}function PA(){return!!Fo}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 QZ(e){return JZ.includes(e)}function XZ(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Go(e="",t=!1){let r=XZ(e),n=r.type&&hn.get(r.type)?.deserialize||ZZ(r);return t?s=>zZ(s).then(n):n}function ZZ(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!QZ(e.parameters.charset)&&wA.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 NA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function e9(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 G_(e,t){let r=sl.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new Px.Transform(n,s);return r.pipe(i)}var Vi,nl,ko,Nx,sl,Cx,IA,Ox,wA,Px,Lx,Dx,Mm,NA,Um,hn,CA,Ix,vx,jZ,wx,Fo,JZ,qo=se(()=>{AA();Vi=require("msgpackr"),nl=require("cbor-x"),ko=require("zlib"),Nx=b(Ee()),sl=b(require("stream"));Hr();Cx=b(ai()),IA=b(fe());G();Ox=b(require("yaml")),wA=b(ir());ss();Px=require("json2csv"),Lx=b(require("fastify-plugin")),Dx=IA.default.get(x.SERIALIZATION_BIGINT)!==!1,Mm=Dx?rl:JSON.stringify,NA=Dx?bA:JSON.parse,Um={useRecords:!1,useToJSON:!0},hn=new Map,CA=hn;Ue.contentTypes=CA;(0,Cx._assignPackageExport)("contentTypes",CA);hn.set("application/json",{serializeStream:vm,serialize:Mm,deserialize(e){return NA(e)},q:.8});Ix=new nl.Encoder(Um);hn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new nl.EncoderStream(Um).end(e)},serialize:Ix.encode,deserialize:Ix.decode,q:1});hn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?sl.Readable.from((0,Vi.encodeIter)(e,Um)):(0,Vi.pack)(e)},serialize:Vi.pack,deserialize:Vi.unpack,q:.9});hn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),G_(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]),G_(e,e?.getColumns?.())},q:.1});hn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return sl.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});hn.set("text/yaml",{serialize(e){return Ox.stringify(e,{aliasDuplicateObjects:!1})},q:.7});hn.set("text/event-stream",{serializeStream:a(function(e){return sl.Readable.from(e9(e,this.serialize))},"serializeStream"),serialize:a(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
2
2
  `),e.data){let r=e.data;typeof r=="object"&&(r=Mm(r)),t+="data: "+r+`
3
3
  `}return e.id&&(t+="id: "+e.id+`
4
4
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -7,16 +7,16 @@
7
7
 
8
8
  `:`data: ${e}
9
9
 
10
- `},"serialize"),compressible:!1,q:.8});hn.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});vx={type:"application/json",serializeStream:vm,serialize:Mm,deserialize:WZ,q:.5};hn.set("*/*",vx);hn.set("",vx);a(WZ,"tryJSONParse");a(xm,"registerContentHandlers");jZ=(0,Lx.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=q_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});a(q_,"findBestSerializer");wx=IA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Bm,"serialize");a(ko,"serializeMessage");a(OA,"asyncSerialization");a(PA,"hasAsyncSerialization");a(zZ,"streamToBuffer");JZ=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(QZ,"isBufferEncoding");a(XZ,"parseContentType");a(Ho,"getDeserializer");a(ZZ,"deserializerUnknownType");a(e9,"transformIterable");a(G_,"toCsvStream")});var J_={};ye(J_,{Blob:()=>Ds,blobsWereEncoded:()=>ol,cleanupOrphans:()=>p9,databasePaths:()=>DA,decodeBlobsWithWrites:()=>z_,decodeFromDatabase:()=>$o,decodeWithBlobCallback:()=>Gm,deleteBlob:()=>Y_,deleteBlobsInObject:()=>Ja,deleteRootBlobPathsForDB:()=>UA,encodeBlobsAsBuffers:()=>d9,encodeBlobsWithFilePath:()=>j_,findBlobsInObject:()=>il,getFileId:()=>W_,getFilePathForBlob:()=>Vx,getRootBlobPathsForDB:()=>Vu,isSaving:()=>i9,saveBlob:()=>Hm,setDeletionDelay:()=>s9,startPreCommitBlobsForRecord:()=>xA});function qx(){}function Y_(e){let t=Vx(e);t&&setTimeout(()=>{(0,je.unlink)(t,r=>{r&&Ot.default.debug?.("Error trying to remove blob file",r)})},$x)}function s9(e){$x=e}function Hm(e,t=!1){let r=Gr.get(e);if(!r)r={storageIndex:0,fileId:null,store:xn},Gr.set(e,r);else{if(r.fileId)return r;r.store=xn}return r.deleteOnFailure=t,a9(r),r.source?LA(e,r.source,r):r.contentBuffer?o9(e,r):LA(e,za.Readable.from(e.stream()),r),r}function LA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,je.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;o?(m||f.write(r9),p=(0,K_.createDeflate)(),(0,za.pipeline)(t,p,f,E)):(m||f.write(t9),(0,za.pipeline)(t,f,E));function h(_){let R=BigInt(_),S=new Uint8Array(Nr),y=new DataView(S.buffer);return R|=BigInt(o?MA:Gx)<<48n,y.setBigInt64(0,R),S}a(h,"createHeader");function E(_){let R=f.fd;if(_){if(i.unlock(d,0),R&&((0,je.close)(R),f.fd=null),r.deleteOnFailure)(0,je.unlink)(n,S=>{S&&Ot.default.debug?.("Error while deleting aborted blob file",S)});else try{if((0,je.statSync)(n).size===0){let S=Buffer.from(_.toString());(0,je.writeFile)(n,Buffer.concat([h(BigInt(S.length)+0xff000000000000n),S]),y=>{y&&Ot.default.debug?.("Error write error message to blob file",y)})}}catch(S){Ot.default.debug?.("Error checking blob file after abort",S)}u(_)}else{if(!m){m=!0;let S=p?p.bytesWritten:f.bytesWritten-Nr;e.size=S,(0,je.write)(R,h(S),0,Nr,0,E);return}i.unlock(d,0),c?(0,je.fdatasync)(R,S=>{S&&u(S),l(),(0,je.close)(R),f.fd=null}):(l(),(0,je.close)(R),f.fd=null)}}a(E,"finished")}),e}function W_(e){return Gr.get(e)?.fileId}function i9(e){return Gr.get(e)?.saving}function Vx(e){let t=Gr.get(e);return t?.fileId&&$u(t)}function Vu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=DA.get(e);if(!t){if(!e.databaseName)return Ot.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,km.get)(x.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Yi.join)(n,e.databaseName)):t=[(0,Yi.join)((0,km.getHdbBasePath)(),"blobs",e.databaseName)],DA.set(e,t)}return t}async function UA(e){let t=Vu(e);t&&await Promise.all(t.map(r=>Kx(r)))}async function Kx(e){if((0,je.existsSync)(e)){for(let t of await(0,Bn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await Kx((0,Yi.join)(e,t.name));else try{await(0,Bn.unlink)((0,Yi.join)(e,t.name))}catch(r){Ot.default.warn?.("Error deleting file",r)}try{await(0,Bn.rmdir)(e)}catch(t){Ot.default.warn?.("Error deleting directory",t)}}}function $u({storageIndex:e,fileId:t,store:r}){let n=Vu(r);return(0,Yi.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function o9(e,t){let r=t.contentBuffer,n=r.length;if(!(n<Hx))return e.size=n,LA(e,za.Readable.from([r]),t)}function a9(e){let t=Vu(e.store),r=c9(),n=t?.length>1?l9(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=$u(e),o=(0,Yi.dirname)(i);(0,je.existsSync)(o)||(0,vA.ensureDirSync)(o),e.filePath=i}function c9(){let e=Fx.get(xn);if(!e){let t=0,r=Vu(xn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,je.existsSync)(n))for(let c of(0,je.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,Yi.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(xn.getUserSharedBuffer("blob-file-id",e.buffer)),Fx.set(xn,e)}return Number(Atomics.add(e,0,1n))}function l9(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(V_);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,u9(e)),e.frequencyTable[t%V_]}async function u9(e){if(!Bn.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o;try{o=await(0,Bn.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,vA.ensureDirSync)(s),o=await(0,Bn.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(V_),n=t.map(s=>1/s);for(let s=0;s<V_;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function j_(e,t,r){Hu=t,xn=r,ol=!1;try{return e()}finally{Hu=void 0,xn=void 0}}function d9(e){Qr=[];let t;try{t=e()}catch(n){throw Qr=void 0,n}let r=Qr.length<2?Qr[0]:Promise.all(Qr);return Qr=void 0,r?r.then(()=>e()):t}function z_(e,t,r){try{Qr=[],qo=r,xn=t,e()}catch(s){throw qo=void 0,Qr=void 0,s}qo=void 0;let n=Qr.length<2?Qr[0]:Promise.all(Qr);return Qr=void 0,n}function Gm(e,t,r){xn=r;try{return qo=t,e()}finally{qo=void 0}}function $o(e,t){return xn=t,e()}function Ja(e){il(e,t=>{Y_(t)})}function il(e,t){if(e instanceof Ds)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&il(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&il(e[r],t)}}function xA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof qu&&s.saveBeforeCommit){xn=t;let i=Hm(s,!0).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function m9(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function p9(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,o=Vu(r);if(o)for(let d of o)await c(d);return await l(),Ot.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,je.existsSync)(d))return;for(let f of await(0,Bn.readdir)(d,{withFileTypes:!0})){let m=(0,Yi.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Ot.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let p=(0,kx.getHeapStatistics)();p.used_heap_size>p.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Ot.default.error?.("Error searching path for blobs",d,f)}}a(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,km.get)(x.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Ot.default.warn?.("Checking for references to potential orphaned blobs in table",m);let p=e[m];for(let h of p.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{h.metadataFlags&Xr&&h.value&&u(h.value),d++%f===0?await(0,Gu.setTimeout)(1):await(0,Gu.setImmediate)()}catch(E){Ot.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",E)}}Ot.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 p=At(m),h=n.tableStores[p.tableId],E=h?.getEntry(p.recordId);(!E||E.version!==p.version||!E.value)&&u(p.getValue(h)),d++%f===0?await(0,Gu.setTimeout)(1):await(0,Gu.setImmediate)()}catch(p){Ot.default.error?.("Error searching audit log for references to potential orphaned blobs failed",p)}Ot.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,Bn.unlink)(m)}catch(p){Ot.default.warn?.("Error deleting file",p)}Ot.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}a(l,"removePathsThatAreNotReferenced");function u(d){il(d,f=>{if(f instanceof qu){let m=Gr.get(f);if(m.fileId!=null){let p=$u(m);i.has(p)&&i.delete(p)}}})}a(u,"checkObjectForReferences")}var Ki,Bn,je,K_,za,vA,km,Yi,Ot,kx,Gu,Hx,Nr,Gx,MA,Ux,t9,r9,xx,Gr,qo,Ds,Hu,Qr,xn,ol,Fm,$_,n9,Bx,qu,$x,DA,Fx,V_,f9,ss=se(()=>{Ki=require("msgpackr"),Bn=require("node:fs/promises"),je=require("node:fs"),K_=require("node:zlib"),za=require("node:stream"),vA=require("fs-extra"),km=b(fe());G();Yi=require("path"),Ot=b(ir());Go();$i();kx=require("node:v8"),Gu=require("node:timers/promises"),Hx=8192,Nr=8,Gx=0,MA=1,Ux=255,t9=new Uint8Array([0,Gx,255,255,255,255,255,255]),r9=new Uint8Array([0,MA,255,255,255,255,255,255]),xx=0xffffffffffff,Gr=new WeakMap,Ds=global.Blob||m9(),ol=!1,Fm=new Uint8Array(8),$_=new DataView(Fm.buffer),n9=6e4;a(qx,"InstanceOfBlobWithNoConstructor");qx.prototype=Ds.prototype;Bx=!1,qu=class e extends qx{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Gr.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(PA()&&OA(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Gr.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=$u(t),o,c=a(async()=>{let l,u=Nr;try{if(l=await(0,Bn.readFile)(i),l.length>=Nr){l.copy(Fm,0,0,Nr);let f=$_.getBigUint64(0);if(Number(f>>48n)===Ux)throw new Error("Error in blob: "+l.subarray(Nr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<xx&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(o)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(o=!0,h(c()))))return o=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return a(d,"checkCompletion"),l[1]===MA?new Promise((f,m)=>{(0,K_.deflate)(l.subarray(Nr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Nr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Gr.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=$u(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,_=a((R,S)=>{(0,je.open)(i,"r",(y,w)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Ot.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),_(R,S)},20).unref();S(y),p.#e?.forEach(I=>I(y))}else o=w,R(w)})},"openFile");return new Promise(_)},pull:a(E=>{let _=0,R=100;return new Promise(a(function S(y,w){function I(X){(0,je.close)(o),clearTimeout(d),u&&u.close(),w(X),p.#e?.forEach(q=>q(X))}a(I,"onError");let H=Buffer.allocUnsafe(262144);(0,je.read)(o,H,0,H.length,c,(X,q,k)=>{if(l+=q,X)return I(X);if(c===0){if(q<Nr){R-- >0&&f!==!1?(h(),Ot.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,w),20).unref()):(Ot.default.debug?.("File was empty, throwing error",i,R),I(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Fm,0,0,Nr);let z=$_.getBigUint64(0);if(Number(z>>48n)===Ux)return I(new Error("Error in blob: "+k.subarray(Nr,q)));if(_=Number(z&0xffffffffffffn),_<xx&&p.size!==_&&(p.size=_,p.#t))for(let Y of p.#t)Y(_);k=k.subarray(Nr,q),l-=Nr}else if(q===0){let z=Buffer.allocUnsafe(8);return(0,je.read)(o,z,0,Nr,0,Y=>{if(Y)return I(Y);if(Fm.set(z),_=Number($_.getBigUint64(0)&0xffffffffffffn),_>l){h()?u?d=setTimeout(()=>{I(new Error(`File read timed out reading from ${i}`))},n9).unref():(u=(0,je.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(y,w))}),S(y,w)):m?I(new Error("Blob is incomplete")):(m=!0,S(y,w));return}(0,je.close)(o),E.close(),y()})}else k=k.subarray(0,q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=q,S(y,w);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=_=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(z){return Ot.default.debug?.("Error enqueuing chunk",z),y()}l===_&&((0,je.close)(o),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,je.close)(o),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,_=t.fileId+":blob";f=!E.attemptLock(_,0,()=>{f=!1}),f||E.unlock(_,0)}return f}}slice(t,r,n){let s=Gr.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Gr.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Gr.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return Bx||(Bx=!0,Ot.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}get written(){return Gr.get(this)?.saving??Promise.resolve()}},$x=500;a(Y_,"deleteBlob");a(s9,"setDeletionDelay");global.createBlob=function(e,t){let r=new qu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Gr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof za.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=za.Readable.from(e);else throw new Error("Invalid source type");return r};a(Hm,"saveBlob");a(LA,"writeBlobWithStream");a(W_,"getFileId");a(i9,"isSaving");a(Vx,"getFilePathForBlob");DA=new Map;a(Vu,"getRootBlobPathsForDB");a(UA,"deleteRootBlobPathsForDB");a(Kx,"rimrafSteadily");a($u,"getFilePath");a(o9,"writeBlobWithBuffer");a(a9,"generateFilePath");Fx=new Map;a(c9,"getNextFileId");V_=128;a(l9,"getNextStorageIndex");a(u9,"createFrequencyTableForStoragePaths");a(j_,"encodeBlobsWithFilePath");a(d9,"encodeBlobsAsBuffers");a(z_,"decodeBlobsWithWrites");a(Gm,"decodeWithBlobCallback");a($o,"decodeFromDatabase");a(Ja,"deleteBlobsInObject");a(il,"findBlobsInObject");a(xA,"startPreCommitBlobsForRecord");f9=new Ki.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Ki.addExtension)({Class:Ds,type:11,unpack:a(function(e){let t=f9.unpack(e),r=new qu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Gr.set(r,{storageIndex:t[1],fileId:t[2],store:xn}),qo)return qo(r)??r;if(!xn)throw new Error("No store specified, cannot load blob from storage")}else Gr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=Gr.get(e);if(Hu!==void 0&&(ol=!0,t?.recordId!==void 0&&t.recordId!==Hu))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<Hx)return r.size=t.contentBuffer.length,(0,Ki.pack)([r,t.contentBuffer])}if(Hu!==void 0){if(t=Hm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Hu,(0,Ki.pack)([r,t.storageIndex,t.fileId])}if(t){if(qo)return qo(e),(0,Ki.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,je.readFileSync)($u(t));if(n.length>=Nr&&(n.copy(Fm,0,0,Nr),Number($_.getBigUint64(0)&0xffffffffffffn)===n.length-Nr))return Buffer.concat([(0,Ki.pack)([r]),n]);if(Qr)Qr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Qr)return Qr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Ki.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(m9,"polyfillBlob");a(p9,"cleanupOrphans")});var Jx={};ye(Jx,{onStorageReclamation:()=>qm,runReclamationHandlers:()=>HA,setAvailableSpaceRatioGetter:()=>E9});function qm(e,t,r){(r||(0,X_.getWorkerIndex)()===(0,X_.getWorkerCount)()-1)&&(Q_.has(e)||Q_.set(e,[]),Q_.get(e).push({priority:0,handler:t}),kA||(kA=setTimeout(HA,Wx).unref()))}async function HA(){for(let[e,t]of Q_)try{let r=await zx(e),n=h9/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(FA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){FA.default.error?.("Error running storage reclamation handlers",r)}kA=setTimeout(HA,Wx).unref()}function E9(e){zx=e??jx}var BA,X_,FA,Z_,Yx,Q_,h9,Wx,kA,jx,zx,eg=se(()=>{BA=require("node:fs/promises"),X_=b(st()),FA=b(ir());G();Z_=b(fe()),Yx=b(ae());Z_.default.initSync();Q_=new Map,h9=Z_.default.get(x.STORAGE_RECLAMATION_THRESHOLD)??.4,Wx=(0,Yx.convertToMS)(Z_.default.get(x.STORAGE_RECLAMATION_INTERVAL))||36e5;a(qm,"onStorageReclamation");jx=a(async e=>{if(BA.statfs){let t=await(0,BA.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"),zx=jx;a(HA,"runReclamationHandlers");a(E9,"setAvailableSpaceRatioGetter")});var l0={};ye(l0,{ACTION_32_BIT:()=>ig,ACTION_64_BIT:()=>T9,AUDIT_STORE_OPTIONS:()=>Km,Decoder:()=>cl,HAS_BLOBS:()=>Xr,HAS_CURRENT_RESIDENCY_ID:()=>ll,HAS_EXPIRATION_EXTENDED_TYPE:()=>jm,HAS_ORIGINATING_OPERATION:()=>Wm,HAS_PREVIOUS_RESIDENCY_ID:()=>ul,REMOTE_SEQUENCE_UPDATE:()=>og,createAuditEntry:()=>dl,getLastRemoved:()=>g9,openAuditStore:()=>ng,readAuditEntry:()=>At,removeAuditEntry:()=>sg,setAuditRetention:()=>S9,transactionKeyEncoder:()=>i0});function ng(e){let t=e.auditStore=e.openDB(GA.AUDIT_STORE_NAME,{create:!1,...Km});t||(t=e.auditStore=e.openDB(GA.AUDIT_STORE_NAME,Km),Xx(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=$A;qm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-qA/(1+i*i)})){try{m=sg(t,h,E)}catch(_){Ku.warn("Error removing audit entry",_)}if(p=h,await new Promise(setImmediate),++f>=_9){o=10;break}}await m}finally{f===0?o=Math.min(o<<1,qA/10):(Xx(t,p),o>100&&(o=o>>1)),d(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Vm.getWorkerIndex)()===(0,Vm.getWorkerCount)()-1&&c(),(0,Vm.getWorkerIndex)()===0&&!Qx)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(Qx=!0,Ku.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 sg(e,t,r){let n=y9(r),s;if(n&Xr){s=At(r);let i=e.tableStores[s.tableId];if(i){let o=s.type==="message"?null:i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&$o(()=>Ja(s.getValue(i)),i.rootStore)}}if((n&15)===VA){s=s||At(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function Xx(e,t){KA[0]=t,e.put(Symbol.for("last-removed"),o0)}function g9(e){let t=e.get(Symbol.for("last-removed"));if(t)return o0.set(t),KA[0]}function S9(e,t=$A){qA=e,$A=t}function dl(e,t,r,n,s,i,o,c,l,u,d,f,m){let p=a0[o];if(!p)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?Qa.setFloat64(0,n):vs.set(YA),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),_(r),Qa.setFloat64(h,e),h+=8,l&ll&&R(u),l&ul&&R(d),l&jm&&(Qa.setFloat64(h,f),h+=8),l&Wm&&R(c0[m]),i?_(i):vs[h++]=0,l?Qa.setUint32(n?8:0,p|l|3221225472):vs[n?8:0]=p;let E=vs.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function _(S){let y=h;h+=1,h=(0,al.writeKey)(S,vs,h);let w=h-y-1;w>127?w>16383?(Ku.error("Key or username was too large for audit entry",S),h=y+1,vs[y]=0):(vs.copyWithin(y+2,y+1,h),Qa.setUint16(y,w|32768),h++):vs[y]=w}function R(S){S<128?vs[h++]=S:S<16384?(Qa.setUint16(h,S|32768),h+=2):S<1056964608?(Qa.setUint32(h,S|3221225472),h+=4):(vs[h]=255,Qa.setUint32(h+1,S),h+=5)}}function y9(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 cl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function At(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new cl(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&ll&&(m=n.readInt()),i&ul&&(p=n.readInt()),i&jm&&(h=n.readFloat64()),i&Wm){let y=n.readInt();E=c0[y]}l=n.readInt();let _=n.position,R=n.position+=l,S;return{type:a0[i&7],tableId:c,nodeId:o,get recordId(){return(0,al.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>_?(0,al.readKey)(e,_,R):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(y,w,I){if(i&tg||i&$m&&!w)return S||(S=$o(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&$m&&I)return SA(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(tg|$m)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Ku.error("Reading audit entry error",n,e),{}}}var al,rg,GA,Vm,s0,Ku,vs,Qa,i0,Km,qA,_9,KA,o0,$A,Qx,tg,$m,Zx,VA,e0,t0,r0,n0,ig,T9,og,ll,ul,Wm,jm,Xr,a0,c0,cl,$i=se(()=>{al=require("ordered-binary"),rg=b(fe()),GA=b(Jt());G();Vm=b(st()),s0=b(ae());fl();Ku=b(Q());F_();ss();eg();(0,rg.initSync)();vs=Buffer.alloc(2816),Qa=new DataView(vs.buffer,vs.byteOffset,2816),i0={writeKey(e,t,r){return e===Ym?(t.set(Ym,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,al.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,al.readKey)(e,t,r)}},Km={encoding:"binary",keyEncoder:i0},qA=(0,s0.convertToMS)((0,rg.get)(x.LOGGING_AUDITRETENTION))||86400*3,_9=1e3,KA=new Float64Array(1),o0=new Uint8Array(KA.buffer),$A=1e4,Qx=!1;a(ng,"openAuditStore");a(sg,"removeAuditEntry");a(Xx,"updateLastRemoved");a(g9,"getLastRemoved");a(S9,"setAuditRetention");tg=16,$m=32,Zx=1,VA=2,e0=3,t0=4,r0=5,n0=6,ig=14,T9=15,og=11,ll=512,ul=1024,Wm=2048,jm=4096,Xr=8192,a0={put:Zx|tg,[Zx]:"put",delete:VA,[VA]:"delete",message:e0|tg,[e0]:"message",invalidate:t0|$m,[t0]:"invalidate",patch:r0|$m,[r0]:"patch",relocate:n0,[n0]:"relocate"},c0={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(dl,"createAuditEntry");a(y9,"readAction");a(At,"readAuditEntry");cl=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function ag(){return WA||(WA=ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),WA}function b9(e){return e=e.replace(R9,t=>{let[r,n,s,i]=t.split(".").map(o=>parseInt(o));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function A9(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 zA(e){let t=u0.default.createHash("shake128",{outputLength:4}),r;return(0,d0.isIPv6)(e)?r=b9(e):r=e.toLowerCase(),A9(Uint8Array.from(t.update(r).digest()))}var u0,d0,jA,WA,R9,JA=se(()=>{Oe();u0=b(require("crypto")),d0=require("node:net"),jA=new Map;a(ag,"getAnalyticsHostnameTable");R9=/(\d{1,3}\.){3}\d{1,3}$/;a(b9,"normalizeIPv6");a(A9,"nodeHashToNumber");a(zA,"stableNodeId")});var Vo,QA=se(()=>{Vo={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 _0={};ye(_0,{captureProfile:()=>ZA,userCodeFolders:()=>cg});async function ZA(e){let r=E0/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=XA.time.stop(!0),d=u.stringTable.strings;for(let f of u.function)s.set(f.id,d[f.filename]);for(let f of u.location)n.set(f.id,f.line[0]);for(let f of u.sample)l(f);Ye(c*r,"cpu-usage","harper"),Ye(o*r,"cpu-usage","user");for(let[f,m]of i)if(m>100){let p=n.get(f),h=s.get(p.functionId)+":"+p.line;Ye(m*r,"cpu-usage",h)}}catch(u){h0.error?.("analytics profiler error:",u)}finally{e&&setTimeout(()=>{let u=((0,zm.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;ZA(u)},e).unref()}function l(u){let d=!1;for(let f of u.locationId){let m=s.get(n.get(f).functionId);if(cg.some(p=>m.startsWith(p))){let p=u.value[0];o+=p,d||i.set(f,(i.get(f)??0)+p);return}if(m.startsWith(m0.PACKAGE_ROOT)){let p=u.value[0];c+=p,d||(i.set(f,(i.get(f)??0)+p),d=!0)}}}a(l,"getUserHitCount")}var zm,m0,p0,XA,h0,f0,cg,E0,g0=se(()=>{is();zm=b(fe());G();m0=b(yt()),p0=require("node:fs"),XA=require("@datadog/pprof"),h0=b(Q()),f0=(0,zm.getHdbBasePath)(),cg=f0?[f0]:[];process.env.RUN_HDB_APP&&cg.push((0,p0.realpathSync)(process.env.RUN_HDB_APP));E0=5e4;(async()=>{if(cg.length===0)return;XA.time.start({intervalMicros:E0});let e=((0,zm.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{ZA(e)},e).unref()})();a(ZA,"captureProfile")});var dg={};ye(dg,{addAnalyticsListener:()=>Zm,analyticsDelay:()=>nI,calculateCPUUtilization:()=>x0,diffResourceUsage:()=>B0,onAnalyticsAggregate:()=>oI,recordAction:()=>Ye,recordActionBinary:()=>en,recordHostname:()=>sI,setAnalyticsEnabled:()=>N9});function N9(e){L0=e,clearTimeout(Qm),Qm=null}function C9(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 O9(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},ug.set(e,o)}function Ye(e,t,r,n,s){if(!L0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=ug.get(i);o?C9(e,o):O9(i,e,t,r,n,s),Qm||P9()}function en(e,t,r,n,s){Ye(!!e,t,r,n,s)}function Zm(e){v0.push(e)}function P9(){eI||=performance.now(),Qm=setTimeout(async()=>{Qm=null;let e=performance.now()-eI;eI=0;let t=[],r={time:Date.now(),period:e,threadId:ml.threadId,metrics:t};for(let[s,i]of ug){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let f of U0){let m=Math.floor(c*f),p=o[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await F0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:ml.threadId,byThread:!0,...n});for(let s of v0)s(t);ug=new Map,ml.parentPort?ml.parentPort.postMessage({type:D0,report:r}):G0({report:r})},nI).unref()}async function sI(){let e=Ue.hostname;Zr.trace?.("recordHostname server.hostname:",e);let t=zA(e);Zr.trace?.("recordHostname nodeId:",t);let r=ag();if(!await r.get(t)){let s={id:t,hostname:e};Zr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Yu(e,t){let r=Ue.hostname,n=jA.get(r);n?Zr.trace?.("storeMetric cached nodeId:",n):(n=zA(r),Zr.trace?.("storeMetric new nodeId:",n),jA.set(r,n));let s={id:[(0,rI.getNextMonotonicTime)(),n],...t};Zr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function x0(e,t){let r=e.userCPUTime+e.systemCPUTime;return Zr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function B0(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 L9(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:Vo.TABLE_SIZE,database:t,table:s,size:c};Zr.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),Yu(e,l),n+=c}return n}function S0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=P0.statSync(s.primaryStore.env.path).size,c=L9(e,r,n),l=o-c,u={metric:Vo.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};Yu(e,u),Zr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Zr.warn?.("Error getting DB size metrics",s)}}function T0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={metric:Vo.STORAGE_VOLUME,database:r,...i};Yu(e,o),Zr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Zr.warn?.("Error getting DB volume metrics",s)}}async function D9(e,t=6e4){let r=iI(),n=k0(),s=new Promise(y=>{let w=performance.now();setImmediate(()=>{let I=performance.now();I-w>5e3&&Zr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(I-w)+"ms"),w=performance.now()}),n.primaryStore.prefetch([1],()=>{let I=performance.now();I-w>5e3&&Zr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(I-w)+"ms"),y(I-w)})}),i;for(let y of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(y.value?.time){i=y.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:y,value:w}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!w)continue;if(o){if(y>o+t)break}else o=y;d=y;let{metrics:I,threadId:H}=w;for(let X of I||[]){let{path:q,method:k,type:z,metric:Y,count:ce,total:de,distribution:te,threads:Se,...Ne}=X;ce||(ce=1);let Ke=Y+(q?"-"+q:"");k!==void 0&&(Ke+="-"+k),z!==void 0&&(Ke+="-"+z);let $e=c.get(Ke);if($e){if($e.threads){let nr=$e.threads[H];if(nr)$e=nr;else{$e.threads[H]={...Ne};continue}}$e.count||($e.count=1);let Ir=$e.count;for(let nr in Ne){let zr=Ne[nr];typeof zr=="number"&&($e[nr]=($e[nr]*Ir+zr*ce)/(Ir+ce))}$e.count+=ce,de>=0&&($e.total+=de,$e.ratio=$e.total/$e.count)}else $e={period:t,...X},delete $e.distribution,c.set(Ke,$e),$e.byThread&&($e.threads=[],$e.threads[H]={...Ne},u.push($e));if(te){te=te.map(nr=>typeof nr=="number"?{value:nr,count:1}:nr);let Ir=l.get(Ke);Ir?Ir.push(...te):l.set(Ke,te)}}await F0()}for(let y of u){let{path:w,method:I,type:H,metric:X,count:q,total:k,distribution:z,threads:Y,...ce}=y;Y=Y.filter(de=>de);for(let de in ce){if(typeof y[de]!="number")continue;let te=0;for(let Se of Y){let Ne=Se[de];typeof Ne=="number"&&(te+=Ne)}y[de]=te}y.count=Y.length,delete y.threads,delete y.byThread}for(let[y,w]of l){let I=c.get(y);w.sort((nr,zr)=>nr.value>zr.value?1:-1);let H=I.count-1,X=[],q=0,k=0,z;for(let nr of U0){let zr=H*nr;for(;q<zr;)z=w[k++],q+=z.count,k===1&&q--;let xr=w[k>1?k-2:0];z||(z=w[0]),X.push(z.value-(z.value-xr.value)*(q-zr)/z.count)}let[Y,ce,de,te,Se,Ne,Ke,$e,Ir]=X;Object.assign(I,{p1:Y,p10:ce,p25:de,median:te,p75:Se,p90:Ne,p95:Ke,p99:$e,p999:Ir})}let f;for(let[,y]of c)y.time=d,Yu(n,y),f=!0;if(f)for(let y of M0)y(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let y={metric:Vo.MAIN_THREAD_UTILIZATION,idle:p-y0,active:h-R0,taskQueueLatency:await s,time:m,...process.memoryUsage()};Yu(n,y)}y0=p,R0=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Zr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let _=B0(lg,E);Zr.trace?.(`diffed resourceUsage: ${JSON.stringify(_)}`),_.time=m,_.period=lg.time?m-lg.time:t,_.cpuUtilization=x0(_,_.period);let R={metric:Vo.RESOURCE_USAGE,..._};Yu(n,R),lg=E;let S=lt();S0(n,S),S0(n,{system:S.system}),T0(n,S),T0(n,{system:S.system})}async function b0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function iI(){return A0||(A0=ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function k0(){return I0||(I0=ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function U9(){H0=!0;let e=(0,Xm.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await D9(nI,e),await b0(iI(),v9),await b0(k0(),M9)},Math.min(e/2,2147483647)).unref()}function G0(e,t){let r=e.report;r.threadId=t?.threadId||ml.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(w0+=n.mean*n.count);r.totalBytesProcessed=w0,t&&(r.metrics.push({metric:Vo.UTILIZATION,...t.performance.eventLoopUtilization(N0.get(t))}),N0.set(t,t.performance.eventLoopUtilization())),r.id=(0,rI.getNextMonotonicTime)(),iI().primaryStore.put(r.id,r),H0||U9(),x9&&(q0=F9(r))}async function F9(e){if(await q0,!Xa){let r=(0,Jm.dirname)(I9());try{Xa=await(0,tI.open)((0,Jm.join)(r,"analytics.log"),"r+")}catch{Xa=await(0,tI.open)((0,Jm.join)(r,"analytics.log"),"w+")}}let t=(await Xa.stat()).size;if(t>B9){let r=Buffer.alloc(t);await Xa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Xa.write(r,{position:0}),await Xa.truncate(r.length),t=r.length}await Xa.write(JSON.stringify(e)+`
11
- `,t)}function oI(e){e&&M0.push(e)}var ml,C0,O0,Jm,tI,rI,Xm,P0,I9,w9,Zr,ug,L0,Qm,eI,nI,D0,v0,M0,U0,y0,R0,lg,F0,v9,M9,A0,I0,H0,w0,N0,x9,q0,Xa,B9,is=se(()=>{ml=require("worker_threads"),C0=b(st());Oe();O0=b(Q()),Jm=require("path"),tI=require("fs/promises"),rI=b(Un()),Xm=b(fe());G();Hr();P0=b(require("node:fs"));JA();QA();({getLogFilePath:I9,forComponent:w9}=O0.default);setTimeout(()=>{Promise.resolve().then(()=>g0())},1e3);Zr=w9("analytics").conditional;(0,Xm.initSync)();ug=new Map,L0=(0,Xm.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;a(N9,"setAnalyticsEnabled");a(C9,"recordExistingAction");a(O9,"recordNewAction");a(Ye,"recordAction");Ue.recordAnalytics=Ye;a(en,"recordActionBinary");eI=0,nI=1e3,D0="analytics-report",v0=[],M0=[];a(Zm,"addAnalyticsListener");U0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(P9,"sendAnalytics");a(sI,"recordHostname");a(Yu,"storeMetric");a(x0,"calculateCPUUtilization");a(B0,"diffResourceUsage");a(L9,"storeTableSizeMetrics");a(S0,"storeDBSizeMetrics");a(T0,"storeVolumeMetrics");a(D9,"aggregation");y0=0,R0=0,lg={userCPUTime:0,systemCPUTime:0},F0=a(()=>new Promise(setImmediate),"rest");a(b0,"cleanup");v9=36e5,M9=31536e6;a(iI,"getRawAnalyticsTable");a(k0,"getAnalyticsTable");(0,C0.setChildListenerByType)(D0,G0);a(U9,"startScheduledTasks");w0=0,N0=new Map,x9=!1;a(G0,"recordAnalytics");B9=1e6;a(F9,"logAnalytics");a(oI,"onAnalyticsAggregate")});var W0={};ye(W0,{ENTRY:()=>H9,HAS_EXPIRATION:()=>hg,HAS_RESIDENCY_ID:()=>dI,HAS_STRUCTURE_UPDATE:()=>Eg,LAST_TIMESTAMP_PLACEHOLDER:()=>Ym,LOCAL_TIMESTAMP:()=>k9,METADATA:()=>ju,NEW_TIMESTAMP_PLACEHOLDER:()=>V0,NO_TIMESTAMP:()=>mg,PENDING_LOCAL_TIME:()=>fI,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>YA,RecordEncoder:()=>uI,TIMESTAMP_ASSIGN_LAST:()=>q9,TIMESTAMP_ASSIGN_NEW:()=>K0,TIMESTAMP_ASSIGN_PREVIOUS:()=>Y0,TIMESTAMP_PLACEHOLDER:()=>fg,TIMESTAMP_RECORD_PREVIOUS:()=>aI,entryMap:()=>Za,handleLocalTimeForGets:()=>_g,lastMetadata:()=>ut,recordUpdater:()=>mI,removeEntry:()=>El});function K9(){return tp[0]=tp[0]^64,G9.getFloat64(0)}function _g(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++,ut=null;let l=r.call(this,o,c);return l&&(ut&&(l.metadataFlags=ut[ju],l.localTime=ut.localTime,l.residencyId=ut.residencyId,l.size=ut.size,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l.value&&Za.set(l.value,l),l.key=o),l};let n=e.get;e.get=function(o,c){ut=null;let l=n.call(this,o,c);return ut&&l&&(Za.set(l,ut),ut=null),l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>(ut&&(l.metadataFlags=ut[ju],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 o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,hl.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<hl.length;u++){let d=hl[u].deref();(!d||d.isDone||d.isCommitted)&&hl.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function mI(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",f,m){l==null?pl=mg:f?pl=i?.localTime?aI|Y0:mg:pl=l?i?.localTime?aI|16384:K0|16384:mg;let p=u?.expiresAt;if(p>=0&&(c|=hg),ep=c,cI=p,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:pl>0},E,_=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(lI=S,ep|=dI,_|=ll),R!==S&&(_|=ul,R||(R=0)),c&hg&&(_|=jm),u?.originatingOperation&&(_|=Wm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&Xr&&(!i.localTime||!r.getBinaryFast(i.localTime))&&Ja(i.value);let y;if(s!==void 0&&(y=j_(()=>e.put(n,s,h),n,e.rootStore),ol&&(_|=Xr)),l){let w=u?.user?.username;if(m&&(j_(()=>e.encoder.encode(m),n,e.rootStore),ol&&(_|=Xr)),e.encoder.hasStructureUpdate&&(_|=Eg,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,H=r.get(I);if(H){let X=At(H).previousLocalTime;return y=r.put(I,dl(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,w,d,Wu,_,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?V0:Ym,dl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,w,d,Wu,_,S,R,p,u?.originatingOperation),{instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&$9.has(d)&&Ye(Wu?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function El(e,t,r){if(t)return t.value&&t.metadataFlags&Xr&&!e.auditStore?.getBinaryFast(t.localTime)&&Ja(t.value),e.remove(t.key,r)}var $0,pg,fg,Ym,YA,V0,k9,ju,H9,tp,G9,mg,K0,q9,Y0,aI,hg,dI,fI,Eg,$9,Za,V9,Wu,pl,ep,cI,lI,ut,uI,hl,fl=se(()=>{$0=require("msgpackr");$i();pg=b(Q());ss();ss();is();fg=new Uint8Array([1,1,1,1,4,64,0,0]),Ym=new Uint8Array([1,1,1,1,1,0,0,0]),YA=new Uint8Array([1,1,1,1,3,64,0,0]),V0=new Uint8Array([1,1,1,1,0,64,0,0]),k9=Symbol("local-timestamp"),ju=Symbol("metadata"),H9=Symbol("entry"),tp=new Uint8Array(8),G9=new DataView(tp.buffer,0,8),mg=0,K0=0,q9=1,Y0=3,aI=4,hg=16,dI=32,fI=1,Eg=256,$9=new Set(["put","patch","delete","message","publish"]),Za=new WeakMap,pl=0,ep=-1,cI=-1,lI=0,ut=null,uI=class extends $0.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{a(this,"RecordObject")}getUpdatedTime(){return Za.get(this)?.version}getExpiresAt(){return Za.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,o){if(pl||ep>=0){let c=0,l=pl;l&&(c+=8,pl=0);let u=ep,d=cI,f=lI;u>=0&&(c+=4,ep=-1,d>=0&&(c+=8,cI=-1),f&&(c+=4,lI=0));let m=V9=n.call(this,i,o|2048|c);Wu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(fg[4]=l,fg[5]=l>>8,m.set(fg,p),p+=8),ol&&(u|=Xr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|ig<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Wu=n.call(this,i,o),Wu};let s=this.saveStructures;this.saveStructures=function(i,o){let c=s.call(this,i,o);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],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(tp,0,c),c+=8;else for(let m=0;m<8;m++)tp[m]=t[c++];l=K9(),i=t[c]}let u,d;i<32&&(i===ig?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&hg&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&dI&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=$o(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ut={localTime:l,[ju]:o,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:$o(()=>super.decode(t,r),this.rootStore)}catch(c){return pg.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(K9,"getTimestamp");a(_g,"handleLocalTimeForGets");hl=[];setInterval(()=>{for(let e=0;e<hl.length;e++){let t=hl[e].deref();!t||t.isDone||t.isCommitted?hl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(pg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):pg.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(mI,"recordUpdater");a(El,"removeEntry")});function EI(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?o(f,m):f}function u(f){return f.conditions?EI(f.conditions,f.operator,r,n,s,i,o,c):Xu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}a(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,p);return S?(w,I)=>y.some(H=>H(w,I)):(w,I)=>y.every(H=>H(w,I))}let _=(h.attribute||h[0])===r.primaryKey,R=np(h,r,i,c,_,p);return m&&E<f.length-1&&p&&(p=e7(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}a(d,"mapConditionsToFilters")}function Xu(e,t,r,n,s,i,o){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new tn.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],w=ji(n.attributes,y);if(w.relationship){if(c.length<2)throw new tn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=w.definition?.tableClass||w.elements?.definition?.tableClass,H=new Map,X=Xu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,H);if(w.relationship.to){i[c[0]]=H;let q=!!ji(I.attributes,w.relationship.to)?.elements;X=J9(X,w,I.primaryStore,q,H)}if(w.relationship.from){let q=a(k=>(k?.key!==void 0&&(k=k.key),Xu({attribute:w.relationship.from,value:k},t,r,n,s,H)),"searchEntry");w.elements?(i[c[0]]=H,X=Q9(X,w,I.primaryStore,H,q)):X=X.flatMap(q)}return X}else if(c.length===1)c=c[0];else throw new tn.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let _;switch(_I[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=Wi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,_=!0;break;default:throw new tn.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>Ms.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Ms.MAX_SEARCH_KEY_LENGTH)+Ms.OVERFLOW_MARKER,E=!1,R=np(e,n,null,i,d)),typeof p=="string"&&p.length>Ms.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Ms.MAX_SEARCH_KEY_LENGTH)+Ms.OVERFLOW_MARKER,h=!0,R=R??np(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||_||l===null&&!f.indexNulls){if(s===!1&&!f)throw new tn.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new tn.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 tn.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new tn.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??np(e,n,null,i,d),!R)throw new tn.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(S).map(R?function({key:w,value:I}){return this?.isSync?I&&R(I)?w:ec.SKIP:new Promise((H,X)=>setImmediate(()=>{try{H(I&&R(I)?w:ec.SKIP)}catch(q){X(q)}}))}:w=>w.value==null&&!(w.metadataFlags&(Fn|_l))?ec.SKIP:(o?._freezeRecords&&Object.freeze(w.value),w));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,o).map(y=>{if(typeof y=="object"&&y){let{key:w,...I}=y,H=n.primaryStore.getEntry(w);return o?._freezeRecords&&Object.freeze(H?.value),{...I,...H}}return y}):f.getRange(S).map(R?function({key:y,value:w}){let I;return typeof y=="string"&&y.length>Ms.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(w):I={[c]:y},this.isSync?R(I)?w:ec.SKIP:new Promise((H,X)=>setImmediate(()=>{try{H(R(I)?w:ec.SKIP)}catch(q){X(q)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:w}){return this.isSync?w&&R(w)?y:ec.SKIP:new Promise((I,H)=>setImmediate(()=>{try{I(w&&R(w)?y:ec.SKIP)}catch(X){H(X)}}))})}function ji(e,t){if(Array.isArray(t))if(t.length>1){let r=ji(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?ji(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 J9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function Q9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function np(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=ji(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=np({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let _,R=a((y,w)=>{let I,H;return E?E.returnDirect?(I=E(y,r,w),H=ut):(H=E(y,r,w,!0),Array.isArray(H)?(I=H.map(X=>X.value),H=null):I=H?.value):I=y[d],{subObject:I,subEntry:H}},"getSubObject"),S=a((y,w)=>{if(E&&h.idFilter){if(!_)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};_=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else _=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=_(y);return _.idFilter&&(S.idFilter=_.idFilter),q}let{subObject:I,subEntry:H}=R(y,w);return I?Array.isArray(I)?(!n?.[d]&&n&&(n[d]={fromRecord(q){let k=R(q).subObject;return Array.isArray(k)?k.filter(h).map(z=>z[m.primaryKey]):k}}),I.some(h)):h(I,H):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),_I[o]||o){case Ms.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Wi.compareKeys)(d,l[0])>=0&&(0,Wi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Wi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Wi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Wi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Wi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Wi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new tn.ClientError(`Unknown query comparator "${o}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&Sg(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,_=3;function R(S){let y=S[d],w;if(typeof y!="object"||!y||p?w=f(y):Array.isArray(y)?w=y.some(f):y instanceof Date&&(w=f(y.getTime())),m&&(_++,!w&&!R.idFilter&&++E/_*i>h)){let I=Xu(e,r.transaction.getReadTxn(),!1,t),H;R.to?H=I.flatMap(q=>t.primaryStore.get(q)[R.to]):H=I.map(Zu);let X=new Set(H);R.idFilter=q=>X.has(Zu(q)),R.idFilter.idSet=X}return w}return a(R,"recordFilter"),s&&(R.idFilter=f),R}a(u,"attributeComparator")}function Sg(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/Ko(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=_I[n]||n,n===Ms.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=ji(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Sg(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Ko(e.indices[i.relationship.from])/(Ko(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Ko(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=j9*Ko(e.primaryStore)+1;else if(n==="between")r.estimated_count=W9*Ko(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=Ko(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=Y9*Ko(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Tg(e,t){if(e)if(Yo=e,zu.lastIndex=0,X9.test(e))try{if(t&&(t.conditions=[]),ci=t??new Qu,rp(ci,""),qr!==Yo.length&&Qt("Unable to parse query, unexpected end of query"),ci.parseErrorMessage&&(ci.parseError=new pI(t.parseErrorMessage),!t))throw ci.parseError;return ci}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${qr} in '${Yo}'`,ci.parseErrorMessage&&(r.message+=", "+ci.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Qt(e){let t=`${e} at position ${qr}`;ci.parseErrorMessage=ci.parseErrorMessage?ci.parseErrorMessage+", "+t:t}function rp(e,t){let r=zu,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Yo);){qr=r.lastIndex;let[,d,f]=n;o?(d&&Qt(`expected operator, but encountered '${d}'`),o=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Qt(`invalid FIQL operator ${d}`),l=j0):(l=decodeURIComponent,i="equals",d||Qt("attribute must be specified before equality comparator"),s=Ju(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=z9[f],l=hI[i]?j0:decodeURIComponent,d||Qt(`attribute must be specified before comparator ${f}`),s=Ju(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Qt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Qt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Qt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&z0(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else gg(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Qt("conditions/comparisons are not allowed in a property list"):e.push(Ju(d)),s=void 0;break;case"(":zu.lastIndex=qr;let p=rp(d?[]:new Qu,")");switch(d){case"":gg(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Qt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Qt("group by is not implemented yet");case"sort":e.sort=J0(p);break;default:Qt(`unknown query function call ${d}`)}Yo[qr]===","?r.lastIndex=++qr:o=!0,s=null;break;case"{":e.conditions&&Qt("property sets are not allowed in a queries"),d||Qt("property sets must have a defined parent property name"),zu.lastIndex=qr,m=rp([],"}"),m.name=d,e.push(m),Yo[qr]===","?r.lastIndex=++qr:o=!0;break;case"[":if(zu.lastIndex=qr,d?(m=rp(new Qu,"]"),m.name=d):m=rp(e.conditions?new Qu:[],"]"),e.conditions)if(gg(e,u),Yo[qr]==="="){l=decodeURIComponent,i="equals",s=Ju(d),r.lastIndex=++qr;break}else e.conditions.push(m),s=null;else e.push(m);Yo[qr]===","?r.lastIndex=++qr:o=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&z0(h,d),gg(e,u),e.conditions.push(h)}else d&&Qt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Ju(d));return e}else Qt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Qt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?Z9:zu,r.lastIndex=qr),qr===Yo.length)return e}t&&Qt(`expected '${t}', but encountered end of string`)}function gg(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Qt("Can not mix operators within a condition grouping"):e.operator=t)}function Ju(e){return e.indexOf(".")>-1?e.split(".").map(Ju):decodeURIComponent(e)}function j0(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 tn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function z0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new tn.ClientError("wildcard can only be used at the end of a string")}function J0(e){let t=Q0(e[0]);return e.length>1&&(t.next=J0(e.slice(1))),t}function Q0(e){if(Array.isArray(e)){let t=Q0(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}}Qt(`Unknown sort type ${e}`)}function Zu(e){return Array.isArray(e)?e.join("\0"):e}function Ko(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function e7(e,t,r){return t*r/Ko(e)}var tn,Ms,Wi,ec,Y9,W9,j9,z9,hI,_I,pI,X9,zu,Z9,qr,ci,Yo,Qu,yg=se(()=>{tn=b(Ee()),Ms=b(Jt()),Wi=require("ordered-binary"),ec=require("lmdb");Rg();fl();Y9=.3,W9=.1,j9=.05,z9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},hI={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(EI,"executeConditions");a(Xu,"searchByIndex");a(ji,"findAttribute");a(J9,"joinTo");a(Q9,"joinFrom");_I={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(np,"filterByType");a(Sg,"estimateCondition");pI=class extends tn.Violation{static{a(this,"SyntaxViolation")}},X9=/[()[\]|!<>.]|(=\w*=)/,zu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Z9=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Tg,"parseQuery");a(Qt,"recordError");a(rp,"parseBlock");a(gg,"assignOperator");a(Ju,"decodeProperty");a(j0,"typedDecoding");a(z0,"wildcardDecoding");a(J0,"toSortObject");a(Q0,"toSortEntry");Qu=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};a(Zu,"flattenKey");a(Ko,"estimatedEntryCount");a(e7,"intersectionEstimate")});var X0,Us,bg=se(()=>{X0=b(ai());zi();Us=class extends URLSearchParams{static{a(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,X0._assignPackageExport)("Resource",Xt)});var sB={};ye(sB,{MultiPartId:()=>Ag,Resource:()=>Xt,contextStorage:()=>td,snakeCase:()=>r7,transformForSelect:()=>rd});function r7(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Z0(e,t){if(gl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(gl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Ag;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){gl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return gl=!0,null;e[e.length-1]==="/"&&(gl=!0)}return t.coerceId(decodeURIComponent(e))}function kn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r){if(o)d=i,o=o.getContext?.()||o;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i.getContext?.()||i):i?.transaction instanceof xo?o=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new ed.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?o?(d=i,o=o.getContext?.()||o):o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let _=this.parsePath(c,o,l);_?.id!==void 0?(_.query&&(l?l=Object.assign(_.query,l):l=_.query),u=_.isCollection,c=_.id):c=_,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new Us,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new Us,l.id=c,c==null&&(t.method==="get"&&nB.default.warn?.(`Using an argument with a value of ${c} for ${t.method}, is deprecated`,new Error("Invalid id")),u=!0);l||(l=new Us,l.id=c),u&&(l.isCollection=!0);let f;o||(o=td.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=a(E=>td.run(o,()=>h(E)),"runAction")),o?.transaction){let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)}else return bt(o,()=>{o.transaction.startedFrom={resourceName:this.name,method:t.method};let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)},f);function h(E){if(o.authorize&&(o.authorize=!1,m!==!1)){let _=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,d,o):E.allowUpdate(o.user,d,o):t.type==="create"?E.allowCreate(o.user,d,o):E.allowDelete(o.user,l,o);if(_?.then)return _.then(R=>{if(!R)throw new ed.AccessViolation(o.user);return typeof d?.then=="function"?d.then(S=>e(E,l,o,S)):e(E,l,o,d)});if(!_)throw new ed.AccessViolation(o.user)}return typeof d?.then=="function"?d.then(_=>e(E,l,o,_)):e(E,l,o,d)}a(h,"authorizeActionOnResource")}}function os(e,t){let r=new ed.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 gI(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function rd(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):gI(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(gI(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(gI(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&o&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=rd(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var eB,tB,ed,rB,nB,td,t7,Xt,gl,Ag,zi=se(()=>{eB=require("crypto");Lm();ku();tB=b(ai()),ed=b(Ee());ja();yg();rB=require("async_hooks");bg();nB=b(ir()),td=new rB.AsyncLocalStorage,t7={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Xt=class{static{a(this,"Resource")}#e;#t;#n;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=kn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=rd(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0,method:"get"});static put=kn(function(t,r,n,s){if(Array.isArray(s)&&t.#n&&t.constructor.loadAsInstance!==!1){let i=[];for(let o of s){let c=t.constructor,l=o[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(o,n))):i.push(u.put(o,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):os(t,"put")},{hasContent:!0,type:"update",method:"put"});static patch=kn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):os(t,"patch")},{hasContent:!0,type:"update",method:"patch"});static delete=kn(function(t,r,n,s){return t.delete?t.delete(r):os(t,"delete")},{hasContent:!1,type:"delete",method:"delete"});static getNewId(){return(0,eB.randomUUID)()}static create(t,r,n){let s;return this.loadAsInstance===!1?typeof t=="object"&&t&&!n?(n=r,r=t,s=new Us,s.isCollection=!0):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),n?n.getContext&&(n=n.getContext()):n=td.getStore()??{},bt(n,async()=>{n.transaction.startedFrom??={resourceName:this.name,method:"create"};let i=new this(s,n),o=await i.create?i.create(s,r):os(i,"create");return n.newLocation=s??o?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?o:i})}static invalidate=kn(function(t,r,n,s){return t.invalidate?t.invalidate(r):os(t,"delete")},{hasContent:!1,type:"update",method:"invalidate"});static post=kn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create",method:"post"});static update=kn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update",method:"update"});static connect=kn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):os(t,"connect")},{hasContent:!0,type:"read",method:"connect"});static subscribe=kn(function(t,r,n,s){return t.subscribe?t.subscribe(r):os(t,"subscribe")},{type:"read",method:"subscribe"});static publish=kn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):os(t,"publish")},{hasContent:!0,type:"create",method:"publish"});static search=kn(function(t,r,n){let s=t.search?t.search(r):os(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let o=rd(i,t.constructor);return s.map(o)}return s},{type:"read",method:"search"});static query=kn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):os(t,"search")},{hasContent:!0,type:"read",method:"query"});static copy=kn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):os(t,"copy")},{hasContent:!0,type:"create",method:"copy"});static move=kn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):os(t,"move")},{hasContent:!0,type:"delete",method:"move"});async post(t,r){if(this.constructor.loadAsInstance===!1){if(t.isCollection&&this.create)return r=await this.create(t,r),r?.[this.constructor.primaryKey]}else if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;os(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t,r){return Tg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&t7[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:Z0(t,this),isCollection:gl}}let i=Z0(t,this);return gl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new ns}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new ns}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,tB._assignPackageExport)("Resource",Xt);a(r7,"snakeCase");a(Z0,"pathToId");Ag=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(kn,"transactional");a(os,"missingMethod");a(gI,"selectFromObject");a(rd,"transformForSelect")});var Sl,SI=se(()=>{Sl=class{static{a(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var TI={};ye(TI,{Resources:()=>nd,keyArrayToString:()=>sd,resetResources:()=>n7,resources:()=>xs});function n7(){return xs=new nd,Ue.resources=xs,xs}function sd(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var iB,oB,nd,xs,tc=se(()=>{ja();SI();iB=b(Q()),oB=b(Ee());Hr();nd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new oB.ServerError(`Conflicting paths for ${t}`);iB.default.error(c),i.Resource=new Sl(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===o&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return bt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(n7,"resetResources");a(sd,"keyArrayToString")});function bI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=cB,s7(e.primaryStore,e.auditStore)):(c=aB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{lB(aB[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=sd(t);let d=new RI(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function lB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),uB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=At(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=sd(c),u=0;do{let d=o.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,yI.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,yI.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function s7(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=cB[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{lB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function uB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function dB(e){return e.nextTransaction||(bI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),uB(e)),e.nextTransaction}var yI,aB,cB,RI,AI=se(()=>{yI=b(Q());ku();tc();$i();aB=Object.create(null),cB=Object.create(null);a(bI,"addSubscription");RI=class extends ns{static{a(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(lB,"notifyFromTransactionData");a(s7,"listenToCommits");a(uB,"nextTransaction");a(dB,"whenNextTransaction")});var mB=M((bPe,fB)=>{"use strict";var II=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};fB.exports=II});var hB=M((IPe,pB)=>{"use strict";var wI=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};pB.exports=wI});var sp=M(_B=>{"use strict";var EB=fe(),i7=(G(),v(j)),{RecordEncoder:o7}=(fl(),v(W0));EB.initSync();var a7=EB.get(i7.CONFIG_PARAMS.STORAGE_CACHING)!==!1,NI=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=a7&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:o7})}};_B.OpenDBIObject=NI});var ip=M((OPe,gB)=>{"use strict";var as=fe(),Bs=(G(),v(j));as.initSync();var Ig=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=as.get(Bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||as.get(Bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||as.get(Bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",as.get(Bs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=as.get(Bs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),as.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=as.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),as.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=as.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),as.get(Bs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=as.get(Bs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=as.get(Bs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};gB.exports=Ig;Ig.MAX_DBS=1e4});var Et=M((LPe,CB)=>{"use strict";var OI=require("lmdb"),li=require("fs-extra"),cs=require("path"),wg=Un(),yB=Q(),Hn=Jr().LMDB_ERRORS_ENUM,Ng=hB(),{OpenDBIObject:PI}=sp(),RB=ip(),rc=Jt(),SB=(G(),v(j)),{table:c7,resetDatabases:l7}=(Oe(),v(ft)),TB=fe(),ui=rc.INTERNAL_DBIS_NAME,bB=rc.DBI_DEFINITION_NAME,u7="data.mdb",d7="lock.mdb",op=".mdb",f7="-lock",CI=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Fs(t,r),this.key_type=this.dbi[rc.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[rc.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new OI.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Cg(e,t){if(e===void 0)throw new Error(Hn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Hn.ENV_NAME_REQUIRED)}a(Cg,"pathEnvNameValidation");async function LI(e,t,r=!0){try{await li.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Hn.INVALID_BASE_PATH):n}try{let n=cs.join(e,t+op);return await li.access(n,li.constants.R_OK|li.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await li.access(cs.join(e,t,u7),li.constants.R_OK|li.constants.F_OK),cs.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Hn.INVALID_ENVIRONMENT)}else throw new Error(Hn.INVALID_ENVIRONMENT);throw n}}a(LI,"validateEnvironmentPath");function Og(e,t){if(wg.validateEnv(e),t===void 0)throw new Error(Hn.DBI_NAME_REQUIRED)}a(Og,"validateEnvDBIName");async function m7(e,t,r=!1,n=!1){Cg(e,t);let s=cs.basename(e);t=t.toString();let i=TB.get(SB.CONFIG_PARAMS.DATABASES);i||TB.setProperty(SB.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await LI(e,t,n),AB(e,t,r)}catch(o){if(o.message===Hn.INVALID_ENVIRONMENT){let c=cs.join(e,t);await li.mkdirp(n?c:e);let l=new RB(n?c:c+op,!1),u=OI.open(l);u.dbis=Object.create(null);let d=new PI(!1);u.openDB(ui,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=DI(e,t,r);return u[rc.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw o}}a(m7,"createEnvironment");async function p7(e,t,r,n=!0){Cg(e,t),t=t.toString();let s=cs.join(e,t);return c7({table:t,database:cs.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(p7,"copyEnvironment");async function AB(e,t,r=!1){Cg(e,t),t=t.toString();let n=DI(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 LI(e,t),i=cs.join(e,t+op),o=s!=i,c=new RB(s,o),l=OI.open(c);l.dbis=Object.create(null);let u=wB(l);for(let d=0;d<u.length;d++)Fs(l,u[d]);return l[rc.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(AB,"openEnvironment");async function h7(e,t,r=!1){Cg(e,t),t=t.toString();let n=cs.join(e,t+op),s=await LI(e,t);if(global.lmdb_map!==void 0){let i=DI(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await IB(o),delete global.lmdb_map[i]}}await li.remove(s),await li.remove(s===n?s+f7:cs.join(cs.dirname(s),d7))}a(h7,"deleteEnvironment");async function IB(e){wg.validateEnv(e);let t=e[rc.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(IB,"closeEnvironment");function DI(e,t,r=!1){let s=`${cs.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(DI,"getCachedEnvironmentName");function E7(e){wg.validateEnv(e);let t=Object.create(null),r=Fs(e,ui);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ui)try{t[n]=Object.assign(new Ng,s)}catch{yB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(E7,"listDBIDefinitions");function wB(e){wg.validateEnv(e);let t=[],r=Fs(e,ui);for(let{key:n}of r.getRange({start:!1}))n!==ui&&t.push(n);return t}a(wB,"listDBIs");function _7(e,t){let n=Fs(e,ui).getEntry(t),s=new Ng;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{yB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(_7,"getDBIDefinition");function NB(e,t,r,n=!r){if(Og(e,t),t=t.toString(),t===ui)throw new Error(Hn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fs(e,t)}catch(s){if(s.message===Hn.DBI_DOES_NOT_EXIST){let i=new PI(r,n===!0),o=e.openDB(t,i),c=new Ng(r===!0,n);return o[bB]=c,Fs(e,ui).putSync(t,c),e.dbis[t]=o,o}throw s}}a(NB,"createDBI");function Fs(e,t){if(Og(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ui?r=_7(e,t):r=new Ng,r===void 0)throw new Error(Hn.DBI_DOES_NOT_EXIST);let n;try{let s=new PI(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Hn.DBI_DOES_NOT_EXIST):s}return n[bB]=r,e.dbis[t]=n,n}a(Fs,"openDBI");function g7(e,t){Og(e,t),t=t.toString();let r=Fs(e,t),n=r.getStats();return r[rc.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(g7,"statDBI");async function S7(e,t){try{let r=cs.join(e,t+op);return(await li.stat(r)).size}catch{throw new Error(Hn.INVALID_ENVIRONMENT)}}a(S7,"environmentDataSize");function T7(e,t){if(Og(e,t),t=t.toString(),t===ui)throw new Error(Hn.CANNOT_DROP_INTERNAL_DBIS_NAME);Fs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Fs(e,ui).removeSync(t)}a(T7,"dropDBI");function y7(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Fs(e,i)}catch(o){if(o.message===Hn.DBI_DOES_NOT_EXIST)NB(e,i,i!==t,i===t),n=!0;else throw o}}n&&l7()}a(y7,"initializeDBIs");CB.exports={openDBI:Fs,openEnvironment:AB,createEnvironment:m7,listDBIs:wB,listDBIDefinitions:E7,createDBI:NB,dropDBI:T7,statDBI:g7,deleteEnvironment:h7,initializeDBIs:y7,TransactionCursor:CI,environmentDataSize:S7,copyEnvironment:p7,closeEnvironment:IB}});var LB=M((vPe,PB)=>{"use strict";var vI=Et(),R7=Q(),OB=Jr().LMDB_ERRORS_ENUM;PB.exports=b7;async function b7(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await vI.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==OB.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await vI.closeEnvironment(global.lmdb_map[n]),await vI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==OB.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){R7.error(t)}}a(b7,"cleanLMDBMap")});var Qi=M((UPe,vB)=>{"use strict";var DB=ae(),A7=(G(),v(j)),id=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ji=require("joi"),nc={schema_format:{pattern:id,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},I7=Ji.alternatives(Ji.string().min(1).max(nc.schema_length.maximum).pattern(id).messages({"string.pattern.base":"{:#label} "+nc.schema_format.message}),Ji.number(),Ji.array()).required(),w7=Ji.alternatives(Ji.string().min(1).max(nc.schema_length.maximum).pattern(id).messages({"string.pattern.base":"{:#label} "+nc.schema_format.message}),Ji.number()),N7=Ji.alternatives(Ji.string().min(1).max(nc.schema_length.maximum).pattern(id).messages({"string.pattern.base":"{:#label} "+nc.schema_format.message}),Ji.number()).required();function C7(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>nc.schema_length.maximum?`'${property_name}' maximum of 250 characters`:id.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}a(C7,"checkValidTable");function O7(e,t){return DB.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(O7,"validateSchemaExists");function P7(e,t){let r=t.state.ancestors[0].schema;return DB.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(P7,"validateTableExists");function L7(e,t){return e.toLowerCase()===A7.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(L7,"validateSchemaName");vB.exports={commonValidators:nc,schemaRegex:id,hdbSchemaTable:I7,validateSchemaExists:O7,validateTableExists:P7,validateSchemaName:L7,checkValidTable:C7,hdbDatabase:w7,hdbTable:N7}});var mt=M((BPe,MB)=>{"use strict";var Gn=require("validate.js");Gn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Gn.validators.type.checks[t](e)?null:` must be a '${t}' value`};Gn.validators.type.checks={Object:a(function(e){return Gn.isObject(e)&&!Gn.isArray(e)},"Object"),Array:Gn.isArray,Integer:Gn.isInteger,Number:Gn.isNumber,String:Gn.isString,Date:Gn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};Gn.validators.hasValidFileExt=function(e,t){return Gn.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};MB.exports={validateObject:D7,validateObjectAsync:v7,validateBySchema:M7};function D7(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Gn(e,t,{format:"flat"});return r?new Error(r):null}a(D7,"validateObject");async function v7(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Gn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(v7,"validateObjectAsync");function M7(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(M7,"validateBySchema")});var UI=M((kPe,xB)=>{var{hdbTable:U7,hdbDatabase:UB}=Qi(),x7=mt(),MI=require("joi"),B7={undefined:"undefined",null:"null"},F7=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||B7[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"customRecordsVal"),k7=MI.object({database:UB,schema:UB,table:U7,records:MI.array().items(MI.object().custom(F7)).required()});xB.exports=function(e){return x7.validateBySchema(e,k7)}});var FB=M((GPe,BB)=>{"use strict";var xI=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};BB.exports=xI});var HB=M(($Pe,kB)=>{"use strict";var BI=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};kB.exports=BI});var qB=M((KPe,GB)=>{"use strict";var FI=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};GB.exports=FI});var VB=M((WPe,$B)=>{"use strict";var kI=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};$B.exports=kI});var yl=M((XPe,WB)=>{"use strict";var H7=Et(),G7=HB(),q7=qB(),$7=VB(),Xi=Un(),ap=Jr().LMDB_ERRORS_ENUM,V7=Jt(),Wo=(G(),v(j)),K7=ae(),Y7=require("uuid"),zPe=require("lmdb"),{handleHDBError:W7,hdbErrors:j7}=Ee(),{OVERFLOW_MARKER:JPe,MAX_SEARCH_KEY_LENGTH:QPe}=V7,KB=fe();KB.initSync();var Pg=KB.get(Wo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),HI=Wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Tl=Wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function z7(e,t,r,n,s=Xi.getNextMonotonicTime()){VI(e,t,r,n),GI(e,t,r);let i=new G7,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];YB(u,!0,s);let d=J7(e,t,r,u),f=u[t];o.push(d),c.push(f)}return qI(o,c,n,i,s)}a(z7,"insertRecords");function J7(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Wo.FUNC_VAL],n[o]=c)}let l=Xi.getIndexedValues(c),u=e.dbis[o];if(l){Pg&&u.prefetch(l.map(d=>({key:d,value:s})),Lg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}Pg&&e.dbis[t].prefetch([s],Lg),e.dbis[t].put(s,n,n[Tl])})}a(J7,"insertRecord");function Q7(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(Q7,"removeSkippedRecords");function YB(e,t,r){let n=r>0;(n||!Number.isInteger(e[Tl]))&&(e[Tl]=r||(r=Xi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[HI]))&&(e[HI]=r||Xi.getNextMonotonicTime()):delete e[HI]}a(YB,"setTimestamps");function GI(e,t,r){r.indexOf(Wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Wo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Wo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),H7.initializeDBIs(e,t,r)}a(GI,"initializeTransaction");async function X7(e,t,r,n,s=Xi.getNextMonotonicTime()){VI(e,t,r,n),GI(e,t,r);let i=new q7,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=$I(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),o.push(u);continue}c.push(m),l.push(f)}return qI(c,l,n,i,s,o)}a(X7,"updateRecords");async function Z7(e,t,r,n,s=Xi.getNextMonotonicTime()){try{VI(e,t,r,n)}catch(l){throw W7(l,l.message,j7.HTTP_STATUS_CODES.BAD_REQUEST)}GI(e,t,r);let i=new $7,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;K7.isEmpty(u[t])?(d=Y7.v4(),u[t]=d):d=u[t];let f=$I(e,t,u,d,i,!1,s);o.push(f),c.push(d)}return qI(o,c,n,i,s)}a(Z7,"upsertRecords");async function qI(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Xi.getNextMonotonicTime(),Q7(r,i),n}a(qI,"finalizeWrite");function $I(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(YB(r,!d,o),Number.isInteger(r[Tl])&&u[Tl]>r[Tl])return!1;d&&s.original_records.push(u);let f,m=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],_=e.dbis[h];if(_===void 0)continue;let R=u[h];if(typeof E=="function"){let y=E([[u]]);Array.isArray(y)&&(E=y[0][Wo.FUNC_VAL],r[h]=E)}if(E===R)continue;let S=Xi.getIndexedValues(R);if(S){Pg&&_.prefetch(S.map(y=>({key:y,value:n})),Lg);for(let y=0,w=S.length;y<w;y++)_.remove(S[y],n)}if(S=Xi.getIndexedValues(E),S){Pg&&_.prefetch(S.map(y=>({key:y,value:n})),Lg);for(let y=0,w=S.length;y<w;y++)_.put(S[y],n)}}let p={...u,...r};c.put(n,p,p[Tl])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:$I(e,t,r,n,s,i,o))}a($I,"updateUpsertRecord");function eee(e,t,r){if(Xi.validateEnv(e),t===void 0)throw new Error(ap.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ap.WRITE_ATTRIBUTES_REQUIRED):new Error(ap.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(eee,"validateBasic");function VI(e,t,r,n){if(eee(e,t,r),!Array.isArray(n))throw n===void 0?new Error(ap.RECORDS_REQUIRED):new Error(ap.RECORDS_MUST_BE_ARRAY)}a(VI,"validateWrite");function Lg(){}a(Lg,"noop");WB.exports={insertRecords:z7,updateRecords:X7,upsertRecords:Z7}});var Zi=M((eLe,tee)=>{tee.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]},hdb_certificate_cache:{hash_attribute:"certificate_id",name:"hdb_certificate_cache",schema:"system",attributes:[{attribute:"certificate_id"}]},hdb_crl_cache:{hash_attribute:"distribution_point",name:"hdb_crl_cache",schema:"system",attributes:[{attribute:"distribution_point"}]},hdb_revoked_certificates:{hash_attribute:"composite_id",name:"hdb_revoked_certificates",schema:"system",attributes:[{attribute:"composite_id"}]}}});var zB=M((tLe,jB)=>{"use strict";var ree=require("uuid"),KI=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||ree.v4(),this.schema_table=`${this.schema}.${this.table}`}};jB.exports=KI});var Dg=M((nLe,JB)=>{"use strict";var nee=zB(),YI=class extends nee{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};JB.exports=YI});var XB=M((iLe,QB)=>{"use strict";QB.exports=iee;var see="inserted";function iee(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===see?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(iee,"returnObject")});var vg=M((cLe,eF)=>{"use strict";var oee=(G(),v(j)),WI=Et(),aee=yl(),{getSystemSchemaPath:cee,getSchemaPath:lee}=Rt(),aLe=Zi(),{validateBySchema:uee}=mt(),cp=require("joi"),dee=Dg(),fee=XB(),{handleHDBError:mee,hdbErrors:pee,ClientError:hee}=Ee(),ZB=ae(),{HTTP_STATUS_CODES:Eee}=pee,_ee="inserted";eF.exports=gee;async function gee(e){let t=uee(e,cp.object({database:cp.string(),schema:cp.string(),table:cp.string().required(),attribute:cp.string().required()}));if(t)throw new hee(t.message);let r=!e.skip_table_check&&ZB.checkGlobalSchemaTable(e.schema,e.table);if(r)throw mee(new Error,r,Eee.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ZB.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 dee(e.schema,e.table,e.attribute,e.id);try{let i=await WI.openEnvironment(lee(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);WI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await WI.openEnvironment(cee(),oee.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await aee.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return fee(_ee,c,{records:[s]},l)}catch(i){throw i}}a(gee,"lmdbCreateAttribute")});var lp=M((dLe,rF)=>{"use strict";var jo=ae(),tF=Q(),uLe=UI(),{getDatabases:See}=(Oe(),v(ft)),{ClientError:Rl}=Ee();rF.exports=Tee;function Tee(e){if(jo.isEmpty(e))throw new Rl("invalid update parameters defined.");if(jo.isEmptyOrZeroLength(e.schema))throw new Rl("invalid schema specified.");if(jo.isEmptyOrZeroLength(e.table))throw new Rl("invalid table specified.");if(!Array.isArray(e.records))throw new Rl("records must be an array");let t=See()[e.schema]?.[e.table];if(jo.isEmpty(t))throw new Rl(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&jo.isEmptyOrZeroLength(o[r]))throw tF.error("a valid hash attribute must be provided with update record:",o),new Rl("a valid hash attribute must be provided with update record, check log for more info");if(!jo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw tF.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Rl(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!jo.isEmpty(o[r])&&o[r]!==""&&n.has(jo.autoCast(o[r]))&&(o.skip=!0),n.add(jo.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(Tee,"insertUpdateValidate")});var Mg=M((mLe,sF)=>{"use strict";var nF=ae(),yee=(G(),v(j)),Ree=Q(),bee=vg(),Aee=Dg(),Iee=zo(),{SchemaEventMsg:wee}=ls(),Nee="already exists in";sF.exports=Cee;async function Cee(e,t,r){if(nF.isEmptyOrZeroLength(r))return r;let n=[];nF.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 Oee(e,t.schema,t.name,i)})),s}a(Cee,"lmdbCheckForNewAttributes");async function Oee(e,t,r,n){let s=new Aee(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await Pee(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(Nee))Ree.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(Oee,"createNewAttribute");async function Pee(e){let t;return t=await bee(e),Iee.signalSchemaChange(new wee(process.pid,yee.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(Pee,"createAttribute")});var od=M((hLe,iF)=>{"use strict";var jI=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};iF.exports=jI});var aF=M((_Le,oF)=>{"use strict";var Lee=od(),Dee=(G(),v(j)).OPERATIONS_ENUM,zI=class extends Lee{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(Dee.INSERT,r,n,s,i),this.records=t}};oF.exports=zI});var lF=M((SLe,cF)=>{"use strict";var vee=od(),Mee=(G(),v(j)).OPERATIONS_ENUM,JI=class extends vee{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(Mee.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};cF.exports=JI});var dF=M((yLe,uF)=>{"use strict";var Uee=od(),xee=(G(),v(j)).OPERATIONS_ENUM,QI=class extends Uee{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(xee.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};uF.exports=QI});var mF=M((bLe,fF)=>{"use strict";var Bee=od(),Fee=(G(),v(j)).OPERATIONS_ENUM,XI=class extends Bee{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(Fee.DELETE,n,s,t,i),this.original_records=r}};fF.exports=XI});var up=M((wLe,_F)=>{"use strict";var ILe=require("path"),pF=Et(),kee=aF(),Hee=lF(),Gee=dF(),qee=mF(),ad=Jt(),hF=ae(),{CONFIG_PARAMS:$ee}=(G(),v(j)),EF=fe();EF.initSync();var Ug=(G(),v(j)).OPERATIONS_ENUM,{getTransactionAuditStorePath:Vee}=Rt();_F.exports=Kee;async function Kee(e,t){if(EF.get($ee.LOGGING_AUDITLOG)===!1)return;let r=Vee(e.schema,e.table),n=await pF.openEnvironment(r,e.table,!0),s=Yee(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){pF.initializeDBIs(n,ad.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ad.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),hF.isEmpty(s.user_name)||n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(Kee,"writeTransaction");function Yee(e,t){let r=hF.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Ug.INSERT)return new kee(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ug.UPDATE)return new Hee(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ug.UPSERT)return new Gee(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ug.DELETE)return new qee(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Yee,"createTransactionObject")});var ZI=M((OLe,gF)=>{"use strict";var Wee=lp(),CLe=Cm(),dp=(G(),v(j)),jee=Om(),zee=yl().insertRecords,Jee=Et(),Qee=Q(),Xee=Mg(),{getSchemaPath:Zee}=Rt(),ete=up();gF.exports=tte;async function tte(e){try{let{schemaTable:t,attributes:r}=Wee(e);jee(e,r,t.hash_attribute),e.schema!==dp.SYSTEM_SCHEMA_NAME&&(r.includes(dp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(dp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(dp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(dp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Xee(e.hdb_auth_header,t,r),s=Zee(e.schema,e.table),i=await Jee.openEnvironment(s,e.table),o=await zee(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await ete(e,o)}catch(c){Qee.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(tte,"lmdbCreateRecords")});var yF=M((LLe,TF)=>{"use strict";var SF=(G(),v(j)),rte=ZI(),nte=Cm(),ste=require("fs-extra"),{getSchemaPath:ite}=Rt();TF.exports=ote;async function ote(e){let t=[{name:e.schema,createddate:Date.now()}],r=new nte(SF.SYSTEM_SCHEMA_NAME,SF.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await rte(r),await ste.mkdirp(ite(e.schema))}a(ote,"lmdbCreateSchema")});var bF=M((vLe,RF)=>{"use strict";var ew=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};RF.exports=ew});var NF=M((FLe,wF)=>{"use strict";var AF=Et(),tw=Un(),rw=Jr().LMDB_ERRORS_ENUM,ate=Jt(),IF=Q(),ULe=ae(),cte=require("lmdb"),lte=bF(),ute=(G(),v(j)),{OVERFLOW_MARKER:xLe,MAX_SEARCH_KEY_LENGTH:BLe}=ate,dte=ute.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function fte(e,t,r,n){if(tw.validateEnv(e),t===void 0)throw new Error(rw.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(rw.IDS_REQUIRED):new Error(rw.IDS_MUST_BE_ITERABLE);try{let s=AF.listDBIs(e);AF.initializeDBIs(e,t,s);let i=new lte,o,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{o=r[m];let h=e.dbis[t].get(o);if(!h||n&&h[dte]>n){i.skipped.push(o);continue}let E=e.dbis[t].ifVersion(o,cte.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let _=0;_<s.length;_++){let R=s[_];if(!h.hasOwnProperty(R)||R===t)continue;let S=e.dbis[R],y=h[R];if(y!=null)try{let w=tw.getIndexedValues(y);if(w)for(let I=0,H=w.length;I<H;I++)S.remove(w[I],o)}catch{IF.warn(`cannot delete from attribute: ${R}, ${y}:${o}`)}}});c.push(E),l.push(o),i.original_records.push(h)}catch(h){IF.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=tw.getNextMonotonicTime(),i}catch(s){throw s}}a(fte,"deleteRecords");wF.exports={deleteRecords:fte}});var fp=M((HLe,OF)=>{"use strict";var cd=ae(),mte=NF(),pte=Et(),{getSchemaPath:hte}=Rt(),Ete=up(),_te=Q();OF.exports=gte;async function gte(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(cd.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(cd.isEmptyOrZeroLength(e.hash_values)&&!cd.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];cd.isEmpty(l)||e.hash_values.push(l)}}if(cd.isEmptyOrZeroLength(e.hash_values))return CF([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(cd.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=hte(e.schema,e.table),i=await pte.openEnvironment(s,e.table),o=await mte.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Ete(e,o)}catch(c){_te.error(`unable to write transaction due to ${c.message}`)}return CF(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(gte,"lmdbDeleteRecords");function CF(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(CF,"createDeleteResponse")});var sw=M(($Le,PF)=>{"use strict";var Ste=(G(),v(j)),qLe=Un();function nw(e,t){let r=Object.create(null);if(t.length===1&&Ste.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(nw,"parseRow");function Tte(e,t,r,n){let s=nw(r,e);n.push(s)}a(Tte,"searchAll");function yte(e,t,r,n){let s=nw(r,e);n[t]=s}a(yte,"searchAllToMap");function Rte(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Rte,"iterateDBI");function bl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(bl,"pushResults");function bte(e,t,r,n,s,i){t.toString().endsWith(e)&&bl(t,r,n,s,i)}a(bte,"endsWith");function Ate(e,t,r,n,s,i){t.toString().includes(e)&&bl(t,r,n,s,i)}a(Ate,"contains");function Ite(e,t,r,n,s,i){t>e&&bl(t,r,n,s,i)}a(Ite,"greaterThanCompare");function wte(e,t,r,n,s,i){t>=e&&bl(t,r,n,s,i)}a(wte,"greaterThanEqualCompare");function Nte(e,t,r,n,s,i){t<e&&bl(t,r,n,s,i)}a(Nte,"lessThanCompare");function Cte(e,t,r,n,s,i){t<=e&&bl(t,r,n,s,i)}a(Cte,"lessThanEqualCompare");PF.exports={parseRow:nw,searchAll:Tte,searchAllToMap:yte,iterateDBI:Rte,endsWith:bte,contains:Ate,greaterThanCompare:Ite,greaterThanEqualCompare:wte,lessThanCompare:Nte,lessThanEqualCompare:Cte,pushResults:bl}});var ld=M((jLe,BF)=>{"use strict";var sc=Et(),KLe=Q(),us=Un(),xg=Jt(),or=Jr().LMDB_ERRORS_ENUM,YLe=ae(),Ote=(G(),v(j)),Bg=sw(),{parseRow:Pte}=Bg,WLe=require("lmdb"),{OVERFLOW_MARKER:LF,MAX_SEARCH_KEY_LENGTH:Lte}=xg;function DF(e,t,r,n=!1,s=void 0,i=void 0){return Al(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(DF,"iterateFullIndex");function mp(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Al(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(y=>({value:y}))):f.getRange(S)})}a(mp,"iterateRangeBetween");function Al(e,t,r,n){let s=e.database||e,i=sc.openDBI(s,r);i[xg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&sc.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Al,"setupTransaction");function vF(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(LF)){if(!s)if(r)s=sc.openDBI(e,r);else{let l=sc.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=sc.openDBI(e,l[u]),!s[xg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(vF,"getOverflowCheck");function Dte(e,t,r,n=!1,s=void 0,i=void 0){if(us.validateEnv(e),t===void 0)throw new Error(or.HASH_ATTRIBUTE_REQUIRED);return Al(e,t,t,(o,c,l)=>(Fg(r),r=pp(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Pte(u.value,r))))}a(Dte,"searchAll");function vte(e,t,r,n=!1,s=void 0,i=void 0){if(us.validateEnv(e),t===void 0)throw new Error(or.HASH_ATTRIBUTE_REQUIRED);Fg(r),r=pp(e.database||e,r);let o=new Map;for(let{key:c,value:l}of DF(e,t,t,n,s,i))o.set(c,Bg.parseRow(l,r));return o}a(vte,"searchAllToMap");function Mte(e,t,r=!1,n=void 0,s=void 0){if(us.validateEnv(e),t===void 0)throw new Error(or.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=DF(e,void 0,t,r,n,s),c=o.transaction,l=vF(c.database,c,void 0,t);for(let{key:u,value:d}of o){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}a(Mte,"iterateDBI");function Ute(e,t){if(us.validateEnv(e),t===void 0)throw new Error(or.HASH_ATTRIBUTE_REQUIRED);return sc.statDBI(e,t).entryCount}a(Ute,"countAll");function xte(e,t,r,n,s=!1,i=void 0,o=void 0){return ic(e,r,n),Al(e,t,r,(c,l,u,d)=>(n=us.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(f=>({key:n,value:f}))))}a(xte,"equals");function Bte(e,t,r){return ic(e,t,r),sc.openDBI(e,t).getValuesCount(r)}a(Bte,"count");function Fte(e,t,r,n,s=!1,i=void 0,o=void 0){return ic(e,r,n),Al(e,null,r,(c,l)=>{n=us.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:o}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}a(Fte,"startsWith");function kte(e,t,r,n,s=!1,i=void 0,o=void 0){return MF(e,t,r,n,s,i,o,!0)}a(kte,"endsWith");function MF(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ic(e,r,n),Al(e,null,r,(l,u,d,f)=>{let m=vF(d,l,f,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(LF)?u.getValues(p,{transaction:l}).map(E=>{let _=m(p,E);if(c?_.endsWith(n):_.includes(n))return{key:_,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[xg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(MF,"contains");function Hte(e,t,r,n,s=!1,i=void 0,o=void 0){ic(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),mp(e,t,r,n,l,s,i,o,!0,!1)}a(Hte,"greaterThan");function Gte(e,t,r,n,s=!1,i=void 0,o=void 0){ic(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),mp(e,t,r,n,l,s,i,o,!1,!1)}a(Gte,"greaterThanEqual");function qte(e,t,r,n,s=!1,i=void 0,o=void 0){ic(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),mp(e,t,r,l,n,s,i,o,!1,!0)}a(qte,"lessThan");function $te(e,t,r,n,s=!1,i=void 0,o=void 0){ic(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),mp(e,t,r,l,n,s,i,o,!1,!1)}a($te,"lessThanEqual");function Vte(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(us.validateEnv(e),r===void 0)throw new Error(or.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(or.START_VALUE_REQUIRED);if(s===void 0)throw new Error(or.END_VALUE_REQUIRED);if(n=us.convertKeyValueToWrite(n),s=us.convertKeyValueToWrite(s),n>s)throw new Error(or.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return mp(e,t,r,n,s,i,o,c)}a(Vte,"between");function Kte(e,t,r,n){us.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(or.HASH_ATTRIBUTE_REQUIRED);if(Fg(r),r=pp(s,r),n===void 0)throw new Error(or.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Bg.parseRow(c,r)),o}a(Kte,"searchByHash");function Yte(e,t,r){us.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(or.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(or.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Yte,"checkHashExists");function Wte(e,t,r,n,s=[]){return xF(e,t,r,n,s),UF(e,t,r,n,s).map(i=>i[1])}a(Wte,"batchSearchByHash");function jte(e,t,r,n,s=[]){xF(e,t,r,n,s);let i=new Map;for(let[o,c]of UF(e,t,r,n,s))i.set(o,c);return i}a(jte,"batchSearchByHashToMap");function UF(e,t,r,n,s=[]){return Al(e,t,t,(i,o,c)=>{r=pp(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,Bg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(UF,"batchHashSearch");function xF(e,t,r,n,s){if(us.validateEnv(e),t===void 0)throw new Error(or.HASH_ATTRIBUTE_REQUIRED);if(Fg(r),n==null)throw new Error(or.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(or.IDS_MUST_BE_ITERABLE)}a(xF,"initializeBatchSearchByHash");function Fg(e){if(!Array.isArray(e))throw e===void 0?new Error(or.FETCH_ATTRIBUTES_REQUIRED):new Error(or.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Fg,"validateFetchAttributes");function ic(e,t,r){if(us.validateEnv(e),t===void 0)throw new Error(or.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(or.SEARCH_VALUE_REQUIRED);if(r?.length>Lte)throw new Error(or.SEARCH_VALUE_TOO_LARGE)}a(ic,"validateComparisonFunctions");function pp(e,t){return t.length===1&&Ote.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=sc.listDBIs(e)),t}a(pp,"setGetWholeRowAttributes");BF.exports={searchAll:Dte,searchAllToMap:vte,count:Bte,countAll:Ute,equals:xte,startsWith:Fte,endsWith:kte,contains:MF,searchByHash:Kte,setGetWholeRowAttributes:pp,batchSearchByHash:Wte,batchSearchByHashToMap:jte,checkHashExists:Yte,iterateDBI:Mte,greaterThan:Hte,greaterThanEqual:Gte,lessThan:qte,lessThanEqual:$te,between:Vte}});var ud=M((JLe,qF)=>{var FF=require("lodash"),kF=mt(),Je=require("joi"),zte=ae(),{hdbSchemaTable:hp,checkValidTable:HF,hdbTable:GF,hdbDatabase:kg}=Qi(),{handleHDBError:Jte,hdbErrors:Qte}=Ee(),{getDatabases:Xte}=(Oe(),v(ft)),{HTTP_STATUS_CODES:Zte}=Qte,ere=Je.object({database:kg,schema:kg,table:GF,attribute:hp,value:Je.any().required(),get_attributes:Je.array().min(1).items(Je.alternatives(hp,Je.object())).optional(),desc:Je.bool(),limit:Je.number().integer().min(1),offset:Je.number().integer().min(0)}),tre=Je.object({database:kg,schema:kg,table:GF,operator:Je.string().valid("and","or").default("and").lowercase(),offset:Je.number().integer().min(0),limit:Je.number().integer().min(1),get_attributes:Je.array().min(1).items(Je.alternatives(hp,Je.object())).optional(),sort:Je.object({attribute:Je.alternatives(hp,Je.array().min(1)),descending:Je.bool().optional()}).optional(),conditions:Je.array().min(1).items(Je.alternatives(Je.object({operator:Je.string().valid("and","or").default("and").lowercase(),conditions:Je.array()}),Je.object({attribute:Je.alternatives(hp,Je.array().min(1)),comparator:Je.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Je.when("comparator",{switch:[{is:"equals",then:Je.any()},{is:"between",then:Je.array().items(Je.alternatives([Je.string(),Je.number()])).length(2)}],otherwise:Je.alternatives(Je.string(),Je.number())}).required()}))).required()});qF.exports=function(e,t){let r=null;switch(t){case"value":r=kF.validateBySchema(e,ere);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(HF("database",e.schema)),i(HF("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=kF.validateBySchema(e,tre);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=zte.checkGlobalSchemaTable(e.schema,e.table);if(s)return Jte(new Error,s,Zte.NOT_FOUND);let o=Xte()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=a(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=FF.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!FF.some(o,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var iw=M((XLe,$F)=>{"use strict";var rre=Et(),nre=ud(),{getSchemaPath:sre}=Rt();$F.exports=ire;function ire(e){let t=nre(e,"hashes");if(t)throw t;let r=sre(e.schema,e.table);return rre.openEnvironment(r,e.table)}a(ire,"initialize")});var ow=M((eDe,VF)=>{"use strict";var ore=ld(),are=iw();VF.exports=cre;async function cre(e){let t=await are(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return ore.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(cre,"lmdbGetDataByHash")});var dd=M((rDe,KF)=>{"use strict";var aw=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};KF.exports=aw});var WF=M((iDe,YF)=>{"use strict";var sDe=dd(),lre=ld(),ure=iw();YF.exports=dre;async function dre(e){let t=await ure(e),r=global.hdb_schema[e.schema][e.table];return lre.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(dre,"lmdbSearchByHash")});var di=M((aDe,jF)=>{"use strict";var cw=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};jF.exports=cw});var Hg=M((lDe,ek)=>{"use strict";var En=ld(),fre=Et(),mre=ae(),Qe=Jt(),Il=(G(),v(j)),pre=Zi(),zF=Jr().LMDB_ERRORS_ENUM,{getSchemaPath:hre}=Rt(),Jo=Il.SEARCH_WILDCARDS;async function Ere(e,t,r){let n;e.schema===Il.SYSTEM_SCHEMA_NAME?n=pre[e.table]:n=global.hdb_schema[e.schema][e.table];let s=ZF(e,n.hash_attribute,r,t);return QF(e,s,n.hash_attribute,r)}a(Ere,"prepSearch");async function QF(e,t,r,n){let s=hre(e.schema,e.table),i=await fre.openEnvironment(s,e.table),o=XF(i,e,t,r),c=o.transaction||i;if([Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Qe.SEARCH_TYPES.SEARCH_ALL,Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(_re(e,r)===!1){let d=e.attribute;if(d===r)return n?JF(o,()=>!0):o.map(m=>({[r]:m.key}));let f=a(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?JF(o,f):o.map(f)}let u=e.attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?En.batchSearchByHashToMap(c,r,e.get_attributes,u):En.batchSearchByHash(c,r,e.get_attributes,u)}a(QF,"executeSearch");function XF(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Qe.SEARCH_TYPES.EQUALS:s=En.equals(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.CONTAINS:s=En.contains(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.ENDS_WITH:case Qe.SEARCH_TYPES._ENDS_WITH:s=En.endsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.STARTS_WITH:case Qe.SEARCH_TYPES._STARTS_WITH:s=En.startsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return En.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return En.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.SEARCH_ALL:return En.searchAll(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return En.searchAllToMap(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.BETWEEN:s=En.between(e,i,t.attribute,t.value,t.end_value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN:case Qe.SEARCH_TYPES._GREATER_THAN:s=En.greaterThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Qe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=En.greaterThanEqual(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN:case Qe.SEARCH_TYPES._LESS_THAN:s=En.lessThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN_EQUAL:case Qe.SEARCH_TYPES._LESS_THAN_EQUAL:s=En.lessThanEqual(e,i,t.attribute,t.value,o,c,l);break;default:return Object.create(null)}return s}a(XF,"searchByType");function JF(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(JF,"createMapFromIterable");function _re(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(_re,"checkToFetchMore");function ZF(e,t,r,n){if(mre.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),Jo.indexOf(s)>-1)return r===!0?Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Qe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Jo[0])<0&&s.indexOf(Jo[1])<0)return c===!0?r===!0?Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Qe.SEARCH_TYPES.EQUALS;if(Jo.indexOf(i)>=0&&Jo.indexOf(o)>=0)return e.value=e.value.slice(1,-1),Qe.SEARCH_TYPES.CONTAINS;if(Jo.indexOf(i)>=0)return e.value=e.value.substr(1),Qe.SEARCH_TYPES.ENDS_WITH;if(Jo.indexOf(o)>=0)return e.value=e.value.slice(0,-1),Qe.SEARCH_TYPES.STARTS_WITH;if(s.includes(Jo[0])||s.includes(Jo[1]))return Qe.SEARCH_TYPES.EQUALS;throw new Error(zF.UNKNOWN_SEARCH_TYPE)}else switch(n){case Il.VALUE_SEARCH_COMPARATORS.BETWEEN:return Qe.SEARCH_TYPES.BETWEEN;case Il.VALUE_SEARCH_COMPARATORS.GREATER:return Qe.SEARCH_TYPES.GREATER_THAN;case Il.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Qe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Il.VALUE_SEARCH_COMPARATORS.LESS:return Qe.SEARCH_TYPES.LESS_THAN;case Il.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Qe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(zF.UNKNOWN_SEARCH_TYPE)}}a(ZF,"createSearchTypeFromSearchObject");ek.exports={executeSearch:QF,createSearchTypeFromSearchObject:ZF,prepSearch:Ere,searchByType:XF}});var rk=M((fDe,tk)=>{"use strict";var dDe=di(),gre=ud(),Sre=ae(),Tre=(G(),v(j)),yre=Hg();tk.exports=Rre;function Rre(e,t){if(!Sre.isEmpty(t)&&Tre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=gre(e,"value");if(n)throw n;return yre.prepSearch(e,t,!0)}a(Rre,"lmdbGetDataByValue")});var Ep=M((hDe,nk)=>{"use strict";var pDe=di(),bre=ud(),Are=ae(),Ire=(G(),v(j)),wre=Hg();nk.exports=Nre;async function Nre(e,t){if(!Are.isEmpty(t)&&Ire.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=bre(e,"value");if(n)throw n;return wre.prepSearch(e,t,!1)}a(Nre,"lmdbSearchByValue")});var ik=M((gDe,sk)=>{"use strict";var _De=Jt(),lw=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},uw=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},dw=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};sk.exports={SearchByConditionsObject:lw,SearchCondition:uw,SortAttribute:dw}});var uk=M((bDe,lk)=>{"use strict";var{SearchByConditionsObject:TDe,SearchCondition:yDe}=ik(),Cre=di(),Ore=ud(),fw=ld(),Gg=Jt(),{Resource:RDe}=(zi(),v(sB)),ck=Hg(),Pre=sw(),Lre=require("lodash"),{getSchemaPath:Dre}=Rt(),ok=Et(),{handleHDBError:vre,hdbErrors:Mre}=Ee(),{HTTP_STATUS_CODES:Ure}=Mre,xre=1e8;lk.exports=Bre;async function Bre(e){let t=Ore(e,"conditions");if(t)throw vre(t,t.message,Ure.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=Dre(e.schema,e.table),n=await ok.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)ok.openDBI(n,u.attribute);let i=Lre.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Gg.SEARCH_TYPES.EQUALS?u.estimated_count=fw.count(n,u.attribute,u.value):d===Gg.SEARCH_TYPES.CONTAINS||d===Gg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=xre}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await ak(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(ck.filterByType),f=d.length,m=fw.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:o,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>Pre.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await ak(o,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=fw.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(Bre,"lmdbSearchByConditions");async function ak(e,t,r,n){let s=new Cre(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Gg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,ck.searchByType(e,s,i,n).map(o=>o.value)}a(ak,"executeConditionSearch")});var _p=M((IDe,dk)=>{"use strict";var Fre=(G(),v(j)).OPERATIONS_ENUM,mw=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=Fre.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};dk.exports=mw});var pw=M((NDe,Sk)=>{"use strict";var hk=di(),Ek=_p(),_k=Ep(),gk=fp(),qn=(G(),v(j)),fk=ae(),mk=Et(),{getTransactionAuditStorePath:kre,getSchemaPath:Hre}=Rt(),pk=Q();Sk.exports=Gre;async function Gre(e){try{if(fk.isEmpty(global.hdb_schema[e.schema])||fk.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await qre(e),await $re(e);let t=Hre(e.schema,e.table);try{await mk.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")pk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=kre(e.schema,e.table);await mk.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")pk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Gre,"lmdbDropTable");async function qre(e){let t=new hk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await _k(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new Ek(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await gk(s)}a(qre,"deleteAttributesFromSystem");async function $re(e){let t=new hk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await _k(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new Ek(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await gk(s)}catch(i){throw i}}a($re,"dropTableFromSystem")});var yk=M((ODe,Tk)=>{"use strict";var Vre=require("fs-extra"),Kre=di(),Yre=dd(),Wre=_p(),jre=pw(),zre=fp(),Jre=ow(),Qre=Ep(),Qo=(G(),v(j)),{getSchemaPath:Xre}=Rt(),{handleHDBError:Zre,hdbErrors:ene}=Ee(),{HDB_ERROR_MSGS:tne,HTTP_STATUS_CODES:rne}=ene;Tk.exports=nne;async function nne(e){let t;try{t=await sne(e.schema);let r=new Kre(Qo.SYSTEM_SCHEMA_NAME,Qo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Qre(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await jre(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Wre(Qo.SYSTEM_SCHEMA_NAME,Qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await zre(s);let i=Xre(t);await Vre.remove(i)}catch(r){throw r}}a(nne,"lmdbDropSchema");async function sne(e){let t=new Yre(Qo.SYSTEM_SCHEMA_NAME,Qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Jre(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw Zre(new Error,tne.SCHEMA_NOT_FOUND(e),rne.NOT_FOUND,void 0,void 0,!0);return n}a(sne,"validateDropSchema")});var gp=M((LDe,Rk)=>{"use strict";var hw=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Rk.exports=hw});var _w=M((MDe,bk)=>{"use strict";var ine=require("fs-extra"),qg=Et(),{getTransactionAuditStorePath:one}=Rt(),Ew=Jt(),vDe=gp();bk.exports=ane;async function ane(e){let t;try{let r=one(e.schema,e.table);await ine.mkdirp(r),t=await qg.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{qg.createDBI(t,Ew.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),qg.createDBI(t,Ew.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),qg.createDBI(t,Ew.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(ane,"createTransactionsAuditEnvironment")});var wk=M((BDe,Ik)=>{"use strict";var gw=(G(),v(j)),Ak=Et(),cne=yl(),{getSystemSchemaPath:lne,getSchemaPath:une}=Rt(),xDe=Zi(),dne=vg(),Sw=Dg(),fne=Q(),mne=_w();Ik.exports=pne;async function pne(e,t){let r=une(t.schema,t.table),n=new Sw(t.schema,t.table,gw.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Sw(t.schema,t.table,gw.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Sw(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Ak.createEnvironment(r,t.table),e!==void 0){let o=await Ak.openEnvironment(lne(),gw.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await cne.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Tw(n),await Tw(s),await Tw(i)}await mne(t)}catch(o){throw o}}a(pne,"lmdbCreateTable");async function Tw(e){try{await dne(e)}catch(t){fne.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Tw,"createAttribute")});var Ck=M((kDe,Nk)=>{"use strict";var hne=lp(),Ene=Om(),_ne=Mg(),Sp=(G(),v(j)),gne=yl().updateRecords,Sne=Et(),{getSchemaPath:Tne}=Rt(),yne=up(),Rne=Q();Nk.exports=bne;async function bne(e){try{let{schemaTable:t,attributes:r}=hne(e);Ene(e,r,t.hash_attribute),e.schema!==Sp.SYSTEM_SCHEMA_NAME&&(r.includes(Sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await _ne(e.hdb_auth_header,t,r),s=Tne(e.schema,e.table),i=await Sne.openEnvironment(s,e.table),o=await gne(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await yne(e,o)}catch(c){Rne.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(bne,"lmdbUpdateRecords")});var Pk=M((GDe,Ok)=>{"use strict";var Ane=(G(),v(j)).OPERATIONS_ENUM,yw=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Ane.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Ok.exports=yw});var Dk=M((VDe,Lk)=>{"use strict";var $De=Pk(),Ine=lp(),wne=Om(),Nne=Mg(),Tp=(G(),v(j)),Cne=yl().upsertRecords,One=Et(),{getSchemaPath:Pne}=Rt(),Lne=up(),Dne=Q(),{handleHDBError:vne,hdbErrors:Mne}=Ee();Lk.exports=Une;async function Une(e){let t;try{t=Ine(e)}catch(l){throw vne(l,l.message,Mne.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;wne(e,n,r.hash_attribute),e.schema!==Tp.SYSTEM_SCHEMA_NAME&&(n.includes(Tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Nne(e.hdb_auth_header,r,n),i=Pne(e.schema,e.table),o=await One.openEnvironment(i,e.table),c=await Cne(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Lne(e,c)}catch(l){Dne.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}a(Une,"lmdbUpsertRecords")});var Mk=M((YDe,vk)=>{"use strict";var Rw=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};vk.exports=Rw});var xk=M((jDe,Uk)=>{"use strict";var bw=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};Uk.exports=bw});var kk=M((QDe,Fk)=>{"use strict";var Aw=Et(),{getTransactionAuditStorePath:xne}=Rt(),JDe=Mk(),yp=Jt(),Bne=ae(),Bk=xk(),Fne=require("util").promisify,kne=Fne(setTimeout),Hne=1e4,Gne=100;Fk.exports=qne;async function qne(e){let t=xne(e.schema,e.table),r=await Aw.openEnvironment(t,e.table,!0),n=Aw.listDBIs(r);Aw.initializeDBIs(r,yp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new Bk;do s=await $ne(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 kne(Gne);while(s.transactions_deleted>0);return i}a(qne,"deleteAuditLogsBefore");async function $ne(e,t){let r=new Bk;try{let n=e.dbis[yp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[yp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Bne.isEmpty(c)||(s=e.dbis[yp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[yp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Hne)break}return await s,r}catch(n){throw n}}a($ne,"deleteTransactions")});var Gk=M((ZDe,Hk)=>{"use strict";var Iw=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};Hk.exports=Iw});var $k=M((rve,qk)=>{"use strict";var Vne=di(),Kne=_p(),tve=Gk(),eo=(G(),v(j)),Yne=ae(),ww=Et(),Wne=Zi(),jne=Ep(),zne=fp(),{getSchemaPath:Jne}=Rt();qk.exports=Qne;async function Qne(e,t=!0){let r;e.schema===eo.SYSTEM_SCHEMA_NAME?r=Wne[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Zne(e),s=Jne(e.schema,e.table),i=await ww.openEnvironment(s,e.table);return t===!0&&await Xne(e,i,r.hash_attribute),ww.dropDBI(i,e.attribute),n}a(Qne,"lmdbDropAttribute");async function Xne(e,t,r){let n=ww.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(Xne,"removeAttributeFromAllObjects");async function Zne(e){let t=new Vne(eo.SYSTEM_SCHEMA_NAME,eo.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,eo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[eo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,eo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await jne(t)).filter(o=>o[eo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Yne.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(o=>o[eo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Kne(eo.SYSTEM_SCHEMA_NAME,eo.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return zne(i)}a(Zne,"dropAttributeFromSystem")});var zk=M((ive,jk)=>{"use strict";var Nw=Et(),fd=Jt(),sve=Un(),Cw=(G(),v(j)),Vk=ae(),{getTransactionAuditStorePath:ese}=Rt(),tse=ld(),$g=od(),rse=Q();jk.exports=nse;async function nse(e){let t=ese(e.schema,e.table),r=await Nw.openEnvironment(t,e.table,!0),n=Nw.listDBIs(r);Nw.initializeDBIs(r,fd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Cw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Kk(r,e.search_values);case Cw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,ise(r,e.search_values,s);case Cw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return sse(r,e.search_values);default:return Kk(r)}}a(nse,"readAuditLog");function Kk(e,t=[0,Date.now()]){Vk.isEmpty(t[0])&&(t[0]=0),Vk.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[fd.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 $g,s))}a(Kk,"searchTransactionsByTimestamp");function sse(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[fd.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Wk(e,i))}return Object.fromEntries(r)}a(sse,"searchTransactionsByUsername");function ise(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=tse.equals(e,fd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,fd.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=Wk(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);Yk(l,"records",r,d,o),Yk(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(ise,"searchTransactionsByHashValues");function Yk(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new $g(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new $g(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(Yk,"loopRecords");function Wk(e,t){let r=[];try{let n=e.dbis[fd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new $g,i);r.push(o)}}catch(i){rse.warn(i)}return r}catch(n){throw n}}a(Wk,"batchSearchTransactions")});var Qk=M((lve,Jk)=>{"use strict";var{getSchemaPath:ave}=Rt(),cve=Et(),{database:ose}=(Oe(),v(ft));Jk.exports={writeTransaction:ase};async function ase(e,t,r){return ose({database:e,table:t}).transaction(r)}a(ase,"writeTransaction")});var tH=M((dve,eH)=>{"use strict";var{getSchemaPath:Xk}=Rt(),Zk=Et();eH.exports={flush:cse,resetReadTxn:lse};async function cse(e,t){return(await Zk.openEnvironment(Xk(e,t),t.toString())).flushed}a(cse,"flush");async function lse(e,t){try{(await Zk.openEnvironment(Xk(e,t),t.toString())).resetReadTxn()}catch{}}a(lse,"resetReadTxn")});var iH=M((mve,sH)=>{"use strict";var{Readable:use}=require("stream"),{getDatabases:dse}=(Oe(),v(ft)),{readSync:fse,openSync:mse,createReadStream:rH}=require("fs"),{open:pse}=require("lmdb"),{OpenDBIObject:nH}=sp(),hse=ip(),{AUDIT_STORE_OPTIONS:Ese}=($i(),v(l0)),{INTERNAL_DBIS_NAME:_se,AUDIT_STORE_NAME:gse}=Jt();sH.exports=Tse;var Ow=32768,Sse=100;async function Tse(e){let t=e.database||e.schema||"data",r=dse()[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=pse({noSync:!0,maxDbs:hse.MAX_DBS}),m,p=f.openDB(_se,new nH(!1)),h=d.useReadTransaction(),E=0,_=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let w=f.openDB(S,y),I=d.openDB(S,y);for(let{key:H,version:X,value:q}of I.getRange({start:null,transaction:h,versions:I.useVersions}))m=w.put(H,q,X),E++%Sse===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(w=>S.startsWith?.(w+"/"))){p.put(S,y);let[,w]=S.split("/"),I=!w,H=new nH(!I,I);await _(S,H)}e.include_audit&&await _(gse,{...Ese}),await m;let R=rH(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=mse(o.path);return o.transaction(()=>{let u=Buffer.alloc(Ow);fse(c,u,0,Ow),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let f=rH(null,{fd:c,start:Ow}),m=new use.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(Tse,"getBackup")});var cH=M((hve,aH)=>{"use strict";var yse=Q(),{handleHDBError:Rse}=Ee(),bse=FB(),Ase=vg(),Ise=ZI(),wse=yF(),Nse=fp(),Cse=ow(),Ose=WF(),Pse=rk(),Lse=Ep(),Dse=uk(),vse=yk(),Mse=wk(),Use=Ck(),xse=Dk(),Bse=kk(),Fse=pw(),kse=$k(),Hse=zk(),Gse=Qk(),oH=tH(),qse=iH(),Pw=class extends bse{static{a(this,"LMDBBridge")}async searchByConditions(t){return Dse(t)}async getDataByHash(t){return await Cse(t)}async searchByHash(t){return await Ose(t)}async getDataByValue(t,r){return await Pse(t,r)}async searchByValue(t){return await Lse(t)}async createSchema(t){return await wse(t)}async dropSchema(t){return await vse(t)}async createTable(t,r){return await Mse(t,r)}async dropTable(t){return await Fse(t)}async createAttribute(t){return await Ase(t)}async createRecords(t){return await Ise(t)}async updateRecords(t){return await Use(t)}async upsertRecords(t){try{return await xse(t)}catch(r){throw Rse(r,null,null,yse.ERR,r)}}async deleteRecords(t){return await Nse(t)}async dropAttribute(t){return await kse(t)}async deleteAuditLogsBefore(t){return await Bse(t)}async readAuditLog(t){return await Hse(t)}writeTransaction(t,r,n){return Gse.writeTransaction(t,r,n)}flush(t,r){return oH.flush(t,r)}resetReadTxn(t,r){return oH.resetReadTxn(t,r)}getBackup(t){return qse(t)}};aH.exports=Pw});function $n(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function bp(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=a(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"ID":d=a(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Float":case"Number":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a number, attempt to assign ${p}`);$n(this)[u]=m},"set");break;case"Int":d=a(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Long":d=a(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"BigInt":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be a number, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Boolean":d=a(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a boolean, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Date":d=a(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ds.ClientError(`${u} must be a Date, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Bytes":d=a(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Blob":d=a(function(m){if(!(m instanceof Ds||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Blob, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Any":case void 0:d=a(function(m){$n(this)[u]=m},"set");break;default:d=a(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be an object, attempt to assign ${m}`);$n(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=Lw(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}o("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),o("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ds.ClientError("Can not add a property to a sealed table schema");$n(this)[l]=u}),o("deleteProperty",function(l){$n(this)[l]=void 0}),o("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||o("get",n.getProperty),n.delete||o("delete",n.deleteProperty),n.then||o("then",null);function o(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}a(o,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?dH:uH);break}c=l}while(c&&c!==uH&&c!==dH)}function fH(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(lH[t])return lH[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=Lw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function $se(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 Lw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends Nl{static{a(this,"TrackedObject")}},bp(r,t)),new r(e)):new Nl(e);case Array:let n=new Kg(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Lw(o,t?.elements)),n[s]=o}return n;default:return e}}function Yg(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Yg(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 Cl(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Cl(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=TA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Cl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Vse.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Vg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[wl]||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(Vg(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(Vg(s))return!0}else return!0}else return!0}}return!1}var ds,lH,uH,dH,Nl,Vse,wl,Kg,Rp,Dw=se(()=>{ds=b(Ee());F_();ss();a($n,"getChanges");a(bp,"assignTrackedAccessors");lH=Object.prototype,uH=new Proxy({},{get:fH}),dH=new Proxy({},{get:fH,set:$se});a(fH,"getProxiedProperty");a($se,"setProxiedProperty");a(Lw,"trackObject");Nl=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};bp(Nl,{},!0);a(Yg,"collapseData");Vse=Object.prototype.hasOwnProperty;a(Cl,"updateAndFreeze");a(Vg,"hasChanges");wl=Symbol.for("has-array-changes"),Kg=class extends Array{static{a(this,"TrackedArray")}#e;[wl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[wl]=!0,super.splice(...t)}push(...t){return this[wl]=!0,super.push(...t)}pop(){return this[wl]=!0,super.pop()}unshift(...t){return this[wl]=!0,super.unshift(...t)}shift(){return this[wl]=!0,super.shift()}};Kg.prototype.constructor=Array;Rp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var TH={};ye(TH,{ResourceBridge:()=>Uw});function xw({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 mH(e,t){let r=to(e),n=xw(e,r);if(!r)throw new fi.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;bt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&Yg(d)}catch(f){d={message:(0,SH.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function to(e){let t=e.database||e.schema||Yse,r=lt()[t];if(!r)throw(0,fi.handleHDBError)(new Error,Kse.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function pH(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*hH(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var EH,Wg,fi,_H,vw,Mw,gH,SH,Kse,Yse,Wse,jse,Uw,yH=se(()=>{EH=b(cH()),Wg=b(ud()),fi=b(Ee());Oe();_H=b(lp());G();vw=b(zo()),Mw=b(ls()),gH=b(ae());ja();Dw();SH=b(Q()),{HDB_ERROR_MSGS:Kse}=fi.hdbErrors,Yse="data",Wse=1e4,jse=10,Uw=class extends EH.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=to(t);if(!r)throw new fi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let o=i;return{attribute:o.attribute??o.search_attribute,comparator:o.comparator??o.search_type,value:o.value!==void 0?o.value:o.search_value}}}a(n,"mapCondition");let s=(0,Wg.default)(t,"conditions");if(s)throw(0,fi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:xw(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new fi.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}]}ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await to(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=to(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(o);return i(o,d,f)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return to(t).dropTable()}createSchema(t){return md({database:t.schema,table:null}),vw.signalSchemaChange(new Mw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Bw(t.schema),vw.signalSchemaChange(new Mw.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,_H.default)(t),s,i=lt()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),bt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,o);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Yg(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=lt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),bt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return pH(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=lt()[t.schema][t.table];if(!r.createdTimeProperty)throw new fi.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:g_.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,gH.asyncSetTimeout)(jse),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Wse===0&&await u();return l.length>0&&await u(),s?pH(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Wg.default)(t,"hashes");if(r)throw r;return mH(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of mH(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&nA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,Wg.default)(t,"value");if(n)throw n;let s=to(t);if(!s)throw new fi.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===g_.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:xw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=to(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){to({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return to(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=to(t),n={};switch(t.search_type){case S_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let o=i.operation??i.type;return o==="put"&&(o="upsert"),{operation:o,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case S_.USERNAME:{let s=t.search_values;for await(let i of hH(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return hH(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(xw,"getSelect");a(mH,"getRecords");a(to,"getTable");a(pH,"createDeleteResponse");a(hH,"groupRecordsInHistory")});var fs=M((wve,RH)=>{"use strict";var{ResourceBridge:zse}=(yH(),v(TH)),Jse=fe();Jse.initSync();var jg;function Qse(){return jg||(jg=new zse,jg)}a(Qse,"getBridge");RH.exports=Qse()});var ro=M((Cve,IH)=>{var Xse=Zi(),{promisify:Zse}=require("util"),{getDatabases:AH}=(Oe(),v(ft));IH.exports={setSchemaDataToGlobal:bH,getTableSchema:eie,getSystemSchema:tie,setSchemaDataToGlobalAsync:Zse(bH)};function bH(e){global.hdb_schema=AH(),e&&e()}a(bH,"setSchemaDataToGlobal");function eie(e,t,r){let n=AH()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(eie,"getTableSchema");function tie(){return Xse}a(tie,"getSystemSchema")});var Vn=M((Pve,OH)=>{"use strict";var Jg=UI(),rn=ae(),rie=require("util"),Qg=fs(),nie=ro(),wH=Q(),{handleHDBError:Ol,hdbErrors:sie}=Ee(),{HTTP_STATUS_CODES:Pl}=sie,iie=rie.promisify(nie.getTableSchema),oie="updated",NH="inserted",CH="upserted";OH.exports={insert:cie,update:lie,upsert:uie,validation:aie,flush:die};async function aie(e){if(rn.isEmpty(e))throw new Error("invalid update parameters defined.");if(rn.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(rn.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await iie(e.schema,e.table),r=Jg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&rn.isEmptyOrZeroLength(c[n]))throw wH.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(!rn.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw wH.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!rn.isEmpty(c[n])&&c[n]!==""&&s.has(rn.autoCast(c[n]))&&(c.skip=!0),s.add(rn.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(aie,"validation");async function cie(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Jg(e);if(t)throw Ol(new Error,t.message,Pl.BAD_REQUEST);rn.transformReq(e);let r=rn.checkSchemaTableExist(e.schema,e.table);if(r)throw Ol(new Error,r,Pl.BAD_REQUEST);let n=await Qg.createRecords(e);return zg(NH,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(cie,"insertData");async function lie(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Jg(e);if(t)throw Ol(new Error,t.message,Pl.BAD_REQUEST);rn.transformReq(e);let r=rn.checkSchemaTableExist(e.schema,e.table);if(r)throw Ol(new Error,r,Pl.BAD_REQUEST);let n=await Qg.updateRecords(e);return rn.isEmpty(n.existing_rows)?zg(oie,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):zg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(lie,"updateData");async function uie(e){if(e.operation!=="upsert")throw Ol(new Error,"invalid operation, must be upsert",Pl.INTERNAL_SERVER_ERROR);let t=Jg(e);if(t)throw Ol(new Error,t.message,Pl.BAD_REQUEST);rn.transformReq(e);let r=rn.checkSchemaTableExist(e.schema,e.table);if(r)throw Ol(new Error,r,Pl.BAD_REQUEST);let n=await Qg.upsertRecords(e);return zg(CH,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(uie,"upsertData");function zg(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===NH?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===CH?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(zg,"returnObject");function die(e){return rn.transformReq(e),Qg.flush(e.schema,e.table)}a(die,"flush")});var kw=M((Dve,DH)=>{var fie=mt(),Fw=require("joi"),{hdbTable:mie,hdbDatabase:PH}=Qi(),LH={schema:PH,database:PH,table:mie},pie={date:Fw.date().iso().required()},hie={timestamp:Fw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};DH.exports=function(e,t){let r=t==="timestamp"?{...LH,...hie}:{...LH,...pie},n=Fw.object(r);return fie.validateBySchema(e,n)}});var UH=M((vve,MH)=>{var Eie=mt(),Hw=require("joi"),{hdbTable:_ie,hdbDatabase:vH}=Qi(),gie=Hw.object({schema:vH,database:vH,table:_ie,hash_values:Hw.array().required(),ids:Hw.array()});MH.exports=function(e){return Eie.validateBySchema(e,gie)}});var Vw=M((Mve,xH)=>{"use strict";var Gw=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},qw=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=o}},$w=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};xH.exports={InsertObject:Gw,NoSQLSeachObject:qw,DeleteResponseObject:$w}});var vl=M((xve,GH)=>{"use strict";var FH=kw(),Sie=UH(),Ll=ae(),BH=require("moment"),kH=Q(),{promisify:Tie,callbackify:yie}=require("util"),Dl=(G(),v(j)),Rie=ro(),Kw=Tie(Rie.getTableSchema),Yw=fs(),{DeleteResponseObject:bie}=Vw(),{handleHDBError:oc,hdbErrors:Aie}=Ee(),{HDB_ERROR_MSGS:Xg,HTTP_STATUS_CODES:ac}=Aie,Iie="records successfully deleted",wie=yie(HH);GH.exports={delete:wie,deleteRecord:HH,deleteFilesBefore:Nie,deleteAuditLogsBefore:Cie};async function Nie(e){let t=FH(e,"date");if(t)throw oc(t,t.message,ac.BAD_REQUEST,void 0,void 0,!0);if(Ll.transformReq(e),!BH(e.date,BH.ISO_8601).isValid())throw oc(new Error,Xg.INVALID_DATE,ac.BAD_REQUEST,Dl.LOG_LEVELS.ERROR,Xg.INVALID_DATE,!0);let n=Ll.checkSchemaTableExist(e.schema,e.table);if(n)throw oc(new Error,n,ac.NOT_FOUND,Dl.LOG_LEVELS.ERROR,n,!0);let s=await Yw.deleteRecordsBefore(e);if(await Kw(e.schema,e.table),kH.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(Nie,"deleteFilesBefore");async function Cie(e){let t=FH(e,"timestamp");if(t)throw oc(t,t.message,ac.BAD_REQUEST,void 0,void 0,!0);if(Ll.transformReq(e),isNaN(e.timestamp))throw oc(new Error,Xg.INVALID_VALUE("Timestamp"),ac.BAD_REQUEST,Dl.LOG_LEVELS.ERROR,Xg.INVALID_VALUE("Timestamp"),!0);let r=Ll.checkSchemaTableExist(e.schema,e.table);if(r)throw oc(new Error,r,ac.NOT_FOUND,Dl.LOG_LEVELS.ERROR,r,!0);let n=await Yw.deleteAuditLogsBefore(e);return await Kw(e.schema,e.table),kH.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Cie,"deleteAuditLogsBefore");async function HH(e){e.ids&&(e.hash_values=e.ids);let t=Sie(e);if(t)throw oc(t,t.message,ac.BAD_REQUEST,void 0,void 0,!0);Ll.transformReq(e);let r=Ll.checkSchemaTableExist(e.schema,e.table);if(r)throw oc(new Error,r,ac.NOT_FOUND,Dl.LOG_LEVELS.ERROR,r,!0);try{await Kw(e.schema,e.table);let n=await Yw.deleteRecords(e);return Ll.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Iie}`),n}catch(n){if(n.message===Dl.SEARCH_NOT_FOUND_MESSAGE){let s=new bie;return s.message=Dl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(HH,"deleteRecord")});var Qw={};ye(Qw,{HASH_FUNCTION:()=>$r,hash:()=>zw,validate:()=>Jw});function Ww(e=Ip){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Ap.randomBytes(e)).map(r=>t[r%t.length]).join("")}function zw(e,t=$r[$H?.toUpperCase()]??$r.SHA256){return jw[t](e)}function Jw(e,t,r=$r[$H?.toUpperCase()]??$r.SHA256){return e?Oie[r](e,t):!1}var Ap,pd,qH,$H,Ip,VH,$r,jw,Oie,Xw=se(()=>{Ap=b(require("node:crypto")),pd=b(require("argon2")),qH=b(fe());G();$H=(0,qH.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Ip=16,VH=9,$r={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(Ww,"generateSalt");jw={[$r.MD5]:(e,t=void 0)=>{t=t??Ww(VH);let r=Ap.createHash($r.MD5).update(e+t).digest("hex");return t+r},[$r.SHA256]:(e,t=void 0)=>{t=t??Ww(Ip);let r=Ap.createHash($r.SHA256).update(e+t).digest("hex");return t+r},[$r.ARGON2ID]:async e=>{let t=Ww(Ip),r=await pd.hash(e,{type:pd.argon2id,salt:Buffer.from(t)});return t+r}},Oie={[$r.MD5]:(e,t)=>{let r=e.slice(0,VH);return e===jw[$r.MD5](t,r)},[$r.SHA256]:(e,t)=>{let r=e.slice(0,Ip);return e===jw[$r.SHA256](t,r)},[$r.ARGON2ID]:async(e,t)=>await pd.verify(e.slice(Ip),t)};a(zw,"hash");a(Jw,"validate")});var YH=M((Hve,KH)=>{var Zw=mt(),_n={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Pie(e){return _n.password.presence=!0,_n.username.presence=!0,_n.role.presence=!0,_n.active.presence=!0,Zw.validateObject(e,_n)}a(Pie,"addUserValidation");function Lie(e){return _n.password.presence=!1,_n.username.presence=!0,_n.role.presence=!1,_n.active.presence=!1,Zw.validateObject(e,_n)}a(Lie,"alterUserValidation");function Die(e){return _n.password.presence=!1,_n.username.presence=!0,_n.role.presence=!1,_n.active.presence=!1,Zw.validateObject(e,_n)}a(Die,"dropUserValidation");KH.exports={addUserValidation:Pie,alterUserValidation:Lie,dropUserValidation:Die}});var iG=M(($ve,sG)=>{"use strict";var eN=require("recursive-iterator"),vie=require("alasql"),tN=require("clone"),WH=ae(),{handleHDBError:jH,hdbErrors:Mie}=Ee(),{HDB_ERROR_MSGS:zH,HTTP_STATUS_CODES:JH}=Mie,{getDatabases:Uie}=(Oe(),v(ft)),xie=["DISTINCT_ARRAY"],QH=Symbol("validateTables"),rN=Symbol("validateTable"),qve=Symbol("getAllColumns"),XH=Symbol("validateAllColumns"),Zg=Symbol("findColumn"),ZH=Symbol("validateOrderBy"),wp=Symbol("validateSegment"),nN=Symbol("validateColumn"),eG=Symbol("setColumnsForTable"),tG=Symbol("checkColumnsForAsterisk"),rG=Symbol("validateGroupBy"),nG=Symbol("hasColumns"),sN=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[QH](),this[tG](),this[XH]()}[QH](){if(this[nG]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[rN](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[rN](t.table)})}}[nG](){let t=!1,r=new eN(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[rN](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Uie();if(!r[t.databaseid])throw jH(new Error,zH.SCHEMA_NOT_FOUND(t.databaseid),JH.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw jH(new Error,zH.TABLE_NOT_FOUND(t.databaseid,t.tableid),JH.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=tN(s);i.table=tN(t),this.attributes.push(i)})}[Zg](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)}[tG](){let t=new eN(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[eG](r.tableid)}[eG](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new vie.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[XH](){this[wp](this.statement.columns,!1),this[wp](this.statement.joins,!1),this[wp](this.statement.where,!1),this[rG](this.statement.group,!1),this[wp](this.statement.order,!0)}[wp](t,r){if(!t)return;let n=new eN(t),s=[];for(let{node:i,path:o}of n)!WH.isEmpty(i)&&!WH.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ZH](i):s.push(this[nN](i)));return s}[rG](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&xie.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=tN(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Zg](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Zg](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[ZH](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[nN](t)}[nN](t){let r=this[Zg](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]}};sG.exports=sN});var lG=M((Kve,cG)=>{"use strict";var oG=require("lodash"),Np=require("mathjs"),Bie=require("jsonata"),aG=ae();cG.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?oG.uniqWith(e,oG.isEqual):e,"distinct_array"),searchJSON:Fie,mad:Cp.bind(null,Np.mad),mean:Cp.bind(null,Np.mean),mode:Cp.bind(null,Np.mode),prod:Cp.bind(null,Np.prod),median:Cp.bind(null,Np.median)};function Cp(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Cp,"aggregateFunction");function Fie(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(aG.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),aG.isEmpty(this.__ala__.res[r])){let n=Bie(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(Fie,"searchJSON")});var dG=M((Wve,uG)=>{"use strict";var mr=require("moment"),iN="YYYY-MM-DDTHH:mm:ss.SSSZZ";mr.suppressDeprecationWarnings=!0;uG.exports={current_date:a(()=>mr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>mr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return mr(e).utc().format("YYYY");case"month":return mr(e).utc().format("MM");case"day":return mr(e).utc().format("DD");case"hour":return mr(e).utc().format("HH");case"minute":return mr(e).utc().format("mm");case"second":return mr(e).utc().format("ss");case"millisecond":return mr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>mr(e).utc().format(iN),"date"),date_format:a((e,t)=>mr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>mr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>mr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=mr(e).utc(),s=mr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>mr().utc().valueOf(),"now"),get_server_time:a(()=>mr().format(iN),"get_server_time"),offset_utc:a((e,t)=>mr(e).utc().utcOffset(t).format(iN),"offset_utc")}});var hG=M((zve,pG)=>{"use strict";var kie=require("@turf/area"),Hie=require("@turf/length"),Gie=require("@turf/circle"),qie=require("@turf/difference"),$ie=require("@turf/distance"),Vie=require("@turf/boolean-contains"),Kie=require("@turf/boolean-equal"),Yie=require("@turf/boolean-disjoint"),Wie=require("@turf/helpers"),fG=(G(),v(j)),Ze=ae(),Xo=Q();pG.exports={geoArea:jie,geoLength:zie,geoCircle:Jie,geoDifference:Qie,geoDistance:mG,geoNear:Xie,geoContains:Zie,geoEqual:eoe,geoCrosses:toe,geoConvert:roe};function jie(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return kie.default(e)}catch(t){return Xo.trace(t,e),NaN}}a(jie,"geoArea");function zie(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return Hie.default(e,{units:t||"kilometers"})}catch(r){return Xo.trace(r,e),NaN}}a(zie,"geoLength");function Jie(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return Gie.default(e,t,{units:r||"kilometers"})}catch(n){return Xo.trace(n,e,t),NaN}}a(Jie,"geoCircle");function Qie(e,t){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return qie(e,t)}catch(r){return Xo.trace(r,e,t),NaN}}a(Qie,"geoDifference");function mG(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return $ie.default(e,t,{units:r||"kilometers"})}catch(n){return Xo.trace(n,e,t),NaN}}a(mG,"geoDistance");function Xie(e,t,r,n){if(Ze.isEmpty(e)||Ze.isEmpty(t))return!1;if(Ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return mG(e,t,n)<=r}catch(s){return Xo.trace(s,e,t),!1}}a(Xie,"geoNear");function Zie(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Vie.default(e,t)}catch(r){return Xo.trace(r,e,t),!1}}a(Zie,"geoContains");function eoe(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Kie.default(e,t)}catch(r){return Xo.trace(r,e,t),!1}}a(eoe,"geoEqual");function toe(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return!Yie.default(e,t)}catch(r){return Xo.trace(r,e,t),!1}}a(toe,"geoCrosses");function roe(e,t,r){if(Ze.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ze.isEmpty(t))throw new Error("geo_type is required");if(Ze.isEmpty(fG.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(fG.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),Wie[t](e,r)}a(roe,"geoConvert")});var eS=M((Qve,EG)=>{var Ml=lG(),ms=dG(),no=hG();EG.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=ms.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ms.current_time,e.fn.extract=e.fn.EXTRACT=ms.extract,e.fn.date=e.fn.DATE=ms.date,e.fn.date_format=e.fn.DATE_FORMAT=ms.date_format,e.fn.date_add=e.fn.DATE_ADD=ms.date_add,e.fn.date_sub=e.fn.DATE_SUB=ms.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ms.date_diff,e.fn.now=e.fn.NOW=ms.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ms.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ms.get_server_time,e.fn.getdate=e.fn.GETDATE=ms.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ms.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=no.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=no.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=no.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=no.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=no.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=no.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=no.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=no.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=no.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=no.geoNear}});var TG=M((Xve,SG)=>{"use strict";var Op=require("lodash"),Kn=require("alasql");Kn.options.cache=!1;var noe=eS(),_G=require("clone"),tS=require("recursive-iterator"),Ve=Q(),it=ae(),hd=fs(),soe=(G(),v(j)),{hdbErrors:ioe}=Ee(),{getDatabases:gG}=(Oe(),v(ft)),ooe="IS NULL",mi="There was a problem performing this search. Please check the logs and try again.";noe(Kn);var oN=class{static{a(this,"SQLSearch")}constructor(t,r){if(it.isEmpty(t))throw Ve.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),it.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!it.isEmptyOrZeroLength(n))return Ve.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ve.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ve.error(n),new Error(mi)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ve.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ve.error(n),new Error(mi)}if(Object.keys(this.data).length===0)return Ve.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ve.error("Error thrown from processJoins in SQLSearch class method search."),Ve.error(n),new Error(mi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ve.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ve.error(n),new Error(mi)}try{return t=await this._finalSQL(),t}catch(n){throw Ve.error("Error thrown from finalSQL in SQLSearch class method search."),Ve.error(n),new Error(mi)}}_getColumns(){let t=new tS(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(_G(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Op.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=gG()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(it.isEmpty(this.statement.where)){Ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new tS(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!it.isEmpty(r)&&r.right)if(it.isNotEmptyAndHasValue(r.right.value)){let n=it.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Kn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=it.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Kn.yy.LogicValue({value:i}):n instanceof Kn.yy.StringValue&&it.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Kn.yy.NumValue({value:i}))});if(t){Ve.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new tS(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!it.isEmpty(soe.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(it.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(it.isEmptyOrZeroLength(r.left.columnid)||it.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(it.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!it.isEmpty(r.right.value)||!it.isEmpty(r.left.value)?n.add(it.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from)&&it.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Op.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(it.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);it.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(it.isEmptyOrZeroLength(this.all_table_attributes)&&!it.isEmptyOrZeroLength(this.columns.columns))return t;if(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Kn.promise(r)}catch(r){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ve.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(_G(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(it.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(ooe)>-1&&this.tables.forEach(s=>{let i={columnid:gG()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Op.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hashName;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!it.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await hd.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 Ve.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(mi)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await hd.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(mi)}else if(!it.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await hd.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,_]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ve.error(d),new Error(mi)}else try{c.attribute=s.attribute,c.value="*";let d=await hd.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 Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ve.error(d),new Error(mi)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Kn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Kn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Kn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Kn.yy.FuncValue:new Kn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let o=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;o.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Kn.promise(h,t),t=null}catch(p){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ve.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];o.forEach(_=>{E[_.key]!==null&&E[_.key]!==void 0&&_.keys.add(E[_.key])})}o.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=Op.difference(h,[...p.keys].map(_=>_.toString()));for(let _=0,R=E.length;_<R;_++){let S=E[_];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new tS(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=Op.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 Ve.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ve.error(i),new Error(mi)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await hd.getDataByHash(c),u=s.columns.length;for(let d=0,f=o.length;d<f;d++){let m=o[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],_=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(_)}}}}catch(r){throw Ve.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ve.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ve.trace(`Final SQL: ${s}`),n=await Kn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ve.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ve.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 Ve.error(ioe.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ve.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let o=await hd.getDataByValue(i);for(let[c,l]of o)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ve.error("There was an error when processing this SQL operation. Check your logs"),Ve.error(o),new Error(mi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};SG.exports=oN});var gn=M((eMe,yG)=>{"use strict";yG.exports={searchByConditions:aoe,searchByHash:coe,searchByValue:loe,search:uoe};var aN=fs(),{transformReq:cN}=ae();async function aoe(e){return cN(e),aN.searchByConditions(e)}a(aoe,"searchByConditions");async function coe(e){cN(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of aN.searchByHash(e))r&&t.push(r);return t}a(coe,"searchByHash");async function loe(e){cN(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of aN.searchByValue(e))t.push(r);return t}a(loe,"searchByValue");function uoe(e,t){try{let r=iG(),n=TG(),s=new r(e);s.validate(),new n(s.statement,s.attributes).search().then(o=>{t(null,o)}).catch(o=>{t(o,null)})}catch(r){return t(r)}}a(uoe,"search")});var so=M((rMe,IG)=>{"use strict";var Pp=require("crypto"),doe=fe(),{CONFIG_PARAMS:foe}=(G(),v(j)),bG="aes-256-cbc",moe=32,poe=16,lN=64,AG=32,hoe=lN+AG,RG=new Map;IG.exports={encrypt:Eoe,decrypt:_oe,createNatsTableStreamName:goe};function Eoe(e){let t=Pp.randomBytes(moe),r=Pp.randomBytes(poe),n=Pp.createCipheriv(bG,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(Eoe,"encrypt");function _oe(e){let t=e.substr(0,lN),r=e.substr(lN,AG),n=e.substr(hoe,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Pp.createDecipheriv(bG,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(_oe,"decrypt");function goe(e,t){let r=doe.get(foe.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=RG.get(r);return n||(n=Pp.createHash("md5").update(r).digest("hex"),RG.set(r,n)),n}a(goe,"createNatsTableStreamName")});var Pt=M((iMe,NG)=>{"use strict";var{platform:sMe}=require("os"),Soe="nats-server.zip",uN="nats-server",Toe=process.platform==="win32"?`${uN}.exe`:uN,yoe=/^[^\s.,*>]+$/,wG="__request__",Roe=a(e=>`${e}.${wG}`,"REQUEST_SUBJECT"),boe={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Aoe={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Ioe={HUB:"hub.pid",LEAF:"leaf.pid"},woe={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Noe={SUCCESS:"success",ERROR:"error"},Coe={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Ooe={TXN:"txn",MSGID:"msgid"},Ed={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Poe={[Ed.ERR]:1,[Ed.WRN]:2,[Ed.INF]:3,[Ed.DBG]:4,[Ed.TRC]:5},Loe={debug:"-D",trace:"-DVV"};NG.exports={NATS_SERVER_ZIP:Soe,NATS_SERVER_NAME:uN,NATS_BINARY_NAME:Toe,PID_FILES:Ioe,NATS_CONFIG_FILES:Aoe,SERVER_SUFFIX:woe,NATS_TERM_CONSTRAINTS_RX:yoe,REQUEST_SUFFIX:wG,UPDATE_REMOTE_RESPONSE_STATUSES:Noe,CLUSTER_STATUS_STATUSES:Coe,REQUEST_SUBJECT:Roe,SUBJECT_PREFIXES:Ooe,MSG_HEADERS:boe,LOG_LEVELS:Ed,LOG_LEVEL_FLAGS:Loe,LOG_LEVEL_HIERARCHY:Poe}});var dN=M(Sn=>{"use strict";var Doe={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
10
+ `},"serialize"),compressible:!1,q:.8});hn.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});vx={type:"application/json",serializeStream:vm,serialize:Mm,deserialize:WZ,q:.5};hn.set("*/*",vx);hn.set("",vx);a(WZ,"tryJSONParse");a(xm,"registerContentHandlers");jZ=(0,Lx.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=q_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});a(q_,"findBestSerializer");wx=IA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Bm,"serialize");a(Ho,"serializeMessage");a(OA,"asyncSerialization");a(PA,"hasAsyncSerialization");a(zZ,"streamToBuffer");JZ=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(QZ,"isBufferEncoding");a(XZ,"parseContentType");a(Go,"getDeserializer");a(ZZ,"deserializerUnknownType");a(e9,"transformIterable");a(G_,"toCsvStream")});var J_={};ye(J_,{Blob:()=>Ds,blobsWereEncoded:()=>ol,cleanupOrphans:()=>p9,databasePaths:()=>DA,decodeBlobsWithWrites:()=>z_,decodeFromDatabase:()=>Vo,decodeWithBlobCallback:()=>Gm,deleteBlob:()=>Y_,deleteBlobsInObject:()=>Ja,deleteRootBlobPathsForDB:()=>UA,encodeBlobsAsBuffers:()=>d9,encodeBlobsWithFilePath:()=>j_,findBlobsInObject:()=>il,getFileId:()=>W_,getFilePathForBlob:()=>Vx,getRootBlobPathsForDB:()=>Vu,isSaving:()=>i9,saveBlob:()=>Hm,setDeletionDelay:()=>s9,startPreCommitBlobsForRecord:()=>xA});function qx(){}function Y_(e){let t=Vx(e);t&&setTimeout(()=>{(0,je.unlink)(t,r=>{r&&Ot.default.debug?.("Error trying to remove blob file",r)})},$x)}function s9(e){$x=e}function Hm(e,t=!1){let r=Gr.get(e);if(!r)r={storageIndex:0,fileId:null,store:xn},Gr.set(e,r);else{if(r.fileId)return r;r.store=xn}return r.deleteOnFailure=t,a9(r),r.source?LA(e,r.source,r):r.contentBuffer?o9(e,r):LA(e,za.Readable.from(e.stream()),r),r}function LA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,je.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;o?(m||f.write(r9),p=(0,K_.createDeflate)(),(0,za.pipeline)(t,p,f,E)):(m||f.write(t9),(0,za.pipeline)(t,f,E));function h(_){let R=BigInt(_),S=new Uint8Array(Nr),y=new DataView(S.buffer);return R|=BigInt(o?MA:Gx)<<48n,y.setBigInt64(0,R),S}a(h,"createHeader");function E(_){let R=f.fd;if(_){if(i.unlock(d,0),R&&((0,je.close)(R),f.fd=null),r.deleteOnFailure)(0,je.unlink)(n,S=>{S&&Ot.default.debug?.("Error while deleting aborted blob file",S)});else try{if((0,je.statSync)(n).size===0){let S=Buffer.from(_.toString());(0,je.writeFile)(n,Buffer.concat([h(BigInt(S.length)+0xff000000000000n),S]),y=>{y&&Ot.default.debug?.("Error write error message to blob file",y)})}}catch(S){Ot.default.debug?.("Error checking blob file after abort",S)}u(_)}else{if(!m){m=!0;let S=p?p.bytesWritten:f.bytesWritten-Nr;e.size=S,(0,je.write)(R,h(S),0,Nr,0,E);return}i.unlock(d,0),c?(0,je.fdatasync)(R,S=>{S&&u(S),l(),(0,je.close)(R),f.fd=null}):(l(),(0,je.close)(R),f.fd=null)}}a(E,"finished")}),e}function W_(e){return Gr.get(e)?.fileId}function i9(e){return Gr.get(e)?.saving}function Vx(e){let t=Gr.get(e);return t?.fileId&&$u(t)}function Vu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=DA.get(e);if(!t){if(!e.databaseName)return Ot.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,km.get)(x.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Yi.join)(n,e.databaseName)):t=[(0,Yi.join)((0,km.getHdbBasePath)(),"blobs",e.databaseName)],DA.set(e,t)}return t}async function UA(e){let t=Vu(e);t&&await Promise.all(t.map(r=>Kx(r)))}async function Kx(e){if((0,je.existsSync)(e)){for(let t of await(0,Bn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await Kx((0,Yi.join)(e,t.name));else try{await(0,Bn.unlink)((0,Yi.join)(e,t.name))}catch(r){Ot.default.warn?.("Error deleting file",r)}try{await(0,Bn.rmdir)(e)}catch(t){Ot.default.warn?.("Error deleting directory",t)}}}function $u({storageIndex:e,fileId:t,store:r}){let n=Vu(r);return(0,Yi.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function o9(e,t){let r=t.contentBuffer,n=r.length;if(!(n<Hx))return e.size=n,LA(e,za.Readable.from([r]),t)}function a9(e){let t=Vu(e.store),r=c9(),n=t?.length>1?l9(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=$u(e),o=(0,Yi.dirname)(i);(0,je.existsSync)(o)||(0,vA.ensureDirSync)(o),e.filePath=i}function c9(){let e=Fx.get(xn);if(!e){let t=0,r=Vu(xn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,je.existsSync)(n))for(let c of(0,je.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,Yi.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(xn.getUserSharedBuffer("blob-file-id",e.buffer)),Fx.set(xn,e)}return Number(Atomics.add(e,0,1n))}function l9(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(V_);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,u9(e)),e.frequencyTable[t%V_]}async function u9(e){if(!Bn.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o;try{o=await(0,Bn.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,vA.ensureDirSync)(s),o=await(0,Bn.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(V_),n=t.map(s=>1/s);for(let s=0;s<V_;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function j_(e,t,r){Hu=t,xn=r,ol=!1;try{return e()}finally{Hu=void 0,xn=void 0}}function d9(e){Qr=[];let t;try{t=e()}catch(n){throw Qr=void 0,n}let r=Qr.length<2?Qr[0]:Promise.all(Qr);return Qr=void 0,r?r.then(()=>e()):t}function z_(e,t,r){try{Qr=[],$o=r,xn=t,e()}catch(s){throw $o=void 0,Qr=void 0,s}$o=void 0;let n=Qr.length<2?Qr[0]:Promise.all(Qr);return Qr=void 0,n}function Gm(e,t,r){xn=r;try{return $o=t,e()}finally{$o=void 0}}function Vo(e,t){return xn=t,e()}function Ja(e){il(e,t=>{Y_(t)})}function il(e,t){if(e instanceof Ds)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&il(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&il(e[r],t)}}function xA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof qu&&s.saveBeforeCommit){xn=t;let i=Hm(s,!0).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function m9(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function p9(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,o=Vu(r);if(o)for(let d of o)await c(d);return await l(),Ot.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,je.existsSync)(d))return;for(let f of await(0,Bn.readdir)(d,{withFileTypes:!0})){let m=(0,Yi.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Ot.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let p=(0,kx.getHeapStatistics)();p.used_heap_size>p.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Ot.default.error?.("Error searching path for blobs",d,f)}}a(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,km.get)(x.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Ot.default.warn?.("Checking for references to potential orphaned blobs in table",m);let p=e[m];for(let h of p.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{h.metadataFlags&Xr&&h.value&&u(h.value),d++%f===0?await(0,Gu.setTimeout)(1):await(0,Gu.setImmediate)()}catch(E){Ot.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",E)}}Ot.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 p=At(m),h=n.tableStores[p.tableId],E=h?.getEntry(p.recordId);(!E||E.version!==p.version||!E.value)&&u(p.getValue(h)),d++%f===0?await(0,Gu.setTimeout)(1):await(0,Gu.setImmediate)()}catch(p){Ot.default.error?.("Error searching audit log for references to potential orphaned blobs failed",p)}Ot.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,Bn.unlink)(m)}catch(p){Ot.default.warn?.("Error deleting file",p)}Ot.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}a(l,"removePathsThatAreNotReferenced");function u(d){il(d,f=>{if(f instanceof qu){let m=Gr.get(f);if(m.fileId!=null){let p=$u(m);i.has(p)&&i.delete(p)}}})}a(u,"checkObjectForReferences")}var Ki,Bn,je,K_,za,vA,km,Yi,Ot,kx,Gu,Hx,Nr,Gx,MA,Ux,t9,r9,xx,Gr,$o,Ds,Hu,Qr,xn,ol,Fm,$_,n9,Bx,qu,$x,DA,Fx,V_,f9,ss=se(()=>{Ki=require("msgpackr"),Bn=require("node:fs/promises"),je=require("node:fs"),K_=require("node:zlib"),za=require("node:stream"),vA=require("fs-extra"),km=b(fe());G();Yi=require("path"),Ot=b(ir());qo();$i();kx=require("node:v8"),Gu=require("node:timers/promises"),Hx=8192,Nr=8,Gx=0,MA=1,Ux=255,t9=new Uint8Array([0,Gx,255,255,255,255,255,255]),r9=new Uint8Array([0,MA,255,255,255,255,255,255]),xx=0xffffffffffff,Gr=new WeakMap,Ds=global.Blob||m9(),ol=!1,Fm=new Uint8Array(8),$_=new DataView(Fm.buffer),n9=6e4;a(qx,"InstanceOfBlobWithNoConstructor");qx.prototype=Ds.prototype;Bx=!1,qu=class e extends qx{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Gr.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(PA()&&OA(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Gr.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=$u(t),o,c=a(async()=>{let l,u=Nr;try{if(l=await(0,Bn.readFile)(i),l.length>=Nr){l.copy(Fm,0,0,Nr);let f=$_.getBigUint64(0);if(Number(f>>48n)===Ux)throw new Error("Error in blob: "+l.subarray(Nr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<xx&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(o)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(o=!0,h(c()))))return o=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return a(d,"checkCompletion"),l[1]===MA?new Promise((f,m)=>{(0,K_.deflate)(l.subarray(Nr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Nr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Gr.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=$u(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,_=a((R,S)=>{(0,je.open)(i,"r",(y,w)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Ot.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),_(R,S)},20).unref();S(y),p.#e?.forEach(I=>I(y))}else o=w,R(w)})},"openFile");return new Promise(_)},pull:a(E=>{let _=0,R=100;return new Promise(a(function S(y,w){function I(X){(0,je.close)(o),clearTimeout(d),u&&u.close(),w(X),p.#e?.forEach(q=>q(X))}a(I,"onError");let H=Buffer.allocUnsafe(262144);(0,je.read)(o,H,0,H.length,c,(X,q,k)=>{if(l+=q,X)return I(X);if(c===0){if(q<Nr){R-- >0&&f!==!1?(h(),Ot.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,w),20).unref()):(Ot.default.debug?.("File was empty, throwing error",i,R),I(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Fm,0,0,Nr);let z=$_.getBigUint64(0);if(Number(z>>48n)===Ux)return I(new Error("Error in blob: "+k.subarray(Nr,q)));if(_=Number(z&0xffffffffffffn),_<xx&&p.size!==_&&(p.size=_,p.#t))for(let Y of p.#t)Y(_);k=k.subarray(Nr,q),l-=Nr}else if(q===0){let z=Buffer.allocUnsafe(8);return(0,je.read)(o,z,0,Nr,0,Y=>{if(Y)return I(Y);if(Fm.set(z),_=Number($_.getBigUint64(0)&0xffffffffffffn),_>l){h()?u?d=setTimeout(()=>{I(new Error(`File read timed out reading from ${i}`))},n9).unref():(u=(0,je.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(y,w))}),S(y,w)):m?I(new Error("Blob is incomplete")):(m=!0,S(y,w));return}(0,je.close)(o),E.close(),y()})}else k=k.subarray(0,q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=q,S(y,w);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=_=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(z){return Ot.default.debug?.("Error enqueuing chunk",z),y()}l===_&&((0,je.close)(o),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,je.close)(o),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,_=t.fileId+":blob";f=!E.attemptLock(_,0,()=>{f=!1}),f||E.unlock(_,0)}return f}}slice(t,r,n){let s=Gr.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Gr.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Gr.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return Bx||(Bx=!0,Ot.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}get written(){return Gr.get(this)?.saving??Promise.resolve()}},$x=500;a(Y_,"deleteBlob");a(s9,"setDeletionDelay");global.createBlob=function(e,t){let r=new qu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Gr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof za.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=za.Readable.from(e);else throw new Error("Invalid source type");return r};a(Hm,"saveBlob");a(LA,"writeBlobWithStream");a(W_,"getFileId");a(i9,"isSaving");a(Vx,"getFilePathForBlob");DA=new Map;a(Vu,"getRootBlobPathsForDB");a(UA,"deleteRootBlobPathsForDB");a(Kx,"rimrafSteadily");a($u,"getFilePath");a(o9,"writeBlobWithBuffer");a(a9,"generateFilePath");Fx=new Map;a(c9,"getNextFileId");V_=128;a(l9,"getNextStorageIndex");a(u9,"createFrequencyTableForStoragePaths");a(j_,"encodeBlobsWithFilePath");a(d9,"encodeBlobsAsBuffers");a(z_,"decodeBlobsWithWrites");a(Gm,"decodeWithBlobCallback");a(Vo,"decodeFromDatabase");a(Ja,"deleteBlobsInObject");a(il,"findBlobsInObject");a(xA,"startPreCommitBlobsForRecord");f9=new Ki.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Ki.addExtension)({Class:Ds,type:11,unpack:a(function(e){let t=f9.unpack(e),r=new qu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Gr.set(r,{storageIndex:t[1],fileId:t[2],store:xn}),$o)return $o(r)??r;if(!xn)throw new Error("No store specified, cannot load blob from storage")}else Gr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=Gr.get(e);if(Hu!==void 0&&(ol=!0,t?.recordId!==void 0&&t.recordId!==Hu))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<Hx)return r.size=t.contentBuffer.length,(0,Ki.pack)([r,t.contentBuffer])}if(Hu!==void 0){if(t=Hm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Hu,(0,Ki.pack)([r,t.storageIndex,t.fileId])}if(t){if($o)return $o(e),(0,Ki.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,je.readFileSync)($u(t));if(n.length>=Nr&&(n.copy(Fm,0,0,Nr),Number($_.getBigUint64(0)&0xffffffffffffn)===n.length-Nr))return Buffer.concat([(0,Ki.pack)([r]),n]);if(Qr)Qr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Qr)return Qr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Ki.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(m9,"polyfillBlob");a(p9,"cleanupOrphans")});var Jx={};ye(Jx,{onStorageReclamation:()=>qm,runReclamationHandlers:()=>HA,setAvailableSpaceRatioGetter:()=>E9});function qm(e,t,r){(r||(0,X_.getWorkerIndex)()===(0,X_.getWorkerCount)()-1)&&(Q_.has(e)||Q_.set(e,[]),Q_.get(e).push({priority:0,handler:t}),kA||(kA=setTimeout(HA,Wx).unref()))}async function HA(){for(let[e,t]of Q_)try{let r=await zx(e),n=h9/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(FA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){FA.default.error?.("Error running storage reclamation handlers",r)}kA=setTimeout(HA,Wx).unref()}function E9(e){zx=e??jx}var BA,X_,FA,Z_,Yx,Q_,h9,Wx,kA,jx,zx,eg=se(()=>{BA=require("node:fs/promises"),X_=b(st()),FA=b(ir());G();Z_=b(fe()),Yx=b(ae());Z_.default.initSync();Q_=new Map,h9=Z_.default.get(x.STORAGE_RECLAMATION_THRESHOLD)??.4,Wx=(0,Yx.convertToMS)(Z_.default.get(x.STORAGE_RECLAMATION_INTERVAL))||36e5;a(qm,"onStorageReclamation");jx=a(async e=>{if(BA.statfs){let t=await(0,BA.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"),zx=jx;a(HA,"runReclamationHandlers");a(E9,"setAvailableSpaceRatioGetter")});var l0={};ye(l0,{ACTION_32_BIT:()=>ig,ACTION_64_BIT:()=>T9,AUDIT_STORE_OPTIONS:()=>Km,Decoder:()=>cl,HAS_BLOBS:()=>Xr,HAS_CURRENT_RESIDENCY_ID:()=>ll,HAS_EXPIRATION_EXTENDED_TYPE:()=>jm,HAS_ORIGINATING_OPERATION:()=>Wm,HAS_PREVIOUS_RESIDENCY_ID:()=>ul,REMOTE_SEQUENCE_UPDATE:()=>og,createAuditEntry:()=>dl,getLastRemoved:()=>g9,openAuditStore:()=>ng,readAuditEntry:()=>At,removeAuditEntry:()=>sg,setAuditRetention:()=>S9,transactionKeyEncoder:()=>i0});function ng(e){let t=e.auditStore=e.openDB(GA.AUDIT_STORE_NAME,{create:!1,...Km});t||(t=e.auditStore=e.openDB(GA.AUDIT_STORE_NAME,Km),Xx(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=$A;qm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-qA/(1+i*i)})){try{m=sg(t,h,E)}catch(_){Ku.warn("Error removing audit entry",_)}if(p=h,await new Promise(setImmediate),++f>=_9){o=10;break}}await m}finally{f===0?o=Math.min(o<<1,qA/10):(Xx(t,p),o>100&&(o=o>>1)),d(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Vm.getWorkerIndex)()===(0,Vm.getWorkerCount)()-1&&c(),(0,Vm.getWorkerIndex)()===0&&!Qx)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(Qx=!0,Ku.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 sg(e,t,r){let n=y9(r),s;if(n&Xr){s=At(r);let i=e.tableStores[s.tableId];if(i){let o=s.type==="message"?null:i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&Vo(()=>Ja(s.getValue(i)),i.rootStore)}}if((n&15)===VA){s=s||At(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function Xx(e,t){KA[0]=t,e.put(Symbol.for("last-removed"),o0)}function g9(e){let t=e.get(Symbol.for("last-removed"));if(t)return o0.set(t),KA[0]}function S9(e,t=$A){qA=e,$A=t}function dl(e,t,r,n,s,i,o,c,l,u,d,f,m){let p=a0[o];if(!p)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?Qa.setFloat64(0,n):vs.set(YA),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),_(r),Qa.setFloat64(h,e),h+=8,l&ll&&R(u),l&ul&&R(d),l&jm&&(Qa.setFloat64(h,f),h+=8),l&Wm&&R(c0[m]),i?_(i):vs[h++]=0,l?Qa.setUint32(n?8:0,p|l|3221225472):vs[n?8:0]=p;let E=vs.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function _(S){let y=h;h+=1,h=(0,al.writeKey)(S,vs,h);let w=h-y-1;w>127?w>16383?(Ku.error("Key or username was too large for audit entry",S),h=y+1,vs[y]=0):(vs.copyWithin(y+2,y+1,h),Qa.setUint16(y,w|32768),h++):vs[y]=w}function R(S){S<128?vs[h++]=S:S<16384?(Qa.setUint16(h,S|32768),h+=2):S<1056964608?(Qa.setUint32(h,S|3221225472),h+=4):(vs[h]=255,Qa.setUint32(h+1,S),h+=5)}}function y9(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 cl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function At(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new cl(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&ll&&(m=n.readInt()),i&ul&&(p=n.readInt()),i&jm&&(h=n.readFloat64()),i&Wm){let y=n.readInt();E=c0[y]}l=n.readInt();let _=n.position,R=n.position+=l,S;return{type:a0[i&7],tableId:c,nodeId:o,get recordId(){return(0,al.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>_?(0,al.readKey)(e,_,R):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(y,w,I){if(i&tg||i&$m&&!w)return S||(S=Vo(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&$m&&I)return SA(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(tg|$m)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Ku.error("Reading audit entry error",n,e),{}}}var al,rg,GA,Vm,s0,Ku,vs,Qa,i0,Km,qA,_9,KA,o0,$A,Qx,tg,$m,Zx,VA,e0,t0,r0,n0,ig,T9,og,ll,ul,Wm,jm,Xr,a0,c0,cl,$i=se(()=>{al=require("ordered-binary"),rg=b(fe()),GA=b(Jt());G();Vm=b(st()),s0=b(ae());fl();Ku=b(Q());F_();ss();eg();(0,rg.initSync)();vs=Buffer.alloc(2816),Qa=new DataView(vs.buffer,vs.byteOffset,2816),i0={writeKey(e,t,r){return e===Ym?(t.set(Ym,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,al.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,al.readKey)(e,t,r)}},Km={encoding:"binary",keyEncoder:i0},qA=(0,s0.convertToMS)((0,rg.get)(x.LOGGING_AUDITRETENTION))||86400*3,_9=1e3,KA=new Float64Array(1),o0=new Uint8Array(KA.buffer),$A=1e4,Qx=!1;a(ng,"openAuditStore");a(sg,"removeAuditEntry");a(Xx,"updateLastRemoved");a(g9,"getLastRemoved");a(S9,"setAuditRetention");tg=16,$m=32,Zx=1,VA=2,e0=3,t0=4,r0=5,n0=6,ig=14,T9=15,og=11,ll=512,ul=1024,Wm=2048,jm=4096,Xr=8192,a0={put:Zx|tg,[Zx]:"put",delete:VA,[VA]:"delete",message:e0|tg,[e0]:"message",invalidate:t0|$m,[t0]:"invalidate",patch:r0|$m,[r0]:"patch",relocate:n0,[n0]:"relocate"},c0={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(dl,"createAuditEntry");a(y9,"readAction");a(At,"readAuditEntry");cl=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function ag(){return WA||(WA=ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),WA}function b9(e){return e=e.replace(R9,t=>{let[r,n,s,i]=t.split(".").map(o=>parseInt(o));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function A9(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 zA(e){let t=u0.default.createHash("shake128",{outputLength:4}),r;return(0,d0.isIPv6)(e)?r=b9(e):r=e.toLowerCase(),A9(Uint8Array.from(t.update(r).digest()))}var u0,d0,jA,WA,R9,JA=se(()=>{Oe();u0=b(require("crypto")),d0=require("node:net"),jA=new Map;a(ag,"getAnalyticsHostnameTable");R9=/(\d{1,3}\.){3}\d{1,3}$/;a(b9,"normalizeIPv6");a(A9,"nodeHashToNumber");a(zA,"stableNodeId")});var Ko,QA=se(()=>{Ko={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 _0={};ye(_0,{captureProfile:()=>ZA,userCodeFolders:()=>cg});async function ZA(e){let r=E0/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=XA.time.stop(!0),d=u.stringTable.strings;for(let f of u.function)s.set(f.id,d[f.filename]);for(let f of u.location)n.set(f.id,f.line[0]);for(let f of u.sample)l(f);Ye(c*r,"cpu-usage","harper"),Ye(o*r,"cpu-usage","user");for(let[f,m]of i)if(m>100){let p=n.get(f),h=s.get(p.functionId)+":"+p.line;Ye(m*r,"cpu-usage",h)}}catch(u){h0.error?.("analytics profiler error:",u)}finally{e&&setTimeout(()=>{let u=((0,zm.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;ZA(u)},e).unref()}function l(u){let d=!1;for(let f of u.locationId){let m=s.get(n.get(f).functionId);if(cg.some(p=>m.startsWith(p))){let p=u.value[0];o+=p,d||i.set(f,(i.get(f)??0)+p);return}if(m.startsWith(m0.PACKAGE_ROOT)){let p=u.value[0];c+=p,d||(i.set(f,(i.get(f)??0)+p),d=!0)}}}a(l,"getUserHitCount")}var zm,m0,p0,XA,h0,f0,cg,E0,g0=se(()=>{is();zm=b(fe());G();m0=b(yt()),p0=require("node:fs"),XA=require("@datadog/pprof"),h0=b(Q()),f0=(0,zm.getHdbBasePath)(),cg=f0?[f0]:[];process.env.RUN_HDB_APP&&cg.push((0,p0.realpathSync)(process.env.RUN_HDB_APP));E0=5e4;(async()=>{if(cg.length===0)return;XA.time.start({intervalMicros:E0});let e=((0,zm.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{ZA(e)},e).unref()})();a(ZA,"captureProfile")});var dg={};ye(dg,{addAnalyticsListener:()=>Zm,analyticsDelay:()=>nI,calculateCPUUtilization:()=>x0,diffResourceUsage:()=>B0,onAnalyticsAggregate:()=>oI,recordAction:()=>Ye,recordActionBinary:()=>en,recordHostname:()=>sI,setAnalyticsEnabled:()=>N9});function N9(e){L0=e,clearTimeout(Qm),Qm=null}function C9(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 O9(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},ug.set(e,o)}function Ye(e,t,r,n,s){if(!L0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=ug.get(i);o?C9(e,o):O9(i,e,t,r,n,s),Qm||P9()}function en(e,t,r,n,s){Ye(!!e,t,r,n,s)}function Zm(e){v0.push(e)}function P9(){eI||=performance.now(),Qm=setTimeout(async()=>{Qm=null;let e=performance.now()-eI;eI=0;let t=[],r={time:Date.now(),period:e,threadId:ml.threadId,metrics:t};for(let[s,i]of ug){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let f of U0){let m=Math.floor(c*f),p=o[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await F0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:ml.threadId,byThread:!0,...n});for(let s of v0)s(t);ug=new Map,ml.parentPort?ml.parentPort.postMessage({type:D0,report:r}):G0({report:r})},nI).unref()}async function sI(){let e=Ue.hostname;Zr.trace?.("recordHostname server.hostname:",e);let t=zA(e);Zr.trace?.("recordHostname nodeId:",t);let r=ag();if(!await r.get(t)){let s={id:t,hostname:e};Zr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Yu(e,t){let r=Ue.hostname,n=jA.get(r);n?Zr.trace?.("storeMetric cached nodeId:",n):(n=zA(r),Zr.trace?.("storeMetric new nodeId:",n),jA.set(r,n));let s={id:[(0,rI.getNextMonotonicTime)(),n],...t};Zr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function x0(e,t){let r=e.userCPUTime+e.systemCPUTime;return Zr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function B0(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 L9(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:Ko.TABLE_SIZE,database:t,table:s,size:c};Zr.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),Yu(e,l),n+=c}return n}function S0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=P0.statSync(s.primaryStore.env.path).size,c=L9(e,r,n),l=o-c,u={metric:Ko.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};Yu(e,u),Zr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Zr.warn?.("Error getting DB size metrics",s)}}function T0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={metric:Ko.STORAGE_VOLUME,database:r,...i};Yu(e,o),Zr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Zr.warn?.("Error getting DB volume metrics",s)}}async function D9(e,t=6e4){let r=iI(),n=k0(),s=new Promise(y=>{let w=performance.now();setImmediate(()=>{let I=performance.now();I-w>5e3&&Zr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(I-w)+"ms"),w=performance.now()}),n.primaryStore.prefetch([1],()=>{let I=performance.now();I-w>5e3&&Zr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(I-w)+"ms"),y(I-w)})}),i;for(let y of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(y.value?.time){i=y.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:y,value:w}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!w)continue;if(o){if(y>o+t)break}else o=y;d=y;let{metrics:I,threadId:H}=w;for(let X of I||[]){let{path:q,method:k,type:z,metric:Y,count:ce,total:de,distribution:te,threads:Se,...Ne}=X;ce||(ce=1);let Ke=Y+(q?"-"+q:"");k!==void 0&&(Ke+="-"+k),z!==void 0&&(Ke+="-"+z);let $e=c.get(Ke);if($e){if($e.threads){let nr=$e.threads[H];if(nr)$e=nr;else{$e.threads[H]={...Ne};continue}}$e.count||($e.count=1);let Ir=$e.count;for(let nr in Ne){let zr=Ne[nr];typeof zr=="number"&&($e[nr]=($e[nr]*Ir+zr*ce)/(Ir+ce))}$e.count+=ce,de>=0&&($e.total+=de,$e.ratio=$e.total/$e.count)}else $e={period:t,...X},delete $e.distribution,c.set(Ke,$e),$e.byThread&&($e.threads=[],$e.threads[H]={...Ne},u.push($e));if(te){te=te.map(nr=>typeof nr=="number"?{value:nr,count:1}:nr);let Ir=l.get(Ke);Ir?Ir.push(...te):l.set(Ke,te)}}await F0()}for(let y of u){let{path:w,method:I,type:H,metric:X,count:q,total:k,distribution:z,threads:Y,...ce}=y;Y=Y.filter(de=>de);for(let de in ce){if(typeof y[de]!="number")continue;let te=0;for(let Se of Y){let Ne=Se[de];typeof Ne=="number"&&(te+=Ne)}y[de]=te}y.count=Y.length,delete y.threads,delete y.byThread}for(let[y,w]of l){let I=c.get(y);w.sort((nr,zr)=>nr.value>zr.value?1:-1);let H=I.count-1,X=[],q=0,k=0,z;for(let nr of U0){let zr=H*nr;for(;q<zr;)z=w[k++],q+=z.count,k===1&&q--;let xr=w[k>1?k-2:0];z||(z=w[0]),X.push(z.value-(z.value-xr.value)*(q-zr)/z.count)}let[Y,ce,de,te,Se,Ne,Ke,$e,Ir]=X;Object.assign(I,{p1:Y,p10:ce,p25:de,median:te,p75:Se,p90:Ne,p95:Ke,p99:$e,p999:Ir})}let f;for(let[,y]of c)y.time=d,Yu(n,y),f=!0;if(f)for(let y of M0)y(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let y={metric:Ko.MAIN_THREAD_UTILIZATION,idle:p-y0,active:h-R0,taskQueueLatency:await s,time:m,...process.memoryUsage()};Yu(n,y)}y0=p,R0=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Zr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let _=B0(lg,E);Zr.trace?.(`diffed resourceUsage: ${JSON.stringify(_)}`),_.time=m,_.period=lg.time?m-lg.time:t,_.cpuUtilization=x0(_,_.period);let R={metric:Ko.RESOURCE_USAGE,..._};Yu(n,R),lg=E;let S=lt();S0(n,S),S0(n,{system:S.system}),T0(n,S),T0(n,{system:S.system})}async function b0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function iI(){return A0||(A0=ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function k0(){return I0||(I0=ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function U9(){H0=!0;let e=(0,Xm.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await D9(nI,e),await b0(iI(),v9),await b0(k0(),M9)},Math.min(e/2,2147483647)).unref()}function G0(e,t){let r=e.report;r.threadId=t?.threadId||ml.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(w0+=n.mean*n.count);r.totalBytesProcessed=w0,t&&(r.metrics.push({metric:Ko.UTILIZATION,...t.performance.eventLoopUtilization(N0.get(t))}),N0.set(t,t.performance.eventLoopUtilization())),r.id=(0,rI.getNextMonotonicTime)(),iI().primaryStore.put(r.id,r),H0||U9(),x9&&(q0=F9(r))}async function F9(e){if(await q0,!Xa){let r=(0,Jm.dirname)(I9());try{Xa=await(0,tI.open)((0,Jm.join)(r,"analytics.log"),"r+")}catch{Xa=await(0,tI.open)((0,Jm.join)(r,"analytics.log"),"w+")}}let t=(await Xa.stat()).size;if(t>B9){let r=Buffer.alloc(t);await Xa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Xa.write(r,{position:0}),await Xa.truncate(r.length),t=r.length}await Xa.write(JSON.stringify(e)+`
11
+ `,t)}function oI(e){e&&M0.push(e)}var ml,C0,O0,Jm,tI,rI,Xm,P0,I9,w9,Zr,ug,L0,Qm,eI,nI,D0,v0,M0,U0,y0,R0,lg,F0,v9,M9,A0,I0,H0,w0,N0,x9,q0,Xa,B9,is=se(()=>{ml=require("worker_threads"),C0=b(st());Oe();O0=b(Q()),Jm=require("path"),tI=require("fs/promises"),rI=b(Un()),Xm=b(fe());G();Hr();P0=b(require("node:fs"));JA();QA();({getLogFilePath:I9,forComponent:w9}=O0.default);setTimeout(()=>{Promise.resolve().then(()=>g0())},1e3);Zr=w9("analytics").conditional;(0,Xm.initSync)();ug=new Map,L0=(0,Xm.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;a(N9,"setAnalyticsEnabled");a(C9,"recordExistingAction");a(O9,"recordNewAction");a(Ye,"recordAction");Ue.recordAnalytics=Ye;a(en,"recordActionBinary");eI=0,nI=1e3,D0="analytics-report",v0=[],M0=[];a(Zm,"addAnalyticsListener");U0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(P9,"sendAnalytics");a(sI,"recordHostname");a(Yu,"storeMetric");a(x0,"calculateCPUUtilization");a(B0,"diffResourceUsage");a(L9,"storeTableSizeMetrics");a(S0,"storeDBSizeMetrics");a(T0,"storeVolumeMetrics");a(D9,"aggregation");y0=0,R0=0,lg={userCPUTime:0,systemCPUTime:0},F0=a(()=>new Promise(setImmediate),"rest");a(b0,"cleanup");v9=36e5,M9=31536e6;a(iI,"getRawAnalyticsTable");a(k0,"getAnalyticsTable");(0,C0.setChildListenerByType)(D0,G0);a(U9,"startScheduledTasks");w0=0,N0=new Map,x9=!1;a(G0,"recordAnalytics");B9=1e6;a(F9,"logAnalytics");a(oI,"onAnalyticsAggregate")});var W0={};ye(W0,{ENTRY:()=>H9,HAS_EXPIRATION:()=>hg,HAS_RESIDENCY_ID:()=>dI,HAS_STRUCTURE_UPDATE:()=>Eg,LAST_TIMESTAMP_PLACEHOLDER:()=>Ym,LOCAL_TIMESTAMP:()=>k9,METADATA:()=>ju,NEW_TIMESTAMP_PLACEHOLDER:()=>V0,NO_TIMESTAMP:()=>mg,PENDING_LOCAL_TIME:()=>fI,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>YA,RecordEncoder:()=>uI,TIMESTAMP_ASSIGN_LAST:()=>q9,TIMESTAMP_ASSIGN_NEW:()=>K0,TIMESTAMP_ASSIGN_PREVIOUS:()=>Y0,TIMESTAMP_PLACEHOLDER:()=>fg,TIMESTAMP_RECORD_PREVIOUS:()=>aI,entryMap:()=>Za,handleLocalTimeForGets:()=>_g,lastMetadata:()=>ut,recordUpdater:()=>mI,removeEntry:()=>El});function K9(){return tp[0]=tp[0]^64,G9.getFloat64(0)}function _g(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++,ut=null;let l=r.call(this,o,c);return l&&(ut&&(l.metadataFlags=ut[ju],l.localTime=ut.localTime,l.residencyId=ut.residencyId,l.size=ut.size,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l.value&&Za.set(l.value,l),l.key=o),l};let n=e.get;e.get=function(o,c){ut=null;let l=n.call(this,o,c);return ut&&l&&(Za.set(l,ut),ut=null),l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>(ut&&(l.metadataFlags=ut[ju],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 o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,hl.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<hl.length;u++){let d=hl[u].deref();(!d||d.isDone||d.isCommitted)&&hl.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function mI(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",f,m){l==null?pl=mg:f?pl=i?.localTime?aI|Y0:mg:pl=l?i?.localTime?aI|16384:K0|16384:mg;let p=u?.expiresAt;if(p>=0&&(c|=hg),ep=c,cI=p,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:pl>0},E,_=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(lI=S,ep|=dI,_|=ll),R!==S&&(_|=ul,R||(R=0)),c&hg&&(_|=jm),u?.originatingOperation&&(_|=Wm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&Xr&&(!i.localTime||!r.getBinaryFast(i.localTime))&&Ja(i.value);let y;if(s!==void 0&&(y=j_(()=>e.put(n,s,h),n,e.rootStore),ol&&(_|=Xr)),l){let w=u?.user?.username;if(m&&(j_(()=>e.encoder.encode(m),n,e.rootStore),ol&&(_|=Xr)),e.encoder.hasStructureUpdate&&(_|=Eg,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,H=r.get(I);if(H){let X=At(H).previousLocalTime;return y=r.put(I,dl(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,w,d,Wu,_,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?V0:Ym,dl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,w,d,Wu,_,S,R,p,u?.originatingOperation),{instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&$9.has(d)&&Ye(Wu?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function El(e,t,r){if(t)return t.value&&t.metadataFlags&Xr&&!e.auditStore?.getBinaryFast(t.localTime)&&Ja(t.value),e.remove(t.key,r)}var $0,pg,fg,Ym,YA,V0,k9,ju,H9,tp,G9,mg,K0,q9,Y0,aI,hg,dI,fI,Eg,$9,Za,V9,Wu,pl,ep,cI,lI,ut,uI,hl,fl=se(()=>{$0=require("msgpackr");$i();pg=b(Q());ss();ss();is();fg=new Uint8Array([1,1,1,1,4,64,0,0]),Ym=new Uint8Array([1,1,1,1,1,0,0,0]),YA=new Uint8Array([1,1,1,1,3,64,0,0]),V0=new Uint8Array([1,1,1,1,0,64,0,0]),k9=Symbol("local-timestamp"),ju=Symbol("metadata"),H9=Symbol("entry"),tp=new Uint8Array(8),G9=new DataView(tp.buffer,0,8),mg=0,K0=0,q9=1,Y0=3,aI=4,hg=16,dI=32,fI=1,Eg=256,$9=new Set(["put","patch","delete","message","publish"]),Za=new WeakMap,pl=0,ep=-1,cI=-1,lI=0,ut=null,uI=class extends $0.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{a(this,"RecordObject")}getUpdatedTime(){return Za.get(this)?.version}getExpiresAt(){return Za.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,o){if(pl||ep>=0){let c=0,l=pl;l&&(c+=8,pl=0);let u=ep,d=cI,f=lI;u>=0&&(c+=4,ep=-1,d>=0&&(c+=8,cI=-1),f&&(c+=4,lI=0));let m=V9=n.call(this,i,o|2048|c);Wu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(fg[4]=l,fg[5]=l>>8,m.set(fg,p),p+=8),ol&&(u|=Xr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|ig<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Wu=n.call(this,i,o),Wu};let s=this.saveStructures;this.saveStructures=function(i,o){let c=s.call(this,i,o);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],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(tp,0,c),c+=8;else for(let m=0;m<8;m++)tp[m]=t[c++];l=K9(),i=t[c]}let u,d;i<32&&(i===ig?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&hg&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&dI&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Vo(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ut={localTime:l,[ju]:o,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Vo(()=>super.decode(t,r),this.rootStore)}catch(c){return pg.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(K9,"getTimestamp");a(_g,"handleLocalTimeForGets");hl=[];setInterval(()=>{for(let e=0;e<hl.length;e++){let t=hl[e].deref();!t||t.isDone||t.isCommitted?hl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(pg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):pg.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(mI,"recordUpdater");a(El,"removeEntry")});function EI(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?o(f,m):f}function u(f){return f.conditions?EI(f.conditions,f.operator,r,n,s,i,o,c):Xu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}a(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,p);return S?(w,I)=>y.some(H=>H(w,I)):(w,I)=>y.every(H=>H(w,I))}let _=(h.attribute||h[0])===r.primaryKey,R=np(h,r,i,c,_,p);return m&&E<f.length-1&&p&&(p=e7(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}a(d,"mapConditionsToFilters")}function Xu(e,t,r,n,s,i,o){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new tn.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],w=ji(n.attributes,y);if(w.relationship){if(c.length<2)throw new tn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=w.definition?.tableClass||w.elements?.definition?.tableClass,H=new Map,X=Xu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,H);if(w.relationship.to){i[c[0]]=H;let q=!!ji(I.attributes,w.relationship.to)?.elements;X=J9(X,w,I.primaryStore,q,H)}if(w.relationship.from){let q=a(k=>(k?.key!==void 0&&(k=k.key),Xu({attribute:w.relationship.from,value:k},t,r,n,s,H)),"searchEntry");w.elements?(i[c[0]]=H,X=Q9(X,w,I.primaryStore,H,q)):X=X.flatMap(q)}return X}else if(c.length===1)c=c[0];else throw new tn.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let _;switch(_I[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=Wi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,_=!0;break;default:throw new tn.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>Ms.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Ms.MAX_SEARCH_KEY_LENGTH)+Ms.OVERFLOW_MARKER,E=!1,R=np(e,n,null,i,d)),typeof p=="string"&&p.length>Ms.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Ms.MAX_SEARCH_KEY_LENGTH)+Ms.OVERFLOW_MARKER,h=!0,R=R??np(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||_||l===null&&!f.indexNulls){if(s===!1&&!f)throw new tn.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new tn.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 tn.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new tn.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??np(e,n,null,i,d),!R)throw new tn.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(S).map(R?function({key:w,value:I}){return this?.isSync?I&&R(I)?w:ec.SKIP:new Promise((H,X)=>setImmediate(()=>{try{H(I&&R(I)?w:ec.SKIP)}catch(q){X(q)}}))}:w=>w.value==null&&!(w.metadataFlags&(Fn|_l))?ec.SKIP:(o?._freezeRecords&&Object.freeze(w.value),w));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,o).map(y=>{if(typeof y=="object"&&y){let{key:w,...I}=y,H=n.primaryStore.getEntry(w);return o?._freezeRecords&&Object.freeze(H?.value),{...I,...H}}return y}):f.getRange(S).map(R?function({key:y,value:w}){let I;return typeof y=="string"&&y.length>Ms.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(w):I={[c]:y},this.isSync?R(I)?w:ec.SKIP:new Promise((H,X)=>setImmediate(()=>{try{H(R(I)?w:ec.SKIP)}catch(q){X(q)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:w}){return this.isSync?w&&R(w)?y:ec.SKIP:new Promise((I,H)=>setImmediate(()=>{try{I(w&&R(w)?y:ec.SKIP)}catch(X){H(X)}}))})}function ji(e,t){if(Array.isArray(t))if(t.length>1){let r=ji(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?ji(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 J9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function Q9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function np(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=ji(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=np({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let _,R=a((y,w)=>{let I,H;return E?E.returnDirect?(I=E(y,r,w),H=ut):(H=E(y,r,w,!0),Array.isArray(H)?(I=H.map(X=>X.value),H=null):I=H?.value):I=y[d],{subObject:I,subEntry:H}},"getSubObject"),S=a((y,w)=>{if(E&&h.idFilter){if(!_)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};_=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else _=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=_(y);return _.idFilter&&(S.idFilter=_.idFilter),q}let{subObject:I,subEntry:H}=R(y,w);return I?Array.isArray(I)?(!n?.[d]&&n&&(n[d]={fromRecord(q){let k=R(q).subObject;return Array.isArray(k)?k.filter(h).map(z=>z[m.primaryKey]):k}}),I.some(h)):h(I,H):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),_I[o]||o){case Ms.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Wi.compareKeys)(d,l[0])>=0&&(0,Wi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Wi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Wi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Wi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Wi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Wi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new tn.ClientError(`Unknown query comparator "${o}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&Sg(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,_=3;function R(S){let y=S[d],w;if(typeof y!="object"||!y||p?w=f(y):Array.isArray(y)?w=y.some(f):y instanceof Date&&(w=f(y.getTime())),m&&(_++,!w&&!R.idFilter&&++E/_*i>h)){let I=Xu(e,r.transaction.getReadTxn(),!1,t),H;R.to?H=I.flatMap(q=>t.primaryStore.get(q)[R.to]):H=I.map(Zu);let X=new Set(H);R.idFilter=q=>X.has(Zu(q)),R.idFilter.idSet=X}return w}return a(R,"recordFilter"),s&&(R.idFilter=f),R}a(u,"attributeComparator")}function Sg(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Yo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=_I[n]||n,n===Ms.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=ji(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Sg(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Yo(e.indices[i.relationship.from])/(Yo(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Yo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=j9*Yo(e.primaryStore)+1;else if(n==="between")r.estimated_count=W9*Yo(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=Yo(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=Y9*Yo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Tg(e,t){if(e)if(Wo=e,zu.lastIndex=0,X9.test(e))try{if(t&&(t.conditions=[]),ci=t??new Qu,rp(ci,""),qr!==Wo.length&&Qt("Unable to parse query, unexpected end of query"),ci.parseErrorMessage&&(ci.parseError=new pI(t.parseErrorMessage),!t))throw ci.parseError;return ci}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${qr} in '${Wo}'`,ci.parseErrorMessage&&(r.message+=", "+ci.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Qt(e){let t=`${e} at position ${qr}`;ci.parseErrorMessage=ci.parseErrorMessage?ci.parseErrorMessage+", "+t:t}function rp(e,t){let r=zu,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Wo);){qr=r.lastIndex;let[,d,f]=n;o?(d&&Qt(`expected operator, but encountered '${d}'`),o=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Qt(`invalid FIQL operator ${d}`),l=j0):(l=decodeURIComponent,i="equals",d||Qt("attribute must be specified before equality comparator"),s=Ju(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=z9[f],l=hI[i]?j0:decodeURIComponent,d||Qt(`attribute must be specified before comparator ${f}`),s=Ju(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Qt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Qt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Qt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&z0(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else gg(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Qt("conditions/comparisons are not allowed in a property list"):e.push(Ju(d)),s=void 0;break;case"(":zu.lastIndex=qr;let p=rp(d?[]:new Qu,")");switch(d){case"":gg(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Qt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Qt("group by is not implemented yet");case"sort":e.sort=J0(p);break;default:Qt(`unknown query function call ${d}`)}Wo[qr]===","?r.lastIndex=++qr:o=!0,s=null;break;case"{":e.conditions&&Qt("property sets are not allowed in a queries"),d||Qt("property sets must have a defined parent property name"),zu.lastIndex=qr,m=rp([],"}"),m.name=d,e.push(m),Wo[qr]===","?r.lastIndex=++qr:o=!0;break;case"[":if(zu.lastIndex=qr,d?(m=rp(new Qu,"]"),m.name=d):m=rp(e.conditions?new Qu:[],"]"),e.conditions)if(gg(e,u),Wo[qr]==="="){l=decodeURIComponent,i="equals",s=Ju(d),r.lastIndex=++qr;break}else e.conditions.push(m),s=null;else e.push(m);Wo[qr]===","?r.lastIndex=++qr:o=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&z0(h,d),gg(e,u),e.conditions.push(h)}else d&&Qt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Ju(d));return e}else Qt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Qt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?Z9:zu,r.lastIndex=qr),qr===Wo.length)return e}t&&Qt(`expected '${t}', but encountered end of string`)}function gg(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Qt("Can not mix operators within a condition grouping"):e.operator=t)}function Ju(e){return e.indexOf(".")>-1?e.split(".").map(Ju):decodeURIComponent(e)}function j0(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 tn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function z0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new tn.ClientError("wildcard can only be used at the end of a string")}function J0(e){let t=Q0(e[0]);return e.length>1&&(t.next=J0(e.slice(1))),t}function Q0(e){if(Array.isArray(e)){let t=Q0(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}}Qt(`Unknown sort type ${e}`)}function Zu(e){return Array.isArray(e)?e.join("\0"):e}function Yo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function e7(e,t,r){return t*r/Yo(e)}var tn,Ms,Wi,ec,Y9,W9,j9,z9,hI,_I,pI,X9,zu,Z9,qr,ci,Wo,Qu,yg=se(()=>{tn=b(Ee()),Ms=b(Jt()),Wi=require("ordered-binary"),ec=require("lmdb");Rg();fl();Y9=.3,W9=.1,j9=.05,z9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},hI={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(EI,"executeConditions");a(Xu,"searchByIndex");a(ji,"findAttribute");a(J9,"joinTo");a(Q9,"joinFrom");_I={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(np,"filterByType");a(Sg,"estimateCondition");pI=class extends tn.Violation{static{a(this,"SyntaxViolation")}},X9=/[()[\]|!<>.]|(=\w*=)/,zu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Z9=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Tg,"parseQuery");a(Qt,"recordError");a(rp,"parseBlock");a(gg,"assignOperator");a(Ju,"decodeProperty");a(j0,"typedDecoding");a(z0,"wildcardDecoding");a(J0,"toSortObject");a(Q0,"toSortEntry");Qu=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};a(Zu,"flattenKey");a(Yo,"estimatedEntryCount");a(e7,"intersectionEstimate")});var X0,Us,bg=se(()=>{X0=b(ai());zi();Us=class extends URLSearchParams{static{a(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,X0._assignPackageExport)("Resource",Xt)});var sB={};ye(sB,{MultiPartId:()=>Ag,Resource:()=>Xt,contextStorage:()=>td,snakeCase:()=>r7,transformForSelect:()=>rd});function r7(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Z0(e,t){if(gl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(gl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Ag;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){gl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return gl=!0,null;e[e.length-1]==="/"&&(gl=!0)}return t.coerceId(decodeURIComponent(e))}function kn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r){if(o)d=i,o=o.getContext?.()||o;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i.getContext?.()||i):i?.transaction instanceof Bo?o=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new ed.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?o?(d=i,o=o.getContext?.()||o):o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let _=this.parsePath(c,o,l);_?.id!==void 0?(_.query&&(l?l=Object.assign(_.query,l):l=_.query),u=_.isCollection,c=_.id):c=_,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new Us,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new Us,l.id=c,c==null&&(t.method==="get"&&nB.default.warn?.(`Using an argument with a value of ${c} for ${t.method}, is deprecated`,new Error("Invalid id")),u=!0);l||(l=new Us,l.id=c),u&&(l.isCollection=!0);let f;o||(o=td.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=a(E=>td.run(o,()=>h(E)),"runAction")),o?.transaction){let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)}else return bt(o,()=>{o.transaction.startedFrom={resourceName:this.name,method:t.method};let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)},f);function h(E){if(o.authorize&&(o.authorize=!1,m!==!1)){let _=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,d,o):E.allowUpdate(o.user,d,o):t.type==="create"?E.allowCreate(o.user,d,o):E.allowDelete(o.user,l,o);if(_?.then)return _.then(R=>{if(!R)throw new ed.AccessViolation(o.user);return typeof d?.then=="function"?d.then(S=>e(E,l,o,S)):e(E,l,o,d)});if(!_)throw new ed.AccessViolation(o.user)}return typeof d?.then=="function"?d.then(_=>e(E,l,o,_)):e(E,l,o,d)}a(h,"authorizeActionOnResource")}}function os(e,t){let r=new ed.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 gI(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function rd(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):gI(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(gI(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(gI(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&o&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=rd(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var eB,tB,ed,rB,nB,td,t7,Xt,gl,Ag,zi=se(()=>{eB=require("crypto");Lm();ku();tB=b(ai()),ed=b(Ee());ja();yg();rB=require("async_hooks");bg();nB=b(ir()),td=new rB.AsyncLocalStorage,t7={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Xt=class{static{a(this,"Resource")}#e;#t;#n;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=kn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=rd(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0,method:"get"});static put=kn(function(t,r,n,s){if(Array.isArray(s)&&t.#n&&t.constructor.loadAsInstance!==!1){let i=[];for(let o of s){let c=t.constructor,l=o[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(o,n))):i.push(u.put(o,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):os(t,"put")},{hasContent:!0,type:"update",method:"put"});static patch=kn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):os(t,"patch")},{hasContent:!0,type:"update",method:"patch"});static delete=kn(function(t,r,n,s){return t.delete?t.delete(r):os(t,"delete")},{hasContent:!1,type:"delete",method:"delete"});static getNewId(){return(0,eB.randomUUID)()}static create(t,r,n){let s;return this.loadAsInstance===!1?typeof t=="object"&&t&&!n?(n=r,r=t,s=new Us,s.isCollection=!0):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),n?n.getContext&&(n=n.getContext()):n=td.getStore()??{},bt(n,async()=>{n.transaction.startedFrom??={resourceName:this.name,method:"create"};let i=new this(s,n),o=await i.create?i.create(s,r):os(i,"create");return n.newLocation=s??o?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?o:i})}static invalidate=kn(function(t,r,n,s){return t.invalidate?t.invalidate(r):os(t,"delete")},{hasContent:!1,type:"update",method:"invalidate"});static post=kn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create",method:"post"});static update=kn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update",method:"update"});static connect=kn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):os(t,"connect")},{hasContent:!0,type:"read",method:"connect"});static subscribe=kn(function(t,r,n,s){return t.subscribe?t.subscribe(r):os(t,"subscribe")},{type:"read",method:"subscribe"});static publish=kn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):os(t,"publish")},{hasContent:!0,type:"create",method:"publish"});static search=kn(function(t,r,n){let s=t.search?t.search(r):os(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let o=rd(i,t.constructor);return s.map(o)}return s},{type:"read",method:"search"});static query=kn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):os(t,"search")},{hasContent:!0,type:"read",method:"query"});static copy=kn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):os(t,"copy")},{hasContent:!0,type:"create",method:"copy"});static move=kn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):os(t,"move")},{hasContent:!0,type:"delete",method:"move"});async post(t,r){if(this.constructor.loadAsInstance===!1){if(t.isCollection&&this.create)return r=await this.create(t,r),r?.[this.constructor.primaryKey]}else if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;os(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t,r){return Tg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&t7[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:Z0(t,this),isCollection:gl}}let i=Z0(t,this);return gl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new ns}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new ns}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,tB._assignPackageExport)("Resource",Xt);a(r7,"snakeCase");a(Z0,"pathToId");Ag=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(kn,"transactional");a(os,"missingMethod");a(gI,"selectFromObject");a(rd,"transformForSelect")});var Sl,SI=se(()=>{Sl=class{static{a(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var TI={};ye(TI,{Resources:()=>nd,keyArrayToString:()=>sd,resetResources:()=>n7,resources:()=>xs});function n7(){return xs=new nd,Ue.resources=xs,xs}function sd(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var iB,oB,nd,xs,tc=se(()=>{ja();SI();iB=b(Q()),oB=b(Ee());Hr();nd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new oB.ServerError(`Conflicting paths for ${t}`);iB.default.error(c),i.Resource=new Sl(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===o&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return bt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(n7,"resetResources");a(sd,"keyArrayToString")});function bI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=cB,s7(e.primaryStore,e.auditStore)):(c=aB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{lB(aB[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=sd(t);let d=new RI(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function lB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),uB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=At(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=sd(c),u=0;do{let d=o.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,yI.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,yI.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function s7(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=cB[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{lB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function uB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function dB(e){return e.nextTransaction||(bI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),uB(e)),e.nextTransaction}var yI,aB,cB,RI,AI=se(()=>{yI=b(Q());ku();tc();$i();aB=Object.create(null),cB=Object.create(null);a(bI,"addSubscription");RI=class extends ns{static{a(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(lB,"notifyFromTransactionData");a(s7,"listenToCommits");a(uB,"nextTransaction");a(dB,"whenNextTransaction")});var mB=M((bPe,fB)=>{"use strict";var II=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};fB.exports=II});var hB=M((IPe,pB)=>{"use strict";var wI=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};pB.exports=wI});var sp=M(_B=>{"use strict";var EB=fe(),i7=(G(),v(j)),{RecordEncoder:o7}=(fl(),v(W0));EB.initSync();var a7=EB.get(i7.CONFIG_PARAMS.STORAGE_CACHING)!==!1,NI=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=a7&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:o7})}};_B.OpenDBIObject=NI});var ip=M((OPe,gB)=>{"use strict";var as=fe(),Bs=(G(),v(j));as.initSync();var Ig=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=as.get(Bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||as.get(Bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||as.get(Bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",as.get(Bs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=as.get(Bs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),as.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=as.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),as.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=as.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),as.get(Bs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=as.get(Bs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=as.get(Bs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};gB.exports=Ig;Ig.MAX_DBS=1e4});var Et=M((LPe,CB)=>{"use strict";var OI=require("lmdb"),li=require("fs-extra"),cs=require("path"),wg=Un(),yB=Q(),Hn=Jr().LMDB_ERRORS_ENUM,Ng=hB(),{OpenDBIObject:PI}=sp(),RB=ip(),rc=Jt(),SB=(G(),v(j)),{table:c7,resetDatabases:l7}=(Oe(),v(ft)),TB=fe(),ui=rc.INTERNAL_DBIS_NAME,bB=rc.DBI_DEFINITION_NAME,u7="data.mdb",d7="lock.mdb",op=".mdb",f7="-lock",CI=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Fs(t,r),this.key_type=this.dbi[rc.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[rc.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new OI.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Cg(e,t){if(e===void 0)throw new Error(Hn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Hn.ENV_NAME_REQUIRED)}a(Cg,"pathEnvNameValidation");async function LI(e,t,r=!0){try{await li.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Hn.INVALID_BASE_PATH):n}try{let n=cs.join(e,t+op);return await li.access(n,li.constants.R_OK|li.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await li.access(cs.join(e,t,u7),li.constants.R_OK|li.constants.F_OK),cs.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Hn.INVALID_ENVIRONMENT)}else throw new Error(Hn.INVALID_ENVIRONMENT);throw n}}a(LI,"validateEnvironmentPath");function Og(e,t){if(wg.validateEnv(e),t===void 0)throw new Error(Hn.DBI_NAME_REQUIRED)}a(Og,"validateEnvDBIName");async function m7(e,t,r=!1,n=!1){Cg(e,t);let s=cs.basename(e);t=t.toString();let i=TB.get(SB.CONFIG_PARAMS.DATABASES);i||TB.setProperty(SB.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await LI(e,t,n),AB(e,t,r)}catch(o){if(o.message===Hn.INVALID_ENVIRONMENT){let c=cs.join(e,t);await li.mkdirp(n?c:e);let l=new RB(n?c:c+op,!1),u=OI.open(l);u.dbis=Object.create(null);let d=new PI(!1);u.openDB(ui,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=DI(e,t,r);return u[rc.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw o}}a(m7,"createEnvironment");async function p7(e,t,r,n=!0){Cg(e,t),t=t.toString();let s=cs.join(e,t);return c7({table:t,database:cs.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(p7,"copyEnvironment");async function AB(e,t,r=!1){Cg(e,t),t=t.toString();let n=DI(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 LI(e,t),i=cs.join(e,t+op),o=s!=i,c=new RB(s,o),l=OI.open(c);l.dbis=Object.create(null);let u=wB(l);for(let d=0;d<u.length;d++)Fs(l,u[d]);return l[rc.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(AB,"openEnvironment");async function h7(e,t,r=!1){Cg(e,t),t=t.toString();let n=cs.join(e,t+op),s=await LI(e,t);if(global.lmdb_map!==void 0){let i=DI(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await IB(o),delete global.lmdb_map[i]}}await li.remove(s),await li.remove(s===n?s+f7:cs.join(cs.dirname(s),d7))}a(h7,"deleteEnvironment");async function IB(e){wg.validateEnv(e);let t=e[rc.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(IB,"closeEnvironment");function DI(e,t,r=!1){let s=`${cs.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(DI,"getCachedEnvironmentName");function E7(e){wg.validateEnv(e);let t=Object.create(null),r=Fs(e,ui);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ui)try{t[n]=Object.assign(new Ng,s)}catch{yB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(E7,"listDBIDefinitions");function wB(e){wg.validateEnv(e);let t=[],r=Fs(e,ui);for(let{key:n}of r.getRange({start:!1}))n!==ui&&t.push(n);return t}a(wB,"listDBIs");function _7(e,t){let n=Fs(e,ui).getEntry(t),s=new Ng;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{yB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(_7,"getDBIDefinition");function NB(e,t,r,n=!r){if(Og(e,t),t=t.toString(),t===ui)throw new Error(Hn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fs(e,t)}catch(s){if(s.message===Hn.DBI_DOES_NOT_EXIST){let i=new PI(r,n===!0),o=e.openDB(t,i),c=new Ng(r===!0,n);return o[bB]=c,Fs(e,ui).putSync(t,c),e.dbis[t]=o,o}throw s}}a(NB,"createDBI");function Fs(e,t){if(Og(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ui?r=_7(e,t):r=new Ng,r===void 0)throw new Error(Hn.DBI_DOES_NOT_EXIST);let n;try{let s=new PI(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Hn.DBI_DOES_NOT_EXIST):s}return n[bB]=r,e.dbis[t]=n,n}a(Fs,"openDBI");function g7(e,t){Og(e,t),t=t.toString();let r=Fs(e,t),n=r.getStats();return r[rc.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(g7,"statDBI");async function S7(e,t){try{let r=cs.join(e,t+op);return(await li.stat(r)).size}catch{throw new Error(Hn.INVALID_ENVIRONMENT)}}a(S7,"environmentDataSize");function T7(e,t){if(Og(e,t),t=t.toString(),t===ui)throw new Error(Hn.CANNOT_DROP_INTERNAL_DBIS_NAME);Fs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Fs(e,ui).removeSync(t)}a(T7,"dropDBI");function y7(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Fs(e,i)}catch(o){if(o.message===Hn.DBI_DOES_NOT_EXIST)NB(e,i,i!==t,i===t),n=!0;else throw o}}n&&l7()}a(y7,"initializeDBIs");CB.exports={openDBI:Fs,openEnvironment:AB,createEnvironment:m7,listDBIs:wB,listDBIDefinitions:E7,createDBI:NB,dropDBI:T7,statDBI:g7,deleteEnvironment:h7,initializeDBIs:y7,TransactionCursor:CI,environmentDataSize:S7,copyEnvironment:p7,closeEnvironment:IB}});var LB=M((vPe,PB)=>{"use strict";var vI=Et(),R7=Q(),OB=Jr().LMDB_ERRORS_ENUM;PB.exports=b7;async function b7(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await vI.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==OB.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await vI.closeEnvironment(global.lmdb_map[n]),await vI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==OB.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){R7.error(t)}}a(b7,"cleanLMDBMap")});var Qi=M((UPe,vB)=>{"use strict";var DB=ae(),A7=(G(),v(j)),id=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ji=require("joi"),nc={schema_format:{pattern:id,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},I7=Ji.alternatives(Ji.string().min(1).max(nc.schema_length.maximum).pattern(id).messages({"string.pattern.base":"{:#label} "+nc.schema_format.message}),Ji.number(),Ji.array()).required(),w7=Ji.alternatives(Ji.string().min(1).max(nc.schema_length.maximum).pattern(id).messages({"string.pattern.base":"{:#label} "+nc.schema_format.message}),Ji.number()),N7=Ji.alternatives(Ji.string().min(1).max(nc.schema_length.maximum).pattern(id).messages({"string.pattern.base":"{:#label} "+nc.schema_format.message}),Ji.number()).required();function C7(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>nc.schema_length.maximum?`'${property_name}' maximum of 250 characters`:id.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}a(C7,"checkValidTable");function O7(e,t){return DB.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(O7,"validateSchemaExists");function P7(e,t){let r=t.state.ancestors[0].schema;return DB.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(P7,"validateTableExists");function L7(e,t){return e.toLowerCase()===A7.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(L7,"validateSchemaName");vB.exports={commonValidators:nc,schemaRegex:id,hdbSchemaTable:I7,validateSchemaExists:O7,validateTableExists:P7,validateSchemaName:L7,checkValidTable:C7,hdbDatabase:w7,hdbTable:N7}});var mt=M((BPe,MB)=>{"use strict";var Gn=require("validate.js");Gn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Gn.validators.type.checks[t](e)?null:` must be a '${t}' value`};Gn.validators.type.checks={Object:a(function(e){return Gn.isObject(e)&&!Gn.isArray(e)},"Object"),Array:Gn.isArray,Integer:Gn.isInteger,Number:Gn.isNumber,String:Gn.isString,Date:Gn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};Gn.validators.hasValidFileExt=function(e,t){return Gn.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};MB.exports={validateObject:D7,validateObjectAsync:v7,validateBySchema:M7};function D7(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Gn(e,t,{format:"flat"});return r?new Error(r):null}a(D7,"validateObject");async function v7(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Gn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(v7,"validateObjectAsync");function M7(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(M7,"validateBySchema")});var UI=M((kPe,xB)=>{var{hdbTable:U7,hdbDatabase:UB}=Qi(),x7=mt(),MI=require("joi"),B7={undefined:"undefined",null:"null"},F7=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||B7[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"customRecordsVal"),k7=MI.object({database:UB,schema:UB,table:U7,records:MI.array().items(MI.object().custom(F7)).required()});xB.exports=function(e){return x7.validateBySchema(e,k7)}});var FB=M((GPe,BB)=>{"use strict";var xI=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};BB.exports=xI});var HB=M(($Pe,kB)=>{"use strict";var BI=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};kB.exports=BI});var qB=M((KPe,GB)=>{"use strict";var FI=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};GB.exports=FI});var VB=M((WPe,$B)=>{"use strict";var kI=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};$B.exports=kI});var yl=M((XPe,WB)=>{"use strict";var H7=Et(),G7=HB(),q7=qB(),$7=VB(),Xi=Un(),ap=Jr().LMDB_ERRORS_ENUM,V7=Jt(),jo=(G(),v(j)),K7=ae(),Y7=require("uuid"),zPe=require("lmdb"),{handleHDBError:W7,hdbErrors:j7}=Ee(),{OVERFLOW_MARKER:JPe,MAX_SEARCH_KEY_LENGTH:QPe}=V7,KB=fe();KB.initSync();var Pg=KB.get(jo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),HI=jo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Tl=jo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function z7(e,t,r,n,s=Xi.getNextMonotonicTime()){VI(e,t,r,n),GI(e,t,r);let i=new G7,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];YB(u,!0,s);let d=J7(e,t,r,u),f=u[t];o.push(d),c.push(f)}return qI(o,c,n,i,s)}a(z7,"insertRecords");function J7(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][jo.FUNC_VAL],n[o]=c)}let l=Xi.getIndexedValues(c),u=e.dbis[o];if(l){Pg&&u.prefetch(l.map(d=>({key:d,value:s})),Lg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}Pg&&e.dbis[t].prefetch([s],Lg),e.dbis[t].put(s,n,n[Tl])})}a(J7,"insertRecord");function Q7(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(Q7,"removeSkippedRecords");function YB(e,t,r){let n=r>0;(n||!Number.isInteger(e[Tl]))&&(e[Tl]=r||(r=Xi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[HI]))&&(e[HI]=r||Xi.getNextMonotonicTime()):delete e[HI]}a(YB,"setTimestamps");function GI(e,t,r){r.indexOf(jo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(jo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(jo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(jo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),H7.initializeDBIs(e,t,r)}a(GI,"initializeTransaction");async function X7(e,t,r,n,s=Xi.getNextMonotonicTime()){VI(e,t,r,n),GI(e,t,r);let i=new q7,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=$I(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),o.push(u);continue}c.push(m),l.push(f)}return qI(c,l,n,i,s,o)}a(X7,"updateRecords");async function Z7(e,t,r,n,s=Xi.getNextMonotonicTime()){try{VI(e,t,r,n)}catch(l){throw W7(l,l.message,j7.HTTP_STATUS_CODES.BAD_REQUEST)}GI(e,t,r);let i=new $7,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;K7.isEmpty(u[t])?(d=Y7.v4(),u[t]=d):d=u[t];let f=$I(e,t,u,d,i,!1,s);o.push(f),c.push(d)}return qI(o,c,n,i,s)}a(Z7,"upsertRecords");async function qI(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Xi.getNextMonotonicTime(),Q7(r,i),n}a(qI,"finalizeWrite");function $I(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(YB(r,!d,o),Number.isInteger(r[Tl])&&u[Tl]>r[Tl])return!1;d&&s.original_records.push(u);let f,m=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],_=e.dbis[h];if(_===void 0)continue;let R=u[h];if(typeof E=="function"){let y=E([[u]]);Array.isArray(y)&&(E=y[0][jo.FUNC_VAL],r[h]=E)}if(E===R)continue;let S=Xi.getIndexedValues(R);if(S){Pg&&_.prefetch(S.map(y=>({key:y,value:n})),Lg);for(let y=0,w=S.length;y<w;y++)_.remove(S[y],n)}if(S=Xi.getIndexedValues(E),S){Pg&&_.prefetch(S.map(y=>({key:y,value:n})),Lg);for(let y=0,w=S.length;y<w;y++)_.put(S[y],n)}}let p={...u,...r};c.put(n,p,p[Tl])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:$I(e,t,r,n,s,i,o))}a($I,"updateUpsertRecord");function eee(e,t,r){if(Xi.validateEnv(e),t===void 0)throw new Error(ap.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ap.WRITE_ATTRIBUTES_REQUIRED):new Error(ap.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(eee,"validateBasic");function VI(e,t,r,n){if(eee(e,t,r),!Array.isArray(n))throw n===void 0?new Error(ap.RECORDS_REQUIRED):new Error(ap.RECORDS_MUST_BE_ARRAY)}a(VI,"validateWrite");function Lg(){}a(Lg,"noop");WB.exports={insertRecords:z7,updateRecords:X7,upsertRecords:Z7}});var Zi=M((eLe,tee)=>{tee.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]},hdb_certificate_cache:{hash_attribute:"certificate_id",name:"hdb_certificate_cache",schema:"system",attributes:[{attribute:"certificate_id"}]},hdb_crl_cache:{hash_attribute:"distribution_point",name:"hdb_crl_cache",schema:"system",attributes:[{attribute:"distribution_point"}]},hdb_revoked_certificates:{hash_attribute:"composite_id",name:"hdb_revoked_certificates",schema:"system",attributes:[{attribute:"composite_id"}]}}});var zB=M((tLe,jB)=>{"use strict";var ree=require("uuid"),KI=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||ree.v4(),this.schema_table=`${this.schema}.${this.table}`}};jB.exports=KI});var Dg=M((nLe,JB)=>{"use strict";var nee=zB(),YI=class extends nee{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};JB.exports=YI});var XB=M((iLe,QB)=>{"use strict";QB.exports=iee;var see="inserted";function iee(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===see?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(iee,"returnObject")});var vg=M((cLe,eF)=>{"use strict";var oee=(G(),v(j)),WI=Et(),aee=yl(),{getSystemSchemaPath:cee,getSchemaPath:lee}=Rt(),aLe=Zi(),{validateBySchema:uee}=mt(),cp=require("joi"),dee=Dg(),fee=XB(),{handleHDBError:mee,hdbErrors:pee,ClientError:hee}=Ee(),ZB=ae(),{HTTP_STATUS_CODES:Eee}=pee,_ee="inserted";eF.exports=gee;async function gee(e){let t=uee(e,cp.object({database:cp.string(),schema:cp.string(),table:cp.string().required(),attribute:cp.string().required()}));if(t)throw new hee(t.message);let r=!e.skip_table_check&&ZB.checkGlobalSchemaTable(e.schema,e.table);if(r)throw mee(new Error,r,Eee.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ZB.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 dee(e.schema,e.table,e.attribute,e.id);try{let i=await WI.openEnvironment(lee(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);WI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await WI.openEnvironment(cee(),oee.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await aee.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return fee(_ee,c,{records:[s]},l)}catch(i){throw i}}a(gee,"lmdbCreateAttribute")});var lp=M((dLe,rF)=>{"use strict";var zo=ae(),tF=Q(),uLe=UI(),{getDatabases:See}=(Oe(),v(ft)),{ClientError:Rl}=Ee();rF.exports=Tee;function Tee(e){if(zo.isEmpty(e))throw new Rl("invalid update parameters defined.");if(zo.isEmptyOrZeroLength(e.schema))throw new Rl("invalid schema specified.");if(zo.isEmptyOrZeroLength(e.table))throw new Rl("invalid table specified.");if(!Array.isArray(e.records))throw new Rl("records must be an array");let t=See()[e.schema]?.[e.table];if(zo.isEmpty(t))throw new Rl(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&zo.isEmptyOrZeroLength(o[r]))throw tF.error("a valid hash attribute must be provided with update record:",o),new Rl("a valid hash attribute must be provided with update record, check log for more info");if(!zo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw tF.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Rl(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!zo.isEmpty(o[r])&&o[r]!==""&&n.has(zo.autoCast(o[r]))&&(o.skip=!0),n.add(zo.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(Tee,"insertUpdateValidate")});var Mg=M((mLe,sF)=>{"use strict";var nF=ae(),yee=(G(),v(j)),Ree=Q(),bee=vg(),Aee=Dg(),Iee=Jo(),{SchemaEventMsg:wee}=ls(),Nee="already exists in";sF.exports=Cee;async function Cee(e,t,r){if(nF.isEmptyOrZeroLength(r))return r;let n=[];nF.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 Oee(e,t.schema,t.name,i)})),s}a(Cee,"lmdbCheckForNewAttributes");async function Oee(e,t,r,n){let s=new Aee(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await Pee(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(Nee))Ree.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(Oee,"createNewAttribute");async function Pee(e){let t;return t=await bee(e),Iee.signalSchemaChange(new wee(process.pid,yee.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(Pee,"createAttribute")});var od=M((hLe,iF)=>{"use strict";var jI=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};iF.exports=jI});var aF=M((_Le,oF)=>{"use strict";var Lee=od(),Dee=(G(),v(j)).OPERATIONS_ENUM,zI=class extends Lee{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(Dee.INSERT,r,n,s,i),this.records=t}};oF.exports=zI});var lF=M((SLe,cF)=>{"use strict";var vee=od(),Mee=(G(),v(j)).OPERATIONS_ENUM,JI=class extends vee{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(Mee.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};cF.exports=JI});var dF=M((yLe,uF)=>{"use strict";var Uee=od(),xee=(G(),v(j)).OPERATIONS_ENUM,QI=class extends Uee{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(xee.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};uF.exports=QI});var mF=M((bLe,fF)=>{"use strict";var Bee=od(),Fee=(G(),v(j)).OPERATIONS_ENUM,XI=class extends Bee{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(Fee.DELETE,n,s,t,i),this.original_records=r}};fF.exports=XI});var up=M((wLe,_F)=>{"use strict";var ILe=require("path"),pF=Et(),kee=aF(),Hee=lF(),Gee=dF(),qee=mF(),ad=Jt(),hF=ae(),{CONFIG_PARAMS:$ee}=(G(),v(j)),EF=fe();EF.initSync();var Ug=(G(),v(j)).OPERATIONS_ENUM,{getTransactionAuditStorePath:Vee}=Rt();_F.exports=Kee;async function Kee(e,t){if(EF.get($ee.LOGGING_AUDITLOG)===!1)return;let r=Vee(e.schema,e.table),n=await pF.openEnvironment(r,e.table,!0),s=Yee(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){pF.initializeDBIs(n,ad.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ad.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),hF.isEmpty(s.user_name)||n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(Kee,"writeTransaction");function Yee(e,t){let r=hF.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Ug.INSERT)return new kee(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ug.UPDATE)return new Hee(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ug.UPSERT)return new Gee(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ug.DELETE)return new qee(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Yee,"createTransactionObject")});var ZI=M((OLe,gF)=>{"use strict";var Wee=lp(),CLe=Cm(),dp=(G(),v(j)),jee=Om(),zee=yl().insertRecords,Jee=Et(),Qee=Q(),Xee=Mg(),{getSchemaPath:Zee}=Rt(),ete=up();gF.exports=tte;async function tte(e){try{let{schemaTable:t,attributes:r}=Wee(e);jee(e,r,t.hash_attribute),e.schema!==dp.SYSTEM_SCHEMA_NAME&&(r.includes(dp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(dp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(dp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(dp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Xee(e.hdb_auth_header,t,r),s=Zee(e.schema,e.table),i=await Jee.openEnvironment(s,e.table),o=await zee(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await ete(e,o)}catch(c){Qee.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(tte,"lmdbCreateRecords")});var yF=M((LLe,TF)=>{"use strict";var SF=(G(),v(j)),rte=ZI(),nte=Cm(),ste=require("fs-extra"),{getSchemaPath:ite}=Rt();TF.exports=ote;async function ote(e){let t=[{name:e.schema,createddate:Date.now()}],r=new nte(SF.SYSTEM_SCHEMA_NAME,SF.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await rte(r),await ste.mkdirp(ite(e.schema))}a(ote,"lmdbCreateSchema")});var bF=M((vLe,RF)=>{"use strict";var ew=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};RF.exports=ew});var NF=M((FLe,wF)=>{"use strict";var AF=Et(),tw=Un(),rw=Jr().LMDB_ERRORS_ENUM,ate=Jt(),IF=Q(),ULe=ae(),cte=require("lmdb"),lte=bF(),ute=(G(),v(j)),{OVERFLOW_MARKER:xLe,MAX_SEARCH_KEY_LENGTH:BLe}=ate,dte=ute.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function fte(e,t,r,n){if(tw.validateEnv(e),t===void 0)throw new Error(rw.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(rw.IDS_REQUIRED):new Error(rw.IDS_MUST_BE_ITERABLE);try{let s=AF.listDBIs(e);AF.initializeDBIs(e,t,s);let i=new lte,o,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{o=r[m];let h=e.dbis[t].get(o);if(!h||n&&h[dte]>n){i.skipped.push(o);continue}let E=e.dbis[t].ifVersion(o,cte.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let _=0;_<s.length;_++){let R=s[_];if(!h.hasOwnProperty(R)||R===t)continue;let S=e.dbis[R],y=h[R];if(y!=null)try{let w=tw.getIndexedValues(y);if(w)for(let I=0,H=w.length;I<H;I++)S.remove(w[I],o)}catch{IF.warn(`cannot delete from attribute: ${R}, ${y}:${o}`)}}});c.push(E),l.push(o),i.original_records.push(h)}catch(h){IF.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=tw.getNextMonotonicTime(),i}catch(s){throw s}}a(fte,"deleteRecords");wF.exports={deleteRecords:fte}});var fp=M((HLe,OF)=>{"use strict";var cd=ae(),mte=NF(),pte=Et(),{getSchemaPath:hte}=Rt(),Ete=up(),_te=Q();OF.exports=gte;async function gte(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(cd.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(cd.isEmptyOrZeroLength(e.hash_values)&&!cd.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];cd.isEmpty(l)||e.hash_values.push(l)}}if(cd.isEmptyOrZeroLength(e.hash_values))return CF([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(cd.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=hte(e.schema,e.table),i=await pte.openEnvironment(s,e.table),o=await mte.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Ete(e,o)}catch(c){_te.error(`unable to write transaction due to ${c.message}`)}return CF(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(gte,"lmdbDeleteRecords");function CF(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(CF,"createDeleteResponse")});var sw=M(($Le,PF)=>{"use strict";var Ste=(G(),v(j)),qLe=Un();function nw(e,t){let r=Object.create(null);if(t.length===1&&Ste.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(nw,"parseRow");function Tte(e,t,r,n){let s=nw(r,e);n.push(s)}a(Tte,"searchAll");function yte(e,t,r,n){let s=nw(r,e);n[t]=s}a(yte,"searchAllToMap");function Rte(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Rte,"iterateDBI");function bl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(bl,"pushResults");function bte(e,t,r,n,s,i){t.toString().endsWith(e)&&bl(t,r,n,s,i)}a(bte,"endsWith");function Ate(e,t,r,n,s,i){t.toString().includes(e)&&bl(t,r,n,s,i)}a(Ate,"contains");function Ite(e,t,r,n,s,i){t>e&&bl(t,r,n,s,i)}a(Ite,"greaterThanCompare");function wte(e,t,r,n,s,i){t>=e&&bl(t,r,n,s,i)}a(wte,"greaterThanEqualCompare");function Nte(e,t,r,n,s,i){t<e&&bl(t,r,n,s,i)}a(Nte,"lessThanCompare");function Cte(e,t,r,n,s,i){t<=e&&bl(t,r,n,s,i)}a(Cte,"lessThanEqualCompare");PF.exports={parseRow:nw,searchAll:Tte,searchAllToMap:yte,iterateDBI:Rte,endsWith:bte,contains:Ate,greaterThanCompare:Ite,greaterThanEqualCompare:wte,lessThanCompare:Nte,lessThanEqualCompare:Cte,pushResults:bl}});var ld=M((jLe,BF)=>{"use strict";var sc=Et(),KLe=Q(),us=Un(),xg=Jt(),or=Jr().LMDB_ERRORS_ENUM,YLe=ae(),Ote=(G(),v(j)),Bg=sw(),{parseRow:Pte}=Bg,WLe=require("lmdb"),{OVERFLOW_MARKER:LF,MAX_SEARCH_KEY_LENGTH:Lte}=xg;function DF(e,t,r,n=!1,s=void 0,i=void 0){return Al(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(DF,"iterateFullIndex");function mp(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Al(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(y=>({value:y}))):f.getRange(S)})}a(mp,"iterateRangeBetween");function Al(e,t,r,n){let s=e.database||e,i=sc.openDBI(s,r);i[xg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&sc.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Al,"setupTransaction");function vF(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(LF)){if(!s)if(r)s=sc.openDBI(e,r);else{let l=sc.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=sc.openDBI(e,l[u]),!s[xg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(vF,"getOverflowCheck");function Dte(e,t,r,n=!1,s=void 0,i=void 0){if(us.validateEnv(e),t===void 0)throw new Error(or.HASH_ATTRIBUTE_REQUIRED);return Al(e,t,t,(o,c,l)=>(Fg(r),r=pp(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Pte(u.value,r))))}a(Dte,"searchAll");function vte(e,t,r,n=!1,s=void 0,i=void 0){if(us.validateEnv(e),t===void 0)throw new Error(or.HASH_ATTRIBUTE_REQUIRED);Fg(r),r=pp(e.database||e,r);let o=new Map;for(let{key:c,value:l}of DF(e,t,t,n,s,i))o.set(c,Bg.parseRow(l,r));return o}a(vte,"searchAllToMap");function Mte(e,t,r=!1,n=void 0,s=void 0){if(us.validateEnv(e),t===void 0)throw new Error(or.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=DF(e,void 0,t,r,n,s),c=o.transaction,l=vF(c.database,c,void 0,t);for(let{key:u,value:d}of o){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}a(Mte,"iterateDBI");function Ute(e,t){if(us.validateEnv(e),t===void 0)throw new Error(or.HASH_ATTRIBUTE_REQUIRED);return sc.statDBI(e,t).entryCount}a(Ute,"countAll");function xte(e,t,r,n,s=!1,i=void 0,o=void 0){return ic(e,r,n),Al(e,t,r,(c,l,u,d)=>(n=us.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(f=>({key:n,value:f}))))}a(xte,"equals");function Bte(e,t,r){return ic(e,t,r),sc.openDBI(e,t).getValuesCount(r)}a(Bte,"count");function Fte(e,t,r,n,s=!1,i=void 0,o=void 0){return ic(e,r,n),Al(e,null,r,(c,l)=>{n=us.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:o}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}a(Fte,"startsWith");function kte(e,t,r,n,s=!1,i=void 0,o=void 0){return MF(e,t,r,n,s,i,o,!0)}a(kte,"endsWith");function MF(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ic(e,r,n),Al(e,null,r,(l,u,d,f)=>{let m=vF(d,l,f,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(LF)?u.getValues(p,{transaction:l}).map(E=>{let _=m(p,E);if(c?_.endsWith(n):_.includes(n))return{key:_,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[xg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(MF,"contains");function Hte(e,t,r,n,s=!1,i=void 0,o=void 0){ic(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),mp(e,t,r,n,l,s,i,o,!0,!1)}a(Hte,"greaterThan");function Gte(e,t,r,n,s=!1,i=void 0,o=void 0){ic(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),mp(e,t,r,n,l,s,i,o,!1,!1)}a(Gte,"greaterThanEqual");function qte(e,t,r,n,s=!1,i=void 0,o=void 0){ic(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),mp(e,t,r,l,n,s,i,o,!1,!0)}a(qte,"lessThan");function $te(e,t,r,n,s=!1,i=void 0,o=void 0){ic(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),mp(e,t,r,l,n,s,i,o,!1,!1)}a($te,"lessThanEqual");function Vte(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(us.validateEnv(e),r===void 0)throw new Error(or.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(or.START_VALUE_REQUIRED);if(s===void 0)throw new Error(or.END_VALUE_REQUIRED);if(n=us.convertKeyValueToWrite(n),s=us.convertKeyValueToWrite(s),n>s)throw new Error(or.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return mp(e,t,r,n,s,i,o,c)}a(Vte,"between");function Kte(e,t,r,n){us.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(or.HASH_ATTRIBUTE_REQUIRED);if(Fg(r),r=pp(s,r),n===void 0)throw new Error(or.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Bg.parseRow(c,r)),o}a(Kte,"searchByHash");function Yte(e,t,r){us.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(or.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(or.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Yte,"checkHashExists");function Wte(e,t,r,n,s=[]){return xF(e,t,r,n,s),UF(e,t,r,n,s).map(i=>i[1])}a(Wte,"batchSearchByHash");function jte(e,t,r,n,s=[]){xF(e,t,r,n,s);let i=new Map;for(let[o,c]of UF(e,t,r,n,s))i.set(o,c);return i}a(jte,"batchSearchByHashToMap");function UF(e,t,r,n,s=[]){return Al(e,t,t,(i,o,c)=>{r=pp(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,Bg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(UF,"batchHashSearch");function xF(e,t,r,n,s){if(us.validateEnv(e),t===void 0)throw new Error(or.HASH_ATTRIBUTE_REQUIRED);if(Fg(r),n==null)throw new Error(or.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(or.IDS_MUST_BE_ITERABLE)}a(xF,"initializeBatchSearchByHash");function Fg(e){if(!Array.isArray(e))throw e===void 0?new Error(or.FETCH_ATTRIBUTES_REQUIRED):new Error(or.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Fg,"validateFetchAttributes");function ic(e,t,r){if(us.validateEnv(e),t===void 0)throw new Error(or.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(or.SEARCH_VALUE_REQUIRED);if(r?.length>Lte)throw new Error(or.SEARCH_VALUE_TOO_LARGE)}a(ic,"validateComparisonFunctions");function pp(e,t){return t.length===1&&Ote.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=sc.listDBIs(e)),t}a(pp,"setGetWholeRowAttributes");BF.exports={searchAll:Dte,searchAllToMap:vte,count:Bte,countAll:Ute,equals:xte,startsWith:Fte,endsWith:kte,contains:MF,searchByHash:Kte,setGetWholeRowAttributes:pp,batchSearchByHash:Wte,batchSearchByHashToMap:jte,checkHashExists:Yte,iterateDBI:Mte,greaterThan:Hte,greaterThanEqual:Gte,lessThan:qte,lessThanEqual:$te,between:Vte}});var ud=M((JLe,qF)=>{var FF=require("lodash"),kF=mt(),Je=require("joi"),zte=ae(),{hdbSchemaTable:hp,checkValidTable:HF,hdbTable:GF,hdbDatabase:kg}=Qi(),{handleHDBError:Jte,hdbErrors:Qte}=Ee(),{getDatabases:Xte}=(Oe(),v(ft)),{HTTP_STATUS_CODES:Zte}=Qte,ere=Je.object({database:kg,schema:kg,table:GF,attribute:hp,value:Je.any().required(),get_attributes:Je.array().min(1).items(Je.alternatives(hp,Je.object())).optional(),desc:Je.bool(),limit:Je.number().integer().min(1),offset:Je.number().integer().min(0)}),tre=Je.object({database:kg,schema:kg,table:GF,operator:Je.string().valid("and","or").default("and").lowercase(),offset:Je.number().integer().min(0),limit:Je.number().integer().min(1),get_attributes:Je.array().min(1).items(Je.alternatives(hp,Je.object())).optional(),sort:Je.object({attribute:Je.alternatives(hp,Je.array().min(1)),descending:Je.bool().optional()}).optional(),conditions:Je.array().min(1).items(Je.alternatives(Je.object({operator:Je.string().valid("and","or").default("and").lowercase(),conditions:Je.array()}),Je.object({attribute:Je.alternatives(hp,Je.array().min(1)),comparator:Je.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Je.when("comparator",{switch:[{is:"equals",then:Je.any()},{is:"between",then:Je.array().items(Je.alternatives([Je.string(),Je.number()])).length(2)}],otherwise:Je.alternatives(Je.string(),Je.number())}).required()}))).required()});qF.exports=function(e,t){let r=null;switch(t){case"value":r=kF.validateBySchema(e,ere);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(HF("database",e.schema)),i(HF("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=kF.validateBySchema(e,tre);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=zte.checkGlobalSchemaTable(e.schema,e.table);if(s)return Jte(new Error,s,Zte.NOT_FOUND);let o=Xte()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=a(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=FF.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!FF.some(o,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var iw=M((XLe,$F)=>{"use strict";var rre=Et(),nre=ud(),{getSchemaPath:sre}=Rt();$F.exports=ire;function ire(e){let t=nre(e,"hashes");if(t)throw t;let r=sre(e.schema,e.table);return rre.openEnvironment(r,e.table)}a(ire,"initialize")});var ow=M((eDe,VF)=>{"use strict";var ore=ld(),are=iw();VF.exports=cre;async function cre(e){let t=await are(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return ore.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(cre,"lmdbGetDataByHash")});var dd=M((rDe,KF)=>{"use strict";var aw=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};KF.exports=aw});var WF=M((iDe,YF)=>{"use strict";var sDe=dd(),lre=ld(),ure=iw();YF.exports=dre;async function dre(e){let t=await ure(e),r=global.hdb_schema[e.schema][e.table];return lre.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(dre,"lmdbSearchByHash")});var di=M((aDe,jF)=>{"use strict";var cw=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};jF.exports=cw});var Hg=M((lDe,ek)=>{"use strict";var En=ld(),fre=Et(),mre=ae(),Qe=Jt(),Il=(G(),v(j)),pre=Zi(),zF=Jr().LMDB_ERRORS_ENUM,{getSchemaPath:hre}=Rt(),Qo=Il.SEARCH_WILDCARDS;async function Ere(e,t,r){let n;e.schema===Il.SYSTEM_SCHEMA_NAME?n=pre[e.table]:n=global.hdb_schema[e.schema][e.table];let s=ZF(e,n.hash_attribute,r,t);return QF(e,s,n.hash_attribute,r)}a(Ere,"prepSearch");async function QF(e,t,r,n){let s=hre(e.schema,e.table),i=await fre.openEnvironment(s,e.table),o=XF(i,e,t,r),c=o.transaction||i;if([Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Qe.SEARCH_TYPES.SEARCH_ALL,Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(_re(e,r)===!1){let d=e.attribute;if(d===r)return n?JF(o,()=>!0):o.map(m=>({[r]:m.key}));let f=a(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?JF(o,f):o.map(f)}let u=e.attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?En.batchSearchByHashToMap(c,r,e.get_attributes,u):En.batchSearchByHash(c,r,e.get_attributes,u)}a(QF,"executeSearch");function XF(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Qe.SEARCH_TYPES.EQUALS:s=En.equals(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.CONTAINS:s=En.contains(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.ENDS_WITH:case Qe.SEARCH_TYPES._ENDS_WITH:s=En.endsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.STARTS_WITH:case Qe.SEARCH_TYPES._STARTS_WITH:s=En.startsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return En.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return En.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.SEARCH_ALL:return En.searchAll(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return En.searchAllToMap(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.BETWEEN:s=En.between(e,i,t.attribute,t.value,t.end_value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN:case Qe.SEARCH_TYPES._GREATER_THAN:s=En.greaterThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Qe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=En.greaterThanEqual(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN:case Qe.SEARCH_TYPES._LESS_THAN:s=En.lessThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN_EQUAL:case Qe.SEARCH_TYPES._LESS_THAN_EQUAL:s=En.lessThanEqual(e,i,t.attribute,t.value,o,c,l);break;default:return Object.create(null)}return s}a(XF,"searchByType");function JF(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(JF,"createMapFromIterable");function _re(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(_re,"checkToFetchMore");function ZF(e,t,r,n){if(mre.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),Qo.indexOf(s)>-1)return r===!0?Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Qe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Qo[0])<0&&s.indexOf(Qo[1])<0)return c===!0?r===!0?Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Qe.SEARCH_TYPES.EQUALS;if(Qo.indexOf(i)>=0&&Qo.indexOf(o)>=0)return e.value=e.value.slice(1,-1),Qe.SEARCH_TYPES.CONTAINS;if(Qo.indexOf(i)>=0)return e.value=e.value.substr(1),Qe.SEARCH_TYPES.ENDS_WITH;if(Qo.indexOf(o)>=0)return e.value=e.value.slice(0,-1),Qe.SEARCH_TYPES.STARTS_WITH;if(s.includes(Qo[0])||s.includes(Qo[1]))return Qe.SEARCH_TYPES.EQUALS;throw new Error(zF.UNKNOWN_SEARCH_TYPE)}else switch(n){case Il.VALUE_SEARCH_COMPARATORS.BETWEEN:return Qe.SEARCH_TYPES.BETWEEN;case Il.VALUE_SEARCH_COMPARATORS.GREATER:return Qe.SEARCH_TYPES.GREATER_THAN;case Il.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Qe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Il.VALUE_SEARCH_COMPARATORS.LESS:return Qe.SEARCH_TYPES.LESS_THAN;case Il.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Qe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(zF.UNKNOWN_SEARCH_TYPE)}}a(ZF,"createSearchTypeFromSearchObject");ek.exports={executeSearch:QF,createSearchTypeFromSearchObject:ZF,prepSearch:Ere,searchByType:XF}});var rk=M((fDe,tk)=>{"use strict";var dDe=di(),gre=ud(),Sre=ae(),Tre=(G(),v(j)),yre=Hg();tk.exports=Rre;function Rre(e,t){if(!Sre.isEmpty(t)&&Tre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=gre(e,"value");if(n)throw n;return yre.prepSearch(e,t,!0)}a(Rre,"lmdbGetDataByValue")});var Ep=M((hDe,nk)=>{"use strict";var pDe=di(),bre=ud(),Are=ae(),Ire=(G(),v(j)),wre=Hg();nk.exports=Nre;async function Nre(e,t){if(!Are.isEmpty(t)&&Ire.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=bre(e,"value");if(n)throw n;return wre.prepSearch(e,t,!1)}a(Nre,"lmdbSearchByValue")});var ik=M((gDe,sk)=>{"use strict";var _De=Jt(),lw=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},uw=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},dw=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};sk.exports={SearchByConditionsObject:lw,SearchCondition:uw,SortAttribute:dw}});var uk=M((bDe,lk)=>{"use strict";var{SearchByConditionsObject:TDe,SearchCondition:yDe}=ik(),Cre=di(),Ore=ud(),fw=ld(),Gg=Jt(),{Resource:RDe}=(zi(),v(sB)),ck=Hg(),Pre=sw(),Lre=require("lodash"),{getSchemaPath:Dre}=Rt(),ok=Et(),{handleHDBError:vre,hdbErrors:Mre}=Ee(),{HTTP_STATUS_CODES:Ure}=Mre,xre=1e8;lk.exports=Bre;async function Bre(e){let t=Ore(e,"conditions");if(t)throw vre(t,t.message,Ure.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=Dre(e.schema,e.table),n=await ok.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)ok.openDBI(n,u.attribute);let i=Lre.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Gg.SEARCH_TYPES.EQUALS?u.estimated_count=fw.count(n,u.attribute,u.value):d===Gg.SEARCH_TYPES.CONTAINS||d===Gg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=xre}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await ak(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(ck.filterByType),f=d.length,m=fw.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:o,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>Pre.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await ak(o,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=fw.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(Bre,"lmdbSearchByConditions");async function ak(e,t,r,n){let s=new Cre(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Gg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,ck.searchByType(e,s,i,n).map(o=>o.value)}a(ak,"executeConditionSearch")});var _p=M((IDe,dk)=>{"use strict";var Fre=(G(),v(j)).OPERATIONS_ENUM,mw=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=Fre.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};dk.exports=mw});var pw=M((NDe,Sk)=>{"use strict";var hk=di(),Ek=_p(),_k=Ep(),gk=fp(),qn=(G(),v(j)),fk=ae(),mk=Et(),{getTransactionAuditStorePath:kre,getSchemaPath:Hre}=Rt(),pk=Q();Sk.exports=Gre;async function Gre(e){try{if(fk.isEmpty(global.hdb_schema[e.schema])||fk.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await qre(e),await $re(e);let t=Hre(e.schema,e.table);try{await mk.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")pk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=kre(e.schema,e.table);await mk.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")pk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Gre,"lmdbDropTable");async function qre(e){let t=new hk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await _k(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new Ek(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await gk(s)}a(qre,"deleteAttributesFromSystem");async function $re(e){let t=new hk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await _k(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new Ek(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await gk(s)}catch(i){throw i}}a($re,"dropTableFromSystem")});var yk=M((ODe,Tk)=>{"use strict";var Vre=require("fs-extra"),Kre=di(),Yre=dd(),Wre=_p(),jre=pw(),zre=fp(),Jre=ow(),Qre=Ep(),Xo=(G(),v(j)),{getSchemaPath:Xre}=Rt(),{handleHDBError:Zre,hdbErrors:ene}=Ee(),{HDB_ERROR_MSGS:tne,HTTP_STATUS_CODES:rne}=ene;Tk.exports=nne;async function nne(e){let t;try{t=await sne(e.schema);let r=new Kre(Xo.SYSTEM_SCHEMA_NAME,Xo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Xo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Xo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Qre(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await jre(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Wre(Xo.SYSTEM_SCHEMA_NAME,Xo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await zre(s);let i=Xre(t);await Vre.remove(i)}catch(r){throw r}}a(nne,"lmdbDropSchema");async function sne(e){let t=new Yre(Xo.SYSTEM_SCHEMA_NAME,Xo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Xo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Jre(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw Zre(new Error,tne.SCHEMA_NOT_FOUND(e),rne.NOT_FOUND,void 0,void 0,!0);return n}a(sne,"validateDropSchema")});var gp=M((LDe,Rk)=>{"use strict";var hw=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Rk.exports=hw});var _w=M((MDe,bk)=>{"use strict";var ine=require("fs-extra"),qg=Et(),{getTransactionAuditStorePath:one}=Rt(),Ew=Jt(),vDe=gp();bk.exports=ane;async function ane(e){let t;try{let r=one(e.schema,e.table);await ine.mkdirp(r),t=await qg.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{qg.createDBI(t,Ew.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),qg.createDBI(t,Ew.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),qg.createDBI(t,Ew.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(ane,"createTransactionsAuditEnvironment")});var wk=M((BDe,Ik)=>{"use strict";var gw=(G(),v(j)),Ak=Et(),cne=yl(),{getSystemSchemaPath:lne,getSchemaPath:une}=Rt(),xDe=Zi(),dne=vg(),Sw=Dg(),fne=Q(),mne=_w();Ik.exports=pne;async function pne(e,t){let r=une(t.schema,t.table),n=new Sw(t.schema,t.table,gw.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Sw(t.schema,t.table,gw.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Sw(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Ak.createEnvironment(r,t.table),e!==void 0){let o=await Ak.openEnvironment(lne(),gw.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await cne.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Tw(n),await Tw(s),await Tw(i)}await mne(t)}catch(o){throw o}}a(pne,"lmdbCreateTable");async function Tw(e){try{await dne(e)}catch(t){fne.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Tw,"createAttribute")});var Ck=M((kDe,Nk)=>{"use strict";var hne=lp(),Ene=Om(),_ne=Mg(),Sp=(G(),v(j)),gne=yl().updateRecords,Sne=Et(),{getSchemaPath:Tne}=Rt(),yne=up(),Rne=Q();Nk.exports=bne;async function bne(e){try{let{schemaTable:t,attributes:r}=hne(e);Ene(e,r,t.hash_attribute),e.schema!==Sp.SYSTEM_SCHEMA_NAME&&(r.includes(Sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await _ne(e.hdb_auth_header,t,r),s=Tne(e.schema,e.table),i=await Sne.openEnvironment(s,e.table),o=await gne(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await yne(e,o)}catch(c){Rne.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(bne,"lmdbUpdateRecords")});var Pk=M((GDe,Ok)=>{"use strict";var Ane=(G(),v(j)).OPERATIONS_ENUM,yw=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Ane.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Ok.exports=yw});var Dk=M((VDe,Lk)=>{"use strict";var $De=Pk(),Ine=lp(),wne=Om(),Nne=Mg(),Tp=(G(),v(j)),Cne=yl().upsertRecords,One=Et(),{getSchemaPath:Pne}=Rt(),Lne=up(),Dne=Q(),{handleHDBError:vne,hdbErrors:Mne}=Ee();Lk.exports=Une;async function Une(e){let t;try{t=Ine(e)}catch(l){throw vne(l,l.message,Mne.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;wne(e,n,r.hash_attribute),e.schema!==Tp.SYSTEM_SCHEMA_NAME&&(n.includes(Tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Nne(e.hdb_auth_header,r,n),i=Pne(e.schema,e.table),o=await One.openEnvironment(i,e.table),c=await Cne(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Lne(e,c)}catch(l){Dne.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}a(Une,"lmdbUpsertRecords")});var Mk=M((YDe,vk)=>{"use strict";var Rw=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};vk.exports=Rw});var xk=M((jDe,Uk)=>{"use strict";var bw=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};Uk.exports=bw});var kk=M((QDe,Fk)=>{"use strict";var Aw=Et(),{getTransactionAuditStorePath:xne}=Rt(),JDe=Mk(),yp=Jt(),Bne=ae(),Bk=xk(),Fne=require("util").promisify,kne=Fne(setTimeout),Hne=1e4,Gne=100;Fk.exports=qne;async function qne(e){let t=xne(e.schema,e.table),r=await Aw.openEnvironment(t,e.table,!0),n=Aw.listDBIs(r);Aw.initializeDBIs(r,yp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new Bk;do s=await $ne(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 kne(Gne);while(s.transactions_deleted>0);return i}a(qne,"deleteAuditLogsBefore");async function $ne(e,t){let r=new Bk;try{let n=e.dbis[yp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[yp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Bne.isEmpty(c)||(s=e.dbis[yp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[yp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Hne)break}return await s,r}catch(n){throw n}}a($ne,"deleteTransactions")});var Gk=M((ZDe,Hk)=>{"use strict";var Iw=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};Hk.exports=Iw});var $k=M((rve,qk)=>{"use strict";var Vne=di(),Kne=_p(),tve=Gk(),eo=(G(),v(j)),Yne=ae(),ww=Et(),Wne=Zi(),jne=Ep(),zne=fp(),{getSchemaPath:Jne}=Rt();qk.exports=Qne;async function Qne(e,t=!0){let r;e.schema===eo.SYSTEM_SCHEMA_NAME?r=Wne[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Zne(e),s=Jne(e.schema,e.table),i=await ww.openEnvironment(s,e.table);return t===!0&&await Xne(e,i,r.hash_attribute),ww.dropDBI(i,e.attribute),n}a(Qne,"lmdbDropAttribute");async function Xne(e,t,r){let n=ww.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(Xne,"removeAttributeFromAllObjects");async function Zne(e){let t=new Vne(eo.SYSTEM_SCHEMA_NAME,eo.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,eo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[eo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,eo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await jne(t)).filter(o=>o[eo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Yne.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(o=>o[eo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Kne(eo.SYSTEM_SCHEMA_NAME,eo.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return zne(i)}a(Zne,"dropAttributeFromSystem")});var zk=M((ive,jk)=>{"use strict";var Nw=Et(),fd=Jt(),sve=Un(),Cw=(G(),v(j)),Vk=ae(),{getTransactionAuditStorePath:ese}=Rt(),tse=ld(),$g=od(),rse=Q();jk.exports=nse;async function nse(e){let t=ese(e.schema,e.table),r=await Nw.openEnvironment(t,e.table,!0),n=Nw.listDBIs(r);Nw.initializeDBIs(r,fd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Cw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Kk(r,e.search_values);case Cw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,ise(r,e.search_values,s);case Cw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return sse(r,e.search_values);default:return Kk(r)}}a(nse,"readAuditLog");function Kk(e,t=[0,Date.now()]){Vk.isEmpty(t[0])&&(t[0]=0),Vk.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[fd.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 $g,s))}a(Kk,"searchTransactionsByTimestamp");function sse(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[fd.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Wk(e,i))}return Object.fromEntries(r)}a(sse,"searchTransactionsByUsername");function ise(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=tse.equals(e,fd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,fd.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=Wk(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);Yk(l,"records",r,d,o),Yk(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(ise,"searchTransactionsByHashValues");function Yk(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new $g(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new $g(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(Yk,"loopRecords");function Wk(e,t){let r=[];try{let n=e.dbis[fd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new $g,i);r.push(o)}}catch(i){rse.warn(i)}return r}catch(n){throw n}}a(Wk,"batchSearchTransactions")});var Qk=M((lve,Jk)=>{"use strict";var{getSchemaPath:ave}=Rt(),cve=Et(),{database:ose}=(Oe(),v(ft));Jk.exports={writeTransaction:ase};async function ase(e,t,r){return ose({database:e,table:t}).transaction(r)}a(ase,"writeTransaction")});var tH=M((dve,eH)=>{"use strict";var{getSchemaPath:Xk}=Rt(),Zk=Et();eH.exports={flush:cse,resetReadTxn:lse};async function cse(e,t){return(await Zk.openEnvironment(Xk(e,t),t.toString())).flushed}a(cse,"flush");async function lse(e,t){try{(await Zk.openEnvironment(Xk(e,t),t.toString())).resetReadTxn()}catch{}}a(lse,"resetReadTxn")});var iH=M((mve,sH)=>{"use strict";var{Readable:use}=require("stream"),{getDatabases:dse}=(Oe(),v(ft)),{readSync:fse,openSync:mse,createReadStream:rH}=require("fs"),{open:pse}=require("lmdb"),{OpenDBIObject:nH}=sp(),hse=ip(),{AUDIT_STORE_OPTIONS:Ese}=($i(),v(l0)),{INTERNAL_DBIS_NAME:_se,AUDIT_STORE_NAME:gse}=Jt();sH.exports=Tse;var Ow=32768,Sse=100;async function Tse(e){let t=e.database||e.schema||"data",r=dse()[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=pse({noSync:!0,maxDbs:hse.MAX_DBS}),m,p=f.openDB(_se,new nH(!1)),h=d.useReadTransaction(),E=0,_=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let w=f.openDB(S,y),I=d.openDB(S,y);for(let{key:H,version:X,value:q}of I.getRange({start:null,transaction:h,versions:I.useVersions}))m=w.put(H,q,X),E++%Sse===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(w=>S.startsWith?.(w+"/"))){p.put(S,y);let[,w]=S.split("/"),I=!w,H=new nH(!I,I);await _(S,H)}e.include_audit&&await _(gse,{...Ese}),await m;let R=rH(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=mse(o.path);return o.transaction(()=>{let u=Buffer.alloc(Ow);fse(c,u,0,Ow),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let f=rH(null,{fd:c,start:Ow}),m=new use.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(Tse,"getBackup")});var cH=M((hve,aH)=>{"use strict";var yse=Q(),{handleHDBError:Rse}=Ee(),bse=FB(),Ase=vg(),Ise=ZI(),wse=yF(),Nse=fp(),Cse=ow(),Ose=WF(),Pse=rk(),Lse=Ep(),Dse=uk(),vse=yk(),Mse=wk(),Use=Ck(),xse=Dk(),Bse=kk(),Fse=pw(),kse=$k(),Hse=zk(),Gse=Qk(),oH=tH(),qse=iH(),Pw=class extends bse{static{a(this,"LMDBBridge")}async searchByConditions(t){return Dse(t)}async getDataByHash(t){return await Cse(t)}async searchByHash(t){return await Ose(t)}async getDataByValue(t,r){return await Pse(t,r)}async searchByValue(t){return await Lse(t)}async createSchema(t){return await wse(t)}async dropSchema(t){return await vse(t)}async createTable(t,r){return await Mse(t,r)}async dropTable(t){return await Fse(t)}async createAttribute(t){return await Ase(t)}async createRecords(t){return await Ise(t)}async updateRecords(t){return await Use(t)}async upsertRecords(t){try{return await xse(t)}catch(r){throw Rse(r,null,null,yse.ERR,r)}}async deleteRecords(t){return await Nse(t)}async dropAttribute(t){return await kse(t)}async deleteAuditLogsBefore(t){return await Bse(t)}async readAuditLog(t){return await Hse(t)}writeTransaction(t,r,n){return Gse.writeTransaction(t,r,n)}flush(t,r){return oH.flush(t,r)}resetReadTxn(t,r){return oH.resetReadTxn(t,r)}getBackup(t){return qse(t)}};aH.exports=Pw});function $n(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function bp(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=a(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"ID":d=a(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Float":case"Number":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a number, attempt to assign ${p}`);$n(this)[u]=m},"set");break;case"Int":d=a(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Long":d=a(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"BigInt":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be a number, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Boolean":d=a(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a boolean, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Date":d=a(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ds.ClientError(`${u} must be a Date, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Bytes":d=a(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Blob":d=a(function(m){if(!(m instanceof Ds||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Blob, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Any":case void 0:d=a(function(m){$n(this)[u]=m},"set");break;default:d=a(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be an object, attempt to assign ${m}`);$n(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=Lw(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}o("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),o("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ds.ClientError("Can not add a property to a sealed table schema");$n(this)[l]=u}),o("deleteProperty",function(l){$n(this)[l]=void 0}),o("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||o("get",n.getProperty),n.delete||o("delete",n.deleteProperty),n.then||o("then",null);function o(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}a(o,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?dH:uH);break}c=l}while(c&&c!==uH&&c!==dH)}function fH(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(lH[t])return lH[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=Lw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function $se(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 Lw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends Nl{static{a(this,"TrackedObject")}},bp(r,t)),new r(e)):new Nl(e);case Array:let n=new Kg(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Lw(o,t?.elements)),n[s]=o}return n;default:return e}}function Yg(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Yg(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 Cl(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Cl(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=TA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Cl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Vse.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Vg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[wl]||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(Vg(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(Vg(s))return!0}else return!0}else return!0}}return!1}var ds,lH,uH,dH,Nl,Vse,wl,Kg,Rp,Dw=se(()=>{ds=b(Ee());F_();ss();a($n,"getChanges");a(bp,"assignTrackedAccessors");lH=Object.prototype,uH=new Proxy({},{get:fH}),dH=new Proxy({},{get:fH,set:$se});a(fH,"getProxiedProperty");a($se,"setProxiedProperty");a(Lw,"trackObject");Nl=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};bp(Nl,{},!0);a(Yg,"collapseData");Vse=Object.prototype.hasOwnProperty;a(Cl,"updateAndFreeze");a(Vg,"hasChanges");wl=Symbol.for("has-array-changes"),Kg=class extends Array{static{a(this,"TrackedArray")}#e;[wl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[wl]=!0,super.splice(...t)}push(...t){return this[wl]=!0,super.push(...t)}pop(){return this[wl]=!0,super.pop()}unshift(...t){return this[wl]=!0,super.unshift(...t)}shift(){return this[wl]=!0,super.shift()}};Kg.prototype.constructor=Array;Rp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var TH={};ye(TH,{ResourceBridge:()=>Uw});function xw({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 mH(e,t){let r=to(e),n=xw(e,r);if(!r)throw new fi.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;bt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&Yg(d)}catch(f){d={message:(0,SH.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function to(e){let t=e.database||e.schema||Yse,r=lt()[t];if(!r)throw(0,fi.handleHDBError)(new Error,Kse.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function pH(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*hH(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var EH,Wg,fi,_H,vw,Mw,gH,SH,Kse,Yse,Wse,jse,Uw,yH=se(()=>{EH=b(cH()),Wg=b(ud()),fi=b(Ee());Oe();_H=b(lp());G();vw=b(Jo()),Mw=b(ls()),gH=b(ae());ja();Dw();SH=b(Q()),{HDB_ERROR_MSGS:Kse}=fi.hdbErrors,Yse="data",Wse=1e4,jse=10,Uw=class extends EH.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=to(t);if(!r)throw new fi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let o=i;return{attribute:o.attribute??o.search_attribute,comparator:o.comparator??o.search_type,value:o.value!==void 0?o.value:o.search_value}}}a(n,"mapCondition");let s=(0,Wg.default)(t,"conditions");if(s)throw(0,fi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:xw(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new fi.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}]}ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await to(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=to(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(o);return i(o,d,f)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return to(t).dropTable()}createSchema(t){return md({database:t.schema,table:null}),vw.signalSchemaChange(new Mw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Bw(t.schema),vw.signalSchemaChange(new Mw.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,_H.default)(t),s,i=lt()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),bt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,o);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Yg(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=lt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),bt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return pH(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=lt()[t.schema][t.table];if(!r.createdTimeProperty)throw new fi.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:g_.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,gH.asyncSetTimeout)(jse),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Wse===0&&await u();return l.length>0&&await u(),s?pH(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Wg.default)(t,"hashes");if(r)throw r;return mH(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of mH(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&nA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,Wg.default)(t,"value");if(n)throw n;let s=to(t);if(!s)throw new fi.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===g_.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:xw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=to(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){to({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return to(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=to(t),n={};switch(t.search_type){case S_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let o=i.operation??i.type;return o==="put"&&(o="upsert"),{operation:o,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case S_.USERNAME:{let s=t.search_values;for await(let i of hH(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return hH(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(xw,"getSelect");a(mH,"getRecords");a(to,"getTable");a(pH,"createDeleteResponse");a(hH,"groupRecordsInHistory")});var fs=M((wve,RH)=>{"use strict";var{ResourceBridge:zse}=(yH(),v(TH)),Jse=fe();Jse.initSync();var jg;function Qse(){return jg||(jg=new zse,jg)}a(Qse,"getBridge");RH.exports=Qse()});var ro=M((Cve,IH)=>{var Xse=Zi(),{promisify:Zse}=require("util"),{getDatabases:AH}=(Oe(),v(ft));IH.exports={setSchemaDataToGlobal:bH,getTableSchema:eie,getSystemSchema:tie,setSchemaDataToGlobalAsync:Zse(bH)};function bH(e){global.hdb_schema=AH(),e&&e()}a(bH,"setSchemaDataToGlobal");function eie(e,t,r){let n=AH()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(eie,"getTableSchema");function tie(){return Xse}a(tie,"getSystemSchema")});var Vn=M((Pve,OH)=>{"use strict";var Jg=UI(),rn=ae(),rie=require("util"),Qg=fs(),nie=ro(),wH=Q(),{handleHDBError:Ol,hdbErrors:sie}=Ee(),{HTTP_STATUS_CODES:Pl}=sie,iie=rie.promisify(nie.getTableSchema),oie="updated",NH="inserted",CH="upserted";OH.exports={insert:cie,update:lie,upsert:uie,validation:aie,flush:die};async function aie(e){if(rn.isEmpty(e))throw new Error("invalid update parameters defined.");if(rn.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(rn.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await iie(e.schema,e.table),r=Jg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&rn.isEmptyOrZeroLength(c[n]))throw wH.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(!rn.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw wH.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!rn.isEmpty(c[n])&&c[n]!==""&&s.has(rn.autoCast(c[n]))&&(c.skip=!0),s.add(rn.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(aie,"validation");async function cie(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Jg(e);if(t)throw Ol(new Error,t.message,Pl.BAD_REQUEST);rn.transformReq(e);let r=rn.checkSchemaTableExist(e.schema,e.table);if(r)throw Ol(new Error,r,Pl.BAD_REQUEST);let n=await Qg.createRecords(e);return zg(NH,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(cie,"insertData");async function lie(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Jg(e);if(t)throw Ol(new Error,t.message,Pl.BAD_REQUEST);rn.transformReq(e);let r=rn.checkSchemaTableExist(e.schema,e.table);if(r)throw Ol(new Error,r,Pl.BAD_REQUEST);let n=await Qg.updateRecords(e);return rn.isEmpty(n.existing_rows)?zg(oie,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):zg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(lie,"updateData");async function uie(e){if(e.operation!=="upsert")throw Ol(new Error,"invalid operation, must be upsert",Pl.INTERNAL_SERVER_ERROR);let t=Jg(e);if(t)throw Ol(new Error,t.message,Pl.BAD_REQUEST);rn.transformReq(e);let r=rn.checkSchemaTableExist(e.schema,e.table);if(r)throw Ol(new Error,r,Pl.BAD_REQUEST);let n=await Qg.upsertRecords(e);return zg(CH,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(uie,"upsertData");function zg(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===NH?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===CH?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(zg,"returnObject");function die(e){return rn.transformReq(e),Qg.flush(e.schema,e.table)}a(die,"flush")});var kw=M((Dve,DH)=>{var fie=mt(),Fw=require("joi"),{hdbTable:mie,hdbDatabase:PH}=Qi(),LH={schema:PH,database:PH,table:mie},pie={date:Fw.date().iso().required()},hie={timestamp:Fw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};DH.exports=function(e,t){let r=t==="timestamp"?{...LH,...hie}:{...LH,...pie},n=Fw.object(r);return fie.validateBySchema(e,n)}});var UH=M((vve,MH)=>{var Eie=mt(),Hw=require("joi"),{hdbTable:_ie,hdbDatabase:vH}=Qi(),gie=Hw.object({schema:vH,database:vH,table:_ie,hash_values:Hw.array().required(),ids:Hw.array()});MH.exports=function(e){return Eie.validateBySchema(e,gie)}});var Vw=M((Mve,xH)=>{"use strict";var Gw=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},qw=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=o}},$w=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};xH.exports={InsertObject:Gw,NoSQLSeachObject:qw,DeleteResponseObject:$w}});var vl=M((xve,GH)=>{"use strict";var FH=kw(),Sie=UH(),Ll=ae(),BH=require("moment"),kH=Q(),{promisify:Tie,callbackify:yie}=require("util"),Dl=(G(),v(j)),Rie=ro(),Kw=Tie(Rie.getTableSchema),Yw=fs(),{DeleteResponseObject:bie}=Vw(),{handleHDBError:oc,hdbErrors:Aie}=Ee(),{HDB_ERROR_MSGS:Xg,HTTP_STATUS_CODES:ac}=Aie,Iie="records successfully deleted",wie=yie(HH);GH.exports={delete:wie,deleteRecord:HH,deleteFilesBefore:Nie,deleteAuditLogsBefore:Cie};async function Nie(e){let t=FH(e,"date");if(t)throw oc(t,t.message,ac.BAD_REQUEST,void 0,void 0,!0);if(Ll.transformReq(e),!BH(e.date,BH.ISO_8601).isValid())throw oc(new Error,Xg.INVALID_DATE,ac.BAD_REQUEST,Dl.LOG_LEVELS.ERROR,Xg.INVALID_DATE,!0);let n=Ll.checkSchemaTableExist(e.schema,e.table);if(n)throw oc(new Error,n,ac.NOT_FOUND,Dl.LOG_LEVELS.ERROR,n,!0);let s=await Yw.deleteRecordsBefore(e);if(await Kw(e.schema,e.table),kH.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(Nie,"deleteFilesBefore");async function Cie(e){let t=FH(e,"timestamp");if(t)throw oc(t,t.message,ac.BAD_REQUEST,void 0,void 0,!0);if(Ll.transformReq(e),isNaN(e.timestamp))throw oc(new Error,Xg.INVALID_VALUE("Timestamp"),ac.BAD_REQUEST,Dl.LOG_LEVELS.ERROR,Xg.INVALID_VALUE("Timestamp"),!0);let r=Ll.checkSchemaTableExist(e.schema,e.table);if(r)throw oc(new Error,r,ac.NOT_FOUND,Dl.LOG_LEVELS.ERROR,r,!0);let n=await Yw.deleteAuditLogsBefore(e);return await Kw(e.schema,e.table),kH.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Cie,"deleteAuditLogsBefore");async function HH(e){e.ids&&(e.hash_values=e.ids);let t=Sie(e);if(t)throw oc(t,t.message,ac.BAD_REQUEST,void 0,void 0,!0);Ll.transformReq(e);let r=Ll.checkSchemaTableExist(e.schema,e.table);if(r)throw oc(new Error,r,ac.NOT_FOUND,Dl.LOG_LEVELS.ERROR,r,!0);try{await Kw(e.schema,e.table);let n=await Yw.deleteRecords(e);return Ll.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Iie}`),n}catch(n){if(n.message===Dl.SEARCH_NOT_FOUND_MESSAGE){let s=new bie;return s.message=Dl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(HH,"deleteRecord")});var Qw={};ye(Qw,{HASH_FUNCTION:()=>$r,hash:()=>zw,validate:()=>Jw});function Ww(e=Ip){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Ap.randomBytes(e)).map(r=>t[r%t.length]).join("")}function zw(e,t=$r[$H?.toUpperCase()]??$r.SHA256){return jw[t](e)}function Jw(e,t,r=$r[$H?.toUpperCase()]??$r.SHA256){return e?Oie[r](e,t):!1}var Ap,pd,qH,$H,Ip,VH,$r,jw,Oie,Xw=se(()=>{Ap=b(require("node:crypto")),pd=b(require("argon2")),qH=b(fe());G();$H=(0,qH.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Ip=16,VH=9,$r={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(Ww,"generateSalt");jw={[$r.MD5]:(e,t=void 0)=>{t=t??Ww(VH);let r=Ap.createHash($r.MD5).update(e+t).digest("hex");return t+r},[$r.SHA256]:(e,t=void 0)=>{t=t??Ww(Ip);let r=Ap.createHash($r.SHA256).update(e+t).digest("hex");return t+r},[$r.ARGON2ID]:async e=>{let t=Ww(Ip),r=await pd.hash(e,{type:pd.argon2id,salt:Buffer.from(t)});return t+r}},Oie={[$r.MD5]:(e,t)=>{let r=e.slice(0,VH);return e===jw[$r.MD5](t,r)},[$r.SHA256]:(e,t)=>{let r=e.slice(0,Ip);return e===jw[$r.SHA256](t,r)},[$r.ARGON2ID]:async(e,t)=>await pd.verify(e.slice(Ip),t)};a(zw,"hash");a(Jw,"validate")});var YH=M((Hve,KH)=>{var Zw=mt(),_n={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Pie(e){return _n.password.presence=!0,_n.username.presence=!0,_n.role.presence=!0,_n.active.presence=!0,Zw.validateObject(e,_n)}a(Pie,"addUserValidation");function Lie(e){return _n.password.presence=!1,_n.username.presence=!0,_n.role.presence=!1,_n.active.presence=!1,Zw.validateObject(e,_n)}a(Lie,"alterUserValidation");function Die(e){return _n.password.presence=!1,_n.username.presence=!0,_n.role.presence=!1,_n.active.presence=!1,Zw.validateObject(e,_n)}a(Die,"dropUserValidation");KH.exports={addUserValidation:Pie,alterUserValidation:Lie,dropUserValidation:Die}});var iG=M(($ve,sG)=>{"use strict";var eN=require("recursive-iterator"),vie=require("alasql"),tN=require("clone"),WH=ae(),{handleHDBError:jH,hdbErrors:Mie}=Ee(),{HDB_ERROR_MSGS:zH,HTTP_STATUS_CODES:JH}=Mie,{getDatabases:Uie}=(Oe(),v(ft)),xie=["DISTINCT_ARRAY"],QH=Symbol("validateTables"),rN=Symbol("validateTable"),qve=Symbol("getAllColumns"),XH=Symbol("validateAllColumns"),Zg=Symbol("findColumn"),ZH=Symbol("validateOrderBy"),wp=Symbol("validateSegment"),nN=Symbol("validateColumn"),eG=Symbol("setColumnsForTable"),tG=Symbol("checkColumnsForAsterisk"),rG=Symbol("validateGroupBy"),nG=Symbol("hasColumns"),sN=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[QH](),this[tG](),this[XH]()}[QH](){if(this[nG]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[rN](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[rN](t.table)})}}[nG](){let t=!1,r=new eN(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[rN](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Uie();if(!r[t.databaseid])throw jH(new Error,zH.SCHEMA_NOT_FOUND(t.databaseid),JH.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw jH(new Error,zH.TABLE_NOT_FOUND(t.databaseid,t.tableid),JH.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=tN(s);i.table=tN(t),this.attributes.push(i)})}[Zg](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)}[tG](){let t=new eN(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[eG](r.tableid)}[eG](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new vie.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[XH](){this[wp](this.statement.columns,!1),this[wp](this.statement.joins,!1),this[wp](this.statement.where,!1),this[rG](this.statement.group,!1),this[wp](this.statement.order,!0)}[wp](t,r){if(!t)return;let n=new eN(t),s=[];for(let{node:i,path:o}of n)!WH.isEmpty(i)&&!WH.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ZH](i):s.push(this[nN](i)));return s}[rG](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&xie.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=tN(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Zg](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Zg](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[ZH](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[nN](t)}[nN](t){let r=this[Zg](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]}};sG.exports=sN});var lG=M((Kve,cG)=>{"use strict";var oG=require("lodash"),Np=require("mathjs"),Bie=require("jsonata"),aG=ae();cG.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?oG.uniqWith(e,oG.isEqual):e,"distinct_array"),searchJSON:Fie,mad:Cp.bind(null,Np.mad),mean:Cp.bind(null,Np.mean),mode:Cp.bind(null,Np.mode),prod:Cp.bind(null,Np.prod),median:Cp.bind(null,Np.median)};function Cp(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Cp,"aggregateFunction");function Fie(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(aG.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),aG.isEmpty(this.__ala__.res[r])){let n=Bie(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(Fie,"searchJSON")});var dG=M((Wve,uG)=>{"use strict";var mr=require("moment"),iN="YYYY-MM-DDTHH:mm:ss.SSSZZ";mr.suppressDeprecationWarnings=!0;uG.exports={current_date:a(()=>mr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>mr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return mr(e).utc().format("YYYY");case"month":return mr(e).utc().format("MM");case"day":return mr(e).utc().format("DD");case"hour":return mr(e).utc().format("HH");case"minute":return mr(e).utc().format("mm");case"second":return mr(e).utc().format("ss");case"millisecond":return mr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>mr(e).utc().format(iN),"date"),date_format:a((e,t)=>mr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>mr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>mr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=mr(e).utc(),s=mr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>mr().utc().valueOf(),"now"),get_server_time:a(()=>mr().format(iN),"get_server_time"),offset_utc:a((e,t)=>mr(e).utc().utcOffset(t).format(iN),"offset_utc")}});var hG=M((zve,pG)=>{"use strict";var kie=require("@turf/area"),Hie=require("@turf/length"),Gie=require("@turf/circle"),qie=require("@turf/difference"),$ie=require("@turf/distance"),Vie=require("@turf/boolean-contains"),Kie=require("@turf/boolean-equal"),Yie=require("@turf/boolean-disjoint"),Wie=require("@turf/helpers"),fG=(G(),v(j)),Ze=ae(),Zo=Q();pG.exports={geoArea:jie,geoLength:zie,geoCircle:Jie,geoDifference:Qie,geoDistance:mG,geoNear:Xie,geoContains:Zie,geoEqual:eoe,geoCrosses:toe,geoConvert:roe};function jie(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return kie.default(e)}catch(t){return Zo.trace(t,e),NaN}}a(jie,"geoArea");function zie(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return Hie.default(e,{units:t||"kilometers"})}catch(r){return Zo.trace(r,e),NaN}}a(zie,"geoLength");function Jie(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return Gie.default(e,t,{units:r||"kilometers"})}catch(n){return Zo.trace(n,e,t),NaN}}a(Jie,"geoCircle");function Qie(e,t){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return qie(e,t)}catch(r){return Zo.trace(r,e,t),NaN}}a(Qie,"geoDifference");function mG(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return $ie.default(e,t,{units:r||"kilometers"})}catch(n){return Zo.trace(n,e,t),NaN}}a(mG,"geoDistance");function Xie(e,t,r,n){if(Ze.isEmpty(e)||Ze.isEmpty(t))return!1;if(Ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return mG(e,t,n)<=r}catch(s){return Zo.trace(s,e,t),!1}}a(Xie,"geoNear");function Zie(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Vie.default(e,t)}catch(r){return Zo.trace(r,e,t),!1}}a(Zie,"geoContains");function eoe(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Kie.default(e,t)}catch(r){return Zo.trace(r,e,t),!1}}a(eoe,"geoEqual");function toe(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return!Yie.default(e,t)}catch(r){return Zo.trace(r,e,t),!1}}a(toe,"geoCrosses");function roe(e,t,r){if(Ze.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ze.isEmpty(t))throw new Error("geo_type is required");if(Ze.isEmpty(fG.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(fG.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),Wie[t](e,r)}a(roe,"geoConvert")});var eS=M((Qve,EG)=>{var Ml=lG(),ms=dG(),no=hG();EG.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=ms.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ms.current_time,e.fn.extract=e.fn.EXTRACT=ms.extract,e.fn.date=e.fn.DATE=ms.date,e.fn.date_format=e.fn.DATE_FORMAT=ms.date_format,e.fn.date_add=e.fn.DATE_ADD=ms.date_add,e.fn.date_sub=e.fn.DATE_SUB=ms.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ms.date_diff,e.fn.now=e.fn.NOW=ms.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ms.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ms.get_server_time,e.fn.getdate=e.fn.GETDATE=ms.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ms.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=no.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=no.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=no.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=no.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=no.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=no.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=no.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=no.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=no.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=no.geoNear}});var TG=M((Xve,SG)=>{"use strict";var Op=require("lodash"),Kn=require("alasql");Kn.options.cache=!1;var noe=eS(),_G=require("clone"),tS=require("recursive-iterator"),Ve=Q(),it=ae(),hd=fs(),soe=(G(),v(j)),{hdbErrors:ioe}=Ee(),{getDatabases:gG}=(Oe(),v(ft)),ooe="IS NULL",mi="There was a problem performing this search. Please check the logs and try again.";noe(Kn);var oN=class{static{a(this,"SQLSearch")}constructor(t,r){if(it.isEmpty(t))throw Ve.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),it.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!it.isEmptyOrZeroLength(n))return Ve.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ve.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ve.error(n),new Error(mi)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ve.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ve.error(n),new Error(mi)}if(Object.keys(this.data).length===0)return Ve.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ve.error("Error thrown from processJoins in SQLSearch class method search."),Ve.error(n),new Error(mi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ve.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ve.error(n),new Error(mi)}try{return t=await this._finalSQL(),t}catch(n){throw Ve.error("Error thrown from finalSQL in SQLSearch class method search."),Ve.error(n),new Error(mi)}}_getColumns(){let t=new tS(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(_G(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Op.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=gG()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(it.isEmpty(this.statement.where)){Ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new tS(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!it.isEmpty(r)&&r.right)if(it.isNotEmptyAndHasValue(r.right.value)){let n=it.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Kn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=it.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Kn.yy.LogicValue({value:i}):n instanceof Kn.yy.StringValue&&it.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Kn.yy.NumValue({value:i}))});if(t){Ve.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new tS(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!it.isEmpty(soe.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(it.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(it.isEmptyOrZeroLength(r.left.columnid)||it.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(it.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!it.isEmpty(r.right.value)||!it.isEmpty(r.left.value)?n.add(it.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from)&&it.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Op.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(it.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);it.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(it.isEmptyOrZeroLength(this.all_table_attributes)&&!it.isEmptyOrZeroLength(this.columns.columns))return t;if(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Kn.promise(r)}catch(r){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ve.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(_G(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(it.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(ooe)>-1&&this.tables.forEach(s=>{let i={columnid:gG()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Op.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hashName;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!it.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await hd.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 Ve.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(mi)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await hd.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(mi)}else if(!it.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await hd.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,_]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ve.error(d),new Error(mi)}else try{c.attribute=s.attribute,c.value="*";let d=await hd.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 Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ve.error(d),new Error(mi)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Kn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Kn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Kn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Kn.yy.FuncValue:new Kn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let o=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;o.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Kn.promise(h,t),t=null}catch(p){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ve.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];o.forEach(_=>{E[_.key]!==null&&E[_.key]!==void 0&&_.keys.add(E[_.key])})}o.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=Op.difference(h,[...p.keys].map(_=>_.toString()));for(let _=0,R=E.length;_<R;_++){let S=E[_];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new tS(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=Op.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 Ve.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ve.error(i),new Error(mi)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await hd.getDataByHash(c),u=s.columns.length;for(let d=0,f=o.length;d<f;d++){let m=o[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],_=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(_)}}}}catch(r){throw Ve.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ve.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ve.trace(`Final SQL: ${s}`),n=await Kn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ve.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ve.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 Ve.error(ioe.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ve.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let o=await hd.getDataByValue(i);for(let[c,l]of o)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ve.error("There was an error when processing this SQL operation. Check your logs"),Ve.error(o),new Error(mi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};SG.exports=oN});var gn=M((eMe,yG)=>{"use strict";yG.exports={searchByConditions:aoe,searchByHash:coe,searchByValue:loe,search:uoe};var aN=fs(),{transformReq:cN}=ae();async function aoe(e){return cN(e),aN.searchByConditions(e)}a(aoe,"searchByConditions");async function coe(e){cN(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of aN.searchByHash(e))r&&t.push(r);return t}a(coe,"searchByHash");async function loe(e){cN(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of aN.searchByValue(e))t.push(r);return t}a(loe,"searchByValue");function uoe(e,t){try{let r=iG(),n=TG(),s=new r(e);s.validate(),new n(s.statement,s.attributes).search().then(o=>{t(null,o)}).catch(o=>{t(o,null)})}catch(r){return t(r)}}a(uoe,"search")});var so=M((rMe,IG)=>{"use strict";var Pp=require("crypto"),doe=fe(),{CONFIG_PARAMS:foe}=(G(),v(j)),bG="aes-256-cbc",moe=32,poe=16,lN=64,AG=32,hoe=lN+AG,RG=new Map;IG.exports={encrypt:Eoe,decrypt:_oe,createNatsTableStreamName:goe};function Eoe(e){let t=Pp.randomBytes(moe),r=Pp.randomBytes(poe),n=Pp.createCipheriv(bG,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(Eoe,"encrypt");function _oe(e){let t=e.substr(0,lN),r=e.substr(lN,AG),n=e.substr(hoe,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Pp.createDecipheriv(bG,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(_oe,"decrypt");function goe(e,t){let r=doe.get(foe.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=RG.get(r);return n||(n=Pp.createHash("md5").update(r).digest("hex"),RG.set(r,n)),n}a(goe,"createNatsTableStreamName")});var Pt=M((iMe,NG)=>{"use strict";var{platform:sMe}=require("os"),Soe="nats-server.zip",uN="nats-server",Toe=process.platform==="win32"?`${uN}.exe`:uN,yoe=/^[^\s.,*>]+$/,wG="__request__",Roe=a(e=>`${e}.${wG}`,"REQUEST_SUBJECT"),boe={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Aoe={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Ioe={HUB:"hub.pid",LEAF:"leaf.pid"},woe={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Noe={SUCCESS:"success",ERROR:"error"},Coe={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Ooe={TXN:"txn",MSGID:"msgid"},Ed={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Poe={[Ed.ERR]:1,[Ed.WRN]:2,[Ed.INF]:3,[Ed.DBG]:4,[Ed.TRC]:5},Loe={debug:"-D",trace:"-DVV"};NG.exports={NATS_SERVER_ZIP:Soe,NATS_SERVER_NAME:uN,NATS_BINARY_NAME:Toe,PID_FILES:Ioe,NATS_CONFIG_FILES:Aoe,SERVER_SUFFIX:woe,NATS_TERM_CONSTRAINTS_RX:yoe,REQUEST_SUFFIX:wG,UPDATE_REMOTE_RESPONSE_STATUSES:Noe,CLUSTER_STATUS_STATUSES:Coe,REQUEST_SUBJECT:Roe,SUBJECT_PREFIXES:Ooe,MSG_HEADERS:boe,LOG_LEVELS:Ed,LOG_LEVEL_FLAGS:Loe,LOG_LEVEL_HIERARCHY:Poe}});var dN=M(Sn=>{"use strict";var Doe={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
12
12
  `),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
13
13
  `)},voe="certificate.pem",Moe="privateKey.pem",Uoe="caCertificate.pem",xoe="natsCertificate.pem",Boe="natsCaCertificate.pem",Lt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},Foe={tls_certificate:Lt.SERVER,tlsCertificateAuthority:Lt.CA,customFunctions_tls_certificate:Lt.SERVER,customFunctionsTlsCertificateAuthority:Lt.CA,operationsApi_tls_certificate:Lt["OPERATIONS-API"],operationsApiTlsCertificateAuthority:Lt["OPERATIONS-CA"]},koe={[Lt.SERVER]:2,[Lt.DEFAULT]:1},Hoe={[Lt["OPERATIONS-API"]]:3,[Lt.SERVER]:2,[Lt.DEFAULT]:1},Goe={[Lt["OPERATIONS-API"]]:3,[Lt.SERVER]:2,[Lt.DEFAULT]:1},qoe={[Lt["OPERATIONS-CA"]]:3,[Lt.CA]:2,[Lt["DEFAULT-CA"]]:1},$oe={[Lt["OPERATIONS-CA"]]:3,[Lt.CA]:2,[Lt["DEFAULT-CA"]]:1},Voe={[Lt.CA]:2,[Lt["DEFAULT-CA"]]:1};Sn.CERTIFICATE_PEM_NAME=voe;Sn.PRIVATEKEY_PEM_NAME=Moe;Sn.CA_PEM_NAME=Uoe;Sn.CERT_NAME=Lt;Sn.CERT_CONFIG_NAME_MAP=Foe;Sn.CERT_PREFERENCE_APP=koe;Sn.CERT_PREFERENCE_OPS=Hoe;Sn.CERT_PREFERENCE_REP=Goe;Sn.CA_CERT_PREFERENCE_REP=qoe;Sn.CA_CERT_PREFERENCE_OPS=$oe;Sn.CA_CERT_PREFERENCE_APP=Voe;Sn.CERTIFICATE_VALUES=Doe;Sn.NATS_CERTIFICATE_PEM_NAME=xoe;Sn.NATS_CA_PEM_NAME=Boe});var mN=M((lMe,vG)=>{"use strict";var LG=require("fs-extra"),Re=require("joi"),Koe=require("os"),{boolean:We,string:_t,number:pr,array:cc}=Re.types(),{totalmem:CG}=require("os"),Ul=require("path"),Yoe=Q(),fN=ae(),cMe=dN(),OG=(G(),v(j)),Woe=mt(),PG="log",joe="components",zoe="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Joe="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Qoe="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Xoe="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Zoe="rootPath config parameter is undefined",Yn=Re.alternatives([pr.min(0),_t]).optional().empty(null),rS=Re.alternatives([cc.items(_t,{host:_t.required(),port:Yn},{hostname:_t.required(),port:Yn}).empty(null),cc.items(_t)]),io,DG=!1;vG.exports={configValidator:eae,routesValidator:oae,routeConstraints:rS};function eae(e,t=!1){if(DG=t,io=e.rootPath,fN.isEmpty(io))throw Zoe;let r=We.optional(),n=pr.min(0).max(1e3).empty(null).default(iae),s=_t.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Lp),i=_t.optional().empty(null),o=_t.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Re.string().empty(null).default(Lp),l=Re.custom(rae).empty(null).default(Lp),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:Yn,routes:rS}).required()}).required(),leafNodes:Re.object({network:Re.object({port:Yn}).required()}).required(),network:Re.object({port:Yn}).required()}).required(),leafServer:Re.object({network:Re.object({port:Yn,routes:rS}).required(),streams:Re.object({maxAge:pr.min(120).allow(null).optional(),maxBytes:pr.min(1).allow(null).optional(),maxMsgs:pr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Re.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:We.optional(),databaseLevel:We.optional(),tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:We.required(),verify:We.optional()}),user:_t.optional().empty(null)}).optional():f=Re.object({enabled:r,tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:We.optional()})}).optional(),Re.object({authentication:Re.alternatives(Re.object({authorizeLocal:We,cacheTTL:pr.required(),cookie:Re.object({domains:cc.items(_t).optional(),expires:_t.optional()}),enableSessions:We,hashFunction:_t.valid("md5","sha256","argon2id").optional().empty(null)}),We).optional(),analytics:Re.object({aggregatePeriod:pr,replicate:We.optional()}),replication:Re.object({hostname:Re.alternatives(_t,pr).optional().empty(null),url:_t.optional().empty(null),port:Yn,securePort:Yn,routes:cc.optional().empty(null),databases:Re.alternatives(_t,cc),enableRootCAs:We.optional(),copyTablesToCatchUp:We.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:Re.object({enabled:r}).required(),logging:Re.object({auditAuthEvents:Re.object({logFailed:We,logSuccessful:We}),file:We.required(),level:Re.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Re.object({enabled:We.optional(),compress:We.optional(),interval:_t.custom(sae).optional().empty(null),maxSize:_t.custom(nae).optional().empty(null),path:_t.optional().empty(null).default(Lp)}).required(),root:s,stdStreams:We.required(),auditLog:We.required()}).required(),operationsApi:Re.object({network:Re.object({cors:We.optional(),corsAccessList:cc.optional(),headersTimeout:pr.min(1).optional(),keepAliveTimeout:pr.min(1).optional(),port:Yn,domainSocket:Re.optional().empty("hdb/operations-server").default(Lp),securePort:Yn,timeout:pr.min(1).optional()}).optional(),tls:Re.alternatives([Re.array().items(d),d])}).required(),rootPath:_t.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Re.object({network:Re.object({port:Yn,securePort:Yn,mtls:Re.alternatives([We.optional(),Re.object({user:_t.optional(),certificateAuthority:i,required:We.optional()})])}).required(),webSocket:We.optional(),requireAuthentication:We.optional()}),http:Re.object({compressionThreshold:pr.optional(),cors:We.optional(),corsAccessList:cc.optional(),headersTimeout:pr.min(1).optional(),port:Yn,securePort:Yn,maxHeaderSize:pr.optional(),mtls:Re.alternatives([We.optional(),Re.object({user:_t.optional(),certificateAuthority:i,required:We.optional()})]),threadRange:Re.alternatives([cc.optional(),_t.optional()])}).required(),threads:Re.alternatives(n.optional(),Re.object({count:n.optional(),debug:Re.alternatives(We.optional(),Re.object({startingPort:pr.min(1).optional(),host:_t.optional(),waitForDebugger:We.optional()})),maxHeapMemory:pr.min(0).optional()})),storage:Re.object({writeAsync:We.required(),overlappingSync:We.optional(),caching:We.optional(),compression:Re.alternatives([We.optional(),Re.object({dictionary:_t.optional(),threshold:pr.optional()})]),compactOnStart:We.optional(),compactOnStartKeepBackup:We.optional(),noReadAhead:We.optional(),path:l,prefetchWrites:We.optional(),maxFreeSpaceToLoad:pr.optional(),maxFreeSpaceToRetain:pr.optional()}).required(),ignoreScripts:We.optional(),tls:Re.alternatives([Re.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(eae,"configValidator");function tae(e){return DG||LG.existsSync(e)?null:`Specified path ${e} does not exist.`}a(tae,"doesPathExist");function rae(e,t){Re.assert(e,_t.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=tae(e);if(r)return t.message(r)}a(rae,"validatePath");function nae(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(zoe);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Qoe):e}a(nae,"validateRotationMaxSize");function sae(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Joe);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Xoe):e}a(sae,"validateRotationInterval");function iae(e,t){let r=t.state.path.join("."),n=Koe.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||CG();return i=Math.round(Math.min(i,CG())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Yoe.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(iae,"setDefaultThreads");function Lp(e,t){let r=t.state.path.join(".");if(!fN.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(fN.isEmpty(io))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ul.join(io,joe);case"logging.root":return Ul.join(io,PG);case"clustering.leafServer.streams.path":return Ul.join(io,"clustering","leaf");case"storage.path":let n=Ul.join(io,OG.LEGACY_DATABASES_DIR_NAME);return LG.existsSync(n)?n:Ul.join(io,OG.DATABASES_DIR_NAME);case"logging.rotation.path":return Ul.join(io,PG);case"operationsApi.network.domainSocket":return r==null?null:Ul.join(io,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Lp,"setDefaultRoot");function oae(e){let t=Re.object({routes:rS});return Woe.validateBySchema({routes:e},t)}a(oae,"routesValidator")});var UG={};ye(UG,{getBackupDirPath:()=>nS});function nS(e){return MG.join(e,eA)}var MG,pN=se(()=>{MG=b(require("node:path"));G();a(nS,"getBackupDirPath")});var GG={};ye(GG,{ConfigEnvVarError:()=>_d,applyRuntimeEnvConfig:()=>hae});function EN(){let{loggerWithTag:e}=ir();return e("env-config")}function sS(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&Object.prototype.toString.call(e)==="[object Object]"}function Dp(e,t=""){let r={};for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let s=e[n],i=t?`${t}.${n}`:n;sS(s)?Object.assign(r,Dp(s,i)):r[i]=s}return r}function vp(e,t){let r=t.split("."),n=e;for(let s of r){if(n==null)return;n=n[s]}return n}function Mp(e,t,r){let n=t.split("."),s=e;for(let i=0;i<n.length-1;i++){let o=n[i];sS(s[o])||(s[o]={}),s=s[o]}s[n[n.length-1]]=r}function _N(e,t){let r=t.split("."),n=e;for(let s=0;s<r.length-1;s++){let i=r[s];if(!sS(n[i]))return;n=n[i]}delete n[r[r.length-1]]}function aae(e){let t=a(n=>n===null||typeof n!="object"?JSON.stringify(n):Array.isArray(n)?"["+n.map(t).join(",")+"]":"{"+Object.keys(n).sort().map(o=>JSON.stringify(o)+":"+t(n[o])).join(",")+"}","sortedStringify"),r=t(e);return kG.createHash("sha256").update(r).digest("hex")}function cae(e,t){if(!e||e.trim()==="")return null;try{let r=JSON.parse(e.trim());if(!sS(r))throw new _d(`${t} must be a JSON object, got: ${typeof r}`,t);return r}catch(r){throw r instanceof _d?r:new _d(`Invalid JSON syntax in ${t}: ${r.message}`,t,r)}}function lae(e){let t=hN.join(nS(e),HG);if(!lc.existsSync(t))return{version:"1.0",sources:{},originalValues:{},snapshots:{}};try{let r=lc.readJsonSync(t);return r.originalValues||(r.originalValues={}),r}catch(r){return EN().warn(`Failed to load config state file, starting fresh: ${r.message}`),{version:"1.0",sources:{},originalValues:{},snapshots:{}}}}function uae(e,t){let r=nS(e),n=hN.join(r,HG);lc.ensureDirSync(r),lc.writeJsonSync(n,t,{spaces:2})}function dae(e,t){let r=[];for(let[n,s]of Object.entries(t.sources)){if(s!=="HARPER_DEFAULT_CONFIG"&&s!=="HARPER_SET_CONFIG")continue;let i=t.snapshots[s];if(!i)continue;let o=vp(e,n),c=vp(i.config,n);JSON.stringify(o)!==JSON.stringify(c)&&r.push(n)}return r}function xG(e,t,r,n,s={}){let{respectSources:i=[],storeOriginals:o=!1}=s,c=Dp(r);for(let[l,u]of Object.entries(c)){let d=t.sources[l],f=vp(e,l);d&&i.includes(d)||(o&&!d&&f!==void 0&&f!==null&&(l in t.originalValues||(t.originalValues[l]=f)),Mp(e,l,u),t.sources[l]=n)}}function fae(e,t,r,n,s){let i=Object.keys(Dp(r)),o=Object.keys(Dp(n)),c=i.filter(l=>!o.includes(l));for(let l of c)t.sources[l]===s&&((s==="HARPER_DEFAULT_CONFIG"||s==="HARPER_SET_CONFIG")&&l in t.originalValues?(Mp(e,l,t.originalValues[l]),delete t.originalValues[l]):_N(e,l),delete t.sources[l])}function mae(e,t,r){let n=Object.keys(t.sources).filter(s=>t.sources[s]===r);for(let s of n)_N(e,s),delete t.sources[s]}function pae(e,t,r){let n={};for(let s in t.sources)if(t.sources[s]===r){let i=vp(e,s);i!==void 0&&Mp(n,s,i)}return n}function BG(e,t,r,n,s={}){let i=process.env[r];if(!i)return;let o=EN(),c=cae(i,r);if(!c)return;let l=aae(c),u=t.snapshots[n];if(n==="HARPER_SET_CONFIG")xG(e,t,c,n,{respectSources:[],storeOriginals:!0});else if(n==="HARPER_DEFAULT_CONFIG")if(s.isInstall)xG(e,t,c,n,{respectSources:["HARPER_SET_CONFIG","user"],storeOriginals:!0});else{let m=Dp(c);for(let[p,h]of Object.entries(m)){let E=t.sources[p],_=vp(e,p);if(!(E&&E!=="HARPER_DEFAULT_CONFIG")){if(!E&&_!=null){p in t.originalValues||(t.originalValues[p]=_);continue}Mp(e,p,h),t.sources[p]=n}}}u&&u.hash!==l&&fae(e,t,u.config,c,n);let d=pae(e,t,n);t.snapshots[n]={hash:l,config:d};let f=s.isInstall?"installation":"runtime";o.debug?.(`Applied ${r} at ${f}`)}function FG(e,t,r,n){if(!t.snapshots[n])return;let s=EN();if(n==="HARPER_DEFAULT_CONFIG"||n==="HARPER_SET_CONFIG"){let i=Object.keys(t.sources).filter(o=>t.sources[o]===n);for(let o of i)o in t.originalValues?(Mp(e,o,t.originalValues[o]),delete t.originalValues[o]):_N(e,o),delete t.sources[o]}else mae(e,t,n);delete t.snapshots[n],s.debug?.(`${r} removed, cleaned up values`)}function hae(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG,i=lae(t);if(!n&&!s&&Object.keys(i.snapshots).length===0)return e;if(!r.isInstall){let o=dae(e,i);for(let c of o)i.sources[c]="user"}return BG(e,i,"HARPER_DEFAULT_CONFIG","HARPER_DEFAULT_CONFIG",r),n||FG(e,i,"HARPER_DEFAULT_CONFIG","HARPER_DEFAULT_CONFIG"),BG(e,i,"HARPER_SET_CONFIG","HARPER_SET_CONFIG",r),s||FG(e,i,"HARPER_SET_CONFIG","HARPER_SET_CONFIG"),uae(t,i),e}var lc,hN,kG,HG,_d,qG=se(()=>{lc=b(require("fs-extra")),hN=b(require("node:path")),kG=b(require("node:crypto"));pN();HG=".harper-config-state.json";a(EN,"getLogger");_d=class extends Error{static{a(this,"ConfigEnvVarError")}envVarName;originalError;constructor(t,r,n){super(t),this.name="ConfigEnvVarError",this.envVarName=r,this.originalError=n}};a(sS,"isPlainObject");a(Dp,"flattenObject");a(vp,"getNestedValue");a(Mp,"setNestedValue");a(_N,"deleteNestedValue");a(aae,"hashConfig");a(cae,"parseConfigEnvVar");a(lae,"loadConfigState");a(uae,"saveConfigState");a(dae,"detectConfigDrift");a(xG,"applyConfigLayer");a(fae,"handleDeletions");a(mae,"removeValuesWithSource");a(pae,"buildSnapshot");a(BG,"processEnvVar");a(FG,"cleanupRemovedEnvVar");a(hae,"applyRuntimeEnvConfig")});var gt=M(ar=>{"use strict";var ks=(G(),v(j)),Cr=ae(),Dt=Q(),{configValidator:Eae,routesValidator:$G}=mN(),nn=require("fs-extra"),aS=require("yaml"),hs=require("path"),_ae=require("is-number"),KG=require("properties-reader"),gae=require("lodash"),{handleHDBError:Sae}=Ee(),{HTTP_STATUS_CODES:Tae,HDB_ERROR_MSGS:gd}=Jr(),{server:yae}=(Hr(),v(ym)),{PACKAGE_ROOT:YG}=yt(),{getBackupDirPath:Rae}=(pN(),v(UG)),{DATABASES_PARAM_CONFIG:Up,CONFIG_PARAMS:ps,CONFIG_PARAM_MAP:pi}=ks,bae="Unable to get config value because config is uninitialized",Aae="Config successfully initialized",Iae="Error backing up config file",wae="Empty parameter sent to getConfigValue",WG=hs.join(YG,"config","yaml",ks.HDB_DEFAULT_CONFIG_FILE),Nae=hs.join(YG,"config","yaml","defaultNatsConfig.yaml"),Cae="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",VG={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"},iS,kt,oS;ar.createConfigFile=Oae;ar.getDefaultConfig=Pae;ar.getConfigValue=zG;ar.initConfig=cS;ar.flattenConfig=Sd;ar.updateConfigValue=JG;ar.updateConfigObject=Dae;ar.getConfiguration=Uae;ar.setConfiguration=xae;ar.readConfigFile=yN;ar.getClusteringRoutes=Bae;ar.initOldConfig=XG;ar.getConfigFromFile=Fae;ar.getConfigFilePath=xl;ar.addConfig=kae;ar.deleteConfigFromFile=Hae;ar.getConfigObj=Gae;ar.resolvePath=gN;ar.getFlatConfigObj=qae;function gN(e){if(e?.startsWith("~/"))return hs.join(Cr.getHomeDir(),e.slice(1));let t=fe();try{return hs.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(gN,"resolvePath");function Oae(e,t=!1){let r=uc(WG);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=aS.parseDocument(nn.readFileSync(Nae,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}iS=Sd(r.toJSON());let n;for(let c in e){let l=pi[c.toLowerCase()];if(l===ps.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=SN(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){Dt.error(f)}}}n&&jG(r,n),TN(r,t),QG(r,null,{isInstall:!0});let s=r.toJSON();kt=Sd(s);let i=r.getIn(["rootPath"]),o=hs.join(i,ks.HDB_CONFIG_FILE);if(nn.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);nn.writeFileSync(o,String(r)),Dt.trace(`Config file written to ${o}`)}a(Oae,"createConfigFile");function jG(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Cr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Up.TABLES))for(let i in n[s][Up.TABLES])for(let o in n[s][Up.TABLES][i]){let c=n[s][Up.TABLES][i][o],l=[ps.DATABASES,s,Up.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[ps.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Dt.error("Error parsing schemas CLI/env config arguments",n)}}a(jG,"setSchemasConfig");function Pae(e){if(iS===void 0){let r=uc(WG);iS=Sd(r.toJSON())}let t=pi[e.toLowerCase()];if(t!==void 0)return iS[t.toLowerCase()]}a(Pae,"getDefaultConfig");function zG(e){if(e==null){Dt.info(wae);return}if(kt===void 0){Dt.trace(bae);return}let t=pi[e.toLowerCase()];if(t!==void 0)return kt[t.toLowerCase()]}a(zG,"getConfigValue");function xl(e=Cr.getPropsFilePath()){let t=Cr.getEnvCliRootPath();if(t)return gN(hs.join(t,ks.HDB_CONFIG_FILE));let r=KG(e);return gN(r.get(ks.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(xl,"getConfigFilePath");function cS(e=!1){if(kt===void 0||e){let t;if(!Cr.noBootFile()){t=Cr.getPropsFilePath();try{nn.accessSync(t,nn.constants.F_OK|nn.constants.R_OK)}catch(i){throw Dt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=xl(t),n;if(r.includes("config/settings.js"))try{XG(r);return}catch(i){if(i.code!==ks.NODE_ERROR_CODES.ENOENT)throw i}try{n=uc(r)}catch(i){if(i.code===ks.NODE_ERROR_CODES.ENOENT){Dt.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 Dt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Lae(n,r),QG(n,r),TN(n);let s=n.toJSON();if(yae.config=s,kt=Sd(s),kt.logging_rotation_rotate)for(let i in VG)kt[i]&&Dt.error(`Config ${VG[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Dt.trace(Aae)}}a(cS,"initConfig");function Lae(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],hs.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],hs.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(Dt.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);nn.writeFileSync(t,String(e))}}a(Lae,"checkForUpdatedConfig");function TN(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 gd.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 gd.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=Eae(r,t);if(n.error)throw gd.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(TN,"validateConfig");function Dae(e,t){kt===void 0&&(kt={});let r=pi[e.toLowerCase()];if(r===void 0){Dt.trace(`Unable to update config object because config param '${e}' does not exist`);return}kt[r.toLowerCase()]=t}a(Dae,"updateConfigObject");function JG(e,t,r=void 0,n=!1,s=!1,i=!1){kt===void 0&&cS();let o=zG(pi.hdb_root),c=hs.join(o,ks.HDB_CONFIG_FILE),l=uc(c),u;if(r&&kt){let m=!1;for(let p in r)if(r[p]!=kt[p.toLowerCase()]){m=!0;break}if(!m){Dt.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===ps.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=pi[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=SN(m,t);l.setIn([...p],h)}else for(let m in r){let p=pi[m.toLowerCase()];if(p===ps.HTTP_SECUREPORT&&r[m]===kt[ps.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===ps.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===kt[ps.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===ps.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=ks.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let _=SN(p,r[m]);p==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],_)}catch(R){Dt.error(R)}}}u&&jG(l,u),TN(l);let d=l.getIn(["rootPath"]),f=hs.join(d,ks.HDB_CONFIG_FILE);if(n===!0&&vae(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);nn.writeFileSync(f,String(l)),s&&(kt=Sd(l.toJSON())),Dt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(JG,"updateConfigValue");function vae(e,t){try{let r=hs.join(Rae(t),`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${ks.HDB_CONFIG_FILE}.bak`);nn.copySync(e,r),Dt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Dt.error(Iae),Dt.error(r)}}a(vae,"backupConfigFile");var Mae=["databases"];function Sd(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}),oS=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])&&!Mae.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!ps[l.toUpperCase()]&&pi[l]&&(s[pi[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Sd,"flattenConfig");function SN(e,t){if(e===ps.CLUSTERING_NODENAME||e===ps.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(_ae(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Cr.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Cr.autoCast(t)}a(SN,"castConfigValue");function Uae(){let e=Cr.getPropsFilePath(),t=xl(e);return uc(t).toJSON()}a(Uae,"getConfiguration");async function xae(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return JG(void 0,void 0,s,!0),Cae}catch(i){throw typeof i=="string"||i instanceof String?Sae(i,i,Tae.BAD_REQUEST,void 0,void 0,!0):i}}a(xae,"setConfiguration");function yN(){let e=Cr.getPropsFilePath();try{nn.accessSync(e,nn.constants.F_OK|nn.constants.R_OK)}catch(n){if(!Cr.noBootFile())throw Dt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=xl(e);return uc(t).toJSON()}a(yN,"readConfigFile");function uc(e){return aS.parseDocument(nn.readFileSync(e,"utf8"),{simpleKeys:!0})}a(uc,"parseYamlDoc");function QG(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG;if(!n&&!s)return;let{applyRuntimeEnvConfig:i}=(qG(),v(GG)),o=e.getIn(["rootPath"]);if(!o){Dt.warn("Cannot apply runtime env config: rootPath not found in config");return}let c=e.toJSON();try{i(c,o,r);let l=aS.parseDocument(aS.stringify(c),{simpleKeys:!0});Object.assign(e,l)}catch(l){throw Dt.error(`Failed to apply runtime env config: ${l.message}`),l}if(t)try{if(e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml: ${e.errors}`);nn.writeFileSync(t,String(e)),Dt.debug("Config file updated with runtime env var values")}catch(l){throw Dt.error(`Failed to write config file after applying runtime env vars: ${l.message}`),l}}a(QG,"applyRuntimeEnvVarConfig");function Bae(){let e=yN(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Cr.isEmptyOrZeroLength(t)?[]:t;let r=$G(t);if(r)throw gd.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Cr.isEmptyOrZeroLength(n)?[]:n;let s=$G(n);if(s)throw gd.CONFIG_VALIDATION(s.message);if(!Cr.isEmptyOrZeroLength(n)&&!Cr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Cr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw gd.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(Bae,"getClusteringRoutes");function XG(e){let t=KG(e);kt={};for(let r in pi){let n=t.get(r.toUpperCase());if(Cr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=pi[r].toLowerCase();s===ps.LOGGING_ROOT?kt[s]=hs.dirname(n):kt[s]=n}return kt}a(XG,"initOldConfig");function Fae(e){let t=yN();return gae.get(t,e.replaceAll("_","."))}a(Fae,"getConfigFromFile");async function kae(e,t){let r=uc(xl());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 nn.writeFile(xl(),String(r))}a(kae,"addConfig");function Hae(e){let t=xl(Cr.getPropsFilePath()),r=uc(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=hs.join(n,ks.HDB_CONFIG_FILE);nn.writeFileSync(s,String(r))}a(Hae,"deleteConfigFromFile");function Gae(){return oS||(cS(),oS)}a(Gae,"getConfigObj");function qae(){return kt||cS(),kt}a(qae,"getFlatConfigObj")});var co={};ye(co,{ACTIVE_BOOLEAN:()=>iq,ALTERUSER_NOTHING_TO_UPDATE:()=>rq,EMPTY_PASSWORD:()=>nq,EMPTY_ROLE:()=>sq,USERNAME_REQUIRED:()=>tq,addUser:()=>ON,alterUser:()=>PN,dropUser:()=>LN,findAndValidateUser:()=>yd,getClusterUser:()=>ece,getSuperUser:()=>Fp,getUsersWithRolesCache:()=>Zae,listUsers:()=>dS,listUsersExternal:()=>vN,setUsersWithRolesCache:()=>Ei,userInfo:()=>DN});async function ON(e){let t=cq.cleanAttributes(e,lq),r=aq.addUserValidation(t);if(r)throw new hi(r.message);let n=await Bp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new hi(Td.ROLE_NAME_NOT_FOUND(t.role),Zo.NOT_FOUND);if(n.length>1)throw new hi(Td.DUP_ROLES_FOUND(t.role),Zo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=NN.encrypt(t.password)),t.password=await xp.hash(t.password,lS),t.hash_function=lS,t.role=n[0].id;let s=await oq.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(wN.debug(s),await Ei(),s.skipped_hashes.length===1)throw new hi(Td.USER_ALREADY_EXISTS(t.username),Zo.CONFLICT);return IN.signalUserChange(new CN(process.pid)),`${t.username} successfully added`}async function PN(e){let t=cq.cleanAttributes(e,lq);if(oo.isEmptyOrZeroLength(t.username))throw new Error(tq);if(oo.isEmptyOrZeroLength(t.password)&&oo.isEmptyOrZeroLength(t.role)&&oo.isEmptyOrZeroLength(t.active))throw new Error(rq);if(!oo.isEmpty(t.password)&&oo.isEmptyOrZeroLength(t.password.trim()))throw new Error(nq);if(!oo.isEmpty(t.active)&&!oo.isBoolean(t.active))throw new Error(iq);if(!oo.isEmpty(t.password)&&!oo.isEmptyOrZeroLength(t.password.trim())&&(Qae(t.username)&&(t.hash=NN.encrypt(t.password)),t.password=await xp.hash(t.password,lS),t.hash_function=lS),t.role==="")throw new Error(sq);if(t.role){let n=await Bp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new hi(Td.ALTER_USER_ROLE_NOT_FOUND(t.role),Zo.NOT_FOUND);if(n.length>1)throw new hi(Td.DUP_ROLES_FOUND(t.role),Zo.CONFLICT);t.role=n[0].id}let r=await oq.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Ei(),IN.signalUserChange(new CN(process.pid)),r}function Qae(e){let t=!1,r=ao.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}async function LN(e){let t=aq.dropUserValidation(e);if(t)throw new hi(t.message);if(ao.get(e.username)===void 0)throw new hi(Td.USER_NOT_EXIST(e.username),Zo.NOT_FOUND);let r=await Jae({table:"hdb_user",schema:"system",hash_values:[e.username]});return wN.debug(r),await Ei(),IN.signalUserChange(new CN(process.pid)),`${e.username} successfully deleted`}async function DN(e){if(!e||!e.hdb_user)return"There was no user info in the body";let t=AN.cloneDeep(e.hdb_user),r=await Bp.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}async function vN(){let e=await dS();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}async function dS(){let e=await Bp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=AN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Bp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=AN.cloneDeep(s),s.role=t[s.role],Xae(s.role),n.set(s.username,s);return n}function Xae(e){if(!e){wN.error("invalid user role found.");return}e.permission.system||(e.permission.system={tables:{}}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(Wae)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}async function Ei(e=void 0){e?ao=e:ao=await dS()}async function Zae(){return ao||await Ei(),ao}async function yd(e,t,r=!0){ao||await Ei();let n=ao.get(e);if(!n){if(!r)return{username:e};throw new hi(RN.GENERIC_AUTH_FAIL,Zo.UNAUTHORIZED)}if(n&&!n.active)throw new hi(RN.USER_INACTIVE,Zo.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(eq.get(t)===n.password)return s;{let i=xp.validate(n.password,t,n.hash_function||xp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)eq.set(t,n.password);else throw new hi(RN.GENERIC_AUTH_FAIL,Zo.UNAUTHORIZED)}}return s}async function Fp(){ao||await Ei();for(let[,e]of ao)if(e.role.role==="super_user")return e}async function ece(){let e=await dS(),t=Kae.getConfigFromFile(bN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(r==null||r?.role?.role!==bN.ROLE_TYPES_ENUM.CLUSTER_USER)return;let n=NN.decrypt(r.hash);return r.decrypt_hash=n,r.uri_encoded_d_hash=encodeURIComponent(n),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+ZG.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+ZG.SERVER_SUFFIX.ADMIN,r}var tq,rq,nq,sq,iq,oq,$ae,xp,aq,Bp,IN,oo,cq,wN,Vae,NN,bN,ZG,Kae,Yae,Wae,jae,hi,Zo,RN,Td,CN,AN,uS,zae,lq,eq,Jae,lS,ao,uq,Es=se(()=>{"use strict";tq="username is required",rq="nothing to update, must supply active, role or password to update",nq="password cannot be an empty string",sq="If role is specified, it cannot be empty.",iq="active must be true or false",oq=Vn(),$ae=vl(),xp=(Xw(),v(Qw)),aq=YH(),Bp=gn(),IN=zo(),oo=ae(),cq=require("validate.js"),wN=Q(),{promisify:Vae}=require("util"),NN=so(),bN=(G(),v(j)),ZG=Pt(),Kae=gt(),Yae=fe(),Wae=Zi(),{hdbErrors:jae,ClientError:hi}=Ee(),{HTTP_STATUS_CODES:Zo,AUTHENTICATION_ERROR_MSGS:RN,HDB_ERROR_MSGS:Td}=jae,{UserEventMsg:CN}=ls(),AN=require("lodash"),{server:uS}=(Hr(),v(ym)),zae=Q();uS.getUser=(e,t)=>yd(e,t,t!=null);uS.authenticateUser=(e,t)=>yd(e,t);lq={username:!0,active:!0,role:!0,password:!0},eq=new Map,Jae=Vae($ae.delete),lS=Yae.get(bN.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??xp.HASH_FUNCTION.SHA256;a(ON,"addUser");a(PN,"alterUser");a(Qae,"isClusterUser");a(LN,"dropUser");a(DN,"userInfo");a(vN,"listUsersExternal");a(dS,"listUsers");a(Xae,"appendSystemTablesToRole");a(Ei,"setUsersWithRolesCache");a(Zae,"getUsersWithRolesCache");a(yd,"findAndValidateUser");a(Fp,"getSuperUser");a(ece,"getClusterUser");uq=[];uS.invalidateUser=function(e){for(let t of uq)try{t(e)}catch(r){zae.error("Error invalidating user",r)}};uS.onInvalidatedUser=function(e){uq.push(e)}});var Pe,Rd=se(()=>{Pe={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var bd,MN=se(()=>{Rd();bd=class{static{a(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==Pe.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Pe.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Pe.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Pe.WARNING,t)}markLoading(t){this.updateStatus(Pe.LOADING,t||"Component is loading")}isHealthy(){return this.status===Pe.HEALTHY}hasError(){return this.status===Pe.ERROR}isLoading(){return this.status===Pe.LOADING}hasWarning(){return this.status===Pe.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var Bl,dc,UN,Ad,xN,Id,BN,fS=se(()=>{Bl=b(Jr()),dc=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Bl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},UN=class extends dc{static{a(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,Bl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},Ad=class extends dc{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Bl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},xN=class extends dc{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Bl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},Id=class extends dc{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Bl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},BN=class extends dc{static{a(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,Bl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
15
- `)}}});var dq,Fl,fq,fc,kp,wd,tce,mS,FN=se(()=>{dq=b(ls()),Fl=b(st());G();fq=b(ir());Rd();fS();fc=(0,fq.loggerWithTag)("componentStatus.crossThread"),kp=class{static{a(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,Fl.onMessageByType)(T_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;fc.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&(fc.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let o=((0,Fl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,_=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),fc.trace?.(`Collected all ${y.length} expected responses for request ${r}`),p(y))},"checkComplete"),R=setTimeout(()=>{if(!E){E=!0;let y=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),fc.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${o} responses`),p(y)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,_),(0,dq.sendItcEvent)({type:T_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{_()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new Ad("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Fl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let _=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${_}`,{...E,workerIndex:p.workerIndex})}return fc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof Ad?fc.error?.(`ITC failure during component status collection: ${r.message}`):fc.warn?.("Failed to collect component status from all threads:",r),fc.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,Fl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[o,c]of r)n.set(`${o}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},wd=class{static{a(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let o=s.indexOf("@"),c=o!==-1?s.substring(0,o):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let o=this.aggregateComponentGroup(s,i);r.set(s,o)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,o,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",_=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=_;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=_)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Pe.HEALTHY&&p.message&&(!i||_>s)&&(s=_,i=p.message),p.error&&!o&&(o=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:o};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Pe.ERROR,Pe.WARNING,Pe.LOADING,Pe.UNKNOWN,Pe.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Pe.UNKNOWN}},tce=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),mS=new kp(tce)});var mc,pS=se(()=>{MN();Rd();FN();fS();mc=class e{static{a(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new Id(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Pe).includes(r))throw new Id(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Pe).join(", ")}`);this.statusMap.set(t,new bd(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Pe.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Pe.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Pe.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Pe.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Pe.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Pe.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[Pe.HEALTHY]:0,[Pe.ERROR]:0,[Pe.WARNING]:0,[Pe.LOADING]:0,[Pe.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await mS.collect(t);return wd.aggregate(r)}async getAggregatedStatusFor(t,r){r||(r=await e.getAggregatedFromAllThreads(this));let n=[],s=t+".",i=r.get(t);i&&n.push({key:t,...i});for(let[f,m]of r)f.startsWith(s)&&n.push({key:f,...m});if(n.length===0)return{status:Pe.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let o=n.some(f=>f.status===Pe.ERROR),c=n.some(f=>f.status===Pe.LOADING),l=o?Pe.ERROR:c?Pe.LOADING:Pe.HEALTHY,u="All components loaded successfully",d={};if(o||c){u=n.filter(m=>m.status===Pe.ERROR||m.status===Pe.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Pe.HEALTHY&&(d[m.key]={status:m.status,message:m.latestMessage})}return{status:l,message:u,...Object.keys(d).length>0&&{details:d},lastChecked:n[0]?.lastChecked||{workers:{}}}}}});var hr,hS=se(()=>{pS();hr=new mc});function pq(e){let t=mq.get(e);return t||(t=new kN(e),mq.set(e,t)),t}function hq(){hr.reset()}var kN,mq,lo,Eq,_q=se(()=>{hS();Rd();kN=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return hr.setStatus(this.componentName,Pe.HEALTHY,t),this}warning(t){return hr.setStatus(this.componentName,Pe.WARNING,t),this}error(t,r){return hr.setStatus(this.componentName,Pe.ERROR,t,r),this}loading(t){return hr.setStatus(this.componentName,Pe.LOADING,t||"Loading..."),this}unknown(t){return hr.setStatus(this.componentName,Pe.UNKNOWN,t),this}get(){return hr.getStatus(this.componentName)}},mq=new Map;a(pq,"statusForComponent");lo={loading(e,t){hr.initializeLoading(e,t)},loaded(e,t){hr.markLoaded(e,t)},failed(e,t,r){hr.markFailed(e,t,r)}};a(hq,"reset");Eq=Pe});var Hp={};ye(Hp,{AggregationError:()=>xN,COMPONENT_STATUS_LEVELS:()=>Pe,ComponentStatus:()=>bd,ComponentStatusError:()=>dc,ComponentStatusOperationError:()=>Id,ComponentStatusRegistry:()=>mc,CrossThreadCollectionError:()=>BN,CrossThreadStatusCollector:()=>kp,CrossThreadTimeoutError:()=>UN,ITCError:()=>Ad,StatusAggregator:()=>wd,componentStatusRegistry:()=>hr,crossThreadCollector:()=>mS,query:()=>rce});var rce,gq=se(()=>{hS();pS();MN();pS();FN();hS();fS();Rd();rce={get(e){return hr.getStatus(e)},all(){return hr.getAllStatuses()},byStatus(e){return hr.getComponentsByStatus(e)},summary(){return hr.getStatusSummary()},async allThreads(){return mc.getAggregatedFromAllThreads(hr)}}});var HN={};ye(HN,{STATUS:()=>Eq,internal:()=>Hp,lifecycle:()=>lo,reset:()=>hq,statusForComponent:()=>pq});var Gp=se(()=>{_q();gq()});var $p=M((zMe,yq)=>{"use strict";var _s=Q(),Tn=(G(),v(j)),nce=LB(),sce=(Es(),v(co)),{validateEvent:GN}=ls(),qp=fs(),ice=require("process"),{resetDatabases:oce}=(Oe(),v(ft)),ace={[Tn.ITC_EVENT_TYPES.SCHEMA]:cce,[Tn.ITC_EVENT_TYPES.USER]:Tq,[Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:uce};async function cce(e){let t=GN(e);if(t){_s.error(t);return}_s.trace("ITC schemaHandler received schema event:",e),await nce(e.message),await lce(e.message)}a(cce,"schemaHandler");async function lce(e){try{qp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),qp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),qp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=oce();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){_s.error(t)}}a(lce,"syncSchemaMetadata");var Sq=[];async function Tq(e){try{try{qp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),qp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){_s.warn(r)}let t=GN(e);if(t){_s.error(t);return}_s.trace(`ITC userHandler ${Tn.HDB_ITC_CLIENT_PREFIX}${ice.pid} received user event:`,e),await sce.setUsersWithRolesCache();for(let r of Sq)r()}catch(t){_s.error(t)}}a(Tq,"userHandler");Tq.addListener=function(e){Sq.push(e)};async function uce(e){try{let t=GN(e);if(t){_s.error(t);return}_s.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Gp(),v(HN)),{getWorkerIndex:n}=st(),{sendItcEvent:s}=ls(),i=r.componentStatusRegistry.getAllStatuses(),o=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:o,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?_s.trace(`Sent component status response directly to thread ${u}`):(u===void 0?_s.debug("No originator threadId, falling back to broadcast"):_s.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){_s.error("Error handling component status request:",t)}}a(uce,"componentStatusRequestHandler");yq.exports=ace});var ls=M((tUe,bq)=>{"use strict";var QMe=Q(),qN=ae(),dce=(G(),v(j)),{ITC_ERRORS:Vp}=Jr(),{parentPort:XMe,threadId:fce,isMainThread:mce,workerData:ZMe}=require("worker_threads"),{onMessageFromWorkers:pce,broadcast:eUe,broadcastWithAcknowledgement:hce}=st();bq.exports={sendItcEvent:Ece,validateEvent:Rq,SchemaEventMsg:_ce,UserEventMsg:gce};var ES;pce(async(e,t)=>{ES=ES||$p(),Rq(e),ES[e.type]&&await ES[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Ece(e){return!mce&&e.message&&(e.message.originator=fce),hce(e)}a(Ece,"sendItcEvent");function Rq(e){if(typeof e!="object")return Vp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||qN.isEmpty(e.type))return Vp.MISSING_TYPE;if(!e.hasOwnProperty("message")||qN.isEmpty(e.message))return Vp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||qN.isEmpty(e.message.originator))return Vp.MISSING_ORIGIN;if(dce.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Vp.INVALID_EVENT(e.type)}a(Rq,"validateEvent");function _ce(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(_ce,"SchemaEventMsg");function gce(e){this.originator=e}a(gce,"UserEventMsg")});var zo=M((sUe,Nq)=>{"use strict";var Aq=(G(),v(j)),nUe=ae(),_S=Q(),Iq=mB(),Nd,{sendItcEvent:wq}=ls();function Sce(e){try{_S.debug("signalSchemaChange called with message:",e),Nd=Nd||$p();let t=new Iq(Aq.ITC_EVENT_TYPES.SCHEMA,e);return Nd.schema(t),wq(t)}catch(t){_S.error(t)}}a(Sce,"signalSchemaChange");function Tce(e){try{_S.trace("signalUserChange called with message:",e),Nd=Nd||$p();let t=new Iq(Aq.ITC_EVENT_TYPES.USER,e);return Nd.user(t),wq(t)}catch(t){_S.error(t)}}a(Tce,"signalUserChange");Nq.exports={signalSchemaChange:Sce,signalUserChange:Tce}});function Kp(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 Cq(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Hs(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 Hs,Yp=se(()=>{Hs=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Kp,"appendHeader");a(Cq,"mergeHeaders")});function gS(e,t,r=Rce){let n;return function(...i){return n?n.length*$N>r?t(...i):new Promise((o,c)=>{n.push({args:i,fn(){try{let l=e(...i);o(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,o){setImmediate(()=>{let c=performance.now();$N=($N*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var Lq,yce,Rce,Oq,bce,VN,Pq,$N,KN=se(()=>{Lq=b(ir()),yce=3e3,Rce=2e4,Oq=0,bce=3e4,VN=3e3,Pq=performance.now()+VN,$N=0;a(gS,"throttle");setInterval(()=>{let e=performance.now();e-Pq-VN>yce&&Oq+bce<e&&(Lq.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"),Oq=e),Pq=e},VN).unref()});var qq={};ye(qq,{EVICTED:()=>_l,INVALIDATED:()=>Fn,coerceType:()=>TS,makeTable:()=>yS});function yS(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:_,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=mI(i,n,l),w,I,H={},X=Promise.resolve(),q,k,z;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(z=K),K.isPrimaryKey&&(H=K);let Y,ce=[],de=[],te=1,Se=2,Ne={},Ke={},$e=864e5,Ir=0,nr,zr,xr,Pu=!1,Jc,Bt,si,Ga=Hl.get(x.REPLICATION_DATABASES);if(Array.isArray(Ga)){for(let K of Ga)if(K.name===c&&K.replicateTo>=0){si=K.replicateTo;break}}let a_=i.getRange({start:!1,end:!1}).constructor,lm=10,c_=6;_&&pm(),qm(i.env.path,K=>{if(I)return $a(K)});class um extends Nl{static{a(this,"Updatable")}getUpdatedTime(){return Za.get(this.getRecord())?.version}getExpiresAt(){return Za.get(this.getRecord())?.expiresAt}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.set(g,new Rp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(g,T){return this.addTo(g,-T)}}class ve extends Xt{#e;#t;#n;#r;#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=_;static databasePath=o;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=q;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(g,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)g.intermediateSource=!0,this.sources.unshift(g);else{if(this.sources.some(D=>!D.intermediateSource)){if(this.sources.some(D=>D.name===g.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(g)}I=I||g.get&&(!g.get.reliesOnPrototype||g.prototype.get),w=w||g.load;let C=a(D=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[D]&&(!U[D].reliesOnPrototype||U.prototype[D])),A.length>0)if(A.length===1){let U=A[0];return(N,L,$)=>{if(N?.source!==U)return U[D](L,$,N)}}else return(U,N,L)=>{let $=[];for(let W of A){if(U?.source===W)break;$.push(W[D](N,L,U))}return Promise.all($)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=a(D=>{if(P[D]&&(!P[D].reliesOnPrototype||P.prototype[D]))return(A,U,N)=>{if(!A?.source)return P[D](U,N,A)}},"getApplyToCanonicalSource");Ne={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ke={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let B=P.shouldRevalidateEvents;return(async()=>{let D=!1,A,U=a(async(N,L)=>{let $=N.value,W=N.table?Me[c][N.table]:ve;if(c===gm&&(N.table===xu.ROLE_TABLE_NAME||N.table===xu.USER_TABLE_NAME)&&(D=!0),N.id===void 0&&(N.id=$[W.primaryKey],N.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(N));N.source=g;let J={residencyId:Qc(N.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:N.nodeId,async:!0},F=N.id,he=await W.getResource(F,L,J);switch(N.finished&&await N.finished,N.type){case"put":return B?he._writeInvalidate(F,$,J):he._writeUpdate(F,$,!0,J);case"patch":return B?he._writeInvalidate(F,$,J):he._writeUpdate(F,$,!1,J);case"delete":return he._writeDelete(F,J);case"publish":case"message":return he._writePublish(F,$,J);case"invalidate":return he._writeInvalidate(F,$,J);case"relocate":return he._writeRelocate(F,J);default:Fe.default.error?.("Unknown operation",N.type,N.id)}},"writeUpdate");try{let N=g.subscribe;N&&R==null&&(R=!0);let L={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=g.subscribeOnThisThread?g.subscribeOnThisThread((0,kl.getWorkerIndex)(),L):(0,kl.getWorkerIndex)()===0,W=N&&$&&await g.subscribe?.(L);if(W){let J;for await(let F of W)try{if(!(F.type==="transaction"?F.writes[0]:F)){Fe.default.error?.("Bad subscription event",F);continue}if(F.source=g,F.type==="end_txn"){J?.resolve();let _e;if(F.localTime&&A!==F.localTime&&F.remoteNodeIds?.length>0&&(_e=a(()=>{let re=[Symbol.for("seq"),F.remoteNodeIds[0]],oe=d.get(re),ge=oe?.nodes;ge||(ge=[]);for(let ie of F.remoteNodeIds.slice(1)){let Ce=ge.find(Be=>Be.id===ie);ge=ge.filter(Be=>Be.id!==ie||Be===Ce),Ce||(Ce={id:ie,seqId:0},ge.push(Ce)),Ce.seqId=Math.max(oe?.seqId??1,F.localTime),ie===J?.nodeId&&(Ce.lastTxnTime=F.timestamp)}let me=Math.max(oe?.seqId??1,F.localTime);Fe.default.trace?.("Received txn",c,me,new Date(me),F.localTime,new Date(F.localTime),F.remoteNodeIds),d.put(re,{seqId:me,nodes:ge})},"updateRecordedSequenceId"),A=F.localTime),F.onCommit){let re=J?J.committed.then(F.onCommit):F.onCommit();_e&&(re?.then?re.then(_e):_e())}else _e&&_e();continue}if(J)if(F.beginTxn)J.resolve();else{J.writePromises.push(U(F,J));continue}!F.timestamp&&F.version&&(F.timestamp=F.version);let ue=bt(F,()=>{if(F.type==="transaction"){let _e=[];for(let re of F.writes)try{_e.push(U(re,F))}catch(oe){throw oe.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify(F),oe}return Promise.all(_e)}else if(F.type==="define_schema"){let _e=this.attributes.slice(0),re=!1;for(let oe of F.attributes)_e.find(ge=>ge.name===oe.name)||(_e.push(oe),re=!0);re&&(ze({table:s,database:c,attributes:_e,origin:"cluster"}),jp.signalSchemaChange(new zp.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return F.beginTxn?(J=F,J.writePromises=[U(F,F)],new Promise(_e=>{J.resolve=()=>_e(Promise.all(J.writePromises))})):U(F,F)});J&&(J.committed=ue),D&&ue&&!ue?.waitingForUserChange&&(ue.then(()=>jp.signalUserChange(new zp.UserEventMsg(process.pid))),ue.waitingForUserChange=!0),F.onCommit&&(ue?ue.then(F.onCommit):F.onCommit())}catch(he){Fe.default.error?.("error in subscription handler",he)}}}catch(N){Fe.default.error?.(N)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==ve.prototype.get}static getResource(g,T,C){let P=super.getResource(g,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),g!=null&&this.loadAsInstance!==!1){Hi(g);try{if(P.getRecord?.())return P;if(typeof g=="object"&&g&&!Array.isArray(g))throw new Error(`Invalid id ${JSON.stringify(g)}`);let O=!C?.async||i.cache?.get?.(g),B=Br(T),D=B.getReadTxn();if(D?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Mo(g,T,{transaction:D,ensureLoaded:C?.ensureLoaded},O,A=>{if(A?ve._updateResource(P,A):P.#e=null,T.onlyIfCached){if(!P.doesExist())throw new dt.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=pn(g,A,T,P);if(U)return B?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,Gs(U,N=>(ve._updateResource(P,N),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(g)),O}}return P}static _updateResource(g,T){g.#r=T,g.#e=T?.value??null,g.#n=T?.version}ensureLoaded(){let g=pn(this.getId(),this.#r,this.getContext());if(g)return this.#i=!0,this.getContext().loadedFromSource=!0,Gs(g,T=>{this.#r=T,this.#e=T.value,this.#n=T.version})}static getNewId(){let g=H?.type;if(g==="String"||g==="ID")return super.getNewId();if(!Bt){let O=i.getEntry(Symbol.for("id_allocation")),B=O?.value,D;if(B&&B.nodeName===server.hostname&&(!Uce(i)||B.pid===process.pid)){let A=B.start,U=B.end;D=A;for(let N of i.getKeys({start:U,end:A,limit:1,reverse:!0}))D=N}else B=P(O?.version??null),D=B.start;Bt=new BigInt64Array([BigInt(D)+1n]),Bt=new BigInt64Array(i.getUserSharedBuffer("id",Bt.buffer)),Bt.maxSafeId=B.end}let T=Number(Atomics.add(Bt,0,1n)),C=g==="Int"?512:1048576;if(T+C>=Bt.maxSafeId){let O=a(B=>{Bt.maxSafeId=T+(g==="Int"?1023:4194303);let D=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=B?void 0:i.useReadTransaction(),U=Number(Bt[0]);for(let $ of i.getKeys({start:U+1,end:D,limit:1,transaction:A}))D=$;A?.done();let{value:N,version:L}=i.getEntry(Symbol.for("id_allocation"));if(Bt.maxSafeId<D){if(N.end>Bt.maxSafeId-100)return;Fe.default.info?.("New id allocation",T,Bt.maxSafeId,L),i.put(Symbol.for("id_allocation"),{start:N.start,end:Bt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),L)}else{Fe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Bt.maxSafeId}, but id of ${D} detected`);let $=P(L);$.alreadyUpdated||Atomics.store(Bt,0,BigInt($.start+1)),Bt.maxSafeId=$.end}},"updateEnd");T+C===Bt.maxSafeId?setImmediate(O):T+100>=Bt.maxSafeId&&(Fe.default.warn?.(`Synchronous id allocation required on table ${s}${g=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return T;function P(O){let B=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=B/4,A,U,N=!1,L,$;do{L=Math.floor(Math.random()*B),$={start:L,end:L+(g==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let W of i.getKeys({start:L,limit:1,reverse:!0}))A=W;U=B;for(let W of i.getKeys({start:L+1,end:B,limit:1}))U=W;D*=.875,D<1e3&&!N&&(N=!0,Fe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${g==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,L,A,U,D))}while(!(D<U-L&&(D<L-A||A===0)));return i.transactionSync(()=>{let W=i.getEntry(Symbol.for("id_allocation"));return(W?.version??null)==O?(Fe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(Fe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...W.value})})}}static setTTLExpiration(g){if(typeof g=="number")h=g*1e3,E||(E=0);else if(g&&typeof g=="object")h=g.expiration*1e3,E=(g.eviction||0)*1e3,$e=g.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");$e=$e||(h+E)/4,$a()}static getResidencyRecord(g){return d.get([Symbol.for("residency_by_id"),g])}static setResidency(g){ve.getResidency=g&&((T,C)=>{try{return g(T,C)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(g){ve.getResidencyById=g&&(T=>{try{return g(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(g,T){if(ve.getResidencyById)return ve.getResidencyById(g[t]);let C=si;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(C=T.replicateTo)}if(C>=0&&server.nodes){let P=[server.hostname];if(T.previousResidency)P.push(...T.previousResidency.slice(0,C));else{let O=server.nodes.map(A=>A.name),B=Math.floor(O.length*Math.random());P.push(...O.slice(B,B+C));let D=B+C-O.length;D>0&&P.push(...O.slice(0,D))}return P}}static enableAuditing(){_||(_=!0,pm(),ve.audit=!0)}static coerceId(g){return g===""?null:TS(g,H)}static async dropTable(){delete Me[c][s];for(let g of i.getRange({versions:!0,snapshot:!1,lazy:!0}))g.metadataFlags&Xr&&g.value&&Ja(g.value);if(c===o){for(let g of S)d.remove(ve.tableName+"/"+g.name),r[g.name]?.drop();d.remove(ve.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),WN.default.unlinkSync(i.env.path);jp.signalSchemaChange(new zp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(g){let T=this.constructor;if(typeof g=="string"&&T.loadAsInstance!==!1)return this.getProperty(g);if(dm(g))return this.search(g);if(g&&g.id===void 0&&!g.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?ve.getRecordCount().then(P=>(C.recordCount=P.recordCount,C.estimatedRecordRange=P.estimatedRange,C)):C}if(g!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),P=Br(C),O=P.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let B=Ps(g);Hi(B);let D=!0;return g.checkPermission&&(D=this.allowRead(C.user,g)),Gs(Gs(D,A=>{if(!A)throw new dt.AccessViolation(C.user);let U=!0;return Mo(B,C,{transaction:O,ensureLoaded:U},!1,N=>{if(C.onlyIfCached){if(!N?.value)throw new dt.ServerError("Entry is not cached",504)}else if(U){let L=pn(B,N,C);if(L)return P?.disregardReadTxn(),C.loadedFromSource=!0,L.then($=>$?.value)}return N?.value})}),A=>{let U=g?.select;return U&&A!=null?rd(U,this.constructor)(A):A})}if(g?.property)return this.getProperty(g.property);if(this.doesExist()||g?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(g,T){let C=Dn(g,T);if(C?.read){if(C.isSuperUser)return!0;let P=C.attribute_permissions,O=T?.select;if(P?.length>0||Pu&&O){if(T||(T={}),O){let B=Array.isArray(O)?O:[O],D=P?.length>0&&YN(P,"read");T.select=B.map(A=>{let U=A.name||A;if(!D||D[U]){let N=xr[U]?.definition?.tableClass;if(N){if(A.name||(A={name:A}),!A.checkPermission&&T.checkPermission&&(A.checkPermission=T.checkPermission),!N.prototype.allowRead.call(null,g,A))return!1;if(!A.select)return A.name}return A}}).filter(Boolean)}else T.select=P.filter(B=>B.read&&!xr[B.attribute_name]).map(B=>B.attribute_name);return T}else return!0}}allowUpdate(g,T,C){let P=Dn(g,C);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let B=YN(O,"update");for(let D in T)if(!B[D])return!1;for(let D of O){let A=D.attribute_name;!D.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return qa(this.getContext())}}allowCreate(g,T,C){if(this.isCollection){let P=Dn(g,C);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let B=YN(O,"insert");for(let D in T)if(!B[D])return!1;return qa(this.getContext())}else return qa(this.getContext())}}else return this.allowUpdate(g,{})}allowDelete(g,T){return Dn(g,T)?.delete&&qa(this.getContext())}update(g,T){let C,P=typeof T=="boolean"||T===void 0&&(g==null||typeof g=="object"&&!(g instanceof URLSearchParams)),O=!1;P?(O=T,T=g,C=this.getId()):C=Ps(g);let B=this.getContext();if(!Br(B))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(O)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(P){let A=this.#t;A&&(T=Object.assign(A,T)),this.#t=T}else{let A=!0;if(g==null)throw new TypeError("Can not put a record without a target");return g.checkPermission&&(A=this.allowUpdate(B.user,T,g)),Gs(A,U=>{if(!U)throw new dt.AccessViolation(B.user);return Gs(i.get(Ps(g)),N=>{let L=new um(N);return L._setChanges(T),this._writeUpdate(C,L.getChanges(),!1),L})})}return this._writeUpdate(C,this.#t,O),this}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.#s===vq?this.set(g,(+this.getProperty(g)||0)+T):(this.#s||this.update(),this.set(g,new Rp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(g,T){if(typeof T=="number")return this.addTo(g,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(g){this.#t=g}setRecord(g){this.#e=g}invalidate(g){let T=!0,C=this.getContext();return g?.checkPermission&&(T=this.allowDelete(C.user,g,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);this._writeInvalidate(g?Ps(g):this.getId())})}_writeInvalidate(g,T,C){let P=this.getContext();Hi(g),Br(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#r,before:Ne.invalidate?.bind(this,P,g),beforeIntermediate:Mu(T,Ke.invalidate?.bind(this,P,g)),commit:a((B,D)=>{if(!(Fr(B,D,C?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));Fe.default.trace?.(`Invalidating entry in ${s} id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,T,D,B,Fn,_,{user:P?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(g,T){let C=this.getContext();Hi(g),Br(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#r,before:Ne.relocate?.bind(this,C,g),beforeIntermediate:Ke.relocate?.bind(this,C,g),commit:a((O,B)=>{if(Fr(O,B,T?.nodeId)<=0)return;let D=ve.getResidencyRecord(T.residencyId),A=0,U=null,N=B?.value;if(D&&!D.includes(server.hostname)){for(let L in r)U||(U={}),U[L]=N[L];A=Fn}else U=N;Fe.default.trace?.(`Relocating entry id: ${g}, timestamp: ${new Date(O).toISOString()}`),y(g,U,B,O,A,_,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(g,T){if(this.getResidencyById)return!1;let C={previousResidency:this.getResidencyRecord(g.residencyId),isRelocation:!0},P=Va(this.getResidency(T.value,C)),O;if(P){if(!P.includes(server.hostname))return!1;O=Qc(P)}let B=0;Fe.default.debug?.("Performing a relocate of an entry",g.key,T.value,P);let D=y(g.key,T.value,g,g.version,B,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(g,T,C){let P=this.Source,O;if(!((I||_)&&(!T||(O=i.getEntry(g),!O||!T)||O.version!==C))){if(I){if(i.hasLock(g,O.version))return;let B;for(let D in r)B||(B={}),B[D]=T[D];if(B)return y(g,B,O,C,_l,null,null,null,!0)}return i.ifVersion(g,C,()=>{Lu(g,T,null)}),El(i,O??i.getEntry(g),C)}}lock(){throw new Error("Not yet implemented")}static operation(g,T){return g.table||=s,g.schema||=c,global.operation(g,T)}put(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!0);else{let C=!0;if(g==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return g.checkPermission&&(C=this.allowUpdate(P.user,T,g)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);if(Array.isArray(T))for(let B of T){let D=B[t];this._writeUpdate(D,B,!0)}else{let B=Ps(g);this._writeUpdate(B,T,!0)}})}}create(g,T){let C=!0,P=this.getContext();if(!T&&!(g instanceof URLSearchParams)&&(T=g,g=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return g?.checkPermission&&(C=this.allowCreate(P.user,T,g)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);let B=Ps(g)??T[t];if(B===void 0)B=this.constructor.getNewId(),T[t]=B;else if(i.get(B))throw new dt.ClientError("Record already exists",409);return this._writeUpdate(B,T,!0),T})}patch(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!1);else{let C=this.update(g,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(g,T,C,P){let O=this.getContext(),B=Br(O);Hi(g);let D=this.#r??i.getEntry(g);this.#s=C?vq:Lce;let A=a(N=>C?N.put?()=>N.put(O,g,T):null:N.patch?()=>N.patch(O,g,T):N.put?()=>N.put(O,g,Cl(this)):null,"writeToSources"),U={key:g,store:i,entry:D,nodeName:O?.nodeName,validate:a(N=>{T||(T=this.#t),C||T&&Vg(this.#t===T?this:T)?O?.source||(B.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(N):k.type==="String"?new Date(N).toISOString():N),C&&(t&&T[t]!==g&&(T[t]=g),q&&(D?.value?T[q.name]=D?.value[q.name]:T[q.name]=q.type==="Date"?new Date(N):q.type==="String"?new Date(N).toISOString():N),T=Cl(T))):B.removeWrite(U)},"validate"),before:A(Ne),beforeIntermediate:Mu(T,A(Ke)),commit:a((N,L,$)=>{if($){if(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),this.#r=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#n=N;let W=L?.value,J;this.#s=0;let F=!1,he=Fr(N,L,P?.nodeId),ue,_e=C?"put":"patch",re;P?.residencyId!=null&&(re=P.residencyId);let oe=O?.expiresAt??(h?h+Date.now():-1);if(he<=0){if(_){let ie=L.localTime,Ce=L.version;Fe.default.trace?.("Applying CRDT update to record with id: ",g,"txn time",new Date(N),"applying later update from:",new Date(Ce),"local recorded time",new Date(ie));let Be=[];for(;ie>N||Ce>=N&&ie>0;){let He=l.get(ie);if(!He)break;let Te=At(He);if(Ce=Te.version,Ce>=N){if(Ce===N){if(he=Fr(N,{version:Ce,localTime:ie},P?.nodeId),he===0)return me(!1);if(he>0){ie=Te.previousLocalTime;continue}}if(Te.type==="patch")Be.push(Te),ue=T;else if(Te.type==="put"||Te.type==="delete")return me(!1)}ie=Te.previousLocalTime}ie||Fe.default.debug?.("No further audit history, applying incremental updates based on available history",g,"existing version preserved",L),Be.sort((He,Te)=>He.version-Te.version);for(let He of Be){let Te=He.getValue(i);if(Fe.default.debug?.("Rebuilding update with future patch:",new Date(He.version),Te,He),J=B_(J??T,Te,C),!J)return me(!1)}}else{if(C)return me(!1);J=B_(J??T,W,C),Fe.default.debug?.("Rebuilding update without audit:",J)}Fe.default.trace?.("Rebuilt record to save:",J," is full update:",C)}let ge;if(C&&!J?ge=T:this.constructor.loadAsInstance===!1?ge=Cl(W,J??T):(this.#e=W,ge=Cl(this,J??T)),this.#e=ge,ge&&ge.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(re==null){D?.residencyId&&(O.previousResidency=ve.getResidencyRecord(D.residencyId));let ie=Va(ve.getResidency(ge,O));if(ie&&!ie.includes(server.hostname))if(ue??=ge,F=!0,ve.getResidencyById)ge=void 0;else{ge=null;for(let Ce in r)ge||(ge={}),ge[Ce]=ue[Ce]}re=Qc(ie)}C||(ue=T),Fe.default.trace?.(`Saving record with id: ${g}, timestamp: ${new Date(N).toISOString()}${oe?", expires at: "+new Date(oe).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ge).slice(0,100)}catch{return""}})()),Lu(g,W,ge),me(!0),O.expiresAt&&$a();function me(ie){y(g,ie?ge:void 0,ie?L:{...L,value:void 0},N,F?Fn:0,_,{omitLocalRecord:F,user:O?.user,residencyId:re,expiresAt:oe,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},_e,!1,ie?ue:ue??T)}a(me,"writeCommit")},"commit")};B.addWrite(U)}async delete(g){if(dm(g)){g.select=["$id"];for await(let T of this.search(g))this._writeDelete(T.$id);return!0}if(g){let T=!0,C=this.getContext();return g.checkPermission&&(T=this.allowDelete(C.user,g,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);let O=Ps(g);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(g,T){let C=Br(this.getContext());Hi(g);let P=this.getContext();return C.addWrite({key:g,store:i,entry:this.#r,nodeName:P?.nodeName,before:Ne.delete?.bind(this,P,g),beforeIntermediate:Ke.delete?.bind(this,P,g),commit:a((O,B,D)=>{let A=B?.value;D&&(P&&B?.version>(P.lastModified||0)&&(P.lastModified=B.version),ve._updateResource(this,B)),!(Fr(O,B,T?.nodeId)<=0)&&(Lu(this.getId(),A),Fe.default.trace?.(`Deleting record with id: ${g}, txn timestamp: ${new Date(O).toISOString()}`),_||R?(y(g,null,B,O,0,_,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),_||$a()):El(i,B))},"commit")}),!0}search(g){let T=this.getContext(),C=Br(T);if(!g)throw new Error("No query provided");if(g.parseError)throw g.parseError;if(g.checkPermission&&!this.allowRead(T.user,g))throw new dt.AccessViolation(T.user);T&&(T.lastModified=Nce);let P=g.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(g)?g:g[Symbol.iterator]?Array.from(g):[];let O=g.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let B,D={};function A(oe,ge){let me;switch(ge){case"and":case void 0:if(oe.length<1)throw new Error('An "and" operator requires at least one condition');me=!0;break;case"or":if(oe.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}for(let ie of oe){if(ie.conditions){ie.conditions=A(ie.conditions,ie.operator);continue}let Ce=ie[0]??ie.attribute,Be=Ce==null?H:ji(S,Ce);if(Be)(Be.type||hI[ie.comparator])&&(ie[1]===void 0?ie.value=N(ie.value,Be):ie[1]=N(ie[1],Be));else if(Ce!=null&&!g.allowConditionsOnDynamicAttributes)throw(0,dt.handleHDBError)(new Error,`${Ce} is not a defined attribute`,404);if(ie.chainedConditions)if(ie.chainedConditions.length===1&&(!ie.operator||ie.operator=="and")){let He=ie.chainedConditions[0],Te,pt;if(He.comparator==="gt"||He.comparator==="greater_than"||He.comparator==="ge"||He.comparator==="greater_than_equal"?(Te=ie,pt=He):(Te=He,pt=ie),Te.comparator!=="lt"&&Te.comparator!=="less_than"&&Te.comparator!=="le"&&Te.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Nt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",Ft=Te.comparator==="le"||Te.comparator==="less_than_equal";ie.comparator=(Nt?"ge":"gt")+(Ft?"le":"lt"),ie.value=[pt.value,Te.value]}else throw new Error("Multiple chained conditions are not currently supported")}return oe}a(A,"prepareConditions");function U(oe,ge){if(g.enforceExecutionOrder)return oe;for(let me of oe)me.conditions&&(me.conditions=U(me.conditions,me.operator));return oe.length>1&&ge!=="or"?Ace(oe,Sg(ve)):oe}a(U,"orderConditions");function N(oe,ge){return Array.isArray(oe)?oe.map(me=>TS(me,ge)):TS(oe,ge)}a(N,"coerceTypedValues");let L=g.operator;(P.length>0||L)&&(P=A(P,L));let $=typeof g.sort=="object"&&g.sort,W;if($&&L!=="or"){let oe=$.attribute;if(oe==null)throw new dt.ClientError("Sort requires an attribute");if(B=P.find(ge=>Zu(ge.attribute)===Zu(oe)),!B){let ge=ji(S,oe);if(!ge)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not a defined attribute`,404);if(ge.indexed)B={...$,comparator:"sort"},P.push(B);else if(P.length===0&&!g.allowFullScan)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not indexed and not combined with any other conditions`,404)}B&&(B.descending=!!$.descending)}P=U(P,L),$&&(B&&P[0]===B?$.next&&(W={dbOrderedAttribute:$.attribute,attribute:$.next.attribute,descending:$.next.descending,next:$.next.next}):(B&&P.splice(P.indexOf(B),1),W=$));let J=g.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),g.explain)return{conditions:P,operator:L,postOrdering:W,selectApplied:!!J};let F=C.useReadTxn(),he=EI(P,L,ve,F,g,T,(oe,ge)=>mm(oe,J,T,F,ge),D),ue=g.ensureLoaded!==!1,_e=ve.transformEntryForSelect(J,T,F,D,ue,!0),re=ve.transformToOrderedSelect(he,J,W,T,F,_e);return(g.offset||g.limit!==void 0)&&(re=re.slice(g.offset,g.limit!==void 0?(g.offset||0)+g.limit:void 0)),re.onDone=()=>{re.onDone=null,C.doneReadTxn()},re.selectApplied=!0,re.getColumns=()=>{if(J){let oe=[];for(let ge of J)ge==="*"?oe.push(...S.map(me=>me.name)):oe.push(ge.name||ge);return oe}return S.filter(oe=>!oe.computed&&!oe.relationship).map(oe=>oe.name)},re}static transformToOrderedSelect(g,T,C,P,O,B){let D=new a_;if(C){g=mm(g,T,P,O,null);let A;D.iterate=function(){let N,L=g[Symbol.asyncIterator]?g[Symbol.asyncIterator]():g[Symbol.iterator](),$,W=C.dbOrderedAttribute,J,F,he=!0;function ue(re){let oe=re.next&&ue(re.next),ge=re.descending;return P.sort=re,(me,ie)=>{let Ce=Du(me,re.attribute,P),Be=Du(ie,re.attribute,P),He=ge?(0,Gl.compareKeys)(Be,Ce):(0,Gl.compareKeys)(Ce,Be);return He===0?oe?.(me,ie)||0:He}}a(ue,"createComparator");let _e=ue(C);return{async next(){let re;if(N)if(re=N.next(),re.done){if($)return D.onDone&&D.onDone(),re}else return{value:await B.call(this,re.value)};A=[],J&&A.push(J);do if(re=await L.next(),re.done){if($=!0,A.length)break;return D.onDone&&D.onDone(),re}else{let oe=re.value;if(oe?.then&&(oe=await oe),W){let ge=Du(oe,W,P);if(he)he=!1,F=ge;else if(ge!==F){F=ge,J=oe;break}}A.push(oe)}while(!0);return C.isGrouped,A.sort(_e),N=A[Symbol.iterator](),re=N.next(),re.done?(D.onDone&&D.onDone(),re):{value:await B.call(this,re.value)}},return(){return D.onDone&&D.onDone(),L.return()},throw(){return D.onDone&&D.onDone(),L.throw()}}};let U=a(N=>{if(typeof T=="object"&&Array.isArray(N.attribute))for(let L=0;L<T.length;L++){let $=T[L],W;if($.name===N.attribute[0]){for(W=$.sort||($.sort={});W.next;)W=W.next;W.attribute=N.attribute.slice(1),W.descending=N.descending}else $===N.attribute[0]&&(T[L]=W={name:$,sort:{attribute:N.attribute.slice(1),descending:N.descending}})}N.next&&U(N.next)},"applySortingOnSelect");U(C)}else D.iterate=(g[Symbol.asyncIterator]||g[Symbol.iterator]).bind(g),D=D.map(function(A){try{let U=B.call(this,A);return typeof U?.catch=="function"?U.catch(N=>{throw N.partialObject={[t]:A.key},N}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return D}static transformEntryForSelect(g,T,C,P,O,B){let D;O&&I&&!(typeof g=="string"?[g]:g)?.every(N=>{let L;return typeof N=="object"?L=N.name:L=N,r[L]||L===t})&&(D=!0);let A,U=a(function(N){let L;if(T?.transaction?.stale&&(T.transaction.stale=!1),N!=null){if(L=N.deref?N.deref():N.value,!L&&(N.key===void 0||N.deref)||N.metadataFlags&Fn){if(N.metadataFlags&Fn&&T.replicateFrom===!1&&B&&N.residencyId)return hc.SKIP;if(N=Mo(N.key??N,T,{transaction:C,lazy:g?.length<4,ensureLoaded:O},this?.isSync,$=>$),N?.then)return N.then(U.bind(this));L=N?.value}if(D&&N?.metadataFlags&(Fn|_l)||N?.expiresAt!=null&&N?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:N.key,message:"This entry has expired"};let $=pn(N.key??N,N,T);if($?.then)return $.then(U)}}if(L==null)return B?hc.SKIP:L;if(g&&!(g[0]==="*"&&g.length===1)){let $,W=a((F,he)=>{let ue;typeof F=="object"?ue=F.name:ue=F;let _e=xr?.[ue],re;if(_e){let oe=P?.[ue];if(oe)if(oe.hasMappings){let me=_e.from?L[_e.from]:Zu(N.key);re=oe.get(me),re||(re=[])}else re=oe.fromRecord?.(L);else re=_e(L,T,N,!0);let ge=a(me=>{if(_e.directReturn)return he(me,ue);if(me&&typeof me=="object"){let ie=_e.definition?.tableClass||ve;A||(A={});let Ce=A[ue]||(A[ue]=ie.transformEntryForSelect(ue===F?null:F.select||(Array.isArray(F)?F:null),T,C,oe,O));if(Array.isArray(me)){let Be=[],He=ie.transformToOrderedSelect(me,F.select,typeof F.sort=="object"&&F.sort,T,C,Ce)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Te=a(Nt=>{for(;!Nt.done;){if(Nt?.then)return Nt.then(Te);Be.push(Nt.value),Nt=He.next()}he(Be,ue)},"nextValue"),pt=Te(He.next());pt&&($||($=[]),$.push(pt));return}else if(me=Ce.call(this,me),me?.then){$||($=[]),$.push(me.then(Be=>he(Be,ue)));return}}he(me,ue)},"handleResolvedValue");re?.then?($||($=[]),$.push(re.then(ge))):ge(re);return}else re=L[ue],re&&typeof re=="object"&&ue!==F&&(re=ve.transformEntryForSelect(F.select||F,T,C,null)({value:re}));he(re,ue)},"selectAttribute"),J;if(typeof g=="string")W(g,F=>{J=F});else if(Array.isArray(g))if(g.asArray)J=[],g.forEach((F,he)=>{F==="*"?g[he]=L:W(F,ue=>J[he]=ue)});else{J={};let F=g.forceNulls;for(let he of g)if(he==="*")for(let ue in L)J[ue]=L[ue];else W(he,(ue,_e)=>{ue===void 0&&F&&(ue=null),J[_e]=ue})}else throw new dt.ClientError("Invalid select"+g);return $?Promise.all($).then(()=>J):J}return L},"transform");return U}async subscribe(g){if(!l)throw new Error("Can not subscribe to a table without an audit log");_||ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),g||(g={});let T=!g.rawEvents,C=[],P=bI(ve,this.getId()??null,function(D,A,U,N){try{let L=A.getValue?.(i,T),$=A.type;if(!L&&$==="patch"&&T){let J=i.getEntry(D);J?.version===A.version?L=J.value:L=A.getValue?.(i,!0,U),$="put"}let W={id:D,localTime:U,value:L,version:A.version,type:$,beginTxn:N};C?C.push(W):(c!=="system"&&Ye(A.size??1,"db-message",s,null),this.send(W))}catch(L){Fe.default.error?.(L)}},g.startTime||0,g),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,g.onlyChildren&&(P.onlyChildren=!0)),g.supportsTransactions&&(P.supportsTransactions=!0);let D=this.getId(),A=g.previousCount;A>1e3&&(A=1e3);let U=g.startTime;if(this.isCollection){if(U){if(A)throw new dt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:L}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let $=At(L);if($.tableId!==n)continue;let W=$.recordId;if(D==null||Bq(D,W)){let J=$.getValue(i,T,N);if(B({id:W,localTime:N,value:J,version:$.version,type:$.type,size:$.size}),P.queue?.length>Uq&&await P.waitForDrain()===!1)return}P.startTime=N}}else if(A){let N=[];for(let{key:L,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let W=At($);if(W.tableId!==n)continue;let J=W.recordId;if(D==null||Bq(D,J)){let F=W.getValue(i,T,L);if(N.push({id:J,localTime:L,value:F,version:W.version,type:W.type}),--A<=0)break}}catch(W){Fe.default.error("Error getting history entry",L,W)}for(let L=N.length;L>0;)B(N[--L]);N[0]&&(P.startTime=N[0].localTime)}else if(!g.omitCurrent){for(let{key:N,value:L,version:$,localTime:W,size:J}of i.getRange({start:D??!1,end:D==null?void 0:[D,Gl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(L&&(B({id:N,localTime:W,value:L,version:$,type:"put",size:J}),P.queue?.length>Uq&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let N=this.#r?.localTime;if(N===fI&&(i.cache?.delete(D),this.#r=i.getEntry(D),Fe.default.trace?.("re-retrieved record",N,this.#r?.localTime),N=this.#r?.localTime),Fe.default.trace?.("Subscription from",U,"from",D,N),U<N){let L=[],$=N;do{let W=l.get($);if(W){g.omitCurrent=!0;let J=At(W),F=J.getValue(i,T,$);T&&(J.type="put"),L.push({id:D,value:F,localTime:$,...J}),$=J.previousLocalTime}else break;A&&A--}while($>U&&A!==0);for(let W=L.length;W>0;)B(L[--W]);P.startTime=N}!g.omitCurrent&&this.doesExist()&&B({id:D,localTime:N,value:this.#e,version:this.#n,type:"put"})}for(let N of C)B(N);C=null})();function B(D){c!=="system"&&Ye(D.size??1,"db-message",s,null),P.send(D)}return a(B,"send"),g.listener&&P.on("data",g.listener),P}static subscribeOnThisThread(g,T){return g===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(g,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),g,T);else{let P=!0,O=this.getContext();return g.checkPermission&&(P=this.allowCreate(O.user,g,O)),Gs(P,B=>{if(!B)throw new dt.AccessViolation(O.user);let D=Ps(g);this._writePublish(D,T,C)})}}_writePublish(g,T,C){let P=Br(this.getContext());g??=null,g!==null&&Hi(g);let O=this.getContext();P.addWrite({key:g,store:i,entry:this.#r,nodeName:O?.nodeName,validate:a(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:Ne.publish?.bind(this,O,g,T),beforeIntermediate:Mu(T,Ke.publish?.bind(this,O,g,T)),commit:a((B,D,A)=>{D===void 0&&R&&!_&&$a(),Fe.default.trace?.(`Publishing message to id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,D?.value??null,D,D?.version||B,0,!0,{user:O?.user,residencyId:C?.residencyId,expiresAt:O?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(g,T){let C,P=a((O,B,D)=>{if(B.type&&O!=null)if(T&&O.__op__&&(O=O.value),B.properties){typeof O!="object"&&(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be an object${B.type?" ("+B.type+")":""}`);let A=B.properties;for(let U=0,N=A.length;U<N;U++){let L=A[U];if(L.relationship||L.computed){g.hasOwnProperty(L.name)&&(C||(C=[])).push(`Computed property ${D}.${L.name} may not be directly assigned a value`);continue}let $=P(O[L.name],L,D+"."+L.name);$&&(O[L.name]=$)}if(B.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(N=>N.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${D}`)}else switch(B.type){case"Int":(typeof O!="number"||O>>0!==O)&&(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a string`);break;case"Boolean":typeof O!="boolean"&&(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(O instanceof Ds)){if(typeof O=="string"&&(O=Buffer.from(O)),O instanceof Buffer)return createBlob(O,{type:"text/plain"});(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(B.elements)for(let A=0,U=O.length;A<U;A++){let N=O[A],L=P(N,B.elements,D+"[*]");L&&(O[A]=L)}}else(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be an Array`);break}B.nullable===!1&&O==null&&(C||(C=[])).push(`Property ${D} is required (and not does not allow null values)`)},"validateValue");for(let O=0,B=S.length;O<B;O++){let D=S[O];if(D.relationship||D.computed){Object.hasOwn(g,D.name)&&(C||(C=[])).push(`Computed property ${D.name} may not be directly assigned a value`);continue}if(!T||D.name in g){let A=P(g[D.name],D,D.name);A!==void 0&&(g[D.name]=A)}}if(f)for(let O in g)S.find(B=>B.name===O)||(C||(C=[])).push(`Property ${O} is not allowed`);if(C)throw new dt.ClientError(C.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(g){let T=S.slice(0);for(let C of g){if(!C.name)throw new dt.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new dt.ClientError("Attribute names cannot include backticks or forward slashes");Ice(C.name),T.push(C)}return ze({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static async removeAttributes(g){let T=S.filter(C=>!g.includes(C.name));return ze({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static getSize(){let g=i.getStats();return(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getAuditSize(){let g=l?.getStats();return g&&(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getStorageStats(){let g=i.env.path,T=WN.default.statfsSync?.(g)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(g){let T=i.getStats().entryCount,C=1e3/2,P=performance.now(),O=Math.floor(T/2),B=g?.exactCount,D=0,A=0,U;for(let{value:N}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(N!=null&&D++,A++,await pc(),!B&&A<O&&performance.now()-P>C){U=A;break}if(U){let N=D;D=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))re!=null&&D++,await pc();let L=U*2,$=(D+N)/L,W=Math.pow((D-N+1)/U/2,2)+$*(1-$)/L,J=Math.max(Math.sqrt(W)*T,1),F=Math.round($*T),he=Math.max(F-1.96*J,D+N),ue=Math.min(F+1.96*J,T),_e=Math.pow(10,Math.round(Math.log10(J)));return _e>F&&(_e=_e/10),D=Math.round(F/_e)*_e,{recordCount:D,estimatedRange:[Math.round(he),Math.round(ue)]}}return{recordCount:D}}static updatedAttributes(){xr=this.propertyResolvers={$id:a((g,T,C)=>({value:C.key}),"$id"),$updatedtime:a((g,T,C)=>C.version,"$updatedtime"),$updatedTime:a((g,T,C)=>C.version,"$updatedTime"),$expiresAt:a((g,T,C)=>C.expiresAt,"$expiresAt"),$record:a((g,T,C)=>C?{value:g}:g,"$record"),$distance:a((g,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let g of this.attributes){g.isPrimaryKey&&(H=g),g.resolve=null;let T=g.relationship,C=g.computed;if(T)if(g.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Pu=!0,T.to)g.elements?.definition?(xr[g.name]=g.resolve=(P,O,B,D)=>{let A=P[T.from?T.from:t],U=g.elements.definition.tableClass;return D?Xu({attribute:T.to,value:A},Br(O).getReadTxn(),!1,U,!1).map(N=>N&&N.key!==void 0?N:U.primaryStore.getEntry(N,{transaction:Br(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},g.set=()=>{},g.resolve.definition=g.elements.definition,g.resolve.to=T.to,T.from&&(g.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${g.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=g.definition||g.elements?.definition;P?(xr[g.name]=g.resolve=(O,B,D,A)=>{let U=O[T.from];if(U===void 0)return;if(g.elements){let L,$=U?.map(W=>{let J=P.tableClass.primaryStore[A?"getEntry":"get"](W,{transaction:Br(B).getReadTxn()});return J?.then&&(L=!0),ve.loadAsInstance===!1&&Object.freeze(A?J?.value:J),J});return T.filterMissing?L?Promise.all($).then(W=>W.filter(Fq)):$.filter(Fq):L?Promise.all($):$}let N=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Br(B).getReadTxn()});return ve.loadAsInstance===!1&&Object.freeze(A?N?.value:N),N},g.set=(O,B)=>{if(Array.isArray(B)){let D=B.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=D}else{let D=B.getId?.()||B[P.tableClass.primaryKey];O[T.from]=D}},g.resolve.definition=g.definition||g.elements?.definition,g.resolve.from=T.from):console.error(`The relationship property "${g.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${g.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(g.name,C.from),xr[g.name]=g.resolve=(P,O,B)=>{let D=typeof C.from=="string"?P[C.from]:P,A=this.userResolvers[g.name];if(A)return A(D,O,B);Fe.default.warn(`Computed attribute "${g.name}" does not have a function assigned to it. Please use setComputedAttribute('${g.name}', resolver) to assign a resolver function.`),this.userResolvers[g.name]=()=>{}},g.resolve.directReturn=!0;else if(r[g.name]?.customIndex?.propertyResolver){let P=r[g.name].customIndex;xr[g.name]=(O,B,D)=>{let A=O[g.name];return P.propertyResolver(A,B,D)},xr[g.name].directReturn=!0}}bp(this,this),bp(um,this,!0);for(let g of S){let T=g.name;g.resolve&&(Object.defineProperty(i.encoder.structPrototype,T,{get(){return g.resolve(this,td.getStore())},set(C){return g.set(this,C)},configurable:!0,enumerable:g.enumerable}),g.enumerable&&!i.encoder.structPrototype.toJSON&&Object.defineProperty(i.encoder.structPrototype,"toJSON",{configurable:!0,value(){let C={};for(let P in this)C[P]=this[P];return C}}))}}static setComputedAttribute(g,T){let C=ji(S,g);if(!C){console.error(`The attribute "${g}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${g}" is not defined as computed in the table "${s}"`);return}this.userResolvers[g]=T}static async deleteHistory(g=0,T=!1){let C;for(let{key:P,value:O}of l.getRange({start:0,end:g}))await pc(),At(O).tableId===n&&(C=sg(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:B,localTime:D}=P;await pc(),B===null&&D<g&&(C=El(i,P))}await C}static async*getHistory(g=0,T=1/0){for(let{key:C,value:P}of l.getRange({start:g||1,end:T})){await pc();let O=At(P);O.tableId===n&&(yield{id:O.recordId,localTime:C,version:O.version,type:O.type,value:O.getValue(i,!0,C),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(g){let T=[];if(g==null)throw new Error("An id is required");let C=i.getEntry(g);if(!C)return T;let P=C.localTime;if(!P)throw new Error("The entry does not have a local audit time");let O=0;do{await pc();let B=l.get(P);if(B){let D=At(B);T.push({id:D.recordId,localTime:P,version:D.version,type:D.type,value:D.getValue(i,!0,P),user:D.user}),P=D.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){Y?.remove()}}let l_=gS(async(K,g,T)=>{for(let C of ve.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;g.source=C;let P=await C.get(K,g);if(P)return P}},()=>{throw new dt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});ve.updatedAttributes();let $b=ve.prototype;return h&&ve.setTTLExpiration(h/1e3),z&&u_(),ve;function Lu(K,g,T){let C;for(let P in r){let O=r[P],B=O.isIndexing,D=xr[P],A=T&&(D?D(T):T[P]),U=g&&(D?D(g):g[P]);if(A===U&&!B)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}C=!0;let N=O.indexNulls,L=(0,Wp.getIndexedValues)(A,N),$=(0,Wp.getIndexedValues)(U,N);if($?.length>0){let W=new Set($);if(L=L?L.filter(J=>{if(W.has(J))W.delete(J);else return!0}):[],$=Array.from(W),($.length>0||L.length>0)&&Dq){let J=$.concat(L).map(F=>({key:F,value:K}));O.prefetch(J,xq)}for(let J=0,F=$.length;J<F;J++)O.remove($[J],K)}else L?.length>0&&Dq&&O.prefetch(L.map(W=>({key:W,value:K})),xq);if(L)for(let W=0,J=L.length;W<J;W++)O.put(L[W],K)}return C}a(Lu,"updateIndices");function Hi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Mq)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Gl.writeKey)(K,Dce,0)>Mq)throw new Error("Primary key size is too large: "+K.length);return!0}a(Hi,"checkValidId");function Ps(K){return typeof K=="object"&&K?K.id:K}a(Ps,"requestTargetToId");function dm(K){return typeof K=="object"&&K&&K.isCollection}a(dm,"isSearchTarget");function fm(K){}a(fm,"isRequestTarget");function Mo(K,g,T,C,P){if(ve.getResidencyById&&T.ensureLoaded&&g?.replicateFrom!==!1){let B=Va(ve.getResidencyById(K));if(B&&!B.includes(server.hostname)&&w)return w({key:K,residency:B}).then(P)}let O=a(()=>{if(g?.transaction?.stale&&(g.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let B=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(Gq.default.trace?.("Recording db-read action for",`${c}.${s}`),Ye(B?.size??1,"db-read",s,null)),g?._freezeRecords&&Object.freeze(B?.value),B?.residencyId&&B.metadataFlags&Fn&&w&&T.ensureLoaded&&g?.replicateFrom!==!1?w(B).then(D=>P(D,K),D=>(Fe.default.error?.("Error loading remote record",K,B,T,D),P(null,K))):(B&&g&&(B?.version>(g.lastModified||0)&&(g.lastModified=B.version),B?.localTime&&!g.lastRefreshed&&(g.lastRefreshed=B.localTime)),P(B,K))},"whenPrefetched");return C?O():te>0?(te--,O()):new Promise((B,D)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(ce.push(K),de.push(U),ce.length>c_&&(te--,A()));function A(){if(ce.length>0){let N=de;i.prefetch(ce,()=>{te===-1?A():te++;for(let L of N)L()}),ce=[],de=[],Se>2&&Se--}else te=Se,Se<lm&&Se++}a(A,"prefetch");function U(){try{B(O())}catch(N){D(N)}}a(U,"load")})}a(Mo,"loadLocalRecord");function Dn(K,g){let T=g?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return vce;let C=T[c],P,O=C?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}a(Dn,"getTablePermissions");function pn(K,g,T,C){if(I){let P=!1;if(T.noCache?P=!0:(g?(!g.value||g.metadataFlags&(Fn|_l)||g.expiresAt!=null&&g.expiresAt<Date.now())&&(P=!0):P=!0,en(!P,"cache-hit",s)),P){let O=vu(K,g,T).then(B=>(B?.value&&B?.value.getRecord?.()&&Fe.default.error?.("Can not assign a record that is already a resource"),T&&(B?.version>(T.lastModified||0)&&(T.lastModified=B.version),T.lastRefreshed=Date.now()),B));if(T?.onlyIfCached||g?.value&&C?.allowStaleWhileRevalidate?.(g,K)){if(O.catch(B=>Fe.default.warn?.(B)),T?.onlyIfCached&&!C.doesExist())throw new dt.ServerError("Entry is not cached",504);return}else return O}}else if(g?.value&&g.expiresAt!=null&&g.expiresAt<Date.now())return ve.evict(g.key,g.value,g.version),g.value=null,{then(P){return P(g)}}}a(pn,"ensureLoadedFromSource");function Br(K){let g=K?.transaction;if(g){if(!g.lmdbDb)return g.lmdbDb=i,g;do{if(g.lmdbDb?.path===i.path)return g;let T=g.next;if(!T)return g=g.next=new xo,g.lmdbDb=i,g;g=T}while(!0)}else return new M_}a(Br,"txnForContext");function Du(K,g,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof g=="object"){let O=xr,B=C;for(let D=0,A=g.length;D<A;D++){let U=g[D],N=O?.[U];B=N&&B?N(B,T,K):B?.[U],K=null,O=N?.definition?.tableClass?.propertyResolvers}return B}let P=xr[g];return P?P(C,T,K):C[g]}a(Du,"getAttributeValue");function mm(K,g,T,C,P){let O=P?.length,B={transaction:C,lazy:O>0||typeof g=="string"||g?.length<4,alwaysPrefetch:!0},D;function A(U,N){let L=U?.value;if(!L)return hc.SKIP;for(let $=0;$<O;$++)if(!D?.includes($)&&!P[$](L,U))return hc.SKIP;return N!==void 0&&(U.key=N),U}if(a(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(N=>{if(D=null,typeof N=="object"&&N?.key!==void 0)return O>0?A(N):N;if(N==null)return hc.SKIP;for(let L=0;L<O;L++){let W=P[L].idFilter;if(W){if(!W(N))return hc.SKIP;D||(D=[]),D.push(L)}}return Mo(N,T,B,!1,A)});return Array.isArray(K)&&(U=U.filter(N=>N!==hc.SKIP)),U.hasEntries=!0,U}return K}a(mm,"transformToEntries");function Fr(K,g,T=server.replication?.getThisNodeId(l)){if(K<=g?.version){if(g?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),P=g.localTime,O=P&&l.get(P);if(O){let B,D,A=At(O);for(let U in C)C[U]===T&&(B=U),C[U]===A.nodeId&&(D=U);if(B>D)return 1;if(B===D)return 0}}return-1}return 1}a(Fr,"precedesExistingVersion");async function vu(K,g,T){let C=g?.metadataFlags,P=g?.version,O,B;if(!i.attemptLock(K,P,()=>{clearTimeout(B);let N=i.getEntry(K);!N||!N.value||N.metadataFlags&(Fn|_l)?O(vu(K,i.getEntry(K),T)):O(N)}))return new Promise(N=>{O=N,B=setTimeout(()=>{i.unlock(K,P)},Pce)});let D=g?.value,A={requestContext:T,replacingRecord:D,replacingEntry:g,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((N,L)=>{let $;Gs(bt(A,async W=>{let J=performance.now(),F,he,ue;try{F=await l_(K,A,g),ue=C&Fn;let re=A.lastModified||ue&&P;re||(re=(0,Wp.getNextMonotonicTime)()),he=ue||re>P||!D;let oe=performance.now()-J;if(Ye(oe,"cache-resolution",s,null,"success"),U&&Kp(U,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),W.timestamp=re,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),F){if(typeof F!="object")throw new Error("Only objects can be cached and stored in tables");if(F.status>0&&F.headers)if(F.status>=300)if(F.status===304)F=D,re=P;else throw new dt.ServerError(F.body||"Error from source",F.status);else F=F.body;typeof F.toJSON=="function"&&(F=F.toJSON()),t&&F[t]!==K&&(F[t]=K)}$=!0,N({key:K,version:re,value:F})}catch(re){re.message+=` while resolving record ${K} for ${s}`,D&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(N({key:K,version:P,value:D}),Fe.default.trace?.(re.message,"(returned stale record)")):L(re);let oe=performance.now()-J;Ye(oe,"cache-resolution",s,null,"fail"),U&&Kp(U,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Br(A).addWrite({key:K,store:i,entry:g,nodeName:"source",before:Mu(F),commit:a((re,oe)=>{if(oe?.version!==P)return;let ge=Lu(K,D,F);if(F){Ke.put?.(A,K,F),oe&&(T.previousResidency=ve.getResidencyRecord(oe.residencyId));let me,ie=!1,Ce,Be=Va(ve.getResidency(F,T));if(Be){if(!Be.includes(server.hostname))if(me=F,ie=!0,ve.getResidencyById)F=void 0;else{F=null;for(let He in r)F||(F={}),F[He]=me[He]}Ce=Qc(Be)}Fe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),y(K,F,oe,re,ie?Fn:0,_&&(he||ie)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:Ce,tableToTrack:s},"put",!!ue,me)}else oe&&(Ke.delete?.(A,K),Fe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),_||R?y(K,null,oe,re,0,_&&he||null,{user:A?.user,tableToTrack:s},"delete",!!ue):El(i,oe,P))},"commit")})}),()=>{i.unlock(K,P)},W=>{i.unlock(K,P),$&&Fe.default.error?.("Error committing cache update",W)})})}a(vu,"getFromSource");function qa(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new dt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new dt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(qa,"checkContextPermissions");function $a(K){let g=!1;if(K&&(K-Ir>1&&(g=!0),Ir=K),!($e===nr&&!g)&&(nr=$e,(0,kl.getWorkerIndex)()===(0,kl.getWorkerCount)()-1))return zr&&clearTimeout(zr),$e?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let P=$e/(1+Ir),O=g?Date.now():Math.ceil((Date.now()-C.getTime())/P)*P+C.getTime(),B=a(D=>{Fe.default.trace?.(`Scheduled next cleanup scan at ${new Date(D)}`),zr=setTimeout(()=>X=X.then(async()=>{if(B(Math.max(D+$e,Date.now())),i.rootStore.status!=="open"){clearTimeout(zr);return}let A=50,U=new Array(A),N=0,L=Math.pow(Ir,8)*(Hl.get(x.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),$=E/Math.pow(Math.max(Ir,1),4);Fe.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${L}, adjusted eviction ${$}ms`);function W(J,F,he,ue){let _e=J+$-Date.now();if(_e<0)return!0;if(Ir){let re=i.lastSize;return he&Xr&&il(ue,oe=>{oe.size&&(re+=oe.size)}),Fe.default.trace?.(`shouldEvict adjusted ${_e} ${re}, ${_e*(J-F)/re} < ${L}`),_e*(J-F)/re<L}return!1}a(W,"shouldEvict");try{let J=0;for(let F of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:he,value:ue,version:_e,expiresAt:re,metadataFlags:oe}=F,ge;ue===null&&!_&&_e+Oce<Date.now()?ge=El(i,F,_e):re!=null&&W(re,_e,oe,ue)&&(ge=ve.evict(he,ue,_e),J++),ge&&(await U[N],U[N]=ge.catch(me=>{Fe.default.error?.("Cleanup error",me)}),++N>=A&&(N=0)),await pc()}Fe.default.debug?.(`Finished cleanup scan for ${s}, evicted ${J} entries`)}catch(J){Fe.default.warn?.(`Error in cleanup scan for ${s}:`,J)}T(void 0),Ir=0}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");B(O)}):void 0}a($a,"scheduleCleanup");function pm(){Y=l?.addDeleteRemovalCallback(n,i,(K,g)=>{i.remove(K,g)})}a(pm,"addDeleteRemoval");function u_(){(0,kl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Jc){Jc=!0;try{let K=z.name,g=r[K];if(!g)throw new Error(`expiresAt attribute ${z} must be indexed`);for(let T of g.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of g.getValues(T)){let P=i.getEntry(C);P?.value?P.value[K]<Date.now()&&ve.evict(C,P.value,P.version):i.ifVersion(C,P?.version,()=>g.remove(T,C))}await pc()}}catch(K){Fe.default.error?.("Error in evicting old records",K)}finally{Jc=!1}}},Cce).unref()}a(u_,"runRecordExpirationEviction");function Va(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let g=server.shards?.get?.(K);if(g)return Fe.default.trace?.(`Shard ${K} mapped to ${g.map(T=>T.name).join(", ")}`),g.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(Va,"residencyFromFunction");function Qc(K){if(K){let g=K.join(","),T=d.get([Symbol.for("residency_by_set"),g]);return T||(d.put([Symbol.for("residency_by_set"),g],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}a(Qc,"getResidencyId");function Mu(K,g){let T=xA(K,i.rootStore);if(T){let C=g;return C?async()=>{await C(),await T}:()=>T}return g}a(Mu,"preCommitBlobsForRecordBefore")}function YN(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 xq(){}function TS(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 SS(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return SS(+e);case"Float":return e==="null"?null:SS(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return(0,Cd.autoCastBooleanStrict)(e);case"Date":if(isNaN(e)){if(e==="null")return null;Mce.test(e)||(e+="Z");let n=new Date(e);return SS(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Cd.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function SS(e){if(isNaN(e))throw new SyntaxError;return e}function Bq(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 Gs(e,t,r){return e?.then?e.then(t,r):t(e)}function Fq(e){return e!=null}function qs(e){try{return JSON.stringify(e)}catch{return e}}function Uce(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var hc,Wp,kq,Hq,Hl,dt,jp,zp,Fe,Gl,kl,Cd,WN,Gq,Ace,Ice,wce,Nce,Cce,Oce,Dq,Pce,vq,Lce,Fn,_l,Dce,Mq,Uq,vce,wUe,Mce,pc,Rg=se(()=>{G();hc=require("lmdb"),Wp=b(Un()),kq=b(require("lodash")),Hq=b(Om());zi();Lm();Hl=b(fe());AI();dt=b(Ee()),jp=b(zo()),zp=b(ls());Oe();yg();Fe=b(ir());Dw();ja();Gl=require("ordered-binary"),kl=b(st());$i();Cd=b(ae());fl();is();F_();Yp();WN=b(require("node:fs"));ss();eg();Gq=b(Q());KN();({sortBy:Ace}=kq.default),{validateAttribute:Ice}=Hq.default,wce=new Uint8Array(9);wce[8]=192;Nce=1/0,Cce=6e4,Oce=864e5;Hl.initSync();Dq=Hl.get(x.STORAGE_PREFETCHWRITES),Pce=1e4,vq=1,Lce=2,Fn=1,_l=8,Dce=Buffer.allocUnsafeSlow(8192),Mq=1978,Uq=100,vce={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},wUe=(0,Cd.convertToMS)(Hl.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(yS,"makeTable");a(YN,"attributesAsObject");a(xq,"noop");Mce=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(TS,"coerceType");a(SS,"rejectNaN");a(Bq,"isDescendantId");pc=a(()=>new Promise(setImmediate),"rest");a(Gs,"when");a(Fq,"exists");a(qs,"stringify");a(Uce,"hasOtherProcesses")});function RS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,o=t[s]||0,c=i-o;r+=c*c}return r}function bS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let o=0;o<i;o++){let c=e[o]||0,l=t[o]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var $q=se(()=>{a(RS,"euclideanDistance");a(bS,"cosineDistance")});var Vq,Kq,Pd,uo,Od,xce,Bce,AS,Yq=se(()=>{$q();Vq=require("msgpackr"),Kq=b(ir()),Pd=b(Ee()),uo=(0,Kq.loggerWithTag)("HNSW"),Od=Symbol.for("entryPoint"),xce=Symbol.for("key"),Bce=10,AS=class{static{a(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=Vq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?RS:bS,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"?[xce,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let o=new Map,c,l=this.indexStore.get(Od);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f==null){let E=Math.floor(-Math.log(Math.random())*this.mL),_={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)_[R]=[];if(this.indexStore.put(i,_),typeof i!="number")throw new Error("Invalid nodeId: "+i);uo.debug?.("setting entry point to",i),this.indexStore.put(Od,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Bce),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);uo.debug?.("setting entry point to",i),this.indexStore.put(Od,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let _=this.searchLayer(r,l,f,this.efConstruction,E);_=_.slice(0,this.M<<1),_.length===0&&E===0&&uo.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<_.length;S++){let{id:y,distance:w,node:I}=_[S];if(y===i)continue;let H=[];if(this.optimizeRouting){let k=!1,z=I[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let ce=0;ce<z?.length;ce++){let{id:de,distance:te}=z[ce],Se=1+this.optimizeRouting*(1+.5*ce/this.M);for(let Ne=0;Ne<R.length;Ne++){let{id:Ke,distance:$e}=R[Ne];if(Ke===de){w*Y>$e+te?k=!0:te*Se>w+$e&&(H.push({fromId:Ke,toId:y}),H.push({fromId:y,toId:Ke}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:w});for(let{fromId:k,toId:z}of H){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let ce=0;ce<Y[E].length;ce++)if(Y[E][ce].id===z){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(ce,1);break}}let X=c[E],q=X?.find(({id:k})=>k===y);if(q){let k=X?.indexOf(q);X.copied||(X=[...X],X.copied=!0,c[E]=X),X.splice(k,1)}else this.addConnection(y,d(y,I),i,E,w,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m]?.[0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(Od);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);uo.debug?.("setting entry point to",l),this.indexStore.put(Od,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));if(h)for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:_})=>_!==i),h[E]?.length===0&&(uo.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=o.get(f);return!p&&m&&(p={...m},o.set(f,p)),p}a(d,"updateNode");for(let[f,m]of o)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(Od);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,o=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=o(t,h.vector);if(E<f||u.length<s){let _={id:p,distance:E,node:h};l.push(_),u.push(_)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let o=0;switch(i){case"lt":case"le":o=r;case"sort":break;default:throw new Pd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Pd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=bS;else if(s==="euclidean")c=RS;else{if(s)throw new Pd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Pd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Pd.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return o&&(d=d.filter(f=>f.distance<o)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let o=this.indexStore.get(i);if(!o){uo.info?.("could not find neighbor node",o);continue}o[n]?.find(({id:l})=>l==t)||uo.info?.("asymmetry detected",o[n])}n++}}addConnection(t,r,n,s,i,o){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){uo.debug?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=o(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=o(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&uo.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?uo.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let o=s.shift(),c=this.indexStore.get(o);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let o=this.distance;s.type&&(o=s.distance==="euclidean"?RS:bS);let c=o(s.target,t);return i.set(n,c),c}return t}}});var jN,Wq=se(()=>{Yq();jN={HNSW:AS}});var ft={};ye(ft,{NON_REPLICATING_SYSTEM_TABLES:()=>IS,database:()=>md,databaseEnvs:()=>ea,databases:()=>Me,dropDatabase:()=>Bw,dropTableMeta:()=>$ce,getDatabases:()=>lt,getDefaultCompression:()=>DS,getTables:()=>kce,onRemovedDB:()=>rh,onUpdatedTable:()=>ql,readMetaDb:()=>Jp,resetDatabases:()=>Ud,table:()=>ze,tables:()=>yn});function th(e,t){let r=PS.OpenDBIObject??PS.default.OpenDBIObject;return new r(e,t)}function kce(){return OS||lt(),yn||{}}function lt(){if(OS)return Me;OS=!0,vd=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,Ht.join)((0,Zt.getHdbBasePath)(),el),t=(0,Zt.get)(x.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(x.STORAGE_PATH)||e&&((0,gs.existsSync)(e)?e:(0,Ht.join)((0,Zt.getHdbBasePath)(),__)),!!e){if((0,gs.existsSync)(e))for(let r of(0,gs.readdirSync)(e,{withFileTypes:!0})){let n=(0,Ht.basename)(r.name,".mdb");r.isFile()&&(0,Ht.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Jp((0,Ht.join)(e,r.name),null,n)}if((0,gs.existsSync)((0,Dd.getBaseSchemaPath)())){for(let r of(0,gs.readdirSync)((0,Dd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ht.join)((0,Dd.getBaseSchemaPath)(),r.name),s=(0,Ht.join)((0,Dd.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,gs.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Ht.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ht.join)(s,i.name);Jp((0,Ht.join)(n,i.name),(0,Ht.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,gs.existsSync)(s))for(let o of(0,gs.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Ht.extname)(o.name).toLowerCase()===".mdb"&&Jp((0,Ht.join)(s,o.name),(0,Ht.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,Ht.join)(c.path,(0,Ht.basename)(o+".mdb"));(0,gs.existsSync)(l)&&Jp(l,o,r,null,!0)}}for(let r in Me){let n=vd.get(r);if(n){let s=Me[r];r.includes("delete")&&Or.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Or.trace(`delete table class ${i}`),delete s[i])}else if(delete Me[r],r==="data"){for(let s in yn)delete yn[s];delete yn[LS]}}if((0,Zt.get)(x.ANALYTICS_REPLICATE)===!1?IS.includes("hdb_analytics")||IS.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let r of IS)Me.system[r]&&(Me.system[r].replicate=!1);return vd=null,Me}}function Ud(){OS=!1;for(let[,e]of ea)e.needsDeletion=!0;lt();for(let[e,t]of ea)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),ea.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],Xp.forEach(i=>i(t.databaseName));break}}return Me}function Jp(e,t,r=QN,n,s){let i=new zN.default(e,!1);try{let o=ea.get(e);o?o.needsDeletion=!1:(o=(0,Md.open)(i),ea.set(e,o));let c=new th(!1),l=o.dbisDb||(o.dbisDb=o.openDB(wS.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,gs.existsSync)(n)&&(i.path=n,u=(0,Md.open)(i),u.isLegacy=!0):u=ng(o));let d=Xq(r),f=d[LS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,_]=p.toString().split("/");_===""?_=h.name:_||(_=E,E=t,h.name||(h.name=_,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(_==null||h.is_hash_attribute)&&(R.primary=h),_!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:_}=h;if(!_){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){_=te;break}if(!_){Or.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],w,I,H=typeof _.audit=="boolean"?_.audit:(0,Zt.get)(x.LOGGING_AUDITLOG),X=_.trackDeletes,q=_.expiration,k=_.eviction,z=_.sealed,Y=_.splitSegments,ce=_.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{w=_.tableId,w?w>=(l.get(Ld)||0)&&(l.putSync(Ld,w+1),Or.info(`Updating next table id (it was out of sync) to ${w+1} for ${p}`)):(_.tableId=w=l.get(Ld),w||(w=1),Or.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(Ld,w+1),l.putSync(_.key,_));let te=new th(!_.is_hash_attribute,_.is_hash_attribute);if(te.compression=_.compression,te.compression){let Se=(0,Zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||Qq;te.compression.threshold=Se}I=_g(o.openDB(_.key,te),o),o.databaseName=r,I.tableId=w}let de;for(let te of E){te.attribute=te.name;try{if(!te.is_hash_attribute&&(te.indexed||te.attribute&&!te.name)){if(!S[te.name]){let Ne=e$(te.key,o,te);S[te.name]=Ne,S[te.name].indexNulls=te.indexNulls}let Se=y.find(Ne=>Ne.name===te.name);Se?y.splice(y.indexOf(Se),1,te):y.push(te),de=!0}}catch(Se){Or.error("Error trying to update attribute",te,y,S,Se)}}for(let te of y)if(!E.find(Ne=>Ne.name===te.name)){if(te.is_hash_attribute){Or.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),de=!0)}if(R)de&&(R.schemaVersion++,R.updatedAttributes());else{R=Zq(d,p,yS({primaryStore:I,auditStore:u,audit:H,sealed:z,splitSegments:Y,replicate:ce,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:X,tableName:p,tableId:w,primaryKey:_.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:_.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of Qp)te(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Xq(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=yn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),vd&&!vd.has(e)){let r=new Set;t[LS]=r,vd.set(e,r)}return t}function Zq(e,t,r){return e[t]=r,r}function md({database:e,table:t}){e||(e=QN),lt();let r=Xq(e),n=(0,Ht.join)((0,Zt.getHdbBasePath)(),el),s=(0,Zt.get)(x.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Zt.get)(x.STORAGE_PATH)||((0,gs.existsSync)(n)?n:(0,Ht.join)((0,Zt.getHdbBasePath)(),__));let o=(0,Ht.join)(n,(i?t:e)+".mdb"),c=ea.get(o);if(!c||c.status==="closed"){let l=new zN.default(o,!1);c=(0,Md.open)(l),ea.set(o,c)}return c.auditStore||(c.auditStore=ng(c)),c}async function Bw(e){if(!Me[e])throw new Error("Schema does not exist");let t=Me[e],r;for(let n in t)r=t[n].primaryStore.rootStore,ea.delete(r.path),r.status==="open"&&(await r.close(),await Zp.remove(r.path));if(r||(r=md({database:e,table:null}),r.status==="open"&&(await r.close(),await Zp.remove(r.path))),e==="data"){for(let n in yn)delete yn[n];delete yn[LS]}delete Me[e],Xp.forEach(n=>n(e)),await UA(r)}function e$(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&jN[r.indexed.type]?.useObjectStore,s=new th(!n,n),i=t.openDB(e,s);if(r.indexed.type){let o=jN[r.indexed.type];o?i.customIndex=new o(i,r.indexed):Or.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=QN);let h=md({database:r,table:t}),E=Me[r];Or.trace(`Defining ${t} in ${r}`);let _=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let w=new th(!1);for(let Y of o)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let I,H;if(_){if(R=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=_.splitSegments),_.attributes.splice(0,_.attributes.length,...o)}else{let Y=h.auditStore;S=o.find(Se=>Se.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=DS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Zt.get)(x.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Or.trace(`${t} table loading, opening primary store`);let ce=new th(!1,!0);ce.compression=S.compression;let de=t+"/";if(y=h.dbisDb=h.openDB(wS.INTERNAL_DBIS_NAME,w),z(),y.get(de))return H&&H(),Ud(),ze(e);let te=_g(h.openDB(de,ce),h);h.databaseName=r,te.tableId=y.get(Ld),Or.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(Ld,te.tableId+1),S.tableId=te.tableId,_=Zq(E,t,yS({primaryStore:te,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:te.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:m,dbisDB:y})),_.schemaVersion=1,I=!0,y.put(de,S)}let X=_.indices;y=y||(h.dbisDb=h.openDB(wS.INTERNAL_DBIS_NAME,w)),_.dbisDB=y;let q=[];for(let{key:Y,value:ce}of y.getRange({start:!0})){let[de,te]=Y.toString().split("/");if(te===""&&(te=ce.name),te){if(de!==t)continue}else continue;let Se=o.find(Ke=>Ke.name===te),Ne=!Se?.indexed&&ce.indexed&&!ce.isPrimaryKey;if((!Se||Ne)&&(z(),I=!0,Se||y.remove(Y),Ne)){let Ke=_.indices[de];Ke&&q.push(Ke)}}let k=[];try{for(let Y of o||[]){if((Y.relationship||Y.computed)&&(I=!0,Y.relationship))continue;let ce=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:ce,configurable:!0});let de=y.get(ce);if(Y.isPrimaryKey){if(de=de||y.get(ce=t+"/")||{},c!==void 0&&c!==_.audit||l!==void 0&&l!==_.sealed||d!==void 0&&d!==_.replicate||(+n||void 0)!==(+de.expiration||void 0)||(+s||void 0)!==(+de.eviction||void 0)||Y.type!==de.type){let Se={...de};typeof c=="boolean"&&(c&&_.enableAuditing(c),Se.audit=c),n&&(Se.expiration=+n),s&&(Se.eviction=+s),l!==void 0&&(Se.sealed=l),d!==void 0&&(Se.replicate=d),Y.type&&(Se.type=Y.type),I=!0,z(),y.put(ce,Se)}continue}de?.attribute&&!de.name&&(de.indexed=!0);let te=!de||de.type!==Y.type||JSON.stringify(de.indexed)!==JSON.stringify(Y.indexed)||de.nullable!==Y.nullable||de.version!==Y.version||de.enumerable!==Y.enumerable||JSON.stringify(de.properties)!==JSON.stringify(Y.properties)||JSON.stringify(de.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let Se=e$(ce,h,Y);(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<eh.workerData?.restartNumber)&&(I=!0,z(),de=y.get(ce),(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<eh.workerData?.restartNumber)&&(I=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),_.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=de?.lastIndexedKey??void 0,Y.indexingPID=process.pid,Se.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:Se}),k.push(Y))),y.put(ce,Y)),de?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),Se.indexNulls=Y.indexNulls,X[Y.name]=Se}else te&&(I=!0,z(),y.put(ce,Y))}}finally{H&&H()}if(I&&(_.schemaVersion++,_.updatedAttributes()),Or.trace(`${t} table loading, running index`),k.length>0||q.length>0?_.indexingOperation=qce(_,k,q):I&&NS.signalSchemaChange(new CS.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=p,I)for(let Y of Qp)Y(_,p!=="cluster");return(n||s||i)&&_.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Or.trace(`${t} table loaded`),_;function z(){H||h.transactionSync(()=>({then(Y){H=Y}}))}a(z,"startTxn")}async function qce(e,t,r){try{Or.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await NS.signalSchemaChange(new CS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,Md.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],_=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[_]);if(R.customIndex){R.customIndex.index(f,y);continue}let w=(0,jq.getIndexedValues)(y,R.indexNulls);if(w)for(let I=0,H=w.length;I<H;I++)R.put(w[I],f)}catch(S){o[_]||(o[_]=!0,Or.error(`Error indexing attribute ${_}`,S))}}}),s.then(()=>d--,h=>{d--,Or.error(h)}),eh.workerData&&eh.workerData.restartNumber!==Jq.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>Hce?await s:d>Gce&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await NS.signalSchemaChange(new CS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Or.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Or.error("Error in indexing",n)}}function $ce({table:e,database:t}){let r=md({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 ql(e){return Qp.push(e),{remove(){let t=Qp.indexOf(e);t>-1&&Qp.splice(t,1)}}}function rh(e){return Xp.push(e),{remove(){let t=Xp.indexOf(e);t>-1&&Xp.splice(t,1)}}}function DS(){let e=(0,Zt.get)(x.STORAGE_COMPRESSION),t=(0,Zt.get)(x.STORAGE_COMPRESSION_DICTIONARY),r=(0,Zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||Qq,n={startingOffset:32};return t&&(n.dictionary=Zp.readFileSync(t)),r&&(n.threshold=r),e&&n}var Zt,wS,Md,Ht,gs,Dd,zN,Zp,JN,jq,NS,CS,eh,zq,Jq,PS,Fce,Or,QN,LS,Qq,IS,yn,Me,Ld,Qp,Xp,OS,ea,vd,Hce,Gce,Oe=se(()=>{Zt=b(fe()),wS=b(Jt()),Md=require("lmdb"),Ht=require("path"),gs=require("fs"),Dd=b(Rt());Rg();zN=b(ip());G();Zp=b(require("fs-extra")),JN=b(ai()),jq=b(Un()),NS=b(zo()),CS=b(ls()),eh=require("worker_threads"),zq=b(Q()),Jq=b(st());$i();fl();ss();Wq();PS=b(sp()),{forComponent:Fce}=zq.default;a(th,"OpenDBIObject");Or=Fce("storage"),QN="data",LS=Symbol("defined-tables"),Qq=((0,Zt.get)(x.STORAGE_PAGESIZE)||4096)-60;(0,Zt.initSync)();IS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],yn=Object.create(null),Me=Object.create(null);(0,JN._assignPackageExport)("databases",Me);(0,JN._assignPackageExport)("tables",yn);Ld=Symbol.for("next-table-id"),Qp=[],Xp=[],ea=new Map;a(kce,"getTables");a(lt,"getDatabases");a(Ud,"resetDatabases");a(Jp,"readMetaDb");a(Xq,"ensureDB");a(Zq,"setTable");a(md,"database");a(Bw,"dropDatabase");a(e$,"openIndex");a(ze,"table");Hce=1e3,Gce=10;a(qce,"runIndexing");a($ce,"dropTableMeta");a(ql,"onUpdatedTable");a(rh,"onRemovedDB");a(DS,"getDefaultCompression")});var eC={};ye(eC,{loadGQLSchema:()=>Yce,start:()=>ZN,startOnMainThread:()=>Kce});function ZN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=o(new c(r.toString(),s)),m=new Map,p=[],h;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(q){if(q.kind==="NonNullType"){let Y=H(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:H(q.type)};let z={type:q.name?.value};return Object.defineProperty(z,"location",{value:q.loc.startToken}),z};a(H,"getProperty");let S=R.name.value,y=[],w={table:null,database:null,properties:y};m.set(S,w),i.allTypes.set(S,w);for(let q of R.directives){if(q.name.value==="table"){for(let z of q.arguments)w[z.name.value]=z.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=S),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,p.push(w)}if(q.name.value==="sealed"&&(w.sealed=!0),q.name.value==="splitSegments"&&(w.splitSegments=!0),q.name.value==="replicate"&&(w.replicate=!0),q.name.value==="export"){w.export=!0;for(let z of q.arguments)typeof w.export!="object"&&(w.export={}),w.export[z.name.value]=z.value.value}}let I=!1,X={};for(let q of R.fields){let k=H(q.type);k.name=q.name.value,y.push(k),X[k.name]=void 0;for(let z of q.directives){let Y=z.name.value;if(Y==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",z.loc):(k.isPrimaryKey=!0,I=!0);else if(Y==="indexed"){let ce={};for(let de of z.arguments||[])ce[de.name.value]=de.value.value;k.indexed=ce}else if(Y==="computed"){for(let ce of z.arguments||[])if(ce.name.value==="from"){let de=ce.value.value;k.computed={from:_(de,ce,X)},k.version==null&&(k.version=de)}else ce.name.value==="version"&&(k.version=ce.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let ce={};for(let de of z.arguments)ce[de.name.value]=de.value.value;k.relationship=ce}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="enumerable")k.enumerable=!0;else if(Y==="allow"){let ce=k.authorizedRoles=[];for(let de of z.arguments)de.name.value==="role"&&ce.push(de.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,z.loc)}}w.type=S,S==="Query"&&(h=w)}function E(R){let S=m.get(R.type);S?(Object.defineProperty(R,"properties",{value:S.properties}),Object.defineProperty(R,"definition",{value:S})):R.type==="array"?E(R.elements):Vce.includes(R.type)||(0,r$.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(E,"connectPropertyType");for(let R of m.values())for(let S of R.properties)E(S);for(let R of p)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,XN.dirname)(n),R.tableClass):i.set((0,XN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function _(R,S,y){return new t$.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(_,"createComputedFrom")}}var XN,t$,r$,Vce,Kce,Yce,n$=se(()=>{XN=require("path"),t$=require("node:vm");Oe();r$=b(st());tc();Vce=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives||(server.knownGraphQLDirectives=[]);server.knownGraphQLDirectives.push("table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow","enumerable");a(ZN,"start");Kce=ZN,Yce=a(e=>ZN({ensureTable:ze}).handleFile(e,null,null,new nd),"loadGQLSchema")});var rC={};ye(rC,{start:()=>tle});function Wce(e){if(e.kind!==Ge.Kind.OPERATION_DEFINITION&&e.kind!==Ge.Kind.FRAGMENT_DEFINITION)throw new Vr(`Unexpected non-executable definition type ${e.kind}.`)}function s$(e){if(typeof e!="object"||e===null)throw new fo("Request body must be an object.");if(!("query"in e))throw new fo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new fo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new fo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new fo("Request body `operationName` field must be a string.")}function tC(e){return parseInt(e.value,10)}function o$(e){return parseFloat(e.value)}function a$(e,t,r){let n=r.get(e.name.value);return c$(n)?l$(n,t):{attribute:t,value:n}}function c$(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function l$(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],c$(n)?l$(n,t):{attribute:t,value:n}))}function jce(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Ge.Kind.NULL:return{attribute:t,value:null};case Ge.Kind.INT:return{attribute:t,value:tC(e.value)};case Ge.Kind.FLOAT:return{attribute:t,value:o$(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:t,value:e.value.value};case Ge.Kind.VARIABLE:return a$(e.value,t,r);case Ge.Kind.OBJECT:return u$(e.value,t,r);case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new Vr(`Value type, ${e.value.kind}, is not supported.`)}}function u$(e,t,r){return e.fields.flatMap(n=>jce(n,t,r))}function zce(e,t){switch(e.value.kind){case Ge.Kind.NULL:return{attribute:e.name.value,value:null};case Ge.Kind.INT:return{attribute:e.name.value,value:tC(e.value)};case Ge.Kind.FLOAT:return{attribute:e.name.value,value:o$(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Ge.Kind.VARIABLE:return a$(e.value,e.name.value,t);case Ge.Kind.OBJECT:return u$(e.value,[e.name.value],t);case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new Vr(`Argument type, ${e.value.kind}, is not supported.`)}}function Jce(e,t){return e.flatMap(r=>zce(r,t))}function vS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Ge.Kind.FIELD:return r;case Ge.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Vr(`Fragment \`${n}\` not found.`);return vS(s.selectionSet,t)}case Ge.Kind.INLINE_FRAGMENT:return vS(r.selectionSet,t)}})}function d$(e,t){return vS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:d$(r.selectionSet,t)}:r.name.value)}async function Qce(e,t,r,n){let s=xs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Vr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:d$(e.selectionSet,r),conditions:Jce(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function f$(e){switch(e.kind){case Ge.Kind.NULL:return null;case Ge.Kind.INT:return tC(e);case Ge.Kind.FLOAT:return parseFloat(e.value);case Ge.Kind.STRING:case Ge.Kind.BOOLEAN:return e.value;case Ge.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:f$(r.value),...t}),{});case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new Vr(`Value type, ${e.kind}, is not supported.`)}}function Xce(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=f$(n.defaultValue)),n.type.kind===Ge.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Vr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Zce(e,t,r,n){if(e.operation===Ge.OperationTypeNode.SUBSCRIPTION)throw new Vr("Subscriptions are not supported.");if(e.operation===Ge.OperationTypeNode.MUTATION)throw new Vr("Mutations are not supported yet.");let s=Xce(e.variableDefinitions,t),i=await Promise.all(vS(e.selectionSet,r).map(c=>Qce(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function i$({query:e,variables:t={},operationName:r},n){let s=Ge.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(Wce(u),u.kind===Ge.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Vr("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 Vr(`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 Vr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Vr(`Operation \`${r}\` not found.`);let l=await Zce(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function ele(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 s$(r),i$(r,e)}case"POST":{let r=await Ho(e.headers.get("content-type"),!0)(e._nodeRequest);return s$(r),i$(r,e)}default:throw new fo("Method Not Allowed",405,{Allow:"GET, POST"})}}function tle(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await ele(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof fo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Ge.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Vr)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 fo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Ge.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Vr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var Ge,Vr,fo,m$=se(()=>{Ge=b(require("graphql"));Go();tc();a(Wce,"assertExecutableDefinitionNode");a(s$,"assertRequestParams");a(tC,"processIntValueNode");a(o$,"processFloatValueNode");a(a$,"processVariableNode");a(c$,"isObject");a(l$,"transformObjectIntoQueryCondition");a(jce,"processObjectFieldNode");a(u$,"processObjectValueNode");a(zce,"processArgumentNode");a(Jce,"buildConditionsQuery");a(vS,"fillInFragments");a(d$,"buildSelectQuery");a(Qce,"processFieldNode");a(f$,"processConstValueNode");a(Xce,"resolveVariables");a(Zce,"executeOperation");a(i$,"resolver");Vr=class extends Error{static{a(this,"GraphQLQueryingError")}},fo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(ele,"graphqlQueryingHandler");a(tle,"start")});var S$=M((jUe,g$)=>{var xd=require("validate.js"),h$=mt(),Bd=(G(),v(j)),{handleHDBError:rle,hdbErrors:nle}=Ee(),{HDB_ERROR_MSGS:cr,HTTP_STATUS_CODES:sle}=nle,nC=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),ile={STRUCTURE_USER:"structure_user"},p$=Object.values(Bd.ROLE_TYPES_ENUM),ole="attribute_permissions",ale="attribute_name",{PERMS_CRUD_ENUM:Fd}=Bd,cle=[ole,...Object.values(Fd)],E$=[Fd.READ,Fd.INSERT,Fd.UPDATE],lle=[ale,...E$];function ule(e){let t=nC();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,_$(e,t)}a(ule,"addRoleValidation");function dle(e){let t=nC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,_$(e,t)}a(dle,"alterRoleValidation");function fle(e){let t=nC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,h$.validateObject(e,t)}a(fle,"dropRoleValidation");var mle=["operation","role","id","permission","hdb_user","access"];function _$(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)mle.includes(n[o])||s.push(n[o]);s.length>0&&Er(cr.INVALID_ROLE_JSON_KEYS(s),r);let i=h$.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Er(o,r)}),e.permission){let o=ple(e);o&&Er(o,r),p$.forEach(c=>{e.permission[c]&&!xd.isBoolean(e.permission[c])&&Er(cr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(p$.indexOf(o)<0){if(o===ile.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||Er(cr.SCHEMA_NOT_FOUND(f),r)}continue}Er(cr.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Er(cr.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){Er(cr.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{cle.includes(d)||Er(cr.INVALID_PERM_KEY(d),r,o,l)}),Object.values(Fd).forEach(d=>{xd.isDefined(u[d])?xd.isBoolean(u[d])||Er(cr.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):Er(cr.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){Er(cr.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){Er(cr.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!lle.includes(E)&&E!==Fd.DELETE&&Er(cr.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!xd.isDefined(p.attribute_name)){Er(cr.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){Er(cr.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}E$.forEach(E=>{xd.isDefined(p[E])?xd.isBoolean(p[E])||Er(cr.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):Er(cr.ATTR_PERM_MISSING(E,h),r,o,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${o}.${l}`;Er(cr.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return hle(r)}a(_$,"customValidate");g$.exports={addRoleValidation:ule,alterRoleValidation:dle,dropRoleValidation:fle};function ple(e){let{operation:t,permission:r}=e;if(t===Bd.OPERATIONS_ENUM.ADD_ROLE||t===Bd.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 cr.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Bd.ROLE_TYPES_ENUM.SUPER_USER:Bd.ROLE_TYPES_ENUM.CLUSTER_USER;return cr.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(ple,"validateNoSUPerms");function hle(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:cr.ROLE_PERMS_ERROR,...e};return rle(new Error,n,sle.BAD_REQUEST)}else return null}a(hle,"generateRolePermResponse");function Er(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(Er,"addPermError")});var sh=M((QUe,b$)=>{"use strict";var T$=Vn(),y$=gn(),Ele=vl(),iC=S$(),oC=zo(),JUe=require("uuid").v4,_le=require("util"),MS=(G(),v(j)),gle=ae(),aC=y$.searchByValue,Sle=y$.searchByHash,Tle=_le.promisify(Ele.delete),yle=di(),Rle=dd(),{hdbErrors:ble,handleHDBError:$l}=Ee(),{HDB_ERROR_MSGS:R$,HTTP_STATUS_CODES:nh}=ble,{UserEventMsg:cC}=ls();b$.exports={addRole:Ale,alterRole:Ile,dropRole:wle,listRoles:Nle};function sC(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(sC,"scrubRoleDetails");async function Ale(e){let t=iC.addRoleValidation(e);if(t)throw t;e=sC(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await aC(r)||[])}catch(i){throw $l(i)}if(n&&n.length>0)throw $l(new Error,R$.ROLE_ALREADY_EXISTS(e.role),nh.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await T$.insert(s),oC.signalUserChange(new cC(process.pid)),e=sC(e),e}a(Ale,"addRole");async function Ile(e){let t=iC.alterRoleValidation(e);if(t)throw t;e=sC(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await T$.update(r)}catch(s){throw $l(s)}if(n&&n?.message==="updated 0 of 1 records")throw $l(new Error,"Invalid role id",nh.BAD_REQUEST,void 0,void 0,!0);return await oC.signalUserChange(new cC(process.pid)),e}a(Ile,"alterRole");async function wle(e){let t=iC.dropRoleValidation(e);if(t)throw $l(new Error,t,nh.BAD_REQUEST,void 0,void 0,!0);let r=new Rle(MS.SYSTEM_SCHEMA_NAME,MS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Sle(r));if(n.length===0)throw $l(new Error,R$.ROLE_NOT_FOUND,nh.NOT_FOUND,void 0,void 0,!0);let s=new yle(MS.SYSTEM_SCHEMA_NAME,MS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await aC(s)),o=!1;if(gle.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw $l(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,nh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Tle(c),oC.signalUserChange(new cC(process.pid)),`${n[0].role} successfully deleted`}a(wle,"dropRole");async function Nle(){return aC({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Nle,"listRoles")});var lC={};ye(lC,{start:()=>w$,startOnMainThread:()=>Ple});function w$({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,A$.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(Cle.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Ole(i)}}}async function Ole(e){let t=lt().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,I$.isEqual)(i,e)?void 0:(e.id=r.id,(0,US.alterRole)(e))}return(0,US.addRole)(e)}var US,A$,I$,Cle,Ple,N$=se(()=>{Oe();US=b(sh()),A$=require("yaml"),I$=require("lodash"),Cle=["super_user","cluster_user","structure_user"];a(w$,"start");a(Ole,"ensureRole");Ple=w$});async function xS(e){let t=(0,P$.pathToFileURL)(e).toString();if(Lle)return ih||(ih=Dle(Mle)),(await(await ih).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Dle(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ih=new Compartment({console,Math,Date,fetch:vle,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,O$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Xt,s.tables=yn,s.databases=Me}};let n=await(0,C$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),ih}function vle(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 Mle(){return{Resource:Xt,tables:yn}}var C$,O$,P$,Lle,ih,uC=se(()=>{zi();Oe();C$=require("fs/promises"),O$=require("path"),P$=require("url"),Lle=!1;a(xS,"secureImport");a(Dle,"getCompartment");a(vle,"secureOnlyFetch");a(Mle,"getGlobalVars")});var dC={};ye(dC,{ResourceLoadError:()=>BS,handleApplication:()=>Ule,suppressHandleApplicationWarning:()=>xle});function D$(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Ule(e){e.handleEntry(a(async function(r){if(r.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${r.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(r.eventType!=="add"){e.requestRestart();return}try{let n=await xS(r.absolutePath),s=(0,L$.dirname)(r.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");D$(n.default)&&(e.resources.set(s,n.default),e.logger.debug(`Registered root resource: ${s}`)),v$(e,n,s)}catch(n){throw new BS(r.absolutePath,n)}},"handleResourceEntry"))}function v$(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;D$(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&v$(e,s,i)}}var L$,BS,xle,M$=se(()=>{uC();L$=require("path");a(D$,"isResource");BS=class extends Error{static{a(this,"ResourceLoadError")}filePath;cause;constructor(t,r){super(`Failed to load resource module ${t}${r?`: ${r.message}`:""}`),this.name="ResourceLoadError",this.filePath=t,this.cause=r}};a(Ule,"handleApplication");a(v$,"recurseForResources");xle=!0});var mC={};ye(mC,{start:()=>Ble});function Ble({resources:e}){e.set("login",fC),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var fC,U$=se(()=>{zi();a(Ble,"start");fC=class extends Xt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});function kS(e,t){let r={openapi:Fle,info:{title:"HarperDB HTTP REST interface",version:G$.packageJson.version},servers:[{description:"REST API",url:t}],paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},n=[{basicAuth:[],bearerAuth:[]}],s=a(i=>{if(i.type&&!r.components.schemas[i.type]){r.components.schemas[i.type]={};let o={},c=[];for(let l of i.properties)FS[l.type]?o[l.name]=new hC(FS[l.type],l.type):l.properties?(o[l.name]=new $$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new qle(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new H$(o,!i.sealed,c)}},"includeDefinitionInSchema");for(let[,i]of e){if(!i.path||i.Resource.isError)continue;let{path:o}=i,c=o.split("/").pop(),{attributes:l,sealed:u}=i.Resource,{prototype:d,primaryKey:f="id"}=i.Resource;if(!l&&e.allTypes.has(i.path)){let k=e.allTypes.get(i.path);u=k.sealed,l=k.properties}if(!f)continue;let m={},p=[],h=[];if(l)for(let{type:k,name:z,elements:Y,relationship:ce,definition:de,nullable:te}of l){let Se=de??Y?.definition;Se&&s(Se),te===!1&&h.push(z),ce?k==="array"?m[z]={type:"array",items:{$ref:$s+Y.type}}:m[z]={$ref:$s+k}:Se?k==="array"?m[z]={type:"array",items:{$ref:$s+Se.type}}:m[z]={$ref:$s+Se.type}:k==="array"?Y.type==="Any"?m[z]={type:"array",items:{format:Y.type}}:m[z]={type:"array",items:new hC(FS[Y.type],Y.type)}:k==="Any"?m[z]={format:k}:m[z]=new hC(FS[k],k),p.push(new EC(z,"query",m[z]))}let E=Object.keys(m),_=new EC(f,"path",{type:"string",format:"ID"});_.required=!0,_.description="primary key of record";let R=new EC("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new H$(m,!u,h);let S=d.post!==Resource.prototype.post||d.update,y=typeof d.put=="function",w=typeof d.get=="function",I=typeof d.delete=="function",H=typeof d.patch=="function",X=`/${o}/`;r.paths[X]||(r.paths[X]={}),S&&(r.paths[X].post=new kle(c,n,{200:new kd({$ref:$s+c},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),r.paths[X].options=new x$(p,n,{200:new B$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(r.paths[X].get=new pC(p,n,{200:new kd({type:"array",items:{$ref:$s+c}})},"search for records by the specified property name and value pairs")),I&&(r.paths[X].delete=new k$(p,n,"delete all the records that match the provided query",{204:new F$}));let q="/"+o+"/{"+f+"}";if(r.paths[q]||(r.paths[q]={}),r.paths[q].options=new x$(p,n,{200:new B$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(r.paths[q].get=new pC([_],n,{200:new kd({$ref:$s+c})},"retrieve a record by its primary key")),y&&(r.paths[q].put=new Hle([_],n,c,{200:new kd({$ref:$s+c})},"create or update the record with the URL path that maps to the record's primary key")),H&&(r.paths[q].patch=new Gle([_],n,c,{200:new kd({$ref:$s+c})},"patch the record with the URL path that maps to the record's primary key")),I&&(r.paths[q].delete=new k$([_],n,"delete a record with the given primary key",{204:new F$})),w&&R.schema.enum.length>0){let k=`/${o}/{${f}}.{property}`;r.paths[k]||(r.paths[k]={}),r.paths[k].get=new pC([_,R],n,{200:new kd({enum:E})},"used to retrieve the specified property of the specified record")}}for(let[,i]of e.allTypes)s(i),i.sealed&&r.components.schemas[i.type].additionalProperties&&(r.components.schemas[i.type].additionalProperties=!1);return r}function kle(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:$s+e}}}},this.security=t,this.responses=r}function pC(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function x$(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function B$(){this.description=q$,this.headers={},this.content={}}function kd(e,t){this.description=q$,this.content={"application/json":{schema:e}},this.headers=t}function F$(){this.description="successfully processed request, no content returned to client"}function Hle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:$s+r}}}},this.responses=n}function Gle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:$s+r}}}},this.responses=n}function k$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function H$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function hC(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function $$(e){this.$ref=`#/components/schemas/${e}`}function qle(e){this.type="array",this.items=new $$(e)}function EC(e,t,r){this.name=e,this.in=t,this.schema=r}var G$,Fle,FS,$s,q$,_C=se(()=>{G$=b(yt()),Fle="3.0.3",FS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},$s="#/components/schemas/",q$="successful operation";a(kS,"generateJsonApi");a(kle,"Post");a(pC,"Get");a(x$,"Options");a(B$,"ResponseOptions200");a(kd,"Response200");a(F$,"Response204");a(Hle,"Put");a(Gle,"Patch");a(k$,"Delete");a(H$,"ResourceSchema");a(hC,"Type");a($$,"Ref");a(qle,"ArrayRef");a(EC,"Parameter")});var K$={};ye(K$,{Request:()=>Ec,createReuseportFd:()=>HS});var V$,Ec,gC,SC,HS,oh=se(()=>{V$=require("os"),Ec=class{static{a(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new SC(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new gC(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get hostname(){return this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},gC=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},SC=class{static{a(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,V$.platform)()!="win32"&&(HS=require("node-unix-socket").createReuseportFd)});var qS={};ye(qS,{parseHeaderValue:()=>yC,start:()=>Kle});async function Vle(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Tg(e);let i=new Hs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==Y$){let _=GS.getMatch(o,n?"sse":"rest");if(!_)return t(e);e.handlerPath=_.path,c=new Us(_.relativeURL),c.async=!0,l=_.Resource}if(l?.isCaching){let _=r["cache-control"];if(_){let R=yC(_);for(let S of R)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let _=yC(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=_.length===1&&+_[0]>=0?+_[0]:_[0]==="*"?void 0:_}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Ho(r["content-type"],!0)(e.body,e.headers)}catch(_){throw new Hd.ClientError(_,400)}if(e.authorize=!0,o===Y$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return kS(GS,`${e.protocol}://${e.hostname}`);throw new Hd.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 Hd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Hd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,TC.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let _=Cq(f.headers,i);return f.headers!==_&&(f.headers=_),f.data!==void 0&&(f.body=Bm(f.data,e,f)),f}else if(isFinite(p)){$le[0]=p;let _=String.fromCharCode(34,(sn[0]&63)+62,(sn[0]>>6)+(sn[1]<<2&63)+62,(sn[1]>>4)+(sn[2]<<4&63)+62,(sn[2]>>2)+62,(sn[3]&63)+62,(sn[3]>>6)+(sn[4]<<2&63)+62,(sn[4]>>4)+(sn[5]<<4&63)+62,(sn[5]>>2)+62,(sn[6]&63)+62,(sn[6]>>6)+(sn[7]<<2&63)+62,34),R=r["if-none-match"];R&&_==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",_),TC.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=Bm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?_i.warn(o):_i.info(o):_i.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=Bm(o.contentType?o:z$(o),e,c),c}}function Kle(e){TC=e,e.includeExpensiveRecordCountEstimates&&(Ec.prototype.includeExpensiveRecordCountEstimates=!0),!W$&&(W$=!0,GS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Vle(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{ah++;let s=new ns;j$||(j$=!0,Zm(l=>{ah>0&&l.push({metric:"ws-connections",connections:ah,byThread:!0})}));let i;t.on("error",l=>{i=!0,_i.warn(l)});let o;t.on("message",a(function(u){o||(o=Ho(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);Ye(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{ah--,en(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=GS.getMatch(l,"ws");if(en(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ye(h=>({count:h.count,total:ah}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new Us(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await ko(p.value,r);t.send(h),Ye(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?_i.warn(l):_i.info(l):_i.error(l),t.close(Yle[l.statusCode]||1011,z$(l))}t.close()},e))}function yC(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var _i,Hd,z$,sn,$le,TC,Y$,W$,GS,j$,ah,Yle,J$=se(()=>{Go();is();_i=b(Q()),Hd=b(Ee());yg();ku();ja();Yp();_C();oh();bg();({errorToString:z$}=_i),sn=new Uint8Array(8),$le=new Float64Array(sn.buffer,0,1),TC={},Y$="openapi";a(Vle,"http");ah=0;a(Kle,"start");Yle={401:3e3,403:3003};a(yC,"parseHeaderValue")});var RC=M((bxe,X$)=>{var{recordAction:$S,recordActionBinary:Q$}=(is(),v(dg)),Wle=require("fastify-plugin"),jle=200;X$.exports=Wle(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),$S(o,"duration",u,f,d),Q$(s.raw.statusCode<400,"success",u,f,d),Q$(1,"response_"+s.raw.statusCode,u,f,d);let m=jle;i?.pipe?(i.on("data",_=>{m+=_.length}),i.on("end",()=>{$S(performance.now()-c,"transfer",u,f,d),$S(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,$S(m,"bytes-sent",u,f,d));let p=o.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var eV=M((Axe,Z$)=>{var zle=mt(),Jle={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Z$.exports=function(e){return zle.validateObject(e,Jle)}});var VS=M((Ixe,tV)=>{"use strict";var Qle=(G(),v(j)).OPERATIONS_ENUM,bC=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Qle.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};tV.exports=bC});var uh={};ye(uh,{createTokens:()=>IC,getJWTRSAKeys:()=>zS,refreshOperationToken:()=>wC,validateOperationToken:()=>NC,validateRefreshToken:()=>JS});async function zS(){if(KS)return KS;try{let e=ch.default.join(lh.default.getHdbBasePath(),Zb),t=await YS.default.readFile(ch.default.join(e,Tm.JWT_PASSPHRASE_NAME),"utf8"),r=await YS.default.readFile(ch.default.join(e,Tm.JWT_PRIVATE_KEY_NAME),"utf8");return KS={publicKey:await YS.default.readFile(ch.default.join(e,Tm.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},KS}catch(e){throw jS.default.error(e),new gi.ClientError(qd.NO_ENCRYPTION_KEYS,Gd.INTERNAL_SERVER_ERROR)}}async function IC(e){let t=(0,AC.validateBySchema)(e,mo.default.object({username:mo.default.string().optional(),password:mo.default.string().optional(),role:mo.default.string().optional(),expires_in:mo.default.alternatives(mo.default.string(),mo.default.number()).optional()}));if(t)throw new gi.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 yd(e.username,e.password,f)}catch(f){throw jS.default.error(f),new gi.ClientError(qd.INVALID_CREDENTIALS,Gd.UNAUTHORIZED)}if(!r)throw new gi.ClientError(qd.INVALID_CREDENTIALS,Gd.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await zS(),c=await $d.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??oV,algorithm:WS,subject:Vd.OPERATION}),l=await $d.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:Xle,algorithm:WS,subject:Vd.REFRESH}),u=zw(l,$r.SHA256);if((await(0,rV.update)(new nV.default(gm,xu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new gi.ClientError(qd.REFRESH_TOKEN_SAVE_FAILED,Gd.INTERNAL_SERVER_ERROR);return sV.default.signalUserChange(new iV.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function wC(e){let t=(0,AC.validateBySchema)(e,mo.default.object({refresh_token:mo.default.string().required()}).required());if(t)throw new gi.ClientError(t.message);let{refresh_token:r}=e;await JS(r);let n=await zS(),s=await $d.default.decode(r);return{operation_token:await $d.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:oV,algorithm:WS,subject:Vd.OPERATION})}}async function NC(e){return aV(e,Vd.OPERATION)}async function JS(e){return aV(e,Vd.REFRESH)}async function aV(e,t){try{let r=await zS(),n=await $d.default.verify(e,r.publicKey,{algorithms:WS,subject:t});if(n.role)throw new Error("Invalid token");let s=await yd(n.username,void 0,!1);if(t===Vd.REFRESH&&!Jw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw jS.default.warn(r),r?.name==="TokenExpiredError"?new gi.ClientError(qd.TOKEN_EXPIRED,Gd.FORBIDDEN):new gi.ClientError(qd.INVALID_TOKEN,Gd.UNAUTHORIZED)}}var $d,YS,ch,mo,AC,gi,jS,rV,nV,sV,iV,lh,Gd,qd,oV,Xle,WS,Vd,KS,Kd=se(()=>{$d=b(require("jsonwebtoken")),YS=b(require("fs-extra")),ch=b(require("node:path")),mo=b(require("joi")),AC=b(mt());G();gi=b(Ee()),jS=b(Q());Xw();Es();rV=b(Vn()),nV=b(VS()),sV=b(zo()),iV=b(ls()),lh=b(fe()),{HTTP_STATUS_CODES:Gd,AUTHENTICATION_ERROR_MSGS:qd}=gi.hdbErrors;lh.default.initSync();oV=lh.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Xle=lh.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",WS="RS256",Vd={OPERATION:"operation",REFRESH:"refresh"};a(zS,"getJWTRSAKeys");a(IC,"createTokens");a(wC,"refreshOperationToken");a(NC,"validateOperationToken");a(JS,"validateRefreshToken");a(aV,"validateToken")});var CC=M((Lxe,uV)=>{"use strict";var Zle=eV(),Yd=require("passport"),eue=require("passport-local").Strategy,tue=require("passport-http").BasicStrategy,rue=require("util"),nue=(Es(),v(co)),lV=rue.callbackify(nue.findAndValidateUser),Pxe=Jr(),sue=(G(),v(j)),cV=(Kd(),v(uh)),{AccessViolation:iue}=Ee();Yd.use(new eue(function(e,t,r){lV(e,t,r)}));Yd.use(new tue(function(e,t,r){lV(e,t,r)}));Yd.serializeUser(function(e,t){t(null,e)});Yd.deserializeUser(function(e,t){t(null,e)});function oue(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r(new iue)}switch(a(i,"handleResponse"),n){case"Basic":Yd.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===sue.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?cV.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):cV.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Yd.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(oue,"authorize");function aue(e,t){let r=Zle(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(aue,"checkPermissions");uV.exports={authorize:oue,checkPermissions:aue}});var MC=M((Uxe,pV)=>{var eT=require("clone"),tT=mt(),cue=ae(),XS=(G(),v(j)),vxe=Q(),OC=require("fs"),LC=require("joi"),{string:ZS}=LC.types(),{hdbErrors:lue,handleHDBError:QS}=Ee(),{HDB_ERROR_MSGS:Mxe,HTTP_STATUS_CODES:PC}=lue,{commonValidators:Wd}=Qi(),dV=" is required",uue=["insert","update","upsert"],DC={database:{presence:!1,format:Wd.schema_format,length:Wd.schema_length},schema:{presence:!1,format:Wd.schema_format,length:Wd.schema_length},table:{presence:!0,format:Wd.schema_format,length:Wd.schema_length},action:{inclusion:{within:uue,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},due={schema:ZS.required(),table:ZS.required(),action:ZS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:fue,AWS_SECRET:mue,AWS_BUCKET:pue,AWS_FILE_KEY:hue,REGION:Eue}=XS.S3_BUCKET_AUTH_KEYS,_ue={s3:{presence:!0},[`s3.${fue}`]:{presence:!0,type:"String"},[`s3.${mue}`]:{presence:!0,type:"String"},[`s3.${pue}`]:{presence:!0,type:"String"},[`s3.${hue}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Eue}`]:{presence:!0,type:"String"}},fV=eT(DC);fV.data.presence={message:dV};var mV=eT(DC);mV.file_path.presence={message:dV};var gue=Object.assign(eT(DC),_ue),vC=eT(due);vC.csv_url=ZS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();vC.passthrough_headers=LC.object();function Sue(e){let t=tT.validateObject(e,fV);return rT(e,t)}a(Sue,"dataObject");function Tue(e){let t=tT.validateBySchema(e,LC.object(vC));return rT(e,t)}a(Tue,"urlObject");function yue(e){let t=tT.validateObject(e,mV);return rT(e,t)}a(yue,"fileObject");function Rue(e){let t=tT.validateObject(e,gue);return rT(e,t)}a(Rue,"s3FileObject");function rT(e,t){if(!t){let r=cue.checkGlobalSchemaTable(e.schema,e.table);if(r)return QS(new Error,r,PC.BAD_REQUEST);if(e.operation===XS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{OC.accessSync(e.file_path,OC.constants.R_OK|OC.constants.F_OK)}catch(n){return n.code===XS.NODE_ERROR_CODES.ENOENT?QS(n,`No such file or directory ${n.path}`,PC.BAD_REQUEST):n.code===XS.NODE_ERROR_CODES.EACCES?QS(n,`Permission denied ${n.path}`,PC.BAD_REQUEST):QS(n)}}return t}a(rT,"postValidateChecks");pV.exports={dataObject:Sue,urlObject:Tue,fileObject:yue,s3FileObject:Rue}});var UC=M((Bxe,hV)=>{"use strict";var dh=Q(),nT=(G(),v(j));async function bue(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===nT.OPERATIONS_ENUM.INSERT||t.operation===nT.OPERATIONS_ENUM.UPDATE||t.operation===nT.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===nT.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(dh.info(i.message),i):i.http_resp_msg?(dh.error(`Error calling operation: ${e.name}`),dh.error(i.http_resp_msg),i):(dh.error(`Error calling operation: ${e.name}`),dh.error(i),i)}}a(bue,"callOperationFunctionAsAwait");hV.exports={callOperationFunctionAsAwait:bue}});var xC=M((kxe,_V)=>{"use strict";var{S3:Aue,GetObjectCommand:Iue}=require("@aws-sdk/client-s3");_V.exports={getFileStreamFromS3:wue,getS3AuthObj:EV};async function wue(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await EV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Iue(r))).Body}a(wue,"getFileStreamFromS3");function EV(e,t,r){return new Aue({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(EV,"getS3AuthObj")});var SV=M((Gxe,gV)=>{"use strict";var BC=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},FC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};gV.exports={BulkLoadFileObject:BC,BulkLoadDataObject:FC}});var yV=M(($xe,TV)=>{"use strict";var kC=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};TV.exports=kC});var bV=M((Kxe,RV)=>{"use strict";var HC=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};RV.exports=HC});var qC=M((Wxe,IV)=>{"use strict";var AV=yV(),Nue=bV(),{HDB_ERROR_MSGS:Cue}=Jr(),GC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Cue.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 AV(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Nue(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new AV(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};IV.exports=GC});var Vl=M((Jxe,OV)=>{"use strict";var zxe=gn(),fh=Q(),{validateBySchema:wV}=mt(),ta=require("joi"),Oue=so(),sT=ae(),{handleHDBError:iT,hdbErrors:Pue,ClientError:NV}=Ee(),{HDB_ERROR_MSGS:oT,HTTP_STATUS_CODES:$C}=Pue,CV=fe();CV.initSync();var{getDatabases:VC}=(Oe(),v(ft)),Lue=require("fs-extra"),Due=(G(),v(j));OV.exports={describeAll:vue,describeTable:aT,describeSchema:Mue};async function vue(e={}){try{let t=sT.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=VC(),o={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){o[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await aT({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let _=n[m].tables[h].attribute_permissions;E=await aT({schema:m,table:h,exact_count:u,include_computed:d},_)}E&&l.push(E)}catch(E){fh.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]):c[l[m].schema]&&(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]);for(let m in o)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return fh.error("Got an error in describeAll"),fh.error(t),iT(new Error,oT.DESCRIBE_ALL_ERR)}}a(vue,"describeAll");async function aT(e,t){sT.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=wV(e,ta.object({database:ta.string(),table:ta.string().required(),exact_count:ta.boolean().strict(),include_computed:ta.boolean().strict()}));if(i)throw new NV(i.message);let c=VC()[r];if(!c)throw iT(new Error,oT.SCHEMA_NOT_FOUND(e.schema),$C.NOT_FOUND);let l=c[n];if(!l)throw iT(new Error,oT.TABLE_NOT_FOUND(e.schema,e.table),$C.NOT_FOUND);function u(p){(!p.computed||e.include_computed)&&d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,computed:p.computed?!0:void 0,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await Lue.stat(l.primaryStore.env.path)).size}catch(p){fh.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),CV.get(Due.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Oue.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){fh.warn(`unable to stat table dbi due to ${p}`)}return m}a(aT,"descTable");async function Mue(e){sT.transformReq(e);let t=wV(e,ta.object({database:ta.string(),exact_count:ta.boolean().strict(),include_computed:ta.boolean().strict()}));if(t)throw new NV(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=VC()[n];if(!i)throw iT(new Error,oT.SCHEMA_NOT_FOUND(e.schema),$C.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),sT.isEmpty(l)||l.describe){let u=await aT({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(Mue,"describeSchema")});var MV=M((Xxe,vV)=>{"use strict";var Uue=Vl(),{hdbErrors:PV}=Ee(),{getDatabases:LV}=(Oe(),v(ft));vV.exports={checkSchemaExists:DV,checkSchemaTableExists:xue,schemaDescribe:Uue};async function DV(e){if(!LV()[e])return PV.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(DV,"checkSchemaExists");async function xue(e,t){let r=await DV(e);if(r)return r;if(!LV()[e][t])return PV.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xue,"checkSchemaTableExists")});function KC(e){let t=e.get(cT),r=t?(0,jd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=tt(),s=!1;r.nodeName=tt();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:ph(e)??1,nodes:[]})})}i[n]=0,e.putSync(cT,(0,jd.pack)(r))}return r}function mh(e){return KC(e).remoteNameToId}function xV(e,t){let r=KC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(cT,(0,jd.pack)(r)),s}function lT(e,t){let r=KC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(cT,(0,jd.pack)(r))}return UV.trace?.("The remote node name map",e,n,s),s}var UV,jd,cT,YC=se(()=>{UV=b(ir());Ss();jd=require("msgpackr"),cT=Symbol.for("remote-ids");a(KC,"getIdMappingRecord");a(mh,"exportIdMapping");a(xV,"remoteToLocalNodeId");a(lT,"getIdOfRemoteNode")});var qV={};ye(qV,{commitsAwaitingReplication:()=>zd,getHDBNodeTable:()=>Gt,getReplicationSharedStatus:()=>Jd,iterateRoutes:()=>Eh,shouldReplicateToNode:()=>hh,subscribeToNodeUpdates:()=>Qd});function Gt(){return BV||(BV=ze({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 Jd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function Qd(e){Gt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;GV.debug?.("adding node",n,"on node",tt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==tt()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Gt().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function hh(e,t){let r=_c.default.get(x.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>n.name===t&&(!n.sharded||e.shard===_c.default.get(x.REPLICATION_SHARD))))&&Gt().primaryStore.get(tt())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function Bue(){Qd(e=>{gc({},(t,r)=>{let n=e.name,s=FV.get(n);if(s||FV.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=Jd(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of zd.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*Eh(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=_c.default.get(x.REPLICATION_SECUREPORT)??(!_c.default.get(x.REPLICATION_PORT)&&_c.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||_c.default.get(x.REPLICATION_PORT)||_c.default.get(x.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){kV.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 kV,HV,_c,GV,BV,FV,zd,Xd=se(()=>{Oe();Ss();Lm();kV=require("worker_threads"),HV=b(Ee()),_c=b(fe());G();GV=b(ir());server.nodes=[];a(Gt,"getHDBNodeTable");a(Jd,"getReplicationSharedStatus");a(Qd,"subscribeToNodeUpdates");a(hh,"shouldReplicateToNode");FV=new Map;mx((e,t,r)=>{if(r>server.nodes.length)throw new HV.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);zd||(zd=new Map,Bue());let n=zd.get(e);return n||(n=[],zd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Bue,"startSubscriptionToReplications");a(Eh,"iterateRoutes")});var zV={};ye(zV,{connectedToNode:()=>Kl,disconnectedFromNode:()=>ef,ensureNode:()=>ra,requestClusterStatus:()=>jV,startOnMainThread:()=>WC});async function WC(e){let t=0,r=lt();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){uT.set(o,ph(u.auditStore));break}}}Si.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=tt();function l(){let u=Gt().primaryStore.get(c);if(u!==null){let d=e.url??Sc();if(u===void 0||u.url!==d||u.shard!==e.shard)return ra(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Gt().primaryStore.get(c)&&l();for(let u of Eh(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),$V.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}Qd(s)});let n;function s(o,c=o?.name){let l=tt()&&c===tt()||Sc()&&o?.url===Sc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Gt().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(ot.trace("Setting up node replication for",o),!o){for(let[m,p]of po){let h;for(let[E,{worker:_,nodes:R}]of p){let S=R[0];if(S&&S.name==c){h=!0;for(let[y,{worker:w}]of p)p.delete(y),ot.warn("Node was deleted, unsubscribing from node",c,y,m),w?.postMessage({type:"unsubscribe-from-node",node:c,nodes:R,database:y,url:m});break}}if(h){po.get(m).iterator.remove(),po.delete(m);return}}return}if(l)return;if(!o.url){ot.info(`Node ${o.name} is missing url`);return}let u=po.get(o.url);if(u&&u.iterator.remove(),!(o.replicates===!0||o.replicates?.sends)&&!o.subscriptions?.length&&!u)return;if(ot.info(`Added node ${o.name} at ${o.url} for process ${tt()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of Zd)if(o.url===p.url){Zd.delete(m);break}Zd.set(o.name,o)}let d=lt();if(u||(u=new Map,po.set(o.url,u)),u.iterator=gc(e,(m,p,h)=>{h?f(p,!0):f(p,!1)}),o.subscriptions)for(let m of o.subscriptions){let p=m.database||m.schema;d[p]||(ot.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){ot.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,_=[{replicateByDefault:p,...o}];uT.has(m)&&_h.default.get(x.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:p,name:tt(),startTime:uT.get(m),endTime:Date.now(),replicates:!0}),uT.delete(m));let R=hh(o,m),S=Si.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=_,R)return}else R&&(t=t%S.length,E=S[t++],E||ot.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:_,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=Fue.HDB_LEADER_URL??process.env.HDB_LEADER_URL??$V[0]?.url,w=y?new URL(y).hostname:Array.from(Gt().primaryStore.getKeys({}).filter(H=>H!==tt()))[0],I=_[0].name??(_[0].url&&new URL(_[0].url).hostname);ot.warn(`Setting up subscription with leader ${w} for node ${I}`),_[0].isLeader=!w||I===w,setTimeout(()=>{let H={..._[0],type:"subscribe-to-node",database:m,nodes:_};E?E.postMessage(H):gh(H)},kue)}else{ot.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:Gt().primaryStore.get(tt())?.replicates}),Gt().primaryStore.get(tt())?.replicates||(n=!1,ot.info("Disabling replication, this node name",tt(),Gt().primaryStore.get(tt()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:_};E?E.postMessage(y):fT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),ef=a(function(o){try{ot.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(Zd.keys()),l=c.sort(),u=l.indexOf(o.name||Ti(o.url));if(u===-1){ot.warn("Disconnected node not found in node map",o.name,c);return}let d=po.get(o.url),f=d?.get(o.database);if(!f){ot.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!_h.default.get(x.REPLICATION_FAILOVER))return;let m=f.nodes[0];if(!(m.replicates===!0||m.replicates?.sends||m.subscriptions?.length))return;let p=m.shard,h=(u+1)%l.length;for(;u!==h;){let E=l[h],_=Zd.get(E);d=po.get(_.url);let R=d?.get(o.database);if(!R||R.connected===!1||R.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=R,y=!1;for(let w of f.nodes){if(S.some(I=>I.name===w.name)){ot.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}w.endTime<Date.now()||(S.push(w),ot.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(w,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||ot.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}ot.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){ot.error("Error failing over node",c)}},"disconnectedFromNode"),Kl=a(function(o){let c=po.get(o.url),l=c?.get(o.database);if(!l){ot.warn("Connected node not found in replication map, this may be because the node is being removed",o.database,c);return}l.connected=!0,l.latency=o.latency;let u=l.nodes[0];if(!u){ot.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){ot.debug("Connected node is not named yet",o.database,l);return}if(!_h.default.get(x.REPLICATION_FAILOVER))return;l.nodes=[u];let d=!1;for(let f of po.values()){let m=f.get(o.database);if(!m||m==l)continue;let{worker:p,nodes:h,connected:E}=m;if(h)if(E===!1&&h[0].shard===u.shard&&node.url===u.url)for(let _ of h)i(_,o.database);else{let _=h.filter(R=>{if(R)return R.name===u.name&&R.worker?(R.worker.postMessage({type:"unsubscribe-to-node",database:o.database,url:o.url,nodes:[R]}),!1):!0});_.length<h.length&&(m.nodes=_)}}},"connectedToNode");function i(o,c,l=o){let u=Si.workers.filter(f=>f.name==="http");t=t%u.length;let d=u[t++];Object.defineProperty(o,"worker",{value:d,configurable:!0}),d?d.postMessage({url:l.url,name:l.name,type:"subscribe-to-node",database:c,nodes:[o]}):gh({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,Si.onMessageByType)("disconnected-from-node",ef),(0,Si.onMessageByType)("connected-to-node",Kl),(0,Si.onMessageByType)("request-cluster-status",jV)}function jV(e,t){let r=[];for(let[n,s]of Zd)try{let i=po.get(s.url);ot.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)o.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=KV(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function ra(e,t){let r=Gt();e=e??Ti(t.url),t.name=e;try{if(t.ca){let s=new YV.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!_h.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=KV(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Si,dT,ot,VV,_h,YV,WV,KV,Fue,kue,po,ef,Kl,Zd,uT,$V,Sh=se(()=>{Oe();Si=b(st());Ss();dT=require("worker_threads");Xd();ot=b(Q()),VV=b(require("lodash")),_h=b(fe());G();YV=require("crypto"),WV=b(require("minimist")),{cloneDeep:KV}=VV.default,Fue=(0,WV.default)(process.argv),kue=200,po=new Map,Zd=new Map,uT=new Map,$V=[];a(WC,"startOnMainThread");a(jV,"requestClusterStatus");dT.parentPort&&(ef=a(e=>{dT.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Kl=a(e=>{dT.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Si.onMessageByType)("subscribe-to-node",e=>{gh(e)}),(0,Si.onMessageByType)("unsubscribe-from-node",e=>{fT(e)}));a(ra,"ensureNode")});var ys=M(qt=>{"use strict";var _r=require("path"),{watch:Hue}=require("chokidar"),Wn=require("fs-extra"),tf=require("node-forge"),t1=require("net"),{generateKeyPair:jC,X509Certificate:na,createPrivateKey:r1,randomBytes:Gue}=require("node:crypto"),que=require("util");jC=que.promisify(jC);var vt=tf.pki,yi=require("joi"),{v4:n1}=require("uuid"),{validateBySchema:XC}=mt(),{forComponent:$ue}=Q(),Ts=fe(),Vs=(G(),v(j)),{CONFIG_PARAMS:Wl}=Vs,Ri=dN(),{ClientError:Tc}=Ee(),pT=require("node:tls"),{relative:s1,join:Vue}=require("node:path"),{CERTIFICATE_VALUES:JV}=Ri,Kue=tl(),zC=gt(),{table:Yue,getDatabases:Wue,databases:mT}=(Oe(),v(ft)),{getJWTRSAKeys:QV}=(Kd(),v(uh)),Xe=$ue("tls").conditional;qt.generateKeys=tO;qt.updateConfigCert=f1;qt.createCsr=ede;qt.signCertificate=tde;qt.setCertTable=rf;qt.loadCertificates=l1;qt.reviewSelfSignedCert=nO;qt.createTLSSelector=p1;qt.listCertificates=E1;qt.addCertificate=ade;qt.removeCertificate=lde;qt.createNatsCerts=sde;qt.generateCertsKeys=nde;qt.getReplicationCert=yh;qt.getReplicationCertAuth=Zue;qt.renewSelfSigned=ide;qt.hostnamesFromCert=iO;qt.getKey=ude;qt.getHostnamesFromCertificate=dde;qt.getPrimaryHostName=sO;qt.generateSerialNumber=_T;var{urlToNodeName:i1,getThisNodeUrl:jue,getThisNodeName:ET,clearThisNodeName:zue}=(Ss(),v(sa)),{readFileSync:Jue,statSync:o1}=require("node:fs"),m0e=fe(),{getTicketKeys:Que,onMessageFromWorkers:Xue}=st(),{isMainThread:a1}=require("worker_threads"),{TLSSocket:c1,createSecureContext:p0e}=require("node:tls"),ZC=3650,Th=["127.0.0.1","localhost","::1"],eO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function _T(){let e=Gue(8);return e[0]=e[0]&127|1,e.toString("hex")}a(_T,"generateSerialNumber");Xue(async e=>{e.type===Vs.ITC_EVENT_TYPES.RESTART&&(Ts.initSync(!0),await nO())});var on;function Rc(){return on||(on=Wue().system.hdb_certificate,on||(on=Yue({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),on}a(Rc,"getCertTable");async function yh(){let e=p1("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(ET());if(!r)return;let n=new na(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(yh,"getReplicationCert");async function Zue(){Rc();let e=(await yh()).options.cert,r=new na(e).issuer.match(/CN=(.*)/)?.[1];return on.get(r)}a(Zue,"getReplicationCertAuth");var XV,yc=new Map;function l1(){if(XV)return;XV=!0;let e=[{configKey:Wl.TLS},{configKey:Wl.OPERATIONSAPI_TLS}];Rc();let t=_r.dirname(zC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=zC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&s1(Vue(t,"keys"),o);c&&ZV(o,l=>{yc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&a1){let d;ZV(u,f=>{if(JV.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=m1(u),h=new na(p),E;try{E=sO(h)}catch(y){Xe.error?.("error extracting host name from certificate",y);return}if(E==null){Xe.error?.("No host name found on certificate");return}if(h.checkIssued(new na(JV.cert)))return;let _=on.primaryStore.get(E),R=o1(u).mtimeMs,S=!_||_.is_self_signed?1:_.file_timestamp??_.__updatedtime__;if(_&&R<=S){R<S&&Xe.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=on.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(l1,"loadCertificates");function ZV(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&a1&&Xe.warn?.(`Reloading ${r}:`,i),n=c,t(m1(i)))}catch(c){Xe.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Wn.existsSync(e)?s(e,o1(e)):Xe.error?.(`${r} file not found:`,e),Hue(e,{persistent:!1}).on("change",s)}a(ZV,"loadAndWatch");function JC(){let e=jue();if(e==null){let t=Th[0];return Xe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return i1(e)}a(JC,"getHost");function hT(){let e=ET();if(e==null){let t=Th[0];return Xe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(hT,"getCommonName");async function ede(){let e=await yh(),t=vt.certificateFromPem(e.options.cert),r=vt.privateKeyFromPem(e.options.key);Xe.info?.("Creating CSR with cert named:",e.name);let n=vt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:hT()},...eO];Xe.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:u1()}];return Xe.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),tf.pki.certificationRequestToPem(n)}a(ede,"createCsr");function u1(){let e=Th.includes(hT())?Th:[...Th,hT()];return e.includes(JC())||e.push(JC()),[{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=>t1.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(u1,"certExtensions");async function tde(e){let t={},r=_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Rc();for await(let d of on.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(yc.has(d.private_key_name)){n=yc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Wn.exists(_r.join(r,d.private_key_name))){n=Wn.readFile(_r.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await QC();s=d.ca,n=d.private_key}n=vt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=vt.certificateFromPem(s.certificate);Xe.info?.("Signing CSR with cert named",s.name);let o=vt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Xe.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=tf.pki.createCertificate();c.serialNumber=_T(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+ZC),Xe.info?.("sign cert setting validity:",c.validity),Xe.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Xe.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Xe.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,tf.md.sha256.create()),t.certificate=vt.certificateToPem(c)}else Xe.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(tde,"signCertificate");async function rde(e,t){await rf({name:ET(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await rf({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:vt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(rde,"createCertificateTable");async function rf(e){let t;try{t=new na(e.certificate)}catch(r){Xe.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Xe.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Rc(),await on.patch(e)}a(rf,"setCertTable");async function tO(){let e=await jC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:vt.publicKeyFromPem(e.publicKey),privateKey:vt.privateKeyFromPem(e.privateKey)}}a(tO,"generateKeys");async function rO(e,t,r){let n=vt.createCertificate();if(!t){let o=await yh();t=vt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=_T(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+ZC);let i=[{name:"commonName",value:hT()},...eO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(u1()),n.sign(e,tf.md.sha256.create()),vt.certificateToPem(n)}a(rO,"generateCertificates");async function QC(){let e=await E1(),t;for(let r of e){if(!r.is_authority)continue;let n=await h1(r.private_key_name);if(r.private_key_name&&n&&new na(r.certificate).checkPrivateKey(r1(n))){Xe.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Xe.trace?.("No CA found with matching private key")}a(QC,"getCertAuthority");async function d1(e,t,r=!0){let n=vt.createCertificate();n.publicKey=t,n.serialNumber=_T(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+ZC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ts.get(Wl.REPLICATION_HOSTNAME)??i1(Ts.get(Wl.REPLICATION_URL))??n1().split("-")[0]}`},...eO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,tf.md.sha256.create());let o=_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),c=_r.join(o,Ri.PRIVATEKEY_PEM_NAME);return r&&await Wn.writeFile(c,vt.privateKeyToPem(e)),n}a(d1,"generateCertAuthority");async function nde(){let{privateKey:e,publicKey:t}=await tO(),r=await d1(e,t),n=await rO(e,t,r);await rde(n,r),f1()}a(nde,"generateCertsKeys");async function sde(){let e=await rO(vt.privateKeyFromPem(Ri.CERTIFICATE_VALUES.key),void 0,vt.certificateFromPem(Ri.CERTIFICATE_VALUES.cert)),t=_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),r=_r.join(t,Ri.NATS_CERTIFICATE_PEM_NAME);await Wn.exists(r)||await Wn.writeFile(r,e);let n=_r.join(t,Ri.NATS_CA_PEM_NAME);await Wn.exists(n)||await Wn.writeFile(n,Ri.CERTIFICATE_VALUES.cert)}a(sde,"createNatsCerts");async function ide(){Rc();for await(let e of on.search([{attribute:"is_self_signed",value:!0}]))await on.delete(e.name);await nO()}a(ide,"renewSelfSigned");async function nO(){zue(),await l1(),Rc();let e=await QC();if(!e){Xe.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=a(u=>{try{return{key:vt.privateKeyFromPem(Wn.readFileSync(u)),keyPath:u}}catch(d){return Xe.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ts.get(Wl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=Ts.get(Wl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),c=s1(o,i);s||(Xe.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await tO(),Wn.existsSync(_r.join(o,Ri.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${n1().split("-")[0]}.pem`),await Wn.writeFile(_r.join(o,c),vt.privateKeyToPem(s)));let l=await d1(s,vt.setRsaPublicKey(s.n,s.e),!1);await rf({name:l.subject.getField("CN").value,uses:["https"],certificate:vt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await yh()){let r=ET();Xe.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await QC();let n=vt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await rO(vt.privateKeyFromPem(e.private_key),s,n);await rf({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(nO,"reviewSelfSignedCert");function f1(){let e=Kue(Object.keys(Vs.CONFIG_PARAM_MAP),!0),t=_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),r=_r.join(t,Ri.PRIVATEKEY_PEM_NAME),n=_r.join(t,Ri.NATS_CERTIFICATE_PEM_NAME),s=_r.join(t,Ri.NATS_CA_PEM_NAME),i=Vs.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),zC.updateConfigValue(void 0,void 0,o,!1,!0)}a(f1,"updateConfigCert");function m1(e){return e.startsWith("-----BEGIN")?e:Jue(e,"utf8")}a(m1,"readPEM");var e1=pT.createSecureContext;pT.createSecureContext=function(e){if(!e.cert||!e.key)return e1(e);let t={...e};delete t.key,delete t.cert;let r=e1(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var ode=c1.prototype._init;c1.prototype._init=function(e,t){ode.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Yl=new Map;function p1(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Yl.clear();let d=0;if(mT===void 0){c();return}for await(let f of mT.system.hdb_certificate.search([])){let m=f.certificate,p=new na(m);f.is_authority&&(p.asString=m,Yl.set(p.subject,m))}for await(let f of mT.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await h1(f.private_key_name),E=f.certificate,_=new na(E);if(Yl.has(_.issuer)&&(E+=`
16
- `+Yl.get(_.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:Que(),availableCAs:Yl,ca:t&&Array.from(Yl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let S=f.hostnames??iO(_);Array.isArray(S)||(S=[S]);for(let I of S)I===JC()&&(p+=1);let y=pT.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Yl),y.certStart=E.toString().slice(0,100);let w;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),t1.isIP(I)&&(w=!0);let H=r.get(I)?.quality??0;Xe.trace?.("Assigning TLS for hostname",I,"if",p,">",H),p>H&&r.set(I,y)}else Xe.error?.("No hostname found for certificate at",pT.certificate);Xe.trace?.("Adding TLS",y.name,"for",o.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=y,d=p,o&&(o.defaultContext=y))}catch(m){Xe.error?.("Error applying TLS for",f.name,m)}o?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),mT?.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Xe.info?.("TLS requested for",o||"(no SNI)");let l=o;for(;;){let d=r.get(l);if(d)return Xe.debug?.("Found certificate for",o,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}o?Xe.debug?.("No certificate found to match",o,"using the default certificate"):Xe.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Xe.info?.("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(p1,"createTLSSelector");async function h1(e){let t=yc.get(e);return!t&&e?await Wn.readFile(_r.join(Ts.get(Wl.ROOTPATH),Vs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(h1,"getPrivateKeyByName");async function E1(){Rc();let e=[];for await(let t of on.search([]))e.push(t);return e}a(E1,"listCertificates");async function ade(e){let t=XC(e,yi.object({name:yi.string().required(),certificate:yi.string().required(),is_authority:yi.boolean().required(),private_key:yi.string(),hosts:yi.array(),uses:yi.array()}));if(t)throw new Tc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new na(n),c=!1,l=!1,u;for(let[p,h]of yc)!s&&!c&&o.checkPrivateKey(r1(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Tc("A suitable private key was not found for this certificate");let d;if(!r){try{d=sO(o)}catch(p){Xe.error?.(p)}if(d==null)throw new Tc("Error extracting certificate host name, please provide a name parameter")}let f=cde(r??d);s&&!c&&!l&&(await Wn.writeFile(_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME,f+".pem"),s),yc.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await rf(m),"Successfully added certificate: "+f}a(ade,"addCertificate");function cde(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(cde,"sanitizeName");async function lde(e){let t=XC(e,yi.object({name:yi.string().required()}));if(t)throw new Tc(t.message);let{name:r}=e;Rc();let n=await on.get(r);if(!n)throw new Tc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await on.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(Xe.info?.("Removing private key named",s),await Wn.remove(_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME,s)))}return await on.delete(r),"Successfully removed "+r}a(lde,"removeCertificate");function sO(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||iO(e)[0]}a(sO,"getPrimaryHostName");function iO(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}a(iO,"hostnamesFromCert");async function ude(e){if(e.bypass_auth!==!0)throw new Tc("Unauthorized","401");let t=XC(e,yi.object({name:yi.string().required()}));if(t)throw new Tc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await QV()).privateKey;if(r===".jwtPublic")return(await QV()).publicKey;if(yc.get(r))return yc.get(e.name);throw new Tc("Key not found")}a(ude,"getKey");function dde(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}a(dde,"getHostnamesFromCertificate")});var H1={};ye(H1,{BACK_PRESSURE_RATIO_POSITION:()=>B1,CONFIRMATION_STATUS_POSITION:()=>x1,LATENCY_POSITION:()=>RT,NodeReplicationConnection:()=>sf,OPERATION_REQUEST:()=>uO,RECEIVED_TIME_POSITION:()=>fO,RECEIVED_VERSION_POSITION:()=>dO,RECEIVING_STATUS_POSITION:()=>mO,RECEIVING_STATUS_RECEIVING:()=>k1,RECEIVING_STATUS_WAITING:()=>F1,SENDING_TIME_POSITION:()=>bh,createWebSocket:()=>bT,databaseSubscriptions:()=>Ac,replicateOverWS:()=>Ah,tableUpdateListeners:()=>EO});async function bT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=tt(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!cO){let l=(0,D1.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),cO=u.secureContexts}if(i=cO.get(s),i&&le.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,M1.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&((nf?.caCount!==ia.size||nf?.derivedFromContext!==i)&&(nf=v1.createSecureContext({...i.options,ca:[...ia,...i.options.availableCAs.values()]}),nf.caCount=ia.size,nf.derivedFromContext=i),c.secureContext=nf),new O1.WebSocket(e,"harperdb-replication-v1",c)}function Ah(e,t,r){let n=t.port||t.securePort,s=hO.pid%1e3+"-"+P1.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);le.debug?.(s,"Initializing replication connection",r);let i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||Ac,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&lt()[u],_,R=new Map,S=[];_=r.name,_&&t.connection&&(t.connection.nodeName=_);let y,w,I,H,X,q,k,z=6e4,Y,ce=0,de=0,te=0,Se=C1.default.get(x.REPLICATION_BLOBTIMEOUT)??12e4,Ne=new Map,Ke=[],$e=0,Ir;if(t.url){let A=a(()=>{X&&de===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(X=performance.now(),e.ping(),de=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,w1).unref(),A()}else nr();e._socket?.setMaxListeners(200);function nr(){clearTimeout(H),de=e._socket?.bytesRead,te=e._socket?.bytesWritten,H=setTimeout(()=>{de===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${_}, terminating connection and reconnecting`),e.terminate())},w1*2).unref()}a(nr,"resetPingTimer");let zr=0,xr=0,Pu=!1,Jc=3e4;function Bt(){if(pn?.length>0){let A=performance.now(),U=A-xr;zr=(zr*Jc+(Pu?U:0))/(Jc+U),m&&(m[B1]=zr),xr=A}}a(Bt,"updateBackPressureRatio"),setInterval(Bt,Jc).unref();function si(){if(!(!_||!u))return m||(m=Jd(f,u,_)),m}a(si,"getSharedStatus"),u&&Qc(u);let Ga,a_,lm=[],c_=[],um,ve=[],l_=[],$b=[],Lu=150,Hi=25,Ps=0,dm=0,fm=!1,Mo,Dn,pn,Br;e.on("message",Du);async function Du(A){if(r=await r,!r){le.error?.(s,"No authorization provided"),Fr(1008,"Unauthorized");return}mm(A),e.off("message",Du),e.on("message",mm)}a(Du,"onWSMessageWhenAuthorized");function mm(A){ce=performance.now();try{let U=A.dataView=new cl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let W=(0,at.decode)(A),[J,F,he]=W;switch(J){case g1:{if(F){if(_){if(_!==F){le.error?.(s,`Node name mismatch, expecting to connect to ${_}, but peer reported name as ${F}, disconnecting`),e.send((0,at.encode)([Rh])),Fr(1008,"Node name mismatch");return}}else if(_=F,t.connection?.tentativeNode){let me=t.connection.tentativeNode;me.name=_,t.connection.tentativeNode=null,ra(_,me)}if(t.connection&&(t.connection.nodeName=_),le.debug?.(s,"received node name:",_,"db:",u??W[2]),!u)try{Qc(u=W[2]),u==="system"&&(Ga=gc(t,(me,ie)=>{Va(ie)&&K(ie)}),e.on("close",()=>{Ga?.remove()}))}catch(me){le.warn?.(s,"Error setting database",me),e.send((0,at.encode)([Rh])),Fr(1008,me.message);return}pm()}break}case A1:{le.debug?.(s,"Received table definitions for",F.map(me=>me.table));for(let me of F){let ie=W[2];me.database=ie;let Ce;if(Va(ie)){if(u==="system")Me[ie]?.[me.table]||(Ce=D(me,Me[ie]?.[me.table]));else{if(ie!=="data"&&!Me[ie]){le.warn?.("Database not found",ie);return}Ce=D(me,Me[ie]?.[me.table])}f||(f=Ce?.auditStore),E||(E=lt()?.[ie])}}break}case Rh:Fr();break;case uO:try{let me=r?.replicates||r?.subscribers||r?.name;le.debug?.("Received operation request",F,"from",_),server.operation(F,{user:r},!me).then(ie=>{le.debug?.("Requested request from finished",_,ie),Array.isArray(ie)&&(ie={results:ie}),ie.requestId=F.requestId,e.send((0,at.encode)([ST,ie]))},ie=>{le.debug?.("Failed requested operation from",_,ie),e.send((0,at.encode)([ST,{requestId:F.requestId,error:oO(ie)}]))})}catch(me){e.send((0,at.encode)([ST,{requestId:F.requestId,error:oO(me)}]))}break;case ST:let{resolve:ue,reject:_e}=R.get(F.requestId);le.debug?.("Received completed operation request",_,F),F.error?_e(new Error(F.error)):ue(F),R.delete(F.requestId);break;case aO:let re=W[3];if(!E){u?le.error?.(s,"No database found for",u):le.error?.(s,"Database name never received"),Fr();return}let oe=E[re];oe=D({table:re,database:u,attributes:F.attributes,schemaDefined:F.schemaDefined},oe),lm[he]={name:re,decoder:new at.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:F.typedStructs,structures:F.structures}),getEntry(me){return oe.primaryStore.getEntry(me)},rootStore:oe.primaryStore.rootStore};break;case S1:Br=f?xV(F,f):new Map,um=W[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${um}`);break;case T1:let ge=he;$b[ge]=F;break;case b1:si()[x1]=F,le.trace?.(s,"received and broadcasting committed update",F),si().buffer.notify();break;case R1:y=F,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case TT:{let me=W[1],{fileId:ie,size:Ce,finished:Be,error:He}=me,Te=Ne.get(ie);le.debug?.("Received blob",ie,"has stream",!!Te,"connectedToBlob",!!Te?.connectedToBlob,"length",W[2].length,"finished",Be),Te||(Te=new lO.PassThrough,Te.expectedSize=Ce,Ne.set(ie,Te)),Te.lastChunk=Date.now();let pt=W[2];Ye(pt.byteLength,"bytes-received",`${_}.${u}`,"replication","blob");try{Be?(He?(Te.on("error",()=>{}),Te.destroy(new Error("Blob error: "+He+" for record "+(Te.recordId??"unknown")+" from "+_))):Te.end(pt),Te.connectedToBlob&&Ne.delete(ie)):Te.write(pt)}catch(Nt){le.error?.(`Error receiving blob for ${Te.recordId} from ${_} and streaming to storage`,Nt),Ne.delete(ie)}break}case y1:{let me=F,ie;try{let Ce=W[3],Be=c_[he]||(c_[he]=E[W[4]]);if(!Be)return le.warn?.("Unknown table id trying to handle record request",he);let He=Be.primaryStore.getBinaryFast(Symbol.for("structures")),Te=He?.length??0;if(Te>0&&Te!==dm){dm=Te;let Nt=(0,at.decode)(He);e.send((0,at.encode)([aO,{typedStructs:Nt.typed,structures:Nt.named},he,Be.tableName]))}let pt=Be.primaryStore.getBinaryFast(Ce);if(pt){let Nt=Be.primaryStore.decoder.decode(pt,{valueAsBuffer:!0}),Ft=ut||{};Ft.version=(0,U1.getLastVersion)(),ut&&ut[ju]&Xr&&(Nt=Buffer.from(Nt),Gm(()=>Be.primaryStore.decoder.decode(pt),d_=>qa(d_,Ce),Be.primaryStore.rootStore)),ie=(0,at.encode)([gT,me,{value:Nt,expiresAt:Ft.expiresAt,version:Ft.version,residencyId:Ft.residencyId,nodeId:Ft.nodeId,user:Ft.user}])}else ie=(0,at.encode)([gT,me])}catch(Ce){ie=(0,at.encode)([gT,me,{error:Ce.message}])}e.send(ie);break}case gT:{let{resolve:me,reject:ie,tableId:Ce,key:Be}=R.get(W[1]),He=W[2];if(He?.error)ie(new Error(He.error));else if(He){let Te;z_(()=>{let pt=lm[Ce].decoder.decode(He.value);He.value=pt,He.key=Be,me(He)||Te&&setTimeout(()=>Te.forEach(Y_),6e4).unref()},f?.rootStore,pt=>{let Nt=$a(pt,Be);return Te||(Te=[]),Te.push(Nt),Nt})}else me();R.delete(W[1]);break}case _1:{pn=F;let me,ie,Ce=!1;if(h){if(u!==h.databaseName&&!h.then){le.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(le.debug?.(s,"received subscription request for",u,"at",pn),!h){let De;h=new Promise(sr=>{le.debug?.("Waiting for subscription to database "+u),De=sr}),h.ready=De,Ac.set(u,h)}if(r.name)ie=Gt().subscribe(r.name),ie.then(async De=>{me=De;for await(let sr of me){let ht=sr.value;if(!(ht?.replicates===!0||ht?.replicates?.receives||ht?.subscriptions?.some(kr=>(kr.database||kr.schema)===u&&kr.publish!==!1))){Ce=!0,Fr(1008,`Unauthorized database subscription to ${u}`);return}}},De=>{le.error?.(s,"Error subscribing to HDB nodes",De)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,at.encode)([Rh])),Fr(1008,`Unauthorized database subscription to ${u}`);return}if(Dn&&(le.debug?.(s,"stopping previous subscription",u),Dn.emit("close")),pn.length===0)return;let Be=pn[0],He=a(De=>{if(De&&(Be.replicateByDefault?!Be.tables.includes(De.tableName):Be.tables.includes(De.tableName)))return{table:De}},"tableToTableEntry"),Te={txnTime:0},pt,Nt,Ft=1/0,d_,f_=a((De,sr)=>{if(De.type==="end_txn"){Te.txnTime&&(o[i]!==66&&le.error?.("Invalid encoding of message"),C(9),C(og),O(d_=sr),tU()),i=c,Te.txnTime=0;return}let ht=De.nodeId,kr=De.tableId,Ct=Nt[kr];if(!Ct&&(Ct=Nt[kr]=He(h.tableById[kr]),!Ct))return le.debug?.("Not subscribed to table",kr);let Ls=Ct.table,zt=Ls.primaryStore,ii=zt.encoder;(De.extendedType&Eg||!ii.typedStructs)&&(ii._mergeStructures(ii.getStructures()),ii.typedStructs&&(ii.lastTypedStructuresLength=ii.typedStructs.length));let Uu=pt[ht];if(!(Uu&&Uu.startTime<sr&&(!Uu.endTime||Uu.endTime>sr)))return yT&&le.trace?.(s,"skipping replication update",De.recordId,"to:",_,"from:",ht,"subscribed:",pt),rU();yT&&le.trace?.(s,"sending replication update",De.recordId,"to:",_,"from:",ht,"subscribed:",pt);let Vb=De.version;Te.txnTime!==Vb&&(Te.txnTime&&(yT&&le.trace?.(s,"new txn time, sending queued txn",Te.txnTime),o[i]!==66&&le.error?.("Invalid encoding of message"),tU()),Te.txnTime=Vb,i=c,O(Vb));let Xc=De.residencyId,Kb=u_(Xc,Ls),m_;if(Kb&&!Kb.includes(_)){let Gi=u_(De.previousResidencyId,Ls);if(Gi&&!Gi.includes(_)&&(De.type==="put"||De.type==="patch")||Ls.getResidencyById)return rU();let Zc=De.recordId;le.trace?.(s,"sending invalidation",Zc,_,"from",ht);let hm=0;Xc&&(hm|=ll),De.previousResidencyId&&(hm|=ul);let jb,p_=null;for(let nU in Ls.indices){if(!p_){if(jb=De.getValue(zt,!0),!jb)break;p_={}}p_[nU]=jb[nU]}m_=dl(De.version,kr,Zc,null,ht,De.user,De.type==="put"||De.type==="patch"?"invalidate":De.type,ii.encode(p_),hm,Xc,De.previousResidencyId,De.expiresAt)}function rU(){return le.trace?.(s,"skipping audit record",De.recordId),q||(q=setTimeout(()=>{q=null,(d_||0)+I1/2<Ft&&(yT&&le.trace?.(s,"sending skipped sequence update",Ft),e.send((0,at.encode)([R1,Ft])))},I1).unref()),new Promise(setImmediate)}a(rU,"skipAuditRecord");let Yb=ii.typedStructs,Wb=ii.structures;if((Yb?.length!=Ct.typed_length||Wb?.length!=Ct.structure_length)&&(Ct.typed_length=Yb?.length,Ct.structure_length=Wb.length,le.debug?.(s,"send table struct",Ct.typed_length,Ct.structure_length),Ct.sentName||(Ct.sentName=!0),e.send((0,at.encode)([aO,{typedStructs:Yb,structures:Wb,attributes:Ls.attributes,schemaDefined:Ls.schemaDefined},kr,Ct.table.tableName]))),Xc&&!l_[Xc]&&(e.send((0,at.encode)([T1,Kb,Xc])),l_[Xc]=!0),m_)C(m_.length),P(m_);else{let Gi=De.encoded;De.extendedType&Xr&&Gm(()=>De.getValue(zt),hm=>qa(hm,De.recordId),zt.rootStore);let Zc=Gi[0]===66?8:0;C(Gi.length-Zc),P(Gi,Zc),le.trace?.("wrote record",De.recordId,"length:",Gi.length)}if(e._socket.writableNeedDrain){let Gi=performance.now();return Pu=!0,Bt(),new Promise(Zc=>{le.debug?.(`Waiting for remote node ${_} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",()=>{Zc(),Pu=!1,Bt()})})}else return $e>Hi?new Promise(Gi=>{Ir=Gi}):new Promise(setImmediate)},"sendAuditRecord"),tU=a(()=>{c-i>8?(e.send(o.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Ye(c-i,"bytes-sent",`${_}.${u}`,"replication","egress")):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");Dn=new pO.EventEmitter,Dn.once("close",()=>{Ce=!0,me?.end()});for(let{startTime:De}of pn)De<Ft&&(Ft=De);(ie||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,Nt=h.tableById.map(He),pt=[];for(let{name:sr,startTime:ht,endTime:kr}of pn){let Ct=lT(sr,f);le.debug?.("subscription to",sr,"using local id",Ct,"starting",ht),pt[Ct]={startTime:ht,endTime:kr}}K(u),Ga||(Ga=ql(sr=>{sr.databaseName===u&&K(u)}),a_=rh(sr=>{sr===u&&(e.send((0,at.encode)([Rh])),Fr())}),e.on("close",()=>{Ga?.remove(),a_?.remove()})),e.send((0,at.encode)([S1,mh(h.auditStore),pn.map(({name:sr})=>sr)]));let De=!0;do{isFinite(Ft)||(le.warn?.("Invalid sequence id "+Ft),Fr(1008,"Invalid sequence id"+Ft));let sr;if(De&&!Ce&&(De=!1,Ft===0)){le.info?.("Replicating all tables to",_);let ht=Date.now(),kr=AT(f);for(let Ct in E){if(!He(Ct))continue;let Ls=E[Ct];for(let zt of Ls.primaryStore.getRange({snapshot:!1,versions:!0})){if(Ce)return;le.trace?.(s,"Copying record from",u,Ct,zt.key,zt.localTime),ht=Math.max(zt.localTime??1,ht),sr=!0,si()[bh]=1;let ii=dl(zt.version,Ls.tableId,zt.key,null,kr,null,"put",Gm(()=>Ls.primaryStore.encoder.encode(zt.value),Uu=>qa(Uu,zt.key)),zt.metadataFlags&-256,zt.residencyId,null,zt.expiresAt);await f_({recordId:zt.key,tableId:Ls.tableId,type:"put",getValue(){return zt.value},encoded:ii,version:zt.version,residencyId:zt.residencyId,nodeId:kr,extendedType:zt.metadataFlags},zt.localTime)}}Te.txnTime||(Te.txnTime=ht,O(ht)),f_({type:"end_txn"},ht),si()[bh]=0,Ft=ht}for(let{key:ht,value:kr}of f.getRange({start:Ft||1,exclusiveStart:!0,snapshot:!1})){if(Ce)return;let Ct=At(kr);le.debug?.("sending audit record",ht,Ct.recordId),si()[bh]=ht,Ft=ht,await f_(Ct,ht),Dn.startTime=ht,sr=!0}sr&&f_({type:"end_txn"},Ft),si()[bh]=0,await dB(f)}while(!Ce)}).catch(De=>{le.error?.(s,"Error handling subscription to node",De),Fr(1008,"Error handling subscription to node")});break}}return}U.position=8;let N=!0,L,$;do{si();let W=U.readInt();if(W===9&&U.getUint8(U.position)==og){U.position++,y=$=U.readFloat64(),m[dO]=y,m[fO]=Date.now(),m[mO]=F1,h.send({type:"end_txn",localTime:y,remoteNodeIds:S}),le.trace?.("received remote sequence update",y,u);break}let J=U.position,F=At(A,J,J+W),he=lm[F.tableId];he||le.error?.(`No table found with an id of ${F.tableId}`);let ue;F.residencyId&&(ue=$b[F.residencyId],le.trace?.(s,"received residency list",ue,F.type,F.recordId));let _e=F.recordId;try{z_(()=>{L={table:he.name,id:F.recordId,type:F.type,nodeId:Br.get(F.nodeId),residencyList:ue,timestamp:F.version,value:F.getValue(he),user:F.user,beginTxn:N,expiresAt:F.expiresAt}},f?.rootStore,re=>$a(re,_e))}catch(re){throw re.message+=" record id: "+_e,re.message+=" typed structures for current decoder"+JSON.stringify(he.decoder.typedStructs),re.message+=" structures for current decoder"+JSON.stringify(he.decoder.structures),re}N=!1,le.debug?.(s,"received replication message",F.type,"id",L.id,"version",new Date(F.version),"nodeId",L.nodeId),m[dO]=F.version,m[fO]=Date.now(),m[mO]=k1,h.send(L),U.position=J+W}while(U.position<A.byteLength);Ps++,u!=="system"&&Ye(A.byteLength,"bytes-received",`${_}.${u}.${L?.table||"unknown_table"}`,"replication","ingest"),Ps>Lu&&!fm&&(fm=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${_} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(L){let W=Date.now()-L.timestamp;u!=="system"&&Ye(W,"replication-latency",_+"."+u+"."+L.table,L.type,"ingest")}Ps--,fm&&(fm=!1,e.resume(),le.debug?.(`Replication resuming ${_}`)),Ke.length>0&&await Promise.all(Ke),le.trace?.("All blobs finished"),!w&&$&&(le.trace?.(s,"queuing confirmation of a commit at",$),setTimeout(()=>{e.send((0,at.encode)([b1,w])),le.trace?.(s,"sent confirmation of a commit at",w),w=null},mde)),w=$,le.debug?.("last sequence committed",new Date($),u)}})}catch(U){le.error?.(s,"Error handling incoming replication message",U)}}a(mm,"onWSMessage"),e.on("ping",nr),e.on("pong",()=>{if(t.connection){let A=performance.now()-X;t.connection.latency=A,si()&&(m[RT]=A),t.isSubscriptionConnection&&Kl({name:_,database:u,url:t.url,latency:A})}X=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout(H),clearInterval(k),Dn&&Dn.emit("close"),Mo&&Mo.end();for(let[N,{reject:L}]of R)L(new Error(`Connection closed ${U?.toString()} ${A}`));le.debug?.(s,"closed",A,U?.toString())});function Fr(A,U){try{e.isFinished=!0,le.debug?.(s,"closing",_,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(N){le.error?.(s,"Error closing connection",N)}}a(Fr,"close");let vu=new Set;async function qa(A,U){let N=W_(A);if(vu.has(N)){le.debug?.("Blob already being sent",N);return}vu.add(N);try{let L;$e++;for await(let $ of A.stream())L&&(le.debug?.("Sending blob chunk",N,"length",L.length),e.send((0,at.encode)([TT,{fileId:N,size:A.size},L]))),L=$,e._socket.writableNeedDrain&&(le.debug?.("draining",N),await new Promise(W=>e._socket.once("drain",W)),le.debug?.("drained",N)),Ye($.length,"bytes-sent",`${_}.${u}`,"replication","blob");le.debug?.("Sending final blob chunk",N,"length",L.length),e.send((0,at.encode)([TT,{fileId:N,size:A.size,finished:!0},L]))}catch(L){le.warn?.("Error sending blob",L,"blob id",N,"for record",U),e.send((0,at.encode)([TT,{fileId:N,finished:!0,error:oO(L)},Buffer.alloc(0)]))}finally{vu.delete(N),$e--,$e<Hi&&Ir?.()}}a(qa,"sendBlobs");function $a(A,U){let N=W_(A),L=Ne.get(N);le.debug?.("Received transaction with blob",N,"has stream",!!L,"ended",!!L?.writableEnded),L?L.writableEnded&&Ne.delete(N):(L=new lO.PassThrough,Ne.set(N,L)),L.connectedToBlob=!0,L.lastChunk=Date.now(),L.recordId=U,A.size===void 0&&L.expectedSize&&(A.size=L.expectedSize);let $=L.blob??createBlob(L,A);L.blob=$;let W=$o(()=>Hm($).saving,h.auditStore?.rootStore);return W&&(W.blobId=N,Ke.push(W),W.finally(()=>{le.debug?.(`Finished receiving blob stream ${N}`),Ke.splice(Ke.indexOf(W),1)})),$}a($a,"receiveBlobs");function pm(){if(p||(p=!0,t.connection?.on("subscriptions-updated",pm)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;f||(f=h?.auditStore);try{for(let L of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let $ of L.value.nodes||[])$.lastTxnTime>(A.get($.id)??0)&&A.set($.id,$.lastTxnTime)}catch(L){if(!L.message.includes("Can not re"))throw L}let U=t.connection?.nodeSubscriptions?.[0];S=[];let N=t.connection?.nodeSubscriptions.map((L,$)=>{let W=[],{replicateByDefault:J}=L;if(L.subscriptions){for(let _e of L.subscriptions)if(_e.subscribe&&(_e.schema||_e.database)===u){let re=_e.table;E?.[re]?.replicate!==!1&&W.push(re)}J=!1}else for(let _e in E)(J?E[_e].replicate===!1:E[_e].replicate)&&W.push(_e);let F=f&&lT(L.name,f),he=h?.dbisDB?.get([Symbol.for("seq"),F])??1,ue=Math.max(he?.seqId??1,(typeof L.startTime=="string"?new Date(L.startTime).getTime():L.startTime)??1);if(le.debug?.("Starting time recorded in db",L.name,F,u,he?.seqId,"start time:",ue,new Date(ue)),U!==L){let _e=f&&lT(U.name,f),re=h?.dbisDB?.get([Symbol.for("seq"),_e])??1;for(let oe of re?.nodes||[])oe.name===L.name&&(ue=oe.seqId,le.debug?.("Using sequence id from proxy node",U.name,ue))}return F===void 0?le.warn("Starting subscription request from node",L,"but no node id found"):S.push(F),A.get(F)>ue&&(ue=A.get(F),le.debug?.("Updating start time from more recent txn recorded",U.name,ue)),ue===1&&(L.isLeader?(le.warn?.(`Requesting full copy of database ${u} from ${L.url}`),ue=0):ue=Date.now()-6e4),le.trace?.(s,"defining subscription request",L.name,u,new Date(ue)),{name:L.name,replicateByDefault:J,tables:W,startTime:ue,isLeader:L.isLeader,endTime:L.endTime}});if(N)if(le.debug?.(s,"sending subscription request",N,h?.dbisDB?.path),clearTimeout(Y),N.length>0)e.send((0,at.encode)([_1,N]));else{let L=a(()=>{let $=performance.now();Y=setTimeout(()=>{ce<=$?Fr(1008,"Connection has no subscriptions and is no longer used"):L()},z).unref()},"scheduleClose");L()}}a(pm,"sendSubscriptionRequestUpdate");function u_(A,U){if(!A)return;let N=ve[A];return N||(N=U.getResidencyRecord(A),ve[A]=N),N}a(u_,"getResidence");function Va(A){return!(bc&&bc!="*"&&!bc[A]&&!bc.includes?.(A)&&!bc.some?.(U=>U.name===A))}a(Va,"checkDatabaseAccess");function Qc(A){if(h=h||d.get(A),!Va(A))throw new Error(`Access to database "${A}" is not permitted`);h||le.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=lt()?.[A]);let U=tt();if(U===_)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return Mu(U,A),!0}a(Qc,"setDatabase");function Mu(A,U){let N=lt()?.[U],L=[];for(let $ in N){let W=N[$];L.push({table:$,schemaDefined:W.schemaDefined,attributes:W.attributes.map(J=>({name:J.name,type:J.type,isPrimaryKey:J.isPrimaryKey}))})}le.trace?.("Sending database info for node",A,"database name",U),e.send((0,at.encode)([g1,A,U,L]))}a(Mu,"sendNodeDBName");function K(A){let U=lt()?.[A],N=[];for(let L in U){if(pn&&!pn.some(W=>W.replicateByDefault?!W.tables.includes(L):W.tables.includes(L)))continue;let $=U[L];N.push({table:L,schemaDefined:$.schemaDefined,attributes:$.attributes.map(W=>({name:W.name,type:W.type,isPrimaryKey:W.isPrimaryKey}))})}e.send((0,at.encode)([A1,N,A]))}a(K,"sendDBSchema"),k=setInterval(()=>{for(let[A,U]of Ne)U.lastChunk+Se<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${_}`),Ne.delete(A),U.end())},Se).unref();let g=1,T=[];return{end(){Mo&&Mo.end(),Dn&&Dn.emit("close")},getRecord(A){let U=g++;return new Promise((N,L)=>{let $=[y1,U,A.table.tableId,A.id];T[A.table.tableId]||($.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,at.encode)($)),ce=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(W){let{table:J,entry:F}=A;if(N(W),W)return J._recordRelocate(F,W)},reject:L})})},sendOperation(A){let U=g++;return A.requestId=U,e.send((0,at.encode)([uO,A])),new Promise((N,L)=>{R.set(U,{resolve:N,reject:L})})}};function C(A){B(5),A<128?o[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,A),c+=5)}function P(A,U=0,N=A.length){let L=N-U;B(L),A.copy(o,c,U,N),c+=L}function O(A){B(8),l.setFloat64(c,A),c+=8}function B(A){if(A+16>o.length-c){let U=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(U,0,i,c),c=c-i,i=0,o=U,l=new DataView(o.buffer,0,o.length)}}function D(A,U){let N=A.database??"data";U||(U={});let L=U.schemaDefined,$=!1,W=A.schemaDefined,J=U.attributes||[];for(let F=0;F<A.attributes?.length;F++){let he=A.attributes[F],ue=J.find(_e=>_e.name===he.name);(!ue||ue.type!==he.type)&&(L?le.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${he.name}: ${he.type}' from '${_}' does not match local attribute ${ue?"'"+ue.name+": "+ue.type+"'":"which does not exist"}`):($=!0,W||(he.indexed=!0),ue?J[J.indexOf(ue)]=he:J.push(he)))}return $?(le.debug?.("(Re)creating",A),ze({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:J,...U})):U}}var C1,at,O1,P1,L1,pO,D1,v1,hO,M1,lO,U1,fde,oO,le,_1,g1,S1,Rh,T1,aO,y1,gT,uO,ST,R1,b1,A1,TT,x1,dO,fO,bh,RT,mO,B1,F1,k1,EO,Ac,yT,I1,mde,w1,cO,nf,N1,sf,_O=se(()=>{Oe();$i();YC();AI();Ss();C1=b(fe());G();fl();at=require("msgpackr"),O1=require("ws"),P1=require("worker_threads"),L1=b(Q());Sh();pO=require("events"),D1=b(ys()),v1=b(require("node:tls"));Xd();hO=b(require("node:process")),M1=require("node:net");is();ss();lO=require("node:stream"),U1=require("lmdb"),{forComponent:fde,errorToString:oO}=L1.default,le=fde("replication").conditional,_1=129,g1=140,S1=141,Rh=142,T1=130,aO=132,y1=133,gT=134,uO=136,ST=137,R1=143,b1=144,A1=145,TT=146,x1=0,dO=1,fO=2,bh=3,RT=4,mO=5,B1=6,F1=0,k1=1,EO=new Map,Ac=new Map,yT=!0,I1=300,mde=2,w1=3e4;a(bT,"createWebSocket");N1=500,sf=class extends pO.EventEmitter{static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=N1;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??Ti(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await bT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${hO.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),le[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=N1,this.nodeSubscriptions&&Kl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=Ah(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"?(le.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"?le.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`):le.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&ef({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();le.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};a(Ah,"replicateOverWS")});function Ic(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
17
- `)}function q1(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}function TO(e){try{let t=jl(e),n=ho.Certificate.fromBER(t).extensions?.find(c=>c.extnID==="2.5.29.31");if(!n)return oa.debug?.("Certificate has no CRL Distribution Points extension"),[];let s=aa.fromBER(n.extnValue.valueBlock.valueHexView);if(s.offset===-1)throw new Error("Failed to parse ASN.1 structure in CRL Distribution Points extension");let i=new ho.CRLDistributionPoints({schema:s.result}),o=[];for(let c of i.distributionPoints)if(c.distributionPoint&&Array.isArray(c.distributionPoint)){for(let l of c.distributionPoint)if(l.type===6&&typeof l.value=="string"){let u=l.value;(u.startsWith("http://")||u.startsWith("https://"))&&o.push(u)}}return oa.debug?.(`Found ${o.length} CRL distribution points: ${o}`),o}catch(t){return oa.warn?.(`Failed to extract CRL distribution points: ${t}`),[]}}function $1(e){try{let t=jl(e),r=ho.Certificate.fromBER(t),n=[],s=[];for(let i of r.extensions||[])if(i.extnID==="2.5.29.31")try{let o=aa.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1){let c=new ho.CRLDistributionPoints({schema:o.result});for(let l of c.distributionPoints)if(l.distributionPoint&&Array.isArray(l.distributionPoint)){for(let u of l.distributionPoint)if(u.type===6&&typeof u.value=="string"){let d=u.value;(d.startsWith("http://")||d.startsWith("https://"))&&n.push(d)}}}}catch(o){oa.warn?.(`Failed to parse CRL Distribution Points extension: ${o}`)}else if(i.extnID==="1.3.6.1.5.5.7.1.1")try{let o=aa.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1&&o.result instanceof aa.Sequence){for(let c of o.result.valueBlock.value)if(c instanceof aa.Sequence&&c.valueBlock.value.length>=2){let l=c.valueBlock.value[0],u=c.valueBlock.value[1];if(l instanceof aa.ObjectIdentifier&&l.valueBlock.toString()==="1.3.6.1.5.5.7.48.1"&&u.idBlock.tagNumber===6){let d=String.fromCharCode(...Array.from(u.valueBlock.valueHexView));(d.startsWith("http://")||d.startsWith("https://"))&&s.push(d)}}}}catch(o){oa.warn?.(`Failed to parse Authority Information Access extension: ${o}`)}return oa.debug?.(`Found ${n.length} CRL distribution points and ${s.length} OCSP responder URLs`),{crlUrls:n,ocspUrls:s}}catch(t){return oa.warn?.(`Failed to extract revocation URLs: ${t}`),{crlUrls:[],ocspUrls:[]}}}function jl(e){let t=e.replace(/-----BEGIN [^-]+-----/g,"").replace(/-----END [^-]+-----/g,"").replace(/\s/g,""),r=atob(t),n=new ArrayBuffer(r.length),s=new Uint8Array(n);for(let i=0;i<r.length;i++)s[i]=r.charCodeAt(i);return n}function IT(e,t,r,n){let s={certPem:e,issuerPem:t,method:r,...n},i=(0,SO.createHash)("sha256").update(JSON.stringify(s)).digest("hex");return`${r}:${i}`}function yO(e,t){return`${e}:${t}`}function V1(e){try{let t=jl(e),n=ho.Certificate.fromBER(t).serialNumber.valueBlock.valueHexView;return Array.from(n).map(s=>s.toString(16).padStart(2,"0")).join("")}catch(t){throw oa.error?.(`Failed to extract serial number: ${t}`),new Error(`Failed to extract certificate serial number: ${t.message}`)}}function RO(e){try{let t=jl(e),r=ho.Certificate.fromBER(t),n=r.extensions?.find(i=>i.extnID==="2.5.29.35");if(n){let i=new ho.AuthorityKeyIdentifier({schema:n.parsedValue});if(i.keyIdentifier){let o=i.keyIdentifier.valueBlock.valueHexView;return Array.from(o).map(c=>c.toString(16).padStart(2,"0")).join("")}}let s=r.issuer.typesAndValues.map(i=>`${i.type}=${i.value.valueBlock.value}`).join(",");return(0,SO.createHash)("sha256").update(s).digest("hex")}catch(t){throw oa.error?.(`Failed to extract issuer key ID: ${t}`),new Error(`Failed to extract issuer key ID: ${t.message}`)}}function wT(){return gO||(gO=ze({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]})),gO}var SO,ho,aa,G1,oa,gO,NT=se(()=>{SO=require("node:crypto"),ho=b(require("pkijs")),aa=b(require("asn1js")),G1=b(ir());Oe();oa=(0,G1.loggerWithTag)("cert-verification-utils");a(Ic,"bufferToPem");a(q1,"extractCertificateChain");a(TO,"extractCRLDistributionPoints");a($1,"extractRevocationUrls");a(jl,"pemToBuffer");a(IT,"createCacheKey");a(yO,"createRevokedCertificateId");a(V1,"extractSerialNumber");a(RO,"extractIssuerKeyId");gO=null;a(wT,"getCertificateCacheTable")});function K1(e){let{error:t,value:r}=_de.validate(e,{abortEarly:!1,allowUnknown:!1});if(t){let n=t.details.map(s=>s.message).join("; ");throw new Error(`Invalid certificate verification configuration: ${n}`)}return r}var Kr,pde,of,af,bO,hde,Ede,_de,Y1=se(()=>{Kr=b(require("joi")),pde="fail-closed",of={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-closed"},af={timeout:1e4,cacheTtl:864e5,failureMode:"fail-closed",gracePeriod:864e5},bO=Kr.default.string().valid("fail-open","fail-closed"),hde=Kr.default.alternatives().try(Kr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...af}),Kr.default.object({enabled:Kr.default.boolean().default(!0),timeout:Kr.default.number().min(1e3).default(af.timeout).messages({"number.min":"CRL timeout must be at least 1000ms (1 second)"}),cacheTtl:Kr.default.number().min(1e3).default(af.cacheTtl).messages({"number.min":"CRL cacheTtl must be at least 1000ms (1 second)"}),failureMode:bO.default(af.failureMode),gracePeriod:Kr.default.number().min(0).default(af.gracePeriod).messages({"number.min":"CRL gracePeriod must be at least 0ms"})})),Ede=Kr.default.alternatives().try(Kr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...of}),Kr.default.object({enabled:Kr.default.boolean().default(!0),timeout:Kr.default.number().min(1e3).default(of.timeout).messages({"number.min":"OCSP timeout must be at least 1000ms (1 second)"}),cacheTtl:Kr.default.number().min(1e3).default(of.cacheTtl).messages({"number.min":"OCSP cacheTtl must be at least 1000ms (1 second)"}),errorCacheTtl:Kr.default.number().min(1e3).default(of.errorCacheTtl).messages({"number.min":"OCSP errorCacheTtl must be at least 1000ms (1 second)"}),failureMode:bO.default(of.failureMode)})),_de=Kr.default.object({failureMode:bO.default(pde),crl:hde.default({enabled:!0,...af}),ocsp:Ede.default({enabled:!0,...of})});a(K1,"validateAndParseCertificateVerificationConfig")});function tK(e){if(typeof e=="boolean"||e==null){if(e===AO&&IO)return Eo.trace?.("Using cached validation error result (primitive) - returning disabled"),!1;if(e===AO&&CT!==null)return Eo.trace?.("Using cached certificate verification config (primitive)"),CT;Eo.trace?.("Parsing and caching certificate verification config (primitive)"),AO=e;try{return CT=z1(e),IO=null,CT}catch(n){return IO=n,Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}if(j1.get(e))return Eo.trace?.("Using cached validation error result (object) - returning disabled"),!1;let r=W1.get(e);if(r!==void 0)return Eo.trace?.("Using cached certificate verification config (object)"),r;Eo.trace?.("Parsing and caching certificate verification config (object)");try{let n=z1(e);return W1.set(e,n),n}catch(n){return j1.set(e,n),Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}function z1(e){if(Eo.trace?.(`getCertificateVerificationConfig called with: ${JSON.stringify({mtlsConfig:e})}`),!e)return!1;let t=e===!0?void 0:e.certificateVerification;return Eo.trace?.(`Certificate verification config: ${JSON.stringify({verificationConfig:t})}`),t==null||t===!1?!1:K1(t===!0?{}:t)}var J1,Q1,Eo,X1,Z1,eK,W1,AO,CT,j1,IO,wO=se(()=>{J1=b(ir()),Q1=b(yt());Y1();Eo=(0,J1.loggerWithTag)("cert-verification-config"),X1=10080*60*1e3,Z1=3e5,eK=`Harper/${Q1.packageJson.version} CRL-Client`,W1=new WeakMap,AO=null,CT=null,j1=new WeakMap,IO=null;a(tK,"getCachedCertificateVerificationConfig");a(z1,"getCertificateVerificationConfig")});function Ih(e){return e===nK||e===gde}function Sde(e){return e===sK||e===iK}function NO(e){return e===nK?sK:iK}function Tde(){if(rK)return;rK=!0;let e=zl.CryptoEngine.prototype,t=zl.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return Ih(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return Ih(s)?{name:NO(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Sde(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=zl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(Ih(i)){let o=NO(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),o,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(Ih(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),o=s.toSchema().toBER(!1),c=new wh.X509Certificate(Buffer.from(i)),l=new wh.X509Certificate(Buffer.from(o));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,o]=n,c=o.algorithm.algorithmId;if(Ih(c)){let l=NO(c);try{let u=this.crypto?.subtle||this.subtle||zl.getCrypto(!0)?.subtle||wh.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",o.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return"unusedBits"in i.valueBlock&&i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var zl,wh,nK,gde,sK,iK,rK,oK=se(()=>{zl=b(require("pkijs")),wh=require("node:crypto"),nK="1.3.101.112",gde="1.3.101.113",sK="Ed25519",iK="Ed448",rK=!1;a(Ih,"isEd25519OrEd448");a(Sde,"isEdDSAAlgorithmName");a(NO,"getEdDSAAlgorithmName");a(Tde,"applyEd25519Patch");Tde()});var uK={};ye(uK,{CRLSignatureVerificationError:()=>Nh,performCRLCheck:()=>bde,verifyCRL:()=>PO});function yde(){return OT||(OT=wT(),OT.sourcedFrom(cf)),OT}function Rde(){return PT||(PT=ze({table:"hdb_crl_cache",database:"system",attributes:[{name:"distribution_point",isPrimaryKey:!0},{name:"issuer_dn"},{name:"crl_blob"},{name:"this_update"},{name:"next_update"},{name:"signature_valid"},{name:"expiresAt",expiresAt:!0,indexed:!0}]}),PT.sourcedFrom(OO)),PT}function cK(){return CO||(CO=ze({table:"hdb_revoked_certificates",database:"system",attributes:[{name:"composite_id",isPrimaryKey:!0},{name:"serial_number",indexed:!0},{name:"issuer_key_id",indexed:!0},{name:"revocation_date"},{name:"revocation_reason"},{name:"crl_source",indexed:!0},{name:"crl_next_update"},{name:"expiresAt",expiresAt:!0,indexed:!0}]})),CO}async function PO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ic(e,"CERTIFICATE"),i=Ic(t,"CERTIFICATE"),o=n??TO(s);if(o.length===0)return{valid:!0,status:"no-crl-distribution-points",method:"crl"};let c=IT(s,i,"crl"),l=await yde().get(c,{certPem:s,issuerPem:i,distributionPoint:o[0],config:{crl:r??{}}});if(!l)return Pr.error?.("Cache fetch returned null - this indicates a source configuration issue"),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"crl"}:(Pr.warn?.("CRL cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"});let u=l,d=l.wasLoadedFromSource?.();return Pr.trace?.(`CRL ${d?"source fetch":"cache hit"} for certificate`),{valid:u.status==="good",status:u.status,cached:!d,method:u.method||"crl"}}catch(s){return Pr.error?.(`CRL verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"crl"}:(Pr.warn?.("CRL check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"})}}async function bde(e,t,r,n){let s=n??TO(e);if(s.length===0)return{status:"good"};let i=V1(e),o=RO(t),c=yO(o,i);try{let u=await cK().get(c);if(u){let f=Date.now(),m=u;return m.crl_next_update>f?{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}:m.crl_next_update+r.gracePeriod>f?(Pr.warn?.("Using expired CRL data within grace period"),{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}):(Pr.warn?.("CRL data is too old, treating as unknown"),{status:"unknown",reason:"crl-expired"})}let d=await Ade(s,t,r);return d.upToDate?{status:"good",source:d.source}:(Pr.warn?.("CRL data is stale or missing, treating as unknown"),{status:"unknown",reason:d.reason||"crl-unavailable"})}catch(l){return Pr.error?.(`CRL lookup error: ${l}`),{status:"unknown",reason:l.message}}}async function Ade(e,t,r){let n=Date.now();for(let s of e)try{let i=Rde(),o=null,c=null;try{c=await i.get(s),(c&&c.next_update>n||c&&c.next_update+r.gracePeriod>n)&&(o=c)}catch{}o||(o=await lK(s,t,r.timeout));let l=o.next_update;if(l>n){if(!c)try{await i.put(s,o)}catch{}return{upToDate:!0,source:s}}else return l+r.gracePeriod>n?{upToDate:!0,source:s}:{upToDate:!1,reason:"crl-expired"}}catch(i){if(i instanceof Nh)throw i}return{upToDate:!1,reason:"no-current-crl-data"}}async function lK(e,t,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);try{let i=await fetch(e,{signal:n.signal,headers:{"User-Agent":eK}});if(clearTimeout(s),!i.ok)throw new Error(`CRL download failed: ${i.status}`);let o=Buffer.from(await i.arrayBuffer()),c,l=o.toString("utf8");l.includes("-----BEGIN X509 CRL-----")?c=Buffer.from(jl(l)):c=o;let u=LT.CertificateRevocationList.fromBER(c),d=LT.Certificate.fromBER(jl(t)),f=await u.verify({issuerCertificate:d});if(!f){let _=`CRL signature verification failed for: ${e}`;throw Pr.error?.(_),new Nh(_)}let m=u.thisUpdate.value.getTime(),p=u.nextUpdate?.value.getTime()??m+X1,h=d.issuer.typesAndValues.map(_=>`${_.type}=${_.value.valueBlock.value}`).join(","),E={distribution_point:e,issuer_dn:h,crl_blob:o,this_update:m,next_update:p,signature_valid:f,expiresAt:p};return Ide(u,t,e,p).catch(_=>{Pr.error?.(`Error processing revoked certificates: ${_}`)}),E}finally{clearTimeout(s)}}async function Ide(e,t,r,n){let s=cK(),i=RO(t),o=r;try{await wde(s,o)}catch(c){Pr.warn?.(`Failed to clear existing CRL entries: ${c}`)}if(e.revokedCertificates)for(let c of e.revokedCertificates)try{let l=c.userCertificate.valueBlock.valueHexView;if(!l){Pr.warn?.("Could not extract serial number from revoked certificate");continue}let u=Array.from(l).map(h=>h.toString(16).padStart(2,"0")).join(""),d=yO(i,u),f=c.revocationDate.value.getTime(),p={composite_id:d,serial_number:u,issuer_key_id:i,revocation_date:f,revocation_reason:"unspecified",crl_source:o,crl_next_update:n,expiresAt:n};await s.create(p.composite_id,p)}catch(l){Pr.warn?.(`Failed to process revoked certificate: ${l}`)}}async function wde(e,t){try{let r=e.search([{attribute:"crl_source",value:t}]);for await(let n of r)try{await e.delete(n.composite_id)}catch(s){Pr.warn?.(`Failed to delete revoked certificate entry: ${s}`)}}catch(r){throw Pr.error?.(`Failed to search for existing CRL entries: ${r}`),r}}var LT,aK,Nh,Pr,OT,OO,PT,CO,LO=se(()=>{LT=b(require("pkijs")),aK=b(ir());Oe();zi();NT();wO();DO();Nh=class extends Error{static{a(this,"CRLSignatureVerificationError")}constructor(t){super(t),this.name="CRLSignatureVerificationError"}},Pr=(0,aK.loggerWithTag)("crl-verification");a(yde,"getCertificateCacheTable");OO=class extends Xt{static{a(this,"CertificateRevocationListSource")}async get(t){let n=this.getContext()?.requestContext;if(!n?.distributionPoint||!n?.issuerPem)throw new Error(`No CRL data provided for cache key: ${t}`);let{distributionPoint:s,issuerPem:i,config:o}=n;try{let c=await lK(s,i,o.timeout),l=c.next_update,u=Date.now()+o.cacheTtl,d=Math.min(l,u);return{...c,expiresAt:d}}catch(c){if(Pr.error?.(`CRL fetch error for: ${s} - ${c}`),o.failureMode==="fail-closed"){let l=Date.now()+Z1;return{crl_id:t,distribution_point:s,issuer_dn:"unknown",crl_blob:Buffer.alloc(0),this_update:Date.now(),next_update:l,signature_valid:!1,expiresAt:l}}return Pr.warn?.("CRL fetch failed, not caching (fail-open mode)"),null}}};a(Rde,"getCRLCacheTable");a(cK,"getRevokedCertificateTable");a(PO,"verifyCRL");a(bde,"performCRLCheck");a(Ade,"checkCRLFreshness");a(lK,"downloadAndParseCRL");a(Ide,"processRevokedCertificates");a(wde,"clearExistingCRLEntries")});async function Nde(){vO||(vO=(await Promise.resolve().then(()=>(LO(),uK))).performCRLCheck),MO||(MO=(await Promise.resolve().then(()=>(UO(),fK))).performOCSPCheck)}var dK,Y0e,vO,MO,cf,DO=se(()=>{zi();dK=b(ir()),Y0e=(0,dK.loggerWithTag)("cert-verification-source");a(Nde,"loadVerificationFunctions");cf=class extends Xt{static{a(this,"CertificateVerificationSource")}async get(t){let r=t.id,s=this.getContext()?.requestContext;if(!s||!s.certPem||!s.issuerPem)return null;let{certPem:i,issuerPem:o,ocspUrls:c,config:l}=s,u;r.startsWith("crl:")?u="crl":r.startsWith("ocsp:")?u="ocsp":u="unknown",await Nde();let d,f;if(u==="crl"){f=l.crl;let p=s.distributionPoint?[s.distributionPoint]:void 0;d=await vO(i,o,f,p)}else if(u==="ocsp")f=l.ocsp,d=await MO(i,o,f,c);else throw new Error(`Unsupported verification method: ${u} for ID: ${r}`);let m=Date.now()+f.cacheTtl;return{certificate_id:r,status:d.status,reason:d.reason,checked_at:Date.now(),expiresAt:m,method:u}}}});var fK={};ye(fK,{performOCSPCheck:()=>Ode,verifyOCSP:()=>xO});function Cde(){return vT||(vT=wT(),vT.sourcedFrom(cf)),vT}async function xO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ic(e,"CERTIFICATE"),i=Ic(t,"CERTIFICATE"),o=IT(s,i,"ocsp"),c=await Cde().get(o,{certPem:s,issuerPem:i,ocspUrls:n,config:{ocsp:r??{}}});if(!c)return r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(DT.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return DT.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(s){return DT.error?.(`OCSP verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"ocsp"}:(DT.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Ode(e,t,r,n){try{let s=await(0,mK.getCertStatus)(e,{ca:t,timeout:r.timeout,...n?.length&&{ocspUrl:n[0]}});switch(s.status){case"good":return{status:"good"};case"revoked":return{status:"revoked",reason:s.revocationReason?.toString()||"unspecified"};default:return{status:"unknown",reason:"unknown-status"}}}catch(s){return{status:"unknown",reason:s.name==="AbortError"?"timeout":"ocsp-error"}}}var mK,pK,DT,vT,UO=se(()=>{oK();mK=require("easy-ocsp"),pK=b(ir());NT();DO();DT=(0,pK.loggerWithTag)("ocsp-verification");a(Cde,"getCertificateCacheTable");a(xO,"verifyOCSP");a(Ode,"performOCSPCheck")});async function lf(e,t){an.debug?.(`verifyCertificate called for: ${e.subject?.CN||"unknown"}`);let r=tK(t);if(r===!1)return an.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=q1(e);if(an.trace?.(`Certificate chain length: ${n.length}`),n.length<2||!n[0].issuer)return an.debug?.("Certificate chain insufficient for revocation checking - need certificate and issuer"),{valid:!0,status:"no-issuer-cert",method:"disabled"};let s=Ic(n[0].cert,"CERTIFICATE"),{crlUrls:i,ocspUrls:o}=$1(s);if(an.debug?.(`Certificate extensions: CRL distribution points=${i.length}, OCSP URLs=${o.length}`),i.length>0)if(r.crl.enabled)try{an.debug?.("Attempting CRL verification");let c=await PO(n[0].cert,n[0].issuer,r.crl,i);if(c.status==="good"||c.status==="revoked")return an.debug?.(`CRL verification result: ${c.status}`),c;an.debug?.(`CRL verification inconclusive: ${c.status}, trying OCSP fallback`)}catch(c){an.warn?.(`CRL verification failed: ${c}`)}else an.debug?.("Skipping CRL - disabled in configuration");else an.debug?.("Skipping CRL - no distribution points in certificate");if(o.length>0)if(r.ocsp.enabled)try{an.debug?.("Attempting OCSP verification");let c=await xO(n[0].cert,n[0].issuer,r.ocsp,o);return an.debug?.(`OCSP verification result: ${c.status}`),c}catch(c){an.warn?.(`OCSP verification failed: ${c}`)}else an.debug?.("Skipping OCSP - disabled in configuration");else an.debug?.("Skipping OCSP - no responder URLs in certificate");return r.failureMode==="fail-closed"?{valid:!1,status:"no-verification-available",method:"disabled"}:{valid:!0,status:"verification-unavailable-allowed",method:"disabled"}}var hK,an,MT=se(()=>{hK=b(ir());NT();wO();UO();LO();an=(0,hK.loggerWithTag)("cert-verification");a(lf,"verifyCertificate")});var sa={};ye(sa,{buildReplicationMtlsConfig:()=>AK,clearThisNodeName:()=>Fde,disableReplication:()=>vde,enabledDatabases:()=>bc,forEachReplicatedDatabase:()=>gc,getThisNodeId:()=>AT,getThisNodeName:()=>tt,getThisNodeUrl:()=>Sc,hostnameToUrl:()=>kT,lastTimeInAuditStore:()=>ph,monitorNodeCAs:()=>IK,replicateOperation:()=>Hde,replicationCertificateAuthorities:()=>ia,sendOperationToNode:()=>Ch,servers:()=>Lde,setReplicator:()=>NK,start:()=>Dde,startOnMainThread:()=>WC,subscribeToNode:()=>gh,unsubscribeFromNode:()=>fT,urlToNodeName:()=>Ti});function AK(e){return e?.mtls&&typeof e.mtls=="object"?e.mtls:!0}function Dde(e){if(!e.port&&!e.securePort&&(e.port=Ks.default.get(x.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ks.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),!tt())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let i of Eh(e))t.set(Ti(i.url),i);Mde(e);let r=AK(e);e={isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e,mtls:r};let n=Ue.ws(async(i,o,c,l)=>{if(It.debug("Incoming WS connection received "+o.url),o.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return l(i,o,c);i._socket.unref(),Ah(i,e,c.then(()=>o?.user)),i.on("error",u=>{u.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,u.message)})},e);e.runFirst=!0,Ue.http(async(i,o)=>{if(i.isWebSocket&&i.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+i.authorized),!i.authorized&&i._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${i.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,i._nodeRequest.socket.authorizationError);let c=Gt().primaryStore;if(i.authorized&&i.peerCertificate.subjectaltname){let l=(0,RK.getHostnamesFromCertificate)(i.peerCertificate),u;for(let d of l)if(u=d&&(c.get(d)||t.get(d)),u)break;if(u){let d=await lf(i.peerCertificate,e.mtls);if(!d.valid){It.warn("Certificate verification failed:",d.status,"for node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}if(u?.revoked_certificates?.includes(i.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}else i.user=u}else It.warn(`No node found for certificate common name/SANs: ${l}, available nodes are ${Array.from(c.getRange({}).filter(({value:d})=>d).map(({key:d})=>d)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let l=c.get(i.ip)||t.get(i.ip);l?i.user=l:It.warn(`No node found for IP address ${i.ip}, available nodes are ${Array.from(new Set([...c.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return o(i)},e);let s=[];for(let i of n)if(i.secureContexts){let o=a(()=>{let c=new Set(i.secureContexts.values());i.defaultContext&&c.add(i.defaultContext);for(let l of c)try{let u=Array.from(ia);l.options.availableCAs&&u.push(...l.options.availableCAs.values());let d={...l.options,ca:u};l.updatedContext=FT.createSecureContext(d)}catch(u){It.error("Error creating replication TLS config",u)}},"updateContexts");i.secureContextsListeners.push(o),s.push(o),Ks.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1&&o()}IK(()=>{for(let i of s)i()})}function IK(e){let t=0;Qd(r=>{r?.ca&&(ia.add(r.ca),ia.size!==t&&(t=ia.size,e?.()))})}function vde(e=!0){bK=e}function Mde(e){bK||(lt(),bc=e.databases,gc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Ac;for(let[s,i]of xT){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];NK(r,s,e),EO.get(s)?.forEach(i=>i(s))}}))}function NK(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 wK extends Xt{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Ac,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(It.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new ns,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Ue.hostname)continue;let E=xde(h,wK.subscription,e);if(E?.isConnected){let _=Jd(t.auditStore,e,h)[RT];(!d||_<m)&&(d=E,f=h,m=_)}}if(!d)throw l||new TK.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Pde++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",BT,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Ude(e,t,r,n,s,i){let o=t+"-"+e,c=xT.get(o);c||(c=new Map,xT.set(o,c));let l=c.get(n);if(l)return l;if(r)return c.set(n,l=new sf(t,r,n,s,i)),l.connect(),l.once("finished",()=>c.delete(n)),l}function xde(e,t,r){let n=EK.get(e);n||(n=new Map,EK.set(e,n));let s=n.get(r);if(s)return s;let i=Gt().primaryStore.get(e);return i?.url&&(s=new sf(i.url,t,r,e,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Ch(e,t,r){r||(r={}),r.serverName=e.name;let n=await bT(e.url,r),s=Ah(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function gh(e){try{yK.isMainThread&&It.warn("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Ac.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Ac.set(e.database,t)}let r=Ude(e.nodes[0].url,e.url,t,e.database,e.name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>hh(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function fT({url:e,nodes:t,database:r}){It.trace("Unsubscribing from node",e,r,"nodes",Array.from(Gt().primaryStore.getRange({})));let n=e+"-"+(t[0]?.url??e),s=xT.get(n);if(s){let i=s.get(r);i&&(i.unsubscribe(),s.delete(r))}}function Bde(){if(BO!==void 0)return BO;let e=Ks.default.get(x.OPERATIONSAPI_TLS_CERTIFICATE)||Ks.default.get(x.TLS_CERTIFICATE);if(e)return BO=new gK.X509Certificate((0,SK.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function tt(){return BT||(BT=Ks.default.get("replication_hostname")??Ti(Ks.default.get("replication_url"))??Bde()??_K("operationsapi_network_secureport")??_K("operationsapi_network_port")??"127.0.0.1")}function Fde(){BT=void 0}function _K(e){let t=Ks.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function UT(e){let t=Ks.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function AT(e){return mh(e)?.[tt()]}function Sc(){let e=Ks.default.get("replication_url");return e||kT(tt())}function kT(e){let t=UT("replication_port");if(t)return`ws://${e}:${t}`;if(t=UT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=UT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=UT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ti(e){if(e)return new URL(e).hostname}function gc(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return rh(n=>{r(n)}),ql((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):kde(n)&&t(s,n,!1)}a(r,"forDatabase")}function kde(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function ph(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Hde(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>Ch(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ue.nodes[s]?.name,i})}return t}var Ks,It,gK,SK,FT,TK,yK,RK,bK,Pde,Lde,ia,bc,xT,EK,BO,BT,Ss=se(()=>{Oe();zi();ku();_O();Hr();Ks=b(fe()),It=b(Q()),gK=require("crypto");MT();SK=require("fs");Sh();Xd();G();YC();FT=b(require("node:tls")),TK=b(Ee()),yK=require("worker_threads"),RK=b(ys()),Pde=1,Lde=[],ia=Ks.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1?new Set(FT.rootCertificates):new Set;a(AK,"buildReplicationMtlsConfig");a(Dde,"start");a(IK,"monitorNodeCAs");a(vde,"disableReplication");a(Mde,"assignReplicationSource");a(NK,"setReplicator");xT=new Map;a(Ude,"getSubscriptionConnection");EK=new Map;a(xde,"getRetrievalConnectionByName");a(Ch,"sendOperationToNode");a(gh,"subscribeToNode");a(fT,"unsubscribeFromNode");a(Bde,"getCommonNameFromCert");a(tt,"getThisNodeName");a(Fde,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return tt()}});a(_K,"getHostFromListeningPort");a(UT,"getPortFromListeningPort");a(AT,"getThisNodeId");Ue.replication={getThisNodeId:AT,exportIdMapping:mh};a(Sc,"getThisNodeUrl");a(kT,"hostnameToUrl");a(Ti,"urlToNodeName");a(gc,"forEachReplicatedDatabase");a(kde,"hasExplicitlyReplicatedTable");a(ph,"lastTimeInAuditStore");a(Hde,"replicateOperation")});var VT=M((EBe,DK)=>{"use strict";var uf=MV(),{validateBySchema:Oh}=mt(),{commonValidators:df,schemaRegex:FO}=Qi(),gr=require("joi"),Gde=Q(),qde=require("uuid").v4,qT=zo(),ff=(G(),v(j)),$de=require("util"),wc=fs(),{handleHDBError:ca,hdbErrors:Vde,ClientError:Jl}=Ee(),{HDB_ERROR_MSGS:HT,HTTP_STATUS_CODES:la}=Vde,{SchemaEventMsg:$T}=ls(),CK=Sr(),{getDatabases:Kde}=(Oe(),v(ft)),{transformReq:mf}=ae(),{replicateOperation:OK}=(Ss(),v(sa)),{cleanupOrphans:Yde}=(ss(),v(J_)),GT=gr.string().min(1).max(df.schema_length.maximum).pattern(FO).messages({"string.pattern.base":"{:#label} "+df.schema_format.message}),Wde=gr.string().min(1).max(df.schema_length.maximum).pattern(FO).messages({"string.pattern.base":"{:#label} "+df.schema_format.message}).required(),jde=gr.string().min(1).max(df.schema_length.maximum).pattern(FO).messages({"string.pattern.base":"{:#label} "+df.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();DK.exports={createSchema:zde,createSchemaStructure:PK,createTable:Jde,createTableStructure:LK,createAttribute:tfe,dropSchema:Qde,dropTable:Xde,dropAttribute:Zde,getBackup:rfe,cleanupOrphanBlobs:nfe};async function zde(e){let t=await PK(e);return qT.signalSchemaChange(new $T(process.pid,e.operation,e.schema)),t}a(zde,"createSchema");async function PK(e){let t=Oh(e,gr.object({database:GT,schema:GT}));if(t)throw new Jl(t.message);if(mf(e),!await uf.checkSchemaExists(e.schema))throw ca(new Error,HT.SCHEMA_EXISTS_ERR(e.schema),la.BAD_REQUEST,ff.LOG_LEVELS.ERROR,HT.SCHEMA_EXISTS_ERR(e.schema),!0);return await wc.createSchema(e),`database '${e.schema}' successfully created`}a(PK,"createSchemaStructure");async function Jde(e){return mf(e),e.hash_attribute=e.primary_key??e.hash_attribute,await LK(e)}a(Jde,"createTable");async function LK(e){let t=Oh(e,gr.object({database:GT,schema:GT,table:Wde,residence:gr.array().items(gr.string().min(1)).optional(),hash_attribute:jde}));if(t)throw new Jl(t.message);if(!await uf.checkSchemaTableExists(e.schema,e.table))throw ca(new Error,HT.TABLE_EXISTS_ERR(e.schema,e.table),la.BAD_REQUEST,ff.LOG_LEVELS.ERROR,HT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:qde(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await wc.createTable(n,e);else throw ca(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",la.BAD_REQUEST);else await wc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(LK,"createTableStructure");async function Qde(e){let t=Oh(e,gr.object({database:gr.string(),schema:gr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Jl(t.message);mf(e);let r=await uf.checkSchemaExists(e.schema);if(r)throw ca(new Error,r,la.NOT_FOUND,ff.LOG_LEVELS.ERROR,r,!0);let n=await uf.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await wc.dropSchema(e),qT.signalSchemaChange(new $T(process.pid,e.operation,e.schema)),await CK.purgeSchemaTableStreams(e.schema,s);let i=await OK(e);return i.message=`successfully deleted '${e.schema}'`,i}a(Qde,"dropSchema");async function Xde(e){let t=Oh(e,gr.object({database:gr.string(),schema:gr.string(),table:gr.string().required()}));if(t)throw new Jl(t.message);mf(e);let r=await uf.checkSchemaTableExists(e.schema,e.table);if(r)throw ca(new Error,r,la.NOT_FOUND,ff.LOG_LEVELS.ERROR,r,!0);await wc.dropTable(e),await CK.purgeTableStream(e.schema,e.table);let n=await OK(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(Xde,"dropTable");async function Zde(e){let t=Oh(e,gr.object({database:gr.string(),schema:gr.string(),table:gr.string().required(),attribute:gr.string().required()}));if(t)throw new Jl(t.message);mf(e);let r=await uf.checkSchemaTableExists(e.schema,e.table);if(r)throw ca(new Error,r,la.NOT_FOUND,ff.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ca(new Error,"You cannot drop a hash attribute",la.BAD_REQUEST,void 0,void 0,!0);if(ff.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ca(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,la.BAD_REQUEST,void 0,void 0,!0);try{return await wc.dropAttribute(e),efe(e),qT.signalSchemaChange(new $T(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Gde.error(`Got an error deleting attribute ${$de.inspect(e)}.`),n}}a(Zde,"dropAttribute");function efe(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(efe,"dropAttributeFromGlobal");async function tfe(e){mf(e);let t=Kde()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw ca(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,la.BAD_REQUEST,void 0,void 0,!0);return await wc.createAttribute(e),qT.signalSchemaChange(new $T(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(tfe,"createAttribute");function rfe(e){return wc.getBackup(e)}a(rfe,"getBackup");function nfe(e){if(!e.database)throw new Jl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Jl(`Unknown database '${e.database}'`);return Yde(databases[e.database],e.database),{message:"Orphaned blobs cleanup started, check logs for progress"}}a(nfe,"cleanupOrphanBlobs")});var MK=M((gBe,vK)=>{"use strict";var{OPERATIONS_ENUM:sfe}=(G(),v(j)),kO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=sfe.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};vK.exports=kO});var HO=M((yBe,kK)=>{"use strict";var ife=fs(),TBe=MK(),KT=ae(),YT=(G(),v(j)),ofe=fe(),{handleHDBError:UK,hdbErrors:afe}=Ee(),{HDB_ERROR_MSGS:xK,HTTP_STATUS_CODES:BK}=afe,cfe=Object.values(YT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),FK="To use this operation audit log must be enabled in harperdb-config.yaml";kK.exports=lfe;async function lfe(e){if(KT.isEmpty(e.schema))throw new Error(xK.SCHEMA_REQUIRED_ERR);if(KT.isEmpty(e.table))throw new Error(xK.TABLE_REQUIRED_ERR);if(!ofe.get(YT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw UK(new Error,FK,BK.BAD_REQUEST,YT.LOG_LEVELS.ERROR,FK,!0);let t=KT.checkSchemaTableExist(e.schema,e.table);if(t)throw UK(new Error,t,BK.NOT_FOUND,YT.LOG_LEVELS.ERROR,t,!0);if(!KT.isEmpty(e.search_type)&&cfe.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await ife.readAuditLog(e)}a(lfe,"readAuditLog")});var GK=M((bBe,HK)=>{"use strict";var{OPERATIONS_ENUM:ufe}=(G(),v(j)),GO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=ufe.GET_BACKUP,this.schema=t,this.table=r}};HK.exports=GO});var VK=M((NBe,$K)=>{"use strict";var dfe=fs(),IBe=GK(),qO=ae(),ffe=(G(),v(j)),wBe=fe(),{handleHDBError:mfe,hdbErrors:pfe}=Ee(),{HDB_ERROR_MSGS:qK,HTTP_STATUS_CODES:hfe}=pfe;$K.exports=Efe;async function Efe(e){if(qO.isEmpty(e.schema))throw new Error(qK.SCHEMA_REQUIRED_ERR);if(qO.isEmpty(e.table))throw new Error(qK.TABLE_REQUIRED_ERR);let t=qO.checkSchemaTableExist(e.schema,e.table);if(t)throw mfe(new Error,t,hfe.NOT_FOUND,ffe.LOG_LEVELS.ERROR,t,!0);return await dfe.getBackup(readAuditLogObject)}a(Efe,"getBackup")});var WK=M((OBe,YK)=>{"use strict";var _fe=fe(),ua=require("joi"),gfe=mt(),KK=require("moment"),Sfe=require("fs-extra"),VO=require("path"),Tfe=require("lodash"),Ph=(G(),v(j)),{LOG_LEVELS:Ql}=(G(),v(j)),yfe="YYYY-MM-DD hh:mm:ss",Rfe=VO.resolve(__dirname,"../logs");YK.exports=function(e){return gfe.validateBySchema(e,bfe)};var bfe=ua.object({from:ua.custom($O),until:ua.custom($O),to:ua.custom($O),level:ua.valid(Ql.NOTIFY,Ql.FATAL,Ql.ERROR,Ql.WARN,Ql.INFO,Ql.DEBUG,Ql.TRACE),order:ua.valid("asc","desc"),limit:ua.number().min(1),start:ua.number().min(0),log_name:ua.custom(Afe)});function $O(e,t){if(KK(e,KK.ISO_8601).format(yfe)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a($O,"validateDatetime");function Afe(e,t){if(Tfe.invert(Ph.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=_fe.get(Ph.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Ph.LOG_NAMES.HDB:e,i=s===Ph.LOG_NAMES.INSTALL?VO.join(Rfe,Ph.LOG_NAMES.INSTALL):VO.join(n,s);return Sfe.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Afe,"validateReadLogPath")});var YO=M((LBe,zK)=>{"use strict";var WT=(G(),v(j)),Ife=Q(),wfe=fe(),Nfe=WK(),KO=require("path"),jK=require("fs-extra"),{once:Cfe}=require("events"),{handleHDBError:Ofe,hdbErrors:Pfe}=Ee(),{PACKAGE_ROOT:Lfe}=yt(),{replicateOperation:Dfe}=(Ss(),v(sa)),vfe=KO.join(Lfe,"logs"),Mfe=1e3,Ufe=200;zK.exports=xfe;async function xfe(e){let t=Nfe(e);if(t)throw Ofe(t,t.message,Pfe.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Dfe(e),n=wfe.get(WT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?WT.LOG_NAMES.HDB:e.log_name,i=s===WT.LOG_NAMES.INSTALL?KO.join(vfe,WT.LOG_NAMES.INSTALL):KO.join(n,s);e.to===void 0&&e.until!==void 0&&(e.to=e.until);let o=e.level!==void 0,c=o?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.to!==void 0,f=d?new Date(e.to):void 0,m=e.limit===void 0?Mfe:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,_=0;p==="desc"&&!u&&!f&&(_=Math.max(jK.statSync(i).size-(E+5)*Ufe,0));let R=jK.createReadStream(i,{start:_});R.on("error",q=>{Ife.error(q)});let S=0,y=[],w="",I;R.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d.]+Z) \[(.+?)]: /g;q=w+q;let z=0,Y;for(;(Y=k.exec(q))&&!R.destroyed;){I&&(I.message=q.slice(z,Y.index),H(I));let[ce,de,te]=Y,Se=te.split("] ["),Ne=Se[0],Ke=Se[1];Se.splice(0,2),I={timestamp:de,thread:Ne,level:Ke,tags:Se,message:""},z=Y.index+ce.length}w=q.slice(z)}),R.on("end",q=>{R.destroyed||I&&(I.message=w.trim(),H(I))}),R.resume();function H(q){let k,z,Y;switch(!0){case(o&&l&&d):k=new Date(q.timestamp),z=new Date(u),Y=new Date(f),q.level===c&&k>=z&&k<=Y&&S<h?S++:q.level===c&&k>=z&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(o&&l):k=new Date(q.timestamp),z=new Date(u),q.level===c&&k>=z&&S<h?S++:q.level===c&&k>=z&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(o&&d):k=new Date(q.timestamp),Y=new Date(f),q.level===c&&k<=Y&&S<h?S++:q.level===c&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(l&&d):k=new Date(q.timestamp),z=new Date(u),Y=new Date(f),k>=z&&k<=Y&&S<h?S++:k>=z&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case o:q.level===c&&S<h?S++:q.level===c&&(_o(q,p,y),S++,S===E&&R.destroy());break;case l:k=new Date(q.timestamp),z=new Date(u),k>=z&&S<h?S++:k>=z&&S>=h&&(_o(q,p,y),S++,S===E&&R.destroy());break;case d:k=new Date(q.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(_o(q,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(_o(q,p,y),S++,S===E&&R.destroy())}}a(H,"onLogMessage"),await Cfe(R,"close");let X=await r;if(X.replicated){for(let q of y)q.node=server.hostname;for(let q of X.replicated){let k=q.node;if(q.status==="failed")_o({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${q.reason}`},p,y);else for(let z of q.results)z.node=k,_o(z,p,y)}}return y}a(xfe,"readLog");function _o(e,t,r){t==="desc"?Bfe(e,r):t==="asc"?Ffe(e,r):r.push(e)}a(_o,"pushLineToResult");function Bfe(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(Bfe,"insertDescending");function Ffe(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(Ffe,"insertAscending")});var jT=M((BBe,ZK)=>{"use strict";var WO=require("joi"),{string:pf,boolean:JK,date:kfe}=WO.types(),Hfe=mt(),{validateSchemaExists:vBe,validateTableExists:MBe,validateSchemaName:UBe}=Qi(),Gfe=(G(),v(j)),qfe=Pt(),QK=fe();QK.initSync();var xBe=pf.invalid(QK.get(Gfe.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(qfe.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),XK={operation:pf.valid("add_node","update_node","set_node_replication"),node_name:pf.optional(),subscriptions:WO.array().items({table:pf.optional(),schema:pf.optional(),database:pf.optional(),subscribe:JK.required(),publish:JK.required().custom(Vfe),start_time:kfe.iso()})};function $fe(e){return Hfe.validateBySchema(e,WO.object(XK))}a($fe,"addUpdateNodeValidator");function Vfe(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(Vfe,"checkForFalsy");ZK.exports={addUpdateNodeValidator:$fe,validationSchema:XK}});var hf=M((kBe,eY)=>{"use strict";var jO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},zO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};eY.exports={Node:jO,NodeSubscription:zO}});var rY=M((GBe,tY)=>{"use strict";var Kfe=(G(),v(j)).OPERATIONS_ENUM,JO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Kfe.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};tY.exports=JO});var Lh=M(($Be,nY)=>{"use strict";var QO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},XO=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};nY.exports={RemotePayloadObject:QO,RemotePayloadSubscription:XO}});var iY=M((KBe,sY)=>{"use strict";var ZO=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};sY.exports=ZO});var aY=M((QBe,oY)=>{"use strict";var Yfe=iY(),WBe=Jt(),jBe=Et(),Wfe=Q(),{getSchemaPath:zBe,getTransactionAuditStorePath:JBe}=Rt(),{getDatabases:jfe}=(Oe(),v(ft));oY.exports=zfe;async function zfe(e){let t=new Yfe;try{let r=jfe()[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){Wfe.warn(`unable to stat table dbi due to ${r}`)}return t}a(zfe,"lmdbGetTableSize")});var lY=M((ZBe,cY)=>{"use strict";var eP=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};cY.exports=eP});var vh=M((iFe,mY)=>{"use strict";var Jfe=require("fs-extra"),Qfe=require("path"),Rn=require("systeminformation"),Nc=Q(),uY=Sr(),tFe=Pt(),Ef=(G(),v(j)),Xfe=aY(),Zfe=Vl(),{getThreadInfo:dY}=st(),Dh=fe();Dh.initSync();var eme=lY(),{openEnvironment:rFe}=Et(),{getSchemaPath:nFe}=Rt(),{database:sFe,databases:tP}=(Oe(),v(ft)),zT;mY.exports={getHDBProcessInfo:iP,getNetworkInfo:aP,getDiskInfo:oP,getMemoryInfo:sP,getCPUInfo:nP,getTimeInfo:rP,getSystemInformation:cP,systemInformation:tme,getTableSize:lP,getMetrics:uP};function rP(){return Rn.time()}a(rP,"getTimeInfo");async function nP(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await Rn.cpu();d.cpu_speed=await Rn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:_,cpus:R,...S}=await Rn.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:w,rawLoadIdle:I,rawLoadIrq:H,rawLoadNice:X,rawLoadSystem:q,rawLoadUser:k,...z}=y;S.cpus.push(z)}),d.current_load=S,d}catch(e){return Nc.error(`error in getCPUInfo: ${e}`),{}}}a(nP,"getCPUInfo");async function sP(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Rn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Nc.error(`error in getMemoryInfo: ${e}`),{}}}a(sP,"getMemoryInfo");async function iP(){let e={core:[],clustering:[]};try{let t=await Rn.processes(),r;try{r=Number.parseInt(await Jfe.readFile(Qfe.join(Dh.get(Ef.CONFIG_PARAMS.ROOTPATH),Ef.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Ef.NODE_ERROR_CODES.ENOENT)Nc.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 Nc.error(`error in getHDBProcessInfo: ${t}`),e}}a(iP,"getHDBProcessInfo");async function oP(){let e={};try{if(!Dh.get(Ef.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Rn.disksIO();e.io=i;let{rxSec:o,txSec:c,wxSec:l,...u}=await Rn.fsStats();return e.read_write=u,e.size=await Rn.fsSize(),e}catch(t){return Nc.error(`error in getDiskInfo: ${t}`),e}}a(oP,"getDiskInfo");async function aP(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Dh.get(Ef.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Rn.networkInterfaceDefault(),e.latency=await Rn.inetChecksite("google.com"),(await Rn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await Rn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return Nc.error(`error in getNetworkInfo: ${t}`),e}}a(aP,"getNetworkInfo");async function cP(){if(zT!==void 0)return zT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Rn.osInfo();e=c;let l=await Rn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,zT=e,zT}catch(t){return Nc.error(`error in getSystemInformation: ${t}`),e}}a(cP,"getSystemInformation");async function lP(){let e=[],t=await Zfe.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Xfe(n));return e}a(lP,"getTableSize");async function uP(){let e={};for(let t in tP){let r=e[t]={},n=r.tables={};for(let s in tP[t])try{let i=tP[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Nc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(uP,"getMetrics");async function fY(){if(Dh.get(Ef.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await uY.getNATSReferences(),t=await uY.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(fY,"getNatsStreamInfo");async function tme(e){let t=new eme;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await cP(),t.time=rP(),t.cpu=await nP(),t.memory=await sP(),t.disk=await oP(),t.network=await aP(),t.harperdb_processes=await iP(),t.table_size=await lP(),t.metrics=await uP(),t.threads=await dY(),t.replication=await fY(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await cP();break;case"time":t.time=rP();break;case"cpu":t.cpu=await nP();break;case"memory":t.memory=await sP();break;case"disk":t.disk=await oP();break;case"network":t.network=await aP();break;case"harperdb_processes":t.harperdb_processes=await iP();break;case"table_size":t.table_size=await lP();break;case"database_metrics":case"metrics":t.metrics=await uP();break;case"threads":t.threads=await dY();break;case"replication":t.replication=await fY();break;default:break}return t}a(tme,"systemInformation")});var da=M((uFe,_Y)=>{"use strict";var rme=Vn(),dP=ae(),nme=require("util"),Xl=(G(),v(j)),pY=fe();pY.initSync();var sme=CC(),hY=gn(),{Node:aFe,NodeSubscription:cFe}=hf(),ime=dd(),ome=rY(),{RemotePayloadObject:ame,RemotePayloadSubscription:cme}=Lh(),{handleHDBError:lme,hdbErrors:ume}=Ee(),{HTTP_STATUS_CODES:dme,HDB_ERROR_MSGS:fme}=ume,mme=di(),pme=vh(),{packageJson:hme}=yt(),{getDatabases:Eme}=(Oe(),v(ft)),lFe=nme.promisify(sme.authorize),_me=hY.searchByHash,gme=hY.searchByValue;_Y.exports={isEmpty:Sme,getNodeRecord:Tme,upsertNodeRecord:yme,buildNodePayloads:Rme,checkClusteringEnabled:bme,getAllNodeRecords:Ame,getSystemInfo:Ime,reverseSubscription:EY};function Sme(e){return e==null}a(Sme,"isEmpty");async function Tme(e){let t=new ime(Xl.SYSTEM_SCHEMA_NAME,Xl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return _me(t)}a(Tme,"getNodeRecord");async function yme(e){let t=new ome(Xl.SYSTEM_SCHEMA_NAME,Xl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return rme.upsert(t)}a(yme,"upsertNodeRecord");function EY(e){if(dP.isEmpty(e.subscribe)||dP.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(EY,"reverseSubscription");function Rme(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,d=dP.getTableHashAttribute(l,u),{subscribe:f,publish:m}=EY(c),p=Eme()[l]?.[u],h=new cme(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new ame(r,t,s,n)}a(Rme,"buildNodePayloads");function bme(){if(!pY.get(Xl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw lme(new Error,fme.CLUSTERING_NOT_ENABLED,dme.BAD_REQUEST,void 0,void 0,!0)}a(bme,"checkClusteringEnabled");async function Ame(){let e=new mme(Xl.SYSTEM_SCHEMA_NAME,Xl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await gme(e))}a(Ame,"getAllNodeRecords");async function Ime(){let e=await pme.getSystemInformation();return{hdb_version:hme.version,node_version:e.node_version,platform:e.platform}}a(Ime,"getSystemInfo")});var fP=M((fFe,IY)=>{"use strict";var JT=Sr(),gY=ae(),SY=Pt(),TY=(G(),v(j)),QT=Q(),yY=VT(),wme=gp(),{RemotePayloadObject:Nme}=Lh(),{handleHDBError:RY,hdbErrors:Cme}=Ee(),{HTTP_STATUS_CODES:bY}=Cme,{NodeSubscription:AY}=hf();IY.exports=Ome;async function Ome(e,t){let r;try{r=await JT.request(`${t}.${SY.REQUEST_SUFFIX}`,new Nme(TY.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),QT.trace("Response from remote describe all request:",r)}catch(o){QT.error(`addNode received error from describe all request to remote node: ${o}`);let c=JT.requestErrorHandler(o,"add_node",t);throw RY(new Error,c,bY.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===SY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw RY(new Error,o,bY.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===TY.SYSTEM_SCHEMA_NAME){await JT.createLocalTableStream(l,c);let h=new AY(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=gY.doesSchemaExist(l),d=n[l]!==void 0,f=c?gY.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(o);continue}if(!u&&d&&(QT.trace(`addNode creating schema: ${l}`),await yY.createSchema({operation:"create_schema",schema:l})),!f&&m){QT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new wme(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await yY.createTable(h)}await JT.createLocalTableStream(l,c);let p=new AY(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p)}return{added:i,skipped:s}}a(Ome,"reviewSubscriptions")});var _f={};ye(_f,{addNodeBack:()=>mP,removeNodeBack:()=>pP,setNode:()=>vme});async function vme(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=Ti(t)):t=kT(r);let n=(0,NY.validateBySchema)(e,Dme);if(n)throw(0,fa.handleHDBError)(n,n.message,Lme.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new fa.ClientError("url or hostname is required for remove_node operation");let p=r,h=Gt(),E=await h.get(p);if(!E)throw new fa.ClientError(p+" does not exist");try{await Ch({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?tt():p},void 0)}catch(_){Rs.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,_)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new fa.ClientError("url required for this operation");let s=Sc();if(s==null)throw new fa.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,Ys.getReplicationCert)();let p=await(0,Ys.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,Ys.createCsr)(),Rs.info("Sending CSR to target node:",t)):p&&(c=p.certificate,Rs.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,Oc.get)(x.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Oc.get)(x.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Oc.get)(x.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(wY):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=wY(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Ch({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,Rs.warn("Error adding node:",t,"to cluster:",p),d=p}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(Rs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ys.setCertTable)({name:Pme.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ys.setCertTable)({name:tt(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,Oc.get)(x.REPLICATION_SHARD)!==void 0&&(p.shard=(0,Oc.get)(x.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await ra(tt(),p)}await ra(u?u.nodeName:f.name??Ti(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 mP(e){Rs.trace("addNodeBack received request:",e);let t=await(0,Ys.signCertificate)(e),r;e.csr?(r=t.signingCA,Rs.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,Rs.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Ys.getReplicationCertAuth)();if(n.replicates){let i={url:Sc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Oc.get)(x.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Oc.get)(x.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await ra(tt(),i)}return await ra(e.hostname,n),t.nodeName=tt(),t.usingCA=s?.certificate,Rs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function pP(e){Rs.trace("removeNodeBack received request:",e),await Gt().delete(e.name)}function wY(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ys,NY,Cc,Oc,Rs,fa,Pme,Lme,Dme,gf=se(()=>{Ys=b(ys()),NY=b(mt()),Cc=b(require("joi")),Oc=b(fe());G();Sh();Xd();Ss();Rs=b(Q()),fa=b(Ee()),{pki:Pme}=require("node-forge"),{HTTP_STATUS_CODES:Lme}=fa.hdbErrors,Dme=Cc.default.object({hostname:Cc.default.string(),verify_tls:Cc.default.boolean(),replicates:Cc.default.boolean(),subscriptions:Cc.default.array(),revoked_certificates:Cc.default.array(),shard:Cc.default.number()});a(vme,"setNode");a(mP,"addNodeBack");a(pP,"removeNodeBack");a(wY,"reverseSubscription")});var ry=M((yFe,OY)=>{"use strict";var{handleHDBError:XT,hdbErrors:Mme}=Ee(),{HTTP_STATUS_CODES:ZT}=Mme,{addUpdateNodeValidator:Ume}=jT(),ey=Q(),ty=(G(),v(j)),CY=Pt(),xme=ae(),Mh=Sr(),Uh=da(),hP=fe(),Bme=fP(),{Node:Fme,NodeSubscription:kme}=hf(),{broadcast:Hme}=st(),{setNode:Gme}=(gf(),v(_f)),SFe=fe(),TFe=(G(),v(j)),qme="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",$me="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Vme=hP.get(ty.CONFIG_PARAMS.CLUSTERING_NODENAME);OY.exports=Kme;async function Kme(e,t=!1){if(ey.trace("addNode called with:",e),hP.get(ty.CONFIG_PARAMS.REPLICATION_URL)||hP.get(ty.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Gme(e);Uh.checkClusteringEnabled();let r=Ume(e);if(r)throw XT(r,r.message,ZT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Uh.getNodeRecord(n);if(!xme.isEmptyOrZeroLength(f))throw XT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,ZT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Bme(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=qme,o;let c=Uh.buildNodePayloads(s,Vme,ty.OPERATIONS_ENUM.ADD_NODE,await Uh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new kme(p.schema,p.table,p.publish,p.subscribe))}ey.trace("addNode sending remote payload:",c);let u;try{u=await Mh.request(`${n}.${CY.REQUEST_SUFFIX}`,c)}catch(f){ey.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await Mh.updateRemoteConsumer(E,n)}let m=Mh.requestErrorHandler(f,"add_node",n);throw XT(new Error,m,ZT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===CY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw XT(new Error,f,ZT.INTERNAL_SERVER_ERROR,"error",f)}ey.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await Mh.updateRemoteConsumer(p,n),p.subscribe===!0&&await Mh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new Fme(n,l,u.system_info);return await Uh.upsertNodeRecord(d),Hme({type:"nats_update"}),i.length>0?o.message=$me:o.message=`Successfully added '${n}' to manifest`,o}a(Kme,"addNode")});var SP=M((AFe,LY)=>{"use strict";var{handleHDBError:EP,hdbErrors:Yme}=Ee(),{HTTP_STATUS_CODES:_P}=Yme,{addUpdateNodeValidator:Wme}=jT(),xh=Q(),ny=(G(),v(j)),PY=Pt(),bFe=ae(),Bh=Sr(),Fh=da(),gP=fe(),{cloneDeep:jme}=require("lodash"),zme=fP(),{Node:Jme,NodeSubscription:Qme}=hf(),{broadcast:Xme}=st(),{setNode:Zme}=(gf(),v(_f)),epe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",tpe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",rpe=gP.get(ny.CONFIG_PARAMS.CLUSTERING_NODENAME);LY.exports=npe;async function npe(e){if(xh.trace("updateNode called with:",e),gP.get(ny.CONFIG_PARAMS.REPLICATION_URL)??gP.get(ny.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Zme(e);Fh.checkClusteringEnabled();let t=Wme(e);if(t)throw EP(t,t.message,_P.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Fh.getNodeRecord(r);s.length>0&&(n=jme(s));let{added:i,skipped:o}=await zme(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=epe,c;let l=Fh.buildNodePayloads(i,rpe,ny.OPERATIONS_ENUM.UPDATE_NODE,await Fh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];xh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}xh.trace("updateNode sending remote payload:",l);let u;try{u=await Bh.request(`${r}.${PY.REQUEST_SUFFIX}`,l)}catch(d){xh.error(`updateNode received error from request: ${d}`);let f=Bh.requestErrorHandler(d,"update_node",r);throw EP(new Error,f,_P.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===PY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw EP(new Error,d,_P.INTERNAL_SERVER_ERROR,"error",d)}xh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Bh.updateRemoteConsumer(m,r),m.subscribe===!0?await Bh.updateConsumerIterator(m.schema,m.table,r,"start"):await Bh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Jme(r,[],u.system_info)]),await spe(n[0],i,u.system_info),o.length>0?c.message=tpe:c.message=`Successfully updated '${r}'`,c}a(npe,"updateNode");async function spe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===o.schema&&d.table===o.table){d.publish=o.publish,d.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Qme(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Fh.upsertNodeRecord(n),Xme({type:"nats_update"})}a(spe,"updateNodeTable")});var xY=M((wFe,UY)=>{"use strict";var MY=require("joi"),{string:DY}=MY.types(),ipe=mt(),vY=(G(),v(j)),ope=fe(),ape=Pt();UY.exports=cpe;function cpe(e){let t=DY.invalid(ope.get(vY.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(ape.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=MY.object({operation:DY.valid(vY.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return ipe.validateBySchema(e,r)}a(cpe,"removeNodeValidator")});var sy=M((CFe,GY)=>{"use strict";var{handleHDBError:BY,hdbErrors:lpe}=Ee(),{HTTP_STATUS_CODES:FY}=lpe,upe=xY(),kh=Q(),kY=da(),dpe=ae(),Sf=(G(),v(j)),HY=Pt(),TP=Sr(),yP=fe(),{RemotePayloadObject:fpe}=Lh(),{NodeSubscription:mpe}=hf(),ppe=_p(),hpe=vl(),{broadcast:Epe}=st(),{setNode:_pe}=(gf(),v(_f)),gpe=yP.get(Sf.CONFIG_PARAMS.CLUSTERING_NODENAME);GY.exports=Spe;async function Spe(e){if(kh.trace("removeNode called with:",e),yP.get(Sf.CONFIG_PARAMS.REPLICATION_URL)??yP.get(Sf.CONFIG_PARAMS.REPLICATION_HOSTNAME))return _pe(e);kY.checkClusteringEnabled();let t=upe(e);if(t)throw BY(t,t.message,FY.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await kY.getNodeRecord(r);if(dpe.isEmptyOrZeroLength(n))throw BY(new Error,`Node '${r}' was not found.`,FY.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new fpe(Sf.OPERATIONS_ENUM.REMOVE_NODE,gpe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await TP.updateConsumerIterator(d.schema,d.table,r,"stop");try{await TP.updateRemoteConsumer(new mpe(d.schema,d.table,!1,!1),r)}catch(f){kh.error(f)}}try{i=await TP.request(`${r}.${HY.REQUEST_SUFFIX}`,s),kh.trace("Remove node reply from remote node:",r,i)}catch(l){kh.error("removeNode received error from request:",l),o=!0}let c=new ppe(Sf.SYSTEM_SCHEMA_NAME,Sf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await hpe.deleteRecord(c),Epe({type:"nats_update"}),i?.status===HY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(kh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(Spe,"removeNode")});var VY=M((PFe,$Y)=>{"use strict";var qY=require("joi"),{string:Tpe,array:ype}=qY.types(),Rpe=mt(),bpe=jT();$Y.exports=Ape;function Ape(e){let t=qY.object({operation:Tpe.valid("configure_cluster").required(),connections:ype.items(bpe.validationSchema).required()});return Rpe.validateBySchema(e,t)}a(Ape,"configureClusterValidator")});var RP=M((DFe,zY)=>{"use strict";var KY=(G(),v(j)),iy=Q(),Ipe=ae(),wpe=fe(),Npe=sy(),Cpe=ry(),Ope=da(),Ppe=VY(),{handleHDBError:YY,hdbErrors:Lpe}=Ee(),{HTTP_STATUS_CODES:WY}=Lpe,Dpe="Configure cluster complete.",vpe="Failed to configure the cluster. Check the logs for more details.",Mpe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";zY.exports=Upe;async function Upe(e){iy.trace("configure cluster called with:",e);let t=Ppe(e);if(t)throw YY(t,t.message,WY.BAD_REQUEST,void 0,void 0,!0);let r=await Ope.getAllNodeRecords(),n=[];if(wpe.get(KY.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await jY(Npe,{operation:KY.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}iy.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 jY(Cpe,f,f.node_name);s.push(m)}iy.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(iy.error(m.node_name,m?.error?.message,m?.error?.stack),o.includes(m.node_name)||o.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Ipe.isEmptyOrZeroLength(o))return{message:Dpe,connections:c};if(l)return{message:Mpe,failed_nodes:o,connections:c};throw YY(new Error,vpe,WY.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Upe,"configureCluster");async function jY(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(jY,"functionWrapper")});var ZY=M((MFe,XY)=>{"use strict";var Hh=require("joi"),xpe=mt(),{validateSchemaExists:JY,validateTableExists:Bpe,validateSchemaName:QY}=Qi(),Fpe=Hh.object({operation:Hh.string().valid("purge_stream"),schema:Hh.string().custom(JY).custom(QY).optional(),database:Hh.string().custom(JY).custom(QY).optional(),table:Hh.string().custom(Bpe).required()});function kpe(e){return xpe.validateBySchema(e,Fpe)}a(kpe,"purgeStreamValidator");XY.exports=kpe});var bP=M((xFe,eW)=>{"use strict";var{handleHDBError:Hpe,hdbErrors:Gpe}=Ee(),{HTTP_STATUS_CODES:qpe}=Gpe,$pe=ZY(),Vpe=Sr(),Kpe=da();eW.exports=Ype;async function Ype(e){e.schema=e.schema??e.database;let t=$pe(e);if(t)throw Hpe(t,t.message,qpe.BAD_REQUEST,void 0,void 0,!0);Kpe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Vpe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Ype,"purgeStream")});var wP=M((FFe,cW)=>{"use strict";var IP=da(),Wpe=Sr(),ay=fe(),Tf=(G(),v(j)),Zl=Pt(),jpe=ae(),AP=Q(),{RemotePayloadObject:zpe}=Lh(),{ErrorCode:tW}=require("nats"),{parentPort:rW}=require("worker_threads"),{onMessageByType:Jpe}=st(),{getThisNodeName:Qpe}=(Ss(),v(sa)),{requestClusterStatus:Xpe}=(Sh(),v(zV)),{getReplicationSharedStatus:Zpe,getHDBNodeTable:ehe}=(Xd(),v(qV)),{CONFIRMATION_STATUS_POSITION:the,RECEIVED_VERSION_POSITION:nW,RECEIVED_TIME_POSITION:rhe,SENDING_TIME_POSITION:nhe,RECEIVING_STATUS_POSITION:she,RECEIVING_STATUS_RECEIVING:ihe,BACK_PRESSURE_RATIO_POSITION:ohe}=(_O(),v(H1)),sW=ay.get(Tf.CONFIG_PARAMS.CLUSTERING_ENABLED),iW=ay.get(Tf.CONFIG_PARAMS.CLUSTERING_NODENAME);cW.exports={clusterStatus:ahe,buildNodeStatus:aW};var oW;Jpe("cluster-status",async e=>{oW(e)});async function ahe(){if(ay.get(Tf.CONFIG_PARAMS.REPLICATION_URL)||ay.get(Tf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;rW?(rW.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{oW=i})):n=Xpe();for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Zpe(u,l,o);c.lastCommitConfirmed=oy(d[the]),c.lastReceivedRemoteTime=oy(d[nW]),c.lastReceivedLocalTime=oy(d[rhe]),c.lastReceivedVersion=d[nW],c.sendingMessage=oy(d[nhe]),c.backPressurePercent=d[ohe]*100,c.lastReceivedStatus=d[she]===ihe?"Receiving":"Waiting"}}n.node_name=Qpe();let s=ehe().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:iW,is_enabled:sW,connections:[]};if(!sW)return e;let t=await IP.getAllNodeRecords();if(jpe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(aW(t[n],e.connections));return await Promise.allSettled(r),e}a(ahe,"clusterStatus");function oy(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(oy,"asDate");async function aW(e,t){let r=e.name,n=new zpe(Tf.OPERATIONS_ENUM.CLUSTER_STATUS,iW,void 0,await IP.getSystemInfo()),s,i,o=Zl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Wpe.request(Zl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Zl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Zl.CLUSTER_STATUS_STATUSES.CLOSED,AP.error(`Error getting node status from ${r} `,s))}catch(l){AP.warn(`Error getting node status from ${r}`,l),l.code===tW.NoResponders?o=Zl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===tW.Timeout?o=Zl.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Zl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new che(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Tf.PRE_4_0_0_VERSION&&await IP.upsertNodeRecord(l)}catch(l){AP.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(aW,"buildNodeStatus");function che(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(che,"NodeStatusObject")});var CP=M((HFe,lW)=>{"use strict";var{handleHDBError:lhe,hdbErrors:uhe}=Ee(),{HTTP_STATUS_CODES:dhe}=uhe,fhe=Sr(),mhe=da(),NP=ae(),cy=require("joi"),phe=mt(),hhe=2e3,Ehe=cy.object({timeout:cy.number().min(1),connected_nodes:cy.boolean(),routes:cy.boolean()});lW.exports=_he;async function _he(e){mhe.checkClusteringEnabled();let t=phe.validateBySchema(e,Ehe);if(t)throw lhe(t,t.message,dhe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||NP.autoCastBoolean(n),o=s===void 0||NP.autoCastBoolean(s),c={nodes:[]},l=await fhe.getServerList(r??hhe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),o&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:NP.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(_he,"clusterNetwork")});var mW=M((qFe,fW)=>{"use strict";var OP=require("joi"),uW=mt(),{routeConstraints:dW}=mN();fW.exports={setRoutesValidator:ghe,deleteRoutesValidator:She};function ghe(e){let t=OP.object({server:OP.valid("hub","leaf"),routes:dW.required()});return uW.validateBySchema(e,t)}a(ghe,"setRoutesValidator");function She(e){let t=OP.object({routes:dW.required()});return uW.validateBySchema(e,t)}a(She,"deleteRoutesValidator")});var ly=M((VFe,TW)=>{"use strict";var ma=gt(),PP=ae(),Ws=(G(),v(j)),yf=fe(),pW=mW(),{handleHDBError:hW,hdbErrors:The}=Ee(),{HTTP_STATUS_CODES:EW}=The,_W="cluster routes successfully set",gW="cluster routes successfully deleted";TW.exports={setRoutes:Rhe,getRoutes:bhe,deleteRoutes:Ahe};function yhe(e){let t=ma.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=PP.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?ma.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ma.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:_W,set:i,skipped:s}}a(yhe,"setRoutesNats");function Rhe(e){let t=pW.setRoutesValidator(e);if(t)throw hW(t,t.message,EW.BAD_REQUEST,void 0,void 0,!0);if(yf.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED))return yhe(e);let r=[],n=[],s=yf.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{SW(s,i)?n.push(i):(s.push(i),r.push(i))}),ma.updateConfigValue(Ws.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:_W,set:r,skipped:n}}a(Rhe,"setRoutes");function SW(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(SW,"existsInArray");function bhe(){if(yf.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ma.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return yf.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(bhe,"getRoutes");function Ahe(e){let t=pW.deleteRoutesValidator(e);if(t)throw hW(t,t.message,EW.BAD_REQUEST,void 0,void 0,!0);if(yf.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED))return Ihe(e);let r=[],n=[],s=yf.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{SW(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),ma.updateConfigValue(Ws.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:gW,deleted:r,skipped:n}}a(Ahe,"deleteRoutes");function Ihe(e){let t=ma.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,o=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return o&&(r=PP.isEmptyOrZeroLength(r)?null:r,ma.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=PP.isEmptyOrZeroLength(n)?null:n,ma.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:gW,deleted:s,skipped:i}}a(Ihe,"deleteRoutesNats")});var RW=M((YFe,yW)=>{"use strict";var whe=Pt(),LP=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f,m,p,h){this.port=t,o===null&&(o=void 0),this.server_name=r+whe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};yW.exports=LP});var IW=M((jFe,AW)=>{"use strict";var bW=Pt(),DP=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+bW.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+bW.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};AW.exports=DP});var NW=M((JFe,wW)=>{"use strict";var vP=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};wW.exports=vP});var OW=M((XFe,CW)=>{"use strict";var Nhe=Pt(),MP=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Nhe.SERVER_SUFFIX.ADMIN,this.password=r}};CW.exports=MP});var my=M((eke,DW)=>{"use strict";var eu=require("path"),tu=require("fs-extra"),Che=RW(),Ohe=IW(),Phe=NW(),Lhe=OW(),UP=(Es(),v(co)),bf=ae(),jn=gt(),dy=(G(),v(j)),Gh=Pt(),{CONFIG_PARAMS:lr}=dy,Af=Q(),qh=fe(),PW=so(),xP=Sr(),Dhe=ys(),Rf="clustering",vhe=1e4,LW=50;DW.exports={generateNatsConfig:Uhe,removeNatsConfig:xhe,getHubConfigPath:Mhe};function Mhe(){let e=qh.get(lr.ROOTPATH);return eu.join(e,Rf,Gh.NATS_CONFIG_FILES.HUB_SERVER)}a(Mhe,"getHubConfigPath");async function Uhe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=qh.get(lr.ROOTPATH);tu.ensureDirSync(eu.join(r,"clustering","leaf")),qh.initSync();let n=jn.getConfigFromFile(lr.CLUSTERING_TLS_CERT_AUTH),s=jn.getConfigFromFile(lr.CLUSTERING_TLS_PRIVATEKEY),i=jn.getConfigFromFile(lr.CLUSTERING_TLS_CERTIFICATE);!await tu.exists(i)&&!await tu.exists(!n)&&await Dhe.createNatsCerts();let o=eu.join(r,Rf,Gh.PID_FILES.HUB),c=eu.join(r,Rf,Gh.PID_FILES.LEAF),l=jn.getConfigFromFile(lr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=eu.join(r,Rf,Gh.NATS_CONFIG_FILES.HUB_SERVER),d=eu.join(r,Rf,Gh.NATS_CONFIG_FILES.LEAF_SERVER),f=jn.getConfigFromFile(lr.CLUSTERING_TLS_INSECURE),m=jn.getConfigFromFile(lr.CLUSTERING_TLS_VERIFY),p=jn.getConfigFromFile(lr.CLUSTERING_NODENAME),h=jn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await xP.checkNATSServerInstalled()||fy("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await UP.listUsers(),_=jn.getConfigFromFile(lr.CLUSTERING_USER),R=await UP.getClusterUser();(bf.isEmpty(R)||R.active!==!0)&&fy(`Invalid cluster user '${_}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await uy(lr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await uy(lr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await uy(lr.CLUSTERING_HUBSERVER_NETWORK_PORT),await uy(lr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[z,Y]of E.entries())Y.role?.role===dy.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new Lhe(Y.username,PW.decrypt(Y.hash))),y.push(new Phe(Y.username,PW.decrypt(Y.hash))));let w=[],{hub_routes:I}=jn.getClusteringRoutes();if(!bf.isEmptyOrZeroLength(I))for(let z of I)w.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let H=new Che(jn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_NETWORK_PORT),p,o,i,s,n,f,m,h,jn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_CLUSTER_NAME),jn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),w,S,y);n==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=bf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===dy.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await tu.writeJson(u,H),Af.trace(`Hub server config written to ${u}`));let X=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,q=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new Ohe(jn.getConfigFromFile(lr.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[X],[q],S,y,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===dy.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await tu.writeJson(d,k),Af.trace(`Leaf server config written to ${d}`))}a(Uhe,"generateNatsConfig");async function uy(e){let t=qh.get(e);return bf.isEmpty(t)&&fy(`port undefined for '${e}'`),await bf.isPortTaken(t)&&fy(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(uy,"isPortAvailable");function fy(e){let t=`Error generating clustering config: ${e}`;Af.error(t),console.error(t),process.exit(1)}a(fy,"generateNatsConfigError");async function xhe(e){let{port:t,config_file:r}=xP.getServerConfig(e),{username:n,decrypt_hash:s}=await UP.getClusterUser(),i=0,o=2e3;for(;i<LW;){try{let d=await xP.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Af.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=LW)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&Af.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await bf.asyncSetTimeout(u)}let c="0".repeat(vhe),l=eu.join(qh.get(lr.ROOTPATH),Rf,r);await tu.writeFile(l,c),await tu.remove(l),Af.notify(e,"started.")}a(xhe,"removeNatsConfig")});var FW=M((rke,BW)=>{"use strict";var bs=fe(),et=(G(),v(j)),$h=Pt(),pa=require("path"),{PACKAGE_ROOT:hy}=yt(),vW=fe(),py=ae(),If="/dev/null",Bhe=pa.join(hy,"launchServiceScripts"),MW=pa.join(hy,"utility/scripts"),Fhe=pa.join(MW,et.HDB_RESTART_SCRIPT),UW=pa.resolve(hy,"dependencies",`${process.platform}-${process.arch}`,$h.NATS_BINARY_NAME);function xW(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return py.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=py.getEnvCliRootPath()),{name:et.PROCESS_DESCRIPTORS.HDB,script:et.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:hy}}a(xW,"generateMainServerConfig");var khe=9930;function Hhe(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=pa.join(e,"clustering",$h.NATS_CONFIG_FILES.HUB_SERVER),r=pa.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=vW.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$h.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==khe?"-"+n:""),binFile:UW,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=If,i.error_file=If),i}a(Hhe,"generateNatsHubServerConfig");var Ghe=9940;function qhe(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=pa.join(e,"clustering",$h.NATS_CONFIG_FILES.LEAF_SERVER),r=pa.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=vW.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$h.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Ghe?"-"+n:""),binFile:UW,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=If,i.error_file=If),i}a(qhe,"generateNatsLeafServerConfig");function $he(){bs.initSync();let e=pa.join(bs.get(et.CONFIG_PARAMS.LOGGING_ROOT),et.LOG_NAMES.HDB),t={name:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:et.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Bhe,autorestart:!1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=If,t.error_file=If),t}a($he,"generateClusteringUpgradeV4ServiceConfig");function Vhe(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.RESTART_HDB};return py.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=py.getEnvCliRootPath()),{...{name:et.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:MW},script:Fhe}}a(Vhe,"generateRestart");function Khe(){return{apps:[xW()]}}a(Khe,"generateAllServiceConfigs");BW.exports={generateAllServiceConfigs:Khe,generateMainServerConfig:xW,generateRestart:Vhe,generateNatsHubServerConfig:Hhe,generateNatsLeafServerConfig:qhe,generateClusteringUpgradeV4ServiceConfig:$he}});var wf=M((ike,KW)=>{"use strict";var Lr=(G(),v(j)),ske=ae(),Ea=my(),Ey=Sr(),ha=Pt(),Pc=FW(),FP=fe(),Lc=Q(),Yhe=da(),{startWorker:kW,onMessageFromWorkers:Whe}=st(),HW=require("fs"),jhe=require("node:path"),zhe=(G(),v(j)),{setTimeout:Jhe}=require("node:timers/promises"),{execFile:Qhe,fork:Xhe}=require("node:child_process");KW.exports={start:Dc,restart:eEe,kill:sEe,startAllServices:iEe,startService:qW,restartHdb:tEe,startClusteringProcesses:$W,startClusteringThreads:VW,isHdbRestartRunning:rEe,getHdbPid:nEe,cleanupChildrenProcesses:Vh,reloadClustering:aEe,expectedRestartOfChildren:GW};Whe(e=>{e.type==="restart"&&FP.initSync(!0)});var go=[],Zhe=10,BP;function Dc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?Xhe(e.script,r,e):Qhe(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(o,c)=>{console.error(o,c)}),n.on("exit",async o=>{let c=go.indexOf(n);c>-1&&go.splice(c,1),!BP&&o!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Zhe&&(HW.existsSync(Ea.getHubConfigPath())?Dc(e):(await Ea.generateNatsConfig(!0),Dc(e),await new Promise(l=>setTimeout(l,3e3)),await Ea.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ea.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(o){let c=FP.get(Lr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(o);){if(u.index&&ha.LOG_LEVEL_HIERARCHY[c]>=ha.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===ha.LOG_LEVELS.ERR||f===ha.LOG_LEVELS.WRN?Lc.OUTPUTS.STDERR:Lc.OUTPUTS.STDOUT;Lc.logCustomLevel(f||"info",h,s,o.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=ha.LOG_LEVELS[p]}if(ha.LOG_LEVEL_HIERARCHY[c]>=ha.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===ha.LOG_LEVELS.ERR||f===ha.LOG_LEVELS.WRN?Lc.OUTPUTS.STDERR:Lc.OUTPUTS.STDOUT;Lc.logCustomLevel(f||"info",m,s,o.toString().slice(d).trim())}}a(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),go.length===0&&(t||(process.on("exit",Vh),process.on("SIGINT",Vh),process.on("SIGQUIT",Vh),process.on("SIGTERM",Vh))),go.push(n)}a(Dc,"start");function Vh(e=!0){if(!BP&&(BP=!0,go.length!==0))if(Lc.info("Killing child processes..."),go.map(t=>t.kill()),e)process.exit(0);else return Jhe(2e3)}a(Vh,"cleanupChildrenProcesses");function eEe(e){GW();for(let t of go)t.name===e&&t.kill()}a(eEe,"restart");function GW(){for(let e of go)e.config&&(e.config.restarts=0)}a(GW,"expectedRestartOfChildren");async function tEe(){await Dc(Pc.generateRestart())}a(tEe,"restartHdb");async function rEe(){let e=await list();for(let t in e)if(e[t].name===Lr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(rEe,"isHdbRestartRunning");function nEe(){let e=FP.getHdbBasePath();if(!e)return;let t=jhe.join(e,zhe.HDB_PID_FILE),r=cEe(t);if(!(!r||r===process.pid)&&lEe(r))return r}a(nEe,"getHdbPid");function sEe(){for(let e of go)e.kill();go=[]}a(sEe,"kill");async function iEe(){await $W(),await VW(),await Dc(Pc.generateAllServiceConfigs())}a(iEe,"startAllServices");async function qW(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Lr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Pc.generateMainServerConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Pc.generateNatsIngestServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Pc.generateNatsReplyServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Pc.generateNatsHubServerConfig(),await Dc(r,t),await Ea.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Pc.generateNatsLeafServerConfig(),await Dc(r,t),await Ea.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Pc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Dc(r,t)}a(qW,"startService");var oEe;async function $W(e=!1){for(let t in Lr.CLUSTERING_PROCESSES){let r=Lr.CLUSTERING_PROCESSES[t];await qW(r,e)}}a($W,"startClusteringProcesses");async function VW(){oEe=kW(Lr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Ey.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Ey.updateLocalStreams();let e=await Yhe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Lr.PRE_4_0_0_VERSION){Lc.info("Starting clustering upgrade 4.0.0 process"),kW(Lr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(VW,"startClusteringThreads");async function aEe(){await Ea.generateNatsConfig(!0),await Ey.reloadNATSHub(),await Ey.reloadNATSLeaf(),await Ea.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ea.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(aEe,"reloadClustering");function cEe(e){try{return Number.parseInt(HW.readFileSync(e,"utf8"),10)}catch{return null}}a(cEe,"readPidFile");function lEe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(lEe,"isProcessRunning")});var GP={};ye(GP,{compactOnStart:()=>uEe,copyDb:()=>QW});async function uEe(){_a.notify("Running compact on start"),console.log("Running compact on start");let e=(0,kP.get)(x.ROOTPATH),t=new Map,r=lt();(0,HP.updateConfigValue)(x.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,_y.join)(e,"backup",n+".mdb"),o=(0,_y.join)(e,el,n+"-copy.mdb"),c=0;try{c=await YW(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){_a.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:o,backupDest:i,recordCount:c}),await QW(n,o),console.log("Backing up",n,"to",i);try{await(0,ru.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,ru.move)(o,s,{overwrite:!0}),await(0,ru.remove)((0,_y.join)(e,el,`${n}-copy.mdb-lock`))}try{Ud()}catch(n){_a.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}try{Ud()}catch(n){_a.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){_a.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,HP.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,ru.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ud(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let o=await YW(n);if(console.log("Database",n,"after compact has a total record count of",o),i!==o){let c=`There is a discrepancy between pre and post compact record count for database ${n}.
14
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw Dt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Lae(n,r),QG(n,r),TN(n);let s=n.toJSON();if(yae.config=s,kt=Sd(s),kt.logging_rotation_rotate)for(let i in VG)kt[i]&&Dt.error(`Config ${VG[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Dt.trace(Aae)}}a(cS,"initConfig");function Lae(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],hs.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],hs.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(Dt.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);nn.writeFileSync(t,String(e))}}a(Lae,"checkForUpdatedConfig");function TN(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 gd.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 gd.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=Eae(r,t);if(n.error)throw gd.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(TN,"validateConfig");function Dae(e,t){kt===void 0&&(kt={});let r=pi[e.toLowerCase()];if(r===void 0){Dt.trace(`Unable to update config object because config param '${e}' does not exist`);return}kt[r.toLowerCase()]=t}a(Dae,"updateConfigObject");function JG(e,t,r=void 0,n=!1,s=!1,i=!1){kt===void 0&&cS();let o=zG(pi.hdb_root),c=hs.join(o,ks.HDB_CONFIG_FILE),l=uc(c),u;if(r&&kt){let m=!1;for(let p in r)if(r[p]!=kt[p.toLowerCase()]){m=!0;break}if(!m){Dt.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===ps.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=pi[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=SN(m,t);l.setIn([...p],h)}else for(let m in r){let p=pi[m.toLowerCase()];if(p===ps.HTTP_SECUREPORT&&r[m]===kt[ps.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===ps.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===kt[ps.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===ps.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=ks.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let _=SN(p,r[m]);p==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],_)}catch(R){Dt.error(R)}}}u&&jG(l,u),TN(l);let d=l.getIn(["rootPath"]),f=hs.join(d,ks.HDB_CONFIG_FILE);if(n===!0&&vae(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);nn.writeFileSync(f,String(l)),s&&(kt=Sd(l.toJSON())),Dt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(JG,"updateConfigValue");function vae(e,t){try{let r=hs.join(Rae(t),`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${ks.HDB_CONFIG_FILE}.bak`);nn.copySync(e,r),Dt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Dt.error(Iae),Dt.error(r)}}a(vae,"backupConfigFile");var Mae=["databases"];function Sd(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}),oS=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])&&!Mae.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!ps[l.toUpperCase()]&&pi[l]&&(s[pi[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Sd,"flattenConfig");function SN(e,t){if(e===ps.CLUSTERING_NODENAME||e===ps.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(_ae(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Cr.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Cr.autoCast(t)}a(SN,"castConfigValue");function Uae(){let e=Cr.getPropsFilePath(),t=xl(e);return uc(t).toJSON()}a(Uae,"getConfiguration");async function xae(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return JG(void 0,void 0,s,!0),Cae}catch(i){throw typeof i=="string"||i instanceof String?Sae(i,i,Tae.BAD_REQUEST,void 0,void 0,!0):i}}a(xae,"setConfiguration");function yN(){let e=Cr.getPropsFilePath();try{nn.accessSync(e,nn.constants.F_OK|nn.constants.R_OK)}catch(n){if(!Cr.noBootFile())throw Dt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=xl(e);return uc(t).toJSON()}a(yN,"readConfigFile");function uc(e){return aS.parseDocument(nn.readFileSync(e,"utf8"),{simpleKeys:!0})}a(uc,"parseYamlDoc");function QG(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG;if(!n&&!s)return;let{applyRuntimeEnvConfig:i}=(qG(),v(GG)),o=e.getIn(["rootPath"]);if(!o){Dt.warn("Cannot apply runtime env config: rootPath not found in config");return}let c=e.toJSON();try{i(c,o,r);let l=aS.parseDocument(aS.stringify(c),{simpleKeys:!0});Object.assign(e,l)}catch(l){throw Dt.error(`Failed to apply runtime env config: ${l.message}`),l}if(t)try{if(e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml: ${e.errors}`);nn.writeFileSync(t,String(e)),Dt.debug("Config file updated with runtime env var values")}catch(l){throw Dt.error(`Failed to write config file after applying runtime env vars: ${l.message}`),l}}a(QG,"applyRuntimeEnvVarConfig");function Bae(){let e=yN(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Cr.isEmptyOrZeroLength(t)?[]:t;let r=$G(t);if(r)throw gd.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Cr.isEmptyOrZeroLength(n)?[]:n;let s=$G(n);if(s)throw gd.CONFIG_VALIDATION(s.message);if(!Cr.isEmptyOrZeroLength(n)&&!Cr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Cr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw gd.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(Bae,"getClusteringRoutes");function XG(e){let t=KG(e);kt={};for(let r in pi){let n=t.get(r.toUpperCase());if(Cr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=pi[r].toLowerCase();s===ps.LOGGING_ROOT?kt[s]=hs.dirname(n):kt[s]=n}return kt}a(XG,"initOldConfig");function Fae(e){let t=yN();return gae.get(t,e.replaceAll("_","."))}a(Fae,"getConfigFromFile");async function kae(e,t){let r=uc(xl());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 nn.writeFile(xl(),String(r))}a(kae,"addConfig");function Hae(e){let t=xl(Cr.getPropsFilePath()),r=uc(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=hs.join(n,ks.HDB_CONFIG_FILE);nn.writeFileSync(s,String(r))}a(Hae,"deleteConfigFromFile");function Gae(){return oS||(cS(),oS)}a(Gae,"getConfigObj");function qae(){return kt||cS(),kt}a(qae,"getFlatConfigObj")});var co={};ye(co,{ACTIVE_BOOLEAN:()=>iq,ALTERUSER_NOTHING_TO_UPDATE:()=>rq,EMPTY_PASSWORD:()=>nq,EMPTY_ROLE:()=>sq,USERNAME_REQUIRED:()=>tq,addUser:()=>ON,alterUser:()=>PN,dropUser:()=>LN,findAndValidateUser:()=>yd,getClusterUser:()=>ece,getSuperUser:()=>Fp,getUsersWithRolesCache:()=>Zae,listUsers:()=>dS,listUsersExternal:()=>vN,setUsersWithRolesCache:()=>Ei,userInfo:()=>DN});async function ON(e){let t=cq.cleanAttributes(e,lq),r=aq.addUserValidation(t);if(r)throw new hi(r.message);let n=await Bp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new hi(Td.ROLE_NAME_NOT_FOUND(t.role),ea.NOT_FOUND);if(n.length>1)throw new hi(Td.DUP_ROLES_FOUND(t.role),ea.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=NN.encrypt(t.password)),t.password=await xp.hash(t.password,lS),t.hash_function=lS,t.role=n[0].id;let s=await oq.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(wN.debug(s),await Ei(),s.skipped_hashes.length===1)throw new hi(Td.USER_ALREADY_EXISTS(t.username),ea.CONFLICT);return IN.signalUserChange(new CN(process.pid)),`${t.username} successfully added`}async function PN(e){let t=cq.cleanAttributes(e,lq);if(oo.isEmptyOrZeroLength(t.username))throw new Error(tq);if(oo.isEmptyOrZeroLength(t.password)&&oo.isEmptyOrZeroLength(t.role)&&oo.isEmptyOrZeroLength(t.active))throw new Error(rq);if(!oo.isEmpty(t.password)&&oo.isEmptyOrZeroLength(t.password.trim()))throw new Error(nq);if(!oo.isEmpty(t.active)&&!oo.isBoolean(t.active))throw new Error(iq);if(!oo.isEmpty(t.password)&&!oo.isEmptyOrZeroLength(t.password.trim())&&(Qae(t.username)&&(t.hash=NN.encrypt(t.password)),t.password=await xp.hash(t.password,lS),t.hash_function=lS),t.role==="")throw new Error(sq);if(t.role){let n=await Bp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new hi(Td.ALTER_USER_ROLE_NOT_FOUND(t.role),ea.NOT_FOUND);if(n.length>1)throw new hi(Td.DUP_ROLES_FOUND(t.role),ea.CONFLICT);t.role=n[0].id}let r=await oq.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Ei(),IN.signalUserChange(new CN(process.pid)),r}function Qae(e){let t=!1,r=ao.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}async function LN(e){let t=aq.dropUserValidation(e);if(t)throw new hi(t.message);if(ao.get(e.username)===void 0)throw new hi(Td.USER_NOT_EXIST(e.username),ea.NOT_FOUND);let r=await Jae({table:"hdb_user",schema:"system",hash_values:[e.username]});return wN.debug(r),await Ei(),IN.signalUserChange(new CN(process.pid)),`${e.username} successfully deleted`}async function DN(e){if(!e||!e.hdb_user)return"There was no user info in the body";let t=AN.cloneDeep(e.hdb_user),r=await Bp.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}async function vN(){let e=await dS();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}async function dS(){let e=await Bp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=AN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Bp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=AN.cloneDeep(s),s.role=t[s.role],Xae(s.role),n.set(s.username,s);return n}function Xae(e){if(!e){wN.error("invalid user role found.");return}e.permission.system||(e.permission.system={tables:{}}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(Wae)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}async function Ei(e=void 0){e?ao=e:ao=await dS()}async function Zae(){return ao||await Ei(),ao}async function yd(e,t,r=!0){ao||await Ei();let n=ao.get(e);if(!n){if(!r)return{username:e};throw new hi(RN.GENERIC_AUTH_FAIL,ea.UNAUTHORIZED)}if(n&&!n.active)throw new hi(RN.USER_INACTIVE,ea.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(eq.get(t)===n.password)return s;{let i=xp.validate(n.password,t,n.hash_function||xp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)eq.set(t,n.password);else throw new hi(RN.GENERIC_AUTH_FAIL,ea.UNAUTHORIZED)}}return s}async function Fp(){ao||await Ei();for(let[,e]of ao)if(e.role.role==="super_user")return e}async function ece(){let e=await dS(),t=Kae.getConfigFromFile(bN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(r==null||r?.role?.role!==bN.ROLE_TYPES_ENUM.CLUSTER_USER)return;let n=NN.decrypt(r.hash);return r.decrypt_hash=n,r.uri_encoded_d_hash=encodeURIComponent(n),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+ZG.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+ZG.SERVER_SUFFIX.ADMIN,r}var tq,rq,nq,sq,iq,oq,$ae,xp,aq,Bp,IN,oo,cq,wN,Vae,NN,bN,ZG,Kae,Yae,Wae,jae,hi,ea,RN,Td,CN,AN,uS,zae,lq,eq,Jae,lS,ao,uq,Es=se(()=>{"use strict";tq="username is required",rq="nothing to update, must supply active, role or password to update",nq="password cannot be an empty string",sq="If role is specified, it cannot be empty.",iq="active must be true or false",oq=Vn(),$ae=vl(),xp=(Xw(),v(Qw)),aq=YH(),Bp=gn(),IN=Jo(),oo=ae(),cq=require("validate.js"),wN=Q(),{promisify:Vae}=require("util"),NN=so(),bN=(G(),v(j)),ZG=Pt(),Kae=gt(),Yae=fe(),Wae=Zi(),{hdbErrors:jae,ClientError:hi}=Ee(),{HTTP_STATUS_CODES:ea,AUTHENTICATION_ERROR_MSGS:RN,HDB_ERROR_MSGS:Td}=jae,{UserEventMsg:CN}=ls(),AN=require("lodash"),{server:uS}=(Hr(),v(ym)),zae=Q();uS.getUser=(e,t)=>yd(e,t,t!=null);uS.authenticateUser=(e,t)=>yd(e,t);lq={username:!0,active:!0,role:!0,password:!0},eq=new Map,Jae=Vae($ae.delete),lS=Yae.get(bN.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??xp.HASH_FUNCTION.SHA256;a(ON,"addUser");a(PN,"alterUser");a(Qae,"isClusterUser");a(LN,"dropUser");a(DN,"userInfo");a(vN,"listUsersExternal");a(dS,"listUsers");a(Xae,"appendSystemTablesToRole");a(Ei,"setUsersWithRolesCache");a(Zae,"getUsersWithRolesCache");a(yd,"findAndValidateUser");a(Fp,"getSuperUser");a(ece,"getClusterUser");uq=[];uS.invalidateUser=function(e){for(let t of uq)try{t(e)}catch(r){zae.error("Error invalidating user",r)}};uS.onInvalidatedUser=function(e){uq.push(e)}});var Pe,Rd=se(()=>{Pe={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var bd,MN=se(()=>{Rd();bd=class{static{a(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==Pe.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Pe.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Pe.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Pe.WARNING,t)}markLoading(t){this.updateStatus(Pe.LOADING,t||"Component is loading")}isHealthy(){return this.status===Pe.HEALTHY}hasError(){return this.status===Pe.ERROR}isLoading(){return this.status===Pe.LOADING}hasWarning(){return this.status===Pe.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var Bl,dc,UN,Ad,xN,Id,BN,fS=se(()=>{Bl=b(Jr()),dc=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Bl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},UN=class extends dc{static{a(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,Bl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},Ad=class extends dc{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Bl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},xN=class extends dc{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Bl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},Id=class extends dc{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Bl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},BN=class extends dc{static{a(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,Bl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
15
+ `)}}});var dq,Fl,fq,fc,kp,wd,tce,mS,FN=se(()=>{dq=b(ls()),Fl=b(st());G();fq=b(ir());Rd();fS();fc=(0,fq.loggerWithTag)("componentStatus.crossThread"),kp=class{static{a(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,Fl.onMessageByType)(T_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;fc.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&(fc.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let o=((0,Fl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,_=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),fc.trace?.(`Collected all ${y.length} expected responses for request ${r}`),p(y))},"checkComplete"),R=setTimeout(()=>{if(!E){E=!0;let y=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),fc.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${o} responses`),p(y)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,_),(0,dq.sendItcEvent)({type:T_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{_()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new Ad("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Fl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let _=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${_}`,{...E,workerIndex:p.workerIndex})}return fc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof Ad?fc.error?.(`ITC failure during component status collection: ${r.message}`):fc.warn?.("Failed to collect component status from all threads:",r),fc.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,Fl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[o,c]of r)n.set(`${o}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},wd=class{static{a(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let o=s.indexOf("@"),c=o!==-1?s.substring(0,o):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let o=this.aggregateComponentGroup(s,i);r.set(s,o)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,o,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",_=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=_;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=_)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Pe.HEALTHY&&p.message&&(!i||_>s)&&(s=_,i=p.message),p.error&&!o&&(o=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:o};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Pe.ERROR,Pe.WARNING,Pe.LOADING,Pe.UNKNOWN,Pe.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Pe.UNKNOWN}},tce=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),mS=new kp(tce)});var mc,pS=se(()=>{MN();Rd();FN();fS();mc=class e{static{a(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new Id(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Pe).includes(r))throw new Id(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Pe).join(", ")}`);this.statusMap.set(t,new bd(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Pe.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Pe.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Pe.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Pe.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Pe.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Pe.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[Pe.HEALTHY]:0,[Pe.ERROR]:0,[Pe.WARNING]:0,[Pe.LOADING]:0,[Pe.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await mS.collect(t);return wd.aggregate(r)}async getAggregatedStatusFor(t,r){r||(r=await e.getAggregatedFromAllThreads(this));let n=[],s=t+".",i=r.get(t);i&&n.push({key:t,...i});for(let[f,m]of r)f.startsWith(s)&&n.push({key:f,...m});if(n.length===0)return{status:Pe.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let o=n.some(f=>f.status===Pe.ERROR),c=n.some(f=>f.status===Pe.LOADING),l=o?Pe.ERROR:c?Pe.LOADING:Pe.HEALTHY,u="All components loaded successfully",d={};if(o||c){u=n.filter(m=>m.status===Pe.ERROR||m.status===Pe.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Pe.HEALTHY&&(d[m.key]={status:m.status,message:m.latestMessage})}return{status:l,message:u,...Object.keys(d).length>0&&{details:d},lastChecked:n[0]?.lastChecked||{workers:{}}}}}});var hr,hS=se(()=>{pS();hr=new mc});function pq(e){let t=mq.get(e);return t||(t=new kN(e),mq.set(e,t)),t}function hq(){hr.reset()}var kN,mq,lo,Eq,_q=se(()=>{hS();Rd();kN=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return hr.setStatus(this.componentName,Pe.HEALTHY,t),this}warning(t){return hr.setStatus(this.componentName,Pe.WARNING,t),this}error(t,r){return hr.setStatus(this.componentName,Pe.ERROR,t,r),this}loading(t){return hr.setStatus(this.componentName,Pe.LOADING,t||"Loading..."),this}unknown(t){return hr.setStatus(this.componentName,Pe.UNKNOWN,t),this}get(){return hr.getStatus(this.componentName)}},mq=new Map;a(pq,"statusForComponent");lo={loading(e,t){hr.initializeLoading(e,t)},loaded(e,t){hr.markLoaded(e,t)},failed(e,t,r){hr.markFailed(e,t,r)}};a(hq,"reset");Eq=Pe});var Hp={};ye(Hp,{AggregationError:()=>xN,COMPONENT_STATUS_LEVELS:()=>Pe,ComponentStatus:()=>bd,ComponentStatusError:()=>dc,ComponentStatusOperationError:()=>Id,ComponentStatusRegistry:()=>mc,CrossThreadCollectionError:()=>BN,CrossThreadStatusCollector:()=>kp,CrossThreadTimeoutError:()=>UN,ITCError:()=>Ad,StatusAggregator:()=>wd,componentStatusRegistry:()=>hr,crossThreadCollector:()=>mS,query:()=>rce});var rce,gq=se(()=>{hS();pS();MN();pS();FN();hS();fS();Rd();rce={get(e){return hr.getStatus(e)},all(){return hr.getAllStatuses()},byStatus(e){return hr.getComponentsByStatus(e)},summary(){return hr.getStatusSummary()},async allThreads(){return mc.getAggregatedFromAllThreads(hr)}}});var HN={};ye(HN,{STATUS:()=>Eq,internal:()=>Hp,lifecycle:()=>lo,reset:()=>hq,statusForComponent:()=>pq});var Gp=se(()=>{_q();gq()});var $p=M((zMe,yq)=>{"use strict";var _s=Q(),Tn=(G(),v(j)),nce=LB(),sce=(Es(),v(co)),{validateEvent:GN}=ls(),qp=fs(),ice=require("process"),{resetDatabases:oce}=(Oe(),v(ft)),ace={[Tn.ITC_EVENT_TYPES.SCHEMA]:cce,[Tn.ITC_EVENT_TYPES.USER]:Tq,[Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:uce};async function cce(e){let t=GN(e);if(t){_s.error(t);return}_s.trace("ITC schemaHandler received schema event:",e),await nce(e.message),await lce(e.message)}a(cce,"schemaHandler");async function lce(e){try{qp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),qp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),qp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=oce();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){_s.error(t)}}a(lce,"syncSchemaMetadata");var Sq=[];async function Tq(e){try{try{qp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),qp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){_s.warn(r)}let t=GN(e);if(t){_s.error(t);return}_s.trace(`ITC userHandler ${Tn.HDB_ITC_CLIENT_PREFIX}${ice.pid} received user event:`,e),await sce.setUsersWithRolesCache();for(let r of Sq)r()}catch(t){_s.error(t)}}a(Tq,"userHandler");Tq.addListener=function(e){Sq.push(e)};async function uce(e){try{let t=GN(e);if(t){_s.error(t);return}_s.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Gp(),v(HN)),{getWorkerIndex:n}=st(),{sendItcEvent:s}=ls(),i=r.componentStatusRegistry.getAllStatuses(),o=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:o,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?_s.trace(`Sent component status response directly to thread ${u}`):(u===void 0?_s.debug("No originator threadId, falling back to broadcast"):_s.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){_s.error("Error handling component status request:",t)}}a(uce,"componentStatusRequestHandler");yq.exports=ace});var ls=M((tUe,bq)=>{"use strict";var QMe=Q(),qN=ae(),dce=(G(),v(j)),{ITC_ERRORS:Vp}=Jr(),{parentPort:XMe,threadId:fce,isMainThread:mce,workerData:ZMe}=require("worker_threads"),{onMessageFromWorkers:pce,broadcast:eUe,broadcastWithAcknowledgement:hce}=st();bq.exports={sendItcEvent:Ece,validateEvent:Rq,SchemaEventMsg:_ce,UserEventMsg:gce};var ES;pce(async(e,t)=>{ES=ES||$p(),Rq(e),ES[e.type]&&await ES[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Ece(e){return!mce&&e.message&&(e.message.originator=fce),hce(e)}a(Ece,"sendItcEvent");function Rq(e){if(typeof e!="object")return Vp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||qN.isEmpty(e.type))return Vp.MISSING_TYPE;if(!e.hasOwnProperty("message")||qN.isEmpty(e.message))return Vp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||qN.isEmpty(e.message.originator))return Vp.MISSING_ORIGIN;if(dce.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Vp.INVALID_EVENT(e.type)}a(Rq,"validateEvent");function _ce(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(_ce,"SchemaEventMsg");function gce(e){this.originator=e}a(gce,"UserEventMsg")});var Jo=M((sUe,Nq)=>{"use strict";var Aq=(G(),v(j)),nUe=ae(),_S=Q(),Iq=mB(),Nd,{sendItcEvent:wq}=ls();function Sce(e){try{_S.debug("signalSchemaChange called with message:",e),Nd=Nd||$p();let t=new Iq(Aq.ITC_EVENT_TYPES.SCHEMA,e);return Nd.schema(t),wq(t)}catch(t){_S.error(t)}}a(Sce,"signalSchemaChange");function Tce(e){try{_S.trace("signalUserChange called with message:",e),Nd=Nd||$p();let t=new Iq(Aq.ITC_EVENT_TYPES.USER,e);return Nd.user(t),wq(t)}catch(t){_S.error(t)}}a(Tce,"signalUserChange");Nq.exports={signalSchemaChange:Sce,signalUserChange:Tce}});function Kp(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 Cq(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Hs(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 Hs,Yp=se(()=>{Hs=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Kp,"appendHeader");a(Cq,"mergeHeaders")});function gS(e,t,r=Rce){let n;return function(...i){return n?n.length*$N>r?t(...i):new Promise((o,c)=>{n.push({args:i,fn(){try{let l=e(...i);o(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,o){setImmediate(()=>{let c=performance.now();$N=($N*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var Lq,yce,Rce,Oq,bce,VN,Pq,$N,KN=se(()=>{Lq=b(ir()),yce=3e3,Rce=2e4,Oq=0,bce=3e4,VN=3e3,Pq=performance.now()+VN,$N=0;a(gS,"throttle");setInterval(()=>{let e=performance.now();e-Pq-VN>yce&&Oq+bce<e&&(Lq.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"),Oq=e),Pq=e},VN).unref()});var qq={};ye(qq,{EVICTED:()=>_l,INVALIDATED:()=>Fn,coerceType:()=>TS,makeTable:()=>yS});function yS(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:_,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=mI(i,n,l),w,I,H={},X=Promise.resolve(),q,k,z;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(z=K),K.isPrimaryKey&&(H=K);let Y,ce=[],de=[],te=1,Se=2,Ne={},Ke={},$e=864e5,Ir=0,nr,zr,xr,Pu=!1,Jc,Bt,si,Ga=Hl.get(x.REPLICATION_DATABASES);if(Array.isArray(Ga)){for(let K of Ga)if(K.name===c&&K.replicateTo>=0){si=K.replicateTo;break}}let a_=i.getRange({start:!1,end:!1}).constructor,lm=10,c_=6;_&&pm(),qm(i.env.path,K=>{if(I)return $a(K)});class um extends Nl{static{a(this,"Updatable")}getUpdatedTime(){return Za.get(this.getRecord())?.version}getExpiresAt(){return Za.get(this.getRecord())?.expiresAt}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.set(g,new Rp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(g,T){return this.addTo(g,-T)}}class ve extends Xt{#e;#t;#n;#r;#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=_;static databasePath=o;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=q;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(g,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)g.intermediateSource=!0,this.sources.unshift(g);else{if(this.sources.some(D=>!D.intermediateSource)){if(this.sources.some(D=>D.name===g.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(g)}I=I||g.get&&(!g.get.reliesOnPrototype||g.prototype.get),w=w||g.load;let C=a(D=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[D]&&(!U[D].reliesOnPrototype||U.prototype[D])),A.length>0)if(A.length===1){let U=A[0];return(N,L,$)=>{if(N?.source!==U)return U[D](L,$,N)}}else return(U,N,L)=>{let $=[];for(let W of A){if(U?.source===W)break;$.push(W[D](N,L,U))}return Promise.all($)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=a(D=>{if(P[D]&&(!P[D].reliesOnPrototype||P.prototype[D]))return(A,U,N)=>{if(!A?.source)return P[D](U,N,A)}},"getApplyToCanonicalSource");Ne={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ke={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let B=P.shouldRevalidateEvents;return(async()=>{let D=!1,A,U=a(async(N,L)=>{let $=N.value,W=N.table?Me[c][N.table]:ve;if(c===gm&&(N.table===xu.ROLE_TABLE_NAME||N.table===xu.USER_TABLE_NAME)&&(D=!0),N.id===void 0&&(N.id=$[W.primaryKey],N.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(N));N.source=g;let J={residencyId:Qc(N.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:N.nodeId,async:!0},F=N.id,he=await W.getResource(F,L,J);switch(N.finished&&await N.finished,N.type){case"put":return B?he._writeInvalidate(F,$,J):he._writeUpdate(F,$,!0,J);case"patch":return B?he._writeInvalidate(F,$,J):he._writeUpdate(F,$,!1,J);case"delete":return he._writeDelete(F,J);case"publish":case"message":return he._writePublish(F,$,J);case"invalidate":return he._writeInvalidate(F,$,J);case"relocate":return he._writeRelocate(F,J);default:Fe.default.error?.("Unknown operation",N.type,N.id)}},"writeUpdate");try{let N=g.subscribe;N&&R==null&&(R=!0);let L={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=g.subscribeOnThisThread?g.subscribeOnThisThread((0,kl.getWorkerIndex)(),L):(0,kl.getWorkerIndex)()===0,W=N&&$&&await g.subscribe?.(L);if(W){let J;for await(let F of W)try{if(!(F.type==="transaction"?F.writes[0]:F)){Fe.default.error?.("Bad subscription event",F);continue}if(F.source=g,F.type==="end_txn"){J?.resolve();let _e;if(F.localTime&&A!==F.localTime&&F.remoteNodeIds?.length>0&&(_e=a(()=>{let re=[Symbol.for("seq"),F.remoteNodeIds[0]],oe=d.get(re),ge=oe?.nodes;ge||(ge=[]);for(let ie of F.remoteNodeIds.slice(1)){let Ce=ge.find(Be=>Be.id===ie);ge=ge.filter(Be=>Be.id!==ie||Be===Ce),Ce||(Ce={id:ie,seqId:0},ge.push(Ce)),Ce.seqId=Math.max(oe?.seqId??1,F.localTime),ie===J?.nodeId&&(Ce.lastTxnTime=F.timestamp)}let me=Math.max(oe?.seqId??1,F.localTime);Fe.default.trace?.("Received txn",c,me,new Date(me),F.localTime,new Date(F.localTime),F.remoteNodeIds),d.put(re,{seqId:me,nodes:ge})},"updateRecordedSequenceId"),A=F.localTime),F.onCommit){let re=J?J.committed.then(F.onCommit):F.onCommit();_e&&(re?.then?re.then(_e):_e())}else _e&&_e();continue}if(J)if(F.beginTxn)J.resolve();else{J.writePromises.push(U(F,J));continue}!F.timestamp&&F.version&&(F.timestamp=F.version);let ue=bt(F,()=>{if(F.type==="transaction"){let _e=[];for(let re of F.writes)try{_e.push(U(re,F))}catch(oe){throw oe.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify(F),oe}return Promise.all(_e)}else if(F.type==="define_schema"){let _e=this.attributes.slice(0),re=!1;for(let oe of F.attributes)_e.find(ge=>ge.name===oe.name)||(_e.push(oe),re=!0);re&&(ze({table:s,database:c,attributes:_e,origin:"cluster"}),jp.signalSchemaChange(new zp.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return F.beginTxn?(J=F,J.writePromises=[U(F,F)],new Promise(_e=>{J.resolve=()=>_e(Promise.all(J.writePromises))})):U(F,F)});J&&(J.committed=ue),D&&ue&&!ue?.waitingForUserChange&&(ue.then(()=>jp.signalUserChange(new zp.UserEventMsg(process.pid))),ue.waitingForUserChange=!0),F.onCommit&&(ue?ue.then(F.onCommit):F.onCommit())}catch(he){Fe.default.error?.("error in subscription handler",he)}}}catch(N){Fe.default.error?.(N)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==ve.prototype.get}static getResource(g,T,C){let P=super.getResource(g,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),g!=null&&this.loadAsInstance!==!1){Hi(g);try{if(P.getRecord?.())return P;if(typeof g=="object"&&g&&!Array.isArray(g))throw new Error(`Invalid id ${JSON.stringify(g)}`);let O=!C?.async||i.cache?.get?.(g),B=Br(T),D=B.getReadTxn();if(D?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Uo(g,T,{transaction:D,ensureLoaded:C?.ensureLoaded},O,A=>{if(A?ve._updateResource(P,A):P.#e=null,T.onlyIfCached){if(!P.doesExist())throw new dt.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=pn(g,A,T,P);if(U)return B?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,Gs(U,N=>(ve._updateResource(P,N),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(g)),O}}return P}static _updateResource(g,T){g.#r=T,g.#e=T?.value??null,g.#n=T?.version}ensureLoaded(){let g=pn(this.getId(),this.#r,this.getContext());if(g)return this.#i=!0,this.getContext().loadedFromSource=!0,Gs(g,T=>{this.#r=T,this.#e=T.value,this.#n=T.version})}static getNewId(){let g=H?.type;if(g==="String"||g==="ID")return super.getNewId();if(!Bt){let O=i.getEntry(Symbol.for("id_allocation")),B=O?.value,D;if(B&&B.nodeName===server.hostname&&(!Uce(i)||B.pid===process.pid)){let A=B.start,U=B.end;D=A;for(let N of i.getKeys({start:U,end:A,limit:1,reverse:!0}))D=N}else B=P(O?.version??null),D=B.start;Bt=new BigInt64Array([BigInt(D)+1n]),Bt=new BigInt64Array(i.getUserSharedBuffer("id",Bt.buffer)),Bt.maxSafeId=B.end}let T=Number(Atomics.add(Bt,0,1n)),C=g==="Int"?512:1048576;if(T+C>=Bt.maxSafeId){let O=a(B=>{Bt.maxSafeId=T+(g==="Int"?1023:4194303);let D=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=B?void 0:i.useReadTransaction(),U=Number(Bt[0]);for(let $ of i.getKeys({start:U+1,end:D,limit:1,transaction:A}))D=$;A?.done();let{value:N,version:L}=i.getEntry(Symbol.for("id_allocation"));if(Bt.maxSafeId<D){if(N.end>Bt.maxSafeId-100)return;Fe.default.info?.("New id allocation",T,Bt.maxSafeId,L),i.put(Symbol.for("id_allocation"),{start:N.start,end:Bt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),L)}else{Fe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Bt.maxSafeId}, but id of ${D} detected`);let $=P(L);$.alreadyUpdated||Atomics.store(Bt,0,BigInt($.start+1)),Bt.maxSafeId=$.end}},"updateEnd");T+C===Bt.maxSafeId?setImmediate(O):T+100>=Bt.maxSafeId&&(Fe.default.warn?.(`Synchronous id allocation required on table ${s}${g=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return T;function P(O){let B=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=B/4,A,U,N=!1,L,$;do{L=Math.floor(Math.random()*B),$={start:L,end:L+(g==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let W of i.getKeys({start:L,limit:1,reverse:!0}))A=W;U=B;for(let W of i.getKeys({start:L+1,end:B,limit:1}))U=W;D*=.875,D<1e3&&!N&&(N=!0,Fe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${g==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,L,A,U,D))}while(!(D<U-L&&(D<L-A||A===0)));return i.transactionSync(()=>{let W=i.getEntry(Symbol.for("id_allocation"));return(W?.version??null)==O?(Fe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(Fe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...W.value})})}}static setTTLExpiration(g){if(typeof g=="number")h=g*1e3,E||(E=0);else if(g&&typeof g=="object")h=g.expiration*1e3,E=(g.eviction||0)*1e3,$e=g.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");$e=$e||(h+E)/4,$a()}static getResidencyRecord(g){return d.get([Symbol.for("residency_by_id"),g])}static setResidency(g){ve.getResidency=g&&((T,C)=>{try{return g(T,C)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(g){ve.getResidencyById=g&&(T=>{try{return g(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(g,T){if(ve.getResidencyById)return ve.getResidencyById(g[t]);let C=si;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(C=T.replicateTo)}if(C>=0&&server.nodes){let P=[server.hostname];if(T.previousResidency)P.push(...T.previousResidency.slice(0,C));else{let O=server.nodes.map(A=>A.name),B=Math.floor(O.length*Math.random());P.push(...O.slice(B,B+C));let D=B+C-O.length;D>0&&P.push(...O.slice(0,D))}return P}}static enableAuditing(){_||(_=!0,pm(),ve.audit=!0)}static coerceId(g){return g===""?null:TS(g,H)}static async dropTable(){delete Me[c][s];for(let g of i.getRange({versions:!0,snapshot:!1,lazy:!0}))g.metadataFlags&Xr&&g.value&&Ja(g.value);if(c===o){for(let g of S)d.remove(ve.tableName+"/"+g.name),r[g.name]?.drop();d.remove(ve.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),WN.default.unlinkSync(i.env.path);jp.signalSchemaChange(new zp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(g){let T=this.constructor;if(typeof g=="string"&&T.loadAsInstance!==!1)return this.getProperty(g);if(dm(g))return this.search(g);if(g&&g.id===void 0&&!g.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?ve.getRecordCount().then(P=>(C.recordCount=P.recordCount,C.estimatedRecordRange=P.estimatedRange,C)):C}if(g!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),P=Br(C),O=P.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let B=Ps(g);Hi(B);let D=!0;return g.checkPermission&&(D=this.allowRead(C.user,g)),Gs(Gs(D,A=>{if(!A)throw new dt.AccessViolation(C.user);let U=!0;return Uo(B,C,{transaction:O,ensureLoaded:U},!1,N=>{if(C.onlyIfCached){if(!N?.value)throw new dt.ServerError("Entry is not cached",504)}else if(U){let L=pn(B,N,C);if(L)return P?.disregardReadTxn(),C.loadedFromSource=!0,L.then($=>$?.value)}return N?.value})}),A=>{let U=g?.select;return U&&A!=null?rd(U,this.constructor)(A):A})}if(g?.property)return this.getProperty(g.property);if(this.doesExist()||g?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(g,T){let C=Dn(g,T);if(C?.read){if(C.isSuperUser)return!0;let P=C.attribute_permissions,O=T?.select;if(P?.length>0||Pu&&O){if(T||(T={}),O){let B=Array.isArray(O)?O:[O],D=P?.length>0&&YN(P,"read");T.select=B.map(A=>{let U=A.name||A;if(!D||D[U]){let N=xr[U]?.definition?.tableClass;if(N){if(A.name||(A={name:A}),!A.checkPermission&&T.checkPermission&&(A.checkPermission=T.checkPermission),!N.prototype.allowRead.call(null,g,A))return!1;if(!A.select)return A.name}return A}}).filter(Boolean)}else T.select=P.filter(B=>B.read&&!xr[B.attribute_name]).map(B=>B.attribute_name);return T}else return!0}}allowUpdate(g,T,C){let P=Dn(g,C);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let B=YN(O,"update");for(let D in T)if(!B[D])return!1;for(let D of O){let A=D.attribute_name;!D.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return qa(this.getContext())}}allowCreate(g,T,C){if(this.isCollection){let P=Dn(g,C);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let B=YN(O,"insert");for(let D in T)if(!B[D])return!1;return qa(this.getContext())}else return qa(this.getContext())}}else return this.allowUpdate(g,{})}allowDelete(g,T){return Dn(g,T)?.delete&&qa(this.getContext())}update(g,T){let C,P=typeof T=="boolean"||T===void 0&&(g==null||typeof g=="object"&&!(g instanceof URLSearchParams)),O=!1;P?(O=T,T=g,C=this.getId()):C=Ps(g);let B=this.getContext();if(!Br(B))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(O)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(P){let A=this.#t;A&&(T=Object.assign(A,T)),this.#t=T}else{let A=!0;if(g==null)throw new TypeError("Can not put a record without a target");return g.checkPermission&&(A=this.allowUpdate(B.user,T,g)),Gs(A,U=>{if(!U)throw new dt.AccessViolation(B.user);return Gs(i.get(Ps(g)),N=>{let L=new um(N);return L._setChanges(T),this._writeUpdate(C,L.getChanges(),!1),L})})}return this._writeUpdate(C,this.#t,O),this}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.#s===vq?this.set(g,(+this.getProperty(g)||0)+T):(this.#s||this.update(),this.set(g,new Rp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(g,T){if(typeof T=="number")return this.addTo(g,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(g){this.#t=g}setRecord(g){this.#e=g}invalidate(g){let T=!0,C=this.getContext();return g?.checkPermission&&(T=this.allowDelete(C.user,g,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);this._writeInvalidate(g?Ps(g):this.getId())})}_writeInvalidate(g,T,C){let P=this.getContext();Hi(g),Br(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#r,before:Ne.invalidate?.bind(this,P,g),beforeIntermediate:Mu(T,Ke.invalidate?.bind(this,P,g)),commit:a((B,D)=>{if(!(Fr(B,D,C?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));Fe.default.trace?.(`Invalidating entry in ${s} id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,T,D,B,Fn,_,{user:P?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(g,T){let C=this.getContext();Hi(g),Br(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#r,before:Ne.relocate?.bind(this,C,g),beforeIntermediate:Ke.relocate?.bind(this,C,g),commit:a((O,B)=>{if(Fr(O,B,T?.nodeId)<=0)return;let D=ve.getResidencyRecord(T.residencyId),A=0,U=null,N=B?.value;if(D&&!D.includes(server.hostname)){for(let L in r)U||(U={}),U[L]=N[L];A=Fn}else U=N;Fe.default.trace?.(`Relocating entry id: ${g}, timestamp: ${new Date(O).toISOString()}`),y(g,U,B,O,A,_,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(g,T){if(this.getResidencyById)return!1;let C={previousResidency:this.getResidencyRecord(g.residencyId),isRelocation:!0},P=Va(this.getResidency(T.value,C)),O;if(P){if(!P.includes(server.hostname))return!1;O=Qc(P)}let B=0;Fe.default.debug?.("Performing a relocate of an entry",g.key,T.value,P);let D=y(g.key,T.value,g,g.version,B,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(g,T,C){let P=this.Source,O;if(!((I||_)&&(!T||(O=i.getEntry(g),!O||!T)||O.version!==C))){if(I){if(i.hasLock(g,O.version))return;let B;for(let D in r)B||(B={}),B[D]=T[D];if(B)return y(g,B,O,C,_l,null,null,null,!0)}return i.ifVersion(g,C,()=>{Lu(g,T,null)}),El(i,O??i.getEntry(g),C)}}lock(){throw new Error("Not yet implemented")}static operation(g,T){return g.table||=s,g.schema||=c,global.operation(g,T)}put(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!0);else{let C=!0;if(g==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return g.checkPermission&&(C=this.allowUpdate(P.user,T,g)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);if(Array.isArray(T))for(let B of T){let D=B[t];this._writeUpdate(D,B,!0)}else{let B=Ps(g);this._writeUpdate(B,T,!0)}})}}create(g,T){let C=!0,P=this.getContext();if(!T&&!(g instanceof URLSearchParams)&&(T=g,g=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return g?.checkPermission&&(C=this.allowCreate(P.user,T,g)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);let B=Ps(g)??T[t];if(B===void 0)B=this.constructor.getNewId(),T[t]=B;else if(i.get(B))throw new dt.ClientError("Record already exists",409);return this._writeUpdate(B,T,!0),T})}patch(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!1);else{let C=this.update(g,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(g,T,C,P){let O=this.getContext(),B=Br(O);Hi(g);let D=this.#r??i.getEntry(g);this.#s=C?vq:Lce;let A=a(N=>C?N.put?()=>N.put(O,g,T):null:N.patch?()=>N.patch(O,g,T):N.put?()=>N.put(O,g,Cl(this)):null,"writeToSources"),U={key:g,store:i,entry:D,nodeName:O?.nodeName,validate:a(N=>{T||(T=this.#t),C||T&&Vg(this.#t===T?this:T)?O?.source||(B.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(N):k.type==="String"?new Date(N).toISOString():N),C&&(t&&T[t]!==g&&(T[t]=g),q&&(D?.value?T[q.name]=D?.value[q.name]:T[q.name]=q.type==="Date"?new Date(N):q.type==="String"?new Date(N).toISOString():N),T=Cl(T))):B.removeWrite(U)},"validate"),before:A(Ne),beforeIntermediate:Mu(T,A(Ke)),commit:a((N,L,$)=>{if($){if(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),this.#r=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#n=N;let W=L?.value,J;this.#s=0;let F=!1,he=Fr(N,L,P?.nodeId),ue,_e=C?"put":"patch",re;P?.residencyId!=null&&(re=P.residencyId);let oe=O?.expiresAt??(h?h+Date.now():-1);if(he<=0){if(_){let ie=L.localTime,Ce=L.version;Fe.default.trace?.("Applying CRDT update to record with id: ",g,"txn time",new Date(N),"applying later update from:",new Date(Ce),"local recorded time",new Date(ie));let Be=[];for(;ie>N||Ce>=N&&ie>0;){let He=l.get(ie);if(!He)break;let Te=At(He);if(Ce=Te.version,Ce>=N){if(Ce===N){if(he=Fr(N,{version:Ce,localTime:ie},P?.nodeId),he===0)return me(!1);if(he>0){ie=Te.previousLocalTime;continue}}if(Te.type==="patch")Be.push(Te),ue=T;else if(Te.type==="put"||Te.type==="delete")return me(!1)}ie=Te.previousLocalTime}ie||Fe.default.debug?.("No further audit history, applying incremental updates based on available history",g,"existing version preserved",L),Be.sort((He,Te)=>He.version-Te.version);for(let He of Be){let Te=He.getValue(i);if(Fe.default.debug?.("Rebuilding update with future patch:",new Date(He.version),Te,He),J=B_(J??T,Te,C),!J)return me(!1)}}else{if(C)return me(!1);J=B_(J??T,W,C),Fe.default.debug?.("Rebuilding update without audit:",J)}Fe.default.trace?.("Rebuilt record to save:",J," is full update:",C)}let ge;if(C&&!J?ge=T:this.constructor.loadAsInstance===!1?ge=Cl(W,J??T):(this.#e=W,ge=Cl(this,J??T)),this.#e=ge,ge&&ge.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(re==null){D?.residencyId&&(O.previousResidency=ve.getResidencyRecord(D.residencyId));let ie=Va(ve.getResidency(ge,O));if(ie&&!ie.includes(server.hostname))if(ue??=ge,F=!0,ve.getResidencyById)ge=void 0;else{ge=null;for(let Ce in r)ge||(ge={}),ge[Ce]=ue[Ce]}re=Qc(ie)}C||(ue=T),Fe.default.trace?.(`Saving record with id: ${g}, timestamp: ${new Date(N).toISOString()}${oe?", expires at: "+new Date(oe).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ge).slice(0,100)}catch{return""}})()),Lu(g,W,ge),me(!0),O.expiresAt&&$a();function me(ie){y(g,ie?ge:void 0,ie?L:{...L,value:void 0},N,F?Fn:0,_,{omitLocalRecord:F,user:O?.user,residencyId:re,expiresAt:oe,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},_e,!1,ie?ue:ue??T)}a(me,"writeCommit")},"commit")};B.addWrite(U)}async delete(g){if(dm(g)){g.select=["$id"];for await(let T of this.search(g))this._writeDelete(T.$id);return!0}if(g){let T=!0,C=this.getContext();return g.checkPermission&&(T=this.allowDelete(C.user,g,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);let O=Ps(g);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(g,T){let C=Br(this.getContext());Hi(g);let P=this.getContext();return C.addWrite({key:g,store:i,entry:this.#r,nodeName:P?.nodeName,before:Ne.delete?.bind(this,P,g),beforeIntermediate:Ke.delete?.bind(this,P,g),commit:a((O,B,D)=>{let A=B?.value;D&&(P&&B?.version>(P.lastModified||0)&&(P.lastModified=B.version),ve._updateResource(this,B)),!(Fr(O,B,T?.nodeId)<=0)&&(Lu(this.getId(),A),Fe.default.trace?.(`Deleting record with id: ${g}, txn timestamp: ${new Date(O).toISOString()}`),_||R?(y(g,null,B,O,0,_,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),_||$a()):El(i,B))},"commit")}),!0}search(g){let T=this.getContext(),C=Br(T);if(!g)throw new Error("No query provided");if(g.parseError)throw g.parseError;if(g.checkPermission&&!this.allowRead(T.user,g))throw new dt.AccessViolation(T.user);T&&(T.lastModified=Nce);let P=g.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(g)?g:g[Symbol.iterator]?Array.from(g):[];let O=g.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let B,D={};function A(oe,ge){let me;switch(ge){case"and":case void 0:if(oe.length<1)throw new Error('An "and" operator requires at least one condition');me=!0;break;case"or":if(oe.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}for(let ie of oe){if(ie.conditions){ie.conditions=A(ie.conditions,ie.operator);continue}let Ce=ie[0]??ie.attribute,Be=Ce==null?H:ji(S,Ce);if(Be)(Be.type||hI[ie.comparator])&&(ie[1]===void 0?ie.value=N(ie.value,Be):ie[1]=N(ie[1],Be));else if(Ce!=null&&!g.allowConditionsOnDynamicAttributes)throw(0,dt.handleHDBError)(new Error,`${Ce} is not a defined attribute`,404);if(ie.chainedConditions)if(ie.chainedConditions.length===1&&(!ie.operator||ie.operator=="and")){let He=ie.chainedConditions[0],Te,pt;if(He.comparator==="gt"||He.comparator==="greater_than"||He.comparator==="ge"||He.comparator==="greater_than_equal"?(Te=ie,pt=He):(Te=He,pt=ie),Te.comparator!=="lt"&&Te.comparator!=="less_than"&&Te.comparator!=="le"&&Te.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Nt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",Ft=Te.comparator==="le"||Te.comparator==="less_than_equal";ie.comparator=(Nt?"ge":"gt")+(Ft?"le":"lt"),ie.value=[pt.value,Te.value]}else throw new Error("Multiple chained conditions are not currently supported")}return oe}a(A,"prepareConditions");function U(oe,ge){if(g.enforceExecutionOrder)return oe;for(let me of oe)me.conditions&&(me.conditions=U(me.conditions,me.operator));return oe.length>1&&ge!=="or"?Ace(oe,Sg(ve)):oe}a(U,"orderConditions");function N(oe,ge){return Array.isArray(oe)?oe.map(me=>TS(me,ge)):TS(oe,ge)}a(N,"coerceTypedValues");let L=g.operator;(P.length>0||L)&&(P=A(P,L));let $=typeof g.sort=="object"&&g.sort,W;if($&&L!=="or"){let oe=$.attribute;if(oe==null)throw new dt.ClientError("Sort requires an attribute");if(B=P.find(ge=>Zu(ge.attribute)===Zu(oe)),!B){let ge=ji(S,oe);if(!ge)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not a defined attribute`,404);if(ge.indexed)B={...$,comparator:"sort"},P.push(B);else if(P.length===0&&!g.allowFullScan)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not indexed and not combined with any other conditions`,404)}B&&(B.descending=!!$.descending)}P=U(P,L),$&&(B&&P[0]===B?$.next&&(W={dbOrderedAttribute:$.attribute,attribute:$.next.attribute,descending:$.next.descending,next:$.next.next}):(B&&P.splice(P.indexOf(B),1),W=$));let J=g.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),g.explain)return{conditions:P,operator:L,postOrdering:W,selectApplied:!!J};let F=C.useReadTxn(),he=EI(P,L,ve,F,g,T,(oe,ge)=>mm(oe,J,T,F,ge),D),ue=g.ensureLoaded!==!1,_e=ve.transformEntryForSelect(J,T,F,D,ue,!0),re=ve.transformToOrderedSelect(he,J,W,T,F,_e);return(g.offset||g.limit!==void 0)&&(re=re.slice(g.offset,g.limit!==void 0?(g.offset||0)+g.limit:void 0)),re.onDone=()=>{re.onDone=null,C.doneReadTxn()},re.selectApplied=!0,re.getColumns=()=>{if(J){let oe=[];for(let ge of J)ge==="*"?oe.push(...S.map(me=>me.name)):oe.push(ge.name||ge);return oe}return S.filter(oe=>!oe.computed&&!oe.relationship).map(oe=>oe.name)},re}static transformToOrderedSelect(g,T,C,P,O,B){let D=new a_;if(C){g=mm(g,T,P,O,null);let A;D.iterate=function(){let N,L=g[Symbol.asyncIterator]?g[Symbol.asyncIterator]():g[Symbol.iterator](),$,W=C.dbOrderedAttribute,J,F,he=!0;function ue(re){let oe=re.next&&ue(re.next),ge=re.descending;return P.sort=re,(me,ie)=>{let Ce=Du(me,re.attribute,P),Be=Du(ie,re.attribute,P),He=ge?(0,Gl.compareKeys)(Be,Ce):(0,Gl.compareKeys)(Ce,Be);return He===0?oe?.(me,ie)||0:He}}a(ue,"createComparator");let _e=ue(C);return{async next(){let re;if(N)if(re=N.next(),re.done){if($)return D.onDone&&D.onDone(),re}else return{value:await B.call(this,re.value)};A=[],J&&A.push(J);do if(re=await L.next(),re.done){if($=!0,A.length)break;return D.onDone&&D.onDone(),re}else{let oe=re.value;if(oe?.then&&(oe=await oe),W){let ge=Du(oe,W,P);if(he)he=!1,F=ge;else if(ge!==F){F=ge,J=oe;break}}A.push(oe)}while(!0);return C.isGrouped,A.sort(_e),N=A[Symbol.iterator](),re=N.next(),re.done?(D.onDone&&D.onDone(),re):{value:await B.call(this,re.value)}},return(){return D.onDone&&D.onDone(),L.return()},throw(){return D.onDone&&D.onDone(),L.throw()}}};let U=a(N=>{if(typeof T=="object"&&Array.isArray(N.attribute))for(let L=0;L<T.length;L++){let $=T[L],W;if($.name===N.attribute[0]){for(W=$.sort||($.sort={});W.next;)W=W.next;W.attribute=N.attribute.slice(1),W.descending=N.descending}else $===N.attribute[0]&&(T[L]=W={name:$,sort:{attribute:N.attribute.slice(1),descending:N.descending}})}N.next&&U(N.next)},"applySortingOnSelect");U(C)}else D.iterate=(g[Symbol.asyncIterator]||g[Symbol.iterator]).bind(g),D=D.map(function(A){try{let U=B.call(this,A);return typeof U?.catch=="function"?U.catch(N=>{throw N.partialObject={[t]:A.key},N}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return D}static transformEntryForSelect(g,T,C,P,O,B){let D;O&&I&&!(typeof g=="string"?[g]:g)?.every(N=>{let L;return typeof N=="object"?L=N.name:L=N,r[L]||L===t})&&(D=!0);let A,U=a(function(N){let L;if(T?.transaction?.stale&&(T.transaction.stale=!1),N!=null){if(L=N.deref?N.deref():N.value,!L&&(N.key===void 0||N.deref)||N.metadataFlags&Fn){if(N.metadataFlags&Fn&&T.replicateFrom===!1&&B&&N.residencyId)return hc.SKIP;if(N=Uo(N.key??N,T,{transaction:C,lazy:g?.length<4,ensureLoaded:O},this?.isSync,$=>$),N?.then)return N.then(U.bind(this));L=N?.value}if(D&&N?.metadataFlags&(Fn|_l)||N?.expiresAt!=null&&N?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:N.key,message:"This entry has expired"};let $=pn(N.key??N,N,T);if($?.then)return $.then(U)}}if(L==null)return B?hc.SKIP:L;if(g&&!(g[0]==="*"&&g.length===1)){let $,W=a((F,he)=>{let ue;typeof F=="object"?ue=F.name:ue=F;let _e=xr?.[ue],re;if(_e){let oe=P?.[ue];if(oe)if(oe.hasMappings){let me=_e.from?L[_e.from]:Zu(N.key);re=oe.get(me),re||(re=[])}else re=oe.fromRecord?.(L);else re=_e(L,T,N,!0);let ge=a(me=>{if(_e.directReturn)return he(me,ue);if(me&&typeof me=="object"){let ie=_e.definition?.tableClass||ve;A||(A={});let Ce=A[ue]||(A[ue]=ie.transformEntryForSelect(ue===F?null:F.select||(Array.isArray(F)?F:null),T,C,oe,O));if(Array.isArray(me)){let Be=[],He=ie.transformToOrderedSelect(me,F.select,typeof F.sort=="object"&&F.sort,T,C,Ce)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Te=a(Nt=>{for(;!Nt.done;){if(Nt?.then)return Nt.then(Te);Be.push(Nt.value),Nt=He.next()}he(Be,ue)},"nextValue"),pt=Te(He.next());pt&&($||($=[]),$.push(pt));return}else if(me=Ce.call(this,me),me?.then){$||($=[]),$.push(me.then(Be=>he(Be,ue)));return}}he(me,ue)},"handleResolvedValue");re?.then?($||($=[]),$.push(re.then(ge))):ge(re);return}else re=L[ue],re&&typeof re=="object"&&ue!==F&&(re=ve.transformEntryForSelect(F.select||F,T,C,null)({value:re}));he(re,ue)},"selectAttribute"),J;if(typeof g=="string")W(g,F=>{J=F});else if(Array.isArray(g))if(g.asArray)J=[],g.forEach((F,he)=>{F==="*"?g[he]=L:W(F,ue=>J[he]=ue)});else{J={};let F=g.forceNulls;for(let he of g)if(he==="*")for(let ue in L)J[ue]=L[ue];else W(he,(ue,_e)=>{ue===void 0&&F&&(ue=null),J[_e]=ue})}else throw new dt.ClientError("Invalid select"+g);return $?Promise.all($).then(()=>J):J}return L},"transform");return U}async subscribe(g){if(!l)throw new Error("Can not subscribe to a table without an audit log");_||ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),g||(g={});let T=!g.rawEvents,C=[],P=bI(ve,this.getId()??null,function(D,A,U,N){try{let L=A.getValue?.(i,T),$=A.type;if(!L&&$==="patch"&&T){let J=i.getEntry(D);J?.version===A.version?L=J.value:L=A.getValue?.(i,!0,U),$="put"}let W={id:D,localTime:U,value:L,version:A.version,type:$,beginTxn:N};C?C.push(W):(c!=="system"&&Ye(A.size??1,"db-message",s,null),this.send(W))}catch(L){Fe.default.error?.(L)}},g.startTime||0,g),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,g.onlyChildren&&(P.onlyChildren=!0)),g.supportsTransactions&&(P.supportsTransactions=!0);let D=this.getId(),A=g.previousCount;A>1e3&&(A=1e3);let U=g.startTime;if(this.isCollection){if(U){if(A)throw new dt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:L}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let $=At(L);if($.tableId!==n)continue;let W=$.recordId;if(D==null||Bq(D,W)){let J=$.getValue(i,T,N);if(B({id:W,localTime:N,value:J,version:$.version,type:$.type,size:$.size}),P.queue?.length>Uq&&await P.waitForDrain()===!1)return}P.startTime=N}}else if(A){let N=[];for(let{key:L,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let W=At($);if(W.tableId!==n)continue;let J=W.recordId;if(D==null||Bq(D,J)){let F=W.getValue(i,T,L);if(N.push({id:J,localTime:L,value:F,version:W.version,type:W.type}),--A<=0)break}}catch(W){Fe.default.error("Error getting history entry",L,W)}for(let L=N.length;L>0;)B(N[--L]);N[0]&&(P.startTime=N[0].localTime)}else if(!g.omitCurrent){for(let{key:N,value:L,version:$,localTime:W,size:J}of i.getRange({start:D??!1,end:D==null?void 0:[D,Gl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(L&&(B({id:N,localTime:W,value:L,version:$,type:"put",size:J}),P.queue?.length>Uq&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let N=this.#r?.localTime;if(N===fI&&(i.cache?.delete(D),this.#r=i.getEntry(D),Fe.default.trace?.("re-retrieved record",N,this.#r?.localTime),N=this.#r?.localTime),Fe.default.trace?.("Subscription from",U,"from",D,N),U<N){let L=[],$=N;do{let W=l.get($);if(W){g.omitCurrent=!0;let J=At(W),F=J.getValue(i,T,$);T&&(J.type="put"),L.push({id:D,value:F,localTime:$,...J}),$=J.previousLocalTime}else break;A&&A--}while($>U&&A!==0);for(let W=L.length;W>0;)B(L[--W]);P.startTime=N}!g.omitCurrent&&this.doesExist()&&B({id:D,localTime:N,value:this.#e,version:this.#n,type:"put"})}for(let N of C)B(N);C=null})();function B(D){c!=="system"&&Ye(D.size??1,"db-message",s,null),P.send(D)}return a(B,"send"),g.listener&&P.on("data",g.listener),P}static subscribeOnThisThread(g,T){return g===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(g,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),g,T);else{let P=!0,O=this.getContext();return g.checkPermission&&(P=this.allowCreate(O.user,g,O)),Gs(P,B=>{if(!B)throw new dt.AccessViolation(O.user);let D=Ps(g);this._writePublish(D,T,C)})}}_writePublish(g,T,C){let P=Br(this.getContext());g??=null,g!==null&&Hi(g);let O=this.getContext();P.addWrite({key:g,store:i,entry:this.#r,nodeName:O?.nodeName,validate:a(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:Ne.publish?.bind(this,O,g,T),beforeIntermediate:Mu(T,Ke.publish?.bind(this,O,g,T)),commit:a((B,D,A)=>{D===void 0&&R&&!_&&$a(),Fe.default.trace?.(`Publishing message to id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,D?.value??null,D,D?.version||B,0,!0,{user:O?.user,residencyId:C?.residencyId,expiresAt:O?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(g,T){let C,P=a((O,B,D)=>{if(B.type&&O!=null)if(T&&O.__op__&&(O=O.value),B.properties){typeof O!="object"&&(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be an object${B.type?" ("+B.type+")":""}`);let A=B.properties;for(let U=0,N=A.length;U<N;U++){let L=A[U];if(L.relationship||L.computed){g.hasOwnProperty(L.name)&&(C||(C=[])).push(`Computed property ${D}.${L.name} may not be directly assigned a value`);continue}let $=P(O[L.name],L,D+"."+L.name);$&&(O[L.name]=$)}if(B.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(N=>N.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${D}`)}else switch(B.type){case"Int":(typeof O!="number"||O>>0!==O)&&(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a string`);break;case"Boolean":typeof O!="boolean"&&(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(O instanceof Ds)){if(typeof O=="string"&&(O=Buffer.from(O)),O instanceof Buffer)return createBlob(O,{type:"text/plain"});(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(B.elements)for(let A=0,U=O.length;A<U;A++){let N=O[A],L=P(N,B.elements,D+"[*]");L&&(O[A]=L)}}else(C||(C=[])).push(`Value ${qs(O)} in property ${D} must be an Array`);break}B.nullable===!1&&O==null&&(C||(C=[])).push(`Property ${D} is required (and not does not allow null values)`)},"validateValue");for(let O=0,B=S.length;O<B;O++){let D=S[O];if(D.relationship||D.computed){Object.hasOwn(g,D.name)&&(C||(C=[])).push(`Computed property ${D.name} may not be directly assigned a value`);continue}if(!T||D.name in g){let A=P(g[D.name],D,D.name);A!==void 0&&(g[D.name]=A)}}if(f)for(let O in g)S.find(B=>B.name===O)||(C||(C=[])).push(`Property ${O} is not allowed`);if(C)throw new dt.ClientError(C.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(g){let T=S.slice(0);for(let C of g){if(!C.name)throw new dt.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new dt.ClientError("Attribute names cannot include backticks or forward slashes");Ice(C.name),T.push(C)}return ze({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static async removeAttributes(g){let T=S.filter(C=>!g.includes(C.name));return ze({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static getSize(){let g=i.getStats();return(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getAuditSize(){let g=l?.getStats();return g&&(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getStorageStats(){let g=i.env.path,T=WN.default.statfsSync?.(g)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(g){let T=i.getStats().entryCount,C=1e3/2,P=performance.now(),O=Math.floor(T/2),B=g?.exactCount,D=0,A=0,U;for(let{value:N}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(N!=null&&D++,A++,await pc(),!B&&A<O&&performance.now()-P>C){U=A;break}if(U){let N=D;D=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))re!=null&&D++,await pc();let L=U*2,$=(D+N)/L,W=Math.pow((D-N+1)/U/2,2)+$*(1-$)/L,J=Math.max(Math.sqrt(W)*T,1),F=Math.round($*T),he=Math.max(F-1.96*J,D+N),ue=Math.min(F+1.96*J,T),_e=Math.pow(10,Math.round(Math.log10(J)));return _e>F&&(_e=_e/10),D=Math.round(F/_e)*_e,{recordCount:D,estimatedRange:[Math.round(he),Math.round(ue)]}}return{recordCount:D}}static updatedAttributes(){xr=this.propertyResolvers={$id:a((g,T,C)=>({value:C.key}),"$id"),$updatedtime:a((g,T,C)=>C.version,"$updatedtime"),$updatedTime:a((g,T,C)=>C.version,"$updatedTime"),$expiresAt:a((g,T,C)=>C.expiresAt,"$expiresAt"),$record:a((g,T,C)=>C?{value:g}:g,"$record"),$distance:a((g,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let g of this.attributes){g.isPrimaryKey&&(H=g),g.resolve=null;let T=g.relationship,C=g.computed;if(T)if(g.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Pu=!0,T.to)g.elements?.definition?(xr[g.name]=g.resolve=(P,O,B,D)=>{let A=P[T.from?T.from:t],U=g.elements.definition.tableClass;return D?Xu({attribute:T.to,value:A},Br(O).getReadTxn(),!1,U,!1).map(N=>N&&N.key!==void 0?N:U.primaryStore.getEntry(N,{transaction:Br(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},g.set=()=>{},g.resolve.definition=g.elements.definition,g.resolve.to=T.to,T.from&&(g.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${g.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=g.definition||g.elements?.definition;P?(xr[g.name]=g.resolve=(O,B,D,A)=>{let U=O[T.from];if(U===void 0)return;if(g.elements){let L,$=U?.map(W=>{let J=P.tableClass.primaryStore[A?"getEntry":"get"](W,{transaction:Br(B).getReadTxn()});return J?.then&&(L=!0),ve.loadAsInstance===!1&&Object.freeze(A?J?.value:J),J});return T.filterMissing?L?Promise.all($).then(W=>W.filter(Fq)):$.filter(Fq):L?Promise.all($):$}let N=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Br(B).getReadTxn()});return ve.loadAsInstance===!1&&Object.freeze(A?N?.value:N),N},g.set=(O,B)=>{if(Array.isArray(B)){let D=B.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=D}else{let D=B.getId?.()||B[P.tableClass.primaryKey];O[T.from]=D}},g.resolve.definition=g.definition||g.elements?.definition,g.resolve.from=T.from):console.error(`The relationship property "${g.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${g.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(g.name,C.from),xr[g.name]=g.resolve=(P,O,B)=>{let D=typeof C.from=="string"?P[C.from]:P,A=this.userResolvers[g.name];if(A)return A(D,O,B);Fe.default.warn(`Computed attribute "${g.name}" does not have a function assigned to it. Please use setComputedAttribute('${g.name}', resolver) to assign a resolver function.`),this.userResolvers[g.name]=()=>{}},g.resolve.directReturn=!0;else if(r[g.name]?.customIndex?.propertyResolver){let P=r[g.name].customIndex;xr[g.name]=(O,B,D)=>{let A=O[g.name];return P.propertyResolver(A,B,D)},xr[g.name].directReturn=!0}}bp(this,this),bp(um,this,!0);for(let g of S){let T=g.name;g.resolve&&(Object.defineProperty(i.encoder.structPrototype,T,{get(){return g.resolve(this,td.getStore())},set(C){return g.set(this,C)},configurable:!0,enumerable:g.enumerable}),g.enumerable&&!i.encoder.structPrototype.toJSON&&Object.defineProperty(i.encoder.structPrototype,"toJSON",{configurable:!0,value(){let C={};for(let P in this)C[P]=this[P];return C}}))}}static setComputedAttribute(g,T){let C=ji(S,g);if(!C){console.error(`The attribute "${g}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${g}" is not defined as computed in the table "${s}"`);return}this.userResolvers[g]=T}static async deleteHistory(g=0,T=!1){let C;for(let{key:P,value:O}of l.getRange({start:0,end:g}))await pc(),At(O).tableId===n&&(C=sg(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:B,localTime:D}=P;await pc(),B===null&&D<g&&(C=El(i,P))}await C}static async*getHistory(g=0,T=1/0){for(let{key:C,value:P}of l.getRange({start:g||1,end:T})){await pc();let O=At(P);O.tableId===n&&(yield{id:O.recordId,localTime:C,version:O.version,type:O.type,value:O.getValue(i,!0,C),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(g){let T=[];if(g==null)throw new Error("An id is required");let C=i.getEntry(g);if(!C)return T;let P=C.localTime;if(!P)throw new Error("The entry does not have a local audit time");let O=0;do{await pc();let B=l.get(P);if(B){let D=At(B);T.push({id:D.recordId,localTime:P,version:D.version,type:D.type,value:D.getValue(i,!0,P),user:D.user}),P=D.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){Y?.remove()}}let l_=gS(async(K,g,T)=>{for(let C of ve.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;g.source=C;let P=await C.get(K,g);if(P)return P}},()=>{throw new dt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});ve.updatedAttributes();let $b=ve.prototype;return h&&ve.setTTLExpiration(h/1e3),z&&u_(),ve;function Lu(K,g,T){let C;for(let P in r){let O=r[P],B=O.isIndexing,D=xr[P],A=T&&(D?D(T):T[P]),U=g&&(D?D(g):g[P]);if(A===U&&!B)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}C=!0;let N=O.indexNulls,L=(0,Wp.getIndexedValues)(A,N),$=(0,Wp.getIndexedValues)(U,N);if($?.length>0){let W=new Set($);if(L=L?L.filter(J=>{if(W.has(J))W.delete(J);else return!0}):[],$=Array.from(W),($.length>0||L.length>0)&&Dq){let J=$.concat(L).map(F=>({key:F,value:K}));O.prefetch(J,xq)}for(let J=0,F=$.length;J<F;J++)O.remove($[J],K)}else L?.length>0&&Dq&&O.prefetch(L.map(W=>({key:W,value:K})),xq);if(L)for(let W=0,J=L.length;W<J;W++)O.put(L[W],K)}return C}a(Lu,"updateIndices");function Hi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Mq)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Gl.writeKey)(K,Dce,0)>Mq)throw new Error("Primary key size is too large: "+K.length);return!0}a(Hi,"checkValidId");function Ps(K){return typeof K=="object"&&K?K.id:K}a(Ps,"requestTargetToId");function dm(K){return typeof K=="object"&&K&&K.isCollection}a(dm,"isSearchTarget");function fm(K){}a(fm,"isRequestTarget");function Uo(K,g,T,C,P){if(ve.getResidencyById&&T.ensureLoaded&&g?.replicateFrom!==!1){let B=Va(ve.getResidencyById(K));if(B&&!B.includes(server.hostname)&&w)return w({key:K,residency:B}).then(P)}let O=a(()=>{if(g?.transaction?.stale&&(g.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let B=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(Gq.default.trace?.("Recording db-read action for",`${c}.${s}`),Ye(B?.size??1,"db-read",s,null)),g?._freezeRecords&&Object.freeze(B?.value),B?.residencyId&&B.metadataFlags&Fn&&w&&T.ensureLoaded&&g?.replicateFrom!==!1?w(B).then(D=>P(D,K),D=>(Fe.default.error?.("Error loading remote record",K,B,T,D),P(null,K))):(B&&g&&(B?.version>(g.lastModified||0)&&(g.lastModified=B.version),B?.localTime&&!g.lastRefreshed&&(g.lastRefreshed=B.localTime)),P(B,K))},"whenPrefetched");return C?O():te>0?(te--,O()):new Promise((B,D)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(ce.push(K),de.push(U),ce.length>c_&&(te--,A()));function A(){if(ce.length>0){let N=de;i.prefetch(ce,()=>{te===-1?A():te++;for(let L of N)L()}),ce=[],de=[],Se>2&&Se--}else te=Se,Se<lm&&Se++}a(A,"prefetch");function U(){try{B(O())}catch(N){D(N)}}a(U,"load")})}a(Uo,"loadLocalRecord");function Dn(K,g){let T=g?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return vce;let C=T[c],P,O=C?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}a(Dn,"getTablePermissions");function pn(K,g,T,C){if(I){let P=!1;if(T.noCache?P=!0:(g?(!g.value||g.metadataFlags&(Fn|_l)||g.expiresAt!=null&&g.expiresAt<Date.now())&&(P=!0):P=!0,en(!P,"cache-hit",s)),P){let O=vu(K,g,T).then(B=>(B?.value&&B?.value.getRecord?.()&&Fe.default.error?.("Can not assign a record that is already a resource"),T&&(B?.version>(T.lastModified||0)&&(T.lastModified=B.version),T.lastRefreshed=Date.now()),B));if(T?.onlyIfCached||g?.value&&C?.allowStaleWhileRevalidate?.(g,K)){if(O.catch(B=>Fe.default.warn?.(B)),T?.onlyIfCached&&!C.doesExist())throw new dt.ServerError("Entry is not cached",504);return}else return O}}else if(g?.value&&g.expiresAt!=null&&g.expiresAt<Date.now())return ve.evict(g.key,g.value,g.version),g.value=null,{then(P){return P(g)}}}a(pn,"ensureLoadedFromSource");function Br(K){let g=K?.transaction;if(g){if(!g.lmdbDb)return g.lmdbDb=i,g;do{if(g.lmdbDb?.path===i.path)return g;let T=g.next;if(!T)return g=g.next=new Bo,g.lmdbDb=i,g;g=T}while(!0)}else return new M_}a(Br,"txnForContext");function Du(K,g,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof g=="object"){let O=xr,B=C;for(let D=0,A=g.length;D<A;D++){let U=g[D],N=O?.[U];B=N&&B?N(B,T,K):B?.[U],K=null,O=N?.definition?.tableClass?.propertyResolvers}return B}let P=xr[g];return P?P(C,T,K):C[g]}a(Du,"getAttributeValue");function mm(K,g,T,C,P){let O=P?.length,B={transaction:C,lazy:O>0||typeof g=="string"||g?.length<4,alwaysPrefetch:!0},D;function A(U,N){let L=U?.value;if(!L)return hc.SKIP;for(let $=0;$<O;$++)if(!D?.includes($)&&!P[$](L,U))return hc.SKIP;return N!==void 0&&(U.key=N),U}if(a(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(N=>{if(D=null,typeof N=="object"&&N?.key!==void 0)return O>0?A(N):N;if(N==null)return hc.SKIP;for(let L=0;L<O;L++){let W=P[L].idFilter;if(W){if(!W(N))return hc.SKIP;D||(D=[]),D.push(L)}}return Uo(N,T,B,!1,A)});return Array.isArray(K)&&(U=U.filter(N=>N!==hc.SKIP)),U.hasEntries=!0,U}return K}a(mm,"transformToEntries");function Fr(K,g,T=server.replication?.getThisNodeId(l)){if(K<=g?.version){if(g?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),P=g.localTime,O=P&&l.get(P);if(O){let B,D,A=At(O);for(let U in C)C[U]===T&&(B=U),C[U]===A.nodeId&&(D=U);if(B>D)return 1;if(B===D)return 0}}return-1}return 1}a(Fr,"precedesExistingVersion");async function vu(K,g,T){let C=g?.metadataFlags,P=g?.version,O,B;if(!i.attemptLock(K,P,()=>{clearTimeout(B);let N=i.getEntry(K);!N||!N.value||N.metadataFlags&(Fn|_l)?O(vu(K,i.getEntry(K),T)):O(N)}))return new Promise(N=>{O=N,B=setTimeout(()=>{i.unlock(K,P)},Pce)});let D=g?.value,A={requestContext:T,replacingRecord:D,replacingEntry:g,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((N,L)=>{let $;Gs(bt(A,async W=>{let J=performance.now(),F,he,ue;try{F=await l_(K,A,g),ue=C&Fn;let re=A.lastModified||ue&&P;re||(re=(0,Wp.getNextMonotonicTime)()),he=ue||re>P||!D;let oe=performance.now()-J;if(Ye(oe,"cache-resolution",s,null,"success"),U&&Kp(U,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),W.timestamp=re,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),F){if(typeof F!="object")throw new Error("Only objects can be cached and stored in tables");if(F.status>0&&F.headers)if(F.status>=300)if(F.status===304)F=D,re=P;else throw new dt.ServerError(F.body||"Error from source",F.status);else F=F.body;typeof F.toJSON=="function"&&(F=F.toJSON()),t&&F[t]!==K&&(F[t]=K)}$=!0,N({key:K,version:re,value:F})}catch(re){re.message+=` while resolving record ${K} for ${s}`,D&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(N({key:K,version:P,value:D}),Fe.default.trace?.(re.message,"(returned stale record)")):L(re);let oe=performance.now()-J;Ye(oe,"cache-resolution",s,null,"fail"),U&&Kp(U,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Br(A).addWrite({key:K,store:i,entry:g,nodeName:"source",before:Mu(F),commit:a((re,oe)=>{if(oe?.version!==P)return;let ge=Lu(K,D,F);if(F){Ke.put?.(A,K,F),oe&&(T.previousResidency=ve.getResidencyRecord(oe.residencyId));let me,ie=!1,Ce,Be=Va(ve.getResidency(F,T));if(Be){if(!Be.includes(server.hostname))if(me=F,ie=!0,ve.getResidencyById)F=void 0;else{F=null;for(let He in r)F||(F={}),F[He]=me[He]}Ce=Qc(Be)}Fe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),y(K,F,oe,re,ie?Fn:0,_&&(he||ie)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:Ce,tableToTrack:s},"put",!!ue,me)}else oe&&(Ke.delete?.(A,K),Fe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),_||R?y(K,null,oe,re,0,_&&he||null,{user:A?.user,tableToTrack:s},"delete",!!ue):El(i,oe,P))},"commit")})}),()=>{i.unlock(K,P)},W=>{i.unlock(K,P),$&&Fe.default.error?.("Error committing cache update",W)})})}a(vu,"getFromSource");function qa(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new dt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new dt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(qa,"checkContextPermissions");function $a(K){let g=!1;if(K&&(K-Ir>1&&(g=!0),Ir=K),!($e===nr&&!g)&&(nr=$e,(0,kl.getWorkerIndex)()===(0,kl.getWorkerCount)()-1))return zr&&clearTimeout(zr),$e?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let P=$e/(1+Ir),O=g?Date.now():Math.ceil((Date.now()-C.getTime())/P)*P+C.getTime(),B=a(D=>{Fe.default.trace?.(`Scheduled next cleanup scan at ${new Date(D)}`),zr=setTimeout(()=>X=X.then(async()=>{if(B(Math.max(D+$e,Date.now())),i.rootStore.status!=="open"){clearTimeout(zr);return}let A=50,U=new Array(A),N=0,L=Math.pow(Ir,8)*(Hl.get(x.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),$=E/Math.pow(Math.max(Ir,1),4);Fe.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${L}, adjusted eviction ${$}ms`);function W(J,F,he,ue){let _e=J+$-Date.now();if(_e<0)return!0;if(Ir){let re=i.lastSize;return he&Xr&&il(ue,oe=>{oe.size&&(re+=oe.size)}),Fe.default.trace?.(`shouldEvict adjusted ${_e} ${re}, ${_e*(J-F)/re} < ${L}`),_e*(J-F)/re<L}return!1}a(W,"shouldEvict");try{let J=0;for(let F of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:he,value:ue,version:_e,expiresAt:re,metadataFlags:oe}=F,ge;ue===null&&!_&&_e+Oce<Date.now()?ge=El(i,F,_e):re!=null&&W(re,_e,oe,ue)&&(ge=ve.evict(he,ue,_e),J++),ge&&(await U[N],U[N]=ge.catch(me=>{Fe.default.error?.("Cleanup error",me)}),++N>=A&&(N=0)),await pc()}Fe.default.debug?.(`Finished cleanup scan for ${s}, evicted ${J} entries`)}catch(J){Fe.default.warn?.(`Error in cleanup scan for ${s}:`,J)}T(void 0),Ir=0}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");B(O)}):void 0}a($a,"scheduleCleanup");function pm(){Y=l?.addDeleteRemovalCallback(n,i,(K,g)=>{i.remove(K,g)})}a(pm,"addDeleteRemoval");function u_(){(0,kl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Jc){Jc=!0;try{let K=z.name,g=r[K];if(!g)throw new Error(`expiresAt attribute ${z} must be indexed`);for(let T of g.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of g.getValues(T)){let P=i.getEntry(C);P?.value?P.value[K]<Date.now()&&ve.evict(C,P.value,P.version):i.ifVersion(C,P?.version,()=>g.remove(T,C))}await pc()}}catch(K){Fe.default.error?.("Error in evicting old records",K)}finally{Jc=!1}}},Cce).unref()}a(u_,"runRecordExpirationEviction");function Va(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let g=server.shards?.get?.(K);if(g)return Fe.default.trace?.(`Shard ${K} mapped to ${g.map(T=>T.name).join(", ")}`),g.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(Va,"residencyFromFunction");function Qc(K){if(K){let g=K.join(","),T=d.get([Symbol.for("residency_by_set"),g]);return T||(d.put([Symbol.for("residency_by_set"),g],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}a(Qc,"getResidencyId");function Mu(K,g){let T=xA(K,i.rootStore);if(T){let C=g;return C?async()=>{await C(),await T}:()=>T}return g}a(Mu,"preCommitBlobsForRecordBefore")}function YN(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 xq(){}function TS(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 SS(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return SS(+e);case"Float":return e==="null"?null:SS(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return(0,Cd.autoCastBooleanStrict)(e);case"Date":if(isNaN(e)){if(e==="null")return null;Mce.test(e)||(e+="Z");let n=new Date(e);return SS(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Cd.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function SS(e){if(isNaN(e))throw new SyntaxError;return e}function Bq(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 Gs(e,t,r){return e?.then?e.then(t,r):t(e)}function Fq(e){return e!=null}function qs(e){try{return JSON.stringify(e)}catch{return e}}function Uce(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var hc,Wp,kq,Hq,Hl,dt,jp,zp,Fe,Gl,kl,Cd,WN,Gq,Ace,Ice,wce,Nce,Cce,Oce,Dq,Pce,vq,Lce,Fn,_l,Dce,Mq,Uq,vce,wUe,Mce,pc,Rg=se(()=>{G();hc=require("lmdb"),Wp=b(Un()),kq=b(require("lodash")),Hq=b(Om());zi();Lm();Hl=b(fe());AI();dt=b(Ee()),jp=b(Jo()),zp=b(ls());Oe();yg();Fe=b(ir());Dw();ja();Gl=require("ordered-binary"),kl=b(st());$i();Cd=b(ae());fl();is();F_();Yp();WN=b(require("node:fs"));ss();eg();Gq=b(Q());KN();({sortBy:Ace}=kq.default),{validateAttribute:Ice}=Hq.default,wce=new Uint8Array(9);wce[8]=192;Nce=1/0,Cce=6e4,Oce=864e5;Hl.initSync();Dq=Hl.get(x.STORAGE_PREFETCHWRITES),Pce=1e4,vq=1,Lce=2,Fn=1,_l=8,Dce=Buffer.allocUnsafeSlow(8192),Mq=1978,Uq=100,vce={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},wUe=(0,Cd.convertToMS)(Hl.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(yS,"makeTable");a(YN,"attributesAsObject");a(xq,"noop");Mce=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(TS,"coerceType");a(SS,"rejectNaN");a(Bq,"isDescendantId");pc=a(()=>new Promise(setImmediate),"rest");a(Gs,"when");a(Fq,"exists");a(qs,"stringify");a(Uce,"hasOtherProcesses")});function RS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,o=t[s]||0,c=i-o;r+=c*c}return r}function bS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let o=0;o<i;o++){let c=e[o]||0,l=t[o]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var $q=se(()=>{a(RS,"euclideanDistance");a(bS,"cosineDistance")});var Vq,Kq,Pd,uo,Od,xce,Bce,AS,Yq=se(()=>{$q();Vq=require("msgpackr"),Kq=b(ir()),Pd=b(Ee()),uo=(0,Kq.loggerWithTag)("HNSW"),Od=Symbol.for("entryPoint"),xce=Symbol.for("key"),Bce=10,AS=class{static{a(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=Vq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?RS:bS,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"?[xce,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let o=new Map,c,l=this.indexStore.get(Od);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f==null){let E=Math.floor(-Math.log(Math.random())*this.mL),_={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)_[R]=[];if(this.indexStore.put(i,_),typeof i!="number")throw new Error("Invalid nodeId: "+i);uo.debug?.("setting entry point to",i),this.indexStore.put(Od,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Bce),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);uo.debug?.("setting entry point to",i),this.indexStore.put(Od,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let _=this.searchLayer(r,l,f,this.efConstruction,E);_=_.slice(0,this.M<<1),_.length===0&&E===0&&uo.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<_.length;S++){let{id:y,distance:w,node:I}=_[S];if(y===i)continue;let H=[];if(this.optimizeRouting){let k=!1,z=I[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let ce=0;ce<z?.length;ce++){let{id:de,distance:te}=z[ce],Se=1+this.optimizeRouting*(1+.5*ce/this.M);for(let Ne=0;Ne<R.length;Ne++){let{id:Ke,distance:$e}=R[Ne];if(Ke===de){w*Y>$e+te?k=!0:te*Se>w+$e&&(H.push({fromId:Ke,toId:y}),H.push({fromId:y,toId:Ke}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:w});for(let{fromId:k,toId:z}of H){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let ce=0;ce<Y[E].length;ce++)if(Y[E][ce].id===z){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(ce,1);break}}let X=c[E],q=X?.find(({id:k})=>k===y);if(q){let k=X?.indexOf(q);X.copied||(X=[...X],X.copied=!0,c[E]=X),X.splice(k,1)}else this.addConnection(y,d(y,I),i,E,w,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m]?.[0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(Od);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);uo.debug?.("setting entry point to",l),this.indexStore.put(Od,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));if(h)for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:_})=>_!==i),h[E]?.length===0&&(uo.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=o.get(f);return!p&&m&&(p={...m},o.set(f,p)),p}a(d,"updateNode");for(let[f,m]of o)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(Od);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,o=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=o(t,h.vector);if(E<f||u.length<s){let _={id:p,distance:E,node:h};l.push(_),u.push(_)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let o=0;switch(i){case"lt":case"le":o=r;case"sort":break;default:throw new Pd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Pd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=bS;else if(s==="euclidean")c=RS;else{if(s)throw new Pd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Pd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Pd.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return o&&(d=d.filter(f=>f.distance<o)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let o=this.indexStore.get(i);if(!o){uo.info?.("could not find neighbor node",o);continue}o[n]?.find(({id:l})=>l==t)||uo.info?.("asymmetry detected",o[n])}n++}}addConnection(t,r,n,s,i,o){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){uo.debug?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=o(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=o(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&uo.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?uo.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let o=s.shift(),c=this.indexStore.get(o);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let o=this.distance;s.type&&(o=s.distance==="euclidean"?RS:bS);let c=o(s.target,t);return i.set(n,c),c}return t}}});var jN,Wq=se(()=>{Yq();jN={HNSW:AS}});var ft={};ye(ft,{NON_REPLICATING_SYSTEM_TABLES:()=>IS,database:()=>md,databaseEnvs:()=>ta,databases:()=>Me,dropDatabase:()=>Bw,dropTableMeta:()=>$ce,getDatabases:()=>lt,getDefaultCompression:()=>DS,getTables:()=>kce,onRemovedDB:()=>rh,onUpdatedTable:()=>ql,readMetaDb:()=>Jp,resetDatabases:()=>Ud,table:()=>ze,tables:()=>yn});function th(e,t){let r=PS.OpenDBIObject??PS.default.OpenDBIObject;return new r(e,t)}function kce(){return OS||lt(),yn||{}}function lt(){if(OS)return Me;OS=!0,vd=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,Ht.join)((0,Zt.getHdbBasePath)(),el),t=(0,Zt.get)(x.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(x.STORAGE_PATH)||e&&((0,gs.existsSync)(e)?e:(0,Ht.join)((0,Zt.getHdbBasePath)(),__)),!!e){if((0,gs.existsSync)(e))for(let r of(0,gs.readdirSync)(e,{withFileTypes:!0})){let n=(0,Ht.basename)(r.name,".mdb");r.isFile()&&(0,Ht.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Jp((0,Ht.join)(e,r.name),null,n)}if((0,gs.existsSync)((0,Dd.getBaseSchemaPath)())){for(let r of(0,gs.readdirSync)((0,Dd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ht.join)((0,Dd.getBaseSchemaPath)(),r.name),s=(0,Ht.join)((0,Dd.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,gs.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Ht.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ht.join)(s,i.name);Jp((0,Ht.join)(n,i.name),(0,Ht.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,gs.existsSync)(s))for(let o of(0,gs.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Ht.extname)(o.name).toLowerCase()===".mdb"&&Jp((0,Ht.join)(s,o.name),(0,Ht.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,Ht.join)(c.path,(0,Ht.basename)(o+".mdb"));(0,gs.existsSync)(l)&&Jp(l,o,r,null,!0)}}for(let r in Me){let n=vd.get(r);if(n){let s=Me[r];r.includes("delete")&&Or.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Or.trace(`delete table class ${i}`),delete s[i])}else if(delete Me[r],r==="data"){for(let s in yn)delete yn[s];delete yn[LS]}}if((0,Zt.get)(x.ANALYTICS_REPLICATE)===!1?IS.includes("hdb_analytics")||IS.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let r of IS)Me.system[r]&&(Me.system[r].replicate=!1);return vd=null,Me}}function Ud(){OS=!1;for(let[,e]of ta)e.needsDeletion=!0;lt();for(let[e,t]of ta)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),ta.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],Xp.forEach(i=>i(t.databaseName));break}}return Me}function Jp(e,t,r=QN,n,s){let i=new zN.default(e,!1);try{let o=ta.get(e);o?o.needsDeletion=!1:(o=(0,Md.open)(i),ta.set(e,o));let c=new th(!1),l=o.dbisDb||(o.dbisDb=o.openDB(wS.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,gs.existsSync)(n)&&(i.path=n,u=(0,Md.open)(i),u.isLegacy=!0):u=ng(o));let d=Xq(r),f=d[LS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,_]=p.toString().split("/");_===""?_=h.name:_||(_=E,E=t,h.name||(h.name=_,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(_==null||h.is_hash_attribute)&&(R.primary=h),_!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:_}=h;if(!_){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){_=te;break}if(!_){Or.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],w,I,H=typeof _.audit=="boolean"?_.audit:(0,Zt.get)(x.LOGGING_AUDITLOG),X=_.trackDeletes,q=_.expiration,k=_.eviction,z=_.sealed,Y=_.splitSegments,ce=_.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{w=_.tableId,w?w>=(l.get(Ld)||0)&&(l.putSync(Ld,w+1),Or.info(`Updating next table id (it was out of sync) to ${w+1} for ${p}`)):(_.tableId=w=l.get(Ld),w||(w=1),Or.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(Ld,w+1),l.putSync(_.key,_));let te=new th(!_.is_hash_attribute,_.is_hash_attribute);if(te.compression=_.compression,te.compression){let Se=(0,Zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||Qq;te.compression.threshold=Se}I=_g(o.openDB(_.key,te),o),o.databaseName=r,I.tableId=w}let de;for(let te of E){te.attribute=te.name;try{if(!te.is_hash_attribute&&(te.indexed||te.attribute&&!te.name)){if(!S[te.name]){let Ne=e$(te.key,o,te);S[te.name]=Ne,S[te.name].indexNulls=te.indexNulls}let Se=y.find(Ne=>Ne.name===te.name);Se?y.splice(y.indexOf(Se),1,te):y.push(te),de=!0}}catch(Se){Or.error("Error trying to update attribute",te,y,S,Se)}}for(let te of y)if(!E.find(Ne=>Ne.name===te.name)){if(te.is_hash_attribute){Or.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),de=!0)}if(R)de&&(R.schemaVersion++,R.updatedAttributes());else{R=Zq(d,p,yS({primaryStore:I,auditStore:u,audit:H,sealed:z,splitSegments:Y,replicate:ce,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:X,tableName:p,tableId:w,primaryKey:_.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:_.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of Qp)te(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Xq(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=yn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),vd&&!vd.has(e)){let r=new Set;t[LS]=r,vd.set(e,r)}return t}function Zq(e,t,r){return e[t]=r,r}function md({database:e,table:t}){e||(e=QN),lt();let r=Xq(e),n=(0,Ht.join)((0,Zt.getHdbBasePath)(),el),s=(0,Zt.get)(x.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Zt.get)(x.STORAGE_PATH)||((0,gs.existsSync)(n)?n:(0,Ht.join)((0,Zt.getHdbBasePath)(),__));let o=(0,Ht.join)(n,(i?t:e)+".mdb"),c=ta.get(o);if(!c||c.status==="closed"){let l=new zN.default(o,!1);c=(0,Md.open)(l),ta.set(o,c)}return c.auditStore||(c.auditStore=ng(c)),c}async function Bw(e){if(!Me[e])throw new Error("Schema does not exist");let t=Me[e],r;for(let n in t)r=t[n].primaryStore.rootStore,ta.delete(r.path),r.status==="open"&&(await r.close(),await Zp.remove(r.path));if(r||(r=md({database:e,table:null}),r.status==="open"&&(await r.close(),await Zp.remove(r.path))),e==="data"){for(let n in yn)delete yn[n];delete yn[LS]}delete Me[e],Xp.forEach(n=>n(e)),await UA(r)}function e$(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&jN[r.indexed.type]?.useObjectStore,s=new th(!n,n),i=t.openDB(e,s);if(r.indexed.type){let o=jN[r.indexed.type];o?i.customIndex=new o(i,r.indexed):Or.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=QN);let h=md({database:r,table:t}),E=Me[r];Or.trace(`Defining ${t} in ${r}`);let _=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let w=new th(!1);for(let Y of o)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let I,H;if(_){if(R=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=_.splitSegments),_.attributes.splice(0,_.attributes.length,...o)}else{let Y=h.auditStore;S=o.find(Se=>Se.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=DS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Zt.get)(x.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Or.trace(`${t} table loading, opening primary store`);let ce=new th(!1,!0);ce.compression=S.compression;let de=t+"/";if(y=h.dbisDb=h.openDB(wS.INTERNAL_DBIS_NAME,w),z(),y.get(de))return H&&H(),Ud(),ze(e);let te=_g(h.openDB(de,ce),h);h.databaseName=r,te.tableId=y.get(Ld),Or.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(Ld,te.tableId+1),S.tableId=te.tableId,_=Zq(E,t,yS({primaryStore:te,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:te.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:m,dbisDB:y})),_.schemaVersion=1,I=!0,y.put(de,S)}let X=_.indices;y=y||(h.dbisDb=h.openDB(wS.INTERNAL_DBIS_NAME,w)),_.dbisDB=y;let q=[];for(let{key:Y,value:ce}of y.getRange({start:!0})){let[de,te]=Y.toString().split("/");if(te===""&&(te=ce.name),te){if(de!==t)continue}else continue;let Se=o.find(Ke=>Ke.name===te),Ne=!Se?.indexed&&ce.indexed&&!ce.isPrimaryKey;if((!Se||Ne)&&(z(),I=!0,Se||y.remove(Y),Ne)){let Ke=_.indices[de];Ke&&q.push(Ke)}}let k=[];try{for(let Y of o||[]){if((Y.relationship||Y.computed)&&(I=!0,Y.relationship))continue;let ce=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:ce,configurable:!0});let de=y.get(ce);if(Y.isPrimaryKey){if(de=de||y.get(ce=t+"/")||{},c!==void 0&&c!==_.audit||l!==void 0&&l!==_.sealed||d!==void 0&&d!==_.replicate||(+n||void 0)!==(+de.expiration||void 0)||(+s||void 0)!==(+de.eviction||void 0)||Y.type!==de.type){let Se={...de};typeof c=="boolean"&&(c&&_.enableAuditing(c),Se.audit=c),n&&(Se.expiration=+n),s&&(Se.eviction=+s),l!==void 0&&(Se.sealed=l),d!==void 0&&(Se.replicate=d),Y.type&&(Se.type=Y.type),I=!0,z(),y.put(ce,Se)}continue}de?.attribute&&!de.name&&(de.indexed=!0);let te=!de||de.type!==Y.type||JSON.stringify(de.indexed)!==JSON.stringify(Y.indexed)||de.nullable!==Y.nullable||de.version!==Y.version||de.enumerable!==Y.enumerable||JSON.stringify(de.properties)!==JSON.stringify(Y.properties)||JSON.stringify(de.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let Se=e$(ce,h,Y);(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<eh.workerData?.restartNumber)&&(I=!0,z(),de=y.get(ce),(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<eh.workerData?.restartNumber)&&(I=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),_.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=de?.lastIndexedKey??void 0,Y.indexingPID=process.pid,Se.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:Se}),k.push(Y))),y.put(ce,Y)),de?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),Se.indexNulls=Y.indexNulls,X[Y.name]=Se}else te&&(I=!0,z(),y.put(ce,Y))}}finally{H&&H()}if(I&&(_.schemaVersion++,_.updatedAttributes()),Or.trace(`${t} table loading, running index`),k.length>0||q.length>0?_.indexingOperation=qce(_,k,q):I&&NS.signalSchemaChange(new CS.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=p,I)for(let Y of Qp)Y(_,p!=="cluster");return(n||s||i)&&_.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Or.trace(`${t} table loaded`),_;function z(){H||h.transactionSync(()=>({then(Y){H=Y}}))}a(z,"startTxn")}async function qce(e,t,r){try{Or.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await NS.signalSchemaChange(new CS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,Md.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],_=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[_]);if(R.customIndex){R.customIndex.index(f,y);continue}let w=(0,jq.getIndexedValues)(y,R.indexNulls);if(w)for(let I=0,H=w.length;I<H;I++)R.put(w[I],f)}catch(S){o[_]||(o[_]=!0,Or.error(`Error indexing attribute ${_}`,S))}}}),s.then(()=>d--,h=>{d--,Or.error(h)}),eh.workerData&&eh.workerData.restartNumber!==Jq.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>Hce?await s:d>Gce&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await NS.signalSchemaChange(new CS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Or.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Or.error("Error in indexing",n)}}function $ce({table:e,database:t}){let r=md({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 ql(e){return Qp.push(e),{remove(){let t=Qp.indexOf(e);t>-1&&Qp.splice(t,1)}}}function rh(e){return Xp.push(e),{remove(){let t=Xp.indexOf(e);t>-1&&Xp.splice(t,1)}}}function DS(){let e=(0,Zt.get)(x.STORAGE_COMPRESSION),t=(0,Zt.get)(x.STORAGE_COMPRESSION_DICTIONARY),r=(0,Zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||Qq,n={startingOffset:32};return t&&(n.dictionary=Zp.readFileSync(t)),r&&(n.threshold=r),e&&n}var Zt,wS,Md,Ht,gs,Dd,zN,Zp,JN,jq,NS,CS,eh,zq,Jq,PS,Fce,Or,QN,LS,Qq,IS,yn,Me,Ld,Qp,Xp,OS,ta,vd,Hce,Gce,Oe=se(()=>{Zt=b(fe()),wS=b(Jt()),Md=require("lmdb"),Ht=require("path"),gs=require("fs"),Dd=b(Rt());Rg();zN=b(ip());G();Zp=b(require("fs-extra")),JN=b(ai()),jq=b(Un()),NS=b(Jo()),CS=b(ls()),eh=require("worker_threads"),zq=b(Q()),Jq=b(st());$i();fl();ss();Wq();PS=b(sp()),{forComponent:Fce}=zq.default;a(th,"OpenDBIObject");Or=Fce("storage"),QN="data",LS=Symbol("defined-tables"),Qq=((0,Zt.get)(x.STORAGE_PAGESIZE)||4096)-60;(0,Zt.initSync)();IS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],yn=Object.create(null),Me=Object.create(null);(0,JN._assignPackageExport)("databases",Me);(0,JN._assignPackageExport)("tables",yn);Ld=Symbol.for("next-table-id"),Qp=[],Xp=[],ta=new Map;a(kce,"getTables");a(lt,"getDatabases");a(Ud,"resetDatabases");a(Jp,"readMetaDb");a(Xq,"ensureDB");a(Zq,"setTable");a(md,"database");a(Bw,"dropDatabase");a(e$,"openIndex");a(ze,"table");Hce=1e3,Gce=10;a(qce,"runIndexing");a($ce,"dropTableMeta");a(ql,"onUpdatedTable");a(rh,"onRemovedDB");a(DS,"getDefaultCompression")});var eC={};ye(eC,{loadGQLSchema:()=>Yce,start:()=>ZN,startOnMainThread:()=>Kce});function ZN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=o(new c(r.toString(),s)),m=new Map,p=[],h;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(q){if(q.kind==="NonNullType"){let Y=H(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:H(q.type)};let z={type:q.name?.value};return Object.defineProperty(z,"location",{value:q.loc.startToken}),z};a(H,"getProperty");let S=R.name.value,y=[],w={table:null,database:null,properties:y};m.set(S,w),i.allTypes.set(S,w);for(let q of R.directives){if(q.name.value==="table"){for(let z of q.arguments)w[z.name.value]=z.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=S),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,p.push(w)}if(q.name.value==="sealed"&&(w.sealed=!0),q.name.value==="splitSegments"&&(w.splitSegments=!0),q.name.value==="replicate"&&(w.replicate=!0),q.name.value==="export"){w.export=!0;for(let z of q.arguments)typeof w.export!="object"&&(w.export={}),w.export[z.name.value]=z.value.value}}let I=!1,X={};for(let q of R.fields){let k=H(q.type);k.name=q.name.value,y.push(k),X[k.name]=void 0;for(let z of q.directives){let Y=z.name.value;if(Y==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",z.loc):(k.isPrimaryKey=!0,I=!0);else if(Y==="indexed"){let ce={};for(let de of z.arguments||[])ce[de.name.value]=de.value.value;k.indexed=ce}else if(Y==="computed"){for(let ce of z.arguments||[])if(ce.name.value==="from"){let de=ce.value.value;k.computed={from:_(de,ce,X)},k.version==null&&(k.version=de)}else ce.name.value==="version"&&(k.version=ce.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let ce={};for(let de of z.arguments)ce[de.name.value]=de.value.value;k.relationship=ce}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="enumerable")k.enumerable=!0;else if(Y==="allow"){let ce=k.authorizedRoles=[];for(let de of z.arguments)de.name.value==="role"&&ce.push(de.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,z.loc)}}w.type=S,S==="Query"&&(h=w)}function E(R){let S=m.get(R.type);S?(Object.defineProperty(R,"properties",{value:S.properties}),Object.defineProperty(R,"definition",{value:S})):R.type==="array"?E(R.elements):Vce.includes(R.type)||(0,r$.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(E,"connectPropertyType");for(let R of m.values())for(let S of R.properties)E(S);for(let R of p)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,XN.dirname)(n),R.tableClass):i.set((0,XN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function _(R,S,y){return new t$.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(_,"createComputedFrom")}}var XN,t$,r$,Vce,Kce,Yce,n$=se(()=>{XN=require("path"),t$=require("node:vm");Oe();r$=b(st());tc();Vce=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives||(server.knownGraphQLDirectives=[]);server.knownGraphQLDirectives.push("table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow","enumerable");a(ZN,"start");Kce=ZN,Yce=a(e=>ZN({ensureTable:ze}).handleFile(e,null,null,new nd),"loadGQLSchema")});var rC={};ye(rC,{start:()=>tle});function Wce(e){if(e.kind!==Ge.Kind.OPERATION_DEFINITION&&e.kind!==Ge.Kind.FRAGMENT_DEFINITION)throw new Vr(`Unexpected non-executable definition type ${e.kind}.`)}function s$(e){if(typeof e!="object"||e===null)throw new fo("Request body must be an object.");if(!("query"in e))throw new fo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new fo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new fo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new fo("Request body `operationName` field must be a string.")}function tC(e){return parseInt(e.value,10)}function o$(e){return parseFloat(e.value)}function a$(e,t,r){let n=r.get(e.name.value);return c$(n)?l$(n,t):{attribute:t,value:n}}function c$(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function l$(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],c$(n)?l$(n,t):{attribute:t,value:n}))}function jce(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Ge.Kind.NULL:return{attribute:t,value:null};case Ge.Kind.INT:return{attribute:t,value:tC(e.value)};case Ge.Kind.FLOAT:return{attribute:t,value:o$(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:t,value:e.value.value};case Ge.Kind.VARIABLE:return a$(e.value,t,r);case Ge.Kind.OBJECT:return u$(e.value,t,r);case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new Vr(`Value type, ${e.value.kind}, is not supported.`)}}function u$(e,t,r){return e.fields.flatMap(n=>jce(n,t,r))}function zce(e,t){switch(e.value.kind){case Ge.Kind.NULL:return{attribute:e.name.value,value:null};case Ge.Kind.INT:return{attribute:e.name.value,value:tC(e.value)};case Ge.Kind.FLOAT:return{attribute:e.name.value,value:o$(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Ge.Kind.VARIABLE:return a$(e.value,e.name.value,t);case Ge.Kind.OBJECT:return u$(e.value,[e.name.value],t);case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new Vr(`Argument type, ${e.value.kind}, is not supported.`)}}function Jce(e,t){return e.flatMap(r=>zce(r,t))}function vS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Ge.Kind.FIELD:return r;case Ge.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Vr(`Fragment \`${n}\` not found.`);return vS(s.selectionSet,t)}case Ge.Kind.INLINE_FRAGMENT:return vS(r.selectionSet,t)}})}function d$(e,t){return vS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:d$(r.selectionSet,t)}:r.name.value)}async function Qce(e,t,r,n){let s=xs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Vr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:d$(e.selectionSet,r),conditions:Jce(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function f$(e){switch(e.kind){case Ge.Kind.NULL:return null;case Ge.Kind.INT:return tC(e);case Ge.Kind.FLOAT:return parseFloat(e.value);case Ge.Kind.STRING:case Ge.Kind.BOOLEAN:return e.value;case Ge.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:f$(r.value),...t}),{});case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new Vr(`Value type, ${e.kind}, is not supported.`)}}function Xce(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=f$(n.defaultValue)),n.type.kind===Ge.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Vr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Zce(e,t,r,n){if(e.operation===Ge.OperationTypeNode.SUBSCRIPTION)throw new Vr("Subscriptions are not supported.");if(e.operation===Ge.OperationTypeNode.MUTATION)throw new Vr("Mutations are not supported yet.");let s=Xce(e.variableDefinitions,t),i=await Promise.all(vS(e.selectionSet,r).map(c=>Qce(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function i$({query:e,variables:t={},operationName:r},n){let s=Ge.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(Wce(u),u.kind===Ge.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Vr("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 Vr(`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 Vr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Vr(`Operation \`${r}\` not found.`);let l=await Zce(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function ele(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 s$(r),i$(r,e)}case"POST":{let r=await Go(e.headers.get("content-type"),!0)(e._nodeRequest);return s$(r),i$(r,e)}default:throw new fo("Method Not Allowed",405,{Allow:"GET, POST"})}}function tle(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await ele(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof fo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Ge.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Vr)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 fo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Ge.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Vr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var Ge,Vr,fo,m$=se(()=>{Ge=b(require("graphql"));qo();tc();a(Wce,"assertExecutableDefinitionNode");a(s$,"assertRequestParams");a(tC,"processIntValueNode");a(o$,"processFloatValueNode");a(a$,"processVariableNode");a(c$,"isObject");a(l$,"transformObjectIntoQueryCondition");a(jce,"processObjectFieldNode");a(u$,"processObjectValueNode");a(zce,"processArgumentNode");a(Jce,"buildConditionsQuery");a(vS,"fillInFragments");a(d$,"buildSelectQuery");a(Qce,"processFieldNode");a(f$,"processConstValueNode");a(Xce,"resolveVariables");a(Zce,"executeOperation");a(i$,"resolver");Vr=class extends Error{static{a(this,"GraphQLQueryingError")}},fo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(ele,"graphqlQueryingHandler");a(tle,"start")});var S$=M((jUe,g$)=>{var xd=require("validate.js"),h$=mt(),Bd=(G(),v(j)),{handleHDBError:rle,hdbErrors:nle}=Ee(),{HDB_ERROR_MSGS:cr,HTTP_STATUS_CODES:sle}=nle,nC=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),ile={STRUCTURE_USER:"structure_user"},p$=Object.values(Bd.ROLE_TYPES_ENUM),ole="attribute_permissions",ale="attribute_name",{PERMS_CRUD_ENUM:Fd}=Bd,cle=[ole,...Object.values(Fd)],E$=[Fd.READ,Fd.INSERT,Fd.UPDATE],lle=[ale,...E$];function ule(e){let t=nC();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,_$(e,t)}a(ule,"addRoleValidation");function dle(e){let t=nC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,_$(e,t)}a(dle,"alterRoleValidation");function fle(e){let t=nC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,h$.validateObject(e,t)}a(fle,"dropRoleValidation");var mle=["operation","role","id","permission","hdb_user","access"];function _$(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)mle.includes(n[o])||s.push(n[o]);s.length>0&&Er(cr.INVALID_ROLE_JSON_KEYS(s),r);let i=h$.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Er(o,r)}),e.permission){let o=ple(e);o&&Er(o,r),p$.forEach(c=>{e.permission[c]&&!xd.isBoolean(e.permission[c])&&Er(cr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(p$.indexOf(o)<0){if(o===ile.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||Er(cr.SCHEMA_NOT_FOUND(f),r)}continue}Er(cr.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Er(cr.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){Er(cr.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{cle.includes(d)||Er(cr.INVALID_PERM_KEY(d),r,o,l)}),Object.values(Fd).forEach(d=>{xd.isDefined(u[d])?xd.isBoolean(u[d])||Er(cr.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):Er(cr.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){Er(cr.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){Er(cr.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!lle.includes(E)&&E!==Fd.DELETE&&Er(cr.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!xd.isDefined(p.attribute_name)){Er(cr.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){Er(cr.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}E$.forEach(E=>{xd.isDefined(p[E])?xd.isBoolean(p[E])||Er(cr.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):Er(cr.ATTR_PERM_MISSING(E,h),r,o,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${o}.${l}`;Er(cr.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return hle(r)}a(_$,"customValidate");g$.exports={addRoleValidation:ule,alterRoleValidation:dle,dropRoleValidation:fle};function ple(e){let{operation:t,permission:r}=e;if(t===Bd.OPERATIONS_ENUM.ADD_ROLE||t===Bd.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 cr.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Bd.ROLE_TYPES_ENUM.SUPER_USER:Bd.ROLE_TYPES_ENUM.CLUSTER_USER;return cr.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(ple,"validateNoSUPerms");function hle(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:cr.ROLE_PERMS_ERROR,...e};return rle(new Error,n,sle.BAD_REQUEST)}else return null}a(hle,"generateRolePermResponse");function Er(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(Er,"addPermError")});var sh=M((QUe,b$)=>{"use strict";var T$=Vn(),y$=gn(),Ele=vl(),iC=S$(),oC=Jo(),JUe=require("uuid").v4,_le=require("util"),MS=(G(),v(j)),gle=ae(),aC=y$.searchByValue,Sle=y$.searchByHash,Tle=_le.promisify(Ele.delete),yle=di(),Rle=dd(),{hdbErrors:ble,handleHDBError:$l}=Ee(),{HDB_ERROR_MSGS:R$,HTTP_STATUS_CODES:nh}=ble,{UserEventMsg:cC}=ls();b$.exports={addRole:Ale,alterRole:Ile,dropRole:wle,listRoles:Nle};function sC(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(sC,"scrubRoleDetails");async function Ale(e){let t=iC.addRoleValidation(e);if(t)throw t;e=sC(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await aC(r)||[])}catch(i){throw $l(i)}if(n&&n.length>0)throw $l(new Error,R$.ROLE_ALREADY_EXISTS(e.role),nh.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await T$.insert(s),oC.signalUserChange(new cC(process.pid)),e=sC(e),e}a(Ale,"addRole");async function Ile(e){let t=iC.alterRoleValidation(e);if(t)throw t;e=sC(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await T$.update(r)}catch(s){throw $l(s)}if(n&&n?.message==="updated 0 of 1 records")throw $l(new Error,"Invalid role id",nh.BAD_REQUEST,void 0,void 0,!0);return await oC.signalUserChange(new cC(process.pid)),e}a(Ile,"alterRole");async function wle(e){let t=iC.dropRoleValidation(e);if(t)throw $l(new Error,t,nh.BAD_REQUEST,void 0,void 0,!0);let r=new Rle(MS.SYSTEM_SCHEMA_NAME,MS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Sle(r));if(n.length===0)throw $l(new Error,R$.ROLE_NOT_FOUND,nh.NOT_FOUND,void 0,void 0,!0);let s=new yle(MS.SYSTEM_SCHEMA_NAME,MS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await aC(s)),o=!1;if(gle.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw $l(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,nh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Tle(c),oC.signalUserChange(new cC(process.pid)),`${n[0].role} successfully deleted`}a(wle,"dropRole");async function Nle(){return aC({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Nle,"listRoles")});var lC={};ye(lC,{start:()=>w$,startOnMainThread:()=>Ple});function w$({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,A$.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(Cle.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Ole(i)}}}async function Ole(e){let t=lt().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,I$.isEqual)(i,e)?void 0:(e.id=r.id,(0,US.alterRole)(e))}return(0,US.addRole)(e)}var US,A$,I$,Cle,Ple,N$=se(()=>{Oe();US=b(sh()),A$=require("yaml"),I$=require("lodash"),Cle=["super_user","cluster_user","structure_user"];a(w$,"start");a(Ole,"ensureRole");Ple=w$});async function xS(e){let t=(0,P$.pathToFileURL)(e).toString();if(Lle)return ih||(ih=Dle(Mle)),(await(await ih).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Dle(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ih=new Compartment({console,Math,Date,fetch:vle,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,O$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Xt,s.tables=yn,s.databases=Me}};let n=await(0,C$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),ih}function vle(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 Mle(){return{Resource:Xt,tables:yn}}var C$,O$,P$,Lle,ih,uC=se(()=>{zi();Oe();C$=require("fs/promises"),O$=require("path"),P$=require("url"),Lle=!1;a(xS,"secureImport");a(Dle,"getCompartment");a(vle,"secureOnlyFetch");a(Mle,"getGlobalVars")});var dC={};ye(dC,{ResourceLoadError:()=>BS,handleApplication:()=>Ule,suppressHandleApplicationWarning:()=>xle});function D$(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Ule(e){e.handleEntry(a(async function(r){if(r.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${r.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(r.eventType!=="add"){e.requestRestart();return}try{let n=await xS(r.absolutePath),s=(0,L$.dirname)(r.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");D$(n.default)&&(e.resources.set(s,n.default),e.logger.debug(`Registered root resource: ${s}`)),v$(e,n,s)}catch(n){throw new BS(r.absolutePath,n)}},"handleResourceEntry"))}function v$(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;D$(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&v$(e,s,i)}}var L$,BS,xle,M$=se(()=>{uC();L$=require("path");a(D$,"isResource");BS=class extends Error{static{a(this,"ResourceLoadError")}filePath;cause;constructor(t,r){super(`Failed to load resource module ${t}${r?`: ${r.message}`:""}`),this.name="ResourceLoadError",this.filePath=t,this.cause=r}};a(Ule,"handleApplication");a(v$,"recurseForResources");xle=!0});var mC={};ye(mC,{start:()=>Ble});function Ble({resources:e}){e.set("login",fC),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var fC,U$=se(()=>{zi();a(Ble,"start");fC=class extends Xt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});function kS(e,t){let r={openapi:Fle,info:{title:"HarperDB HTTP REST interface",version:G$.packageJson.version},servers:[{description:"REST API",url:t}],paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},n=[{basicAuth:[],bearerAuth:[]}],s=a(i=>{if(i.type&&!r.components.schemas[i.type]){r.components.schemas[i.type]={};let o={},c=[];for(let l of i.properties)FS[l.type]?o[l.name]=new hC(FS[l.type],l.type):l.properties?(o[l.name]=new $$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new qle(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new H$(o,!i.sealed,c)}},"includeDefinitionInSchema");for(let[,i]of e){if(!i.path||i.Resource.isError)continue;let{path:o}=i,c=o.split("/").pop(),{attributes:l,sealed:u}=i.Resource,{prototype:d,primaryKey:f="id"}=i.Resource;if(!l&&e.allTypes.has(i.path)){let k=e.allTypes.get(i.path);u=k.sealed,l=k.properties}if(!f)continue;let m={},p=[],h=[];if(l)for(let{type:k,name:z,elements:Y,relationship:ce,definition:de,nullable:te}of l){let Se=de??Y?.definition;Se&&s(Se),te===!1&&h.push(z),ce?k==="array"?m[z]={type:"array",items:{$ref:$s+Y.type}}:m[z]={$ref:$s+k}:Se?k==="array"?m[z]={type:"array",items:{$ref:$s+Se.type}}:m[z]={$ref:$s+Se.type}:k==="array"?Y.type==="Any"?m[z]={type:"array",items:{format:Y.type}}:m[z]={type:"array",items:new hC(FS[Y.type],Y.type)}:k==="Any"?m[z]={format:k}:m[z]=new hC(FS[k],k),p.push(new EC(z,"query",m[z]))}let E=Object.keys(m),_=new EC(f,"path",{type:"string",format:"ID"});_.required=!0,_.description="primary key of record";let R=new EC("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new H$(m,!u,h);let S=d.post!==Resource.prototype.post||d.update,y=typeof d.put=="function",w=typeof d.get=="function",I=typeof d.delete=="function",H=typeof d.patch=="function",X=`/${o}/`;r.paths[X]||(r.paths[X]={}),S&&(r.paths[X].post=new kle(c,n,{200:new kd({$ref:$s+c},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),r.paths[X].options=new x$(p,n,{200:new B$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(r.paths[X].get=new pC(p,n,{200:new kd({type:"array",items:{$ref:$s+c}})},"search for records by the specified property name and value pairs")),I&&(r.paths[X].delete=new k$(p,n,"delete all the records that match the provided query",{204:new F$}));let q="/"+o+"/{"+f+"}";if(r.paths[q]||(r.paths[q]={}),r.paths[q].options=new x$(p,n,{200:new B$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(r.paths[q].get=new pC([_],n,{200:new kd({$ref:$s+c})},"retrieve a record by its primary key")),y&&(r.paths[q].put=new Hle([_],n,c,{200:new kd({$ref:$s+c})},"create or update the record with the URL path that maps to the record's primary key")),H&&(r.paths[q].patch=new Gle([_],n,c,{200:new kd({$ref:$s+c})},"patch the record with the URL path that maps to the record's primary key")),I&&(r.paths[q].delete=new k$([_],n,"delete a record with the given primary key",{204:new F$})),w&&R.schema.enum.length>0){let k=`/${o}/{${f}}.{property}`;r.paths[k]||(r.paths[k]={}),r.paths[k].get=new pC([_,R],n,{200:new kd({enum:E})},"used to retrieve the specified property of the specified record")}}for(let[,i]of e.allTypes)s(i),i.sealed&&r.components.schemas[i.type].additionalProperties&&(r.components.schemas[i.type].additionalProperties=!1);return r}function kle(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:$s+e}}}},this.security=t,this.responses=r}function pC(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function x$(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function B$(){this.description=q$,this.headers={},this.content={}}function kd(e,t){this.description=q$,this.content={"application/json":{schema:e}},this.headers=t}function F$(){this.description="successfully processed request, no content returned to client"}function Hle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:$s+r}}}},this.responses=n}function Gle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:$s+r}}}},this.responses=n}function k$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function H$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function hC(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function $$(e){this.$ref=`#/components/schemas/${e}`}function qle(e){this.type="array",this.items=new $$(e)}function EC(e,t,r){this.name=e,this.in=t,this.schema=r}var G$,Fle,FS,$s,q$,_C=se(()=>{G$=b(yt()),Fle="3.0.3",FS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},$s="#/components/schemas/",q$="successful operation";a(kS,"generateJsonApi");a(kle,"Post");a(pC,"Get");a(x$,"Options");a(B$,"ResponseOptions200");a(kd,"Response200");a(F$,"Response204");a(Hle,"Put");a(Gle,"Patch");a(k$,"Delete");a(H$,"ResourceSchema");a(hC,"Type");a($$,"Ref");a(qle,"ArrayRef");a(EC,"Parameter")});var K$={};ye(K$,{Request:()=>Ec,createReuseportFd:()=>HS});var V$,Ec,gC,SC,HS,oh=se(()=>{V$=require("os"),Ec=class{static{a(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new SC(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new gC(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get hostname(){return this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},gC=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},SC=class{static{a(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,V$.platform)()!="win32"&&(HS=require("node-unix-socket").createReuseportFd)});var qS={};ye(qS,{parseHeaderValue:()=>yC,start:()=>Kle});async function Vle(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Tg(e);let i=new Hs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==Y$){let _=GS.getMatch(o,n?"sse":"rest");if(!_)return t(e);e.handlerPath=_.path,c=new Us(_.relativeURL),c.async=!0,l=_.Resource}if(l?.isCaching){let _=r["cache-control"];if(_){let R=yC(_);for(let S of R)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let _=yC(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=_.length===1&&+_[0]>=0?+_[0]:_[0]==="*"?void 0:_}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Go(r["content-type"],!0)(e.body,e.headers)}catch(_){throw new Hd.ClientError(_,400)}if(e.authorize=!0,o===Y$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return kS(GS,`${e.protocol}://${e.hostname}`);throw new Hd.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 Hd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Hd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,TC.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let _=Cq(f.headers,i);return f.headers!==_&&(f.headers=_),f.data!==void 0&&(f.body=Bm(f.data,e,f)),f}else if(isFinite(p)){$le[0]=p;let _=String.fromCharCode(34,(sn[0]&63)+62,(sn[0]>>6)+(sn[1]<<2&63)+62,(sn[1]>>4)+(sn[2]<<4&63)+62,(sn[2]>>2)+62,(sn[3]&63)+62,(sn[3]>>6)+(sn[4]<<2&63)+62,(sn[4]>>4)+(sn[5]<<4&63)+62,(sn[5]>>2)+62,(sn[6]&63)+62,(sn[6]>>6)+(sn[7]<<2&63)+62,34),R=r["if-none-match"];R&&_==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",_),TC.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=Bm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?_i.warn(o):_i.info(o):_i.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=Bm(o.contentType?o:z$(o),e,c),c}}function Kle(e){TC=e,e.includeExpensiveRecordCountEstimates&&(Ec.prototype.includeExpensiveRecordCountEstimates=!0),!W$&&(W$=!0,GS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Vle(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{ah++;let s=new ns;j$||(j$=!0,Zm(l=>{ah>0&&l.push({metric:"ws-connections",connections:ah,byThread:!0})}));let i;t.on("error",l=>{i=!0,_i.warn(l)});let o;t.on("message",a(function(u){o||(o=Go(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);Ye(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{ah--,en(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=GS.getMatch(l,"ws");if(en(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ye(h=>({count:h.count,total:ah}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new Us(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Ho(p.value,r);t.send(h),Ye(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?_i.warn(l):_i.info(l):_i.error(l),t.close(Yle[l.statusCode]||1011,z$(l))}t.close()},e))}function yC(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var _i,Hd,z$,sn,$le,TC,Y$,W$,GS,j$,ah,Yle,J$=se(()=>{qo();is();_i=b(Q()),Hd=b(Ee());yg();ku();ja();Yp();_C();oh();bg();({errorToString:z$}=_i),sn=new Uint8Array(8),$le=new Float64Array(sn.buffer,0,1),TC={},Y$="openapi";a(Vle,"http");ah=0;a(Kle,"start");Yle={401:3e3,403:3003};a(yC,"parseHeaderValue")});var RC=M((bxe,X$)=>{var{recordAction:$S,recordActionBinary:Q$}=(is(),v(dg)),Wle=require("fastify-plugin"),jle=200;X$.exports=Wle(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),$S(o,"duration",u,f,d),Q$(s.raw.statusCode<400,"success",u,f,d),Q$(1,"response_"+s.raw.statusCode,u,f,d);let m=jle;i?.pipe?(i.on("data",_=>{m+=_.length}),i.on("end",()=>{$S(performance.now()-c,"transfer",u,f,d),$S(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,$S(m,"bytes-sent",u,f,d));let p=o.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var eV=M((Axe,Z$)=>{var zle=mt(),Jle={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Z$.exports=function(e){return zle.validateObject(e,Jle)}});var VS=M((Ixe,tV)=>{"use strict";var Qle=(G(),v(j)).OPERATIONS_ENUM,bC=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Qle.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};tV.exports=bC});var uh={};ye(uh,{createTokens:()=>IC,getJWTRSAKeys:()=>zS,refreshOperationToken:()=>wC,validateOperationToken:()=>NC,validateRefreshToken:()=>JS});async function zS(){if(KS)return KS;try{let e=ch.default.join(lh.default.getHdbBasePath(),Zb),t=await YS.default.readFile(ch.default.join(e,Tm.JWT_PASSPHRASE_NAME),"utf8"),r=await YS.default.readFile(ch.default.join(e,Tm.JWT_PRIVATE_KEY_NAME),"utf8");return KS={publicKey:await YS.default.readFile(ch.default.join(e,Tm.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},KS}catch(e){throw jS.default.error(e),new gi.ClientError(qd.NO_ENCRYPTION_KEYS,Gd.INTERNAL_SERVER_ERROR)}}async function IC(e){let t=(0,AC.validateBySchema)(e,mo.default.object({username:mo.default.string().optional(),password:mo.default.string().optional(),role:mo.default.string().optional(),expires_in:mo.default.alternatives(mo.default.string(),mo.default.number()).optional()}));if(t)throw new gi.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 yd(e.username,e.password,f)}catch(f){throw jS.default.error(f),new gi.ClientError(qd.INVALID_CREDENTIALS,Gd.UNAUTHORIZED)}if(!r)throw new gi.ClientError(qd.INVALID_CREDENTIALS,Gd.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await zS(),c=await $d.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??oV,algorithm:WS,subject:Vd.OPERATION}),l=await $d.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:Xle,algorithm:WS,subject:Vd.REFRESH}),u=zw(l,$r.SHA256);if((await(0,rV.update)(new nV.default(gm,xu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new gi.ClientError(qd.REFRESH_TOKEN_SAVE_FAILED,Gd.INTERNAL_SERVER_ERROR);return sV.default.signalUserChange(new iV.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function wC(e){let t=(0,AC.validateBySchema)(e,mo.default.object({refresh_token:mo.default.string().required()}).required());if(t)throw new gi.ClientError(t.message);let{refresh_token:r}=e;await JS(r);let n=await zS(),s=await $d.default.decode(r);return{operation_token:await $d.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:oV,algorithm:WS,subject:Vd.OPERATION})}}async function NC(e){return aV(e,Vd.OPERATION)}async function JS(e){return aV(e,Vd.REFRESH)}async function aV(e,t){try{let r=await zS(),n=await $d.default.verify(e,r.publicKey,{algorithms:WS,subject:t});if(n.role)throw new Error("Invalid token");let s=await yd(n.username,void 0,!1);if(t===Vd.REFRESH&&!Jw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw jS.default.warn(r),r?.name==="TokenExpiredError"?new gi.ClientError(qd.TOKEN_EXPIRED,Gd.FORBIDDEN):new gi.ClientError(qd.INVALID_TOKEN,Gd.UNAUTHORIZED)}}var $d,YS,ch,mo,AC,gi,jS,rV,nV,sV,iV,lh,Gd,qd,oV,Xle,WS,Vd,KS,Kd=se(()=>{$d=b(require("jsonwebtoken")),YS=b(require("fs-extra")),ch=b(require("node:path")),mo=b(require("joi")),AC=b(mt());G();gi=b(Ee()),jS=b(Q());Xw();Es();rV=b(Vn()),nV=b(VS()),sV=b(Jo()),iV=b(ls()),lh=b(fe()),{HTTP_STATUS_CODES:Gd,AUTHENTICATION_ERROR_MSGS:qd}=gi.hdbErrors;lh.default.initSync();oV=lh.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Xle=lh.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",WS="RS256",Vd={OPERATION:"operation",REFRESH:"refresh"};a(zS,"getJWTRSAKeys");a(IC,"createTokens");a(wC,"refreshOperationToken");a(NC,"validateOperationToken");a(JS,"validateRefreshToken");a(aV,"validateToken")});var CC=M((Lxe,uV)=>{"use strict";var Zle=eV(),Yd=require("passport"),eue=require("passport-local").Strategy,tue=require("passport-http").BasicStrategy,rue=require("util"),nue=(Es(),v(co)),lV=rue.callbackify(nue.findAndValidateUser),Pxe=Jr(),sue=(G(),v(j)),cV=(Kd(),v(uh)),{AccessViolation:iue}=Ee();Yd.use(new eue(function(e,t,r){lV(e,t,r)}));Yd.use(new tue(function(e,t,r){lV(e,t,r)}));Yd.serializeUser(function(e,t){t(null,e)});Yd.deserializeUser(function(e,t){t(null,e)});function oue(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r(new iue)}switch(a(i,"handleResponse"),n){case"Basic":Yd.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===sue.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?cV.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):cV.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Yd.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(oue,"authorize");function aue(e,t){let r=Zle(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(aue,"checkPermissions");uV.exports={authorize:oue,checkPermissions:aue}});var MC=M((Uxe,pV)=>{var eT=require("clone"),tT=mt(),cue=ae(),XS=(G(),v(j)),vxe=Q(),OC=require("fs"),LC=require("joi"),{string:ZS}=LC.types(),{hdbErrors:lue,handleHDBError:QS}=Ee(),{HDB_ERROR_MSGS:Mxe,HTTP_STATUS_CODES:PC}=lue,{commonValidators:Wd}=Qi(),dV=" is required",uue=["insert","update","upsert"],DC={database:{presence:!1,format:Wd.schema_format,length:Wd.schema_length},schema:{presence:!1,format:Wd.schema_format,length:Wd.schema_length},table:{presence:!0,format:Wd.schema_format,length:Wd.schema_length},action:{inclusion:{within:uue,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},due={schema:ZS.required(),table:ZS.required(),action:ZS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:fue,AWS_SECRET:mue,AWS_BUCKET:pue,AWS_FILE_KEY:hue,REGION:Eue}=XS.S3_BUCKET_AUTH_KEYS,_ue={s3:{presence:!0},[`s3.${fue}`]:{presence:!0,type:"String"},[`s3.${mue}`]:{presence:!0,type:"String"},[`s3.${pue}`]:{presence:!0,type:"String"},[`s3.${hue}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Eue}`]:{presence:!0,type:"String"}},fV=eT(DC);fV.data.presence={message:dV};var mV=eT(DC);mV.file_path.presence={message:dV};var gue=Object.assign(eT(DC),_ue),vC=eT(due);vC.csv_url=ZS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();vC.passthrough_headers=LC.object();function Sue(e){let t=tT.validateObject(e,fV);return rT(e,t)}a(Sue,"dataObject");function Tue(e){let t=tT.validateBySchema(e,LC.object(vC));return rT(e,t)}a(Tue,"urlObject");function yue(e){let t=tT.validateObject(e,mV);return rT(e,t)}a(yue,"fileObject");function Rue(e){let t=tT.validateObject(e,gue);return rT(e,t)}a(Rue,"s3FileObject");function rT(e,t){if(!t){let r=cue.checkGlobalSchemaTable(e.schema,e.table);if(r)return QS(new Error,r,PC.BAD_REQUEST);if(e.operation===XS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{OC.accessSync(e.file_path,OC.constants.R_OK|OC.constants.F_OK)}catch(n){return n.code===XS.NODE_ERROR_CODES.ENOENT?QS(n,`No such file or directory ${n.path}`,PC.BAD_REQUEST):n.code===XS.NODE_ERROR_CODES.EACCES?QS(n,`Permission denied ${n.path}`,PC.BAD_REQUEST):QS(n)}}return t}a(rT,"postValidateChecks");pV.exports={dataObject:Sue,urlObject:Tue,fileObject:yue,s3FileObject:Rue}});var UC=M((Bxe,hV)=>{"use strict";var dh=Q(),nT=(G(),v(j));async function bue(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===nT.OPERATIONS_ENUM.INSERT||t.operation===nT.OPERATIONS_ENUM.UPDATE||t.operation===nT.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===nT.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(dh.info(i.message),i):i.http_resp_msg?(dh.error(`Error calling operation: ${e.name}`),dh.error(i.http_resp_msg),i):(dh.error(`Error calling operation: ${e.name}`),dh.error(i),i)}}a(bue,"callOperationFunctionAsAwait");hV.exports={callOperationFunctionAsAwait:bue}});var xC=M((kxe,_V)=>{"use strict";var{S3:Aue,GetObjectCommand:Iue}=require("@aws-sdk/client-s3");_V.exports={getFileStreamFromS3:wue,getS3AuthObj:EV};async function wue(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await EV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Iue(r))).Body}a(wue,"getFileStreamFromS3");function EV(e,t,r){return new Aue({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(EV,"getS3AuthObj")});var SV=M((Gxe,gV)=>{"use strict";var BC=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},FC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};gV.exports={BulkLoadFileObject:BC,BulkLoadDataObject:FC}});var yV=M(($xe,TV)=>{"use strict";var kC=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};TV.exports=kC});var bV=M((Kxe,RV)=>{"use strict";var HC=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};RV.exports=HC});var qC=M((Wxe,IV)=>{"use strict";var AV=yV(),Nue=bV(),{HDB_ERROR_MSGS:Cue}=Jr(),GC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Cue.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 AV(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Nue(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new AV(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};IV.exports=GC});var Vl=M((Jxe,OV)=>{"use strict";var zxe=gn(),fh=Q(),{validateBySchema:wV}=mt(),ra=require("joi"),Oue=so(),sT=ae(),{handleHDBError:iT,hdbErrors:Pue,ClientError:NV}=Ee(),{HDB_ERROR_MSGS:oT,HTTP_STATUS_CODES:$C}=Pue,CV=fe();CV.initSync();var{getDatabases:VC}=(Oe(),v(ft)),Lue=require("fs-extra"),Due=(G(),v(j));OV.exports={describeAll:vue,describeTable:aT,describeSchema:Mue};async function vue(e={}){try{let t=sT.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=VC(),o={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){o[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await aT({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let _=n[m].tables[h].attribute_permissions;E=await aT({schema:m,table:h,exact_count:u,include_computed:d},_)}E&&l.push(E)}catch(E){fh.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]):c[l[m].schema]&&(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]);for(let m in o)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return fh.error("Got an error in describeAll"),fh.error(t),iT(new Error,oT.DESCRIBE_ALL_ERR)}}a(vue,"describeAll");async function aT(e,t){sT.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=wV(e,ra.object({database:ra.string(),table:ra.string().required(),exact_count:ra.boolean().strict(),include_computed:ra.boolean().strict()}));if(i)throw new NV(i.message);let c=VC()[r];if(!c)throw iT(new Error,oT.SCHEMA_NOT_FOUND(e.schema),$C.NOT_FOUND);let l=c[n];if(!l)throw iT(new Error,oT.TABLE_NOT_FOUND(e.schema,e.table),$C.NOT_FOUND);function u(p){(!p.computed||e.include_computed)&&d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,computed:p.computed?!0:void 0,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await Lue.stat(l.primaryStore.env.path)).size}catch(p){fh.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),CV.get(Due.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Oue.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){fh.warn(`unable to stat table dbi due to ${p}`)}return m}a(aT,"descTable");async function Mue(e){sT.transformReq(e);let t=wV(e,ra.object({database:ra.string(),exact_count:ra.boolean().strict(),include_computed:ra.boolean().strict()}));if(t)throw new NV(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=VC()[n];if(!i)throw iT(new Error,oT.SCHEMA_NOT_FOUND(e.schema),$C.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),sT.isEmpty(l)||l.describe){let u=await aT({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(Mue,"describeSchema")});var MV=M((Xxe,vV)=>{"use strict";var Uue=Vl(),{hdbErrors:PV}=Ee(),{getDatabases:LV}=(Oe(),v(ft));vV.exports={checkSchemaExists:DV,checkSchemaTableExists:xue,schemaDescribe:Uue};async function DV(e){if(!LV()[e])return PV.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(DV,"checkSchemaExists");async function xue(e,t){let r=await DV(e);if(r)return r;if(!LV()[e][t])return PV.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xue,"checkSchemaTableExists")});function KC(e){let t=e.get(cT),r=t?(0,jd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=tt(),s=!1;r.nodeName=tt();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:ph(e)??1,nodes:[]})})}i[n]=0,e.putSync(cT,(0,jd.pack)(r))}return r}function mh(e){return KC(e).remoteNameToId}function xV(e,t){let r=KC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(cT,(0,jd.pack)(r)),s}function lT(e,t){let r=KC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(cT,(0,jd.pack)(r))}return UV.trace?.("The remote node name map",e,n,s),s}var UV,jd,cT,YC=se(()=>{UV=b(ir());Ss();jd=require("msgpackr"),cT=Symbol.for("remote-ids");a(KC,"getIdMappingRecord");a(mh,"exportIdMapping");a(xV,"remoteToLocalNodeId");a(lT,"getIdOfRemoteNode")});var qV={};ye(qV,{commitsAwaitingReplication:()=>zd,getHDBNodeTable:()=>Gt,getReplicationSharedStatus:()=>Jd,iterateRoutes:()=>Eh,shouldReplicateToNode:()=>hh,subscribeToNodeUpdates:()=>Qd});function Gt(){return BV||(BV=ze({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 Jd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function Qd(e){Gt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;GV.debug?.("adding node",n,"on node",tt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==tt()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Gt().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function hh(e,t){let r=_c.default.get(x.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>n.name===t&&(!n.sharded||e.shard===_c.default.get(x.REPLICATION_SHARD))))&&Gt().primaryStore.get(tt())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function Bue(){Qd(e=>{gc({},(t,r)=>{let n=e.name,s=FV.get(n);if(s||FV.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=Jd(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of zd.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*Eh(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=_c.default.get(x.REPLICATION_SECUREPORT)??(!_c.default.get(x.REPLICATION_PORT)&&_c.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||_c.default.get(x.REPLICATION_PORT)||_c.default.get(x.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){kV.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 kV,HV,_c,GV,BV,FV,zd,Xd=se(()=>{Oe();Ss();Lm();kV=require("worker_threads"),HV=b(Ee()),_c=b(fe());G();GV=b(ir());server.nodes=[];a(Gt,"getHDBNodeTable");a(Jd,"getReplicationSharedStatus");a(Qd,"subscribeToNodeUpdates");a(hh,"shouldReplicateToNode");FV=new Map;mx((e,t,r)=>{if(r>server.nodes.length)throw new HV.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);zd||(zd=new Map,Bue());let n=zd.get(e);return n||(n=[],zd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Bue,"startSubscriptionToReplications");a(Eh,"iterateRoutes")});var zV={};ye(zV,{connectedToNode:()=>Kl,disconnectedFromNode:()=>ef,ensureNode:()=>na,requestClusterStatus:()=>jV,startOnMainThread:()=>WC});async function WC(e){let t=0,r=lt();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){uT.set(o,ph(u.auditStore));break}}}Si.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=tt();function l(){let u=Gt().primaryStore.get(c);if(u!==null){let d=e.url??Sc();if(u===void 0||u.url!==d||u.shard!==e.shard)return na(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Gt().primaryStore.get(c)&&l();for(let u of Eh(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),$V.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}Qd(s)});let n;function s(o,c=o?.name){let l=tt()&&c===tt()||Sc()&&o?.url===Sc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Gt().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(ot.trace("Setting up node replication for",o),!o){for(let[m,p]of po){let h;for(let[E,{worker:_,nodes:R}]of p){let S=R[0];if(S&&S.name==c){h=!0;for(let[y,{worker:w}]of p)p.delete(y),ot.warn("Node was deleted, unsubscribing from node",c,y,m),w?.postMessage({type:"unsubscribe-from-node",node:c,nodes:R,database:y,url:m});break}}if(h){po.get(m).iterator.remove(),po.delete(m);return}}return}if(l)return;if(!o.url){ot.info(`Node ${o.name} is missing url`);return}let u=po.get(o.url);if(u&&u.iterator.remove(),!(o.replicates===!0||o.replicates?.sends)&&!o.subscriptions?.length&&!u)return;if(ot.info(`Added node ${o.name} at ${o.url} for process ${tt()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of Zd)if(o.url===p.url){Zd.delete(m);break}Zd.set(o.name,o)}let d=lt();if(u||(u=new Map,po.set(o.url,u)),u.iterator=gc(e,(m,p,h)=>{h?f(p,!0):f(p,!1)}),o.subscriptions)for(let m of o.subscriptions){let p=m.database||m.schema;d[p]||(ot.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){ot.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,_=[{replicateByDefault:p,...o}];uT.has(m)&&_h.default.get(x.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:p,name:tt(),startTime:uT.get(m),endTime:Date.now(),replicates:!0}),uT.delete(m));let R=hh(o,m),S=Si.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=_,R)return}else R&&(t=t%S.length,E=S[t++],E||ot.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:_,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=Fue.HDB_LEADER_URL??process.env.HDB_LEADER_URL??$V[0]?.url,w=y?new URL(y).hostname:Array.from(Gt().primaryStore.getKeys({}).filter(H=>H!==tt()))[0],I=_[0].name??(_[0].url&&new URL(_[0].url).hostname);ot.warn(`Setting up subscription with leader ${w} for node ${I}`),_[0].isLeader=!w||I===w,setTimeout(()=>{let H={..._[0],type:"subscribe-to-node",database:m,nodes:_};E?E.postMessage(H):gh(H)},kue)}else{ot.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:Gt().primaryStore.get(tt())?.replicates}),Gt().primaryStore.get(tt())?.replicates||(n=!1,ot.info("Disabling replication, this node name",tt(),Gt().primaryStore.get(tt()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:_};E?E.postMessage(y):fT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),ef=a(function(o){try{ot.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(Zd.keys()),l=c.sort(),u=l.indexOf(o.name||Ti(o.url));if(u===-1){ot.warn("Disconnected node not found in node map",o.name,c);return}let d=po.get(o.url),f=d?.get(o.database);if(!f){ot.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!_h.default.get(x.REPLICATION_FAILOVER))return;let m=f.nodes[0];if(!(m.replicates===!0||m.replicates?.sends||m.subscriptions?.length))return;let p=m.shard,h=(u+1)%l.length;for(;u!==h;){let E=l[h],_=Zd.get(E);d=po.get(_.url);let R=d?.get(o.database);if(!R||R.connected===!1||R.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=R,y=!1;for(let w of f.nodes){if(S.some(I=>I.name===w.name)){ot.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}w.endTime<Date.now()||(S.push(w),ot.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(w,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||ot.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}ot.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){ot.error("Error failing over node",c)}},"disconnectedFromNode"),Kl=a(function(o){let c=po.get(o.url),l=c?.get(o.database);if(!l){ot.warn("Connected node not found in replication map, this may be because the node is being removed",o.database,c);return}l.connected=!0,l.latency=o.latency;let u=l.nodes[0];if(!u){ot.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){ot.debug("Connected node is not named yet",o.database,l);return}if(!_h.default.get(x.REPLICATION_FAILOVER))return;l.nodes=[u];let d=!1;for(let f of po.values()){let m=f.get(o.database);if(!m||m==l)continue;let{worker:p,nodes:h,connected:E}=m;if(h)if(E===!1&&h[0].shard===u.shard&&node.url===u.url)for(let _ of h)i(_,o.database);else{let _=h.filter(R=>{if(R)return R.name===u.name&&R.worker?(R.worker.postMessage({type:"unsubscribe-to-node",database:o.database,url:o.url,nodes:[R]}),!1):!0});_.length<h.length&&(m.nodes=_)}}},"connectedToNode");function i(o,c,l=o){let u=Si.workers.filter(f=>f.name==="http");t=t%u.length;let d=u[t++];Object.defineProperty(o,"worker",{value:d,configurable:!0}),d?d.postMessage({url:l.url,name:l.name,type:"subscribe-to-node",database:c,nodes:[o]}):gh({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,Si.onMessageByType)("disconnected-from-node",ef),(0,Si.onMessageByType)("connected-to-node",Kl),(0,Si.onMessageByType)("request-cluster-status",jV)}function jV(e,t){let r=[];for(let[n,s]of Zd)try{let i=po.get(s.url);ot.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)o.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=KV(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function na(e,t){let r=Gt();e=e??Ti(t.url),t.name=e;try{if(t.ca){let s=new YV.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!_h.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=KV(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Si,dT,ot,VV,_h,YV,WV,KV,Fue,kue,po,ef,Kl,Zd,uT,$V,Sh=se(()=>{Oe();Si=b(st());Ss();dT=require("worker_threads");Xd();ot=b(Q()),VV=b(require("lodash")),_h=b(fe());G();YV=require("crypto"),WV=b(require("minimist")),{cloneDeep:KV}=VV.default,Fue=(0,WV.default)(process.argv),kue=200,po=new Map,Zd=new Map,uT=new Map,$V=[];a(WC,"startOnMainThread");a(jV,"requestClusterStatus");dT.parentPort&&(ef=a(e=>{dT.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Kl=a(e=>{dT.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Si.onMessageByType)("subscribe-to-node",e=>{gh(e)}),(0,Si.onMessageByType)("unsubscribe-from-node",e=>{fT(e)}));a(na,"ensureNode")});var ys=M(qt=>{"use strict";var _r=require("path"),{watch:Hue}=require("chokidar"),Wn=require("fs-extra"),tf=require("node-forge"),t1=require("net"),{generateKeyPair:jC,X509Certificate:sa,createPrivateKey:r1,randomBytes:Gue}=require("node:crypto"),que=require("util");jC=que.promisify(jC);var vt=tf.pki,yi=require("joi"),{v4:n1}=require("uuid"),{validateBySchema:XC}=mt(),{forComponent:$ue}=Q(),Ts=fe(),Vs=(G(),v(j)),{CONFIG_PARAMS:Wl}=Vs,Ri=dN(),{ClientError:Tc}=Ee(),pT=require("node:tls"),{relative:s1,join:Vue}=require("node:path"),{CERTIFICATE_VALUES:JV}=Ri,Kue=tl(),zC=gt(),{table:Yue,getDatabases:Wue,databases:mT}=(Oe(),v(ft)),{getJWTRSAKeys:QV}=(Kd(),v(uh)),Xe=$ue("tls").conditional;qt.generateKeys=tO;qt.updateConfigCert=f1;qt.createCsr=ede;qt.signCertificate=tde;qt.setCertTable=rf;qt.loadCertificates=l1;qt.reviewSelfSignedCert=nO;qt.createTLSSelector=p1;qt.listCertificates=E1;qt.addCertificate=ade;qt.removeCertificate=lde;qt.createNatsCerts=sde;qt.generateCertsKeys=nde;qt.getReplicationCert=yh;qt.getReplicationCertAuth=Zue;qt.renewSelfSigned=ide;qt.hostnamesFromCert=iO;qt.getKey=ude;qt.getHostnamesFromCertificate=dde;qt.getPrimaryHostName=sO;qt.generateSerialNumber=_T;var{urlToNodeName:i1,getThisNodeUrl:jue,getThisNodeName:ET,clearThisNodeName:zue}=(Ss(),v(ia)),{readFileSync:Jue,statSync:o1}=require("node:fs"),m0e=fe(),{getTicketKeys:Que,onMessageFromWorkers:Xue}=st(),{isMainThread:a1}=require("worker_threads"),{TLSSocket:c1,createSecureContext:p0e}=require("node:tls"),ZC=3650,Th=["127.0.0.1","localhost","::1"],eO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function _T(){let e=Gue(8);return e[0]=e[0]&127|1,e.toString("hex")}a(_T,"generateSerialNumber");Xue(async e=>{e.type===Vs.ITC_EVENT_TYPES.RESTART&&(Ts.initSync(!0),await nO())});var on;function Rc(){return on||(on=Wue().system.hdb_certificate,on||(on=Yue({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),on}a(Rc,"getCertTable");async function yh(){let e=p1("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(ET());if(!r)return;let n=new sa(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(yh,"getReplicationCert");async function Zue(){Rc();let e=(await yh()).options.cert,r=new sa(e).issuer.match(/CN=(.*)/)?.[1];return on.get(r)}a(Zue,"getReplicationCertAuth");var XV,yc=new Map;function l1(){if(XV)return;XV=!0;let e=[{configKey:Wl.TLS},{configKey:Wl.OPERATIONSAPI_TLS}];Rc();let t=_r.dirname(zC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=zC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&s1(Vue(t,"keys"),o);c&&ZV(o,l=>{yc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&a1){let d;ZV(u,f=>{if(JV.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=m1(u),h=new sa(p),E;try{E=sO(h)}catch(y){Xe.error?.("error extracting host name from certificate",y);return}if(E==null){Xe.error?.("No host name found on certificate");return}if(h.checkIssued(new sa(JV.cert)))return;let _=on.primaryStore.get(E),R=o1(u).mtimeMs,S=!_||_.is_self_signed?1:_.file_timestamp??_.__updatedtime__;if(_&&R<=S){R<S&&Xe.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=on.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(l1,"loadCertificates");function ZV(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&a1&&Xe.warn?.(`Reloading ${r}:`,i),n=c,t(m1(i)))}catch(c){Xe.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Wn.existsSync(e)?s(e,o1(e)):Xe.error?.(`${r} file not found:`,e),Hue(e,{persistent:!1}).on("change",s)}a(ZV,"loadAndWatch");function JC(){let e=jue();if(e==null){let t=Th[0];return Xe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return i1(e)}a(JC,"getHost");function hT(){let e=ET();if(e==null){let t=Th[0];return Xe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(hT,"getCommonName");async function ede(){let e=await yh(),t=vt.certificateFromPem(e.options.cert),r=vt.privateKeyFromPem(e.options.key);Xe.info?.("Creating CSR with cert named:",e.name);let n=vt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:hT()},...eO];Xe.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:u1()}];return Xe.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),tf.pki.certificationRequestToPem(n)}a(ede,"createCsr");function u1(){let e=Th.includes(hT())?Th:[...Th,hT()];return e.includes(JC())||e.push(JC()),[{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=>t1.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(u1,"certExtensions");async function tde(e){let t={},r=_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Rc();for await(let d of on.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(yc.has(d.private_key_name)){n=yc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Wn.exists(_r.join(r,d.private_key_name))){n=Wn.readFile(_r.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await QC();s=d.ca,n=d.private_key}n=vt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=vt.certificateFromPem(s.certificate);Xe.info?.("Signing CSR with cert named",s.name);let o=vt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Xe.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=tf.pki.createCertificate();c.serialNumber=_T(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+ZC),Xe.info?.("sign cert setting validity:",c.validity),Xe.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Xe.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Xe.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,tf.md.sha256.create()),t.certificate=vt.certificateToPem(c)}else Xe.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(tde,"signCertificate");async function rde(e,t){await rf({name:ET(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await rf({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:vt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(rde,"createCertificateTable");async function rf(e){let t;try{t=new sa(e.certificate)}catch(r){Xe.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Xe.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Rc(),await on.patch(e)}a(rf,"setCertTable");async function tO(){let e=await jC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:vt.publicKeyFromPem(e.publicKey),privateKey:vt.privateKeyFromPem(e.privateKey)}}a(tO,"generateKeys");async function rO(e,t,r){let n=vt.createCertificate();if(!t){let o=await yh();t=vt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=_T(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+ZC);let i=[{name:"commonName",value:hT()},...eO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(u1()),n.sign(e,tf.md.sha256.create()),vt.certificateToPem(n)}a(rO,"generateCertificates");async function QC(){let e=await E1(),t;for(let r of e){if(!r.is_authority)continue;let n=await h1(r.private_key_name);if(r.private_key_name&&n&&new sa(r.certificate).checkPrivateKey(r1(n))){Xe.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Xe.trace?.("No CA found with matching private key")}a(QC,"getCertAuthority");async function d1(e,t,r=!0){let n=vt.createCertificate();n.publicKey=t,n.serialNumber=_T(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+ZC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ts.get(Wl.REPLICATION_HOSTNAME)??i1(Ts.get(Wl.REPLICATION_URL))??n1().split("-")[0]}`},...eO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,tf.md.sha256.create());let o=_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),c=_r.join(o,Ri.PRIVATEKEY_PEM_NAME);return r&&await Wn.writeFile(c,vt.privateKeyToPem(e)),n}a(d1,"generateCertAuthority");async function nde(){let{privateKey:e,publicKey:t}=await tO(),r=await d1(e,t),n=await rO(e,t,r);await rde(n,r),f1()}a(nde,"generateCertsKeys");async function sde(){let e=await rO(vt.privateKeyFromPem(Ri.CERTIFICATE_VALUES.key),void 0,vt.certificateFromPem(Ri.CERTIFICATE_VALUES.cert)),t=_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),r=_r.join(t,Ri.NATS_CERTIFICATE_PEM_NAME);await Wn.exists(r)||await Wn.writeFile(r,e);let n=_r.join(t,Ri.NATS_CA_PEM_NAME);await Wn.exists(n)||await Wn.writeFile(n,Ri.CERTIFICATE_VALUES.cert)}a(sde,"createNatsCerts");async function ide(){Rc();for await(let e of on.search([{attribute:"is_self_signed",value:!0}]))await on.delete(e.name);await nO()}a(ide,"renewSelfSigned");async function nO(){zue(),await l1(),Rc();let e=await QC();if(!e){Xe.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=a(u=>{try{return{key:vt.privateKeyFromPem(Wn.readFileSync(u)),keyPath:u}}catch(d){return Xe.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ts.get(Wl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=Ts.get(Wl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),c=s1(o,i);s||(Xe.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await tO(),Wn.existsSync(_r.join(o,Ri.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${n1().split("-")[0]}.pem`),await Wn.writeFile(_r.join(o,c),vt.privateKeyToPem(s)));let l=await d1(s,vt.setRsaPublicKey(s.n,s.e),!1);await rf({name:l.subject.getField("CN").value,uses:["https"],certificate:vt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await yh()){let r=ET();Xe.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await QC();let n=vt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await rO(vt.privateKeyFromPem(e.private_key),s,n);await rf({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(nO,"reviewSelfSignedCert");function f1(){let e=Kue(Object.keys(Vs.CONFIG_PARAM_MAP),!0),t=_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),r=_r.join(t,Ri.PRIVATEKEY_PEM_NAME),n=_r.join(t,Ri.NATS_CERTIFICATE_PEM_NAME),s=_r.join(t,Ri.NATS_CA_PEM_NAME),i=Vs.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),zC.updateConfigValue(void 0,void 0,o,!1,!0)}a(f1,"updateConfigCert");function m1(e){return e.startsWith("-----BEGIN")?e:Jue(e,"utf8")}a(m1,"readPEM");var e1=pT.createSecureContext;pT.createSecureContext=function(e){if(!e.cert||!e.key)return e1(e);let t={...e};delete t.key,delete t.cert;let r=e1(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var ode=c1.prototype._init;c1.prototype._init=function(e,t){ode.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Yl=new Map;function p1(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Yl.clear();let d=0;if(mT===void 0){c();return}for await(let f of mT.system.hdb_certificate.search([])){let m=f.certificate,p=new sa(m);f.is_authority&&(p.asString=m,Yl.set(p.subject,m))}for await(let f of mT.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await h1(f.private_key_name),E=f.certificate,_=new sa(E);if(Yl.has(_.issuer)&&(E+=`
16
+ `+Yl.get(_.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:Que(),availableCAs:Yl,ca:t&&Array.from(Yl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let S=f.hostnames??iO(_);Array.isArray(S)||(S=[S]);for(let I of S)I===JC()&&(p+=1);let y=pT.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Yl),y.certStart=E.toString().slice(0,100);let w;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),t1.isIP(I)&&(w=!0);let H=r.get(I)?.quality??0;Xe.trace?.("Assigning TLS for hostname",I,"if",p,">",H),p>H&&r.set(I,y)}else Xe.error?.("No hostname found for certificate at",pT.certificate);Xe.trace?.("Adding TLS",y.name,"for",o.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=y,d=p,o&&(o.defaultContext=y))}catch(m){Xe.error?.("Error applying TLS for",f.name,m)}o?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),mT?.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Xe.info?.("TLS requested for",o||"(no SNI)");let l=o;for(;;){let d=r.get(l);if(d)return Xe.debug?.("Found certificate for",o,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}o?Xe.debug?.("No certificate found to match",o,"using the default certificate"):Xe.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Xe.info?.("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(p1,"createTLSSelector");async function h1(e){let t=yc.get(e);return!t&&e?await Wn.readFile(_r.join(Ts.get(Wl.ROOTPATH),Vs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(h1,"getPrivateKeyByName");async function E1(){Rc();let e=[];for await(let t of on.search([]))e.push(t);return e}a(E1,"listCertificates");async function ade(e){let t=XC(e,yi.object({name:yi.string().required(),certificate:yi.string().required(),is_authority:yi.boolean().required(),private_key:yi.string(),hosts:yi.array(),uses:yi.array()}));if(t)throw new Tc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new sa(n),c=!1,l=!1,u;for(let[p,h]of yc)!s&&!c&&o.checkPrivateKey(r1(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Tc("A suitable private key was not found for this certificate");let d;if(!r){try{d=sO(o)}catch(p){Xe.error?.(p)}if(d==null)throw new Tc("Error extracting certificate host name, please provide a name parameter")}let f=cde(r??d);s&&!c&&!l&&(await Wn.writeFile(_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME,f+".pem"),s),yc.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await rf(m),"Successfully added certificate: "+f}a(ade,"addCertificate");function cde(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(cde,"sanitizeName");async function lde(e){let t=XC(e,yi.object({name:yi.string().required()}));if(t)throw new Tc(t.message);let{name:r}=e;Rc();let n=await on.get(r);if(!n)throw new Tc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await on.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(Xe.info?.("Removing private key named",s),await Wn.remove(_r.join(Ts.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME,s)))}return await on.delete(r),"Successfully removed "+r}a(lde,"removeCertificate");function sO(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||iO(e)[0]}a(sO,"getPrimaryHostName");function iO(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}a(iO,"hostnamesFromCert");async function ude(e){if(e.bypass_auth!==!0)throw new Tc("Unauthorized","401");let t=XC(e,yi.object({name:yi.string().required()}));if(t)throw new Tc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await QV()).privateKey;if(r===".jwtPublic")return(await QV()).publicKey;if(yc.get(r))return yc.get(e.name);throw new Tc("Key not found")}a(ude,"getKey");function dde(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}a(dde,"getHostnamesFromCertificate")});var H1={};ye(H1,{BACK_PRESSURE_RATIO_POSITION:()=>B1,CONFIRMATION_STATUS_POSITION:()=>x1,LATENCY_POSITION:()=>RT,NodeReplicationConnection:()=>sf,OPERATION_REQUEST:()=>uO,RECEIVED_TIME_POSITION:()=>fO,RECEIVED_VERSION_POSITION:()=>dO,RECEIVING_STATUS_POSITION:()=>mO,RECEIVING_STATUS_RECEIVING:()=>k1,RECEIVING_STATUS_WAITING:()=>F1,SENDING_TIME_POSITION:()=>bh,createWebSocket:()=>bT,databaseSubscriptions:()=>Ac,replicateOverWS:()=>Ah,tableUpdateListeners:()=>EO});async function bT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=tt(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!cO){let l=(0,D1.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),cO=u.secureContexts}if(i=cO.get(s),i&&le.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,M1.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&((nf?.caCount!==oa.size||nf?.derivedFromContext!==i)&&(nf=v1.createSecureContext({...i.options,ca:[...oa,...i.options.availableCAs.values()]}),nf.caCount=oa.size,nf.derivedFromContext=i),c.secureContext=nf),new O1.WebSocket(e,"harperdb-replication-v1",c)}function Ah(e,t,r){let n=t.port||t.securePort,s=hO.pid%1e3+"-"+P1.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);le.debug?.(s,"Initializing replication connection",r);let i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||Ac,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&lt()[u],_,R=new Map,S=[];_=r.name,_&&t.connection&&(t.connection.nodeName=_);let y,w,I,H,X,q,k,z=6e4,Y,ce=0,de=0,te=0,Se=C1.default.get(x.REPLICATION_BLOBTIMEOUT)??12e4,Ne=new Map,Ke=[],$e=0,Ir;if(t.url){let A=a(()=>{X&&de===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(X=performance.now(),e.ping(),de=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,w1).unref(),A()}else nr();e._socket?.setMaxListeners(200);function nr(){clearTimeout(H),de=e._socket?.bytesRead,te=e._socket?.bytesWritten,H=setTimeout(()=>{de===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${_}, terminating connection and reconnecting`),e.terminate())},w1*2).unref()}a(nr,"resetPingTimer");let zr=0,xr=0,Pu=!1,Jc=3e4;function Bt(){if(pn?.length>0){let A=performance.now(),U=A-xr;zr=(zr*Jc+(Pu?U:0))/(Jc+U),m&&(m[B1]=zr),xr=A}}a(Bt,"updateBackPressureRatio"),setInterval(Bt,Jc).unref();function si(){if(!(!_||!u))return m||(m=Jd(f,u,_)),m}a(si,"getSharedStatus"),u&&Qc(u);let Ga,a_,lm=[],c_=[],um,ve=[],l_=[],$b=[],Lu=150,Hi=25,Ps=0,dm=0,fm=!1,Uo,Dn,pn,Br;e.on("message",Du);async function Du(A){if(r=await r,!r){le.error?.(s,"No authorization provided"),Fr(1008,"Unauthorized");return}mm(A),e.off("message",Du),e.on("message",mm)}a(Du,"onWSMessageWhenAuthorized");function mm(A){ce=performance.now();try{let U=A.dataView=new cl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let W=(0,at.decode)(A),[J,F,he]=W;switch(J){case g1:{if(F){if(_){if(_!==F){le.error?.(s,`Node name mismatch, expecting to connect to ${_}, but peer reported name as ${F}, disconnecting`),e.send((0,at.encode)([Rh])),Fr(1008,"Node name mismatch");return}}else if(_=F,t.connection?.tentativeNode){let me=t.connection.tentativeNode;me.name=_,t.connection.tentativeNode=null,na(_,me)}if(t.connection&&(t.connection.nodeName=_),le.debug?.(s,"received node name:",_,"db:",u??W[2]),!u)try{Qc(u=W[2]),u==="system"&&(Ga=gc(t,(me,ie)=>{Va(ie)&&K(ie)}),e.on("close",()=>{Ga?.remove()}))}catch(me){le.warn?.(s,"Error setting database",me),e.send((0,at.encode)([Rh])),Fr(1008,me.message);return}pm()}break}case A1:{le.debug?.(s,"Received table definitions for",F.map(me=>me.table));for(let me of F){let ie=W[2];me.database=ie;let Ce;if(Va(ie)){if(u==="system")Me[ie]?.[me.table]||(Ce=D(me,Me[ie]?.[me.table]));else{if(ie!=="data"&&!Me[ie]){le.warn?.("Database not found",ie);return}Ce=D(me,Me[ie]?.[me.table])}f||(f=Ce?.auditStore),E||(E=lt()?.[ie])}}break}case Rh:Fr();break;case uO:try{let me=r?.replicates||r?.subscribers||r?.name;le.debug?.("Received operation request",F,"from",_),server.operation(F,{user:r},!me).then(ie=>{le.debug?.("Requested request from finished",_,ie),Array.isArray(ie)&&(ie={results:ie}),ie.requestId=F.requestId,e.send((0,at.encode)([ST,ie]))},ie=>{le.debug?.("Failed requested operation from",_,ie),e.send((0,at.encode)([ST,{requestId:F.requestId,error:oO(ie)}]))})}catch(me){e.send((0,at.encode)([ST,{requestId:F.requestId,error:oO(me)}]))}break;case ST:let{resolve:ue,reject:_e}=R.get(F.requestId);le.debug?.("Received completed operation request",_,F),F.error?_e(new Error(F.error)):ue(F),R.delete(F.requestId);break;case aO:let re=W[3];if(!E){u?le.error?.(s,"No database found for",u):le.error?.(s,"Database name never received"),Fr();return}let oe=E[re];oe=D({table:re,database:u,attributes:F.attributes,schemaDefined:F.schemaDefined},oe),lm[he]={name:re,decoder:new at.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:F.typedStructs,structures:F.structures}),getEntry(me){return oe.primaryStore.getEntry(me)},rootStore:oe.primaryStore.rootStore};break;case S1:Br=f?xV(F,f):new Map,um=W[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${um}`);break;case T1:let ge=he;$b[ge]=F;break;case b1:si()[x1]=F,le.trace?.(s,"received and broadcasting committed update",F),si().buffer.notify();break;case R1:y=F,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case TT:{let me=W[1],{fileId:ie,size:Ce,finished:Be,error:He}=me,Te=Ne.get(ie);le.debug?.("Received blob",ie,"has stream",!!Te,"connectedToBlob",!!Te?.connectedToBlob,"length",W[2].length,"finished",Be),Te||(Te=new lO.PassThrough,Te.expectedSize=Ce,Ne.set(ie,Te)),Te.lastChunk=Date.now();let pt=W[2];Ye(pt.byteLength,"bytes-received",`${_}.${u}`,"replication","blob");try{Be?(He?(Te.on("error",()=>{}),Te.destroy(new Error("Blob error: "+He+" for record "+(Te.recordId??"unknown")+" from "+_))):Te.end(pt),Te.connectedToBlob&&Ne.delete(ie)):Te.write(pt)}catch(Nt){le.error?.(`Error receiving blob for ${Te.recordId} from ${_} and streaming to storage`,Nt),Ne.delete(ie)}break}case y1:{let me=F,ie;try{let Ce=W[3],Be=c_[he]||(c_[he]=E[W[4]]);if(!Be)return le.warn?.("Unknown table id trying to handle record request",he);let He=Be.primaryStore.getBinaryFast(Symbol.for("structures")),Te=He?.length??0;if(Te>0&&Te!==dm){dm=Te;let Nt=(0,at.decode)(He);e.send((0,at.encode)([aO,{typedStructs:Nt.typed,structures:Nt.named},he,Be.tableName]))}let pt=Be.primaryStore.getBinaryFast(Ce);if(pt){let Nt=Be.primaryStore.decoder.decode(pt,{valueAsBuffer:!0}),Ft=ut||{};Ft.version=(0,U1.getLastVersion)(),ut&&ut[ju]&Xr&&(Nt=Buffer.from(Nt),Gm(()=>Be.primaryStore.decoder.decode(pt),d_=>qa(d_,Ce),Be.primaryStore.rootStore)),ie=(0,at.encode)([gT,me,{value:Nt,expiresAt:Ft.expiresAt,version:Ft.version,residencyId:Ft.residencyId,nodeId:Ft.nodeId,user:Ft.user}])}else ie=(0,at.encode)([gT,me])}catch(Ce){ie=(0,at.encode)([gT,me,{error:Ce.message}])}e.send(ie);break}case gT:{let{resolve:me,reject:ie,tableId:Ce,key:Be}=R.get(W[1]),He=W[2];if(He?.error)ie(new Error(He.error));else if(He){let Te;z_(()=>{let pt=lm[Ce].decoder.decode(He.value);He.value=pt,He.key=Be,me(He)||Te&&setTimeout(()=>Te.forEach(Y_),6e4).unref()},f?.rootStore,pt=>{let Nt=$a(pt,Be);return Te||(Te=[]),Te.push(Nt),Nt})}else me();R.delete(W[1]);break}case _1:{pn=F;let me,ie,Ce=!1;if(h){if(u!==h.databaseName&&!h.then){le.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(le.debug?.(s,"received subscription request for",u,"at",pn),!h){let De;h=new Promise(sr=>{le.debug?.("Waiting for subscription to database "+u),De=sr}),h.ready=De,Ac.set(u,h)}if(r.name)ie=Gt().subscribe(r.name),ie.then(async De=>{me=De;for await(let sr of me){let ht=sr.value;if(!(ht?.replicates===!0||ht?.replicates?.receives||ht?.subscriptions?.some(kr=>(kr.database||kr.schema)===u&&kr.publish!==!1))){Ce=!0,Fr(1008,`Unauthorized database subscription to ${u}`);return}}},De=>{le.error?.(s,"Error subscribing to HDB nodes",De)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,at.encode)([Rh])),Fr(1008,`Unauthorized database subscription to ${u}`);return}if(Dn&&(le.debug?.(s,"stopping previous subscription",u),Dn.emit("close")),pn.length===0)return;let Be=pn[0],He=a(De=>{if(De&&(Be.replicateByDefault?!Be.tables.includes(De.tableName):Be.tables.includes(De.tableName)))return{table:De}},"tableToTableEntry"),Te={txnTime:0},pt,Nt,Ft=1/0,d_,f_=a((De,sr)=>{if(De.type==="end_txn"){Te.txnTime&&(o[i]!==66&&le.error?.("Invalid encoding of message"),C(9),C(og),O(d_=sr),tU()),i=c,Te.txnTime=0;return}let ht=De.nodeId,kr=De.tableId,Ct=Nt[kr];if(!Ct&&(Ct=Nt[kr]=He(h.tableById[kr]),!Ct))return le.debug?.("Not subscribed to table",kr);let Ls=Ct.table,zt=Ls.primaryStore,ii=zt.encoder;(De.extendedType&Eg||!ii.typedStructs)&&(ii._mergeStructures(ii.getStructures()),ii.typedStructs&&(ii.lastTypedStructuresLength=ii.typedStructs.length));let Uu=pt[ht];if(!(Uu&&Uu.startTime<sr&&(!Uu.endTime||Uu.endTime>sr)))return yT&&le.trace?.(s,"skipping replication update",De.recordId,"to:",_,"from:",ht,"subscribed:",pt),rU();yT&&le.trace?.(s,"sending replication update",De.recordId,"to:",_,"from:",ht,"subscribed:",pt);let Vb=De.version;Te.txnTime!==Vb&&(Te.txnTime&&(yT&&le.trace?.(s,"new txn time, sending queued txn",Te.txnTime),o[i]!==66&&le.error?.("Invalid encoding of message"),tU()),Te.txnTime=Vb,i=c,O(Vb));let Xc=De.residencyId,Kb=u_(Xc,Ls),m_;if(Kb&&!Kb.includes(_)){let Gi=u_(De.previousResidencyId,Ls);if(Gi&&!Gi.includes(_)&&(De.type==="put"||De.type==="patch")||Ls.getResidencyById)return rU();let Zc=De.recordId;le.trace?.(s,"sending invalidation",Zc,_,"from",ht);let hm=0;Xc&&(hm|=ll),De.previousResidencyId&&(hm|=ul);let jb,p_=null;for(let nU in Ls.indices){if(!p_){if(jb=De.getValue(zt,!0),!jb)break;p_={}}p_[nU]=jb[nU]}m_=dl(De.version,kr,Zc,null,ht,De.user,De.type==="put"||De.type==="patch"?"invalidate":De.type,ii.encode(p_),hm,Xc,De.previousResidencyId,De.expiresAt)}function rU(){return le.trace?.(s,"skipping audit record",De.recordId),q||(q=setTimeout(()=>{q=null,(d_||0)+I1/2<Ft&&(yT&&le.trace?.(s,"sending skipped sequence update",Ft),e.send((0,at.encode)([R1,Ft])))},I1).unref()),new Promise(setImmediate)}a(rU,"skipAuditRecord");let Yb=ii.typedStructs,Wb=ii.structures;if((Yb?.length!=Ct.typed_length||Wb?.length!=Ct.structure_length)&&(Ct.typed_length=Yb?.length,Ct.structure_length=Wb.length,le.debug?.(s,"send table struct",Ct.typed_length,Ct.structure_length),Ct.sentName||(Ct.sentName=!0),e.send((0,at.encode)([aO,{typedStructs:Yb,structures:Wb,attributes:Ls.attributes,schemaDefined:Ls.schemaDefined},kr,Ct.table.tableName]))),Xc&&!l_[Xc]&&(e.send((0,at.encode)([T1,Kb,Xc])),l_[Xc]=!0),m_)C(m_.length),P(m_);else{let Gi=De.encoded;De.extendedType&Xr&&Gm(()=>De.getValue(zt),hm=>qa(hm,De.recordId),zt.rootStore);let Zc=Gi[0]===66?8:0;C(Gi.length-Zc),P(Gi,Zc),le.trace?.("wrote record",De.recordId,"length:",Gi.length)}if(e._socket.writableNeedDrain){let Gi=performance.now();return Pu=!0,Bt(),new Promise(Zc=>{le.debug?.(`Waiting for remote node ${_} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",()=>{Zc(),Pu=!1,Bt()})})}else return $e>Hi?new Promise(Gi=>{Ir=Gi}):new Promise(setImmediate)},"sendAuditRecord"),tU=a(()=>{c-i>8?(e.send(o.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Ye(c-i,"bytes-sent",`${_}.${u}`,"replication","egress")):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");Dn=new pO.EventEmitter,Dn.once("close",()=>{Ce=!0,me?.end()});for(let{startTime:De}of pn)De<Ft&&(Ft=De);(ie||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,Nt=h.tableById.map(He),pt=[];for(let{name:sr,startTime:ht,endTime:kr}of pn){let Ct=lT(sr,f);le.debug?.("subscription to",sr,"using local id",Ct,"starting",ht),pt[Ct]={startTime:ht,endTime:kr}}K(u),Ga||(Ga=ql(sr=>{sr.databaseName===u&&K(u)}),a_=rh(sr=>{sr===u&&(e.send((0,at.encode)([Rh])),Fr())}),e.on("close",()=>{Ga?.remove(),a_?.remove()})),e.send((0,at.encode)([S1,mh(h.auditStore),pn.map(({name:sr})=>sr)]));let De=!0;do{isFinite(Ft)||(le.warn?.("Invalid sequence id "+Ft),Fr(1008,"Invalid sequence id"+Ft));let sr;if(De&&!Ce&&(De=!1,Ft===0)){le.info?.("Replicating all tables to",_);let ht=Date.now(),kr=AT(f);for(let Ct in E){if(!He(Ct))continue;let Ls=E[Ct];for(let zt of Ls.primaryStore.getRange({snapshot:!1,versions:!0})){if(Ce)return;le.trace?.(s,"Copying record from",u,Ct,zt.key,zt.localTime),ht=Math.max(zt.localTime??1,ht),sr=!0,si()[bh]=1;let ii=dl(zt.version,Ls.tableId,zt.key,null,kr,null,"put",Gm(()=>Ls.primaryStore.encoder.encode(zt.value),Uu=>qa(Uu,zt.key)),zt.metadataFlags&-256,zt.residencyId,null,zt.expiresAt);await f_({recordId:zt.key,tableId:Ls.tableId,type:"put",getValue(){return zt.value},encoded:ii,version:zt.version,residencyId:zt.residencyId,nodeId:kr,extendedType:zt.metadataFlags},zt.localTime)}}Te.txnTime||(Te.txnTime=ht,O(ht)),f_({type:"end_txn"},ht),si()[bh]=0,Ft=ht}for(let{key:ht,value:kr}of f.getRange({start:Ft||1,exclusiveStart:!0,snapshot:!1})){if(Ce)return;let Ct=At(kr);le.debug?.("sending audit record",ht,Ct.recordId),si()[bh]=ht,Ft=ht,await f_(Ct,ht),Dn.startTime=ht,sr=!0}sr&&f_({type:"end_txn"},Ft),si()[bh]=0,await dB(f)}while(!Ce)}).catch(De=>{le.error?.(s,"Error handling subscription to node",De),Fr(1008,"Error handling subscription to node")});break}}return}U.position=8;let N=!0,L,$;do{si();let W=U.readInt();if(W===9&&U.getUint8(U.position)==og){U.position++,y=$=U.readFloat64(),m[dO]=y,m[fO]=Date.now(),m[mO]=F1,h.send({type:"end_txn",localTime:y,remoteNodeIds:S}),le.trace?.("received remote sequence update",y,u);break}let J=U.position,F=At(A,J,J+W),he=lm[F.tableId];he||le.error?.(`No table found with an id of ${F.tableId}`);let ue;F.residencyId&&(ue=$b[F.residencyId],le.trace?.(s,"received residency list",ue,F.type,F.recordId));let _e=F.recordId;try{z_(()=>{L={table:he.name,id:F.recordId,type:F.type,nodeId:Br.get(F.nodeId),residencyList:ue,timestamp:F.version,value:F.getValue(he),user:F.user,beginTxn:N,expiresAt:F.expiresAt}},f?.rootStore,re=>$a(re,_e))}catch(re){throw re.message+=" record id: "+_e,re.message+=" typed structures for current decoder"+JSON.stringify(he.decoder.typedStructs),re.message+=" structures for current decoder"+JSON.stringify(he.decoder.structures),re}N=!1,le.debug?.(s,"received replication message",F.type,"id",L.id,"version",new Date(F.version),"nodeId",L.nodeId),m[dO]=F.version,m[fO]=Date.now(),m[mO]=k1,h.send(L),U.position=J+W}while(U.position<A.byteLength);Ps++,u!=="system"&&Ye(A.byteLength,"bytes-received",`${_}.${u}.${L?.table||"unknown_table"}`,"replication","ingest"),Ps>Lu&&!fm&&(fm=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${_} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(L){let W=Date.now()-L.timestamp;u!=="system"&&Ye(W,"replication-latency",_+"."+u+"."+L.table,L.type,"ingest")}Ps--,fm&&(fm=!1,e.resume(),le.debug?.(`Replication resuming ${_}`)),Ke.length>0&&await Promise.all(Ke),le.trace?.("All blobs finished"),!w&&$&&(le.trace?.(s,"queuing confirmation of a commit at",$),setTimeout(()=>{e.send((0,at.encode)([b1,w])),le.trace?.(s,"sent confirmation of a commit at",w),w=null},mde)),w=$,le.debug?.("last sequence committed",new Date($),u)}})}catch(U){le.error?.(s,"Error handling incoming replication message",U)}}a(mm,"onWSMessage"),e.on("ping",nr),e.on("pong",()=>{if(t.connection){let A=performance.now()-X;t.connection.latency=A,si()&&(m[RT]=A),t.isSubscriptionConnection&&Kl({name:_,database:u,url:t.url,latency:A})}X=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout(H),clearInterval(k),Dn&&Dn.emit("close"),Uo&&Uo.end();for(let[N,{reject:L}]of R)L(new Error(`Connection closed ${U?.toString()} ${A}`));le.debug?.(s,"closed",A,U?.toString())});function Fr(A,U){try{e.isFinished=!0,le.debug?.(s,"closing",_,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(N){le.error?.(s,"Error closing connection",N)}}a(Fr,"close");let vu=new Set;async function qa(A,U){let N=W_(A);if(vu.has(N)){le.debug?.("Blob already being sent",N);return}vu.add(N);try{let L;$e++;for await(let $ of A.stream())L&&(le.debug?.("Sending blob chunk",N,"length",L.length),e.send((0,at.encode)([TT,{fileId:N,size:A.size},L]))),L=$,e._socket.writableNeedDrain&&(le.debug?.("draining",N),await new Promise(W=>e._socket.once("drain",W)),le.debug?.("drained",N)),Ye($.length,"bytes-sent",`${_}.${u}`,"replication","blob");le.debug?.("Sending final blob chunk",N,"length",L.length),e.send((0,at.encode)([TT,{fileId:N,size:A.size,finished:!0},L]))}catch(L){le.warn?.("Error sending blob",L,"blob id",N,"for record",U),e.send((0,at.encode)([TT,{fileId:N,finished:!0,error:oO(L)},Buffer.alloc(0)]))}finally{vu.delete(N),$e--,$e<Hi&&Ir?.()}}a(qa,"sendBlobs");function $a(A,U){let N=W_(A),L=Ne.get(N);le.debug?.("Received transaction with blob",N,"has stream",!!L,"ended",!!L?.writableEnded),L?L.writableEnded&&Ne.delete(N):(L=new lO.PassThrough,Ne.set(N,L)),L.connectedToBlob=!0,L.lastChunk=Date.now(),L.recordId=U,A.size===void 0&&L.expectedSize&&(A.size=L.expectedSize);let $=L.blob??createBlob(L,A);L.blob=$;let W=Vo(()=>Hm($).saving,h.auditStore?.rootStore);return W&&(W.blobId=N,Ke.push(W),W.finally(()=>{le.debug?.(`Finished receiving blob stream ${N}`),Ke.splice(Ke.indexOf(W),1)})),$}a($a,"receiveBlobs");function pm(){if(p||(p=!0,t.connection?.on("subscriptions-updated",pm)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;f||(f=h?.auditStore);try{for(let L of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let $ of L.value.nodes||[])$.lastTxnTime>(A.get($.id)??0)&&A.set($.id,$.lastTxnTime)}catch(L){if(!L.message.includes("Can not re"))throw L}let U=t.connection?.nodeSubscriptions?.[0];S=[];let N=t.connection?.nodeSubscriptions.map((L,$)=>{let W=[],{replicateByDefault:J}=L;if(L.subscriptions){for(let _e of L.subscriptions)if(_e.subscribe&&(_e.schema||_e.database)===u){let re=_e.table;E?.[re]?.replicate!==!1&&W.push(re)}J=!1}else for(let _e in E)(J?E[_e].replicate===!1:E[_e].replicate)&&W.push(_e);let F=f&&lT(L.name,f),he=h?.dbisDB?.get([Symbol.for("seq"),F])??1,ue=Math.max(he?.seqId??1,(typeof L.startTime=="string"?new Date(L.startTime).getTime():L.startTime)??1);if(le.debug?.("Starting time recorded in db",L.name,F,u,he?.seqId,"start time:",ue,new Date(ue)),U!==L){let _e=f&&lT(U.name,f),re=h?.dbisDB?.get([Symbol.for("seq"),_e])??1;for(let oe of re?.nodes||[])oe.name===L.name&&(ue=oe.seqId,le.debug?.("Using sequence id from proxy node",U.name,ue))}return F===void 0?le.warn("Starting subscription request from node",L,"but no node id found"):S.push(F),A.get(F)>ue&&(ue=A.get(F),le.debug?.("Updating start time from more recent txn recorded",U.name,ue)),ue===1&&(L.isLeader?(le.warn?.(`Requesting full copy of database ${u} from ${L.url}`),ue=0):ue=Date.now()-6e4),le.trace?.(s,"defining subscription request",L.name,u,new Date(ue)),{name:L.name,replicateByDefault:J,tables:W,startTime:ue,isLeader:L.isLeader,endTime:L.endTime}});if(N)if(le.debug?.(s,"sending subscription request",N,h?.dbisDB?.path),clearTimeout(Y),N.length>0)e.send((0,at.encode)([_1,N]));else{let L=a(()=>{let $=performance.now();Y=setTimeout(()=>{ce<=$?Fr(1008,"Connection has no subscriptions and is no longer used"):L()},z).unref()},"scheduleClose");L()}}a(pm,"sendSubscriptionRequestUpdate");function u_(A,U){if(!A)return;let N=ve[A];return N||(N=U.getResidencyRecord(A),ve[A]=N),N}a(u_,"getResidence");function Va(A){return!(bc&&bc!="*"&&!bc[A]&&!bc.includes?.(A)&&!bc.some?.(U=>U.name===A))}a(Va,"checkDatabaseAccess");function Qc(A){if(h=h||d.get(A),!Va(A))throw new Error(`Access to database "${A}" is not permitted`);h||le.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=lt()?.[A]);let U=tt();if(U===_)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return Mu(U,A),!0}a(Qc,"setDatabase");function Mu(A,U){let N=lt()?.[U],L=[];for(let $ in N){let W=N[$];L.push({table:$,schemaDefined:W.schemaDefined,attributes:W.attributes.map(J=>({name:J.name,type:J.type,isPrimaryKey:J.isPrimaryKey}))})}le.trace?.("Sending database info for node",A,"database name",U),e.send((0,at.encode)([g1,A,U,L]))}a(Mu,"sendNodeDBName");function K(A){let U=lt()?.[A],N=[];for(let L in U){if(pn&&!pn.some(W=>W.replicateByDefault?!W.tables.includes(L):W.tables.includes(L)))continue;let $=U[L];N.push({table:L,schemaDefined:$.schemaDefined,attributes:$.attributes.map(W=>({name:W.name,type:W.type,isPrimaryKey:W.isPrimaryKey}))})}e.send((0,at.encode)([A1,N,A]))}a(K,"sendDBSchema"),k=setInterval(()=>{for(let[A,U]of Ne)U.lastChunk+Se<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${_}`),Ne.delete(A),U.end())},Se).unref();let g=1,T=[];return{end(){Uo&&Uo.end(),Dn&&Dn.emit("close")},getRecord(A){let U=g++;return new Promise((N,L)=>{let $=[y1,U,A.table.tableId,A.id];T[A.table.tableId]||($.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,at.encode)($)),ce=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(W){let{table:J,entry:F}=A;if(N(W),W)return J._recordRelocate(F,W)},reject:L})})},sendOperation(A){let U=g++;return A.requestId=U,e.send((0,at.encode)([uO,A])),new Promise((N,L)=>{R.set(U,{resolve:N,reject:L})})}};function C(A){B(5),A<128?o[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,A),c+=5)}function P(A,U=0,N=A.length){let L=N-U;B(L),A.copy(o,c,U,N),c+=L}function O(A){B(8),l.setFloat64(c,A),c+=8}function B(A){if(A+16>o.length-c){let U=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(U,0,i,c),c=c-i,i=0,o=U,l=new DataView(o.buffer,0,o.length)}}function D(A,U){let N=A.database??"data";U||(U={});let L=U.schemaDefined,$=!1,W=A.schemaDefined,J=U.attributes||[];for(let F=0;F<A.attributes?.length;F++){let he=A.attributes[F],ue=J.find(_e=>_e.name===he.name);(!ue||ue.type!==he.type)&&(L?le.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${he.name}: ${he.type}' from '${_}' does not match local attribute ${ue?"'"+ue.name+": "+ue.type+"'":"which does not exist"}`):($=!0,W||(he.indexed=!0),ue?J[J.indexOf(ue)]=he:J.push(he)))}return $?(le.debug?.("(Re)creating",A),ze({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:J,...U})):U}}var C1,at,O1,P1,L1,pO,D1,v1,hO,M1,lO,U1,fde,oO,le,_1,g1,S1,Rh,T1,aO,y1,gT,uO,ST,R1,b1,A1,TT,x1,dO,fO,bh,RT,mO,B1,F1,k1,EO,Ac,yT,I1,mde,w1,cO,nf,N1,sf,_O=se(()=>{Oe();$i();YC();AI();Ss();C1=b(fe());G();fl();at=require("msgpackr"),O1=require("ws"),P1=require("worker_threads"),L1=b(Q());Sh();pO=require("events"),D1=b(ys()),v1=b(require("node:tls"));Xd();hO=b(require("node:process")),M1=require("node:net");is();ss();lO=require("node:stream"),U1=require("lmdb"),{forComponent:fde,errorToString:oO}=L1.default,le=fde("replication").conditional,_1=129,g1=140,S1=141,Rh=142,T1=130,aO=132,y1=133,gT=134,uO=136,ST=137,R1=143,b1=144,A1=145,TT=146,x1=0,dO=1,fO=2,bh=3,RT=4,mO=5,B1=6,F1=0,k1=1,EO=new Map,Ac=new Map,yT=!0,I1=300,mde=2,w1=3e4;a(bT,"createWebSocket");N1=500,sf=class extends pO.EventEmitter{static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=N1;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??Ti(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await bT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${hO.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),le[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=N1,this.nodeSubscriptions&&Kl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=Ah(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"?(le.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"?le.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`):le.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&ef({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();le.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};a(Ah,"replicateOverWS")});function Ic(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
17
+ `)}function q1(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}function TO(e){try{let t=jl(e),n=ho.Certificate.fromBER(t).extensions?.find(c=>c.extnID==="2.5.29.31");if(!n)return aa.debug?.("Certificate has no CRL Distribution Points extension"),[];let s=ca.fromBER(n.extnValue.valueBlock.valueHexView);if(s.offset===-1)throw new Error("Failed to parse ASN.1 structure in CRL Distribution Points extension");let i=new ho.CRLDistributionPoints({schema:s.result}),o=[];for(let c of i.distributionPoints)if(c.distributionPoint&&Array.isArray(c.distributionPoint)){for(let l of c.distributionPoint)if(l.type===6&&typeof l.value=="string"){let u=l.value;(u.startsWith("http://")||u.startsWith("https://"))&&o.push(u)}}return aa.debug?.(`Found ${o.length} CRL distribution points: ${o}`),o}catch(t){return aa.warn?.(`Failed to extract CRL distribution points: ${t}`),[]}}function $1(e){try{let t=jl(e),r=ho.Certificate.fromBER(t),n=[],s=[];for(let i of r.extensions||[])if(i.extnID==="2.5.29.31")try{let o=ca.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1){let c=new ho.CRLDistributionPoints({schema:o.result});for(let l of c.distributionPoints)if(l.distributionPoint&&Array.isArray(l.distributionPoint)){for(let u of l.distributionPoint)if(u.type===6&&typeof u.value=="string"){let d=u.value;(d.startsWith("http://")||d.startsWith("https://"))&&n.push(d)}}}}catch(o){aa.warn?.(`Failed to parse CRL Distribution Points extension: ${o}`)}else if(i.extnID==="1.3.6.1.5.5.7.1.1")try{let o=ca.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1&&o.result instanceof ca.Sequence){for(let c of o.result.valueBlock.value)if(c instanceof ca.Sequence&&c.valueBlock.value.length>=2){let l=c.valueBlock.value[0],u=c.valueBlock.value[1];if(l instanceof ca.ObjectIdentifier&&l.valueBlock.toString()==="1.3.6.1.5.5.7.48.1"&&u.idBlock.tagNumber===6){let d=String.fromCharCode(...Array.from(u.valueBlock.valueHexView));(d.startsWith("http://")||d.startsWith("https://"))&&s.push(d)}}}}catch(o){aa.warn?.(`Failed to parse Authority Information Access extension: ${o}`)}return aa.debug?.(`Found ${n.length} CRL distribution points and ${s.length} OCSP responder URLs`),{crlUrls:n,ocspUrls:s}}catch(t){return aa.warn?.(`Failed to extract revocation URLs: ${t}`),{crlUrls:[],ocspUrls:[]}}}function jl(e){let t=e.replace(/-----BEGIN [^-]+-----/g,"").replace(/-----END [^-]+-----/g,"").replace(/\s/g,""),r=atob(t),n=new ArrayBuffer(r.length),s=new Uint8Array(n);for(let i=0;i<r.length;i++)s[i]=r.charCodeAt(i);return n}function IT(e,t,r,n){let s={certPem:e,issuerPem:t,method:r,...n},i=(0,SO.createHash)("sha256").update(JSON.stringify(s)).digest("hex");return`${r}:${i}`}function yO(e,t){return`${e}:${t}`}function V1(e){try{let t=jl(e),n=ho.Certificate.fromBER(t).serialNumber.valueBlock.valueHexView;return Array.from(n).map(s=>s.toString(16).padStart(2,"0")).join("")}catch(t){throw aa.error?.(`Failed to extract serial number: ${t}`),new Error(`Failed to extract certificate serial number: ${t.message}`)}}function RO(e){try{let t=jl(e),r=ho.Certificate.fromBER(t),n=r.extensions?.find(i=>i.extnID==="2.5.29.35");if(n){let i=new ho.AuthorityKeyIdentifier({schema:n.parsedValue});if(i.keyIdentifier){let o=i.keyIdentifier.valueBlock.valueHexView;return Array.from(o).map(c=>c.toString(16).padStart(2,"0")).join("")}}let s=r.issuer.typesAndValues.map(i=>`${i.type}=${i.value.valueBlock.value}`).join(",");return(0,SO.createHash)("sha256").update(s).digest("hex")}catch(t){throw aa.error?.(`Failed to extract issuer key ID: ${t}`),new Error(`Failed to extract issuer key ID: ${t.message}`)}}function wT(){return gO||(gO=ze({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]})),gO}var SO,ho,ca,G1,aa,gO,NT=se(()=>{SO=require("node:crypto"),ho=b(require("pkijs")),ca=b(require("asn1js")),G1=b(ir());Oe();aa=(0,G1.loggerWithTag)("cert-verification-utils");a(Ic,"bufferToPem");a(q1,"extractCertificateChain");a(TO,"extractCRLDistributionPoints");a($1,"extractRevocationUrls");a(jl,"pemToBuffer");a(IT,"createCacheKey");a(yO,"createRevokedCertificateId");a(V1,"extractSerialNumber");a(RO,"extractIssuerKeyId");gO=null;a(wT,"getCertificateCacheTable")});function K1(e){let{error:t,value:r}=_de.validate(e,{abortEarly:!1,allowUnknown:!1});if(t){let n=t.details.map(s=>s.message).join("; ");throw new Error(`Invalid certificate verification configuration: ${n}`)}return r}var Kr,pde,of,af,bO,hde,Ede,_de,Y1=se(()=>{Kr=b(require("joi")),pde="fail-closed",of={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-closed"},af={timeout:1e4,cacheTtl:864e5,failureMode:"fail-closed",gracePeriod:864e5},bO=Kr.default.string().valid("fail-open","fail-closed"),hde=Kr.default.alternatives().try(Kr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...af}),Kr.default.object({enabled:Kr.default.boolean().default(!0),timeout:Kr.default.number().min(1e3).default(af.timeout).messages({"number.min":"CRL timeout must be at least 1000ms (1 second)"}),cacheTtl:Kr.default.number().min(1e3).default(af.cacheTtl).messages({"number.min":"CRL cacheTtl must be at least 1000ms (1 second)"}),failureMode:bO.default(af.failureMode),gracePeriod:Kr.default.number().min(0).default(af.gracePeriod).messages({"number.min":"CRL gracePeriod must be at least 0ms"})})),Ede=Kr.default.alternatives().try(Kr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...of}),Kr.default.object({enabled:Kr.default.boolean().default(!0),timeout:Kr.default.number().min(1e3).default(of.timeout).messages({"number.min":"OCSP timeout must be at least 1000ms (1 second)"}),cacheTtl:Kr.default.number().min(1e3).default(of.cacheTtl).messages({"number.min":"OCSP cacheTtl must be at least 1000ms (1 second)"}),errorCacheTtl:Kr.default.number().min(1e3).default(of.errorCacheTtl).messages({"number.min":"OCSP errorCacheTtl must be at least 1000ms (1 second)"}),failureMode:bO.default(of.failureMode)})),_de=Kr.default.object({failureMode:bO.default(pde),crl:hde.default({enabled:!0,...af}),ocsp:Ede.default({enabled:!0,...of})});a(K1,"validateAndParseCertificateVerificationConfig")});function tK(e){if(typeof e=="boolean"||e==null){if(e===AO&&IO)return Eo.trace?.("Using cached validation error result (primitive) - returning disabled"),!1;if(e===AO&&CT!==null)return Eo.trace?.("Using cached certificate verification config (primitive)"),CT;Eo.trace?.("Parsing and caching certificate verification config (primitive)"),AO=e;try{return CT=z1(e),IO=null,CT}catch(n){return IO=n,Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}if(j1.get(e))return Eo.trace?.("Using cached validation error result (object) - returning disabled"),!1;let r=W1.get(e);if(r!==void 0)return Eo.trace?.("Using cached certificate verification config (object)"),r;Eo.trace?.("Parsing and caching certificate verification config (object)");try{let n=z1(e);return W1.set(e,n),n}catch(n){return j1.set(e,n),Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}function z1(e){if(Eo.trace?.(`getCertificateVerificationConfig called with: ${JSON.stringify({mtlsConfig:e})}`),!e)return!1;let t=e===!0?void 0:e.certificateVerification;return Eo.trace?.(`Certificate verification config: ${JSON.stringify({verificationConfig:t})}`),t==null||t===!1?!1:K1(t===!0?{}:t)}var J1,Q1,Eo,X1,Z1,eK,W1,AO,CT,j1,IO,wO=se(()=>{J1=b(ir()),Q1=b(yt());Y1();Eo=(0,J1.loggerWithTag)("cert-verification-config"),X1=10080*60*1e3,Z1=3e5,eK=`Harper/${Q1.packageJson.version} CRL-Client`,W1=new WeakMap,AO=null,CT=null,j1=new WeakMap,IO=null;a(tK,"getCachedCertificateVerificationConfig");a(z1,"getCertificateVerificationConfig")});function Ih(e){return e===nK||e===gde}function Sde(e){return e===sK||e===iK}function NO(e){return e===nK?sK:iK}function Tde(){if(rK)return;rK=!0;let e=zl.CryptoEngine.prototype,t=zl.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return Ih(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return Ih(s)?{name:NO(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Sde(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=zl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(Ih(i)){let o=NO(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),o,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(Ih(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),o=s.toSchema().toBER(!1),c=new wh.X509Certificate(Buffer.from(i)),l=new wh.X509Certificate(Buffer.from(o));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,o]=n,c=o.algorithm.algorithmId;if(Ih(c)){let l=NO(c);try{let u=this.crypto?.subtle||this.subtle||zl.getCrypto(!0)?.subtle||wh.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",o.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return"unusedBits"in i.valueBlock&&i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var zl,wh,nK,gde,sK,iK,rK,oK=se(()=>{zl=b(require("pkijs")),wh=require("node:crypto"),nK="1.3.101.112",gde="1.3.101.113",sK="Ed25519",iK="Ed448",rK=!1;a(Ih,"isEd25519OrEd448");a(Sde,"isEdDSAAlgorithmName");a(NO,"getEdDSAAlgorithmName");a(Tde,"applyEd25519Patch");Tde()});var uK={};ye(uK,{CRLSignatureVerificationError:()=>Nh,performCRLCheck:()=>bde,verifyCRL:()=>PO});function yde(){return OT||(OT=wT(),OT.sourcedFrom(cf)),OT}function Rde(){return PT||(PT=ze({table:"hdb_crl_cache",database:"system",attributes:[{name:"distribution_point",isPrimaryKey:!0},{name:"issuer_dn"},{name:"crl_blob"},{name:"this_update"},{name:"next_update"},{name:"signature_valid"},{name:"expiresAt",expiresAt:!0,indexed:!0}]}),PT.sourcedFrom(OO)),PT}function cK(){return CO||(CO=ze({table:"hdb_revoked_certificates",database:"system",attributes:[{name:"composite_id",isPrimaryKey:!0},{name:"serial_number",indexed:!0},{name:"issuer_key_id",indexed:!0},{name:"revocation_date"},{name:"revocation_reason"},{name:"crl_source",indexed:!0},{name:"crl_next_update"},{name:"expiresAt",expiresAt:!0,indexed:!0}]})),CO}async function PO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ic(e,"CERTIFICATE"),i=Ic(t,"CERTIFICATE"),o=n??TO(s);if(o.length===0)return{valid:!0,status:"no-crl-distribution-points",method:"crl"};let c=IT(s,i,"crl"),l=await yde().get(c,{certPem:s,issuerPem:i,distributionPoint:o[0],config:{crl:r??{}}});if(!l)return Pr.error?.("Cache fetch returned null - this indicates a source configuration issue"),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"crl"}:(Pr.warn?.("CRL cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"});let u=l,d=l.wasLoadedFromSource?.();return Pr.trace?.(`CRL ${d?"source fetch":"cache hit"} for certificate`),{valid:u.status==="good",status:u.status,cached:!d,method:u.method||"crl"}}catch(s){return Pr.error?.(`CRL verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"crl"}:(Pr.warn?.("CRL check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"})}}async function bde(e,t,r,n){let s=n??TO(e);if(s.length===0)return{status:"good"};let i=V1(e),o=RO(t),c=yO(o,i);try{let u=await cK().get(c);if(u){let f=Date.now(),m=u;return m.crl_next_update>f?{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}:m.crl_next_update+r.gracePeriod>f?(Pr.warn?.("Using expired CRL data within grace period"),{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}):(Pr.warn?.("CRL data is too old, treating as unknown"),{status:"unknown",reason:"crl-expired"})}let d=await Ade(s,t,r);return d.upToDate?{status:"good",source:d.source}:(Pr.warn?.("CRL data is stale or missing, treating as unknown"),{status:"unknown",reason:d.reason||"crl-unavailable"})}catch(l){return Pr.error?.(`CRL lookup error: ${l}`),{status:"unknown",reason:l.message}}}async function Ade(e,t,r){let n=Date.now();for(let s of e)try{let i=Rde(),o=null,c=null;try{c=await i.get(s),(c&&c.next_update>n||c&&c.next_update+r.gracePeriod>n)&&(o=c)}catch{}o||(o=await lK(s,t,r.timeout));let l=o.next_update;if(l>n){if(!c)try{await i.put(s,o)}catch{}return{upToDate:!0,source:s}}else return l+r.gracePeriod>n?{upToDate:!0,source:s}:{upToDate:!1,reason:"crl-expired"}}catch(i){if(i instanceof Nh)throw i}return{upToDate:!1,reason:"no-current-crl-data"}}async function lK(e,t,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);try{let i=await fetch(e,{signal:n.signal,headers:{"User-Agent":eK}});if(clearTimeout(s),!i.ok)throw new Error(`CRL download failed: ${i.status}`);let o=Buffer.from(await i.arrayBuffer()),c,l=o.toString("utf8");l.includes("-----BEGIN X509 CRL-----")?c=Buffer.from(jl(l)):c=o;let u=LT.CertificateRevocationList.fromBER(c),d=LT.Certificate.fromBER(jl(t)),f=await u.verify({issuerCertificate:d});if(!f){let _=`CRL signature verification failed for: ${e}`;throw Pr.error?.(_),new Nh(_)}let m=u.thisUpdate.value.getTime(),p=u.nextUpdate?.value.getTime()??m+X1,h=d.issuer.typesAndValues.map(_=>`${_.type}=${_.value.valueBlock.value}`).join(","),E={distribution_point:e,issuer_dn:h,crl_blob:o,this_update:m,next_update:p,signature_valid:f,expiresAt:p};return Ide(u,t,e,p).catch(_=>{Pr.error?.(`Error processing revoked certificates: ${_}`)}),E}finally{clearTimeout(s)}}async function Ide(e,t,r,n){let s=cK(),i=RO(t),o=r;try{await wde(s,o)}catch(c){Pr.warn?.(`Failed to clear existing CRL entries: ${c}`)}if(e.revokedCertificates)for(let c of e.revokedCertificates)try{let l=c.userCertificate.valueBlock.valueHexView;if(!l){Pr.warn?.("Could not extract serial number from revoked certificate");continue}let u=Array.from(l).map(h=>h.toString(16).padStart(2,"0")).join(""),d=yO(i,u),f=c.revocationDate.value.getTime(),p={composite_id:d,serial_number:u,issuer_key_id:i,revocation_date:f,revocation_reason:"unspecified",crl_source:o,crl_next_update:n,expiresAt:n};await s.create(p.composite_id,p)}catch(l){Pr.warn?.(`Failed to process revoked certificate: ${l}`)}}async function wde(e,t){try{let r=e.search([{attribute:"crl_source",value:t}]);for await(let n of r)try{await e.delete(n.composite_id)}catch(s){Pr.warn?.(`Failed to delete revoked certificate entry: ${s}`)}}catch(r){throw Pr.error?.(`Failed to search for existing CRL entries: ${r}`),r}}var LT,aK,Nh,Pr,OT,OO,PT,CO,LO=se(()=>{LT=b(require("pkijs")),aK=b(ir());Oe();zi();NT();wO();DO();Nh=class extends Error{static{a(this,"CRLSignatureVerificationError")}constructor(t){super(t),this.name="CRLSignatureVerificationError"}},Pr=(0,aK.loggerWithTag)("crl-verification");a(yde,"getCertificateCacheTable");OO=class extends Xt{static{a(this,"CertificateRevocationListSource")}async get(t){let n=this.getContext()?.requestContext;if(!n?.distributionPoint||!n?.issuerPem)throw new Error(`No CRL data provided for cache key: ${t}`);let{distributionPoint:s,issuerPem:i,config:o}=n;try{let c=await lK(s,i,o.timeout),l=c.next_update,u=Date.now()+o.cacheTtl,d=Math.min(l,u);return{...c,expiresAt:d}}catch(c){if(Pr.error?.(`CRL fetch error for: ${s} - ${c}`),o.failureMode==="fail-closed"){let l=Date.now()+Z1;return{crl_id:t,distribution_point:s,issuer_dn:"unknown",crl_blob:Buffer.alloc(0),this_update:Date.now(),next_update:l,signature_valid:!1,expiresAt:l}}return Pr.warn?.("CRL fetch failed, not caching (fail-open mode)"),null}}};a(Rde,"getCRLCacheTable");a(cK,"getRevokedCertificateTable");a(PO,"verifyCRL");a(bde,"performCRLCheck");a(Ade,"checkCRLFreshness");a(lK,"downloadAndParseCRL");a(Ide,"processRevokedCertificates");a(wde,"clearExistingCRLEntries")});async function Nde(){vO||(vO=(await Promise.resolve().then(()=>(LO(),uK))).performCRLCheck),MO||(MO=(await Promise.resolve().then(()=>(UO(),fK))).performOCSPCheck)}var dK,Y0e,vO,MO,cf,DO=se(()=>{zi();dK=b(ir()),Y0e=(0,dK.loggerWithTag)("cert-verification-source");a(Nde,"loadVerificationFunctions");cf=class extends Xt{static{a(this,"CertificateVerificationSource")}async get(t){let r=t.id,s=this.getContext()?.requestContext;if(!s||!s.certPem||!s.issuerPem)return null;let{certPem:i,issuerPem:o,ocspUrls:c,config:l}=s,u;r.startsWith("crl:")?u="crl":r.startsWith("ocsp:")?u="ocsp":u="unknown",await Nde();let d,f;if(u==="crl"){f=l.crl;let p=s.distributionPoint?[s.distributionPoint]:void 0;d=await vO(i,o,f,p)}else if(u==="ocsp")f=l.ocsp,d=await MO(i,o,f,c);else throw new Error(`Unsupported verification method: ${u} for ID: ${r}`);let m=Date.now()+f.cacheTtl;return{certificate_id:r,status:d.status,reason:d.reason,checked_at:Date.now(),expiresAt:m,method:u}}}});var fK={};ye(fK,{performOCSPCheck:()=>Ode,verifyOCSP:()=>xO});function Cde(){return vT||(vT=wT(),vT.sourcedFrom(cf)),vT}async function xO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ic(e,"CERTIFICATE"),i=Ic(t,"CERTIFICATE"),o=IT(s,i,"ocsp"),c=await Cde().get(o,{certPem:s,issuerPem:i,ocspUrls:n,config:{ocsp:r??{}}});if(!c)return r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(DT.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return DT.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(s){return DT.error?.(`OCSP verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"ocsp"}:(DT.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Ode(e,t,r,n){try{let s=await(0,mK.getCertStatus)(e,{ca:t,timeout:r.timeout,...n?.length&&{ocspUrl:n[0]}});switch(s.status){case"good":return{status:"good"};case"revoked":return{status:"revoked",reason:s.revocationReason?.toString()||"unspecified"};default:return{status:"unknown",reason:"unknown-status"}}}catch(s){return{status:"unknown",reason:s.name==="AbortError"?"timeout":"ocsp-error"}}}var mK,pK,DT,vT,UO=se(()=>{oK();mK=require("easy-ocsp"),pK=b(ir());NT();DO();DT=(0,pK.loggerWithTag)("ocsp-verification");a(Cde,"getCertificateCacheTable");a(xO,"verifyOCSP");a(Ode,"performOCSPCheck")});async function lf(e,t){an.debug?.(`verifyCertificate called for: ${e.subject?.CN||"unknown"}`);let r=tK(t);if(r===!1)return an.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=q1(e);if(an.trace?.(`Certificate chain length: ${n.length}`),n.length<2||!n[0].issuer)return an.debug?.("Certificate chain insufficient for revocation checking - need certificate and issuer"),{valid:!0,status:"no-issuer-cert",method:"disabled"};let s=Ic(n[0].cert,"CERTIFICATE"),{crlUrls:i,ocspUrls:o}=$1(s);if(an.debug?.(`Certificate extensions: CRL distribution points=${i.length}, OCSP URLs=${o.length}`),i.length>0)if(r.crl.enabled)try{an.debug?.("Attempting CRL verification");let c=await PO(n[0].cert,n[0].issuer,r.crl,i);if(c.status==="good"||c.status==="revoked")return an.debug?.(`CRL verification result: ${c.status}`),c;an.debug?.(`CRL verification inconclusive: ${c.status}, trying OCSP fallback`)}catch(c){an.warn?.(`CRL verification failed: ${c}`)}else an.debug?.("Skipping CRL - disabled in configuration");else an.debug?.("Skipping CRL - no distribution points in certificate");if(o.length>0)if(r.ocsp.enabled)try{an.debug?.("Attempting OCSP verification");let c=await xO(n[0].cert,n[0].issuer,r.ocsp,o);return an.debug?.(`OCSP verification result: ${c.status}`),c}catch(c){an.warn?.(`OCSP verification failed: ${c}`)}else an.debug?.("Skipping OCSP - disabled in configuration");else an.debug?.("Skipping OCSP - no responder URLs in certificate");return r.failureMode==="fail-closed"?{valid:!1,status:"no-verification-available",method:"disabled"}:{valid:!0,status:"verification-unavailable-allowed",method:"disabled"}}var hK,an,MT=se(()=>{hK=b(ir());NT();wO();UO();LO();an=(0,hK.loggerWithTag)("cert-verification");a(lf,"verifyCertificate")});var ia={};ye(ia,{buildReplicationMtlsConfig:()=>AK,clearThisNodeName:()=>Fde,disableReplication:()=>vde,enabledDatabases:()=>bc,forEachReplicatedDatabase:()=>gc,getThisNodeId:()=>AT,getThisNodeName:()=>tt,getThisNodeUrl:()=>Sc,hostnameToUrl:()=>kT,lastTimeInAuditStore:()=>ph,monitorNodeCAs:()=>IK,replicateOperation:()=>Hde,replicationCertificateAuthorities:()=>oa,sendOperationToNode:()=>Ch,servers:()=>Lde,setReplicator:()=>NK,start:()=>Dde,startOnMainThread:()=>WC,subscribeToNode:()=>gh,unsubscribeFromNode:()=>fT,urlToNodeName:()=>Ti});function AK(e){return e?.mtls&&typeof e.mtls=="object"?e.mtls:!0}function Dde(e){if(!e.port&&!e.securePort&&(e.port=Ks.default.get(x.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ks.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),!tt())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let i of Eh(e))t.set(Ti(i.url),i);Mde(e);let r=AK(e);e={isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e,mtls:r};let n=Ue.ws(async(i,o,c,l)=>{if(It.debug("Incoming WS connection received "+o.url),o.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return l(i,o,c);i._socket.unref(),Ah(i,e,c.then(()=>o?.user)),i.on("error",u=>{u.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,u.message)})},e);e.runFirst=!0,Ue.http(async(i,o)=>{if(i.isWebSocket&&i.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+i.authorized),!i.authorized&&i._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${i.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,i._nodeRequest.socket.authorizationError);let c=Gt().primaryStore;if(i.authorized&&i.peerCertificate.subjectaltname){let l=(0,RK.getHostnamesFromCertificate)(i.peerCertificate),u;for(let d of l)if(u=d&&(c.get(d)||t.get(d)),u)break;if(u){let d=await lf(i.peerCertificate,e.mtls);if(!d.valid){It.warn("Certificate verification failed:",d.status,"for node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}if(u?.revoked_certificates?.includes(i.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}else i.user=u}else It.warn(`No node found for certificate common name/SANs: ${l}, available nodes are ${Array.from(c.getRange({}).filter(({value:d})=>d).map(({key:d})=>d)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let l=c.get(i.ip)||t.get(i.ip);l?i.user=l:It.warn(`No node found for IP address ${i.ip}, available nodes are ${Array.from(new Set([...c.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return o(i)},e);let s=[];for(let i of n)if(i.secureContexts){let o=a(()=>{let c=new Set(i.secureContexts.values());i.defaultContext&&c.add(i.defaultContext);for(let l of c)try{let u=Array.from(oa);l.options.availableCAs&&u.push(...l.options.availableCAs.values());let d={...l.options,ca:u};l.updatedContext=FT.createSecureContext(d)}catch(u){It.error("Error creating replication TLS config",u)}},"updateContexts");i.secureContextsListeners.push(o),s.push(o),Ks.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1&&o()}IK(()=>{for(let i of s)i()})}function IK(e){let t=0;Qd(r=>{r?.ca&&(oa.add(r.ca),oa.size!==t&&(t=oa.size,e?.()))})}function vde(e=!0){bK=e}function Mde(e){bK||(lt(),bc=e.databases,gc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Ac;for(let[s,i]of xT){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];NK(r,s,e),EO.get(s)?.forEach(i=>i(s))}}))}function NK(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 wK extends Xt{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Ac,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(It.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new ns,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Ue.hostname)continue;let E=xde(h,wK.subscription,e);if(E?.isConnected){let _=Jd(t.auditStore,e,h)[RT];(!d||_<m)&&(d=E,f=h,m=_)}}if(!d)throw l||new TK.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Pde++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",BT,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Ude(e,t,r,n,s,i){let o=t+"-"+e,c=xT.get(o);c||(c=new Map,xT.set(o,c));let l=c.get(n);if(l)return l;if(r)return c.set(n,l=new sf(t,r,n,s,i)),l.connect(),l.once("finished",()=>c.delete(n)),l}function xde(e,t,r){let n=EK.get(e);n||(n=new Map,EK.set(e,n));let s=n.get(r);if(s)return s;let i=Gt().primaryStore.get(e);return i?.url&&(s=new sf(i.url,t,r,e,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Ch(e,t,r){r||(r={}),r.serverName=e.name;let n=await bT(e.url,r),s=Ah(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function gh(e){try{yK.isMainThread&&It.warn("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Ac.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Ac.set(e.database,t)}let r=Ude(e.nodes[0].url,e.url,t,e.database,e.name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>hh(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function fT({url:e,nodes:t,database:r}){It.trace("Unsubscribing from node",e,r,"nodes",Array.from(Gt().primaryStore.getRange({})));let n=e+"-"+(t[0]?.url??e),s=xT.get(n);if(s){let i=s.get(r);i&&(i.unsubscribe(),s.delete(r))}}function Bde(){if(BO!==void 0)return BO;let e=Ks.default.get(x.OPERATIONSAPI_TLS_CERTIFICATE)||Ks.default.get(x.TLS_CERTIFICATE);if(e)return BO=new gK.X509Certificate((0,SK.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function tt(){return BT||(BT=Ks.default.get("replication_hostname")??Ti(Ks.default.get("replication_url"))??Bde()??_K("operationsapi_network_secureport")??_K("operationsapi_network_port")??"127.0.0.1")}function Fde(){BT=void 0}function _K(e){let t=Ks.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function UT(e){let t=Ks.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function AT(e){return mh(e)?.[tt()]}function Sc(){let e=Ks.default.get("replication_url");return e||kT(tt())}function kT(e){let t=UT("replication_port");if(t)return`ws://${e}:${t}`;if(t=UT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=UT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=UT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ti(e){if(e)return new URL(e).hostname}function gc(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return rh(n=>{r(n)}),ql((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):kde(n)&&t(s,n,!1)}a(r,"forDatabase")}function kde(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function ph(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Hde(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>Ch(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ue.nodes[s]?.name,i})}return t}var Ks,It,gK,SK,FT,TK,yK,RK,bK,Pde,Lde,oa,bc,xT,EK,BO,BT,Ss=se(()=>{Oe();zi();ku();_O();Hr();Ks=b(fe()),It=b(Q()),gK=require("crypto");MT();SK=require("fs");Sh();Xd();G();YC();FT=b(require("node:tls")),TK=b(Ee()),yK=require("worker_threads"),RK=b(ys()),Pde=1,Lde=[],oa=Ks.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1?new Set(FT.rootCertificates):new Set;a(AK,"buildReplicationMtlsConfig");a(Dde,"start");a(IK,"monitorNodeCAs");a(vde,"disableReplication");a(Mde,"assignReplicationSource");a(NK,"setReplicator");xT=new Map;a(Ude,"getSubscriptionConnection");EK=new Map;a(xde,"getRetrievalConnectionByName");a(Ch,"sendOperationToNode");a(gh,"subscribeToNode");a(fT,"unsubscribeFromNode");a(Bde,"getCommonNameFromCert");a(tt,"getThisNodeName");a(Fde,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return tt()}});a(_K,"getHostFromListeningPort");a(UT,"getPortFromListeningPort");a(AT,"getThisNodeId");Ue.replication={getThisNodeId:AT,exportIdMapping:mh};a(Sc,"getThisNodeUrl");a(kT,"hostnameToUrl");a(Ti,"urlToNodeName");a(gc,"forEachReplicatedDatabase");a(kde,"hasExplicitlyReplicatedTable");a(ph,"lastTimeInAuditStore");a(Hde,"replicateOperation")});var VT=M((EBe,DK)=>{"use strict";var uf=MV(),{validateBySchema:Oh}=mt(),{commonValidators:df,schemaRegex:FO}=Qi(),gr=require("joi"),Gde=Q(),qde=require("uuid").v4,qT=Jo(),ff=(G(),v(j)),$de=require("util"),wc=fs(),{handleHDBError:la,hdbErrors:Vde,ClientError:Jl}=Ee(),{HDB_ERROR_MSGS:HT,HTTP_STATUS_CODES:ua}=Vde,{SchemaEventMsg:$T}=ls(),CK=Sr(),{getDatabases:Kde}=(Oe(),v(ft)),{transformReq:mf}=ae(),{replicateOperation:OK}=(Ss(),v(ia)),{cleanupOrphans:Yde}=(ss(),v(J_)),GT=gr.string().min(1).max(df.schema_length.maximum).pattern(FO).messages({"string.pattern.base":"{:#label} "+df.schema_format.message}),Wde=gr.string().min(1).max(df.schema_length.maximum).pattern(FO).messages({"string.pattern.base":"{:#label} "+df.schema_format.message}).required(),jde=gr.string().min(1).max(df.schema_length.maximum).pattern(FO).messages({"string.pattern.base":"{:#label} "+df.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();DK.exports={createSchema:zde,createSchemaStructure:PK,createTable:Jde,createTableStructure:LK,createAttribute:tfe,dropSchema:Qde,dropTable:Xde,dropAttribute:Zde,getBackup:rfe,cleanupOrphanBlobs:nfe};async function zde(e){let t=await PK(e);return qT.signalSchemaChange(new $T(process.pid,e.operation,e.schema)),t}a(zde,"createSchema");async function PK(e){let t=Oh(e,gr.object({database:GT,schema:GT}));if(t)throw new Jl(t.message);if(mf(e),!await uf.checkSchemaExists(e.schema))throw la(new Error,HT.SCHEMA_EXISTS_ERR(e.schema),ua.BAD_REQUEST,ff.LOG_LEVELS.ERROR,HT.SCHEMA_EXISTS_ERR(e.schema),!0);return await wc.createSchema(e),`database '${e.schema}' successfully created`}a(PK,"createSchemaStructure");async function Jde(e){return mf(e),e.hash_attribute=e.primary_key??e.hash_attribute,await LK(e)}a(Jde,"createTable");async function LK(e){let t=Oh(e,gr.object({database:GT,schema:GT,table:Wde,residence:gr.array().items(gr.string().min(1)).optional(),hash_attribute:jde}));if(t)throw new Jl(t.message);if(!await uf.checkSchemaTableExists(e.schema,e.table))throw la(new Error,HT.TABLE_EXISTS_ERR(e.schema,e.table),ua.BAD_REQUEST,ff.LOG_LEVELS.ERROR,HT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:qde(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await wc.createTable(n,e);else throw la(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ua.BAD_REQUEST);else await wc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(LK,"createTableStructure");async function Qde(e){let t=Oh(e,gr.object({database:gr.string(),schema:gr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Jl(t.message);mf(e);let r=await uf.checkSchemaExists(e.schema);if(r)throw la(new Error,r,ua.NOT_FOUND,ff.LOG_LEVELS.ERROR,r,!0);let n=await uf.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await wc.dropSchema(e),qT.signalSchemaChange(new $T(process.pid,e.operation,e.schema)),await CK.purgeSchemaTableStreams(e.schema,s);let i=await OK(e);return i.message=`successfully deleted '${e.schema}'`,i}a(Qde,"dropSchema");async function Xde(e){let t=Oh(e,gr.object({database:gr.string(),schema:gr.string(),table:gr.string().required()}));if(t)throw new Jl(t.message);mf(e);let r=await uf.checkSchemaTableExists(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,ff.LOG_LEVELS.ERROR,r,!0);await wc.dropTable(e),await CK.purgeTableStream(e.schema,e.table);let n=await OK(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(Xde,"dropTable");async function Zde(e){let t=Oh(e,gr.object({database:gr.string(),schema:gr.string(),table:gr.string().required(),attribute:gr.string().required()}));if(t)throw new Jl(t.message);mf(e);let r=await uf.checkSchemaTableExists(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,ff.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw la(new Error,"You cannot drop a hash attribute",ua.BAD_REQUEST,void 0,void 0,!0);if(ff.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw la(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ua.BAD_REQUEST,void 0,void 0,!0);try{return await wc.dropAttribute(e),efe(e),qT.signalSchemaChange(new $T(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Gde.error(`Got an error deleting attribute ${$de.inspect(e)}.`),n}}a(Zde,"dropAttribute");function efe(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(efe,"dropAttributeFromGlobal");async function tfe(e){mf(e);let t=Kde()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw la(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ua.BAD_REQUEST,void 0,void 0,!0);return await wc.createAttribute(e),qT.signalSchemaChange(new $T(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(tfe,"createAttribute");function rfe(e){return wc.getBackup(e)}a(rfe,"getBackup");function nfe(e){if(!e.database)throw new Jl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Jl(`Unknown database '${e.database}'`);return Yde(databases[e.database],e.database),{message:"Orphaned blobs cleanup started, check logs for progress"}}a(nfe,"cleanupOrphanBlobs")});var MK=M((gBe,vK)=>{"use strict";var{OPERATIONS_ENUM:sfe}=(G(),v(j)),kO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=sfe.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};vK.exports=kO});var HO=M((yBe,kK)=>{"use strict";var ife=fs(),TBe=MK(),KT=ae(),YT=(G(),v(j)),ofe=fe(),{handleHDBError:UK,hdbErrors:afe}=Ee(),{HDB_ERROR_MSGS:xK,HTTP_STATUS_CODES:BK}=afe,cfe=Object.values(YT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),FK="To use this operation audit log must be enabled in harperdb-config.yaml";kK.exports=lfe;async function lfe(e){if(KT.isEmpty(e.schema))throw new Error(xK.SCHEMA_REQUIRED_ERR);if(KT.isEmpty(e.table))throw new Error(xK.TABLE_REQUIRED_ERR);if(!ofe.get(YT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw UK(new Error,FK,BK.BAD_REQUEST,YT.LOG_LEVELS.ERROR,FK,!0);let t=KT.checkSchemaTableExist(e.schema,e.table);if(t)throw UK(new Error,t,BK.NOT_FOUND,YT.LOG_LEVELS.ERROR,t,!0);if(!KT.isEmpty(e.search_type)&&cfe.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await ife.readAuditLog(e)}a(lfe,"readAuditLog")});var GK=M((bBe,HK)=>{"use strict";var{OPERATIONS_ENUM:ufe}=(G(),v(j)),GO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=ufe.GET_BACKUP,this.schema=t,this.table=r}};HK.exports=GO});var VK=M((NBe,$K)=>{"use strict";var dfe=fs(),IBe=GK(),qO=ae(),ffe=(G(),v(j)),wBe=fe(),{handleHDBError:mfe,hdbErrors:pfe}=Ee(),{HDB_ERROR_MSGS:qK,HTTP_STATUS_CODES:hfe}=pfe;$K.exports=Efe;async function Efe(e){if(qO.isEmpty(e.schema))throw new Error(qK.SCHEMA_REQUIRED_ERR);if(qO.isEmpty(e.table))throw new Error(qK.TABLE_REQUIRED_ERR);let t=qO.checkSchemaTableExist(e.schema,e.table);if(t)throw mfe(new Error,t,hfe.NOT_FOUND,ffe.LOG_LEVELS.ERROR,t,!0);return await dfe.getBackup(readAuditLogObject)}a(Efe,"getBackup")});var WK=M((OBe,YK)=>{"use strict";var _fe=fe(),da=require("joi"),gfe=mt(),KK=require("moment"),Sfe=require("fs-extra"),VO=require("path"),Tfe=require("lodash"),Ph=(G(),v(j)),{LOG_LEVELS:Ql}=(G(),v(j)),yfe="YYYY-MM-DD hh:mm:ss",Rfe=VO.resolve(__dirname,"../logs");YK.exports=function(e){return gfe.validateBySchema(e,bfe)};var bfe=da.object({from:da.custom($O),until:da.custom($O),to:da.custom($O),level:da.valid(Ql.NOTIFY,Ql.FATAL,Ql.ERROR,Ql.WARN,Ql.INFO,Ql.DEBUG,Ql.TRACE),order:da.valid("asc","desc"),limit:da.number().min(1),start:da.number().min(0),log_name:da.custom(Afe)});function $O(e,t){if(KK(e,KK.ISO_8601).format(yfe)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a($O,"validateDatetime");function Afe(e,t){if(Tfe.invert(Ph.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=_fe.get(Ph.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Ph.LOG_NAMES.HDB:e,i=s===Ph.LOG_NAMES.INSTALL?VO.join(Rfe,Ph.LOG_NAMES.INSTALL):VO.join(n,s);return Sfe.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Afe,"validateReadLogPath")});var YO=M((LBe,zK)=>{"use strict";var WT=(G(),v(j)),Ife=Q(),wfe=fe(),Nfe=WK(),KO=require("path"),jK=require("fs-extra"),{once:Cfe}=require("events"),{handleHDBError:Ofe,hdbErrors:Pfe}=Ee(),{PACKAGE_ROOT:Lfe}=yt(),{replicateOperation:Dfe}=(Ss(),v(ia)),vfe=KO.join(Lfe,"logs"),Mfe=1e3,Ufe=200;zK.exports=xfe;async function xfe(e){let t=Nfe(e);if(t)throw Ofe(t,t.message,Pfe.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Dfe(e),n=wfe.get(WT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?WT.LOG_NAMES.HDB:e.log_name,i=s===WT.LOG_NAMES.INSTALL?KO.join(vfe,WT.LOG_NAMES.INSTALL):KO.join(n,s);e.to===void 0&&e.until!==void 0&&(e.to=e.until);let o=e.level!==void 0,c=o?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.to!==void 0,f=d?new Date(e.to):void 0,m=e.limit===void 0?Mfe:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,_=0;p==="desc"&&!u&&!f&&(_=Math.max(jK.statSync(i).size-(E+5)*Ufe,0));let R=jK.createReadStream(i,{start:_});R.on("error",q=>{Ife.error(q)});let S=0,y=[],w="",I;R.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d.]+Z) \[(.+?)]: /g;q=w+q;let z=0,Y;for(;(Y=k.exec(q))&&!R.destroyed;){I&&(I.message=q.slice(z,Y.index),H(I));let[ce,de,te]=Y,Se=te.split("] ["),Ne=Se[0],Ke=Se[1];Se.splice(0,2),I={timestamp:de,thread:Ne,level:Ke,tags:Se,message:""},z=Y.index+ce.length}w=q.slice(z)}),R.on("end",q=>{R.destroyed||I&&(I.message=w.trim(),H(I))}),R.resume();function H(q){let k,z,Y;switch(!0){case(o&&l&&d):k=new Date(q.timestamp),z=new Date(u),Y=new Date(f),q.level===c&&k>=z&&k<=Y&&S<h?S++:q.level===c&&k>=z&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(o&&l):k=new Date(q.timestamp),z=new Date(u),q.level===c&&k>=z&&S<h?S++:q.level===c&&k>=z&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(o&&d):k=new Date(q.timestamp),Y=new Date(f),q.level===c&&k<=Y&&S<h?S++:q.level===c&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(l&&d):k=new Date(q.timestamp),z=new Date(u),Y=new Date(f),k>=z&&k<=Y&&S<h?S++:k>=z&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case o:q.level===c&&S<h?S++:q.level===c&&(_o(q,p,y),S++,S===E&&R.destroy());break;case l:k=new Date(q.timestamp),z=new Date(u),k>=z&&S<h?S++:k>=z&&S>=h&&(_o(q,p,y),S++,S===E&&R.destroy());break;case d:k=new Date(q.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(_o(q,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(_o(q,p,y),S++,S===E&&R.destroy())}}a(H,"onLogMessage"),await Cfe(R,"close");let X=await r;if(X.replicated){for(let q of y)q.node=server.hostname;for(let q of X.replicated){let k=q.node;if(q.status==="failed")_o({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${q.reason}`},p,y);else for(let z of q.results)z.node=k,_o(z,p,y)}}return y}a(xfe,"readLog");function _o(e,t,r){t==="desc"?Bfe(e,r):t==="asc"?Ffe(e,r):r.push(e)}a(_o,"pushLineToResult");function Bfe(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(Bfe,"insertDescending");function Ffe(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(Ffe,"insertAscending")});var jT=M((BBe,ZK)=>{"use strict";var WO=require("joi"),{string:pf,boolean:JK,date:kfe}=WO.types(),Hfe=mt(),{validateSchemaExists:vBe,validateTableExists:MBe,validateSchemaName:UBe}=Qi(),Gfe=(G(),v(j)),qfe=Pt(),QK=fe();QK.initSync();var xBe=pf.invalid(QK.get(Gfe.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(qfe.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),XK={operation:pf.valid("add_node","update_node","set_node_replication"),node_name:pf.optional(),subscriptions:WO.array().items({table:pf.optional(),schema:pf.optional(),database:pf.optional(),subscribe:JK.required(),publish:JK.required().custom(Vfe),start_time:kfe.iso()})};function $fe(e){return Hfe.validateBySchema(e,WO.object(XK))}a($fe,"addUpdateNodeValidator");function Vfe(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(Vfe,"checkForFalsy");ZK.exports={addUpdateNodeValidator:$fe,validationSchema:XK}});var hf=M((kBe,eY)=>{"use strict";var jO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},zO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};eY.exports={Node:jO,NodeSubscription:zO}});var rY=M((GBe,tY)=>{"use strict";var Kfe=(G(),v(j)).OPERATIONS_ENUM,JO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Kfe.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};tY.exports=JO});var Lh=M(($Be,nY)=>{"use strict";var QO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},XO=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};nY.exports={RemotePayloadObject:QO,RemotePayloadSubscription:XO}});var iY=M((KBe,sY)=>{"use strict";var ZO=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};sY.exports=ZO});var aY=M((QBe,oY)=>{"use strict";var Yfe=iY(),WBe=Jt(),jBe=Et(),Wfe=Q(),{getSchemaPath:zBe,getTransactionAuditStorePath:JBe}=Rt(),{getDatabases:jfe}=(Oe(),v(ft));oY.exports=zfe;async function zfe(e){let t=new Yfe;try{let r=jfe()[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){Wfe.warn(`unable to stat table dbi due to ${r}`)}return t}a(zfe,"lmdbGetTableSize")});var lY=M((ZBe,cY)=>{"use strict";var eP=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};cY.exports=eP});var vh=M((iFe,mY)=>{"use strict";var Jfe=require("fs-extra"),Qfe=require("path"),Rn=require("systeminformation"),Nc=Q(),uY=Sr(),tFe=Pt(),Ef=(G(),v(j)),Xfe=aY(),Zfe=Vl(),{getThreadInfo:dY}=st(),Dh=fe();Dh.initSync();var eme=lY(),{openEnvironment:rFe}=Et(),{getSchemaPath:nFe}=Rt(),{database:sFe,databases:tP}=(Oe(),v(ft)),zT;mY.exports={getHDBProcessInfo:iP,getNetworkInfo:aP,getDiskInfo:oP,getMemoryInfo:sP,getCPUInfo:nP,getTimeInfo:rP,getSystemInformation:cP,systemInformation:tme,getTableSize:lP,getMetrics:uP};function rP(){return Rn.time()}a(rP,"getTimeInfo");async function nP(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await Rn.cpu();d.cpu_speed=await Rn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:_,cpus:R,...S}=await Rn.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:w,rawLoadIdle:I,rawLoadIrq:H,rawLoadNice:X,rawLoadSystem:q,rawLoadUser:k,...z}=y;S.cpus.push(z)}),d.current_load=S,d}catch(e){return Nc.error(`error in getCPUInfo: ${e}`),{}}}a(nP,"getCPUInfo");async function sP(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Rn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Nc.error(`error in getMemoryInfo: ${e}`),{}}}a(sP,"getMemoryInfo");async function iP(){let e={core:[],clustering:[]};try{let t=await Rn.processes(),r;try{r=Number.parseInt(await Jfe.readFile(Qfe.join(Dh.get(Ef.CONFIG_PARAMS.ROOTPATH),Ef.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Ef.NODE_ERROR_CODES.ENOENT)Nc.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 Nc.error(`error in getHDBProcessInfo: ${t}`),e}}a(iP,"getHDBProcessInfo");async function oP(){let e={};try{if(!Dh.get(Ef.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Rn.disksIO();e.io=i;let{rxSec:o,txSec:c,wxSec:l,...u}=await Rn.fsStats();return e.read_write=u,e.size=await Rn.fsSize(),e}catch(t){return Nc.error(`error in getDiskInfo: ${t}`),e}}a(oP,"getDiskInfo");async function aP(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Dh.get(Ef.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Rn.networkInterfaceDefault(),e.latency=await Rn.inetChecksite("google.com"),(await Rn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await Rn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return Nc.error(`error in getNetworkInfo: ${t}`),e}}a(aP,"getNetworkInfo");async function cP(){if(zT!==void 0)return zT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Rn.osInfo();e=c;let l=await Rn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,zT=e,zT}catch(t){return Nc.error(`error in getSystemInformation: ${t}`),e}}a(cP,"getSystemInformation");async function lP(){let e=[],t=await Zfe.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Xfe(n));return e}a(lP,"getTableSize");async function uP(){let e={};for(let t in tP){let r=e[t]={},n=r.tables={};for(let s in tP[t])try{let i=tP[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Nc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(uP,"getMetrics");async function fY(){if(Dh.get(Ef.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await uY.getNATSReferences(),t=await uY.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(fY,"getNatsStreamInfo");async function tme(e){let t=new eme;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await cP(),t.time=rP(),t.cpu=await nP(),t.memory=await sP(),t.disk=await oP(),t.network=await aP(),t.harperdb_processes=await iP(),t.table_size=await lP(),t.metrics=await uP(),t.threads=await dY(),t.replication=await fY(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await cP();break;case"time":t.time=rP();break;case"cpu":t.cpu=await nP();break;case"memory":t.memory=await sP();break;case"disk":t.disk=await oP();break;case"network":t.network=await aP();break;case"harperdb_processes":t.harperdb_processes=await iP();break;case"table_size":t.table_size=await lP();break;case"database_metrics":case"metrics":t.metrics=await uP();break;case"threads":t.threads=await dY();break;case"replication":t.replication=await fY();break;default:break}return t}a(tme,"systemInformation")});var fa=M((uFe,_Y)=>{"use strict";var rme=Vn(),dP=ae(),nme=require("util"),Xl=(G(),v(j)),pY=fe();pY.initSync();var sme=CC(),hY=gn(),{Node:aFe,NodeSubscription:cFe}=hf(),ime=dd(),ome=rY(),{RemotePayloadObject:ame,RemotePayloadSubscription:cme}=Lh(),{handleHDBError:lme,hdbErrors:ume}=Ee(),{HTTP_STATUS_CODES:dme,HDB_ERROR_MSGS:fme}=ume,mme=di(),pme=vh(),{packageJson:hme}=yt(),{getDatabases:Eme}=(Oe(),v(ft)),lFe=nme.promisify(sme.authorize),_me=hY.searchByHash,gme=hY.searchByValue;_Y.exports={isEmpty:Sme,getNodeRecord:Tme,upsertNodeRecord:yme,buildNodePayloads:Rme,checkClusteringEnabled:bme,getAllNodeRecords:Ame,getSystemInfo:Ime,reverseSubscription:EY};function Sme(e){return e==null}a(Sme,"isEmpty");async function Tme(e){let t=new ime(Xl.SYSTEM_SCHEMA_NAME,Xl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return _me(t)}a(Tme,"getNodeRecord");async function yme(e){let t=new ome(Xl.SYSTEM_SCHEMA_NAME,Xl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return rme.upsert(t)}a(yme,"upsertNodeRecord");function EY(e){if(dP.isEmpty(e.subscribe)||dP.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(EY,"reverseSubscription");function Rme(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,d=dP.getTableHashAttribute(l,u),{subscribe:f,publish:m}=EY(c),p=Eme()[l]?.[u],h=new cme(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new ame(r,t,s,n)}a(Rme,"buildNodePayloads");function bme(){if(!pY.get(Xl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw lme(new Error,fme.CLUSTERING_NOT_ENABLED,dme.BAD_REQUEST,void 0,void 0,!0)}a(bme,"checkClusteringEnabled");async function Ame(){let e=new mme(Xl.SYSTEM_SCHEMA_NAME,Xl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await gme(e))}a(Ame,"getAllNodeRecords");async function Ime(){let e=await pme.getSystemInformation();return{hdb_version:hme.version,node_version:e.node_version,platform:e.platform}}a(Ime,"getSystemInfo")});var fP=M((fFe,IY)=>{"use strict";var JT=Sr(),gY=ae(),SY=Pt(),TY=(G(),v(j)),QT=Q(),yY=VT(),wme=gp(),{RemotePayloadObject:Nme}=Lh(),{handleHDBError:RY,hdbErrors:Cme}=Ee(),{HTTP_STATUS_CODES:bY}=Cme,{NodeSubscription:AY}=hf();IY.exports=Ome;async function Ome(e,t){let r;try{r=await JT.request(`${t}.${SY.REQUEST_SUFFIX}`,new Nme(TY.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),QT.trace("Response from remote describe all request:",r)}catch(o){QT.error(`addNode received error from describe all request to remote node: ${o}`);let c=JT.requestErrorHandler(o,"add_node",t);throw RY(new Error,c,bY.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===SY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw RY(new Error,o,bY.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===TY.SYSTEM_SCHEMA_NAME){await JT.createLocalTableStream(l,c);let h=new AY(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=gY.doesSchemaExist(l),d=n[l]!==void 0,f=c?gY.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(o);continue}if(!u&&d&&(QT.trace(`addNode creating schema: ${l}`),await yY.createSchema({operation:"create_schema",schema:l})),!f&&m){QT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new wme(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await yY.createTable(h)}await JT.createLocalTableStream(l,c);let p=new AY(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p)}return{added:i,skipped:s}}a(Ome,"reviewSubscriptions")});var _f={};ye(_f,{addNodeBack:()=>mP,removeNodeBack:()=>pP,setNode:()=>vme});async function vme(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=Ti(t)):t=kT(r);let n=(0,NY.validateBySchema)(e,Dme);if(n)throw(0,ma.handleHDBError)(n,n.message,Lme.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new ma.ClientError("url or hostname is required for remove_node operation");let p=r,h=Gt(),E=await h.get(p);if(!E)throw new ma.ClientError(p+" does not exist");try{await Ch({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?tt():p},void 0)}catch(_){Rs.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,_)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new ma.ClientError("url required for this operation");let s=Sc();if(s==null)throw new ma.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,Ys.getReplicationCert)();let p=await(0,Ys.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,Ys.createCsr)(),Rs.info("Sending CSR to target node:",t)):p&&(c=p.certificate,Rs.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,Oc.get)(x.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Oc.get)(x.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Oc.get)(x.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(wY):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=wY(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Ch({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,Rs.warn("Error adding node:",t,"to cluster:",p),d=p}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(Rs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ys.setCertTable)({name:Pme.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ys.setCertTable)({name:tt(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,Oc.get)(x.REPLICATION_SHARD)!==void 0&&(p.shard=(0,Oc.get)(x.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await na(tt(),p)}await na(u?u.nodeName:f.name??Ti(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 mP(e){Rs.trace("addNodeBack received request:",e);let t=await(0,Ys.signCertificate)(e),r;e.csr?(r=t.signingCA,Rs.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,Rs.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Ys.getReplicationCertAuth)();if(n.replicates){let i={url:Sc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Oc.get)(x.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Oc.get)(x.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await na(tt(),i)}return await na(e.hostname,n),t.nodeName=tt(),t.usingCA=s?.certificate,Rs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function pP(e){Rs.trace("removeNodeBack received request:",e),await Gt().delete(e.name)}function wY(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ys,NY,Cc,Oc,Rs,ma,Pme,Lme,Dme,gf=se(()=>{Ys=b(ys()),NY=b(mt()),Cc=b(require("joi")),Oc=b(fe());G();Sh();Xd();Ss();Rs=b(Q()),ma=b(Ee()),{pki:Pme}=require("node-forge"),{HTTP_STATUS_CODES:Lme}=ma.hdbErrors,Dme=Cc.default.object({hostname:Cc.default.string(),verify_tls:Cc.default.boolean(),replicates:Cc.default.boolean(),subscriptions:Cc.default.array(),revoked_certificates:Cc.default.array(),shard:Cc.default.number()});a(vme,"setNode");a(mP,"addNodeBack");a(pP,"removeNodeBack");a(wY,"reverseSubscription")});var ry=M((yFe,OY)=>{"use strict";var{handleHDBError:XT,hdbErrors:Mme}=Ee(),{HTTP_STATUS_CODES:ZT}=Mme,{addUpdateNodeValidator:Ume}=jT(),ey=Q(),ty=(G(),v(j)),CY=Pt(),xme=ae(),Mh=Sr(),Uh=fa(),hP=fe(),Bme=fP(),{Node:Fme,NodeSubscription:kme}=hf(),{broadcast:Hme}=st(),{setNode:Gme}=(gf(),v(_f)),SFe=fe(),TFe=(G(),v(j)),qme="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",$me="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Vme=hP.get(ty.CONFIG_PARAMS.CLUSTERING_NODENAME);OY.exports=Kme;async function Kme(e,t=!1){if(ey.trace("addNode called with:",e),hP.get(ty.CONFIG_PARAMS.REPLICATION_URL)||hP.get(ty.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Gme(e);Uh.checkClusteringEnabled();let r=Ume(e);if(r)throw XT(r,r.message,ZT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Uh.getNodeRecord(n);if(!xme.isEmptyOrZeroLength(f))throw XT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,ZT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Bme(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=qme,o;let c=Uh.buildNodePayloads(s,Vme,ty.OPERATIONS_ENUM.ADD_NODE,await Uh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new kme(p.schema,p.table,p.publish,p.subscribe))}ey.trace("addNode sending remote payload:",c);let u;try{u=await Mh.request(`${n}.${CY.REQUEST_SUFFIX}`,c)}catch(f){ey.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await Mh.updateRemoteConsumer(E,n)}let m=Mh.requestErrorHandler(f,"add_node",n);throw XT(new Error,m,ZT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===CY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw XT(new Error,f,ZT.INTERNAL_SERVER_ERROR,"error",f)}ey.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await Mh.updateRemoteConsumer(p,n),p.subscribe===!0&&await Mh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new Fme(n,l,u.system_info);return await Uh.upsertNodeRecord(d),Hme({type:"nats_update"}),i.length>0?o.message=$me:o.message=`Successfully added '${n}' to manifest`,o}a(Kme,"addNode")});var SP=M((AFe,LY)=>{"use strict";var{handleHDBError:EP,hdbErrors:Yme}=Ee(),{HTTP_STATUS_CODES:_P}=Yme,{addUpdateNodeValidator:Wme}=jT(),xh=Q(),ny=(G(),v(j)),PY=Pt(),bFe=ae(),Bh=Sr(),Fh=fa(),gP=fe(),{cloneDeep:jme}=require("lodash"),zme=fP(),{Node:Jme,NodeSubscription:Qme}=hf(),{broadcast:Xme}=st(),{setNode:Zme}=(gf(),v(_f)),epe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",tpe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",rpe=gP.get(ny.CONFIG_PARAMS.CLUSTERING_NODENAME);LY.exports=npe;async function npe(e){if(xh.trace("updateNode called with:",e),gP.get(ny.CONFIG_PARAMS.REPLICATION_URL)??gP.get(ny.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Zme(e);Fh.checkClusteringEnabled();let t=Wme(e);if(t)throw EP(t,t.message,_P.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Fh.getNodeRecord(r);s.length>0&&(n=jme(s));let{added:i,skipped:o}=await zme(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=epe,c;let l=Fh.buildNodePayloads(i,rpe,ny.OPERATIONS_ENUM.UPDATE_NODE,await Fh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];xh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}xh.trace("updateNode sending remote payload:",l);let u;try{u=await Bh.request(`${r}.${PY.REQUEST_SUFFIX}`,l)}catch(d){xh.error(`updateNode received error from request: ${d}`);let f=Bh.requestErrorHandler(d,"update_node",r);throw EP(new Error,f,_P.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===PY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw EP(new Error,d,_P.INTERNAL_SERVER_ERROR,"error",d)}xh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Bh.updateRemoteConsumer(m,r),m.subscribe===!0?await Bh.updateConsumerIterator(m.schema,m.table,r,"start"):await Bh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Jme(r,[],u.system_info)]),await spe(n[0],i,u.system_info),o.length>0?c.message=tpe:c.message=`Successfully updated '${r}'`,c}a(npe,"updateNode");async function spe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===o.schema&&d.table===o.table){d.publish=o.publish,d.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Qme(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Fh.upsertNodeRecord(n),Xme({type:"nats_update"})}a(spe,"updateNodeTable")});var xY=M((wFe,UY)=>{"use strict";var MY=require("joi"),{string:DY}=MY.types(),ipe=mt(),vY=(G(),v(j)),ope=fe(),ape=Pt();UY.exports=cpe;function cpe(e){let t=DY.invalid(ope.get(vY.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(ape.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=MY.object({operation:DY.valid(vY.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return ipe.validateBySchema(e,r)}a(cpe,"removeNodeValidator")});var sy=M((CFe,GY)=>{"use strict";var{handleHDBError:BY,hdbErrors:lpe}=Ee(),{HTTP_STATUS_CODES:FY}=lpe,upe=xY(),kh=Q(),kY=fa(),dpe=ae(),Sf=(G(),v(j)),HY=Pt(),TP=Sr(),yP=fe(),{RemotePayloadObject:fpe}=Lh(),{NodeSubscription:mpe}=hf(),ppe=_p(),hpe=vl(),{broadcast:Epe}=st(),{setNode:_pe}=(gf(),v(_f)),gpe=yP.get(Sf.CONFIG_PARAMS.CLUSTERING_NODENAME);GY.exports=Spe;async function Spe(e){if(kh.trace("removeNode called with:",e),yP.get(Sf.CONFIG_PARAMS.REPLICATION_URL)??yP.get(Sf.CONFIG_PARAMS.REPLICATION_HOSTNAME))return _pe(e);kY.checkClusteringEnabled();let t=upe(e);if(t)throw BY(t,t.message,FY.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await kY.getNodeRecord(r);if(dpe.isEmptyOrZeroLength(n))throw BY(new Error,`Node '${r}' was not found.`,FY.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new fpe(Sf.OPERATIONS_ENUM.REMOVE_NODE,gpe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await TP.updateConsumerIterator(d.schema,d.table,r,"stop");try{await TP.updateRemoteConsumer(new mpe(d.schema,d.table,!1,!1),r)}catch(f){kh.error(f)}}try{i=await TP.request(`${r}.${HY.REQUEST_SUFFIX}`,s),kh.trace("Remove node reply from remote node:",r,i)}catch(l){kh.error("removeNode received error from request:",l),o=!0}let c=new ppe(Sf.SYSTEM_SCHEMA_NAME,Sf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await hpe.deleteRecord(c),Epe({type:"nats_update"}),i?.status===HY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(kh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(Spe,"removeNode")});var VY=M((PFe,$Y)=>{"use strict";var qY=require("joi"),{string:Tpe,array:ype}=qY.types(),Rpe=mt(),bpe=jT();$Y.exports=Ape;function Ape(e){let t=qY.object({operation:Tpe.valid("configure_cluster").required(),connections:ype.items(bpe.validationSchema).required()});return Rpe.validateBySchema(e,t)}a(Ape,"configureClusterValidator")});var RP=M((DFe,zY)=>{"use strict";var KY=(G(),v(j)),iy=Q(),Ipe=ae(),wpe=fe(),Npe=sy(),Cpe=ry(),Ope=fa(),Ppe=VY(),{handleHDBError:YY,hdbErrors:Lpe}=Ee(),{HTTP_STATUS_CODES:WY}=Lpe,Dpe="Configure cluster complete.",vpe="Failed to configure the cluster. Check the logs for more details.",Mpe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";zY.exports=Upe;async function Upe(e){iy.trace("configure cluster called with:",e);let t=Ppe(e);if(t)throw YY(t,t.message,WY.BAD_REQUEST,void 0,void 0,!0);let r=await Ope.getAllNodeRecords(),n=[];if(wpe.get(KY.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await jY(Npe,{operation:KY.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}iy.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 jY(Cpe,f,f.node_name);s.push(m)}iy.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(iy.error(m.node_name,m?.error?.message,m?.error?.stack),o.includes(m.node_name)||o.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Ipe.isEmptyOrZeroLength(o))return{message:Dpe,connections:c};if(l)return{message:Mpe,failed_nodes:o,connections:c};throw YY(new Error,vpe,WY.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Upe,"configureCluster");async function jY(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(jY,"functionWrapper")});var ZY=M((MFe,XY)=>{"use strict";var Hh=require("joi"),xpe=mt(),{validateSchemaExists:JY,validateTableExists:Bpe,validateSchemaName:QY}=Qi(),Fpe=Hh.object({operation:Hh.string().valid("purge_stream"),schema:Hh.string().custom(JY).custom(QY).optional(),database:Hh.string().custom(JY).custom(QY).optional(),table:Hh.string().custom(Bpe).required()});function kpe(e){return xpe.validateBySchema(e,Fpe)}a(kpe,"purgeStreamValidator");XY.exports=kpe});var bP=M((xFe,eW)=>{"use strict";var{handleHDBError:Hpe,hdbErrors:Gpe}=Ee(),{HTTP_STATUS_CODES:qpe}=Gpe,$pe=ZY(),Vpe=Sr(),Kpe=fa();eW.exports=Ype;async function Ype(e){e.schema=e.schema??e.database;let t=$pe(e);if(t)throw Hpe(t,t.message,qpe.BAD_REQUEST,void 0,void 0,!0);Kpe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Vpe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Ype,"purgeStream")});var wP=M((FFe,cW)=>{"use strict";var IP=fa(),Wpe=Sr(),ay=fe(),Tf=(G(),v(j)),Zl=Pt(),jpe=ae(),AP=Q(),{RemotePayloadObject:zpe}=Lh(),{ErrorCode:tW}=require("nats"),{parentPort:rW}=require("worker_threads"),{onMessageByType:Jpe}=st(),{getThisNodeName:Qpe}=(Ss(),v(ia)),{requestClusterStatus:Xpe}=(Sh(),v(zV)),{getReplicationSharedStatus:Zpe,getHDBNodeTable:ehe}=(Xd(),v(qV)),{CONFIRMATION_STATUS_POSITION:the,RECEIVED_VERSION_POSITION:nW,RECEIVED_TIME_POSITION:rhe,SENDING_TIME_POSITION:nhe,RECEIVING_STATUS_POSITION:she,RECEIVING_STATUS_RECEIVING:ihe,BACK_PRESSURE_RATIO_POSITION:ohe}=(_O(),v(H1)),sW=ay.get(Tf.CONFIG_PARAMS.CLUSTERING_ENABLED),iW=ay.get(Tf.CONFIG_PARAMS.CLUSTERING_NODENAME);cW.exports={clusterStatus:ahe,buildNodeStatus:aW};var oW;Jpe("cluster-status",async e=>{oW(e)});async function ahe(){if(ay.get(Tf.CONFIG_PARAMS.REPLICATION_URL)||ay.get(Tf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;rW?(rW.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{oW=i})):n=Xpe();for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Zpe(u,l,o);c.lastCommitConfirmed=oy(d[the]),c.lastReceivedRemoteTime=oy(d[nW]),c.lastReceivedLocalTime=oy(d[rhe]),c.lastReceivedVersion=d[nW],c.sendingMessage=oy(d[nhe]),c.backPressurePercent=d[ohe]*100,c.lastReceivedStatus=d[she]===ihe?"Receiving":"Waiting"}}n.node_name=Qpe();let s=ehe().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:iW,is_enabled:sW,connections:[]};if(!sW)return e;let t=await IP.getAllNodeRecords();if(jpe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(aW(t[n],e.connections));return await Promise.allSettled(r),e}a(ahe,"clusterStatus");function oy(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(oy,"asDate");async function aW(e,t){let r=e.name,n=new zpe(Tf.OPERATIONS_ENUM.CLUSTER_STATUS,iW,void 0,await IP.getSystemInfo()),s,i,o=Zl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Wpe.request(Zl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Zl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Zl.CLUSTER_STATUS_STATUSES.CLOSED,AP.error(`Error getting node status from ${r} `,s))}catch(l){AP.warn(`Error getting node status from ${r}`,l),l.code===tW.NoResponders?o=Zl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===tW.Timeout?o=Zl.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Zl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new che(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Tf.PRE_4_0_0_VERSION&&await IP.upsertNodeRecord(l)}catch(l){AP.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(aW,"buildNodeStatus");function che(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(che,"NodeStatusObject")});var CP=M((HFe,lW)=>{"use strict";var{handleHDBError:lhe,hdbErrors:uhe}=Ee(),{HTTP_STATUS_CODES:dhe}=uhe,fhe=Sr(),mhe=fa(),NP=ae(),cy=require("joi"),phe=mt(),hhe=2e3,Ehe=cy.object({timeout:cy.number().min(1),connected_nodes:cy.boolean(),routes:cy.boolean()});lW.exports=_he;async function _he(e){mhe.checkClusteringEnabled();let t=phe.validateBySchema(e,Ehe);if(t)throw lhe(t,t.message,dhe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||NP.autoCastBoolean(n),o=s===void 0||NP.autoCastBoolean(s),c={nodes:[]},l=await fhe.getServerList(r??hhe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),o&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:NP.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(_he,"clusterNetwork")});var mW=M((qFe,fW)=>{"use strict";var OP=require("joi"),uW=mt(),{routeConstraints:dW}=mN();fW.exports={setRoutesValidator:ghe,deleteRoutesValidator:She};function ghe(e){let t=OP.object({server:OP.valid("hub","leaf"),routes:dW.required()});return uW.validateBySchema(e,t)}a(ghe,"setRoutesValidator");function She(e){let t=OP.object({routes:dW.required()});return uW.validateBySchema(e,t)}a(She,"deleteRoutesValidator")});var ly=M((VFe,TW)=>{"use strict";var pa=gt(),PP=ae(),Ws=(G(),v(j)),yf=fe(),pW=mW(),{handleHDBError:hW,hdbErrors:The}=Ee(),{HTTP_STATUS_CODES:EW}=The,_W="cluster routes successfully set",gW="cluster routes successfully deleted";TW.exports={setRoutes:Rhe,getRoutes:bhe,deleteRoutes:Ahe};function yhe(e){let t=pa.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=PP.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"?pa.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):pa.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:_W,set:i,skipped:s}}a(yhe,"setRoutesNats");function Rhe(e){let t=pW.setRoutesValidator(e);if(t)throw hW(t,t.message,EW.BAD_REQUEST,void 0,void 0,!0);if(yf.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED))return yhe(e);let r=[],n=[],s=yf.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{SW(s,i)?n.push(i):(s.push(i),r.push(i))}),pa.updateConfigValue(Ws.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:_W,set:r,skipped:n}}a(Rhe,"setRoutes");function SW(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(SW,"existsInArray");function bhe(){if(yf.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=pa.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return yf.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(bhe,"getRoutes");function Ahe(e){let t=pW.deleteRoutesValidator(e);if(t)throw hW(t,t.message,EW.BAD_REQUEST,void 0,void 0,!0);if(yf.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED))return Ihe(e);let r=[],n=[],s=yf.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{SW(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),pa.updateConfigValue(Ws.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:gW,deleted:r,skipped:n}}a(Ahe,"deleteRoutes");function Ihe(e){let t=pa.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,o=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return o&&(r=PP.isEmptyOrZeroLength(r)?null:r,pa.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=PP.isEmptyOrZeroLength(n)?null:n,pa.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:gW,deleted:s,skipped:i}}a(Ihe,"deleteRoutesNats")});var RW=M((YFe,yW)=>{"use strict";var whe=Pt(),LP=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f,m,p,h){this.port=t,o===null&&(o=void 0),this.server_name=r+whe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};yW.exports=LP});var IW=M((jFe,AW)=>{"use strict";var bW=Pt(),DP=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+bW.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+bW.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};AW.exports=DP});var NW=M((JFe,wW)=>{"use strict";var vP=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};wW.exports=vP});var OW=M((XFe,CW)=>{"use strict";var Nhe=Pt(),MP=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Nhe.SERVER_SUFFIX.ADMIN,this.password=r}};CW.exports=MP});var my=M((eke,DW)=>{"use strict";var eu=require("path"),tu=require("fs-extra"),Che=RW(),Ohe=IW(),Phe=NW(),Lhe=OW(),UP=(Es(),v(co)),bf=ae(),jn=gt(),dy=(G(),v(j)),Gh=Pt(),{CONFIG_PARAMS:lr}=dy,Af=Q(),qh=fe(),PW=so(),xP=Sr(),Dhe=ys(),Rf="clustering",vhe=1e4,LW=50;DW.exports={generateNatsConfig:Uhe,removeNatsConfig:xhe,getHubConfigPath:Mhe};function Mhe(){let e=qh.get(lr.ROOTPATH);return eu.join(e,Rf,Gh.NATS_CONFIG_FILES.HUB_SERVER)}a(Mhe,"getHubConfigPath");async function Uhe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=qh.get(lr.ROOTPATH);tu.ensureDirSync(eu.join(r,"clustering","leaf")),qh.initSync();let n=jn.getConfigFromFile(lr.CLUSTERING_TLS_CERT_AUTH),s=jn.getConfigFromFile(lr.CLUSTERING_TLS_PRIVATEKEY),i=jn.getConfigFromFile(lr.CLUSTERING_TLS_CERTIFICATE);!await tu.exists(i)&&!await tu.exists(!n)&&await Dhe.createNatsCerts();let o=eu.join(r,Rf,Gh.PID_FILES.HUB),c=eu.join(r,Rf,Gh.PID_FILES.LEAF),l=jn.getConfigFromFile(lr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=eu.join(r,Rf,Gh.NATS_CONFIG_FILES.HUB_SERVER),d=eu.join(r,Rf,Gh.NATS_CONFIG_FILES.LEAF_SERVER),f=jn.getConfigFromFile(lr.CLUSTERING_TLS_INSECURE),m=jn.getConfigFromFile(lr.CLUSTERING_TLS_VERIFY),p=jn.getConfigFromFile(lr.CLUSTERING_NODENAME),h=jn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await xP.checkNATSServerInstalled()||fy("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await UP.listUsers(),_=jn.getConfigFromFile(lr.CLUSTERING_USER),R=await UP.getClusterUser();(bf.isEmpty(R)||R.active!==!0)&&fy(`Invalid cluster user '${_}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await uy(lr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await uy(lr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await uy(lr.CLUSTERING_HUBSERVER_NETWORK_PORT),await uy(lr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[z,Y]of E.entries())Y.role?.role===dy.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new Lhe(Y.username,PW.decrypt(Y.hash))),y.push(new Phe(Y.username,PW.decrypt(Y.hash))));let w=[],{hub_routes:I}=jn.getClusteringRoutes();if(!bf.isEmptyOrZeroLength(I))for(let z of I)w.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let H=new Che(jn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_NETWORK_PORT),p,o,i,s,n,f,m,h,jn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_CLUSTER_NAME),jn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),w,S,y);n==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=bf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===dy.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await tu.writeJson(u,H),Af.trace(`Hub server config written to ${u}`));let X=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,q=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new Ohe(jn.getConfigFromFile(lr.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[X],[q],S,y,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===dy.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await tu.writeJson(d,k),Af.trace(`Leaf server config written to ${d}`))}a(Uhe,"generateNatsConfig");async function uy(e){let t=qh.get(e);return bf.isEmpty(t)&&fy(`port undefined for '${e}'`),await bf.isPortTaken(t)&&fy(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(uy,"isPortAvailable");function fy(e){let t=`Error generating clustering config: ${e}`;Af.error(t),console.error(t),process.exit(1)}a(fy,"generateNatsConfigError");async function xhe(e){let{port:t,config_file:r}=xP.getServerConfig(e),{username:n,decrypt_hash:s}=await UP.getClusterUser(),i=0,o=2e3;for(;i<LW;){try{let d=await xP.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Af.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=LW)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&Af.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await bf.asyncSetTimeout(u)}let c="0".repeat(vhe),l=eu.join(qh.get(lr.ROOTPATH),Rf,r);await tu.writeFile(l,c),await tu.remove(l),Af.notify(e,"started.")}a(xhe,"removeNatsConfig")});var FW=M((rke,BW)=>{"use strict";var bs=fe(),et=(G(),v(j)),$h=Pt(),ha=require("path"),{PACKAGE_ROOT:hy}=yt(),vW=fe(),py=ae(),If="/dev/null",Bhe=ha.join(hy,"launchServiceScripts"),MW=ha.join(hy,"utility/scripts"),Fhe=ha.join(MW,et.HDB_RESTART_SCRIPT),UW=ha.resolve(hy,"dependencies",`${process.platform}-${process.arch}`,$h.NATS_BINARY_NAME);function xW(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return py.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=py.getEnvCliRootPath()),{name:et.PROCESS_DESCRIPTORS.HDB,script:et.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:hy}}a(xW,"generateMainServerConfig");var khe=9930;function Hhe(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=ha.join(e,"clustering",$h.NATS_CONFIG_FILES.HUB_SERVER),r=ha.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=vW.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$h.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==khe?"-"+n:""),binFile:UW,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=If,i.error_file=If),i}a(Hhe,"generateNatsHubServerConfig");var Ghe=9940;function qhe(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=ha.join(e,"clustering",$h.NATS_CONFIG_FILES.LEAF_SERVER),r=ha.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=vW.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$h.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Ghe?"-"+n:""),binFile:UW,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=If,i.error_file=If),i}a(qhe,"generateNatsLeafServerConfig");function $he(){bs.initSync();let e=ha.join(bs.get(et.CONFIG_PARAMS.LOGGING_ROOT),et.LOG_NAMES.HDB),t={name:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:et.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Bhe,autorestart:!1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=If,t.error_file=If),t}a($he,"generateClusteringUpgradeV4ServiceConfig");function Vhe(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.RESTART_HDB};return py.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=py.getEnvCliRootPath()),{...{name:et.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:MW},script:Fhe}}a(Vhe,"generateRestart");function Khe(){return{apps:[xW()]}}a(Khe,"generateAllServiceConfigs");BW.exports={generateAllServiceConfigs:Khe,generateMainServerConfig:xW,generateRestart:Vhe,generateNatsHubServerConfig:Hhe,generateNatsLeafServerConfig:qhe,generateClusteringUpgradeV4ServiceConfig:$he}});var wf=M((ike,KW)=>{"use strict";var Lr=(G(),v(j)),ske=ae(),_a=my(),Ey=Sr(),Ea=Pt(),Pc=FW(),FP=fe(),Lc=Q(),Yhe=fa(),{startWorker:kW,onMessageFromWorkers:Whe}=st(),HW=require("fs"),jhe=require("node:path"),zhe=(G(),v(j)),{setTimeout:Jhe}=require("node:timers/promises"),{execFile:Qhe,fork:Xhe}=require("node:child_process");KW.exports={start:Dc,restart:eEe,kill:sEe,startAllServices:iEe,startService:qW,restartHdb:tEe,startClusteringProcesses:$W,startClusteringThreads:VW,isHdbRestartRunning:rEe,getHdbPid:nEe,cleanupChildrenProcesses:Vh,reloadClustering:aEe,expectedRestartOfChildren:GW};Whe(e=>{e.type==="restart"&&FP.initSync(!0)});var go=[],Zhe=10,BP;function Dc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?Xhe(e.script,r,e):Qhe(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(o,c)=>{console.error(o,c)}),n.on("exit",async o=>{let c=go.indexOf(n);c>-1&&go.splice(c,1),!BP&&o!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Zhe&&(HW.existsSync(_a.getHubConfigPath())?Dc(e):(await _a.generateNatsConfig(!0),Dc(e),await new Promise(l=>setTimeout(l,3e3)),await _a.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await _a.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(o){let c=FP.get(Lr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(o);){if(u.index&&Ea.LOG_LEVEL_HIERARCHY[c]>=Ea.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===Ea.LOG_LEVELS.ERR||f===Ea.LOG_LEVELS.WRN?Lc.OUTPUTS.STDERR:Lc.OUTPUTS.STDOUT;Lc.logCustomLevel(f||"info",h,s,o.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=Ea.LOG_LEVELS[p]}if(Ea.LOG_LEVEL_HIERARCHY[c]>=Ea.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===Ea.LOG_LEVELS.ERR||f===Ea.LOG_LEVELS.WRN?Lc.OUTPUTS.STDERR:Lc.OUTPUTS.STDOUT;Lc.logCustomLevel(f||"info",m,s,o.toString().slice(d).trim())}}a(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),go.length===0&&(t||(process.on("exit",Vh),process.on("SIGINT",Vh),process.on("SIGQUIT",Vh),process.on("SIGTERM",Vh))),go.push(n)}a(Dc,"start");function Vh(e=!0){if(!BP&&(BP=!0,go.length!==0))if(Lc.info("Killing child processes..."),go.map(t=>t.kill()),e)process.exit(0);else return Jhe(2e3)}a(Vh,"cleanupChildrenProcesses");function eEe(e){GW();for(let t of go)t.name===e&&t.kill()}a(eEe,"restart");function GW(){for(let e of go)e.config&&(e.config.restarts=0)}a(GW,"expectedRestartOfChildren");async function tEe(){await Dc(Pc.generateRestart())}a(tEe,"restartHdb");async function rEe(){let e=await list();for(let t in e)if(e[t].name===Lr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(rEe,"isHdbRestartRunning");function nEe(){let e=FP.getHdbBasePath();if(!e)return;let t=jhe.join(e,zhe.HDB_PID_FILE),r=cEe(t);if(!(!r||r===process.pid)&&lEe(r))return r}a(nEe,"getHdbPid");function sEe(){for(let e of go)e.kill();go=[]}a(sEe,"kill");async function iEe(){await $W(),await VW(),await Dc(Pc.generateAllServiceConfigs())}a(iEe,"startAllServices");async function qW(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Lr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Pc.generateMainServerConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Pc.generateNatsIngestServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Pc.generateNatsReplyServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Pc.generateNatsHubServerConfig(),await Dc(r,t),await _a.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Pc.generateNatsLeafServerConfig(),await Dc(r,t),await _a.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Pc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Dc(r,t)}a(qW,"startService");var oEe;async function $W(e=!1){for(let t in Lr.CLUSTERING_PROCESSES){let r=Lr.CLUSTERING_PROCESSES[t];await qW(r,e)}}a($W,"startClusteringProcesses");async function VW(){oEe=kW(Lr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Ey.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Ey.updateLocalStreams();let e=await Yhe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Lr.PRE_4_0_0_VERSION){Lc.info("Starting clustering upgrade 4.0.0 process"),kW(Lr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(VW,"startClusteringThreads");async function aEe(){await _a.generateNatsConfig(!0),await Ey.reloadNATSHub(),await Ey.reloadNATSLeaf(),await _a.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await _a.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(aEe,"reloadClustering");function cEe(e){try{return Number.parseInt(HW.readFileSync(e,"utf8"),10)}catch{return null}}a(cEe,"readPidFile");function lEe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(lEe,"isProcessRunning")});var GP={};ye(GP,{compactOnStart:()=>uEe,copyDb:()=>QW});async function uEe(){ga.notify("Running compact on start"),console.log("Running compact on start");let e=(0,kP.get)(x.ROOTPATH),t=new Map,r=lt();(0,HP.updateConfigValue)(x.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,_y.join)(e,"backup",n+".mdb"),o=(0,_y.join)(e,el,n+"-copy.mdb"),c=0;try{c=await YW(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){ga.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:o,backupDest:i,recordCount:c}),await QW(n,o),console.log("Backing up",n,"to",i);try{await(0,ru.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,ru.move)(o,s,{overwrite:!0}),await(0,ru.remove)((0,_y.join)(e,el,`${n}-copy.mdb-lock`))}try{Ud()}catch(n){ga.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}try{Ud()}catch(n){ga.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){ga.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,HP.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,ru.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ud(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let o=await YW(n);if(console.log("Database",n,"after compact has a total record count of",o),i!==o){let c=`There is a discrepancy between pre and post compact record count for database ${n}.
18
18
  Total record count before compaction: ${i}, total after: ${o}.
19
- Database backup has not been removed and can be found here: ${s}`;_a.warn(c),console.warn(c)}(0,kP.get)(x.STORAGE_COMPACTONSTARTKEEPBACKUP)!==!0&&(console.log("Removing backup",s),await(0,ru.remove)(s))}}async function YW(e){let t=await(0,JW.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function Nf(){}async function QW(e,t){console.log(`Copying database ${e} to ${t}`);let r=lt()[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=Nf,m.primaryStore.remove=Nf;for(let p in m.indices){let h=m.indices[p];h.put=Nf,h.remove=Nf}m.auditStore&&(m.auditStore.put=Nf,m.auditStore.remove=Nf),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,o=(0,WW.open)(new jW.default(t)),c=o.openDB(gy.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,_;if(h&&(E=p.compression,_=DS(),_?p.compression=_:delete p.compression,E?.dictionary?.toString()===_?.dictionary?.toString()&&(E=null,_=null)),c.put(m,p),!(h||p.indexed))continue;let R=new zW.OpenDBIObject(!h,h);R.encoding="binary",R.compression=E;let S=n.openDB(m,R);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",R.compression=_;let y=o.openDB(m,R);y.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,y,h,d)}if(i){let m=n.openDB(gy.AUDIT_STORE_NAME,Km);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let _=0,R=0,S=0,y=1e7,w=null;for(;y-- >0;)try{for(let I of m.getKeys({start:w,transaction:E}))try{w=I;let{value:H,version:X}=m.getEntry(I,{transaction:E});if(H?.length<14&&h){S++;continue}l=p.put(I,H,h?X:void 0),_++,E.openTimer&&(E.openTimer=0),R+=(I?.length||10)+H.length,u++>5e3&&(await l,console.log("copied",_,"entries",S,"delete records,",R,"bytes"),u=0)}catch(H){console.error("Error copying record",typeof I=="symbol"?"symbol":I,"from",e,"to",t,H)}console.log("finish copying, copied",_,"entries",S,"delete records,",R,"bytes");return}catch{if(typeof w=="string"){if(w==="z")return console.error("Reached end of dbi",w,"for",e,"to",t);w=w.slice(0,-2)+"z"}else if(typeof w=="number")w++;else return console.error("Unknown key type",w,"for",e,"to",t)}}a(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var WW,_y,ru,kP,jW,zW,gy,JW,HP,_a,qP=se(()=>{Oe();WW=require("lmdb"),_y=require("path"),ru=require("fs-extra"),kP=b(fe()),jW=b(ip()),zW=b(sp()),gy=b(Jt());G();$i();JW=b(Vl()),HP=b(gt()),_a=b(Q());a(uEe,"compactOnStart");a(YW,"getTotalDBRecordCount");a(Nf,"noop");a(QW,"copyDb")});var VP=M((dke,XW)=>{"use strict";var Kh=fe();Kh.initSync();var Cf=require("fs-extra"),$P=require("path"),Of=(G(),v(j)),dEe=require("crypto"),fEe=require("uuid").v4;XW.exports=mEe;function mEe(){if(Kh.getHdbBasePath()!==void 0){let e=$P.join(Kh.getHdbBasePath(),Of.LICENSE_KEY_DIR_NAME,Of.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=$P.join(Kh.getHdbBasePath(),Of.LICENSE_KEY_DIR_NAME,Of.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=$P.join(Kh.getHdbBasePath(),Of.LICENSE_KEY_DIR_NAME,Of.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Cf.accessSync(r),Cf.accessSync(e),Cf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=fEe(),i=dEe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Cf.writeFileSync(r,s),Cf.writeFileSync(e,i.privateKey),Cf.writeFileSync(t,i.publicKey)}else throw n}}}a(mEe,"checkJWTTokenExist")});var ej=M((mke,ZW)=>{"use strict";var KP=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};ZW.exports={HdbInfoInsertObject:KP}});var nj=M((hke,rj)=>{"use strict";var tj=(G(),v(j)),YP=class{static{a(this,"UpgradeObject")}constructor(t,r){this[tj.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[tj.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};rj.exports={UpgradeObject:YP}});var Sy=M((_ke,ij)=>{"use strict";var js=require("prompt"),Pf=require("chalk"),sj=Q(),bi=require("os"),WP=tl(),jP=["yes","y"];async function pEe(e){let t=`${bi.EOL}`+Pf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${bi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${bi.EOL}${bi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${bi.EOL}`;js.override=WP(["CONFIRM_UPGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Pf.magenta(`${bi.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await js.get([r])}catch(s){return sj.error("There was an error when prompting user about an upgrade."),sj.error(s),!1}return jP.includes(n.CONFIRM_UPGRADE)}a(pEe,"forceUpdatePrompt");async function hEe(e){let t=`${bi.EOL}`+Pf.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.${bi.EOL}`);js.override=WP(["CONFIRM_DOWNGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Pf.magenta(`${bi.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await js.get([r]);return jP.includes(n.CONFIRM_DOWNGRADE)}a(hEe,"forceDowngradePrompt");async function EEe(){let e=`${bi.EOL}`+Pf.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");js.override=WP(["GENERATE_CERTS"]),js.start(),js.message=e;let t={properties:{GENERATE_CERTS:{description:Pf.magenta(`${bi.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await js.get([t]);return jP.includes(r.GENERATE_CERTS)}a(EEe,"upgradeCertsPrompt");ij.exports={forceUpdatePrompt:pEe,forceDowngradePrompt:hEe,upgradeCertsPrompt:EEe}});var Ty=M((Ske,oj)=>{"use strict";var zP=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};oj.exports=zP});var cj=M((Ike,aj)=>{"use strict";var _Ee=ae(),gEe=gt(),yke=Q(),Rke=require("path"),bke=require("fs"),Ake=(G(),v(j));aj.exports={getOldPropsValue:SEe};function SEe(e,t,r=!1){let n=t.getRaw(e);return _Ee.isNotEmptyAndHasValue(n)?n:r?gEe.getDefaultConfig(e):""}a(SEe,"getOldPropsValue")});var fj=M((Nke,dj)=>{"use strict";var vc=require("path"),Mc=require("fs-extra"),TEe=require("properties-reader"),yEe=Ty(),Tr=Q(),{getOldPropsValue:St}=cj(),{HDB_SETTINGS_NAMES:be,CONFIG_PARAMS:nu}=(G(),v(j)),su=gt(),yy=fe(),lj=ae(),So=(G(),v(j)),JP=new yEe("3.1.0"),uj=[];function REe(){let e=TEe(yy.get(be.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Tr.info(t);let r=` ;Settings for the HarperDB process.
19
+ Database backup has not been removed and can be found here: ${s}`;ga.warn(c),console.warn(c)}(0,kP.get)(x.STORAGE_COMPACTONSTARTKEEPBACKUP)!==!0&&(console.log("Removing backup",s),await(0,ru.remove)(s))}}async function YW(e){let t=await(0,JW.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function Nf(){}async function QW(e,t){console.log(`Copying database ${e} to ${t}`);let r=lt()[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=Nf,m.primaryStore.remove=Nf;for(let p in m.indices){let h=m.indices[p];h.put=Nf,h.remove=Nf}m.auditStore&&(m.auditStore.put=Nf,m.auditStore.remove=Nf),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,o=(0,WW.open)(new jW.default(t)),c=o.openDB(gy.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,_;if(h&&(E=p.compression,_=DS(),_?p.compression=_:delete p.compression,E?.dictionary?.toString()===_?.dictionary?.toString()&&(E=null,_=null)),c.put(m,p),!(h||p.indexed))continue;let R=new zW.OpenDBIObject(!h,h);R.encoding="binary",R.compression=E;let S=n.openDB(m,R);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",R.compression=_;let y=o.openDB(m,R);y.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,y,h,d)}if(i){let m=n.openDB(gy.AUDIT_STORE_NAME,Km);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let _=0,R=0,S=0,y=1e7,w=null;for(;y-- >0;)try{for(let I of m.getKeys({start:w,transaction:E}))try{w=I;let{value:H,version:X}=m.getEntry(I,{transaction:E});if(H?.length<14&&h){S++;continue}l=p.put(I,H,h?X:void 0),_++,E.openTimer&&(E.openTimer=0),R+=(I?.length||10)+H.length,u++>5e3&&(await l,console.log("copied",_,"entries",S,"delete records,",R,"bytes"),u=0)}catch(H){console.error("Error copying record",typeof I=="symbol"?"symbol":I,"from",e,"to",t,H)}console.log("finish copying, copied",_,"entries",S,"delete records,",R,"bytes");return}catch{if(typeof w=="string"){if(w==="z")return console.error("Reached end of dbi",w,"for",e,"to",t);w=w.slice(0,-2)+"z"}else if(typeof w=="number")w++;else return console.error("Unknown key type",w,"for",e,"to",t)}}a(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var WW,_y,ru,kP,jW,zW,gy,JW,HP,ga,qP=se(()=>{Oe();WW=require("lmdb"),_y=require("path"),ru=require("fs-extra"),kP=b(fe()),jW=b(ip()),zW=b(sp()),gy=b(Jt());G();$i();JW=b(Vl()),HP=b(gt()),ga=b(Q());a(uEe,"compactOnStart");a(YW,"getTotalDBRecordCount");a(Nf,"noop");a(QW,"copyDb")});var VP=M((dke,XW)=>{"use strict";var Kh=fe();Kh.initSync();var Cf=require("fs-extra"),$P=require("path"),Of=(G(),v(j)),dEe=require("crypto"),fEe=require("uuid").v4;XW.exports=mEe;function mEe(){if(Kh.getHdbBasePath()!==void 0){let e=$P.join(Kh.getHdbBasePath(),Of.LICENSE_KEY_DIR_NAME,Of.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=$P.join(Kh.getHdbBasePath(),Of.LICENSE_KEY_DIR_NAME,Of.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=$P.join(Kh.getHdbBasePath(),Of.LICENSE_KEY_DIR_NAME,Of.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Cf.accessSync(r),Cf.accessSync(e),Cf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=fEe(),i=dEe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Cf.writeFileSync(r,s),Cf.writeFileSync(e,i.privateKey),Cf.writeFileSync(t,i.publicKey)}else throw n}}}a(mEe,"checkJWTTokenExist")});var ej=M((mke,ZW)=>{"use strict";var KP=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};ZW.exports={HdbInfoInsertObject:KP}});var nj=M((hke,rj)=>{"use strict";var tj=(G(),v(j)),YP=class{static{a(this,"UpgradeObject")}constructor(t,r){this[tj.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[tj.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};rj.exports={UpgradeObject:YP}});var Sy=M((_ke,ij)=>{"use strict";var js=require("prompt"),Pf=require("chalk"),sj=Q(),bi=require("os"),WP=tl(),jP=["yes","y"];async function pEe(e){let t=`${bi.EOL}`+Pf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${bi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${bi.EOL}${bi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${bi.EOL}`;js.override=WP(["CONFIRM_UPGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Pf.magenta(`${bi.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await js.get([r])}catch(s){return sj.error("There was an error when prompting user about an upgrade."),sj.error(s),!1}return jP.includes(n.CONFIRM_UPGRADE)}a(pEe,"forceUpdatePrompt");async function hEe(e){let t=`${bi.EOL}`+Pf.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.${bi.EOL}`);js.override=WP(["CONFIRM_DOWNGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Pf.magenta(`${bi.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await js.get([r]);return jP.includes(n.CONFIRM_DOWNGRADE)}a(hEe,"forceDowngradePrompt");async function EEe(){let e=`${bi.EOL}`+Pf.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");js.override=WP(["GENERATE_CERTS"]),js.start(),js.message=e;let t={properties:{GENERATE_CERTS:{description:Pf.magenta(`${bi.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await js.get([t]);return jP.includes(r.GENERATE_CERTS)}a(EEe,"upgradeCertsPrompt");ij.exports={forceUpdatePrompt:pEe,forceDowngradePrompt:hEe,upgradeCertsPrompt:EEe}});var Ty=M((Ske,oj)=>{"use strict";var zP=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};oj.exports=zP});var cj=M((Ike,aj)=>{"use strict";var _Ee=ae(),gEe=gt(),yke=Q(),Rke=require("path"),bke=require("fs"),Ake=(G(),v(j));aj.exports={getOldPropsValue:SEe};function SEe(e,t,r=!1){let n=t.getRaw(e);return _Ee.isNotEmptyAndHasValue(n)?n:r?gEe.getDefaultConfig(e):""}a(SEe,"getOldPropsValue")});var fj=M((Nke,dj)=>{"use strict";var vc=require("path"),Mc=require("fs-extra"),TEe=require("properties-reader"),yEe=Ty(),Tr=Q(),{getOldPropsValue:St}=cj(),{HDB_SETTINGS_NAMES:be,CONFIG_PARAMS:nu}=(G(),v(j)),su=gt(),yy=fe(),lj=ae(),So=(G(),v(j)),JP=new yEe("3.1.0"),uj=[];function REe(){let e=TEe(yy.get(be.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Tr.info(t);let r=` ;Settings for the HarperDB process.
20
20
 
21
21
  ;The directory selected during install where the database files reside.
22
22
  ${be.HDB_ROOT_KEY} = ${St(be.HDB_ROOT_KEY,e)}
@@ -85,18 +85,18 @@ ${be.CUSTOM_FUNCTIONS_PORT_KEY} = ${su.getDefaultConfig(nu.HTTP_PORT)}
85
85
  ${be.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${vc.join(St(be.HDB_ROOT_KEY,e),"custom_functions")}
86
86
  ;Set the max number of processes HarperDB will start for the Custom Functions server
87
87
  ${be.MAX_CUSTOM_FUNCTION_PROCESSES} = ${su.getDefaultConfig(nu.HTTP_THREADS)}
88
- `,n=yy.get("settings_path"),s=vc.dirname(n),i=vc.join(s,"3_1_0_upgrade_settings.bak");try{Tr.info(`Backing up old settings file to: ${i}`),Mc.copySync(n,i)}catch(c){throw Tr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Tr.info("New settings file values for 3.1.0 upgrade:",r),Tr.info(`Creating new/upgraded settings file at '${n}'`),Mc.writeFileSync(n,r),Tr.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."),Tr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Tr.error(c),Mc.copySync(i,n),c}yy.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Tr.info(o),o}a(REe,"updateSettingsFile310");function bEe(){let e=vc.join(lj.getHomeDir(),So.HDB_HOME_DIR_NAME,So.LICENSE_KEY_DIR_NAME,So.LICENSE_FILE_NAME),t=vc.join(lj.getHomeDir(),So.HDB_HOME_DIR_NAME,So.LICENSE_KEY_DIR_NAME,So.REG_KEY_FILE_NAME),r=vc.join(yy.getHdbBasePath(),So.LICENSE_KEY_DIR_NAME,So.LICENSE_FILE_NAME),n=vc.join(r,So.LICENSE_FILE_NAME),s=vc.join(r,So.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Tr.info(i);let o="Creating .license directory";console.log(o),Tr.info(o),Mc.mkdirpSync(r);try{Mc.accessSync(e);try{let c="Moving licence file";console.log(c),Tr.info(c),Mc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving license file failed";console.error(l),Tr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Tr.warn(l)}try{Mc.accessSync(t);try{let c="Moving registration file";console.log(c),Tr.info(c),Mc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving registration file failed";console.error(l),Tr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Tr.warn(l)}}a(bEe,"moveLicenseFiles");JP.sync_functions.push(REe);JP.sync_functions.push(bEe);uj.push(JP);dj.exports=uj});var _j=M((Oke,Ej)=>{"use strict";var As=Et(),{insertRecords:AEe}=yl(),IEe=Un(),Uc=Jt(),wEe=ae(),ga=Q(),NEe=ae(),To=require("fs-extra"),Sa=require("path"),CEe=require("cli-progress"),Yh=require("assert"),OEe=require("pino"),PEe=fe();Ej.exports=LEe;var Ry,mj,by,QP,bn,Wh=!1;async function LEe(e=!0){return Ry=PEe.getHdbBasePath(),mj=Sa.join(Ry,"schema"),by=Sa.join(Ry,"4_0_0_upgrade_tmp"),QP=Sa.join(Ry,"transactions"),console.info("Reindexing upgrade started for schemas"),ga.notify("Reindexing upgrade started for schemas"),await pj(mj,!1,e),await To.pathExists(QP)&&(console.info(`
88
+ `,n=yy.get("settings_path"),s=vc.dirname(n),i=vc.join(s,"3_1_0_upgrade_settings.bak");try{Tr.info(`Backing up old settings file to: ${i}`),Mc.copySync(n,i)}catch(c){throw Tr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Tr.info("New settings file values for 3.1.0 upgrade:",r),Tr.info(`Creating new/upgraded settings file at '${n}'`),Mc.writeFileSync(n,r),Tr.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."),Tr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Tr.error(c),Mc.copySync(i,n),c}yy.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Tr.info(o),o}a(REe,"updateSettingsFile310");function bEe(){let e=vc.join(lj.getHomeDir(),So.HDB_HOME_DIR_NAME,So.LICENSE_KEY_DIR_NAME,So.LICENSE_FILE_NAME),t=vc.join(lj.getHomeDir(),So.HDB_HOME_DIR_NAME,So.LICENSE_KEY_DIR_NAME,So.REG_KEY_FILE_NAME),r=vc.join(yy.getHdbBasePath(),So.LICENSE_KEY_DIR_NAME,So.LICENSE_FILE_NAME),n=vc.join(r,So.LICENSE_FILE_NAME),s=vc.join(r,So.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Tr.info(i);let o="Creating .license directory";console.log(o),Tr.info(o),Mc.mkdirpSync(r);try{Mc.accessSync(e);try{let c="Moving licence file";console.log(c),Tr.info(c),Mc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving license file failed";console.error(l),Tr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Tr.warn(l)}try{Mc.accessSync(t);try{let c="Moving registration file";console.log(c),Tr.info(c),Mc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving registration file failed";console.error(l),Tr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Tr.warn(l)}}a(bEe,"moveLicenseFiles");JP.sync_functions.push(REe);JP.sync_functions.push(bEe);uj.push(JP);dj.exports=uj});var _j=M((Oke,Ej)=>{"use strict";var As=Et(),{insertRecords:AEe}=yl(),IEe=Un(),Uc=Jt(),wEe=ae(),Sa=Q(),NEe=ae(),To=require("fs-extra"),Ta=require("path"),CEe=require("cli-progress"),Yh=require("assert"),OEe=require("pino"),PEe=fe();Ej.exports=LEe;var Ry,mj,by,QP,bn,Wh=!1;async function LEe(e=!0){return Ry=PEe.getHdbBasePath(),mj=Ta.join(Ry,"schema"),by=Ta.join(Ry,"4_0_0_upgrade_tmp"),QP=Ta.join(Ry,"transactions"),console.info("Reindexing upgrade started for schemas"),Sa.notify("Reindexing upgrade started for schemas"),await pj(mj,!1,e),await To.pathExists(QP)&&(console.info(`
89
89
 
90
- Reindexing upgrade started for transaction logs`),ga.notify("Reindexing upgrade started for transaction logs"),await pj(QP,!0,e)),ga.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Wh?", but errors occurred":"")}a(LEe,"reindexUpgrade");async function pj(e,t,r){let n=await To.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Sa.join(e,o.toString());if(o===".DS_Store")continue;let l=await To.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&To.statSync(Sa.join(c,f)).isDirectory())try{await DEe(o,f,t),bn.info(`Reindexing started for ${o}.${f}`),ga.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${f}`),await MEe(o,f,c,t,r),bn.info(`Reindexing completed for ${o}.${f}`),ga.notify(`Reindexing completed for ${o}.${f}`)}catch(m){Wh=!0,m.schema_path=c,m.table_name=f,ga.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),ga.error(m),bn.error(m),console.error(m)}}}if(!Wh)try{await To.rm(by,{recursive:!0})}catch{}}a(pj,"processTables");async function DEe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Sa.join(by,s);await To.ensureDir(by),await To.writeFile(i,""),bn=OEe({level:"debug",formatters:{bindings(){}}},i)}a(DEe,"initPinoLogger");var vEe=20;async function MEe(e,t,r,n,s){let i;try{i=await As.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){ga.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`),bn.error(S);return}throw S}let o=BEe(i.dbis),c=As.openDBI(i,o),l=Object.keys(i.dbis),u=As.statDBI(i,o);bn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new CEe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let f=await As.createEnvironment(r,t,!1);As.createDBI(f,o,!1,!0);let m=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},m.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),m.length>vEe&&await p();await p()}catch(S){throw Wh=!0,bn.error(S),S}async function p(){let S,y=m.map(({value:I})=>I);n?S=await Promise.all(y.map(I=>UEe(f,I))):S=await AEe(f,o,l.filter(I=>I!=="__blob__"),y,!1);for(let I=0,H=m.length;I<H;I++){let{key:X,value:q}=m[I];bn.info(`Record hash value: ${X} hash: ${o}`);let k;n?k=S[I]:k=S.written_hashes.indexOf(X)>-1,Yh(k,!0),xEe(f,o,q[o],n),bn.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&ga.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),bn.info(`${d.value}/${d.total} records inserted`)}a(p,"finishOutstanding"),d.stop();let h=As.statDBI(i,o),E=As.statDBI(f,o);if(bn.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),Yh.deepStrictEqual(h.entryCount,E.entryCount),await As.closeEnvironment(i),await As.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=Sa.join(r,t),y=Sa.join(S,"data.mdb"),w=Sa.join(S,"lock.mdb");await To.unlink(y),await To.unlink(w),await To.rmdir(S),bn.info(`Deleted old environment files from schema folder: ${y}, ${w}`)}let _=await As.openEnvironment(r,t),R=As.statDBI(_,o);bn.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(R)}`),Yh.deepStrictEqual(R.entryCount,E.entryCount),await As.closeEnvironment(_),delete global.lmdb_map[`${e}.${t}`]}a(MEe,"processTable");async function UEe(e,t){As.initializeDBIs(e,Uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Uc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),NEe.isEmpty(t.user_name)||e.dbis[Uc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Uc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(UEe,"insertTransaction");function xEe(e,t,r,n){let i=e.dbis[t].get(r);Yh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Uc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Uc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!wEe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];hj(e,c,f,r)}else hj(e,c,l,r)}a(xEe,"validateIndices");function hj(e,t,r,n){try{let s=!1,i=IEe.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||bn.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),Yh.deepStrictEqual(s,!0)}catch(s){Wh=!0,bn.error(s),console.error(s)}}a(hj,"validateIndex");function BEe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(BEe,"getHashDBI")});var Rj=M((Dke,yj)=>{"use strict";var Ay=require("path"),xc=require("fs-extra"),FEe=Ty(),iu=Q(),gj=gt(),XP=fe(),Ai=(G(),v(j)),Iy=ae(),kEe=require("properties-reader"),HEe=di(),GEe=VS(),qEe=gn(),Lke=require("util"),$Ee=qEe.searchByValue,VEe=Vn(),KEe=ly(),YEe=Pt(),WEe=_j(),Sj=ys(),jEe=Sy(),Jh=new FEe("4.0.0"),Tj=[],jh,zh;async function zEe(){try{if(await jEe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),jh){let t=Iy.changeExtension(jh,".bak");await xc.move(jh,t)}if(zh){let t=Iy.changeExtension(zh,".bak");await xc.move(zh,t)}await Sj.generateKeys()}else console.log("Using existing certificates."),Sj.updateConfigCert(jh,zh,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(zEe,"generateNewKeys");async function JEe(){console.log("Updating HarperDB nodes."),iu.info("Updating HarperDB nodes.");let e=[];try{let t=new HEe(Ai.SYSTEM_SCHEMA_NAME,Ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await $Ee(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!YEe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${node_record.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],p=m.channel.split(":");u.push({schema:p[0],table:p[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ai.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Iy.isEmptyOrZeroLength(n))return;let s=new GEe(Ai.SYSTEM_SCHEMA_NAME,Ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await VEe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{KEe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(JEe,"updateNodes");async function QEe(){let e=XP.get(Ai.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Ay.join("config","settings.js"))){iu.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),iu.info(t);let r=Ay.dirname(e),n=XP.get(Ai.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Ay.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Ay.join(n,Ai.HDB_CONFIG_FILE);try{iu.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),xc.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{iu.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),iu.info("Updating env variables with new settings values");let f=gj.initOldConfig(e);jh=f[Ai.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],zh=f[Ai.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],gj.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let o=Iy.getPropsFilePath();xc.accessSync(o,xc.constants.F_OK|xc.constants.R_OK);let l=kEe(o).get(Ai.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
91
- install_user = ${l}`;try{xc.writeFileSync(o,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{XP.initSync(!0)}catch(f){throw console.error("Unable to initialize new properties. Please check the log for details."),f}let d="New settings file for 4.0.0 upgrade successfully created.";try{xc.removeSync(r),console.log(d),iu.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}a(QEe,"updateSettingsFile400");Jh.async_functions.push(QEe);Jh.async_functions.push(zEe);Jh.async_functions.push(WEe);Jh.async_functions.push(JEe);Tj.push(Jh);yj.exports=Tj});var wj=M((Mke,Ij)=>{var XEe=Ty(),{databases:ZEe,table:e_e}=(Oe(),v(ft)),t_e=Zi(),ZP=Q(),bj=new XEe("4.7.0"),Aj=[];async function r_e(){let e=ZEe.system?.hdb_license;if(!e){ZP.debug?.("system.hdb_license table not found; no migration necessary");return}return ZP.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),ZP.debug?.("Creating new usage block system.hdb_license table"),e_e(t_e.hdb_license)}a(r_e,"convertToUsageBlockLicenses");bj.async_functions.push(r_e);Aj.push(bj);Ij.exports=Aj});var eL=M((xke,Lj)=>{"use strict";var ou=ae(),n_e=(G(),v(j)),Nj=Q(),{DATA_VERSION:s_e,UPGRADE_VERSION:i_e}=n_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Cj=fj(),wy=Rj(),Oj=wj(),Bc=new Map;Cj&&Cj.forEach(e=>{Bc.set(e.version,e)});wy&&wy.forEach(e=>{Bc.set(e.version,e)});wy&&wy.forEach(e=>{Bc.set(e.version,e)});Oj&&Oj.forEach(e=>{Bc.set(e.version,e)});function o_e(){return[...Bc.keys()].sort(ou.compareVersions)}a(o_e,"getSortedVersions");function Pj(e){let t=e[s_e],r=e[i_e];return ou.isEmptyOrZeroLength(t)||ou.isEmptyOrZeroLength(r)?(Nj.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Nj.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."),[]):[...Bc.keys()].sort(ou.compareVersions).filter(function(n){return ou.compareVersions(n,t)>0&&ou.compareVersions(n,r)<=0})}a(Pj,"getVersionsForUpgrade");function a_e(e){return Pj(e).length>0}a(a_e,"hasUpgradesRequired");function c_e(e){return ou.isEmptyOrZeroLength(e)?null:Bc.has(e)?Bc.get(e):null}a(c_e,"getDirectiveByVersion");Lj.exports={getSortedVersions:o_e,getDirectiveByVersion:c_e,getVersionsForUpgrade:Pj,hasUpgradesRequired:a_e}});var Cy=M((Fke,xj)=>{"use strict";var l_e=require("util"),tL=require("chalk"),u_e=require("os"),vj=Vn(),d_e=gn(),Is=(G(),v(j)),Mj=ej(),nL=Vw(),{UpgradeObject:Dj}=nj(),{forceDowngradePrompt:f_e}=Sy(),{packageJson:m_e}=yt(),Ny=Q(),Lf=ae(),sL=ro(),p_e=(Oe(),v(ft)),h_e=eL(),E_e=l_e.promisify(sL.setSchemaDataToGlobal),__e=d_e.searchByValue,g_e="info_id",S_e="2.9.9",T_e="3.0.0";async function y_e(e){let t=new Mj.HdbInfoInsertObject(1,e,e),r=new nL.InsertObject(Is.OPERATIONS_ENUM.INSERT,Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Is.INFO_TABLE_HASH_ATTRIBUTE,[t]);return sL.setSchemaDataToGlobal(),vj.insert(r)}a(y_e,"insertHdbInstallInfo");async function rL(e){let t,r=await Uj(),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 Mj.HdbInfoInsertObject(i,e,e);let o=new nL.InsertObject(Is.OPERATIONS_ENUM.INSERT,Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Is.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await E_e(),vj.insert(o)}a(rL,"insertHdbUpgradeInfo");async function Uj(){let e=new nL.NoSQLSeachObject(Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,g_e,Is.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await __e(e))}catch(r){console.error(r)}return t}a(Uj,"getAllHdbInfoRecords");async function R_e(){let e=await Uj();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(R_e,"getLatestHdbInfoRecord");async function b_e(){Ny.info("Checking if HDB software has been updated");try{let e=m_e.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await R_e(),r;if(Lf.isEmpty(t))r=S_e;else if(r=t.data_version_num,Lf.compareVersions(r.toString(),e.toString())>0){if(!Lf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(tL.yellow(`This instance's data was last run on version ${r}`)),console.error(tL.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.${u_e.EOL}${Is.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Lf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(tL.yellow(`This instance's data was last run on version ${r}`)),await f_e(new Dj(r,e))?await rL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(sL.setSchemaDataToGlobal(),A_e(r),e.toString()===r.toString())return;let n=new Dj(r,e);if(h_e.hasUpgradesRequired(n))return n;Lf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await rL(n.upgrade_version),Ny.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Ny.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Ny.fatal(e),e}}a(b_e,"getVersionUpdateInfo");function A_e(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Is.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in p_e.databases.system))throw console.log(t),new Error(t);if(!Lf.isEmpty(e)&&e<T_e)throw console.log(t),new Error(t)}a(A_e,"checkIfInstallIsSupported");xj.exports={insertHdbInstallInfo:y_e,insertHdbUpgradeInfo:rL,getVersionUpdateInfo:b_e}});var Hj=M((Hke,kj)=>{"use strict";var Oy=require("joi"),{boolean:I_e,string:iL,number:w_e}=Oy.types(),Bj=require("fs-extra"),Qh=(G(),v(j)),Fj=require("path"),N_e=mt();kj.exports=C_e;function C_e(e){let t=iL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Oy.object({[Qh.INSTALL_PROMPTS.ROOTPATH]:Oy.custom(O_e),[Qh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Oy.alternatives([w_e.min(0),iL]).allow("null",null),[Qh.INSTALL_PROMPTS.TC_AGREEMENT]:iL.valid("yes","YES","Yes"),[Qh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Qh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:I_e});return N_e.validateBySchema(e,r)}a(C_e,"installValidator");function O_e(e,t){if(Bj.existsSync(Fj.join(e,"system/hdb_user/data.mdb"))||Bj.existsSync(Fj.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(O_e,"validateRootAvailable")});var qj=M((qke,Gj)=>{"use strict";var{mkdirpSync:P_e,copySync:L_e}=require("fs-extra"),Fc=require("path"),Xh=(G(),v(j)),{PACKAGE_ROOT:D_e}=yt(),aL=Q(),v_e=fs(),oL=Zi(),M_e=Rt(),{NON_REPLICATING_SYSTEM_TABLES:U_e}=(Oe(),v(ft));Gj.exports=x_e;async function x_e(e){aL.trace("Mounting HarperDB"),au(e),au(Fc.join(e,"backup")),au(Fc.join(e,"keys")),au(Fc.join(e,"keys",Xh.LICENSE_FILE_NAME)),au(Fc.join(e,"log")),au(Fc.join(e,"database")),au(Fc.join(e,"components")),L_e(Fc.resolve(D_e,"./utility/install/README.md"),Fc.join(e,"README.md")),await B_e()}a(x_e,"mountHdb");async function B_e(){let e=gp(),t=Object.keys(oL);for(let r of t){let n=oL[r].hash_attribute;try{M_e.initSystemSchemaPaths(Xh.SYSTEM_SCHEMA_NAME,r);let s=new e(Xh.SYSTEM_SCHEMA_NAME,r,n);s.attributes=oL[r].attributes;let i=s.attributes.find(({attribute:o})=>o===n);i.isPrimaryKey=!0,U_e.includes(r)||(s.audit=!0),await v_e.createTable(r,s)}catch(s){throw aL.error(`issue creating environment for ${Xh.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}a(B_e,"createLMDBTables");function au(e){P_e(e,{mode:Xh.HDB_FILE_PERMISSIONS}),aL.info(`Directory ${e} created`)}a(au,"makeDirectory")});var rz=M((Yke,tz)=>{"use strict";var uL=require("os"),Wj=require("inquirer"),Js=require("fs-extra"),F_e=require("properties-reader"),lu=require("chalk"),Ro=require("path"),k_e=require("human-readable-ids").hri,cL,H_e=require("yaml"),yr=Q(),kc=fe(),Zh=ae(),Ly=tl(),jj=Cy(),{packageJson:zj}=yt(),pe=(G(),v(j)),{CONFIG_PARAM_MAP:Vke,CONFIG_PARAMS:$t}=pe,G_e=Hj(),q_e=qj(),dL=gt(),$_e=(Es(),v(co)),V_e=sh(),K_e=VP(),Y_e=ro(),W_e=require("util").promisify,j_e=W_e(Y_e.setSchemaDataToGlobal),$j=ys(),cu=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),ln=a(e=>lu.magenta.bold(e),"HDB_PROMPT_MSG"),z_e="https://harperdb.io/legal/end-user-license-agreement",Hc=uL.EOL,Ta="",J_e="yes",Vj="Starting HarperDB install...",Kj="HarperDB installation was successful.",Yj="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Q_e="An out of date version of HarperDB is already installed.",lL="It appears that HarperDB is already installed. Exiting install...",X_e="Aborting install",Kke=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])$/),Z_e=new RegExp(/^[^\s.,*>]+$/),ege=uL.homedir(),tge=Ro.join(ege,pe.HDB_ROOT_DIR_NAME),rge="HDB_ADMIN",nge="CLUSTER_USER",sge="dev",ige="localhost",Py={[$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},cn={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},Gc=Ly([pe.INSTALL_PROMPTS.HDB_CONFIG]),yo,Jj=!1,fL=!1,Qj=!1;tz.exports={install:Xj,updateConfigEnv:Ege,setIgnoreExisting:_ge};Xj.createSuperUser=ez;async function Xj(){console.log(ln(Hc+Vj+Hc)),yr.notify(Vj);let e;Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=oge());let t=cge();Object.assign(t,e),t[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[pe.INSTALL_PROMPTS.ROOTPATH]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(Qj=!0,t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=G_e(t);if(r)throw r.message;await lge(),await uge(t);let n=await age(t);yo=n[pe.INSTALL_PROMPTS.ROOTPATH],Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&Ro.dirname(Gc[pe.INSTALL_PROMPTS.HDB_CONFIG])===yo&&(Jj=!0),!fL&&!Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&await Js.pathExists(Ro.join(yo,pe.HDB_CONFIG_FILE))&&(console.error(lL),process.exit()),cL||(cL=(await import("ora")).default);let s=cL({prefixText:ln("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Zh.isEmpty(yo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");kc.setHdbBasePath(yo),await q_e(yo),await dge(),await fge(n),yr.initLogSettings(!0),await ez(n),await pge(n),await $j.updateConfigCert(),await $j.generateCertsKeys(),await hge(),K_e(),s.stop(),console.log(ln(Hc+Kj+Hc)),yr.notify(Kj)}a(Xj,"install");function oge(){let e=H_e.parseDocument(Js.readFileSync(Gc[pe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=dL.flattenConfig(e.toJSON());return t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(oge,"getConfigFromFile");async function age(e){yr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:cu,when:ya(e[pe.INSTALL_PROMPTS.ROOTPATH],cn.DESTINATION),name:pe.INSTALL_PROMPTS.ROOTPATH,prefix:Ta,default:tge,validate:a(async s=>zs(s)?zs(s):await Js.pathExists(Ro.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:ln(cn.DESTINATION)},{type:"input",transformer:cu,when:ya(e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],cn.HDB_USERNAME),name:pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Ta,default:rge,validate:a(s=>zs(s)?zs(s):(t=s,!0),"validate"),message:ln(cn.HDB_USERNAME)},{type:"password",when:ya(e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],cn.HDB_PASS),name:pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Ta,validate:a(s=>zs(s)?zs(s):!0,"validate"),message:ln(cn.HDB_PASS)},{type:"input",transformer:cu,when:ya(e[pe.INSTALL_PROMPTS.DEFAULTS_MODE],cn.DEFAULTS_MODE),name:pe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Ta,default:sge,validate:a(s=>zs(s)?zs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:ln(cn.DEFAULTS_MODE)}];if(Qj||r.push({type:"input",name:pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:cu,when:ya(e[pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],cn.REPLICATION_HOSTNAME),prefix:Ta,default:ige,message:ln(cn.REPLICATION_HOSTNAME)}),Zh.autoCastBoolean(e[pe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:cu,when:ya(e[pe.INSTALL_PROMPTS.CLUSTERING_NODENAME],cn.NODE_NAME),name:pe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Ta,default:k_e.random(),validate:a(i=>Z_e.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:ln(cn.NODE_NAME)},{type:"input",transformer:cu,when:ya(e[pe.INSTALL_PROMPTS.CLUSTERING_USER],cn.CLUSTER_USERNAME),name:pe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Ta,default:nge,validate:a(i=>zs(i)?zs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:ln(cn.CLUSTER_USERNAME)},{type:"password",when:ya(e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],cn.CLUSTER_PASS),name:pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Ta,validate:a(i=>zs(i)?zs(i):!0,"validate"),message:ln(cn.CLUSTER_PASS)}];r.push(...s)}let n=await Wj.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(age,"installPrompts");function ya(e,t){return e!==void 0?(t.includes("password")?(console.log(`${ln(t)} ${lu.gray("[hidden]")}`),yr.trace(`${ln(t)} [hidden]`)):(console.log(`${ln(t)} ${e}`),yr.trace(`${ln(t)} ${e}`)),!1):!0}a(ya,"displayCmdEnvVar");function zs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(zs,"checkForEmptyValue");function cge(){let e=Object.keys(pe.INSTALL_PROMPTS),t=Ly(e),r=Ly(Object.keys(pe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=pe.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(cge,"checkForPromptOverride");async function lge(){yr.trace("Checking for existing install.");let e=Zh.getPropsFilePath(),t=await Js.pathExists(e),r;if(t){yr.trace(`Install found an existing boot prop file at:${e}`);let n=F_e(e),s=dL.getConfigValue(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Js.pathExists(s)}if(!t&&Zh.noBootFile()&&(r=!0),r&&!fL){if(yr.trace(`Install found existing HDB config at:${e}`),await jj.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${zj.version}. Exiting install...`;console.log(Hc+lu.magenta.bold(Q_e)),console.log(lu.magenta.bold(s)),yr.error(s)}else console.log(Hc+lu.magenta.bold(lL)),yr.error(lL);process.exit(0)}}a(lge,"checkForExistingInstall");async function uge(e){yr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${z_e}${Hc}and can be viewed by typing or copying and pasting the URL into your web browser.${Hc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Ta,transformer:cu,when:ya(e[pe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:pe.INSTALL_PROMPTS.TC_AGREEMENT,message:ln(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:lu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await Wj.prompt([r]);n[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[pe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==J_e&&(console.log(lu.yellow(Yj)),yr.error(Yj),process.exit(0))}a(uge,"termsAgreement");async function dge(){let e=Ro.join(yo,pe.HDB_CONFIG_FILE),t;try{t=uL.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
92
- install_user = ${t}`,n=Zh.getHomeDir(),s=Ro.join(n,pe.HDB_HOME_DIR_NAME),i=Ro.join(s,pe.LICENSE_KEY_DIR_NAME);try{Js.mkdirpSync(s,{mode:pe.HDB_FILE_PERMISSIONS}),Js.mkdirpSync(i,{mode:pe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${pe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Ro.join(s,pe.BOOT_PROPS_FILE_NAME);try{await Js.writeFile(o,r)}catch(c){throw yr.error(`There was an error creating the boot file at path: ${o}`),c}kc.setProperty(pe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),kc.setProperty(pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),kc.setProperty(kc.BOOT_PROPS_FILE_PATH,o)}}a(dge,"createBootPropertiesFile");async function fge(e){yr.trace("Creating HarperDB config file");let t=Ly(Object.keys(pe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[pe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in Py){if(r===$t.HTTP_PORT&&t[$t.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??Py[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()]??Py[r],t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===$t.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=Py[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{Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]||dL.createConfigFile(t),kc.initSync()}catch(r){mge(r)}}a(fge,"createConfigFile");function mge(e){yr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(X_e);let t=Ro.resolve(kc.get(kc.BOOT_PROPS_FILE_PATH),"../");t&&Js.removeSync(t),yo&&(Jj?Js.readdirSync(yo,{withFileTypes:!0}).forEach(n=>{let s=Ro.join(n.path,n.name);s!==Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&Js.removeSync(s)}):Js.removeSync(yo)),process.exit(1)}a(mge,"rollbackInstall");async function Zj(e,t){yr.trace("Creating admin user"),await j_e();let r;try{r=await V_e.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await $_e.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(Zj,"createAdminUser");async function ez(e){yr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await Zj(t,r),delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(ez,"createSuperUser");async function pge(e){yr.trace("Creating Cluster user.");let t;e[pe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[pe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await Zj({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[pe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(pge,"createClusterUser");async function hge(){let e=zj.version;if(e)await jj.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(hge,"insertHdbVersionInfo");function Ege(e){Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Ege,"updateConfigEnv");function _ge(e){fL=e}a(_ge,"setIgnoreExisting")});var pL={};ye(pL,{isHdbInstalled:()=>gge});function gge(e,t){try{mL.default.statSync((0,Dy.getPropsFilePath)()),mL.default.statSync(e.get(Sm.SETTINGS_PATH_KEY))}catch(r){if((0,Dy.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var mL,Dy,hL=se(()=>{G();mL=b(require("node:fs")),Dy=b(ae());a(gge,"isHdbInstalled")});var iz=M((zke,sz)=>{"use strict";var EL=ae(),ws=Q(),nz=eL();sz.exports={processDirectives:Sge};async function Sge(e){console.log("Starting upgrade process...");let t=nz.getVersionsForUpgrade(e),r=Rge(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;ws.notify(c),console.log(c);let l=[],u=[];try{l=Tge(o.sync_functions)}catch(d){throw ws.error(`Error while running an upgrade script for ${o.version}`),d}try{u=await yge(o.async_functions)}catch(d){throw ws.error(`Error while running an upgrade script for ${o.version}`),d}n.push(...l,...u)}return n}a(Sge,"processDirectives");function Tge(e){if(EL.isEmptyOrZeroLength(e))return ws.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ws.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ws.info(`Running function ${r.name}`),!(r instanceof Function)){ws.info("Variable being processed is not a function");continue}let n=r();ws.info(n),t.push(n)}return t}a(Tge,"runSyncFunctions");async function yge(e){if(EL.isEmptyOrZeroLength(e))return ws.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ws.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ws.info(`Running function ${s.name}`),!(s instanceof Function)){ws.info("Variable being processed is not a function");continue}let i=await s();ws.info(i),t.push(i)}return t}a(yge,"runAsyncFunctions");function Rge(e){if(EL.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=nz.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Rge,"getUpgradeDirectivesToInstall")});var dz=M((Xke,uz)=>{"use strict";var cz=fe();cz.initSync();var bge=require("chalk"),Ra=Q(),Df=(G(),v(j)),Age=iz(),Qke=ae(),Ige=(hL(),v(pL)),lz=Cy(),wge=Sy(),Nge=ro(),{packageJson:oz}=yt(),Cge=require("util").promisify,Oge=Cge(Nge.setSchemaDataToGlobal),az,{UPGRADE_VERSION:_L}=Df.UPGRADE_JSON_FIELD_NAMES_ENUM;uz.exports={upgrade:Pge};async function Pge(e){await Oge(),az===void 0&&(az=wf()),Ige.isHdbInstalled(cz,Ra)||(vy("Harper is not installed. Harper must be installed before running an upgrade.",Df.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await lz.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),vy(`This version of HarperDB is ${oz.version}`,Df.LOG_LEVELS.INFO);let n=r[_L]??oz.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Df.HDB_SUPPORT_ADDRESS}`),Ra.notify("Missing new version field from upgrade info object"),process.exit(1));let s,i=0;try{s=await wge.forceUpdatePrompt(r)}catch(o){Ra.error("There was an error when prompting user about upgrade."),Ra.error(o),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),Ra.info(`Starting upgrade to version ${n}`),await Lge(r),vy(`HarperDB was successfully upgraded to version ${r[_L]}`,Df.LOG_LEVELS.INFO)}a(Pge,"upgrade");async function Lge(e){try{await Age.processDirectives(e)}catch(t){throw vy("There was an error during the data upgrade. Please check the logs.",Df.LOG_LEVELS.ERROR),t}try{await lz.insertHdbUpgradeInfo(e[_L])}catch(t){Ra.error("Error updating the 'hdb_info' system table."),Ra.error(t)}}a(Lge,"runUpgrade");function vy(e,t=void 0){t||(t=Ra.info),Ra[t](e),console.log(bge.magenta(e))}a(vy,"printToLogAndConsole")});var fz={};ye(fz,{SERVERS:()=>vf,portServer:()=>gL,setPortServerMap:()=>My});function My(e,t){let r=gL.get(e)??[];gL.set(e,[...r,t])}var vf,gL,SL=se(()=>{vf={},gL=new Map;a(My,"setPortServerMap")});function vge(e){if(typeof e!="string")throw new Uy(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new Uy(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new Mf(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=Dge.getKey();if(!(0,By.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new yL("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function Mge(e){if(e?.typ!=="Harper-License")throw new eE(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new eE(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function Uge(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function xge(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!Uge(t[r],e[r]))throw new xy(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function pz(e){let{header:t,payload:r}=vge(e),n;try{n=JSON.parse(t)}catch(i){let o=new eE;throw o.cause=i,o}Mge(n);let s;try{s=JSON.parse(r)}catch(i){let o=new xy;throw o.cause=i,o}return xge(s),s}var By,mz,TL,Uy,Mf,yL,eE,xy,Dge,hz=se(()=>{By=require("node:crypto"),mz=b(fe());G();TL=class{static{a(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
90
+ Reindexing upgrade started for transaction logs`),Sa.notify("Reindexing upgrade started for transaction logs"),await pj(QP,!0,e)),Sa.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Wh?", but errors occurred":"")}a(LEe,"reindexUpgrade");async function pj(e,t,r){let n=await To.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Ta.join(e,o.toString());if(o===".DS_Store")continue;let l=await To.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&To.statSync(Ta.join(c,f)).isDirectory())try{await DEe(o,f,t),bn.info(`Reindexing started for ${o}.${f}`),Sa.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${f}`),await MEe(o,f,c,t,r),bn.info(`Reindexing completed for ${o}.${f}`),Sa.notify(`Reindexing completed for ${o}.${f}`)}catch(m){Wh=!0,m.schema_path=c,m.table_name=f,Sa.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Sa.error(m),bn.error(m),console.error(m)}}}if(!Wh)try{await To.rm(by,{recursive:!0})}catch{}}a(pj,"processTables");async function DEe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Ta.join(by,s);await To.ensureDir(by),await To.writeFile(i,""),bn=OEe({level:"debug",formatters:{bindings(){}}},i)}a(DEe,"initPinoLogger");var vEe=20;async function MEe(e,t,r,n,s){let i;try{i=await As.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){Sa.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`),bn.error(S);return}throw S}let o=BEe(i.dbis),c=As.openDBI(i,o),l=Object.keys(i.dbis),u=As.statDBI(i,o);bn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new CEe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let f=await As.createEnvironment(r,t,!1);As.createDBI(f,o,!1,!0);let m=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},m.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),m.length>vEe&&await p();await p()}catch(S){throw Wh=!0,bn.error(S),S}async function p(){let S,y=m.map(({value:I})=>I);n?S=await Promise.all(y.map(I=>UEe(f,I))):S=await AEe(f,o,l.filter(I=>I!=="__blob__"),y,!1);for(let I=0,H=m.length;I<H;I++){let{key:X,value:q}=m[I];bn.info(`Record hash value: ${X} hash: ${o}`);let k;n?k=S[I]:k=S.written_hashes.indexOf(X)>-1,Yh(k,!0),xEe(f,o,q[o],n),bn.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&Sa.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),bn.info(`${d.value}/${d.total} records inserted`)}a(p,"finishOutstanding"),d.stop();let h=As.statDBI(i,o),E=As.statDBI(f,o);if(bn.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),Yh.deepStrictEqual(h.entryCount,E.entryCount),await As.closeEnvironment(i),await As.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=Ta.join(r,t),y=Ta.join(S,"data.mdb"),w=Ta.join(S,"lock.mdb");await To.unlink(y),await To.unlink(w),await To.rmdir(S),bn.info(`Deleted old environment files from schema folder: ${y}, ${w}`)}let _=await As.openEnvironment(r,t),R=As.statDBI(_,o);bn.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(R)}`),Yh.deepStrictEqual(R.entryCount,E.entryCount),await As.closeEnvironment(_),delete global.lmdb_map[`${e}.${t}`]}a(MEe,"processTable");async function UEe(e,t){As.initializeDBIs(e,Uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Uc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),NEe.isEmpty(t.user_name)||e.dbis[Uc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Uc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(UEe,"insertTransaction");function xEe(e,t,r,n){let i=e.dbis[t].get(r);Yh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Uc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Uc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!wEe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];hj(e,c,f,r)}else hj(e,c,l,r)}a(xEe,"validateIndices");function hj(e,t,r,n){try{let s=!1,i=IEe.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||bn.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),Yh.deepStrictEqual(s,!0)}catch(s){Wh=!0,bn.error(s),console.error(s)}}a(hj,"validateIndex");function BEe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(BEe,"getHashDBI")});var Rj=M((Dke,yj)=>{"use strict";var Ay=require("path"),xc=require("fs-extra"),FEe=Ty(),iu=Q(),gj=gt(),XP=fe(),Ai=(G(),v(j)),Iy=ae(),kEe=require("properties-reader"),HEe=di(),GEe=VS(),qEe=gn(),Lke=require("util"),$Ee=qEe.searchByValue,VEe=Vn(),KEe=ly(),YEe=Pt(),WEe=_j(),Sj=ys(),jEe=Sy(),Jh=new FEe("4.0.0"),Tj=[],jh,zh;async function zEe(){try{if(await jEe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),jh){let t=Iy.changeExtension(jh,".bak");await xc.move(jh,t)}if(zh){let t=Iy.changeExtension(zh,".bak");await xc.move(zh,t)}await Sj.generateKeys()}else console.log("Using existing certificates."),Sj.updateConfigCert(jh,zh,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(zEe,"generateNewKeys");async function JEe(){console.log("Updating HarperDB nodes."),iu.info("Updating HarperDB nodes.");let e=[];try{let t=new HEe(Ai.SYSTEM_SCHEMA_NAME,Ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await $Ee(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!YEe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${node_record.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],p=m.channel.split(":");u.push({schema:p[0],table:p[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ai.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Iy.isEmptyOrZeroLength(n))return;let s=new GEe(Ai.SYSTEM_SCHEMA_NAME,Ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await VEe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{KEe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(JEe,"updateNodes");async function QEe(){let e=XP.get(Ai.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Ay.join("config","settings.js"))){iu.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),iu.info(t);let r=Ay.dirname(e),n=XP.get(Ai.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Ay.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Ay.join(n,Ai.HDB_CONFIG_FILE);try{iu.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),xc.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{iu.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),iu.info("Updating env variables with new settings values");let f=gj.initOldConfig(e);jh=f[Ai.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],zh=f[Ai.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],gj.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let o=Iy.getPropsFilePath();xc.accessSync(o,xc.constants.F_OK|xc.constants.R_OK);let l=kEe(o).get(Ai.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
91
+ install_user = ${l}`;try{xc.writeFileSync(o,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{XP.initSync(!0)}catch(f){throw console.error("Unable to initialize new properties. Please check the log for details."),f}let d="New settings file for 4.0.0 upgrade successfully created.";try{xc.removeSync(r),console.log(d),iu.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}a(QEe,"updateSettingsFile400");Jh.async_functions.push(QEe);Jh.async_functions.push(zEe);Jh.async_functions.push(WEe);Jh.async_functions.push(JEe);Tj.push(Jh);yj.exports=Tj});var wj=M((Mke,Ij)=>{var XEe=Ty(),{databases:ZEe,table:e_e}=(Oe(),v(ft)),t_e=Zi(),ZP=Q(),bj=new XEe("4.7.0"),Aj=[];async function r_e(){let e=ZEe.system?.hdb_license;if(!e){ZP.debug?.("system.hdb_license table not found; no migration necessary");return}return ZP.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),ZP.debug?.("Creating new usage block system.hdb_license table"),e_e(t_e.hdb_license)}a(r_e,"convertToUsageBlockLicenses");bj.async_functions.push(r_e);Aj.push(bj);Ij.exports=Aj});var eL=M((xke,Lj)=>{"use strict";var ou=ae(),n_e=(G(),v(j)),Nj=Q(),{DATA_VERSION:s_e,UPGRADE_VERSION:i_e}=n_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Cj=fj(),wy=Rj(),Oj=wj(),Bc=new Map;Cj&&Cj.forEach(e=>{Bc.set(e.version,e)});wy&&wy.forEach(e=>{Bc.set(e.version,e)});wy&&wy.forEach(e=>{Bc.set(e.version,e)});Oj&&Oj.forEach(e=>{Bc.set(e.version,e)});function o_e(){return[...Bc.keys()].sort(ou.compareVersions)}a(o_e,"getSortedVersions");function Pj(e){let t=e[s_e],r=e[i_e];return ou.isEmptyOrZeroLength(t)||ou.isEmptyOrZeroLength(r)?(Nj.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Nj.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."),[]):[...Bc.keys()].sort(ou.compareVersions).filter(function(n){return ou.compareVersions(n,t)>0&&ou.compareVersions(n,r)<=0})}a(Pj,"getVersionsForUpgrade");function a_e(e){return Pj(e).length>0}a(a_e,"hasUpgradesRequired");function c_e(e){return ou.isEmptyOrZeroLength(e)?null:Bc.has(e)?Bc.get(e):null}a(c_e,"getDirectiveByVersion");Lj.exports={getSortedVersions:o_e,getDirectiveByVersion:c_e,getVersionsForUpgrade:Pj,hasUpgradesRequired:a_e}});var Cy=M((Fke,xj)=>{"use strict";var l_e=require("util"),tL=require("chalk"),u_e=require("os"),vj=Vn(),d_e=gn(),Is=(G(),v(j)),Mj=ej(),nL=Vw(),{UpgradeObject:Dj}=nj(),{forceDowngradePrompt:f_e}=Sy(),{packageJson:m_e}=yt(),Ny=Q(),Lf=ae(),sL=ro(),p_e=(Oe(),v(ft)),h_e=eL(),E_e=l_e.promisify(sL.setSchemaDataToGlobal),__e=d_e.searchByValue,g_e="info_id",S_e="2.9.9",T_e="3.0.0";async function y_e(e){let t=new Mj.HdbInfoInsertObject(1,e,e),r=new nL.InsertObject(Is.OPERATIONS_ENUM.INSERT,Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Is.INFO_TABLE_HASH_ATTRIBUTE,[t]);return sL.setSchemaDataToGlobal(),vj.insert(r)}a(y_e,"insertHdbInstallInfo");async function rL(e){let t,r=await Uj(),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 Mj.HdbInfoInsertObject(i,e,e);let o=new nL.InsertObject(Is.OPERATIONS_ENUM.INSERT,Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Is.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await E_e(),vj.insert(o)}a(rL,"insertHdbUpgradeInfo");async function Uj(){let e=new nL.NoSQLSeachObject(Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,g_e,Is.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await __e(e))}catch(r){console.error(r)}return t}a(Uj,"getAllHdbInfoRecords");async function R_e(){let e=await Uj();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(R_e,"getLatestHdbInfoRecord");async function b_e(){Ny.info("Checking if HDB software has been updated");try{let e=m_e.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await R_e(),r;if(Lf.isEmpty(t))r=S_e;else if(r=t.data_version_num,Lf.compareVersions(r.toString(),e.toString())>0){if(!Lf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(tL.yellow(`This instance's data was last run on version ${r}`)),console.error(tL.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.${u_e.EOL}${Is.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Lf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(tL.yellow(`This instance's data was last run on version ${r}`)),await f_e(new Dj(r,e))?await rL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(sL.setSchemaDataToGlobal(),A_e(r),e.toString()===r.toString())return;let n=new Dj(r,e);if(h_e.hasUpgradesRequired(n))return n;Lf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await rL(n.upgrade_version),Ny.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Ny.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Ny.fatal(e),e}}a(b_e,"getVersionUpdateInfo");function A_e(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Is.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in p_e.databases.system))throw console.log(t),new Error(t);if(!Lf.isEmpty(e)&&e<T_e)throw console.log(t),new Error(t)}a(A_e,"checkIfInstallIsSupported");xj.exports={insertHdbInstallInfo:y_e,insertHdbUpgradeInfo:rL,getVersionUpdateInfo:b_e}});var Hj=M((Hke,kj)=>{"use strict";var Oy=require("joi"),{boolean:I_e,string:iL,number:w_e}=Oy.types(),Bj=require("fs-extra"),Qh=(G(),v(j)),Fj=require("path"),N_e=mt();kj.exports=C_e;function C_e(e){let t=iL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Oy.object({[Qh.INSTALL_PROMPTS.ROOTPATH]:Oy.custom(O_e),[Qh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Oy.alternatives([w_e.min(0),iL]).allow("null",null),[Qh.INSTALL_PROMPTS.TC_AGREEMENT]:iL.valid("yes","YES","Yes"),[Qh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Qh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:I_e});return N_e.validateBySchema(e,r)}a(C_e,"installValidator");function O_e(e,t){if(Bj.existsSync(Fj.join(e,"system/hdb_user/data.mdb"))||Bj.existsSync(Fj.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(O_e,"validateRootAvailable")});var qj=M((qke,Gj)=>{"use strict";var{mkdirpSync:P_e,copySync:L_e}=require("fs-extra"),Fc=require("path"),Xh=(G(),v(j)),{PACKAGE_ROOT:D_e}=yt(),aL=Q(),v_e=fs(),oL=Zi(),M_e=Rt(),{NON_REPLICATING_SYSTEM_TABLES:U_e}=(Oe(),v(ft));Gj.exports=x_e;async function x_e(e){aL.trace("Mounting HarperDB"),au(e),au(Fc.join(e,"backup")),au(Fc.join(e,"keys")),au(Fc.join(e,"keys",Xh.LICENSE_FILE_NAME)),au(Fc.join(e,"log")),au(Fc.join(e,"database")),au(Fc.join(e,"components")),L_e(Fc.resolve(D_e,"./utility/install/README.md"),Fc.join(e,"README.md")),await B_e()}a(x_e,"mountHdb");async function B_e(){let e=gp(),t=Object.keys(oL);for(let r of t){let n=oL[r].hash_attribute;try{M_e.initSystemSchemaPaths(Xh.SYSTEM_SCHEMA_NAME,r);let s=new e(Xh.SYSTEM_SCHEMA_NAME,r,n);s.attributes=oL[r].attributes;let i=s.attributes.find(({attribute:o})=>o===n);i.isPrimaryKey=!0,U_e.includes(r)||(s.audit=!0),await v_e.createTable(r,s)}catch(s){throw aL.error(`issue creating environment for ${Xh.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}a(B_e,"createLMDBTables");function au(e){P_e(e,{mode:Xh.HDB_FILE_PERMISSIONS}),aL.info(`Directory ${e} created`)}a(au,"makeDirectory")});var rz=M((Yke,tz)=>{"use strict";var uL=require("os"),Wj=require("inquirer"),Js=require("fs-extra"),F_e=require("properties-reader"),lu=require("chalk"),Ro=require("path"),k_e=require("human-readable-ids").hri,cL,H_e=require("yaml"),yr=Q(),kc=fe(),Zh=ae(),Ly=tl(),jj=Cy(),{packageJson:zj}=yt(),pe=(G(),v(j)),{CONFIG_PARAM_MAP:Vke,CONFIG_PARAMS:$t}=pe,G_e=Hj(),q_e=qj(),dL=gt(),$_e=(Es(),v(co)),V_e=sh(),K_e=VP(),Y_e=ro(),W_e=require("util").promisify,j_e=W_e(Y_e.setSchemaDataToGlobal),$j=ys(),cu=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),ln=a(e=>lu.magenta.bold(e),"HDB_PROMPT_MSG"),z_e="https://harperdb.io/legal/end-user-license-agreement",Hc=uL.EOL,ya="",J_e="yes",Vj="Starting HarperDB install...",Kj="HarperDB installation was successful.",Yj="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Q_e="An out of date version of HarperDB is already installed.",lL="It appears that HarperDB is already installed. Exiting install...",X_e="Aborting install",Kke=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])$/),Z_e=new RegExp(/^[^\s.,*>]+$/),ege=uL.homedir(),tge=Ro.join(ege,pe.HDB_ROOT_DIR_NAME),rge="HDB_ADMIN",nge="CLUSTER_USER",sge="dev",ige="localhost",Py={[$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},cn={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},Gc=Ly([pe.INSTALL_PROMPTS.HDB_CONFIG]),yo,Jj=!1,fL=!1,Qj=!1;tz.exports={install:Xj,updateConfigEnv:Ege,setIgnoreExisting:_ge};Xj.createSuperUser=ez;async function Xj(){console.log(ln(Hc+Vj+Hc)),yr.notify(Vj);let e;Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=oge());let t=cge();Object.assign(t,e),t[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[pe.INSTALL_PROMPTS.ROOTPATH]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(Qj=!0,t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=G_e(t);if(r)throw r.message;await lge(),await uge(t);let n=await age(t);yo=n[pe.INSTALL_PROMPTS.ROOTPATH],Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&Ro.dirname(Gc[pe.INSTALL_PROMPTS.HDB_CONFIG])===yo&&(Jj=!0),!fL&&!Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&await Js.pathExists(Ro.join(yo,pe.HDB_CONFIG_FILE))&&(console.error(lL),process.exit()),cL||(cL=(await import("ora")).default);let s=cL({prefixText:ln("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Zh.isEmpty(yo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");kc.setHdbBasePath(yo),await q_e(yo),await dge(),await fge(n),yr.initLogSettings(!0),await ez(n),await pge(n),await $j.updateConfigCert(),await $j.generateCertsKeys(),await hge(),K_e(),s.stop(),console.log(ln(Hc+Kj+Hc)),yr.notify(Kj)}a(Xj,"install");function oge(){let e=H_e.parseDocument(Js.readFileSync(Gc[pe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=dL.flattenConfig(e.toJSON());return t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(oge,"getConfigFromFile");async function age(e){yr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:cu,when:Ra(e[pe.INSTALL_PROMPTS.ROOTPATH],cn.DESTINATION),name:pe.INSTALL_PROMPTS.ROOTPATH,prefix:ya,default:tge,validate:a(async s=>zs(s)?zs(s):await Js.pathExists(Ro.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:ln(cn.DESTINATION)},{type:"input",transformer:cu,when:Ra(e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],cn.HDB_USERNAME),name:pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ya,default:rge,validate:a(s=>zs(s)?zs(s):(t=s,!0),"validate"),message:ln(cn.HDB_USERNAME)},{type:"password",when:Ra(e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],cn.HDB_PASS),name:pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ya,validate:a(s=>zs(s)?zs(s):!0,"validate"),message:ln(cn.HDB_PASS)},{type:"input",transformer:cu,when:Ra(e[pe.INSTALL_PROMPTS.DEFAULTS_MODE],cn.DEFAULTS_MODE),name:pe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:ya,default:sge,validate:a(s=>zs(s)?zs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:ln(cn.DEFAULTS_MODE)}];if(Qj||r.push({type:"input",name:pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:cu,when:Ra(e[pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],cn.REPLICATION_HOSTNAME),prefix:ya,default:ige,message:ln(cn.REPLICATION_HOSTNAME)}),Zh.autoCastBoolean(e[pe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:cu,when:Ra(e[pe.INSTALL_PROMPTS.CLUSTERING_NODENAME],cn.NODE_NAME),name:pe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ya,default:k_e.random(),validate:a(i=>Z_e.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:ln(cn.NODE_NAME)},{type:"input",transformer:cu,when:Ra(e[pe.INSTALL_PROMPTS.CLUSTERING_USER],cn.CLUSTER_USERNAME),name:pe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ya,default:nge,validate:a(i=>zs(i)?zs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:ln(cn.CLUSTER_USERNAME)},{type:"password",when:Ra(e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],cn.CLUSTER_PASS),name:pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ya,validate:a(i=>zs(i)?zs(i):!0,"validate"),message:ln(cn.CLUSTER_PASS)}];r.push(...s)}let n=await Wj.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(age,"installPrompts");function Ra(e,t){return e!==void 0?(t.includes("password")?(console.log(`${ln(t)} ${lu.gray("[hidden]")}`),yr.trace(`${ln(t)} [hidden]`)):(console.log(`${ln(t)} ${e}`),yr.trace(`${ln(t)} ${e}`)),!1):!0}a(Ra,"displayCmdEnvVar");function zs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(zs,"checkForEmptyValue");function cge(){let e=Object.keys(pe.INSTALL_PROMPTS),t=Ly(e),r=Ly(Object.keys(pe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=pe.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(cge,"checkForPromptOverride");async function lge(){yr.trace("Checking for existing install.");let e=Zh.getPropsFilePath(),t=await Js.pathExists(e),r;if(t){yr.trace(`Install found an existing boot prop file at:${e}`);let n=F_e(e),s=dL.getConfigValue(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Js.pathExists(s)}if(!t&&Zh.noBootFile()&&(r=!0),r&&!fL){if(yr.trace(`Install found existing HDB config at:${e}`),await jj.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${zj.version}. Exiting install...`;console.log(Hc+lu.magenta.bold(Q_e)),console.log(lu.magenta.bold(s)),yr.error(s)}else console.log(Hc+lu.magenta.bold(lL)),yr.error(lL);process.exit(0)}}a(lge,"checkForExistingInstall");async function uge(e){yr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${z_e}${Hc}and can be viewed by typing or copying and pasting the URL into your web browser.${Hc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:ya,transformer:cu,when:Ra(e[pe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:pe.INSTALL_PROMPTS.TC_AGREEMENT,message:ln(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:lu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await Wj.prompt([r]);n[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[pe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==J_e&&(console.log(lu.yellow(Yj)),yr.error(Yj),process.exit(0))}a(uge,"termsAgreement");async function dge(){let e=Ro.join(yo,pe.HDB_CONFIG_FILE),t;try{t=uL.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
92
+ install_user = ${t}`,n=Zh.getHomeDir(),s=Ro.join(n,pe.HDB_HOME_DIR_NAME),i=Ro.join(s,pe.LICENSE_KEY_DIR_NAME);try{Js.mkdirpSync(s,{mode:pe.HDB_FILE_PERMISSIONS}),Js.mkdirpSync(i,{mode:pe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${pe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Ro.join(s,pe.BOOT_PROPS_FILE_NAME);try{await Js.writeFile(o,r)}catch(c){throw yr.error(`There was an error creating the boot file at path: ${o}`),c}kc.setProperty(pe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),kc.setProperty(pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),kc.setProperty(kc.BOOT_PROPS_FILE_PATH,o)}}a(dge,"createBootPropertiesFile");async function fge(e){yr.trace("Creating HarperDB config file");let t=Ly(Object.keys(pe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[pe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in Py){if(r===$t.HTTP_PORT&&t[$t.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??Py[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()]??Py[r],t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===$t.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=Py[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{Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]||dL.createConfigFile(t),kc.initSync()}catch(r){mge(r)}}a(fge,"createConfigFile");function mge(e){yr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(X_e);let t=Ro.resolve(kc.get(kc.BOOT_PROPS_FILE_PATH),"../");t&&Js.removeSync(t),yo&&(Jj?Js.readdirSync(yo,{withFileTypes:!0}).forEach(n=>{let s=Ro.join(n.path,n.name);s!==Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&Js.removeSync(s)}):Js.removeSync(yo)),process.exit(1)}a(mge,"rollbackInstall");async function Zj(e,t){yr.trace("Creating admin user"),await j_e();let r;try{r=await V_e.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await $_e.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(Zj,"createAdminUser");async function ez(e){yr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await Zj(t,r),delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(ez,"createSuperUser");async function pge(e){yr.trace("Creating Cluster user.");let t;e[pe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[pe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await Zj({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[pe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(pge,"createClusterUser");async function hge(){let e=zj.version;if(e)await jj.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(hge,"insertHdbVersionInfo");function Ege(e){Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Ege,"updateConfigEnv");function _ge(e){fL=e}a(_ge,"setIgnoreExisting")});var pL={};ye(pL,{isHdbInstalled:()=>gge});function gge(e,t){try{mL.default.statSync((0,Dy.getPropsFilePath)()),mL.default.statSync(e.get(Sm.SETTINGS_PATH_KEY))}catch(r){if((0,Dy.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var mL,Dy,hL=se(()=>{G();mL=b(require("node:fs")),Dy=b(ae());a(gge,"isHdbInstalled")});var iz=M((zke,sz)=>{"use strict";var EL=ae(),ws=Q(),nz=eL();sz.exports={processDirectives:Sge};async function Sge(e){console.log("Starting upgrade process...");let t=nz.getVersionsForUpgrade(e),r=Rge(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;ws.notify(c),console.log(c);let l=[],u=[];try{l=Tge(o.sync_functions)}catch(d){throw ws.error(`Error while running an upgrade script for ${o.version}`),d}try{u=await yge(o.async_functions)}catch(d){throw ws.error(`Error while running an upgrade script for ${o.version}`),d}n.push(...l,...u)}return n}a(Sge,"processDirectives");function Tge(e){if(EL.isEmptyOrZeroLength(e))return ws.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ws.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ws.info(`Running function ${r.name}`),!(r instanceof Function)){ws.info("Variable being processed is not a function");continue}let n=r();ws.info(n),t.push(n)}return t}a(Tge,"runSyncFunctions");async function yge(e){if(EL.isEmptyOrZeroLength(e))return ws.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ws.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ws.info(`Running function ${s.name}`),!(s instanceof Function)){ws.info("Variable being processed is not a function");continue}let i=await s();ws.info(i),t.push(i)}return t}a(yge,"runAsyncFunctions");function Rge(e){if(EL.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=nz.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Rge,"getUpgradeDirectivesToInstall")});var dz=M((Xke,uz)=>{"use strict";var cz=fe();cz.initSync();var bge=require("chalk"),ba=Q(),Df=(G(),v(j)),Age=iz(),Qke=ae(),Ige=(hL(),v(pL)),lz=Cy(),wge=Sy(),Nge=ro(),{packageJson:oz}=yt(),Cge=require("util").promisify,Oge=Cge(Nge.setSchemaDataToGlobal),az,{UPGRADE_VERSION:_L}=Df.UPGRADE_JSON_FIELD_NAMES_ENUM;uz.exports={upgrade:Pge};async function Pge(e){await Oge(),az===void 0&&(az=wf()),Ige.isHdbInstalled(cz,ba)||(vy("Harper is not installed. Harper must be installed before running an upgrade.",Df.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await lz.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),vy(`This version of HarperDB is ${oz.version}`,Df.LOG_LEVELS.INFO);let n=r[_L]??oz.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Df.HDB_SUPPORT_ADDRESS}`),ba.notify("Missing new version field from upgrade info object"),process.exit(1));let s,i=0;try{s=await wge.forceUpdatePrompt(r)}catch(o){ba.error("There was an error when prompting user about upgrade."),ba.error(o),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),ba.info(`Starting upgrade to version ${n}`),await Lge(r),vy(`HarperDB was successfully upgraded to version ${r[_L]}`,Df.LOG_LEVELS.INFO)}a(Pge,"upgrade");async function Lge(e){try{await Age.processDirectives(e)}catch(t){throw vy("There was an error during the data upgrade. Please check the logs.",Df.LOG_LEVELS.ERROR),t}try{await lz.insertHdbUpgradeInfo(e[_L])}catch(t){ba.error("Error updating the 'hdb_info' system table."),ba.error(t)}}a(Lge,"runUpgrade");function vy(e,t=void 0){t||(t=ba.info),ba[t](e),console.log(bge.magenta(e))}a(vy,"printToLogAndConsole")});var fz={};ye(fz,{SERVERS:()=>vf,portServer:()=>gL,setPortServerMap:()=>My});function My(e,t){let r=gL.get(e)??[];gL.set(e,[...r,t])}var vf,gL,SL=se(()=>{vf={},gL=new Map;a(My,"setPortServerMap")});function vge(e){if(typeof e!="string")throw new Uy(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new Uy(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new Mf(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=Dge.getKey();if(!(0,By.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new yL("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function Mge(e){if(e?.typ!=="Harper-License")throw new eE(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new eE(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function Uge(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function xge(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!Uge(t[r],e[r]))throw new xy(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function pz(e){let{header:t,payload:r}=vge(e),n;try{n=JSON.parse(t)}catch(i){let o=new eE;throw o.cause=i,o}Mge(n);let s;try{s=JSON.parse(r)}catch(i){let o=new xy;throw o.cause=i,o}return xge(s),s}var By,mz,TL,Uy,Mf,yL,eE,xy,Dge,hz=se(()=>{By=require("node:crypto"),mz=b(fe());G();TL=class{static{a(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
93
93
  MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
94
94
  -----END PUBLIC KEY-----
95
95
  `:this.pem=`-----BEGIN PUBLIC KEY-----
96
96
  MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
97
97
  -----END PUBLIC KEY-----
98
- `}getKey(){return(0,By.createPublicKey)(this.pem)}toString(){return this.pem}},Uy=class extends TypeError{static{a(this,"LicenseEncodingError")}},Mf=class extends TypeError{static{a(this,"InvalidLicenseError")}},yL=class extends Mf{static{a(this,"InvalidLicenseSignatureError")}},eE=class extends Mf{static{a(this,"InvalidHeaderError")}},xy=class extends Mf{static{a(this,"InvalidPayloadError")}},Dge=new TL(mz.get(x.LICENSE_MODE));a(vge,"validateLicenseSignature");a(Mge,"validateLicenseHeader");a(Uge,"valid");a(xge,"validateLicensePayload");a(pz,"validateLicense")});var Fy={};ye(Fy,{getActiveLicense:()=>wL,getUsageLicenses:()=>Iz,getUsageLicensesOp:()=>CL,installUsageLicense:()=>IL,installUsageLicenseOp:()=>AL,isActiveLicense:()=>bz,isLicensed:()=>NL,loadAndWatchLicensesDir:()=>kge,recordUsage:()=>Az});async function AL(e){let t=e.license;try{await IL(t)}catch(r){let n=new gz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function IL(e){let t=pz(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new bL(`A usage license with ${r} already exists`);return bo.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function bz(e){return(e.reads===-1||(e.usedReads??0)<e.reads)&&(e.readBytes===-1||(e.usedReadBytes??0)<e.readBytes)&&(e.writes===-1||(e.usedWrites??0)<e.writes)&&(e.writeBytes===-1||(e.usedWriteBytes??0)<e.writeBytes)&&(e.realTimeMessages===-1||(e.usedRealTimeMessages??0)<e.realTimeMessages)&&(e.realTimeBytes===-1||(e.usedRealTimeBytes??0)<e.realTimeBytes)&&(e.cpuTime===-1||(e.usedCpuTime??0)<e.cpuTime)&&(e.storage===-1||(e.usedStorage??0)<e.storage)}async function wL(){let e=Sz.get(x.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=Me.system.hdb_license?.search(t);for await(let n of r??[])if(bz(n))return n}async function NL(){return await wL()!==void 0}async function Az(e){ba=bo.forComponent("license"),ba.trace?.("Recording usage into license from analytics");let t,r=(await wL())?.id;if(r){ba.trace?.("Found license to record usage into:",r);let n={};bt(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(ba.trace?.("Processing analytics record:",s),s.metric){case"db-read":ba.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":ba.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":ba.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(ba.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:ba.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";Ez||(console.error(n),Ez=!0),_z===void 0&&(_z=setInterval(()=>{bo.notify(n)},Bge).unref())}}function CL(e){let t={};return e.region&&(t.region=e.region),Iz(t)}function Iz(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),Me.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function Fge(e){bo.trace?.("Loading usage license from file:",e);let t=await yz.readFile(e,{encoding:"utf-8"});try{await IL(t)}catch(r){bo.error?.("Failed to install usage license from file:",e,r)}}function kge(){let e=RL.default.join(RL.default.dirname(Tz.getConfigFilePath()),"licenses");(0,Rz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",Fge)}var gz,bo,Sz,RL,Tz,yz,Rz,bL,Ez,_z,Bge,ba,tE=se(()=>{hz();gz=b(Ee()),bo=b(Q());is();ja();Sz=b(fe());G();Oe();RL=b(require("node:path")),Tz=b(gt()),yz=b(require("node:fs/promises")),Rz=require("chokidar"),bL=class extends Error{static{a(this,"ExistingLicenseError")}};a(AL,"installUsageLicenseOp");a(IL,"installUsageLicense");Ez=!1,Bge=6e5;a(bz,"isActiveLicense");a(wL,"getActiveLicense");a(NL,"isLicensed");a(Az,"recordUsage");oI(Az);a(CL,"getUsageLicensesOp");a(Iz,"getUsageLicenses");a(Fge,"loadLicenseFile");a(kge,"loadAndWatchLicensesDir")});var Vy={};ye(Vy,{deliverSocket:()=>Bz,getHttpOptions:()=>$ge,getRequestId:()=>Gz,handleApplication:()=>qge,httpServer:()=>xL,logRequest:()=>sE,proxyRequest:()=>Vge,registerServer:()=>ML,suppressHandleApplicationWarning:()=>Gge});function qge(e){iE=e.options.getAll(),e.options.on("change",t=>{iE=e.options.getAll()})}function $ge(){return iE}function Bz(e,t,r){let n=e?.read?e:new Pz.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=vf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=vf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Aa.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function Vge(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=wz.get(s),r){case"connection":i=Bz(void 0,t),wz.set(s,i),i.write=(c,l,u)=>(Hy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Hy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Hy.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 ML(e,t,r=!0){t||(t=Dr.default.get(x.HTTP_PORT));let n=vf[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",Oz),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else vf[t]=e;e.on("unhandled",Oz)}function UL(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Dr.default.get(x.HTTP_PORT)!=null&&t.push({port:Dr.default.get(x.HTTP_PORT),secure:Dr.default.get(x.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Dr.default.get(x.HTTP_SECUREPORT)!=null&&t.push({port:Dr.default.get(x.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Dr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,Lz.resolvePath)(Dr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function xL(e,t){let r=[];for(let{port:n,secure:s}of UL(t))r.push(Fz(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?DL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,ML(e,n,!1)),Gy[n]=qy(DL,n);return r}function Fz(e,t,r,n){if(My(e,{protocol_name:t?"HTTPS":"HTTP",name:Ky()}),!ky[e]){let s=r?"operationsApi_network":"http",i=Dr.default.get(s+"_keepAliveTimeout"),o=Dr.default.get(s+"_timeout"),c=Dr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Dr.default.get(x.HTTP_MAXHEADERSIZE)},u=Dr.default.get(s+"_mtls"),d=Dr.default.get(s+"_mtls_required"),f;if(t){let E=Dr.default.get("tls");f=Dr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,Dz.getTicketKeys)(),SNICallback:(0,vz.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=a(async(E,_)=>{let R=performance.now(),S=0;try{let w=new Ec(E,_);r&&(w.isOperationsServer=!0),iE.logging?.id&&(w.requestId=S=Gz());let I=await Gy[e](w);if(!I){if(w._nodeResponse.statusCode){sE(E,w._nodeResponse.statusCode,S,performance.now()-R);return}I=kz(w)}if(I.headers?.set||(I.headers=new Hs(I.headers)),await NL()?I.headers.set("Server","HarperDB"):I.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),I.status===-1){for(let te of I.headers||[])_.setHeader(te[0],te[1]);return E.baseRequest=w,_.baseResponse=I,ky[e].emit("unhandled",E,_)}let H=I.status||200;_.statusCode=H;let X=performance.now(),q=X-R,k=I.body,z,Y=!1;if(!I.handlesHeaders){let te=I.headers||new Hs;k?k.length>=0?(typeof k=="string"?te.set("Content-Length",Buffer.byteLength(k)):te.set("Content-Length",k.length),z=!0):k instanceof Ds&&(k.size?te.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",Ne=>{_.headersSent||_.setHeader("Content-Length",Ne)})),k=k.stream()):(te.set("Content-Length","0"),z=!0);let Se=`hdb;dur=${q.toFixed(2)}`;if(I.wasCacheMiss&&(Se+=", miss"),Kp(te,"Server-Timing",Se,!0),!_.headersSent)if(Y){if(te)if(te[Symbol.iterator])for(let[Ne,Ke]of te)_.setHeader(Ne,Ke);else for(let Ne in te)_.setHeader(Ne,te[Ne])}else _.writeHead(H,te&&(te[Symbol.iterator]?Array.from(te):te));z&&_.end(k)}let ce=w.handlerPath,de=w.method;if(Ye(q,"duration",ce,de,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),en(H<400,"success",ce,de),en(1,"response_"+H,ce,de),sE(E,H,S,q),!z)if(k instanceof ReadableStream&&(k=LL.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=LL.Readable.from(k)),k?.pipe){k.pipe(_),k.destroy&&_.on("close",()=>{k.destroy()});let te=0;k.on("data",Se=>{te+=Se.length}),k.on("end",()=>{Ye(performance.now()-X,"transfer",ce,de),Ye(te,"bytes-sent",ce,de)})}else k?.then?k.then(te=>{_.end(te)},y):_.end(k)}catch(w){y(w)}function y(w){let I=w.headers,H=w.statusCode||500;_.writeHead(H,I&&(I[Symbol.iterator]?Array.from(I):I)),_.end(Hge(w)),sE(E,H,S,performance.now()-R),w.statusCode?w.statusCode===500?Aa.default.warn(w):Aa.default.info(w):Aa.default.error(w)}a(y,"onError")},"requestHandler"),p=gS(m,(E,_)=>{_.statusCode=503,_.end("Service unavailable, exceeded request queue limit"),Ye(!0,"service-unavailable",e)},Dr.default.get(s+"_requestQueueLimit")),h=ky[e]=(t?f?Mz.createSecureServer:Uz.createServer:$y.createServer)(l,(E,_)=>{let R=E.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?m(E,_):p(E,_)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Ye(performance.now()-E._parent.startTime,"tls-handshake",e),Ye(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),ML(h,e)}return ky[e]}function qy(e,t){let r=kz;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"nextCallback")}}return r}function kz(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hs}}function Kge(e,t){xL(e,{requestOnly:!0,...t})}function Hz(e,t){for(let{port:r}of UL(t))Nz[t?.runFirst?"unshift":"push"]({listener:e,port:r}),vL[r]=qy(Nz,r)}function Yge(e,t){let r=[];for(let{port:n,secure:s}of UL(t)){My(n,{protocol_name:s?"WSS":"WS",name:Ky()});let i=Fz(n,s,t?.isOperationsServer,t?.mtls);rE[n]||(rE[n]=new xz.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),rE[n].on("connection",(o,c)=>{try{let l=new Ec(c);l.isWebSocket=!0;let u=Gy[n](l);Aa.default.debug("Received WS connection, calling listeners",OL),Cz[n](o,l,u)}catch(l){Aa.default.warn("Error in handling WS connection",l)}}),Hz((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):rE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),rE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{vL[n]&&vL[n](o,c,l)})),r.push(i),OL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),Cz[n]=qy(OL,n),Gy[n]=qy(DL,n)}return r}function Oz(e,t){t.writeHead(404),t.end(`Not found
99
- `),sE(e,404,0,e.requestId)}function sE(e,t,r,n){let s=iE.logging;if(s){PL||(PL=Aa.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";PL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+Wge(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function Wge(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function Gz(){return nE||(nE=new BigInt64Array([1n]),nE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",nE.buffer))),Number(Atomics.add(nE,0,1n))}var Pz,Aa,Hy,Dr,Lz,Dz,vz,Mz,Uz,$y,LL,xz,Hge,rE,ky,Gy,DL,iE,Gge,wz,Nz,vL,OL,Cz,PL,nE,BL=se(()=>{Pz=require("node:net"),Aa=b(Q()),Hy=require("node:worker_threads"),Dr=b(fe());G();Lz=b(gt()),Dz=b(st()),vz=b(ys()),Mz=require("node:http2"),Uz=require("node:https"),$y=require("node:http");oh();Yp();ss();is();LL=require("node:stream");Hr();SL();oE();KN();xz=require("ws");tE();({errorToString:Hge}=Aa.default);Ue.http=xL;Ue.request=Kge;Ue.ws=Yge;Ue.upgrade=Hz;rE={},ky={},Gy={},DL=[],iE={},Gge=!0;a(qge,"handleApplication");a($ge,"getHttpOptions");a(Bz,"deliverSocket");wz=new Map;a(Vge,"proxyRequest");a(ML,"registerServer");a(UL,"getPorts");a(xL,"httpServer");a(Fz,"getHTTPServer");a(qy,"makeCallbackChain");a(kz,"unhandled");a(Kge,"onRequest");Object.defineProperty($y.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){}});Nz=[],vL={};a(Hz,"onUpgrade");OL=[],Cz={};a(Yge,"onWebSocket");a(Oz,"defaultNotFound");a(sE,"logRequest");a(Wge,"headersToString");a(Gz,"getRequestId")});var kL=M(lE=>{"use strict";iA();var{isMainThread:FL,parentPort:qz,threadId:Yy,workerData:jge}=require("node:worker_threads"),{createServer:zge}=require("node:net"),{unlinkSync:Jge,existsSync:Qge}=require("fs"),Vz;lE.whenComponentsLoaded=new Promise(e=>{Vz=e});var Ii=Q(),Ao=fe(),wi=(G(),v(j)),{server:Xge}=(Hr(),v(ym)),{createServer:Zge}=require("node:tls"),{restartNumber:eSe,getWorkerIndex:cE}=st(),{createReuseportFd:aE}=(oh(),v(K$)),{createTLSSelector:tSe}=ys(),{resolvePath:gHe}=gt(),{startupLog:rSe}=Wy(),{SERVERS:Uf,setPortServerMap:$z,portServer:nSe}=(SL(),v(fz)),sSe=(BL(),v(Vy)),iSe=ai(),Kz=Ao.get(wi.CONFIG_PARAMS.THREADS_DEBUG),oSe=Ao.get(wi.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);Xge.socket=aSe;if(Kz){let e;if(FL)e=Ao.get(wi.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Ii.info("Could not close debugger",t)}});else{let t=Ao.get(wi.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&cE()>=0&&(e=t+cE())}if(e){let t=Ao.get(wi.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Ao.get(wi.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Ii.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&FL)try{require("inspector").open(9229)}catch(e){eSe<=1&&Ii.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"&&Ii.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:SHe,CONFIG_PARAMS:THe}=wi;Ao.initSync();lE.globals=iSe;lE.listenOnPorts=Wz;lE.startServers=Yz;function Yz(){let e=Ao.get(wi.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=zy().loadRootComponents(!0).then(()=>{qz?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)deliverSocket(i,s,o);else if(n.requestId)sSe.proxyRequest(n);else if(n.type===wi.ITC_EVENT_TYPES.SHUTDOWN){Ii.trace("received shutdown request",Yy);for(let c in Uf){let l=Uf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100;if(!l[f]){h&&l.closeAllConnections?.(),clearInterval(p);return}let E=l[f][h?"all":"idle"]?.()||[];if(E.length===0){h&&clearInterval(p);return}m===1?Ii.info(`Closing ${E.length} idle connections`):h&&Ii.warn(`Forcefully closing ${E.length} active connections`);for(let _=0,R=E.length;_<R;_++){let S=E[_].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
98
+ `}getKey(){return(0,By.createPublicKey)(this.pem)}toString(){return this.pem}},Uy=class extends TypeError{static{a(this,"LicenseEncodingError")}},Mf=class extends TypeError{static{a(this,"InvalidLicenseError")}},yL=class extends Mf{static{a(this,"InvalidLicenseSignatureError")}},eE=class extends Mf{static{a(this,"InvalidHeaderError")}},xy=class extends Mf{static{a(this,"InvalidPayloadError")}},Dge=new TL(mz.get(x.LICENSE_MODE));a(vge,"validateLicenseSignature");a(Mge,"validateLicenseHeader");a(Uge,"valid");a(xge,"validateLicensePayload");a(pz,"validateLicense")});var Fy={};ye(Fy,{getActiveLicense:()=>wL,getUsageLicenses:()=>Iz,getUsageLicensesOp:()=>CL,installUsageLicense:()=>IL,installUsageLicenseOp:()=>AL,isActiveLicense:()=>bz,isLicensed:()=>NL,loadAndWatchLicensesDir:()=>kge,recordUsage:()=>Az});async function AL(e){let t=e.license;try{await IL(t)}catch(r){let n=new gz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function IL(e){let t=pz(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new bL(`A usage license with ${r} already exists`);return bo.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function bz(e){return(e.reads===-1||(e.usedReads??0)<e.reads)&&(e.readBytes===-1||(e.usedReadBytes??0)<e.readBytes)&&(e.writes===-1||(e.usedWrites??0)<e.writes)&&(e.writeBytes===-1||(e.usedWriteBytes??0)<e.writeBytes)&&(e.realTimeMessages===-1||(e.usedRealTimeMessages??0)<e.realTimeMessages)&&(e.realTimeBytes===-1||(e.usedRealTimeBytes??0)<e.realTimeBytes)&&(e.cpuTime===-1||(e.usedCpuTime??0)<e.cpuTime)&&(e.storage===-1||(e.usedStorage??0)<e.storage)}async function wL(){let e=Sz.get(x.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=Me.system.hdb_license?.search(t);for await(let n of r??[])if(bz(n))return n}async function NL(){return await wL()!==void 0}async function Az(e){Aa=bo.forComponent("license"),Aa.trace?.("Recording usage into license from analytics");let t,r=(await wL())?.id;if(r){Aa.trace?.("Found license to record usage into:",r);let n={};bt(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(Aa.trace?.("Processing analytics record:",s),s.metric){case"db-read":Aa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Aa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Aa.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(Aa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Aa.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";Ez||(console.error(n),Ez=!0),_z===void 0&&(_z=setInterval(()=>{bo.notify(n)},Bge).unref())}}function CL(e){let t={};return e.region&&(t.region=e.region),Iz(t)}function Iz(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),Me.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function Fge(e){bo.trace?.("Loading usage license from file:",e);let t=await yz.readFile(e,{encoding:"utf-8"});try{await IL(t)}catch(r){bo.error?.("Failed to install usage license from file:",e,r)}}function kge(){let e=RL.default.join(RL.default.dirname(Tz.getConfigFilePath()),"licenses");(0,Rz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",Fge)}var gz,bo,Sz,RL,Tz,yz,Rz,bL,Ez,_z,Bge,Aa,tE=se(()=>{hz();gz=b(Ee()),bo=b(Q());is();ja();Sz=b(fe());G();Oe();RL=b(require("node:path")),Tz=b(gt()),yz=b(require("node:fs/promises")),Rz=require("chokidar"),bL=class extends Error{static{a(this,"ExistingLicenseError")}};a(AL,"installUsageLicenseOp");a(IL,"installUsageLicense");Ez=!1,Bge=6e5;a(bz,"isActiveLicense");a(wL,"getActiveLicense");a(NL,"isLicensed");a(Az,"recordUsage");oI(Az);a(CL,"getUsageLicensesOp");a(Iz,"getUsageLicenses");a(Fge,"loadLicenseFile");a(kge,"loadAndWatchLicensesDir")});var Vy={};ye(Vy,{deliverSocket:()=>Bz,getHttpOptions:()=>$ge,getRequestId:()=>Gz,handleApplication:()=>qge,httpServer:()=>xL,logRequest:()=>sE,proxyRequest:()=>Vge,registerServer:()=>ML,suppressHandleApplicationWarning:()=>Gge});function qge(e){iE=e.options.getAll(),e.options.on("change",t=>{iE=e.options.getAll()})}function $ge(){return iE}function Bz(e,t,r){let n=e?.read?e:new Pz.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=vf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=vf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Ia.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function Vge(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=wz.get(s),r){case"connection":i=Bz(void 0,t),wz.set(s,i),i.write=(c,l,u)=>(Hy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Hy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Hy.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 ML(e,t,r=!0){t||(t=Dr.default.get(x.HTTP_PORT));let n=vf[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",Oz),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else vf[t]=e;e.on("unhandled",Oz)}function UL(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Dr.default.get(x.HTTP_PORT)!=null&&t.push({port:Dr.default.get(x.HTTP_PORT),secure:Dr.default.get(x.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Dr.default.get(x.HTTP_SECUREPORT)!=null&&t.push({port:Dr.default.get(x.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Dr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,Lz.resolvePath)(Dr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function xL(e,t){let r=[];for(let{port:n,secure:s}of UL(t))r.push(Fz(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?DL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,ML(e,n,!1)),Gy[n]=qy(DL,n);return r}function Fz(e,t,r,n){if(My(e,{protocol_name:t?"HTTPS":"HTTP",name:Ky()}),!ky[e]){let s=r?"operationsApi_network":"http",i=Dr.default.get(s+"_keepAliveTimeout"),o=Dr.default.get(s+"_timeout"),c=Dr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Dr.default.get(x.HTTP_MAXHEADERSIZE)},u=Dr.default.get(s+"_mtls"),d=Dr.default.get(s+"_mtls_required"),f;if(t){let E=Dr.default.get("tls");f=Dr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,Dz.getTicketKeys)(),SNICallback:(0,vz.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=a(async(E,_)=>{let R=performance.now(),S=0;try{let w=new Ec(E,_);r&&(w.isOperationsServer=!0),iE.logging?.id&&(w.requestId=S=Gz());let I=await Gy[e](w);if(!I){if(w._nodeResponse.statusCode){sE(E,w._nodeResponse.statusCode,S,performance.now()-R);return}I=kz(w)}if(I.headers?.set||(I.headers=new Hs(I.headers)),await NL()?I.headers.set("Server","HarperDB"):I.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),I.status===-1){for(let te of I.headers||[])_.setHeader(te[0],te[1]);return E.baseRequest=w,_.baseResponse=I,ky[e].emit("unhandled",E,_)}let H=I.status||200;_.statusCode=H;let X=performance.now(),q=X-R,k=I.body,z,Y=!1;if(!I.handlesHeaders){let te=I.headers||new Hs;k?k.length>=0?(typeof k=="string"?te.set("Content-Length",Buffer.byteLength(k)):te.set("Content-Length",k.length),z=!0):k instanceof Ds&&(k.size?te.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",Ne=>{_.headersSent||_.setHeader("Content-Length",Ne)})),k=k.stream()):(te.set("Content-Length","0"),z=!0);let Se=`hdb;dur=${q.toFixed(2)}`;if(I.wasCacheMiss&&(Se+=", miss"),Kp(te,"Server-Timing",Se,!0),!_.headersSent)if(Y){if(te)if(te[Symbol.iterator])for(let[Ne,Ke]of te)_.setHeader(Ne,Ke);else for(let Ne in te)_.setHeader(Ne,te[Ne])}else _.writeHead(H,te&&(te[Symbol.iterator]?Array.from(te):te));z&&_.end(k)}let ce=w.handlerPath,de=w.method;if(Ye(q,"duration",ce,de,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),en(H<400,"success",ce,de),en(1,"response_"+H,ce,de),sE(E,H,S,q),!z)if(k instanceof ReadableStream&&(k=LL.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=LL.Readable.from(k)),k?.pipe){k.pipe(_),k.destroy&&_.on("close",()=>{k.destroy()});let te=0;k.on("data",Se=>{te+=Se.length}),k.on("end",()=>{Ye(performance.now()-X,"transfer",ce,de),Ye(te,"bytes-sent",ce,de)})}else k?.then?k.then(te=>{_.end(te)},y):_.end(k)}catch(w){y(w)}function y(w){let I=w.headers,H=w.statusCode||500;_.writeHead(H,I&&(I[Symbol.iterator]?Array.from(I):I)),_.end(Hge(w)),sE(E,H,S,performance.now()-R),w.statusCode?w.statusCode===500?Ia.default.warn(w):Ia.default.info(w):Ia.default.error(w)}a(y,"onError")},"requestHandler"),p=gS(m,(E,_)=>{_.statusCode=503,_.end("Service unavailable, exceeded request queue limit"),Ye(!0,"service-unavailable",e)},Dr.default.get(s+"_requestQueueLimit")),h=ky[e]=(t?f?Mz.createSecureServer:Uz.createServer:$y.createServer)(l,(E,_)=>{let R=E.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?m(E,_):p(E,_)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Ye(performance.now()-E._parent.startTime,"tls-handshake",e),Ye(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),ML(h,e)}return ky[e]}function qy(e,t){let r=kz;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"nextCallback")}}return r}function kz(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hs}}function Kge(e,t){xL(e,{requestOnly:!0,...t})}function Hz(e,t){for(let{port:r}of UL(t))Nz[t?.runFirst?"unshift":"push"]({listener:e,port:r}),vL[r]=qy(Nz,r)}function Yge(e,t){let r=[];for(let{port:n,secure:s}of UL(t)){My(n,{protocol_name:s?"WSS":"WS",name:Ky()});let i=Fz(n,s,t?.isOperationsServer,t?.mtls);rE[n]||(rE[n]=new xz.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),rE[n].on("connection",(o,c)=>{try{let l=new Ec(c);l.isWebSocket=!0;let u=Gy[n](l);Ia.default.debug("Received WS connection, calling listeners",OL),Cz[n](o,l,u)}catch(l){Ia.default.warn("Error in handling WS connection",l)}}),Hz((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):rE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),rE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{vL[n]&&vL[n](o,c,l)})),r.push(i),OL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),Cz[n]=qy(OL,n),Gy[n]=qy(DL,n)}return r}function Oz(e,t){t.writeHead(404),t.end(`Not found
99
+ `),sE(e,404,0,e.requestId)}function sE(e,t,r,n){let s=iE.logging;if(s){PL||(PL=Ia.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";PL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+Wge(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function Wge(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function Gz(){return nE||(nE=new BigInt64Array([1n]),nE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",nE.buffer))),Number(Atomics.add(nE,0,1n))}var Pz,Ia,Hy,Dr,Lz,Dz,vz,Mz,Uz,$y,LL,xz,Hge,rE,ky,Gy,DL,iE,Gge,wz,Nz,vL,OL,Cz,PL,nE,BL=se(()=>{Pz=require("node:net"),Ia=b(Q()),Hy=require("node:worker_threads"),Dr=b(fe());G();Lz=b(gt()),Dz=b(st()),vz=b(ys()),Mz=require("node:http2"),Uz=require("node:https"),$y=require("node:http");oh();Yp();ss();is();LL=require("node:stream");Hr();SL();oE();KN();xz=require("ws");tE();({errorToString:Hge}=Ia.default);Ue.http=xL;Ue.request=Kge;Ue.ws=Yge;Ue.upgrade=Hz;rE={},ky={},Gy={},DL=[],iE={},Gge=!0;a(qge,"handleApplication");a($ge,"getHttpOptions");a(Bz,"deliverSocket");wz=new Map;a(Vge,"proxyRequest");a(ML,"registerServer");a(UL,"getPorts");a(xL,"httpServer");a(Fz,"getHTTPServer");a(qy,"makeCallbackChain");a(kz,"unhandled");a(Kge,"onRequest");Object.defineProperty($y.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){}});Nz=[],vL={};a(Hz,"onUpgrade");OL=[],Cz={};a(Yge,"onWebSocket");a(Oz,"defaultNotFound");a(sE,"logRequest");a(Wge,"headersToString");a(Gz,"getRequestId")});var kL=M(lE=>{"use strict";iA();var{isMainThread:FL,parentPort:qz,threadId:Yy,workerData:jge}=require("node:worker_threads"),{createServer:zge}=require("node:net"),{unlinkSync:Jge,existsSync:Qge}=require("fs"),Vz;lE.whenComponentsLoaded=new Promise(e=>{Vz=e});var Ii=Q(),Ao=fe(),wi=(G(),v(j)),{server:Xge}=(Hr(),v(ym)),{createServer:Zge}=require("node:tls"),{restartNumber:eSe,getWorkerIndex:cE}=st(),{createReuseportFd:aE}=(oh(),v(K$)),{createTLSSelector:tSe}=ys(),{resolvePath:gHe}=gt(),{startupLog:rSe}=Wy(),{SERVERS:Uf,setPortServerMap:$z,portServer:nSe}=(SL(),v(fz)),sSe=(BL(),v(Vy)),iSe=ai(),Kz=Ao.get(wi.CONFIG_PARAMS.THREADS_DEBUG),oSe=Ao.get(wi.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);Xge.socket=aSe;if(Kz){let e;if(FL)e=Ao.get(wi.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Ii.info("Could not close debugger",t)}});else{let t=Ao.get(wi.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&cE()>=0&&(e=t+cE())}if(e){let t=Ao.get(wi.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Ao.get(wi.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Ii.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&FL)try{require("inspector").open(9229)}catch(e){eSe<=1&&Ii.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"&&Ii.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:SHe,CONFIG_PARAMS:THe}=wi;Ao.initSync();lE.globals=iSe;lE.listenOnPorts=Wz;lE.startServers=Yz;function Yz(){let e=Ao.get(wi.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=zy().loadRootComponents(!0).then(()=>{qz?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)deliverSocket(i,s,o);else if(n.requestId)sSe.proxyRequest(n);else if(n.type===wi.ITC_EVENT_TYPES.SHUTDOWN){Ii.trace("received shutdown request",Yy);for(let c in Uf){let l=Uf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100;if(!l[f]){h&&l.closeAllConnections?.(),clearInterval(p);return}let E=l[f][h?"all":"idle"]?.()||[];if(E.length===0){h&&clearInterval(p);return}m===1?Ii.info(`Closing ${E.length} idle connections`):h&&Ii.warn(`Forcefully closing ${E.length} active connections`);for(let _=0,R=E.length;_<R;_++){let S=E[_].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
100
100
  Connection: close\r
101
101
  \r
102
102
  `))}},25).unref()}l.close?.(()=>{clearInterval(u),setTimeout(()=>{console.log("forced close server",c,Yy),l.cantCleanupProperly||Ii.warn("Had to forcefully exit the thread",Yy),process.exit(0)},5e3).unref()})}if(Kz||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Ii.info("Could not close debugger",c)}}}).ref();let r;aE&&!oSe&&(r=Wz()),Promise.resolve(r).then(()=>{if(cE()===0)try{rSe(nSe)}catch(n){console.error("Error displaying start-up log",n)}qz?.postMessage({type:wi.ITC_EVENT_TYPES.CHILD_STARTED})})});return Vz(t),t}a(Yz,"startServers");function Wz(){let e=[];for(let t in Uf){let r=Uf[t];if(t.includes?.("/")&&cE()==0){Qge(t)&&Jge(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Ii.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=Ao.get(wi.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=cE();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?aE?n={fd:aE(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:aE?n={fd:aE(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Ii.trace("Listening on port "+t,Yy)}).on("error",c)}))}return Promise.all(e)}a(Wz,"listenOnPorts");!FL&&!jge?.noServerStart&&Yz();function aSe(e,t){let r=(oE(),v(jy)).getComponentName,n;if(t.securePort){$z(t.securePort,{protocol_name:"TLS",name:r()});let s=tSe("server",t.mtls),i=Ao.get("tls");n=Zge({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),Uf[t.securePort]=n}return t.port&&($z(t.port,{protocol_name:"TCP",name:r()}),n=zge(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Uf[t.port]=n),n}a(aSe,"onSocket")});var t2={};ye(t2,{startHTTPThreads:()=>cSe,startSocketServer:()=>$L,updateWorkerIdleness:()=>e2});async function cSe(e=2,t){sI().catch(r=>Hf.error?.("Error recording hostname for analytics:",r));try{if(t)GL(0,1,!0);else{let{loadRootComponents:r}=zy();if(e===0)return(0,Io.setMainIsWorker)(!0),await kL().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)GL(r,e);return Promise.all(Zz)}finally{(0,Io.threadsHaveStarted)()}}function GL(e,t=1,r){if(HL++,(0,Io.startWorker)("server/threads/threadServer.js",{name:sA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===tA.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});Zz.push(s),await s,xf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Qy.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=xf.indexOf(n);o>-1&&xf.splice(o,1)}if(a(i,"removeWorker"),Bf){let o=Bf;Bf=[];for(let c of o)Xz[c.localPort](null,c)}}}),r){let n=setInterval(()=>{qL?qL=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Io.shutdownWorkers)(),HL=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function $L(e=0,t){if(typeof e=="string")try{(0,Xy.existsSync)(e)&&(0,Xy.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=lSe:r=uSe(t):r=VL;let n=(0,Ff.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=Xz[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),qL=!0,r(i,(o,c)=>{if(!o){if(jz){let u=i._socket||new Ff.Socket({handle:i,writable:!0,readable:!0});jz.deliverSocket(u,e,c),u.resume()}else HL>0?(Bf.length===0&&setTimeout(()=>{Bf.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,Bf.push(i)):(console.log("start up a dynamic thread to handle request"),GL(0));Ye(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new Ff.Socket({handle:i,writable:!0,readable:!0});mSe(u,o,e)}Ye(!0,"socket-routed")})},Hf.info(`HarperDB ${Qz.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 VL(e,t){let r,n=0;for(let s of xf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Jy)return Jy=i,t(r);n=i}Jy=0,t(r)}function lSe(e,t){let r={};e.getpeername(r);let n=r.address,s=kf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);VL(e,o=>{kf.set(n,{worker:o,lastUsed:i}),t(o)})}function uSe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Ff.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=kf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);VL(n,f=>{kf.set(l,{worker:f,lastUsed:d}),s(f,o)})})}a(r,"findByHeaderAffinity")}function e2(){Jy=0;for(let e of xf)e.expectedIdle=e.recentELU.idle+dSe,e.requests=1;xf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function mSe(e,t,r){let n=fSe++;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(),Qy.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")),Qy.delete(n)),s.event=="destroy"&&(e.destroy(),Qy.delete(n))})}var Io,Ff,Hf,Xy,Jz,Qz,xf,Bf,Xz,jz,HL,Zz,qL,Jy,zz,kf,dSe,Qy,fSe,KL=se(()=>{Io=b(st()),Ff=require("net");G();Hf=b(Q()),Xy=require("fs");is();Jz=require("worker_threads"),Qz=b(yt()),xf=[],Bf=[],Xz=[],HL=0,Zz=[];Jz.isMainThread&&process.on("uncaughtException",e=>{if(e.code!=="ECONNRESET"){if(e.code==="EIO"){Hf.disableStdio();return}console.error("uncaughtException",e)}});a(cSe,"startHTTPThreads");a(GL,"startHTTPWorker");a($L,"startSocketServer");Jy=0;a(VL,"findMostIdleWorker");zz=36e5,kf=new Map;a(lSe,"findByRemoteAddressAffinity");a(uSe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of kf)r.lastUsed+zz<e&&kf.delete(t)},zz).unref();dSe=1e3;a(e2,"updateWorkerIdleness");(0,Io.setMonitorListener)(e2);Qy=new Map,fSe=1;a(mSe,"proxySocket")});var Wy=M(eR=>{"use strict";var Ae=fe();Ae.initSync();Vf();var un=(G(),v(j)),{CONFIG_PARAMS:xe}=un,ur=Q(),qf=require("fs-extra"),qc=require("path"),pSe=VP(),{install:hSe}=rz(),YL=require("chalk"),{packageJson:ESe,PACKAGE_ROOT:_Se}=yt(),$f=ae(),gSe=(hL(),v(pL)),WL=gt(),n2=tl(),r2=my(),SSe=dz(),{compactOnStart:TSe}=(qP(),v(GP)),ySe=require("minimist"),RSe=ys(),{startHTTPThreads:bSe}=(KL(),v(t2)),ASe=Cy(),{isMainThread:ISe}=require("worker_threads"),IHe=Zi(),wHe=Vl(),NHe=_w(),CHe=gp(),Zy=(G(),v(j)),{getHdbPid:wSe}=wf(),$c,Gf,s2=!1,NSe="Upgrade complete. Starting HarperDB.",CSe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",OSe="HarperDB not found, starting install process.",PSe="There was an error during install, check install_log.log for more details. Exiting.",LSe="HarperDB successfully started.";function DSe(){process.on("unhandledRejection",(e,t)=>{ur.error("Unhandled promise rejection: Promise",t,"reason:",e)})}a(DSe,"addUnhandleRejectionListener");function vSe(){if(!s2){let e=a(()=>{qf.removeSync(qc.join(Ae.get(un.CONFIG_PARAMS.ROOTPATH),un.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(vSe,"addExitListeners");async function i2(e=!1,t=!1){if(console.log(YL.magenta("Starting HarperDB...")),DSe(),ur.suppressLogging?.(()=>{console.log(YL.magenta(""+qf.readFileSync(qc.join(_Se,"utility/install/ascii_logo.txt"))))}),ur.debug("Checking to make sure hdb is installed"),gSe.isHdbInstalled(Ae,ur)===!1){console.log(OSe);try{await hSe()}catch(o){console.error(PSe,o),ur.error(o),process.exit(1)}}if(!e){let o=n2(Object.keys(un.CONFIG_PARAM_MAP),!0);!$f.isEmpty(o)&&!$f.isEmptyOrZeroLength(Object.keys(o))&&WL.updateConfigValue(void 0,void 0,o,!0,!0)}let r=Gf?.service==="clustering";Gf?.service&&!r&&(console.error("Unrecognized service argument"),ur.debug("Unrecognized service argument"),process.exit(1));let n=wSe();n&&(r||(ur.debug("Error: HarperDB is already running"),console.error(`Error: HarperDB is already running (pid: ${n})`),process.exit(4))),$c===void 0&&($c=wf()),ur.debug("Checking for service clustering"),r&&(n||(console.error("HarperDB must be running to start clustering."),process.exit()),Ae.get(un.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await r2.generateNatsConfig(),await $c.startClusteringProcesses(!0),process.exit()),vSe(),t&&await qf.writeFile(qc.join(Ae.get(Zy.CONFIG_PARAMS.ROOTPATH),Zy.HDB_PID_FILE),`${process.pid}`),ur.info("HarperDB PID",process.pid);let s;try{let o=await ASe.getVersionUpdateInfo();o!==void 0&&(s=o[un.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await SSe.upgrade(o),console.log(NSe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),ur.error(o)):(console.error(CSe,o),ur.error(o)),process.exit(1)}pSe(),xSe(),await RSe.reviewSelfSignedCert(),$f.autoCastBoolean(Ae.get(un.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&ISe&&await r2.generateNatsConfig(t)}a(i2,"initialize");async function MSe(e=!1){try{Gf=ySe(process.argv),Gf.ROOTPATH&&WL.updateConfigObject("settings_path",qc.join(Gf.ROOTPATH,un.HDB_CONFIG_FILE)),await i2(e,!0),Ae.get(un.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await TSe();let t=process.env.IS_SCRIPTED_SERVICE&&!Gf.service;$f.autoCastBoolean(Ae.get(un.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(await $c.startClusteringProcesses(),await $c.startClusteringThreads()),await bSe(process.env.DEV_MODE?1:Ae.get(Zy.CONFIG_PARAMS.THREADS_COUNT)??Ae.get(Zy.CONFIG_PARAMS.THREADS)),t||o2()}catch(t){console.error(t),ur.error(t),process.exit(1)}}a(MSe,"main");function o2(){ur.suppressLogging(()=>{console.log(YL.magenta(`HarperDB ${ESe.version} successfully started`))}),ur.notify(LSe)}a(o2,"started");async function USe(e=!0){s2=!e;try{$c===void 0&&($c=wf()),ur.debug("initializing processManagement..."),await i2(),ur.debug("Starting new main process"),await $c.startService(un.PROCESS_DESCRIPTORS.HDB,!0),o2(),e&&process.exit(0)}catch(t){console.error(t),ur.error(t),process.exit(1)}}a(USe,"launch");function xSe(){let e=qc.join(Ae.get(un.CONFIG_PARAMS.ROOTPATH),un.LICENSE_KEY_DIR_NAME,un.LICENSE_FILE_NAME),t=qc.join(e,un.LICENSE_FILE_NAME),r=qc.join(e,un.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=n2(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if($f.isEmpty(n)||$f.isEmpty(s))return;qf.mkdirpSync(e),qf.writeFileSync(r,n),qf.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ur.error(s)}}a(xSe,"writeLicenseFromVars");eR.launch=USe;eR.main=MSe;eR.startupLog=BSe;function BSe(e){let r=a(p=>p.padEnd(20),"pad"),n=`
@@ -115,24 +115,24 @@ Connection: close\r
115
115
  `;let l=[],u=WL.getConfigObj();for(let p in u)u[p].package&&l.push(p);let d={},f=`${r("REST:")}`;for(let[p,h]of e)for(let E of h){let _=E.name;_==="rest"&&(f+=`${E.protocol_name}: ${p}, `),l.includes(_)&&(d[_]?d[_]+=`${E.protocol_name}: ${p}, `:d[_]=`${E.protocol_name}: ${p}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
116
116
  `);let m=Ae.get(xe.HTTP_PORT)?`HTTP: ${Ae.get(xe.HTTP_PORT)}, `:"";m+=Ae.get(xe.HTTP_SECUREPORT)?`HTTPS: ${Ae.get(xe.HTTP_SECUREPORT)}, `:"",m.length>21&&(m=m.slice(0,-2));for(let p of l)d[p]?n+=`${r(p+": ")}${d[p].slice(0,-2)}
117
117
  `:n+=`${r(p+": ")}${m}
118
- `;console.log(n),Ae.get(xe.LOGGING_STDSTREAMS)&&ur.logsAtLevel("info")&&ur.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(BSe,"startupLog")});var Vf=M((MHe,f2)=>{"use strict";var FSe=require("minimist"),{isMainThread:QL,parentPort:uE,threadId:LHe}=require("worker_threads"),Vt=(G(),v(j)),Ni=Q(),kSe=ae(),tR=my(),jL=Sr(),DHe=Pt(),HSe=gt(),uu=wf(),a2=vh(),{compactOnStart:GSe}=(qP(),v(GP)),vHe=tl(),{restartWorkers:JL,onMessageByType:qSe,shutdownWorkersNow:$Se}=st(),{handleHDBError:VSe,hdbErrors:KSe}=Ee(),{HTTP_STATUS_CODES:YSe}=KSe,dE=fe(),{sendOperationToNode:c2,getThisNodeName:WSe,monitorNodeCAs:jSe}=(Ss(),v(sa)),zSe=require("node:path"),{unlinkSync:JSe}=require("node:fs");dE.initSync();var zL=`Restarting HarperDB. This may take up to ${Vt.RESTART_TIMEOUT_MS/1e3} seconds.`,l2="Clustering is not enabled so cannot be restarted",QSe="Invalid service",Ia;f2.exports={restart:d2,restartService:XL};QL&&qSe(Vt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await XL({service:e.workerType}):d2({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function d2(e){Ia=Object.keys(e).length===0;let t=FSe(process.argv);if(t.service){await XL(t);return}if(Ia){let r=uu.getHdbPid();return console.error(r?"Restarting Harper...":"Starting Harper..."),Wy().launch(!0),zL}return QL?(Ni.notify(zL),dE.get(Vt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await GSe(),process.env.HARPER_EXIT_ON_RESTART&&(Ni.warn("Exiting Harper process to trigger a container restart"),process.exit(0)),setTimeout(async()=>{Ni.debug("Shutdown workers"),await $Se(),await uu.cleanupChildrenProcesses(!1),await JSe(zSe.join(dE.get(Vt.CONFIG_PARAMS.ROOTPATH),Vt.HDB_PID_FILE),`${process.pid}`),Ni.debug("Starting new process..."),Wy().launch(!0)},50)):uE.postMessage({type:Vt.ITC_EVENT_TYPES.RESTART}),zL}a(d2,"restart");async function XL(e){let{service:t}=e;if(Vt.HDB_PROCESS_SERVICES[t]===void 0)throw VSe(new Error,QSe,YSe.BAD_REQUEST,void 0,void 0,!0);if(uu.expectedRestartOfChildren(),!QL){e.replicated&&jSe(),uE.postMessage({type:Vt.ITC_EVENT_TYPES.RESTART,workerType:t}),uE.ref(),await new Promise(s=>{uE.on("message",i=>{i.type==="restart-complete"&&(s(),uE.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===WSe())continue;let i;try{({job_id:i}=await c2(s,e))}catch(o){n.push({node:s.name,message:o.message});continue}n.push(await new Promise((o,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let p=new Error("Timed out waiting for restart job to complete");p.replicated=n,c(p)}let m=(await c2(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),o({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let p=new Error(m.message);p.replicated=n,c(p)}},250)}))}return{replicated:n}}return}let r;switch(t){case Vt.HDB_PROCESS_SERVICES.clustering:if(!dE.get(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=l2;break}Ia&&console.log("Restarting clustering"),Ni.notify("Restarting clustering"),await XSe();break;case Vt.HDB_PROCESS_SERVICES.clustering_config:case Vt.HDB_PROCESS_SERVICES["clustering config"]:if(!dE.get(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=l2;break}Ia&&console.log("Restarting clusteringConfig"),Ni.notify("Restarting clustering_config"),await uu.reloadClustering();break;case"custom_functions":case"custom functions":case Vt.HDB_PROCESS_SERVICES.harperdb:case Vt.HDB_PROCESS_SERVICES.http_workers:case Vt.HDB_PROCESS_SERVICES.http:Ia&&console.log("Restarting httpWorkers"),Ni.notify("Restarting http_workers"),Ia?await uu.restart(Vt.PROCESS_DESCRIPTORS.HDB):await JL("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Ni.error(r),Ia&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(XL,"restartService");async function XSe(){if(!HSe.getConfigFromFile(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await a2.getHDBProcessInfo()).clustering.length===0)Ni.trace("Clustering not running, restart will start clustering services"),await tR.generateNatsConfig(!0),await uu.startClusteringProcesses(),await uu.startClusteringThreads(),await u2(),Ia&&await jL.closeConnection();else{await tR.generateNatsConfig(!0),(await a2.getHDBProcessInfo()).clustering.forEach(s=>{Ni.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await kSe.asyncSetTimeout(3e3),await u2(),await jL.updateLocalStreams(),Ia&&await jL.closeConnection(),Ni.trace("Restart clustering restarting ingest and reply service threads");let r=JL(Vt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),n=JL(Vt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await r,await n}}a(XSe,"restartClustering");async function u2(){await tR.removeNatsConfig(Vt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await tR.removeNatsConfig(Vt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(u2,"removeNatsConfig")});var b2=M((BHe,R2)=>{"use strict";var xHe=require("lodash"),zn=(G(),v(j)),{handleHDBError:m2,hdbErrors:ZSe}=Ee(),{HDB_ERROR_MSGS:eTe,HTTP_STATUS_CODES:tTe}=ZSe,ZL=Q();R2.exports={getRolePermissions:nTe};var du=Object.create(null),rTe=a(e=>({key:e,perms:{}}),"permsTemplateObj"),_2=a((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),g2=a((e=!1,t=!1,r=!1,n=!1)=>({[zn.PERMS_CRUD_ENUM.READ]:e,[zn.PERMS_CRUD_ENUM.INSERT]:t,[zn.PERMS_CRUD_ENUM.UPDATE]:r,[zn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),eD=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...g2(t,r,n,s)}),"tablePermsTemplate"),p2=a((e,t=g2())=>({attribute_name:e,describe:y2(t),[fE]:t[fE],[tD]:t[tD],[rD]:t[rD]}),"attrPermsTemplate"),h2=a((e,t=!1)=>({attribute_name:e,describe:t,[fE]:t}),"timestampAttrPermsTemplate"),{READ:fE,INSERT:tD,UPDATE:rD}=zn.PERMS_CRUD_ENUM,S2=Object.values(zn.PERMS_CRUD_ENUM),T2=[fE,tD,rD];function nTe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[zn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(du[t]&&du[t].key===n)return du[t].perms;let s=sTe(e,r);return du[t]?du[t].key=n:du[t]=rTe(n),du[t].perms=s,s}catch(r){if(!e[zn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[zn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<zn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${role_name}' must be updated to align with new structure from the 2.2.0 release.`;throw ZL.error(n),ZL.debug(r),m2(new Error,eTe.OUTDATED_PERMS_TRANSLATION_ERROR,tTe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
119
- ${r.stack}`;throw ZL.error(n),m2(new Error)}}}a(nTe,"getRolePermissions");function sTe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[zn.SYSTEM_SCHEMA_NAME]=n[zn.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]=iTe(t[i]);return}r[i]=_2(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=oTe(c,l);r[i].describe||S2.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=eD()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=eD()})}),r}a(sTe,"translateRolePermissions");function iTe(e){let t=_2(!0);return Object.keys(e).forEach(r=>{t.tables[r]=eD(!0,!0,!0,!0,!0)}),t}a(iTe,"createStructureUserPermissions");function oTe(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 zn.TIME_STAMP_NAMES.includes(f)&&(m=h2(f,d[fE])),u[f]=m,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=p2(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=y2(d),s.attribute_permissions.push(d),c||aTe(d,l)}else if(u!==o){let d;zn.TIME_STAMP_NAMES.includes(u)?d=h2(u):d=p2(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=E2(s),s}else return e.describe=E2(e),e}a(oTe,"getTableAttrPerms");function E2(e){return S2.filter(t=>e[t]).length>0}a(E2,"getSchemaTableDescribePerm");function y2(e){return T2.filter(t=>e[t]).length>0}a(y2,"getAttributeDescribePerm");function aTe(e,t){T2.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(aTe,"checkForHashPerms")});var mE={};ye(mE,{authentication:()=>L2,bypassAuth:()=>STe,login:()=>sD,logout:()=>iD,start:()=>TTe});function STe(){P2=!0}async function L2(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let p=e.isOperationsServer?hTe?pTe:[]:mTe?fTe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=An.get(x.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Hs([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return nR&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}o.push("Access-Control-Allow-Origin",i),nR&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(nR){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let _=E.indexOf(";");l=E.slice(p.length,_===-1?E.length:_),u=await A2.get(l);break}e.session=u||(u={})}let d=a((p,h,E)=>{let _=new lTe(p,h,Ka.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);_.auth_strategy=E,l&&(_.session_id=l),r.referer&&(_.referer=r.referer),r.origin&&(_.origin=r.origin),h===oi.SUCCESS?rR.info?.(_):rR.error?.(_)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&rR.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await lf(e.peerCertificate,e.mtlsConfig);if(!p.valid)return rR.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:ko({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Ue.getUser(h,null,e),d(h,oi.SUCCESS,"mTLS")):dTe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=fu.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),_,R;try{switch(h){case"Basic":let S=atob(E),y=S.indexOf(":");_=S.slice(0,y),R=S.slice(y+1),f=_||R?await Ue.getUser(_,R,e):null;break;case"Bearer":try{f=await NC(E)}catch(w){if(w.message==="invalid token")try{return await JS(E),c({status:-1})}catch{throw w}}break}}catch(S){return _Te&&(fu.get(E)||(fu.set(E,E),d(_,oi.FAILURE,h))),c({status:401,body:ko({error:S.message},e)})}fu.set(n,f),ETe&&d(f.username,oi.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):(P2&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await Fp());nR&&(e.session.update=function(p){let h=An.get(x.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,w2.v4)();let _=An.get(x.AUTHENTICATION_COOKIE_DOMAINS),R=h?new Date(Date.now()+(0,nD.convertToMS)(h)).toUTCString():gTe,S=r.host&&_?.find(I=>{I.startsWith(".")&&(I=I.slice(1));let H=r.host.indexOf(":");return(H!==-1?r.host.slice(0,H):r.host).endsWith(I)}),w=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;S&&(w+=`; Domain=${S}`),E&&(w+="; SameSite=None; Secure"),o?o.push("Set-Cookie",w):m?.headers?.set&&m.headers.set("Set-Cookie",w)}return E&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,A2.put(p,{expiresAt:h?Date.now()+(0,nD.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Ue.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&xs.loginPath?(m.status=302,m.headers.set("Location",xs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let d=l.headers;d||(l.headers=d=new Hs);for(let f=0;f<u;){let m=o[f++];d.set(m,o[f++])}}return o=null,l}a(c,"applyResponseHeaders")}function TTe({server:e,port:t,securePort:r}){e.http(L2,t||r?{port:t,securePort:r}:{port:"all"}),I2||(I2=!0,setInterval(()=>{fu=new Map},An.get(x.AUTHENTICATION_CACHETTL)).unref(),uTe.addListener(()=>{fu=new Map}))}async function sD(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 iD(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var w2,An,N2,C2,nD,cTe,lTe,uTe,O2,dTe,rR,fTe,mTe,pTe,hTe,A2,nR,P2,ETe,_Te,gTe,fu,I2,sR=se(()=>{Es();Hr();tc();Kd();Oe();w2=require("uuid"),An=b(fe());G();N2=b(Q()),C2=b($p());Yp();nD=b(ae());MT();Go();({forComponent:cTe,AuthAuditLog:lTe}=N2.default),{user:uTe}=C2.default,O2=cTe("authentication"),{debug:dTe}=O2,rR=O2.withTag("auth-event");An.initSync();fTe=An.get(x.HTTP_CORSACCESSLIST),mTe=An.get(x.HTTP_CORS),pTe=An.get(x.OPERATIONSAPI_NETWORK_CORSACCESSLIST),hTe=An.get(x.OPERATIONSAPI_NETWORK_CORS),A2=ze({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),nR=An.get(x.AUTHENTICATION_ENABLESESSIONS)??!0,P2=process.env.AUTHENTICATION_AUTHORIZELOCAL??An.get(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,ETe=An.get(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,_Te=An.get(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,gTe="Tue, 01 Oct 8307 19:33:20 GMT",fu=new Map;Ue.onInvalidatedUser(()=>{fu=new Map});a(STe,"bypassAuth");a(L2,"authentication");a(TTe,"start");a(sD,"login");a(iD,"logout")});var F2=M((zHe,B2)=>{"use strict";var Ie=require("joi"),D2=require("fs-extra"),v2=require("path"),Jn=mt(),M2=fe(),U2=(G(),v(j)),x2=Q(),{hdbErrors:yTe}=Ee(),{HDB_ERROR_MSGS:In}=yTe,wa=/^[a-zA-Z0-9-_]+$/,RTe=/^[a-zA-Z0-9-_]+$/;B2.exports={getDropCustomFunctionValidator:ATe,setCustomFunctionValidator:ITe,addComponentValidator:OTe,dropCustomFunctionProjectValidator:PTe,packageComponentValidator:LTe,deployComponentValidator:DTe,setComponentFileValidator:wTe,getComponentFileValidator:CTe,dropComponentFileValidator:NTe,addSSHKeyValidator:vTe,getSSHKeyValidator:MTe,updateSSHKeyValidator:UTe,deleteSSHKeyValidator:xTe,setSSHKnownHostsValidator:BTe};function iR(e,t,r){try{let n=M2.get(U2.CONFIG_PARAMS.COMPONENTSROOT),s=v2.join(n,t);return D2.existsSync(s)?e?t:r.message(In.PROJECT_EXISTS):e?r.message(In.NO_PROJECT):t}catch(n){return x2.error(n),r.message(In.VALIDATION_ERR)}}a(iR,"checkProjectExists");function pE(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(pE,"checkFilePath");function bTe(e,t,r,n){try{let s=M2.get(U2.CONFIG_PARAMS.COMPONENTSROOT),i=v2.join(s,e,t,r+".js");return D2.existsSync(i)?r:n.message(In.NO_FILE)}catch(s){return x2.error(s),n.message(In.VALIDATION_ERR)}}a(bTe,"checkFileExists");function ATe(e){let t=Ie.object({project:Ie.string().pattern(wa).custom(iR.bind(null,!0)).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(wa).custom(bTe.bind(null,e.project,e.type)).custom(pE).required().messages({"string.pattern.base":In.BAD_FILE_NAME})});return Jn.validateBySchema(e,t)}a(ATe,"getDropCustomFunctionValidator");function ITe(e){let t=Ie.object({project:Ie.string().pattern(wa).custom(iR.bind(null,!0)).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(pE).required(),function_content:Ie.string().required()});return Jn.validateBySchema(e,t)}a(ITe,"setCustomFunctionValidator");function wTe(e){let t=Ie.object({project:Ie.string().pattern(wa).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),file:Ie.string().custom(pE).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(wTe,"setComponentFileValidator");function NTe(e){let t=Ie.object({project:Ie.string().pattern(wa).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),file:Ie.string().custom(pE).optional()});return Jn.validateBySchema(e,t)}a(NTe,"dropComponentFileValidator");function CTe(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(pE).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(CTe,"getComponentFileValidator");function OTe(e){let t=Ie.object({project:Ie.string().pattern(wa).custom(iR.bind(null,!1)).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),template:Ie.string().optional(),install_command:Ie.string().optional(),install_timeout:Ie.number().optional()});return Jn.validateBySchema(e,t)}a(OTe,"addComponentValidator");function PTe(e){let t=Ie.object({project:Ie.string().pattern(wa).custom(iR.bind(null,!0)).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(PTe,"dropCustomFunctionProjectValidator");function LTe(e){let t=Ie.object({project:Ie.string().pattern(wa).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean(),skip_symlinks:Ie.boolean()});return Jn.validateBySchema(e,t)}a(LTe,"packageComponentValidator");function DTe(e){let t=Ie.object({project:Ie.string().pattern(wa).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),package:Ie.string().optional(),restart:Ie.alternatives().try(Ie.boolean(),Ie.string().valid("rolling")).optional(),install_command:Ie.string().optional(),install_timeout:Ie.number().optional()});return Jn.validateBySchema(e,t)}a(DTe,"deployComponentValidator");function vTe(e){let t=Ie.object({name:Ie.string().pattern(RTe).required().messages({"string.pattern.base":In.BAD_SSH_KEY_NAME}),key:Ie.string().required(),host:Ie.string().required(),hostname:Ie.string().required(),known_hosts:Ie.string().optional()});return Jn.validateBySchema(e,t)}a(vTe,"addSSHKeyValidator");function MTe(e){let t=Ie.object({name:Ie.string().required()});return Jn.validateBySchema(e,t)}a(MTe,"getSSHKeyValidator");function UTe(e){let t=Ie.object({name:Ie.string().required(),key:Ie.string().required()});return Jn.validateBySchema(e,t)}a(UTe,"updateSSHKeyValidator");function xTe(e){let t=Ie.object({name:Ie.string().required()});return Jn.validateBySchema(e,t)}a(xTe,"deleteSSHKeyValidator");function BTe(e){let t=Ie.object({known_hosts:Ie.string().required()});return Jn.validateBySchema(e,t)}a(BTe,"setSSHKnownHostsValidator")});var q2={};ye(q2,{packageDirectory:()=>FTe});function FTe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];H2.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,k2.join)("cache","webpack")):void 0,map:a(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,G2.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var k2,H2,G2,$2=se(()=>{k2=require("path"),H2=b(require("tar-fs")),G2=require("node:zlib");a(FTe,"packageDirectory")});var dR={};ye(dR,{Application:()=>uR,InvalidInstallCommandError:()=>cR,InvalidInstallPropertyError:()=>aR,InvalidInstallTimeoutError:()=>lR,InvalidPackageIdentifierError:()=>oR,assertApplicationConfig:()=>z2,derivePackageIdentifier:()=>X2,extractApplication:()=>J2,installApplication:()=>Q2,installApplications:()=>kTe,nonInteractiveSpawn:()=>hE,prepareApplication:()=>Z2});function z2(e,t){if(typeof t.package!="string")throw new oR(e,t.package);if("install"in t){if(typeof t.install!="object"||t.install===null||Array.isArray(t.install))throw new aR(e,t.install);if("command"in t.install&&typeof t.install.command!="string")throw new cR(e,t.install.command);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new lR(e,t.install.timeout)}}async function J2(e){if(!e.payload&&!e.packageIdentifier)throw new Error("Either payload or package must be provided");if(e.payload&&e.packageIdentifier)throw new Error("Both payload and package cannot be provided");let t,r;if(e.payload)r=K2.Readable.from(e.payload instanceof Buffer?e.payload:Buffer.from(e.payload,"base64"));else{let s=(0,Qn.dirname)(e.dirPath);if(e.packageIdentifier.startsWith("file:")){let i=e.packageIdentifier.slice(5);try{let o=await(0,ct.stat)(i);if(o.isDirectory()){await(0,ct.symlink)(i,e.dirPath,"dir");return}if(!o.isFile())throw new Error(`File path specified in package identifier is not a file or directory: ${i}`);t=i,r=(0,Ca.createReadStream)(t)}catch(o){throw o.code==="ENOENT"?new Error(`File path specified in package identifier does not exist: ${i}`):o}}else{let{stdout:i,code:o,stderr:c}=await hE(e.name,"npm",["pack",e.packageIdentifier],s);if(o!==0)throw new Error(`Failed to download package ${e.packageIdentifier}: ${c}`);t=(0,Qn.join)(s,i.trim()),r=(0,Ca.createReadStream)(t)}}try{await(0,ct.access)(e.dirPath,ct.constants.F_OK),await(0,ct.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,ct.mkdir)(e.dirPath,{recursive:!0}),await(0,Y2.pipeline)(r,(0,j2.default)(),(0,W2.extract)(e.dirPath));let n=await(0,ct.readdir)(e.dirPath,{withFileTypes:!0});if(n.length===1&&n[0].isDirectory()){let s=(0,Qn.join)(e.dirPath,n[0].name),i=await(0,ct.mkdtemp)(e.dirPath);await(0,ct.cp)(s,i,{recursive:!0}),await(0,ct.rm)(s,{recursive:!0,force:!0}),await(0,ct.cp)(i,e.dirPath,{recursive:!0}),await(0,ct.rm)(i,{recursive:!0,force:!0})}t&&await(0,ct.rm)(t,{force:!0})}async function Q2(e){let t;try{t=JSON.parse(await(0,ct.readFile)((0,Qn.join)(e.dirPath,"package.json"),"utf8"))}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,ct.access)((0,Qn.join)(e.dirPath,"node_modules"),ct.constants.F_OK),e.logger.debug(`Application ${e.name} already has node_modules; skipping install`);return}catch(i){if(i.code!=="ENOENT")throw i}if(e.install?.command){let[i,...o]=e.install.command.split(" "),{stderr:c,code:l}=await hE(e.name,i,o,e.dirPath,e.install?.timeout);if(l===0)return;throw Kf(e.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using custom install command: ${e.install.command}. Exit code: ${l}`)}let{packageManager:r}=t.devEngines||{};if(r){let i=r.onFail,o=["ignore","warn","error"];i==="download"?(e.logger.warn('Harper currently does not support `devEngines.packageManager.onFail = "download"`. Defaulting to "error"'),i="error"):i&&!o.includes(i)&&(e.logger.error(`Invalid \`devEngines.packageManager.onFail\` value: "${i}". Expected one of ${o.map(u=>`"${u}"`).join(", ")}. Defaulting to "error"`),i="error"),i=i||"error";let{stderr:c,code:l}=await hE(e.name,r.name,["install"],e.dirPath,e.install?.timeout);if(l===0)return;if(i==="error")throw Kf(r.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`);i==="warn"&&(Kf(r.name,c,"warn"),e.logger.warn(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`))}let{stderr:n,code:s}=await hE(e.name,"npm",["install","--force"],e.dirPath);if(s!==0)throw Kf(e.name,n,"error"),new Error(`Failed to install dependencies for ${e.name} using npm default. Exit code: ${s}`)}function X2(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,Qn.extname)(e)||(0,Ca.existsSync)(e)?`file:${e}`:`github:${e}`}function Z2(e){return J2(e).then(()=>Q2(e))}async function kTe(){let e=(0,mu.getConfigObj)(),t=(0,mu.getConfigValue)(x.COMPONENTSROOT);await(0,ct.mkdir)(t,{recursive:!0});let r=(0,Qn.join)((0,mu.getConfigValue)(x.ROOTPATH),"harper-application-lock.json"),n={application:{}};try{n=JSON.parse(await(0,ct.readFile)(r,"utf8"))}catch(o){if(o.code!=="ENOENT")throw o}let s=[];for(let[o,c]of Object.entries(e)){if(typeof c!="object"||c===null||!("package"in c))continue;z2(o,c);let l=new uR({name:o,packageIdentifier:c.package,install:c.install});if((0,Ca.existsSync)(l.dirPath)&&n.applications[o]&&JSON.stringify(n.applications[o])===JSON.stringify(c)){Na.default.info(`Application ${o} is already installed with matching configuration; skipping installation`);continue}s.push(Z2(l)),n.applications[o]=c}let i=await Promise.allSettled(s);Na.default.debug(i),Na.default.info("All root applications loaded"),await(0,ct.writeFile)(r,JSON.stringify(n,null,2),"utf8")}function HTe(){let e=(0,mu.getConfigValue)(x.ROOTPATH),t=(0,Qn.join)(e,"ssh");if((0,Ca.existsSync)(t)){for(let r of(0,Ca.readdirSync)(t))if(r.includes(".key"))return`ssh -F ${(0,Qn.join)(t,"config")} -o UserKnownHostsFile=${(0,Qn.join)(t,"known_hosts")}`}}function hE(e,t,r,n,s=300*1e3){return new Promise((i,o)=>{Na.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c={...process.env},l=HTe();l&&(c.GIT_SSH_COMMAND=l);let u=(0,V2.spawn)(t,r,{shell:!0,cwd:n,env:c,stdio:["ignore","pipe","pipe"]}),d=setTimeout(()=>{u.kill(),o(new Error(`Command\`${t} ${r.join(" ")}\` timed out after ${s}ms`))},s),f="";u.stdout.on("data",p=>{f+=p.toString(),Na.default.loggerWithTag(`${e}:spawn:${t}:stdout`).debug(p.toString())});let m="";u.stderr.on("data",p=>{m+=p.toString()}),u.on("error",p=>{clearTimeout(d),m&&Kf(e,t,m),o(p)}),u.on("close",p=>{clearTimeout(d),m&&Kf(e,t,m),Na.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Process exited with code ${p}`),i({stdout:f,stderr:m,code:p})})})}function Kf(e,t,r,n="debug"){let s=Na.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
120
- `))s[n](i)}var mu,Na,Qn,ct,V2,Ca,K2,Y2,W2,j2,oR,aR,cR,lR,uR,fR=se(()=>{mu=b(gt());G();Na=b(Q()),Qn=require("node:path"),ct=require("node:fs/promises"),V2=require("node:child_process"),Ca=require("node:fs"),K2=require("node:stream"),Y2=require("node:stream/promises"),W2=require("tar-fs"),j2=b(require("gunzip-maybe")),oR=class extends TypeError{static{a(this,"InvalidPackageIdentifierError")}constructor(t,r){super(`Invalid 'package' property for application ${t}: expected string, got ${typeof r}`)}},aR=class extends TypeError{static{a(this,"InvalidInstallPropertyError")}constructor(t,r){super(`Invalid 'install' property for application ${t}: expected object, got ${typeof r}`)}},cR=class extends TypeError{static{a(this,"InvalidInstallCommandError")}constructor(t,r){super(`Invalid 'install.command' property for application ${t}: expected string, got ${typeof r}`)}},lR=class extends TypeError{static{a(this,"InvalidInstallTimeoutError")}constructor(t,r){super(`Invalid 'install.timeout' property for application ${t}: expected non-negative number, got ${typeof r}`)}};a(z2,"assertApplicationConfig");a(J2,"extractApplication");a(Q2,"installApplication");uR=class{static{a(this,"Application")}name;payload;packageIdentifier;install;dirPath;logger;constructor({name:t,payload:r,packageIdentifier:n,install:s}){this.name=t,this.payload=r,this.packageIdentifier=n&&X2(n),this.install=s,this.dirPath=(0,Qn.join)((0,mu.getConfigValue)(x.COMPONENTSROOT),t),this.logger=Na.default.loggerWithTag(t)}};a(X2,"derivePackageIdentifier");a(Z2,"prepareApplication");a(kTe,"installApplications");a(HTe,"getGitSSHCommand");a(hE,"nonInteractiveSpawn");a(Kf,"printStderr")});var cD=M(er=>{"use strict";var ke=require("node:path"),{isMainThread:GTe}=require("node:worker_threads"),Le=require("fs-extra"),oD=require("fast-glob"),aD=require("normalize-path"),wn=F2(),Kt=Q(),Mt=(G(),v(j)),Rr=fe(),mR=gt(),qTe=ae(),{PACKAGE_ROOT:$Te}=yt(),{handleHDBError:Yt,hdbErrors:VTe}=Ee(),eGe=fe(),{HDB_ERROR_MSGS:pu,HTTP_STATUS_CODES:Wt}=VTe,e4=st(),{replicateOperation:Ci}=(Ss(),v(sa)),{packageDirectory:KTe}=($2(),v(q2)),tGe=ke.join($Te,"application-template"),YTe=Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),wo=ke.join(YTe,"ssh"),Oa=ke.join(wo,"known_hosts"),{Resources:WTe}=(tc(),v(TI)),{Application:t4,prepareApplication:r4}=(fR(),v(dR));function jTe(){Kt.trace("getting custom api status");let e={};try{e={port:Rr.get(Mt.CONFIG_PARAMS.HTTP_PORT),directory:Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Yt(new Error,pu.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,t)}return e}a(jTe,"customFunctionsStatus");function zTe(){Kt.trace("getting custom api endpoints");let e={},t=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT);try{oD.sync(aD(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:oD.sync(aD(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:oD.sync(aD(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Yt(new Error,pu.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,r)}return e}a(zTe,"getCustomFunctions");function JTe(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=wn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("getting custom api endpoint file content");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ke.join(r,n,s,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Yt(new Error,pu.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(JTe,"getCustomFunction");async function QTe(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=wn.setCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("setting custom function file content");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Le.outputFileSync(ke.join(r,n,s,i+".js"),o);let c=await Ci(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Yt(new Error,pu.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(QTe,"setCustomFunction");async function XTe(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=wn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function file");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Le.unlinkSync(ke.join(r,n,s,i+".js"));let o=await Ci(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Yt(new Error,pu.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,o)}}a(XTe,"dropCustomFunction");async function ZTe(e){e.project&&(e.project=ke.parse(e.project).name);let t=wn.addComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("adding component");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,install_command:s,install_timeout:i}=e,o=e.template||"https://github.com/harperdb/application-template";try{let c=ke.join(r,n);Le.mkdirSync(c,{recursive:!0});let l=new t4({name:n,packageIdentifier:o,install:{command:s,timeout:i}});await r4(l);let u=await Ci(e);return u.message=`Successfully added project: ${n}`,u}catch(c){throw Yt(new Error,pu.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(ZTe,"addComponent");async function eye(e){e.project&&(e.project=ke.parse(e.project).name);let t=wn.dropCustomFunctionProjectValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function project");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Rr.get(Mt.CONFIG_PARAMS.APPS);if(!qTe.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return mR.updateConfigValue(Mt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ke.join(r,n);Le.rmSync(i,{recursive:!0});let o=await Ci(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Yt(new Error,pu.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,i)}}a(eye,"dropCustomFunctionProject");async function tye(e){e.project&&(e.project=ke.parse(e.project).name);let t=wn.packageComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Kt.trace("packaging component",n);let s;try{s=await Le.realpath(ke.join(r,n))}catch(o){if(o.code!==Mt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Le.realpath(ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Mt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await KTe(s,e)).toString("base64");return{project:n,payload:i}}a(tye,"packageComponent");async function rye(e){e.project?e.project=ke.parse(e.project).name:e.package&&(e.project=nye(e.package));let t=wn.deployComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);if(e.package){let l={package:e.package};(e.install_command||e.install_timeout)&&(l.install={command:e.install_command,timeout:e.install_timeout}),await mR.addConfig(e.project,l)}let r=new t4({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await r4(r),GTe)return;let n=new WTe;n.isWorker=!0;let s=(oE(),v(jy)),i;if(s.setErrorReporter(l=>i=l),await s.loadComponent(r.dirPath,n),i)throw i;let o=e.restart==="rolling";e.restart=o?!1:e.restart;let c=await Ci(e);if(e.restart===!0)e4.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(o){let u=await(uD(),v(lD)).executeJob({operation:"restart_service",service:"http",replicated:!0});c.restartJobId=u.job_id,c.message=`Successfully deployed: ${r.name}, restarting HarperDB`}else c.message=`Successfully deployed: ${r.name}`;return c}a(rye,"deployComponent");function nye(e){if(e.startsWith("git+ssh://"))return ke.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return ke.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Le.readFileSync(ke.join(e,"package.json"),"utf8"));return ke.basename(t)}catch{}return ke.basename(e)}a(nye,"getProjectNameFromPackage");async function sye(){let e=mR.getConfiguration(),t=a(async(i,o)=>{try{let c=await Le.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=ke.join(i,u);if(l.isDirectory()||l.isSymbolicLink()){let f={name:u,entries:[]};o.entries.push(f),await t(d,f)}else{let f=await Le.stat(d),m={name:ke.basename(u),mtime:f.mtime,size:f.size};o.entries.push(m)}}return o}catch(c){return Kt.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{name:Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT).split(ke.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let o=e[i.name]?.package;o&&(i.package=o)}let{internal:n}=(Gp(),v(HN)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){Kt.debug(`Failed to get component status from threads: ${i.message}`)}for(let i of r.entries)try{i.status=await n.componentStatusRegistry.getAggregatedStatusFor(i.name,s)}catch(o){Kt.debug(`Failed to get aggregated status for component ${i.name}: ${o.message}`),i.status={status:"unknown",message:"Failed to retrieve component status",lastChecked:{workers:{}}}}return r}a(sye,"getComponents");async function iye(e){let t=wn.getComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let s=await Le.stat(ke.join(r,e.project,e.file));return{message:await Le.readFile(ke.join(r,e.project,e.file),n),size:s.size,birthtime:s.birthtime,mtime:s.mtime}}catch(s){throw s.code===Mt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ke.join(e.project,e.file)}'`):s}}a(iye,"getComponentFile");async function oye(e){let t=wn.setComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ke.join(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Le.ensureFile(n),await Le.outputFile(n,e.payload,r)):await Le.ensureDir(n);let s=await Ci(e);return s.message="Successfully set component: "+e.file,s}a(oye,"setComponentFile");async function aye(e){let t=wn.dropComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?ke.join(r,n):r,i=ke.join(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),s),o=ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Le.pathExists(o)&&await Le.unlink(o),await Le.pathExists(i)&&await Le.remove(i);let c=ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Le.pathExists(c)){let u=JSON.parse(await Le.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Le.writeFile(c,JSON.stringify(u,null,2),"utf8")}mR.deleteConfigFromFile([r]);let l=await Ci(e);return e.restart===!0?(e4.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(aye,"dropComponent");async function cye(e){let t=wn.addSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Kt.trace("adding ssh key",r);let c=ke.join(wo,r+".key"),l=ke.join(wo,"config");if(await Le.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Le.outputFile(c,n),await Le.chmod(c,"0600");let u=`#${r}
118
+ `;console.log(n),Ae.get(xe.LOGGING_STDSTREAMS)&&ur.logsAtLevel("info")&&ur.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(BSe,"startupLog")});var Vf=M((MHe,f2)=>{"use strict";var FSe=require("minimist"),{isMainThread:QL,parentPort:uE,threadId:LHe}=require("worker_threads"),Vt=(G(),v(j)),Ni=Q(),kSe=ae(),tR=my(),jL=Sr(),DHe=Pt(),HSe=gt(),uu=wf(),a2=vh(),{compactOnStart:GSe}=(qP(),v(GP)),vHe=tl(),{restartWorkers:JL,onMessageByType:qSe,shutdownWorkersNow:$Se}=st(),{handleHDBError:VSe,hdbErrors:KSe}=Ee(),{HTTP_STATUS_CODES:YSe}=KSe,dE=fe(),{sendOperationToNode:c2,getThisNodeName:WSe,monitorNodeCAs:jSe}=(Ss(),v(ia)),zSe=require("node:path"),{unlinkSync:JSe}=require("node:fs");dE.initSync();var zL=`Restarting HarperDB. This may take up to ${Vt.RESTART_TIMEOUT_MS/1e3} seconds.`,l2="Clustering is not enabled so cannot be restarted",QSe="Invalid service",wa;f2.exports={restart:d2,restartService:XL};QL&&qSe(Vt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await XL({service:e.workerType}):d2({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function d2(e){wa=Object.keys(e).length===0;let t=FSe(process.argv);if(t.service){await XL(t);return}if(wa){let r=uu.getHdbPid();return console.error(r?"Restarting Harper...":"Starting Harper..."),Wy().launch(!0),zL}return QL?(Ni.notify(zL),dE.get(Vt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await GSe(),process.env.HARPER_EXIT_ON_RESTART&&(Ni.warn("Exiting Harper process to trigger a container restart"),process.exit(0)),setTimeout(async()=>{Ni.debug("Shutdown workers"),await $Se(),await uu.cleanupChildrenProcesses(!1),await JSe(zSe.join(dE.get(Vt.CONFIG_PARAMS.ROOTPATH),Vt.HDB_PID_FILE),`${process.pid}`),Ni.debug("Starting new process..."),Wy().launch(!0)},50)):uE.postMessage({type:Vt.ITC_EVENT_TYPES.RESTART}),zL}a(d2,"restart");async function XL(e){let{service:t}=e;if(Vt.HDB_PROCESS_SERVICES[t]===void 0)throw VSe(new Error,QSe,YSe.BAD_REQUEST,void 0,void 0,!0);if(uu.expectedRestartOfChildren(),!QL){e.replicated&&jSe(),uE.postMessage({type:Vt.ITC_EVENT_TYPES.RESTART,workerType:t}),uE.ref(),await new Promise(s=>{uE.on("message",i=>{i.type==="restart-complete"&&(s(),uE.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===WSe())continue;let i;try{({job_id:i}=await c2(s,e))}catch(o){n.push({node:s.name,message:o.message});continue}n.push(await new Promise((o,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let p=new Error("Timed out waiting for restart job to complete");p.replicated=n,c(p)}let m=(await c2(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),o({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let p=new Error(m.message);p.replicated=n,c(p)}},250)}))}return{replicated:n}}return}let r;switch(t){case Vt.HDB_PROCESS_SERVICES.clustering:if(!dE.get(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=l2;break}wa&&console.log("Restarting clustering"),Ni.notify("Restarting clustering"),await XSe();break;case Vt.HDB_PROCESS_SERVICES.clustering_config:case Vt.HDB_PROCESS_SERVICES["clustering config"]:if(!dE.get(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=l2;break}wa&&console.log("Restarting clusteringConfig"),Ni.notify("Restarting clustering_config"),await uu.reloadClustering();break;case"custom_functions":case"custom functions":case Vt.HDB_PROCESS_SERVICES.harperdb:case Vt.HDB_PROCESS_SERVICES.http_workers:case Vt.HDB_PROCESS_SERVICES.http:wa&&console.log("Restarting httpWorkers"),Ni.notify("Restarting http_workers"),wa?await uu.restart(Vt.PROCESS_DESCRIPTORS.HDB):await JL("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Ni.error(r),wa&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(XL,"restartService");async function XSe(){if(!HSe.getConfigFromFile(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await a2.getHDBProcessInfo()).clustering.length===0)Ni.trace("Clustering not running, restart will start clustering services"),await tR.generateNatsConfig(!0),await uu.startClusteringProcesses(),await uu.startClusteringThreads(),await u2(),wa&&await jL.closeConnection();else{await tR.generateNatsConfig(!0),(await a2.getHDBProcessInfo()).clustering.forEach(s=>{Ni.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await kSe.asyncSetTimeout(3e3),await u2(),await jL.updateLocalStreams(),wa&&await jL.closeConnection(),Ni.trace("Restart clustering restarting ingest and reply service threads");let r=JL(Vt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),n=JL(Vt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await r,await n}}a(XSe,"restartClustering");async function u2(){await tR.removeNatsConfig(Vt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await tR.removeNatsConfig(Vt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(u2,"removeNatsConfig")});var b2=M((BHe,R2)=>{"use strict";var xHe=require("lodash"),zn=(G(),v(j)),{handleHDBError:m2,hdbErrors:ZSe}=Ee(),{HDB_ERROR_MSGS:eTe,HTTP_STATUS_CODES:tTe}=ZSe,ZL=Q();R2.exports={getRolePermissions:nTe};var du=Object.create(null),rTe=a(e=>({key:e,perms:{}}),"permsTemplateObj"),_2=a((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),g2=a((e=!1,t=!1,r=!1,n=!1)=>({[zn.PERMS_CRUD_ENUM.READ]:e,[zn.PERMS_CRUD_ENUM.INSERT]:t,[zn.PERMS_CRUD_ENUM.UPDATE]:r,[zn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),eD=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...g2(t,r,n,s)}),"tablePermsTemplate"),p2=a((e,t=g2())=>({attribute_name:e,describe:y2(t),[fE]:t[fE],[tD]:t[tD],[rD]:t[rD]}),"attrPermsTemplate"),h2=a((e,t=!1)=>({attribute_name:e,describe:t,[fE]:t}),"timestampAttrPermsTemplate"),{READ:fE,INSERT:tD,UPDATE:rD}=zn.PERMS_CRUD_ENUM,S2=Object.values(zn.PERMS_CRUD_ENUM),T2=[fE,tD,rD];function nTe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[zn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(du[t]&&du[t].key===n)return du[t].perms;let s=sTe(e,r);return du[t]?du[t].key=n:du[t]=rTe(n),du[t].perms=s,s}catch(r){if(!e[zn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[zn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<zn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${role_name}' must be updated to align with new structure from the 2.2.0 release.`;throw ZL.error(n),ZL.debug(r),m2(new Error,eTe.OUTDATED_PERMS_TRANSLATION_ERROR,tTe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
119
+ ${r.stack}`;throw ZL.error(n),m2(new Error)}}}a(nTe,"getRolePermissions");function sTe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[zn.SYSTEM_SCHEMA_NAME]=n[zn.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]=iTe(t[i]);return}r[i]=_2(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=oTe(c,l);r[i].describe||S2.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=eD()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=eD()})}),r}a(sTe,"translateRolePermissions");function iTe(e){let t=_2(!0);return Object.keys(e).forEach(r=>{t.tables[r]=eD(!0,!0,!0,!0,!0)}),t}a(iTe,"createStructureUserPermissions");function oTe(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 zn.TIME_STAMP_NAMES.includes(f)&&(m=h2(f,d[fE])),u[f]=m,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=p2(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=y2(d),s.attribute_permissions.push(d),c||aTe(d,l)}else if(u!==o){let d;zn.TIME_STAMP_NAMES.includes(u)?d=h2(u):d=p2(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=E2(s),s}else return e.describe=E2(e),e}a(oTe,"getTableAttrPerms");function E2(e){return S2.filter(t=>e[t]).length>0}a(E2,"getSchemaTableDescribePerm");function y2(e){return T2.filter(t=>e[t]).length>0}a(y2,"getAttributeDescribePerm");function aTe(e,t){T2.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(aTe,"checkForHashPerms")});var mE={};ye(mE,{authentication:()=>L2,bypassAuth:()=>STe,login:()=>sD,logout:()=>iD,start:()=>TTe});function STe(){P2=!0}async function L2(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let p=e.isOperationsServer?hTe?pTe:[]:mTe?fTe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=An.get(x.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Hs([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return nR&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}o.push("Access-Control-Allow-Origin",i),nR&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(nR){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let _=E.indexOf(";");l=E.slice(p.length,_===-1?E.length:_),u=await A2.get(l);break}e.session=u||(u={})}let d=a((p,h,E)=>{let _=new lTe(p,h,Ka.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);_.auth_strategy=E,l&&(_.session_id=l),r.referer&&(_.referer=r.referer),r.origin&&(_.origin=r.origin),h===oi.SUCCESS?rR.info?.(_):rR.error?.(_)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&rR.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await lf(e.peerCertificate,e.mtlsConfig);if(!p.valid)return rR.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Ho({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Ue.getUser(h,null,e),d(h,oi.SUCCESS,"mTLS")):dTe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=fu.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),_,R;try{switch(h){case"Basic":let S=atob(E),y=S.indexOf(":");_=S.slice(0,y),R=S.slice(y+1),f=_||R?await Ue.getUser(_,R,e):null;break;case"Bearer":try{f=await NC(E)}catch(w){if(w.message==="invalid token")try{return await JS(E),c({status:-1})}catch{throw w}}break}}catch(S){return _Te&&(fu.get(E)||(fu.set(E,E),d(_,oi.FAILURE,h))),c({status:401,body:Ho({error:S.message},e)})}fu.set(n,f),ETe&&d(f.username,oi.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):(P2&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await Fp());nR&&(e.session.update=function(p){let h=An.get(x.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,w2.v4)();let _=An.get(x.AUTHENTICATION_COOKIE_DOMAINS),R=h?new Date(Date.now()+(0,nD.convertToMS)(h)).toUTCString():gTe,S=r.host&&_?.find(I=>{I.startsWith(".")&&(I=I.slice(1));let H=r.host.indexOf(":");return(H!==-1?r.host.slice(0,H):r.host).endsWith(I)}),w=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;S&&(w+=`; Domain=${S}`),E&&(w+="; SameSite=None; Secure"),o?o.push("Set-Cookie",w):m?.headers?.set&&m.headers.set("Set-Cookie",w)}return E&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,A2.put(p,{expiresAt:h?Date.now()+(0,nD.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Ue.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&xs.loginPath?(m.status=302,m.headers.set("Location",xs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let d=l.headers;d||(l.headers=d=new Hs);for(let f=0;f<u;){let m=o[f++];d.set(m,o[f++])}}return o=null,l}a(c,"applyResponseHeaders")}function TTe({server:e,port:t,securePort:r}){e.http(L2,t||r?{port:t,securePort:r}:{port:"all"}),I2||(I2=!0,setInterval(()=>{fu=new Map},An.get(x.AUTHENTICATION_CACHETTL)).unref(),uTe.addListener(()=>{fu=new Map}))}async function sD(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 iD(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var w2,An,N2,C2,nD,cTe,lTe,uTe,O2,dTe,rR,fTe,mTe,pTe,hTe,A2,nR,P2,ETe,_Te,gTe,fu,I2,sR=se(()=>{Es();Hr();tc();Kd();Oe();w2=require("uuid"),An=b(fe());G();N2=b(Q()),C2=b($p());Yp();nD=b(ae());MT();qo();({forComponent:cTe,AuthAuditLog:lTe}=N2.default),{user:uTe}=C2.default,O2=cTe("authentication"),{debug:dTe}=O2,rR=O2.withTag("auth-event");An.initSync();fTe=An.get(x.HTTP_CORSACCESSLIST),mTe=An.get(x.HTTP_CORS),pTe=An.get(x.OPERATIONSAPI_NETWORK_CORSACCESSLIST),hTe=An.get(x.OPERATIONSAPI_NETWORK_CORS),A2=ze({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),nR=An.get(x.AUTHENTICATION_ENABLESESSIONS)??!0,P2=process.env.AUTHENTICATION_AUTHORIZELOCAL??An.get(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,ETe=An.get(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,_Te=An.get(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,gTe="Tue, 01 Oct 8307 19:33:20 GMT",fu=new Map;Ue.onInvalidatedUser(()=>{fu=new Map});a(STe,"bypassAuth");a(L2,"authentication");a(TTe,"start");a(sD,"login");a(iD,"logout")});var F2=M((zHe,B2)=>{"use strict";var Ie=require("joi"),D2=require("fs-extra"),v2=require("path"),Jn=mt(),M2=fe(),U2=(G(),v(j)),x2=Q(),{hdbErrors:yTe}=Ee(),{HDB_ERROR_MSGS:In}=yTe,Na=/^[a-zA-Z0-9-_]+$/,RTe=/^[a-zA-Z0-9-_]+$/;B2.exports={getDropCustomFunctionValidator:ATe,setCustomFunctionValidator:ITe,addComponentValidator:OTe,dropCustomFunctionProjectValidator:PTe,packageComponentValidator:LTe,deployComponentValidator:DTe,setComponentFileValidator:wTe,getComponentFileValidator:CTe,dropComponentFileValidator:NTe,addSSHKeyValidator:vTe,getSSHKeyValidator:MTe,updateSSHKeyValidator:UTe,deleteSSHKeyValidator:xTe,setSSHKnownHostsValidator:BTe};function iR(e,t,r){try{let n=M2.get(U2.CONFIG_PARAMS.COMPONENTSROOT),s=v2.join(n,t);return D2.existsSync(s)?e?t:r.message(In.PROJECT_EXISTS):e?r.message(In.NO_PROJECT):t}catch(n){return x2.error(n),r.message(In.VALIDATION_ERR)}}a(iR,"checkProjectExists");function pE(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(pE,"checkFilePath");function bTe(e,t,r,n){try{let s=M2.get(U2.CONFIG_PARAMS.COMPONENTSROOT),i=v2.join(s,e,t,r+".js");return D2.existsSync(i)?r:n.message(In.NO_FILE)}catch(s){return x2.error(s),n.message(In.VALIDATION_ERR)}}a(bTe,"checkFileExists");function ATe(e){let t=Ie.object({project:Ie.string().pattern(Na).custom(iR.bind(null,!0)).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Na).custom(bTe.bind(null,e.project,e.type)).custom(pE).required().messages({"string.pattern.base":In.BAD_FILE_NAME})});return Jn.validateBySchema(e,t)}a(ATe,"getDropCustomFunctionValidator");function ITe(e){let t=Ie.object({project:Ie.string().pattern(Na).custom(iR.bind(null,!0)).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(pE).required(),function_content:Ie.string().required()});return Jn.validateBySchema(e,t)}a(ITe,"setCustomFunctionValidator");function wTe(e){let t=Ie.object({project:Ie.string().pattern(Na).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),file:Ie.string().custom(pE).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(wTe,"setComponentFileValidator");function NTe(e){let t=Ie.object({project:Ie.string().pattern(Na).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),file:Ie.string().custom(pE).optional()});return Jn.validateBySchema(e,t)}a(NTe,"dropComponentFileValidator");function CTe(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(pE).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(CTe,"getComponentFileValidator");function OTe(e){let t=Ie.object({project:Ie.string().pattern(Na).custom(iR.bind(null,!1)).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),template:Ie.string().optional(),install_command:Ie.string().optional(),install_timeout:Ie.number().optional()});return Jn.validateBySchema(e,t)}a(OTe,"addComponentValidator");function PTe(e){let t=Ie.object({project:Ie.string().pattern(Na).custom(iR.bind(null,!0)).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(PTe,"dropCustomFunctionProjectValidator");function LTe(e){let t=Ie.object({project:Ie.string().pattern(Na).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean(),skip_symlinks:Ie.boolean()});return Jn.validateBySchema(e,t)}a(LTe,"packageComponentValidator");function DTe(e){let t=Ie.object({project:Ie.string().pattern(Na).required().messages({"string.pattern.base":In.BAD_PROJECT_NAME}),package:Ie.string().optional(),restart:Ie.alternatives().try(Ie.boolean(),Ie.string().valid("rolling")).optional(),install_command:Ie.string().optional(),install_timeout:Ie.number().optional()});return Jn.validateBySchema(e,t)}a(DTe,"deployComponentValidator");function vTe(e){let t=Ie.object({name:Ie.string().pattern(RTe).required().messages({"string.pattern.base":In.BAD_SSH_KEY_NAME}),key:Ie.string().required(),host:Ie.string().required(),hostname:Ie.string().required(),known_hosts:Ie.string().optional()});return Jn.validateBySchema(e,t)}a(vTe,"addSSHKeyValidator");function MTe(e){let t=Ie.object({name:Ie.string().required()});return Jn.validateBySchema(e,t)}a(MTe,"getSSHKeyValidator");function UTe(e){let t=Ie.object({name:Ie.string().required(),key:Ie.string().required()});return Jn.validateBySchema(e,t)}a(UTe,"updateSSHKeyValidator");function xTe(e){let t=Ie.object({name:Ie.string().required()});return Jn.validateBySchema(e,t)}a(xTe,"deleteSSHKeyValidator");function BTe(e){let t=Ie.object({known_hosts:Ie.string().required()});return Jn.validateBySchema(e,t)}a(BTe,"setSSHKnownHostsValidator")});var q2={};ye(q2,{packageDirectory:()=>FTe});function FTe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];H2.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,k2.join)("cache","webpack")):void 0,map:a(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,G2.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var k2,H2,G2,$2=se(()=>{k2=require("path"),H2=b(require("tar-fs")),G2=require("node:zlib");a(FTe,"packageDirectory")});var dR={};ye(dR,{Application:()=>uR,InvalidInstallCommandError:()=>cR,InvalidInstallPropertyError:()=>aR,InvalidInstallTimeoutError:()=>lR,InvalidPackageIdentifierError:()=>oR,assertApplicationConfig:()=>z2,derivePackageIdentifier:()=>X2,extractApplication:()=>J2,installApplication:()=>Q2,installApplications:()=>kTe,nonInteractiveSpawn:()=>hE,prepareApplication:()=>Z2});function z2(e,t){if(typeof t.package!="string")throw new oR(e,t.package);if("install"in t){if(typeof t.install!="object"||t.install===null||Array.isArray(t.install))throw new aR(e,t.install);if("command"in t.install&&typeof t.install.command!="string")throw new cR(e,t.install.command);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new lR(e,t.install.timeout)}}async function J2(e){if(!e.payload&&!e.packageIdentifier)throw new Error("Either payload or package must be provided");if(e.payload&&e.packageIdentifier)throw new Error("Both payload and package cannot be provided");let t,r;if(e.payload)r=K2.Readable.from(e.payload instanceof Buffer?e.payload:Buffer.from(e.payload,"base64"));else{let s=(0,Qn.dirname)(e.dirPath);if(e.packageIdentifier.startsWith("file:")){let i=e.packageIdentifier.slice(5);try{let o=await(0,ct.stat)(i);if(o.isDirectory()){await(0,ct.symlink)(i,e.dirPath,"dir");return}if(!o.isFile())throw new Error(`File path specified in package identifier is not a file or directory: ${i}`);t=i,r=(0,Ca.createReadStream)(t)}catch(o){throw o.code==="ENOENT"?new Error(`File path specified in package identifier does not exist: ${i}`):o}}else{let{stdout:i,code:o,stderr:c}=await hE(e.name,"npm",["pack",e.packageIdentifier],s);if(o!==0)throw new Error(`Failed to download package ${e.packageIdentifier}: ${c}`);t=(0,Qn.join)(s,i.trim()),r=(0,Ca.createReadStream)(t)}}try{await(0,ct.access)(e.dirPath,ct.constants.F_OK),await(0,ct.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,ct.mkdir)(e.dirPath,{recursive:!0}),await(0,Y2.pipeline)(r,(0,j2.default)(),(0,W2.extract)(e.dirPath));let n=await(0,ct.readdir)(e.dirPath,{withFileTypes:!0});if(n.length===1&&n[0].isDirectory()){let s=(0,Qn.join)(e.dirPath,n[0].name),i=await(0,ct.mkdtemp)(e.dirPath);await(0,ct.cp)(s,i,{recursive:!0}),await(0,ct.rm)(s,{recursive:!0,force:!0}),await(0,ct.cp)(i,e.dirPath,{recursive:!0}),await(0,ct.rm)(i,{recursive:!0,force:!0})}t&&await(0,ct.rm)(t,{force:!0})}async function Q2(e){let t;try{t=JSON.parse(await(0,ct.readFile)((0,Qn.join)(e.dirPath,"package.json"),"utf8"))}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,ct.access)((0,Qn.join)(e.dirPath,"node_modules"),ct.constants.F_OK),e.logger.debug(`Application ${e.name} already has node_modules; skipping install`);return}catch(i){if(i.code!=="ENOENT")throw i}if(e.install?.command){let[i,...o]=e.install.command.split(" "),{stderr:c,code:l}=await hE(e.name,i,o,e.dirPath,e.install?.timeout);if(l===0)return;throw Kf(e.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using custom install command: ${e.install.command}. Exit code: ${l}`)}let{packageManager:r}=t.devEngines||{};if(r){let i=r.onFail,o=["ignore","warn","error"];i==="download"?(e.logger.warn('Harper currently does not support `devEngines.packageManager.onFail = "download"`. Defaulting to "error"'),i="error"):i&&!o.includes(i)&&(e.logger.error(`Invalid \`devEngines.packageManager.onFail\` value: "${i}". Expected one of ${o.map(u=>`"${u}"`).join(", ")}. Defaulting to "error"`),i="error"),i=i||"error";let{stderr:c,code:l}=await hE(e.name,r.name,["install"],e.dirPath,e.install?.timeout);if(l===0)return;if(i==="error")throw Kf(r.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`);i==="warn"&&(Kf(r.name,c,"warn"),e.logger.warn(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`))}let{stderr:n,code:s}=await hE(e.name,"npm",["install","--force"],e.dirPath);if(s!==0)throw Kf(e.name,n,"error"),new Error(`Failed to install dependencies for ${e.name} using npm default. Exit code: ${s}`)}function X2(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,Qn.extname)(e)||(0,Ca.existsSync)(e)?`file:${e}`:`github:${e}`}function Z2(e){return J2(e).then(()=>Q2(e))}async function kTe(){let e=(0,mu.getConfigObj)(),t=(0,mu.getConfigValue)(x.COMPONENTSROOT);await(0,ct.mkdir)(t,{recursive:!0});let r=(0,Qn.join)((0,mu.getConfigValue)(x.ROOTPATH),"harper-application-lock.json"),n={applications:{}};try{n=JSON.parse(await(0,ct.readFile)(r,"utf8"))}catch(o){if(o.code!=="ENOENT")throw o}let s=[];for(let[o,c]of Object.entries(e))if(!(typeof c!="object"||c===null||!("package"in c)))try{z2(o,c);let l=new uR({name:o,packageIdentifier:c.package,install:c.install});if((0,Ca.existsSync)(l.dirPath)&&n.applications[o]&&JSON.stringify(n.applications[o])===JSON.stringify(c)){wo.default.info(`Application ${o} is already installed with matching configuration; skipping installation`);continue}s.push(Z2(l)),n.applications[o]=c}catch(l){wo.default.error(`Skipping installation of application ${o} due to invalid configuration: ${l.message}`)}let i=await Promise.allSettled(s);wo.default.debug(i),wo.default.info("All root applications loaded"),await(0,ct.writeFile)(r,JSON.stringify(n,null,2),"utf8")}function HTe(){let e=(0,mu.getConfigValue)(x.ROOTPATH),t=(0,Qn.join)(e,"ssh");if((0,Ca.existsSync)(t)){for(let r of(0,Ca.readdirSync)(t))if(r.includes(".key"))return`ssh -F ${(0,Qn.join)(t,"config")} -o UserKnownHostsFile=${(0,Qn.join)(t,"known_hosts")}`}}function hE(e,t,r,n,s=300*1e3){return new Promise((i,o)=>{wo.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c={...process.env},l=HTe();l&&(c.GIT_SSH_COMMAND=l);let u=(0,V2.spawn)(t,r,{shell:!0,cwd:n,env:c,stdio:["ignore","pipe","pipe"]}),d=setTimeout(()=>{u.kill(),o(new Error(`Command\`${t} ${r.join(" ")}\` timed out after ${s}ms`))},s),f="";u.stdout.on("data",p=>{f+=p.toString(),wo.default.loggerWithTag(`${e}:spawn:${t}:stdout`).debug(p.toString())});let m="";u.stderr.on("data",p=>{m+=p.toString()}),u.on("error",p=>{clearTimeout(d),m&&Kf(e,t,m),o(p)}),u.on("close",p=>{clearTimeout(d),m&&Kf(e,t,m),wo.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Process exited with code ${p}`),i({stdout:f,stderr:m,code:p})})})}function Kf(e,t,r,n="debug"){let s=wo.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
120
+ `))s[n](i)}var mu,wo,Qn,ct,V2,Ca,K2,Y2,W2,j2,oR,aR,cR,lR,uR,fR=se(()=>{mu=b(gt());G();wo=b(Q()),Qn=require("node:path"),ct=require("node:fs/promises"),V2=require("node:child_process"),Ca=require("node:fs"),K2=require("node:stream"),Y2=require("node:stream/promises"),W2=require("tar-fs"),j2=b(require("gunzip-maybe")),oR=class extends TypeError{static{a(this,"InvalidPackageIdentifierError")}constructor(t,r){super(`Invalid 'package' property for application ${t}: expected string, got ${typeof r}`)}},aR=class extends TypeError{static{a(this,"InvalidInstallPropertyError")}constructor(t,r){super(`Invalid 'install' property for application ${t}: expected object, got ${typeof r}`)}},cR=class extends TypeError{static{a(this,"InvalidInstallCommandError")}constructor(t,r){super(`Invalid 'install.command' property for application ${t}: expected string, got ${typeof r}`)}},lR=class extends TypeError{static{a(this,"InvalidInstallTimeoutError")}constructor(t,r){super(`Invalid 'install.timeout' property for application ${t}: expected non-negative number, got ${typeof r}`)}};a(z2,"assertApplicationConfig");a(J2,"extractApplication");a(Q2,"installApplication");uR=class{static{a(this,"Application")}name;payload;packageIdentifier;install;dirPath;logger;constructor({name:t,payload:r,packageIdentifier:n,install:s}){this.name=t,this.payload=r,this.packageIdentifier=n&&X2(n),this.install=s,this.dirPath=(0,Qn.join)((0,mu.getConfigValue)(x.COMPONENTSROOT),t),this.logger=wo.default.loggerWithTag(t)}};a(X2,"derivePackageIdentifier");a(Z2,"prepareApplication");a(kTe,"installApplications");a(HTe,"getGitSSHCommand");a(hE,"nonInteractiveSpawn");a(Kf,"printStderr")});var cD=M(er=>{"use strict";var ke=require("node:path"),{isMainThread:GTe}=require("node:worker_threads"),Le=require("fs-extra"),oD=require("fast-glob"),aD=require("normalize-path"),wn=F2(),Kt=Q(),Mt=(G(),v(j)),Rr=fe(),mR=gt(),qTe=ae(),{PACKAGE_ROOT:$Te}=yt(),{handleHDBError:Yt,hdbErrors:VTe}=Ee(),eGe=fe(),{HDB_ERROR_MSGS:pu,HTTP_STATUS_CODES:Wt}=VTe,e4=st(),{replicateOperation:Ci}=(Ss(),v(ia)),{packageDirectory:KTe}=($2(),v(q2)),tGe=ke.join($Te,"application-template"),YTe=Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),No=ke.join(YTe,"ssh"),Oa=ke.join(No,"known_hosts"),{Resources:WTe}=(tc(),v(TI)),{Application:t4,prepareApplication:r4}=(fR(),v(dR));function jTe(){Kt.trace("getting custom api status");let e={};try{e={port:Rr.get(Mt.CONFIG_PARAMS.HTTP_PORT),directory:Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Yt(new Error,pu.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,t)}return e}a(jTe,"customFunctionsStatus");function zTe(){Kt.trace("getting custom api endpoints");let e={},t=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT);try{oD.sync(aD(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:oD.sync(aD(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:oD.sync(aD(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Yt(new Error,pu.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,r)}return e}a(zTe,"getCustomFunctions");function JTe(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=wn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("getting custom api endpoint file content");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ke.join(r,n,s,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Yt(new Error,pu.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(JTe,"getCustomFunction");async function QTe(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=wn.setCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("setting custom function file content");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Le.outputFileSync(ke.join(r,n,s,i+".js"),o);let c=await Ci(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Yt(new Error,pu.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(QTe,"setCustomFunction");async function XTe(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=wn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function file");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Le.unlinkSync(ke.join(r,n,s,i+".js"));let o=await Ci(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Yt(new Error,pu.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,o)}}a(XTe,"dropCustomFunction");async function ZTe(e){e.project&&(e.project=ke.parse(e.project).name);let t=wn.addComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("adding component");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,install_command:s,install_timeout:i}=e,o=e.template||"https://github.com/harperdb/application-template";try{let c=ke.join(r,n);Le.mkdirSync(c,{recursive:!0});let l=new t4({name:n,packageIdentifier:o,install:{command:s,timeout:i}});await r4(l);let u=await Ci(e);return u.message=`Successfully added project: ${n}`,u}catch(c){throw Yt(new Error,pu.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(ZTe,"addComponent");async function eye(e){e.project&&(e.project=ke.parse(e.project).name);let t=wn.dropCustomFunctionProjectValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function project");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Rr.get(Mt.CONFIG_PARAMS.APPS);if(!qTe.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return mR.updateConfigValue(Mt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ke.join(r,n);Le.rmSync(i,{recursive:!0});let o=await Ci(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Yt(new Error,pu.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,i)}}a(eye,"dropCustomFunctionProject");async function tye(e){e.project&&(e.project=ke.parse(e.project).name);let t=wn.packageComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Kt.trace("packaging component",n);let s;try{s=await Le.realpath(ke.join(r,n))}catch(o){if(o.code!==Mt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Le.realpath(ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Mt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await KTe(s,e)).toString("base64");return{project:n,payload:i}}a(tye,"packageComponent");async function rye(e){e.project?e.project=ke.parse(e.project).name:e.package&&(e.project=nye(e.package));let t=wn.deployComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);if(e.package){let l={package:e.package};(e.install_command||e.install_timeout)&&(l.install={command:e.install_command,timeout:e.install_timeout}),await mR.addConfig(e.project,l)}let r=new t4({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await r4(r),GTe)return;let n=new WTe;n.isWorker=!0;let s=(oE(),v(jy)),i;if(s.setErrorReporter(l=>i=l),await s.loadComponent(r.dirPath,n),i)throw i;let o=e.restart==="rolling";e.restart=o?!1:e.restart;let c=await Ci(e);if(e.restart===!0)e4.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(o){let u=await(uD(),v(lD)).executeJob({operation:"restart_service",service:"http",replicated:!0});c.restartJobId=u.job_id,c.message=`Successfully deployed: ${r.name}, restarting HarperDB`}else c.message=`Successfully deployed: ${r.name}`;return c}a(rye,"deployComponent");function nye(e){if(e.startsWith("git+ssh://"))return ke.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return ke.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Le.readFileSync(ke.join(e,"package.json"),"utf8"));return ke.basename(t)}catch{}return ke.basename(e)}a(nye,"getProjectNameFromPackage");async function sye(){let e=mR.getConfiguration(),t=a(async(i,o)=>{try{let c=await Le.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=ke.join(i,u);if(l.isDirectory()||l.isSymbolicLink()){let f={name:u,entries:[]};o.entries.push(f),await t(d,f)}else{let f=await Le.stat(d),m={name:ke.basename(u),mtime:f.mtime,size:f.size};o.entries.push(m)}}return o}catch(c){return Kt.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{name:Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT).split(ke.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let o=e[i.name]?.package;o&&(i.package=o)}let{internal:n}=(Gp(),v(HN)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){Kt.debug(`Failed to get component status from threads: ${i.message}`)}for(let i of r.entries)try{i.status=await n.componentStatusRegistry.getAggregatedStatusFor(i.name,s)}catch(o){Kt.debug(`Failed to get aggregated status for component ${i.name}: ${o.message}`),i.status={status:"unknown",message:"Failed to retrieve component status",lastChecked:{workers:{}}}}return r}a(sye,"getComponents");async function iye(e){let t=wn.getComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let s=await Le.stat(ke.join(r,e.project,e.file));return{message:await Le.readFile(ke.join(r,e.project,e.file),n),size:s.size,birthtime:s.birthtime,mtime:s.mtime}}catch(s){throw s.code===Mt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ke.join(e.project,e.file)}'`):s}}a(iye,"getComponentFile");async function oye(e){let t=wn.setComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ke.join(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Le.ensureFile(n),await Le.outputFile(n,e.payload,r)):await Le.ensureDir(n);let s=await Ci(e);return s.message="Successfully set component: "+e.file,s}a(oye,"setComponentFile");async function aye(e){let t=wn.dropComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?ke.join(r,n):r,i=ke.join(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),s),o=ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Le.pathExists(o)&&await Le.unlink(o),await Le.pathExists(i)&&await Le.remove(i);let c=ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Le.pathExists(c)){let u=JSON.parse(await Le.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Le.writeFile(c,JSON.stringify(u,null,2),"utf8")}mR.deleteConfigFromFile([r]);let l=await Ci(e);return e.restart===!0?(e4.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(aye,"dropComponent");async function cye(e){let t=wn.addSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Kt.trace("adding ssh key",r);let c=ke.join(No,r+".key"),l=ke.join(No,"config");if(await Le.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Le.outputFile(c,n),await Le.chmod(c,"0600");let u=`#${r}
121
121
  Host ${s}
122
122
  HostName ${i}
123
123
  User git
124
124
  IdentityFile ${c}
125
125
  IdentitiesOnly yes`;await Le.pathExists(l)?await Le.appendFile(l,`
126
126
  `+u):await Le.outputFile(l,u);let d="";if(await Le.pathExists(Oa)||(await Le.writeFile(Oa,""),await Le.chmod(Oa,"0600")),i=="github.com"&&!(await Le.readFile(Oa,"utf8")).includes("github.com"))try{let E=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let _ of E)Le.appendFile(Oa,"github.com "+_+`
127
- `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Le.appendFile(Oa,o);let f=await Ci(e);return f.message=`Added ssh key: ${r}${d}`,f}a(cye,"addSSHKey");async function lye(e){let t=wn.getSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("getting ssh key",r);let n=ke.join(wo,r+".key");if(!await Le.pathExists(n))throw new Error("Key does not exist.");let s={name:r,key:await Le.readFile(n,"utf8")},i=ke.join(wo,"config");if(await Le.pathExists(i)){let o=await Le.readFile(i,"utf8"),c=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g"),l=o.match(c);if(l&&l[0]){let u=l[0],d=u.match(/^Host\s+(.+)$/m);d&&(s.host=d[1].trim());let f=u.match(/^\s*HostName\s+(.+)$/m);f&&(s.hostname=f[1].trim())}}return s}a(lye,"getSSHKey");async function uye(e){let t=wn.updateSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n}=e;Kt.trace("updating ssh key",r);let s=ke.join(wo,r+".key");if(!await Le.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Le.outputFile(s,n);let i=await Ci(e);return i.message=`Updated ssh key: ${r}`,i}a(uye,"updateSSHKey");async function dye(e){let t=wn.deleteSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("deleting ssh key",r);let n=ke.join(wo,r+".key"),s=ke.join(wo,"config");if(!await Le.pathExists(n))throw new Error("Key does not exist");let i=await Le.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Le.outputFile(s,i),Le.removeSync(n);let c=await Ci(e);return c.message=`Deleted ssh key: ${r}`,c}a(dye,"deleteSSHKey");async function fye(e){let t=[];return await Le.pathExists(wo)&&(await Le.readdir(wo)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(fye,"listSSHKeys");async function mye(e){let t=wn.setSSHKnownHostsValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{known_hosts:r}=e;await Le.outputFile(Oa,r);let n=await Ci(e);return n.message="Known hosts successfully set",n}a(mye,"setSSHKnownHosts");async function pye(e){return await Le.pathExists(Oa)?{known_hosts:await Le.readFile(Oa,"utf8")}:{known_hosts:null}}a(pye,"getSSHKnownHosts");er.customFunctionsStatus=jTe;er.getCustomFunctions=zTe;er.getCustomFunction=JTe;er.setCustomFunction=QTe;er.dropCustomFunction=XTe;er.addComponent=ZTe;er.dropCustomFunctionProject=eye;er.packageComponent=tye;er.deployComponent=rye;er.getComponents=sye;er.getComponentFile=iye;er.setComponentFile=oye;er.dropComponent=aye;er.addSSHKey=cye;er.getSSHKey=lye;er.updateSSHKey=uye;er.deleteSSHKey=dye;er.listSSHKeys=fye;er.setSSHKnownHosts=mye;er.getSSHKnownHosts=pye});var dD=M((sGe,s4)=>{"use strict";var Qs=require("joi"),n4=mt();s4.exports={readTransactionLogValidator:hye,deleteTransactionLogsBeforeValidator:Eye};function hye(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),from:Qs.date().timestamp(),to:Qs.date().timestamp(),limit:Qs.number().min(1)});return n4.validateBySchema(e,t)}a(hye,"readTransactionLogValidator");function Eye(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),timestamp:Qs.date().timestamp().required()});return n4.validateBySchema(e,t)}a(Eye,"deleteTransactionLogsBeforeValidator")});var ER=M((oGe,u4)=>{"use strict";var fD=(G(),v(j)),EE=Sr(),i4=ae(),o4=fe(),a4=so(),c4=Q(),{handleHDBError:pR,hdbErrors:_ye}=Ee(),{HTTP_STATUS_CODES:hR}=_ye,{readTransactionLogValidator:gye,deleteTransactionLogsBeforeValidator:Sye}=dD(),l4=fs(),Tye="Logs successfully deleted from transaction log.",yye="All logs successfully deleted from transaction log.";u4.exports={readTransactionLog:Rye,deleteTransactionLogsBefore:Aye};async function Rye(e){let t=gye(e);if(t)throw pR(t,t.message,hR.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=i4.checkSchemaTableExist(e.database,e.table);if(r)throw pR(new Error,r,hR.NOT_FOUND,void 0,void 0,!0);return o4.get(fD.CONFIG_PARAMS.CLUSTERING_ENABLED)?await bye(e):(c4.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)),l4.readAuditLog(e))}a(Rye,"readTransactionLog");async function*bye(e){let t=a4.createNatsTableStreamName(e.database,e.table),r=await EE.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===fD.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(bye,"readTransactionLogNats");async function Aye(e){let t=Sye(e);if(t)throw pR(t,t.message,hR.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!o4.get(fD.CONFIG_PARAMS.CLUSTERING_ENABLED))return c4.info("Delete transaction logs called for Plexus"),l4.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=i4.checkSchemaTableExist(r,n);if(i)throw pR(new Error,i,hR.NOT_FOUND,void 0,void 0,!0);let o=a4.createNatsTableStreamName(r,n),{jsm:c}=await EE.getNATSReferences(),l=await EE.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=Tye,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=yye):f=(await EE.viewStream(o,parseInt(s),1))[0].nats_sequence,await EE.purgeTableStream(r,n,{seq:f}),d}a(Aye,"deleteTransactionLogsBefore")});var mD=M((cGe,f4)=>{"use strict";var _R=require("joi"),Iye=require("path"),{handleHDBError:wye,hdbErrors:Nye}=Ee(),{HTTP_STATUS_CODES:Cye}=Nye,Oye=mt(),d4=Q();f4.exports={installModules:vye};var{CONFIG_PARAMS:Pye}=(G(),v(j)),{getConfigValue:Lye}=gt(),{nonInteractiveSpawn:Dye}=(fR(),v(dR));async function vye(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";d4.warn(t,e.projects);let r=Uye(e);if(r)throw wye(r,r.message,Cye.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=Lye(Pye.COMPONENTSROOT),o={},c=["install","--force","--omit=dev","--json"];s&&c.push("--dry-run");for(let l of n){o[l]={npm_output:null,npm_error:null};let u=Iye.join(i,l);try{let{stdout:d,stderr:f}=Dye(l,"npm",c,u);d=d?d.replace(`
127
+ `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Le.appendFile(Oa,o);let f=await Ci(e);return f.message=`Added ssh key: ${r}${d}`,f}a(cye,"addSSHKey");async function lye(e){let t=wn.getSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("getting ssh key",r);let n=ke.join(No,r+".key");if(!await Le.pathExists(n))throw new Error("Key does not exist.");let s={name:r,key:await Le.readFile(n,"utf8")},i=ke.join(No,"config");if(await Le.pathExists(i)){let o=await Le.readFile(i,"utf8"),c=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g"),l=o.match(c);if(l&&l[0]){let u=l[0],d=u.match(/^Host\s+(.+)$/m);d&&(s.host=d[1].trim());let f=u.match(/^\s*HostName\s+(.+)$/m);f&&(s.hostname=f[1].trim())}}return s}a(lye,"getSSHKey");async function uye(e){let t=wn.updateSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n}=e;Kt.trace("updating ssh key",r);let s=ke.join(No,r+".key");if(!await Le.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Le.outputFile(s,n);let i=await Ci(e);return i.message=`Updated ssh key: ${r}`,i}a(uye,"updateSSHKey");async function dye(e){let t=wn.deleteSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("deleting ssh key",r);let n=ke.join(No,r+".key"),s=ke.join(No,"config");if(!await Le.pathExists(n))throw new Error("Key does not exist");let i=await Le.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Le.outputFile(s,i),Le.removeSync(n);let c=await Ci(e);return c.message=`Deleted ssh key: ${r}`,c}a(dye,"deleteSSHKey");async function fye(e){let t=[];return await Le.pathExists(No)&&(await Le.readdir(No)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(fye,"listSSHKeys");async function mye(e){let t=wn.setSSHKnownHostsValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{known_hosts:r}=e;await Le.outputFile(Oa,r);let n=await Ci(e);return n.message="Known hosts successfully set",n}a(mye,"setSSHKnownHosts");async function pye(e){return await Le.pathExists(Oa)?{known_hosts:await Le.readFile(Oa,"utf8")}:{known_hosts:null}}a(pye,"getSSHKnownHosts");er.customFunctionsStatus=jTe;er.getCustomFunctions=zTe;er.getCustomFunction=JTe;er.setCustomFunction=QTe;er.dropCustomFunction=XTe;er.addComponent=ZTe;er.dropCustomFunctionProject=eye;er.packageComponent=tye;er.deployComponent=rye;er.getComponents=sye;er.getComponentFile=iye;er.setComponentFile=oye;er.dropComponent=aye;er.addSSHKey=cye;er.getSSHKey=lye;er.updateSSHKey=uye;er.deleteSSHKey=dye;er.listSSHKeys=fye;er.setSSHKnownHosts=mye;er.getSSHKnownHosts=pye});var dD=M((sGe,s4)=>{"use strict";var Qs=require("joi"),n4=mt();s4.exports={readTransactionLogValidator:hye,deleteTransactionLogsBeforeValidator:Eye};function hye(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),from:Qs.date().timestamp(),to:Qs.date().timestamp(),limit:Qs.number().min(1)});return n4.validateBySchema(e,t)}a(hye,"readTransactionLogValidator");function Eye(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),timestamp:Qs.date().timestamp().required()});return n4.validateBySchema(e,t)}a(Eye,"deleteTransactionLogsBeforeValidator")});var ER=M((oGe,u4)=>{"use strict";var fD=(G(),v(j)),EE=Sr(),i4=ae(),o4=fe(),a4=so(),c4=Q(),{handleHDBError:pR,hdbErrors:_ye}=Ee(),{HTTP_STATUS_CODES:hR}=_ye,{readTransactionLogValidator:gye,deleteTransactionLogsBeforeValidator:Sye}=dD(),l4=fs(),Tye="Logs successfully deleted from transaction log.",yye="All logs successfully deleted from transaction log.";u4.exports={readTransactionLog:Rye,deleteTransactionLogsBefore:Aye};async function Rye(e){let t=gye(e);if(t)throw pR(t,t.message,hR.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=i4.checkSchemaTableExist(e.database,e.table);if(r)throw pR(new Error,r,hR.NOT_FOUND,void 0,void 0,!0);return o4.get(fD.CONFIG_PARAMS.CLUSTERING_ENABLED)?await bye(e):(c4.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)),l4.readAuditLog(e))}a(Rye,"readTransactionLog");async function*bye(e){let t=a4.createNatsTableStreamName(e.database,e.table),r=await EE.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===fD.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(bye,"readTransactionLogNats");async function Aye(e){let t=Sye(e);if(t)throw pR(t,t.message,hR.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!o4.get(fD.CONFIG_PARAMS.CLUSTERING_ENABLED))return c4.info("Delete transaction logs called for Plexus"),l4.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=i4.checkSchemaTableExist(r,n);if(i)throw pR(new Error,i,hR.NOT_FOUND,void 0,void 0,!0);let o=a4.createNatsTableStreamName(r,n),{jsm:c}=await EE.getNATSReferences(),l=await EE.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=Tye,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=yye):f=(await EE.viewStream(o,parseInt(s),1))[0].nats_sequence,await EE.purgeTableStream(r,n,{seq:f}),d}a(Aye,"deleteTransactionLogsBefore")});var mD=M((cGe,f4)=>{"use strict";var _R=require("joi"),Iye=require("path"),{handleHDBError:wye,hdbErrors:Nye}=Ee(),{HTTP_STATUS_CODES:Cye}=Nye,Oye=mt(),d4=Q();f4.exports={installModules:vye};var{CONFIG_PARAMS:Pye}=(G(),v(j)),{getConfigValue:Lye}=gt(),{nonInteractiveSpawn:Dye}=(fR(),v(dR));async function vye(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";d4.warn(t,e.projects);let r=Uye(e);if(r)throw wye(r,r.message,Cye.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=Lye(Pye.COMPONENTSROOT),o={},c=["install","--force","--omit=dev","--json"];s&&c.push("--dry-run");for(let l of n){o[l]={npm_output:null,npm_error:null};let u=Iye.join(i,l);try{let{stdout:d,stderr:f}=Dye(l,"npm",c,u);d=d?d.replace(`
128
128
  `,""):null,f=f?f.replace(`
129
129
  `,""):null;try{o[l].npm_output=JSON.parse(d)}catch{o[l].npm_output=d}try{o[l].npm_error=JSON.parse(f)}catch{o[l].npm_error=f}}catch(d){d.stderr?o[l].npm_error=Mye(d.stderr):o[l].npm_error=d.message;continue}}return d4.info(`finished installModules with response ${o}`),o.warning=t,o}a(vye,"installModules");function Mye(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
130
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(Mye,"parseNPMStdErr");function Uye(e){let t=_R.object({projects:_R.array().min(1).items(_R.string()).required(),dry_run:_R.boolean().default(!1)});return Oye.validateBySchema(e,t)}a(Uye,"modulesValidator")});var _D={};ye(_D,{describeMetric:()=>g4,describeMetricOp:()=>ED,get:()=>E4,getOp:()=>pD,listMetrics:()=>_4,listMetricsOp:()=>hD});async function Bye(e){return(await ag().get(e)).hostname}function m4(e,t){return e.length===0||e.includes(t)}function pD(e){return _E.trace?.("get_analytics request:",e),E4(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function h4(e){return"conditions"in e?{...e,conditions:e.conditions.map(h4)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function E4(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(h4));let o=t??[];m4(o,"id")||o.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return o.length>0&&(c.select=o),_E.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],m4(o,"node")&&(_E.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await Bye(d)),_E.trace?.("get_analytics result:",JSON.stringify(u)),u})}function hD(e){return _4(e.metric_types)}async function _4(e=["builtin"]){let t=[],r=Object.values(Vo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,o=await databases.system.hdb_analytics.search(s);for await(let c of o)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function ED(e){return g4(e.metric)}async function g4(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let o in s)n.push({name:o,type:typeof s[o]});let i={attributes:n};return _E.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var p4,xye,_E,gD=se(()=>{p4=b(Q());JA();QA();({forComponent:xye}=p4.default),_E=xye("analytics").conditional;a(Bye,"lookupHostname");a(m4,"isSelected");a(pD,"getOp");a(h4,"conformCondition");a(E4,"get");a(hD,"listMetricsOp");a(_4,"listMetrics");a(ED,"describeMetricOp");a(g4,"describeMetric")});var gR,SR,gE,TR=se(()=>{gR={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},SR=Object.keys(gR),gE="primary"});function T4(e){return S4.validateBySchema(e,Gye)}var SE,S4,Fye,kye,Hye,Gye,y4=se(()=>{SE=b(require("joi")),S4=b(mt());TR();Fye=SR,kye=Object.entries(gR).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),Hye=a(()=>{let e=SE.default.string().min(1).max(512);return Object.entries(gR).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:SE.default.string().valid(...r.allowedValues).messages({"any.only":kye[t]})}))}),e.required()},"createStatusValidationSchema"),Gye=SE.default.object({id:SE.default.string().valid(...Fye).required(),status:Hye()});a(T4,"validateStatus")});function R4(){SD||(SD=Pa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),TD=new Uint8Array(SD))}function b4(){R4(),TD[0]=1}function A4(){return R4(),TD[0]===1}var SD,TD,yD=se(()=>{TE();a(R4,"ensureInitialized");a(b4,"requestRestart");a(A4,"restartNeeded")});var wD={};ye(wD,{DEFAULT_STATUS_ID:()=>gE,STATUS_IDS:()=>SR,Status:()=>Pa,clear:()=>bD,get:()=>AD,set:()=>ID});function RE(){return RD||(RD=ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),RD}function bD({id:e}){return yE.debug?.("clearStatus",e),RE().delete(e)}async function $ye(){yE.debug?.("getAllStatus");let e=RE().get({}),t=await Hp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=A4();return{systemStatus:e,componentStatus:r,restartRequired:n}}function AD({id:e}){return e?(yE.debug?.("getStatus",e),RE().get(e)):(yE.debug?.("getStatus","all"),$ye())}function ID({status:e,id:t=gE}){let r=T4({status:e,id:t});if(r)throw(0,yR.handleHDBError)(r,r.message,qye.BAD_REQUEST);return yE.debug?.("setStatus",t,e),RE().put(t,{status:e})}var yR,I4,qye,RD,Pa,yE,TE=se(()=>{Oe();yR=b(Ee()),I4=b(ir());y4();TR();Gp();yD();TR();({HTTP_STATUS_CODES:qye}=yR.hdbErrors);a(RE,"getStatusTable");Pa={get primaryStore(){return RE().primaryStore}},yE=(0,I4.loggerWithTag)("status");a(bD,"clearStatus");a($ye,"getAllStatus");a(AD,"getStatus");a(ID,"setStatus")});var PD={};ye(PD,{getFingerprint:()=>CD,getRegistrationInfo:()=>ND,setLicense:()=>OD});function ND(){return{version:w4.packageJson.version,deprecated:!0}}function CD(){return{message:"this-is-deprecated",deprecated:!0}}function OD(){return{deprecated:!0}}var w4,LD=se(()=>{w4=b(yt());a(ND,"getRegistrationInfo");a(CD,"getFingerprint");a(OD,"setLicense")});var C4=M((CGe,N4)=>{"use strict";var bE=require("alasql"),hu=require("recursive-iterator"),Oi=Q(),Vye=ae(),AE=(G(),v(j)),DD=class{static{a(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Yye(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=>AE.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=>!AE.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][AE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Kye(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!AE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new bE.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Kye(e){return e.filter(t=>t[AE.PERMS_CRUD_ENUM.READ])}a(Kye,"filterReadRestrictedAttrs");function Yye(e,t,r,n,s){Wye(e,t,r,n,s)}a(Yye,"interpretAST");function IE(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(IE,"addSchemaTableToMap");function Wye(e,t,r,n,s){if(!e){Oi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof bE.yy.Insert?Qye(e,t,r):e instanceof bE.yy.Select?jye(e,t,r,n,s):e instanceof bE.yy.Update?zye(e,t,r):e instanceof bE.yy.Delete?Jye(e,t,r):Oi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Wye,"getRecordAttributesAST");function jye(e,t,r,n,s){if(!e){Oi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Vye.isEmptyOrZeroLength(i)){Oi.error("No schema specified");return}e.from.forEach(c=>{IE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),IE(c.table,t,r,n,s)});let o=new hu(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Oi.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new hu(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{Oi.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new hu(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{Oi.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new hu(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{Oi.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}a(jye,"getSelectAttributes");function zye(e,t,r){if(!e){Oi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new hu(e.columns),s=e.table.databaseid;IE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&vD(e.table.tableid,s,i.columnid,t,r)}a(zye,"getUpdateAttributes");function Jye(e,t,r){if(!e){Oi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new hu(e.where),s=e.table.databaseid;IE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&vD(e.table.tableid,s,i.columnid,t,r)}a(Jye,"getDeleteAttributes");function Qye(e,t,r){if(!e){Oi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new hu(e.columns),s=e.into.databaseid;IE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&vD(e.into.tableid,s,i.columnid,t,r)}a(Qye,"getInsertAttributes");function vD(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(vD,"pushAttribute");N4.exports=DD});var IR=M((PGe,K4)=>{"use strict";var MD=Vn(),RR=gn(),Ns=VT(),CE=Vl(),UD=vl(),Xye=HO(),Zye=VK(),OE=(Es(),v(co)),bR=sh(),vr=Q(),eRe=YO(),tRe=ry(),rRe=SP(),nRe=sy(),sRe=RP(),iRe=bP(),oRe=wP(),aRe=CP(),xD=ly(),La=ae(),L4=Vf(),Nn=(G(),v(j)),D4=b2(),cRe=vh(),v4=(Kd(),v(uh)),M4=(sR(),v(mE)),U4=gt(),dr=cD(),x4=ER(),lRe=mD(),Yf=ys(),B4=(gf(),v(_f)),BD=(gD(),v(_D)),FD=(TE(),v(wD)),F4=(tE(),v(Fy)),kD=(LD(),v(PD)),k4=qC(),{handleHDBError:Xn,hdbErrors:H4}=Ee(),{HDB_ERROR_MSGS:dn,HTTP_STATUS_CODES:wE}=H4,ee=new Map,G4="delete",Vc="insert",Xs="read",Eu="update",NE="describe",O4=CE.describeSchema.name,P4=CE.describeTable.name,q4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},uRe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},dRe="catchup",fRe="handleGetJob",mRe="handleGetJobsByStartDate",AR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},pRe=[Ns.createTable.name,Ns.createAttribute.name,Ns.dropTable.name,Ns.dropAttribute.name],$4={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},ne=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};ee.set(MD.insert.name,new ne(!1,[Vc]));ee.set(MD.update.name,new ne(!1,[Eu]));ee.set(MD.upsert.name,new ne(!1,[Vc,Eu]));ee.set(RR.searchByConditions.name,new ne(!1,[Xs]));ee.set(RR.searchByHash.name,new ne(!1,[Xs]));ee.set(RR.searchByValue.name,new ne(!1,[Xs]));ee.set(RR.search.name,new ne(!1,[Xs]));ee.set(Ns.createSchema.name,new ne(!0,[]));ee.set(Ns.createTable.name,new ne(!0,[]));ee.set(Ns.createAttribute.name,new ne(!1,[Vc]));ee.set(Ns.dropSchema.name,new ne(!0,[]));ee.set(Ns.dropTable.name,new ne(!0,[]));ee.set(Ns.dropAttribute.name,new ne(!0,[]));ee.set(CE.describeSchema.name,new ne(!1,[Xs]));ee.set(CE.describeTable.name,new ne(!1,[Xs]));ee.set(UD.deleteRecord.name,new ne(!1,[G4]));ee.set(OE.addUser.name,new ne(!0,[]));ee.set(OE.alterUser.name,new ne(!0,[]));ee.set(OE.dropUser.name,new ne(!0,[]));ee.set(OE.listUsersExternal.name,new ne(!0,[]));ee.set(bR.listRoles.name,new ne(!0,[]));ee.set(bR.addRole.name,new ne(!0,[]));ee.set(bR.alterRole.name,new ne(!0,[]));ee.set(bR.dropRole.name,new ne(!0,[]));ee.set(eRe.name,new ne(!0,[]));ee.set(tRe.name,new ne(!0,[]));ee.set(rRe.name,new ne(!0,[]));ee.set(nRe.name,new ne(!0,[]));ee.set(sRe.name,new ne(!0,[]));ee.set(iRe.name,new ne(!0,[]));ee.set(xD.setRoutes.name,new ne(!0,[]));ee.set(xD.getRoutes.name,new ne(!0,[]));ee.set(xD.deleteRoutes.name,new ne(!0,[]));ee.set(U4.setConfiguration.name,new ne(!0,[]));ee.set(oRe.clusterStatus.name,new ne(!0,[]));ee.set(aRe.name,new ne(!0,[]));ee.set(UD.deleteFilesBefore.name,new ne(!0,[]));ee.set(UD.deleteAuditLogsBefore.name,new ne(!0,[]));ee.set(L4.restart.name,new ne(!0,[]));ee.set(L4.restartService.name,new ne(!0,[]));ee.set(Xye.name,new ne(!0,[]));ee.set(Zye.name,new ne(!0,[Xs]));ee.set(Ns.cleanupOrphanBlobs.name,new ne(!0,[]));ee.set(cRe.systemInformation.name,new ne(!0,[]));ee.set(U4.getConfiguration.name,new ne(!0,[]));ee.set(x4.readTransactionLog.name,new ne(!0,[]));ee.set(x4.deleteTransactionLogsBefore.name,new ne(!0,[]));ee.set(lRe.installModules.name,new ne(!0,[]));ee.set(Yf.createCsr.name,new ne(!0,[]));ee.set(Yf.signCertificate.name,new ne(!0,[]));ee.set(Yf.listCertificates.name,new ne(!0,[]));ee.set(Yf.addCertificate.name,new ne(!0,[]));ee.set(Yf.removeCertificate.name,new ne(!0,[]));ee.set(Yf.getKey.name,new ne(!0,[]));ee.set(B4.addNodeBack.name,new ne(!0,[]));ee.set(B4.removeNodeBack.name,new ne(!0,[]));ee.set(BD.getOp.name,new ne(!1,[Xs]));ee.set(BD.listMetricsOp.name,new ne(!1,[Xs]));ee.set(BD.describeMetricOp.name,new ne(!1,[Xs]));ee.set(FD.clear.name,new ne(!0,[]));ee.set(FD.get.name,new ne(!0,[]));ee.set(FD.set.name,new ne(!0,[]));ee.set(F4.installUsageLicenseOp.name,new ne(!0,[]));ee.set(F4.getUsageLicensesOp.name,new ne(!0,[]));ee.set(kD.getFingerprint.name,new ne(!0,[]));ee.set(kD.setLicense.name,new ne(!0,[]));ee.set(v4.createTokens.name,new ne(!1,[]));ee.set(v4.refreshOperationToken.name,new ne(!1,[]));ee.set(M4.login.name,new ne(!1,[]));ee.set(M4.logout.name,new ne(!1,[]));ee.set(dr.customFunctionsStatus.name,new ne(!0,[]));ee.set(dr.getCustomFunctions.name,new ne(!0,[]));ee.set(dr.getComponents.name,new ne(!0,[]));ee.set(dr.getComponentFile.name,new ne(!0,[]));ee.set(dr.setComponentFile.name,new ne(!0,[]));ee.set(dr.dropComponent.name,new ne(!0,[]));ee.set(dr.getCustomFunction.name,new ne(!0,[]));ee.set(dr.setCustomFunction.name,new ne(!0,[]));ee.set(dr.dropCustomFunction.name,new ne(!0,[]));ee.set(dr.addComponent.name,new ne(!0,[]));ee.set(dr.dropCustomFunctionProject.name,new ne(!0,[]));ee.set(dr.packageComponent.name,new ne(!0,[]));ee.set(dr.deployComponent.name,new ne(!0,[]));ee.set(dr.addSSHKey.name,new ne(!0,[]));ee.set(dr.getSSHKey.name,new ne(!0,[]));ee.set(dr.updateSSHKey.name,new ne(!0,[]));ee.set(dr.deleteSSHKey.name,new ne(!0,[]));ee.set(dr.listSSHKeys.name,new ne(!0,[]));ee.set(dr.setSSHKnownHosts.name,new ne(!0,[]));ee.set(dr.getSSHKnownHosts.name,new ne(!0,[]));ee.set(kD.getRegistrationInfo.name,new ne(!1,[]));ee.set(OE.userInfo.name,new ne(!1,[]));ee.set(CE.describeAll.name,new ne(!1,[]));ee.set(fRe,new ne(!1,[]));ee.set(mRe,new ne(!0,[]));ee.set(dRe,new ne(!0,[]));ee.set(AR.CSV_DATA_LOAD,new ne(!1,[Vc,Eu]));ee.set(AR.CSV_URL_LOAD,new ne(!1,[Vc,Eu]));ee.set(AR.CSV_FILE_LOAD,new ne(!1,[Vc,Eu]));ee.set(AR.IMPORT_FROM_S3,new ne(!1,[Vc,Eu]));ee.set($4.EXPORT_TO_S3,new ne(!0,[]));ee.set($4.EXPORT_LOCAL,new ne(!0,[]));ee.set(Nn.VALID_SQL_OPS_ENUM.DELETE,new ne(!1,[G4]));ee.set(Nn.VALID_SQL_OPS_ENUM.SELECT,new ne(!1,[Xs]));ee.set(Nn.VALID_SQL_OPS_ENUM.INSERT,new ne(!1,[Vc]));ee.set(Nn.VALID_SQL_OPS_ENUM.UPDATE,new ne(!1,[Eu]));K4.exports={verifyPerms:ERe,verifyPermsAst:hRe,verifyBulkLoadAttributePerms:gRe};function hRe(e,t,r){if(La.isEmptyOrZeroLength(e))throw vr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(La.isEmptyOrZeroLength(t))throw vr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(La.isEmptyOrZeroLength(r))throw vr.info("verify_perms_ast has a null operation parameter"),Xn(new Error);try{let n=C4(),s=require("alasql"),i=new k4,o=new n(e),c=o.getSchemas(),l=new Map;if((!c||c.length===0)&&o.affected_attributes&&o.affected_attributes.size>0)throw vr.info("No schemas defined in verifyPermsAst(), will not continue."),Xn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&q4[r])throw Xn(new Error,dn.DROP_SYSTEM,wE.FORBIDDEN);if(u&&!d)return null;let f=D4.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=o.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=o.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=V4(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let _=o.getAttributesBySchemaTableName(h,p[E]),R=GD(t.role.permission,h,p[E]);HD(_,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Xn(n)}}a(hRe,"verifyPermsAst");function ERe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw vr.info("null required parameter in verifyPerms"),Xn(new Error,dn.DEFAULT_INVALID_REQUEST,wE.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new k4;if(La.isEmptyOrZeroLength(e.hdb_user?.role)||La.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return vr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(dn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=o.has(Nn.SYSTEM_SCHEMA_NAME)||s===Nn.SYSTEM_SCHEMA_NAME;if(l&&d&&uRe[e.operation]&&(i===Nn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Nn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Nn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&q4[r])throw Xn(new Error,dn.DROP_SYSTEM,wE.FORBIDDEN);if(l&&!d||u===!0&&(r===Ns.createSchema.name||r===Ns.dropSchema.name))return null;if(pRe.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=D4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===O4||r===P4)&&!f.super_user){if(s===Nn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(dn.SCHEMA_PERM_ERROR(s));if(r===O4&&(!f[s]||!f[s][NE]))return c.handleInvalidItem(dn.SCHEMA_NOT_FOUND(s));if(r===P4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][NE]))return c.handleInvalidItem(dn.TABLE_NOT_FOUND(s,i))}let m=V4(e.hdb_user,r,o,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Nn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],_=f[s].tables[i];_[Nn.PERMS_CRUD_ENUM.READ]&&(_.attribute_permissions.length>0?_.attribute_permissions.filter(S=>S[Nn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=E)}let p=_Re(e),h=GD(e.hdb_user?.role?.permission,s,i);return HD(p,h,r,i,s,c,n),c.getPermsResponse()}a(ERe,"verifyPerms");function V4(e,t,r,n,s){if(La.arrayHasEmptyValues([e,t,r]))throw vr.info("hasPermissions has an invalid parameter"),Xn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw vr.info(`operation ${t} not found.`),Xn(new Error,dn.OP_NOT_FOUND(t),wE.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return vr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(dn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][NE]===!1){n.addInvalidItem(dn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(dn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=o[l].tables[d];if(!f||f[NE]===!1)n.addInvalidItem(dn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!La.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],_=f[E];(_==null||_===!1)&&(vr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=dn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw vr.error(p),vr.error(m),Xn(H4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}a(V4,"hasPermissions");function HD(e,t,r,n,s,i,o){if(!e||!t)throw vr.info("no attributes specified in checkAttributePerms."),Xn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw vr.info(`no permissions found for ${r} in checkAttributePerms().`),Xn(new Error);if(La.isEmptyOrZeroLength(t))return vr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[NE]===!1){i.addInvalidItem(dn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Nn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Xs)throw Xn(new Error,dn.SYSTEM_TIMESTAMP_PERMS_ERR,wE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(dn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(HD,"checkAttributePerms");function _Re(e){let t=new Set;try{if(e.action)return t;if(e.operation===Nn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){vr.info(r)}return t}a(_Re,"getRecordAttributes");function GD(e,t,r){let n=new Map;if(La.isEmpty(e))return vr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{vr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(GD,"getAttributePermissions");function gRe(e,t,r,n,s,i,o){let c=new Set(i),l=GD(e,n,s);HD(c,l,t,s,n,o,r)}a(gRe,"verifyBulkLoadAttributePerms")});var $D=M((DGe,Y4)=>{"use strict";var qD=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Y4.exports=qD});var zD=M((FGe,lJ)=>{"use strict";var wR=Vn(),CR=MC(),SRe=require("needle"),Pi=(G(),v(j)),MGe=Pt(),Wf=ae(),{handleHDBError:tr,hdbErrors:tJ}=Ee(),{HTTP_STATUS_CODES:fn,HDB_ERROR_MSGS:Mr,CHECK_LOGS_WRAPPER:gu}=tJ,jf=Q(),VD=require("papaparse");Wf.promisifyPapaParse();var Li=require("fs-extra"),TRe=require("path"),{chain:W4}=require("stream-chain"),j4=require("stream-json/streamers/StreamArray"),z4=require("stream-json/utils/Batch"),J4=require("stream-chain/utils/comp"),{finished:Q4}=require("stream"),yRe=fe(),rJ=UC(),RRe=xC(),{BulkLoadFileObject:YD,BulkLoadDataObject:bRe}=SV(),WD=qC(),{verifyBulkLoadAttributePerms:nJ}=IR(),UGe=$D(),xGe=Sr(),BGe=so(),{databases:ARe}=(Oe(),v(ft)),{coerceType:IRe}=(Rg(),v(qq)),X4="No records parsed from csv file.",_u=`${yRe.get("HDB_ROOT")}/tmp`,{schemaRegex:wRe}=Qi(),Z4=1024*1024*2,eJ=5e3,NRe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};lJ.exports={csvDataLoad:CRe,csvURLLoad:ORe,csvFileLoad:PRe,importFromS3:LRe};async function CRe(e,t){let r=CR.dataObject(e);if(r)throw tr(r,r.message,fn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=oJ(e.schema,e.table),i=VD.parse(e.data,{header:!0,skipEmptyLines:!0,transform:KD.bind(null,s),dynamicTyping:!1}),o=new WD;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&nJ(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw tr(new Error,c,fn.BAD_REQUEST,void 0,void 0,!0);let l=new bRe(e.action,e.schema,e.table,i.data);return n=await rJ.callOperationFunctionAsAwait(aJ,l,null),n.message===X4?X4:cJ(n.records,n.number_written)}catch(s){throw Su(s)}}a(CRe,"csvDataLoad");async function ORe(e){let t=CR.urlObject(e);if(t)throw tr(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${_u}/${r}`;try{await DRe(e,r)}catch(s){throw jf.error(Mr.DOWNLOAD_FILE_ERR(r)+" - "+s),tr(s,gu(Mr.DOWNLOAD_FILE_ERR(r)))}try{let s=new YD(this.job_operation_function.name,e.action,e.schema,e.table,n,Pi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await jD(s);return await NR(n),i}catch(s){throw await NR(n),Su(s)}}a(ORe,"csvURLLoad");async function PRe(e){let t=CR.fileObject(e);if(t)throw tr(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);let r=new YD(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Pi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await jD(r)}catch(n){throw Su(n)}}a(PRe,"csvFileLoad");async function LRe(e){let t=CR.s3FileObject(e);if(t)throw tr(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=TRe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${_u}/${s}`;let i=new YD(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await vRe(s,e);let o=await jD(i);return await NR(r),o}catch(n){throw await NR(r),Su(n)}}a(LRe,"importFromS3");async function DRe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await SRe("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 tr(n,s,n.statusCode,Pi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}URe(r,e.csv_url),await MRe(t,r.raw)}a(DRe,"downloadCSVFile");async function vRe(e,t){try{let r=`${_u}/${e}`;await Li.mkdirp(_u),await Li.writeFile(`${_u}/${e}`,"",{flag:"a+"});let n=await Li.createWriteStream(r),s=await RRe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){jf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw jf.error(Mr.S3_DOWNLOAD_ERR+" - "+r),tr(r,gu(Mr.S3_DOWNLOAD_ERR))}}a(vRe,"downloadFileFromS3");async function MRe(e,t){try{await Li.mkdirp(_u),await Li.writeFile(`${_u}/${e}`,t)}catch(r){throw jf.error(Mr.WRITE_TEMP_FILE_ERR),tr(r,gu(Mr.DEFAULT_BULK_LOAD_ERR))}}a(MRe,"writeFileToTempFolder");async function NR(e){if(e)try{await Li.access(e),await Li.unlink(e)}catch{jf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(NR,"deleteTempFile");function URe(e,t){if(e.statusCode!==tJ.HTTP_STATUS_CODES.OK)throw tr(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,fn.BAD_REQUEST);if(!NRe[e.headers["content-type"]])throw tr(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,fn.BAD_REQUEST);if(!e.raw)throw tr(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,fn.BAD_REQUEST)}a(URe,"validateURLResponse");async function jD(e){try{let t;switch(e.file_type){case Pi.VALID_S3_FILE_TYPES.CSV:t=await xRe(e);break;case Pi.VALID_S3_FILE_TYPES.JSON:t=await BRe(e);break;default:throw tr(new Error,Mr.DEFAULT_BULK_LOAD_ERR,fn.BAD_REQUEST,Pi.LOG_LEVELS.ERROR,Mr.INVALID_FILE_EXT_ERR(e))}return cJ(t.records,t.number_written)}catch(t){throw Su(t)}}a(jD,"fileLoad");async function sJ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await wR.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&nJ(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=tr(c);r(l)}}a(sJ,"validateChunk");async function iJ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Wf.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Wf.isEmpty(c)&&!Wf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await rJ.callOperationFunctionAsAwait(aJ,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=tr(c,gu(Mr.INSERT_CSV_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.INSERT_CSV_ERR+" - "+c);r(l)}}a(iJ,"insertChunk");async function xRe(e){let t={records:0,number_written:0},r=oJ(e.schema,e.table);try{let n=new WD,s=Li.createReadStream(e.file_path,{highWaterMark:Z4});s.setEncoding("utf8"),await VD.parsePromise(s,sJ.bind(null,e,n),KD.bind(null,r));let i=n.getPermsResponse();if(i)throw tr(new Error,i,fn.BAD_REQUEST);return s=Li.createReadStream(e.file_path,{highWaterMark:Z4}),s.setEncoding("utf8"),await VD.parsePromise(s,iJ.bind(null,e,t),KD.bind(null,r)),s.destroy(),t}catch(n){throw tr(n,gu(Mr.PAPA_PARSE_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.PAPA_PARSE_ERR+n)}}a(xRe,"callPapaParse");function oJ(e,t){let r=ARe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>IRe(i,s));return n}a(oJ,"createTransformMap");function KD(e,t,r){let n=e.get(r);return n?n(t):Wf.autoCast(t)}a(KD,"typeFunction");async function BRe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new WD,s=W4([Li.createReadStream(e.file_path,{encoding:"utf-8"}),j4.withParser(),c=>c.value,new z4({batchSize:eJ}),J4(async c=>{await sJ(e,n,r,c)})]);await new Promise((c,l)=>{Q4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw tr(new Error,i,fn.BAD_REQUEST);let o=W4([Li.createReadStream(e.file_path,{encoding:"utf-8"}),j4.withParser(),c=>c.value,new z4({batchSize:eJ}),J4(async c=>{await iJ(e,t,r,c)})]);return await new Promise((c,l)=>{Q4(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw tr(n,gu(Mr.INSERT_JSON_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.INSERT_JSON_ERR+n)}}a(BRe,"insertJson");async function aJ(e){let t={};try{e.data&&e.data.length>0&&FRe(e.data[0])?t=await kRe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",jf.info(t.message))}catch(r){throw Su(r)}return t}a(aJ,"callBulkFileLoad");function FRe(e){let t=Object.keys(e);for(let r of t)if(!wRe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(FRe,"validateColumnNames");async function kRe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=wR.insert;break;case"update":i=wR.update;break;case"upsert":i=wR.upsert;break;default:throw tr(new Error,Mr.INVALID_ACTION_PARAM_ERR(n),fn.BAD_REQUEST,Pi.LOG_LEVELS.ERROR,Mr.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)o.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Wf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Su(o)}}a(kRe,"bulkFileLoad");function cJ(e,t){return`successfully loaded ${t} of ${e} records`}a(cJ,"buildResponseMsg");function Su(e){return tr(e,gu(Mr.DEFAULT_BULK_LOAD_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Su,"buildTopLevelErrMsg")});var OR=M((HGe,uJ)=>{"use strict";var HRe=fs();uJ.exports={writeTransaction:GRe};function GRe(e,t,r){return HRe.writeTransaction(e,t,r)}a(GRe,"writeTransaction")});var pJ=M(($Ge,mJ)=>{"use strict";var qRe=gn(),$Re=ro(),dJ=Q(),VRe=Vn(),qGe=OR(),KRe=require("clone"),QD=require("alasql"),YRe=eS(),fJ=require("util"),WRe=fJ.promisify($Re.getTableSchema),jRe=fJ.promisify(qRe.search),zRe=(G(),v(j)),JD=ae();YRe(QD);mJ.exports={update:QRe};var JRe="There was a problem performing this update. Please check the logs and try again.";async function QRe({statement:e,hdb_user:t}){let r=await WRe(e.table.databaseid,e.table.tableid),n=XRe(e.columns);JD.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=KRe(s),c=JD.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=QD.parse(l).statements[0],d=await jRe(u),f=ZRe(n,d);return ebe(o,f,t)}a(QRe,"update");function XRe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=QD.compile(`SELECT ${r.expression.toString()} AS [${zRe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw dJ.error(t),new Error(JRe)}}a(XRe,"createUpdateRecord");function ZRe(e,t){return JD.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(ZRe,"buildUpdateRecords");async function ebe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await VRe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){dJ.error(`Error delete new_attributes from update response: ${i}`)}return s}a(ebe,"updateRecords")});var EJ=M((WGe,hJ)=>{var tbe=require("alasql"),rbe=gn(),nbe=Q(),sbe=fs(),ZD=require("util"),XD=ae(),ibe=(G(),v(j)),obe=ro(),KGe=OR(),YGe=Vn(),abe="record",cbe="successfully deleted",lbe=ZD.callbackify(mbe),ube=ZD.promisify(rbe.search),dbe=ZD.promisify(obe.getTableSchema);hJ.exports={convertDelete:lbe};function fbe(e){return`${e.deleted_hashes.length} ${abe}${e.deleted_hashes.length===1?"":"s"} ${cbe}`}a(fbe,"generateReturnMessage");async function mbe({statement:e,hdb_user:t}){let r=await dbe(e.table.databaseid,e.table.tableid);XD.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=XD.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=tbe.parse(o).statements[0],l={operation:ibe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await ube(c);let u=await sbe.deleteRecords(l);return XD.isEmptyOrZeroLength(u.message)&&(u.message=fbe(u)),delete u.txn_time,u}catch(u){throw nbe.error(u),u.hdb_code?u.message:u}}a(mbe,"convertDelete")});var LE=M((zGe,yJ)=>{"use strict";yJ.exports={evaluateSQL:wbe,processAST:TJ,convertSQLToAST:SJ,checkASTPermissions:gJ};var pbe=Vn(),_J=require("util"),hbe=_J.callbackify(pbe.insert),Ebe=gn().search,_be=pJ().update,gbe=_J.callbackify(_be),Sbe=EJ().convertDelete,Kc=require("alasql"),Tbe=IR(),PR=Q(),ybe=eS(),Rbe=ae(),PE=(G(),v(j)),{hdbErrors:bbe,handleHDBError:ev}=Ee(),{HTTP_STATUS_CODES:tv}=bbe;ybe(Kc);var Abe=403,Ibe="There was a problem performing this insert. Please check the logs and try again.",rv=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function wbe(e,t){let r=e.parsed_sql_object;if(!r){r=SJ(e.sql);let n,s=r.ast.statements[0];if(s instanceof Kc.yy.Insert?n=s.into.databaseid:s instanceof Kc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Kc.yy.Update||s instanceof Kc.yy.Delete?n=s.table.databaseid:PR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Kc.yy.Select)&&Rbe.isEmptyOrZeroLength(n))return t("No schema specified",null)}TJ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(wbe,"evaluateSQL");function gJ(e,t){let r;try{r=Tbe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(gJ,"checkASTPermissions");function SJ(e){let t=new rv;if(!e)throw ev(new Error,"The 'sql' parameter is missing from the request body",tv.BAD_REQUEST);try{let r=e.trim(),n=Kc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
131
- `);throw n[1]?ev(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,tv.BAD_REQUEST):ev(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",tv.BAD_REQUEST)}return t}a(SJ,"convertSQLToAST");function TJ(e,t,r){try{let n=Nbe;if(!e.bypass_auth&&!t.permissions_checked){let i=gJ(e,t);if(i&&i.length>0)return r(Abe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case PE.VALID_SQL_OPS_ENUM.SELECT:n=Ebe,s=t.ast.statements[0];break;case PE.VALID_SQL_OPS_ENUM.INSERT:n=Cbe;break;case PE.VALID_SQL_OPS_ENUM.UPDATE:n=gbe;break;case PE.VALID_SQL_OPS_ENUM.DELETE:n=Sbe;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(TJ,"processAST");function Nbe(e,t){PR.info(e),t("unknown sql statement")}a(Nbe,"nullFunction");function Cbe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Obe(i,e.values)}catch(o){return r(o)}hbe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){PR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Cbe,"convertInsert");function Obe(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]]=Kc.compile(`SELECT ${s.toString()} AS [${PE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw PR.error(r),new Error(Ibe)}}a(Obe,"createDataObjects")});var iv=M((QGe,OJ)=>{"use strict";var sv=gn(),Pbe=xC(),{AsyncParser:Lbe}=require("json2csv"),LR=require("stream"),Cs=ae(),nv=require("fs-extra"),Dbe=require("path"),Zs=Q(),{promisify:AJ}=require("util"),DE=ae(),{handleHDBError:br,hdbErrors:vbe}=Ee(),{HDB_ERROR_MSGS:Zn,HTTP_STATUS_CODES:Ar}=vbe,{streamAsJSON:Mbe}=(AA(),v(Ax)),{Upload:Ube}=require("@aws-sdk/lib-storage"),{toCsvStream:xbe}=(Go(),v(Mx)),RJ=["search_by_value","search_by_hash","sql","search_by_conditions"],bJ=["json","csv"],IJ="json",wJ="csv",Bbe="Successfully exported JSON locally.",Fbe="Successfully exported CSV locally.",kbe=1e3,Hbe=sv.searchByHash,Gbe=sv.searchByValue,qbe=AJ(LR.finished);OJ.exports={export_to_s3:Ybe,export_local:$be};async function $be(e){Zs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=NJ(e);if(!Cs.isEmpty(t))throw Zs.error(t),br(new Error,t,Ar.BAD_REQUEST,void 0,void 0,!0);if(Cs.isEmpty(e.path))throw Zs.error(Zn.MISSING_VALUE("path")),br(new Error,Zn.MISSING_VALUE("path"),Ar.BAD_REQUEST,void 0,void 0,!0);let r=(Cs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Dbe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Cs.buildFolderPath(e.path,r);await Vbe(e.path);let s=await CJ(e);return await Kbe(n,e.format,s)}a($be,"export_local");async function Vbe(e){if(Zs.trace("in confirmPath"),Cs.isEmptyOrZeroLength(e))throw br(new Error,`Invalid path: ${e}`,Ar.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await nv.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,Zs.error(n),br(new Error,n,Ar.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw Zs.error(r),br(new Error,r,Ar.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Vbe,"confirmPath");async function Kbe(e,t,r){if(Zs.trace("in saveToLocal"),DE.isEmptyOrZeroLength(e))throw br(new Error,Zn.INVALID_VALUE("file_path"),Ar.BAD_REQUEST,void 0,void 0,!0);if(DE.isEmptyOrZeroLength(t))throw br(new Error,Zn.INVALID_VALUE("Source format"),Ar.BAD_REQUEST,void 0,void 0,!0);if(DE.isEmpty(r))throw br(new Error,Zn.NOT_FOUND("Data"),Ar.BAD_REQUEST,void 0,void 0,!0);if(t===IJ){let n=nv.createWriteStream(e);return Mbe(r).pipe(n),await qbe(n),{message:Bbe,path:e}}else if(t===wJ){let n=nv.createWriteStream(e),s=LR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new Lbe(i,c).fromInput(s).toOutput(n).promise(!1),{message:Fbe,path:e}}throw br(new Error,Zn.INVALID_VALUE("format"),Ar.BAD_REQUEST)}a(Kbe,"saveToLocal");async function Ybe(e){if(!e.s3||Object.keys(e.s3).length===0)throw br(new Error,Zn.MISSING_VALUE("S3 object"),Ar.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw br(new Error,Zn.MISSING_VALUE("aws_access_key_id"),Ar.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw br(new Error,Zn.MISSING_VALUE("aws_secret_access_key"),Ar.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.bucket))throw br(new Error,Zn.MISSING_VALUE("bucket"),Ar.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.key))throw br(new Error,Zn.MISSING_VALUE("key"),Ar.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.region))throw br(new Error,Zn.MISSING_VALUE("region"),Ar.BAD_REQUEST);let t=NJ(e);if(!Cs.isEmpty(t))throw br(new Error,t,Ar.BAD_REQUEST);Zs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await CJ(e)}catch(l){throw Zs.error(l),l}let n,s=await Pbe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new LR.PassThrough;if(e.format===wJ){i=e.s3.key+".csv";let l=xbe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===IJ){i=e.s3.key+".json";let l=new LR.Readable;l.pipe(o),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%kbe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw br(new Error,Zn.INVALID_VALUE("format"),Ar.BAD_REQUEST);return new Ube({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Ybe,"export_to_s3");function NJ(e){if(Zs.trace("in exportCoreValidation"),Cs.isEmpty(e.format))return"format missing";if(bJ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${bJ.join(", ")}`;let t=e.search_operation.operation;if(Cs.isEmpty(t))return"search_operation.operation missing";if(RJ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${RJ.join(", ")}`}a(NJ,"exportCoreValidation");async function CJ(e){Zs.trace("in getRecords");let t,r;if(DE.isEmpty(e.search_operation)||DE.isEmptyOrZeroLength(e.search_operation.operation))throw br(new Error,Zn.INVALID_VALUE("Search operation"),Ar.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Gbe;break;case"search_by_hash":t=Hbe;break;case"search_by_conditions":t=sv.searchByConditions;break;case"sql":{let n=LE();t=AJ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Zs.error(r),br(new Error,r,Ar.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(CJ,"getRecords")});var LJ=M((ZGe,PJ)=>{"use strict";var ov=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};PJ.exports=ov});var MJ=M((tqe,vJ)=>{"use strict";var Wbe=(G(),v(j)),DJ=require("moment"),jbe=require("uuid").v4,av=class{static{a(this,"JobObject")}constructor(){this.id=jbe(),this.type=void 0,this.start_datetime=DJ().valueOf(),this.created_datetime=DJ().valueOf(),this.end_datetime=void 0,this.status=Wbe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};vJ.exports=av});var lv=M((nqe,qJ)=>{"use strict";var zbe=require("uuid").v4,kJ=Vn(),HJ=gn(),Jbe=di(),Qbe=dd(),Xbe=LJ(),Ut=(G(),v(j)),Zbe=MJ(),eAe=VS(),Di=Q(),tAe=Cm(),zf=ae(),{promisify:rAe}=require("util"),Tu=require("moment"),DR=MC(),UJ=kw(),{deleteTransactionLogsBeforeValidator:nAe}=dD(),{handleHDBError:xJ,hdbErrors:sAe,ClientError:iAe}=Ee(),{HTTP_STATUS_CODES:BJ}=sAe,FJ=HJ.searchByValue,oAe=HJ.searchByHash,aAe=kJ.insert,cAe=kJ.update,cv;qJ.exports={addJob:dAe,updateJob:mAe,handleGetJob:lAe,handleGetJobsByStartDate:uAe,getJobById:GJ};async function lAe(e){if(e.id===void 0)throw new iAe("'id' is required");let t=await GJ(e.id);return zf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(lAe,"handleGetJob");async function uAe(e){try{let t=await fAe(e);if(Di.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Tu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Tu(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Di.error(r),new Error(r)}}a(uAe,"handleGetJobsByStartDate");async function dAe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||zf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Di.info(d),t.error=d,t}if(!Ut.JOB_TYPE_ENUM[e.operation])return Di.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ut.OPERATIONS_ENUM.CSV_FILE_LOAD:n=DR.fileObject(e);break;case Ut.OPERATIONS_ENUM.CSV_URL_LOAD:n=DR.urlObject(e);break;case Ut.OPERATIONS_ENUM.CSV_DATA_LOAD:n=DR.dataObject(e);break;case Ut.OPERATIONS_ENUM.IMPORT_FROM_S3:n=DR.s3FileObject(e);break;case Ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=UJ(e,"date");break;case Ut.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=UJ(e,"timestamp");break;case Ut.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=nAe(e);break;case Ut.OPERATIONS_ENUM.RESTART_SERVICE:if(Ut.HDB_PROCESS_SERVICES[e.service]===void 0)throw xJ(new Error,"Invalid service",BJ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw xJ(n,n.message,BJ.BAD_REQUEST,void 0,void 0,!0);let s=new Zbe;s.type=e.operation===Ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Jbe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await FJ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Di.error(f),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=zbe();try{o=await FJ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Di.error(f),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Di.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new tAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await aAe(l)}catch(d){return Di.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Di.trace(d)}return t}a(dAe,"addJob");async function fAe(e){let t=Tu(e.from_date,Tu.ISO_8601),r=Tu(e.to_date,Tu.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 Xbe(n,e.hdb_user);try{if(!cv){let i=LE();cv=rAe(i.evaluateSQL)}return await cv(s)}catch(i){throw Di.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(fAe,"getJobsInDateRange");async function GJ(e){if(zf.isEmptyOrZeroLength(e))return zf.errorizeMessage("Invalid job ID specified.");let t=new Qbe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await oAe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Di.error(n),zf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(GJ,"getJobById");async function mAe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(zf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ut.JOB_STATUS_ENUM.COMPLETE||e.status===Ut.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Tu().valueOf());let t=new eAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await cAe(t),r}a(mAe,"updateJob")});var JJ=M((iqe,zJ)=>{"use strict";var $J=ae(),Ur=(G(),v(j)),pAe=require("moment"),vR=zD(),vE=Q(),VJ=lv(),KJ=iv(),YJ=vl(),WJ=st(),hAe=ER(),EAe=Vf(),{parentPort:_Ae,isMainThread:jJ}=require("worker_threads"),{onMessageByType:gAe}=st(),uv=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function SAe(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($J.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if($J.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ur.JOB_TYPE_ENUM.csv_file_load:await No(e,vR.csvFileLoad);break;case Ur.JOB_TYPE_ENUM.csv_url_load:await No(e,vR.csvURLLoad);break;case Ur.JOB_TYPE_ENUM.csv_data_load:await No(e,vR.csvDataLoad);break;case Ur.JOB_TYPE_ENUM.import_from_s3:await No(e,vR.importFromS3);break;case Ur.JOB_TYPE_ENUM.empty_trash:break;case Ur.JOB_TYPE_ENUM.export_local:await No(e,KJ.export_local);break;case Ur.JOB_TYPE_ENUM.export_to_s3:await No(e,KJ.export_to_s3);break;case Ur.JOB_TYPE_ENUM.delete_files_before:case Ur.JOB_TYPE_ENUM.delete_records_before:await No(e,YJ.deleteFilesBefore);break;case Ur.JOB_TYPE_ENUM.delete_audit_logs_before:await No(e,YJ.deleteAuditLogsBefore);break;case Ur.JOB_TYPE_ENUM.delete_transaction_logs_before:await No(e,hAe.deleteTransactionLogsBefore);break;case Ur.JOB_TYPE_ENUM.restart_service:return await No(e,EAe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(SAe,"parseMessage");async function No(e,t){try{e.job.status=Ur.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=pAe().valueOf(),await VJ.updateJob(e.job),await TAe(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):vE.error(`There was an error running ${t.name} job with id ${e.job.id}`),vE.error(n),e.job.message=n,e.job.status=Ur.JOB_STATUS_ENUM.ERROR;try{await VJ.updateJob(e.job)}catch(s){throw vE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(No,"runJob");async function TAe(e){vE.trace("launching job thread:",e),jJ?WJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):_Ae.postMessage({type:Ur.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(TAe,"launchJobThread");jJ&&gAe(Ur.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{WJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){vE.error(r)}});zJ.exports={parseMessage:SAe,RunnerMessage:uv}});var XJ=M((aqe,QJ)=>{"use strict";var yAe=ae(),dv=fe(),Yc=(G(),v(j)),RAe=Pt(),bAe=Sr(),Co=Q(),AAe=$D(),IAe=so();dv.initSync();QJ.exports={postOperationHandler:NAe,sendOperationTransaction:ME};async function ME(e,t,r,n){if(e.schema===Yc.SYSTEM_SCHEMA_NAME)return;let s=wAe(e,t,r);s&&(Co.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await bAe.publishToStream(`${RAe.SUBJECT_PREFIXES.TXN}.${e.schema}`,IAe.createNatsTableStreamName(e.schema,e.table),n,s))}a(ME,"sendOperationTransaction");function wAe(e,t,r){if(yAe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Yc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(wAe,"convertCRUDOperationToTransaction");async function NAe(e,t,r){if(!dv.get(Yc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Co.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=dv.get(Yc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new AAe(t.txn_time,n,s);switch(e.operation){case Yc.OPERATIONS_ENUM.INSERT:try{await ME(e,t.inserted_hashes,i,r)}catch(o){Co.error("There was an error calling clustering postOperationHandler for insert."),Co.error(o)}break;case Yc.OPERATIONS_ENUM.DELETE:try{await ME(e,t.deleted_hashes,i,r)}catch(o){Co.error("There was an error calling clustering postOperationHandler for delete."),Co.error(o)}break;case Yc.OPERATIONS_ENUM.UPDATE:try{await ME(e,t.update_hashes,i,r)}catch(o){Co.error("There was an error calling clustering postOperationHandler for update."),Co.error(o)}break;case Yc.OPERATIONS_ENUM.UPSERT:try{await ME(e,t.upserted_hashes,i,r)}catch(o){Co.error("There was an error calling clustering postOperationHandler for upsert."),Co.error(o)}break;default:break}return t}a(NAe,"postOperationHandler")});var Z,ZJ=se(()=>{Z=class{static{a(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var lD={};ye(lD,{chooseOperation:()=>SQ,executeJob:()=>ei,getOperationFunction:()=>TQ,operation:()=>Tv,processLocalTransaction:()=>gQ});function PAe(e){if(!fv){let t=LE();fv=Sv.promisify(t.evaluateSQL)}return fv(e)}async function gQ(e,t){try{if(e.body.operation!=="read_log"&&(FE.default.log_level===_m.INFO||FE.default.log_level===_m.DEBUG||FE.default.log_level===_m.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;Cn.info(c)}}catch(n){Cn.error(n)}let r=await EQ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return LAe[e.body.operation]&&dQ.default.setSchemaDataToGlobal(n=>{n&&Cn.error(n)}),r}function SQ(e){let t;try{t=TQ(e)}catch(s){throw Cn.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=LE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,o=s.convertSQLToAST(i);if(e.parsed_sql_object=o,!e.bypass_auth){let c=s.checkASTPermissions(e,o);if(c)throw Cn.error(`${eQ.FORBIDDEN} from operation ${e.operation}`),Cn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,ti.handleHDBError)(new Error,c,ti.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=uQ.default.verifyPerms(i,s);if(o)throw Cn.error(`${eQ.FORBIDDEN} from operation ${e.operation}`),Cn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,ti.handleHDBError)(new Error,o,ti.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,ti.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function TQ(e){if(Cn.trace(`getOperationFunction with operation: ${e.operation}`),tQ.has(e.operation))return tQ.get(e.operation);throw(0,ti.handleHDBError)(new Error,ti.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ti.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function Tv(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=SQ(e);return gQ({body:e},n)}async function DAe(e){Cn.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[rA]=!0;let o;switch(i.operation){case V.INSERT:o=await Ru.default.insert(i);break;case V.UPDATE:o=await Ru.default.update(i);break;case V.UPSERT:o=await Ru.default.upsert(i);break;case V.DELETE:o=await Qf.default.deleteRecord(i);break;default:Cn.warn("invalid operation in catchup");break}await CAe.postOperationHandler(i,o,e)}catch(o){Cn.info("Invalid operation in transaction"),Cn.error(o)}}async function ei(e){(0,hQ.transformReq)(e);let t,r;try{if(r=await UR.default.addJob(e),r){t=r.createdJob,Cn.info("addJob result",r);let n=new Ev.default.RunnerMessage(t,e);return{message:await Ev.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Cn.error(i),(0,ti.handleHDBError)(n,i)}}function vAe(){let e=new Map;return e.set(V.INSERT,new Z(Ru.default.insert)),e.set(V.UPDATE,new Z(Ru.default.update)),e.set(V.UPSERT,new Z(Ru.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(Jf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(Jf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(Jf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(Jf.default.searchByValue)),e.set(V.SEARCH,new Z(OAe)),e.set(V.SQL,new Z(PAe)),e.set(V.CSV_DATA_LOAD,new Z(ei,UE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(ei,UE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(ei,UE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(ei,UE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(vi.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(vi.default.createSchema)),e.set(V.CREATE_TABLE,new Z(vi.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(vi.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(vi.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(vi.default.dropSchema)),e.set(V.DROP_TABLE,new Z(vi.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(vi.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(xE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(xE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(xE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(xE.default.describeAll)),e.set(V.DELETE,new Z(Qf.default.deleteRecord)),e.set(V.ADD_USER,new Z(ON)),e.set(V.ALTER_USER,new Z(PN)),e.set(V.DROP_USER,new Z(LN)),e.set(V.LIST_USERS,new Z(vN)),e.set(V.LIST_ROLES,new Z(BE.default.listRoles)),e.set(V.ADD_ROLE,new Z(BE.default.addRole)),e.set(V.ALTER_ROLE,new Z(BE.default.alterRole)),e.set(V.DROP_ROLE,new Z(BE.default.dropRole)),e.set(V.USER_INFO,new Z(DN)),e.set(V.READ_LOG,new Z(nQ.default)),e.set(V.ADD_NODE,new Z(sQ.default)),e.set(V.UPDATE_NODE,new Z(mv.default)),e.set(V.SET_NODE_REPLICATION,new Z(mv.default)),e.set(V.REMOVE_NODE,new Z(iQ.default)),e.set(V.CONFIGURE_CLUSTER,new Z(oQ.default)),e.set(V.PURGE_STREAM,new Z(aQ.default)),e.set(V.SET_CONFIGURATION,new Z(_v.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(cQ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(lQ.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(MR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(MR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(MR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(ei,pv.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(yu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(yu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(yu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(yu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(yu.default.removeCertificate)),e.set(V.GET_KEY,new Z(yu.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(mP)),e.set(V.REMOVE_NODE_BACK,new Z(pP)),e.set(V.DELETE_FILES_BEFORE,new Z(ei,Qf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(ei,Qf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(ei,pv.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(UR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(UR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z(ND)),e.set(V.GET_FINGERPRINT,new Z(CD)),e.set(V.SET_LICENSE,new Z(OD)),e.set(V.RESTART,new Z(hv.default.restart)),e.set(V.RESTART_SERVICE,new Z(ei,hv.default.restartService)),e.set(V.CATCHUP,new Z(DAe)),e.set(V.SYSTEM_INFORMATION,new Z(fQ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(ei,Qf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(rQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(IC)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(wC)),e.set(V.LOGIN,new Z(sD)),e.set(V.LOGOUT,new Z(iD)),e.set(V.GET_CONFIGURATION,new Z(_v.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(wt.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(wt.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(wt.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(wt.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(wt.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(wt.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(wt.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(wt.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(wt.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(wt.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(wt.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(wt.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(gv.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(ei,gv.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(mQ.default.installModules)),e.set(V.GET_BACKUP,new Z(vi.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new Z(vi.default.cleanupOrphanBlobs)),e.set(V.ADD_SSH_KEY,new Z(wt.default.addSSHKey)),e.set(V.GET_SSH_KEY,new Z(wt.default.getSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(wt.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(wt.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(wt.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(wt.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(wt.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(pD)),e.set(V.LIST_METRICS,new Z(hD)),e.set(V.DESCRIBE_METRIC,new Z(ED)),e.set(V.GET_STATUS,new Z(AD)),e.set(V.SET_STATUS,new Z(ID)),e.set(V.CLEAR_STATUS,new Z(bD)),e.set(V.INSTALL_USAGE_LICENSE,new Z(AL)),e.set(V.GET_USAGE_LICENSES,new Z(CL)),e}var Jf,UE,vi,xE,Qf,rQ,BE,wt,FE,nQ,sQ,mv,iQ,oQ,aQ,cQ,lQ,MR,pv,uQ,UR,ti,hv,Sv,Ru,dQ,fQ,Ev,_v,gv,mQ,pQ,hQ,yu,EQ,_Q,eQ,Cn,CAe,OAe,fv,LAe,tQ,uD=se(()=>{Jf=b(gn()),UE=b(zD()),vi=b(VT()),xE=b(Vl()),Qf=b(vl()),rQ=b(HO());Es();BE=b(sh()),wt=b(cD()),FE=b(Q()),nQ=b(YO()),sQ=b(ry()),mv=b(SP()),iQ=b(sy()),oQ=b(RP()),aQ=b(bP()),cQ=b(wP()),lQ=b(CP()),MR=b(ly()),pv=b(iv()),uQ=b(IR()),UR=b(lv());G();ti=b(Ee()),hv=b(Vf()),Sv=b(require("util")),Ru=b(Vn()),dQ=b(ro()),fQ=b(vh()),Ev=b(JJ());Kd();sR();_v=b(gt()),gv=b(ER()),mQ=b(mD()),pQ=b(ai()),hQ=b(ae());Hr();yu=b(ys());gf();gD();EQ=b(UC()),_Q=b(XJ());TE();tE();LD();ZJ();({HTTP_STATUS_CODES:eQ}=ti.hdbErrors),Cn=FE.default.loggerWithTag("operation"),{transactToClusteringUtils:CAe}=_Q.default,OAe=Sv.promisify(Jf.default.search);a(PAe,"evaluateSQL");LAe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};a(gQ,"processLocalTransaction");tQ=vAe();Ue.operation=Tv;a(SQ,"chooseOperation");a(TQ,"getOperationFunction");(0,pQ._assignPackageExport)("operation",Tv);a(Tv,"operation");a(DAe,"catchup");a(ei,"executeJob");a(vAe,"initializeOperationFunctionMap")});var FR=M((pqe,AQ)=>{"use strict";var xR=(G(),v(j)),MAe=ae(),Xf=Q(),{handleHDBError:yv,hdbErrors:BR}=Ee(),{isMainThread:UAe}=require("worker_threads"),{Readable:xAe}=require("stream"),yQ=require("os"),BAe=require("util"),FAe=CC(),bQ=BAe.promisify(FAe.authorize),RQ=(uD(),v(lD)),{createGzip:kAe,constants:HAe}=require("zlib"),GAe=[xR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,xR.OPERATIONS_ENUM.LOGIN,xR.OPERATIONS_ENUM.LOGOUT];function qAe(e){let t=`Found an uncaught exception with message: ${e.message}. ${yQ.EOL}Stack: ${e.stack} ${yQ.EOL}Terminating ${UAe?"HDB":"thread"}.`;console.error(t),Xf.fatal(t),process.exit(1)}a(qAe,"handleServerUncaughtException");function $Ae(e,t,r){if(Xf[e.logLevel||"info"](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:BR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a($Ae,"serverErrorHandler");function VAe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=yv(new Error,"Invalid JSON.",BR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(MAe.isEmpty(e.body.operation)){let n=yv(new Error,"Request body must include an 'operation' property.",BR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(VAe,"reqBodyValidationHandler");function KAe(e,t,r){let n;!GAe.includes(e.body.operation)||e.body.operation===xR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?bQ(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{i.statusCode=401,Xf.debug("Login failed",i),r(i,null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(KAe,"authHandler");function YAe(e,t,r){bQ(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{Xf.warn(n),Xf.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(yv(n,s,BR.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(YAe,"authAndEnsureUserOnRequest");async function WAe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=RQ.chooseOperation(e.body);let s=await RQ.processLocalTransaction(e,n);if(s instanceof xAe&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(kAe({level:HAe.Z_BEST_SPEED})))}return s}catch(s){throw Xf.error(s),s}}a(WAe,"handlePostRequest");AQ.exports={authHandler:KAe,authAndEnsureUserOnRequest:YAe,handlePostRequest:WAe,handleServerUncaughtException:qAe,serverErrorHandler:$Ae,reqBodyValidationHandler:VAe}});var CQ=M((Eqe,NQ)=>{"use strict";var jAe=require("fastify-plugin"),{handlePostRequest:IQ,authHandler:zAe,reqBodyValidationHandler:JAe}=FR();async function QAe(e){e.decorate("hdbCore",{preValidation:[JAe,zAe],request:a(t=>wQ(IQ(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>wQ(IQ(t,r,!0)),"requestWithoutAuthentication")})}a(QAe,"hdbCore");async function wQ(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(wQ,"convertAsyncIterators");NQ.exports=jAe(QAe)});var PQ=M((Sqe,OQ)=>{"use strict";var gqe=require("fs"),kR=fe();kR.initSync();var{CONFIG_PARAMS:Rv}=(G(),v(j)),XAe=1024*1024*1024;function ZAe(e){let t=kR.get(Rv.HTTP_TIMEOUT),r=kR.get(Rv.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:XAe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:kR.get(Rv.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(ZAe,"getServerOptions");OQ.exports=ZAe});var vQ=M((yqe,DQ)=>{"use strict";var bv=fe();bv.initSync();var{CONFIG_PARAMS:LQ}=(G(),v(j));function eIe(){let e=bv.get(LQ.HTTP_CORSACCESSLIST),t=bv.get(LQ.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(eIe,"getCORSOptions");DQ.exports=eIe});var xQ=M((bqe,UQ)=>{"use strict";var MQ=fe();MQ.initSync();var tIe=(G(),v(j));function rIe(){return MQ.get(tIe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(rIe,"getHeaderTimeoutConfig");UQ.exports=rIe});var Iv={};ye(Iv,{customFunctionsServer:()=>iIe,ready:()=>zQ,start:()=>sIe});function sIe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Da||(Da=jQ(t),Ue.http((await Da).server));let o=await Da,c=(0,Av.dirname)(s),l=(0,Av.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!BQ.has(c)){BQ.add(c);try{o.register(aIe(c,l))}catch(u){if(u.message==="Root plugin has already booted")Tt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:zQ}}async function iIe(){try{Tt.info("In Custom Functions Fastify server"+process.cwd()),Tt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tt.debug(`Custom Functions server process ${process.pid} starting up.`),await oIe();let e=$Q.get(x.HTTP_SECUREPORT)>0,t;try{t=Da=await jQ(e)}catch(r){throw Tt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Tt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Tt.error(`Custom Functions ${process.pid} Error: ${e}`),Tt.error(e),process.exit(1)}}async function oIe(){try{Tt.info("Custom Functions starting configuration."),await Ei(),Tt.info("Custom Functions completed configuration.")}catch(e){Tt.error(e)}}function aIe(e,t){return async function(r){try{Tt.info("Custom Functions starting buildRoutes"),Tt.trace("Loading fastify routes folder "+e),(0,FQ.existsSync)(e)&&r.register(qQ.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Tt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Tt.error(s.message):s&&Tt.error(s),o()})}catch(n){Tt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function jQ(e){Tt.info("Custom Functions starting buildServer.");let t=(0,VQ.default)(e),r=(0,kQ.default)(t);r.server.headersTimeout=(0,YQ.default)(),r.setErrorHandler(WQ.serverErrorHandler);let n=(0,KQ.default)();return n&&r.register(HQ.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(GQ.default),await r.register(nIe),await r.after(),xm(r),Tt.info("Custom Functions completed buildServer."),r}function zQ(){if(Da)return Da.then?Da.then(e=>e.ready()):Da.ready()}var Av,FQ,kQ,HQ,GQ,qQ,$Q,Tt,nIe,VQ,KQ,YQ,WQ,Da,BQ,JQ=se(()=>{Av=require("path"),FQ=require("fs"),kQ=b(require("fastify")),HQ=b(require("@fastify/cors")),GQ=b(RC()),qQ=b(require("@fastify/autoload")),$Q=b(fe());G();Tt=b(Q()),nIe=b(CQ());Es();VQ=b(PQ()),KQ=b(vQ()),YQ=b(xQ()),WQ=b(FR());Go();Hr();BQ=new Set;a(sIe,"start");a(iIe,"customFunctionsServer");a(oIe,"setUp");a(aIe,"buildRouteFolder");a(jQ,"buildServer");a(zQ,"ready")});var Nv={};ye(Nv,{handleApplication:()=>cIe,suppressHandleApplicationWarning:()=>lIe});function cIe(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,va.join)(n.absolutePath,"index.html");(0,Zf.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&(r.set((0,va.dirname)(n.urlPath),null),r.set((0,va.join)((0,va.dirname)(n.urlPath),"/"),n.absolutePath));break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,va.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let o=t.get(n.pathname);if(!o){let d=e.options.get(["index"])??!0;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);if(d&&(o=r.get(n.pathname),o===null))return{status:301,headers:{Location:(0,va.join)(n.pathname,"/")}}}if(!o){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(o=t.get(`${n.pathname}.${f}`),o)break}if(o)return{handlesHeaders:!0,body:(0,wv.default)(n,(0,Zf.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(uIe(c),!c)return{status:404,body:"File not found"};let l=(0,va.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,Zf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,wv.default)(n,(0,Zf.realpathSync)(l))}},{runFirst:!0})}function uIe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var Zf,va,wv,lIe,QQ=se(()=>{Zf=require("node:fs"),va=require("node:path"),wv=b(require("send"));a(cIe,"handleApplication");lIe=!0;a(uIe,"validateNotFoundOption")});var Cv={};ye(Cv,{start:()=>dIe});function dIe({override:e}){return{handleFile:a((t,r,n)=>{HR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,XQ.parse)(t))){if(process.env[s]!==void 0)if(HR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)HR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var XQ,HR,ZQ=se(()=>{XQ=require("dotenv"),HR=b(Q());a(dIe,"start")});var Lv={};ye(Lv,{DataLoaderError:()=>Os,DataLoaderResult:()=>em,EmptyFileError:()=>VR,FileParseError:()=>$R,InvalidPropertyTypeError:()=>KR,MissingRequiredPropertyError:()=>kE,RecordProcessingError:()=>HE,SystemDatabaseError:()=>YR,UnsupportedFileExtensionError:()=>qR,computeRecordHash:()=>Pv,handleApplication:()=>pIe,loadDataFile:()=>a3,suppressHandleApplicationWarning:()=>mIe});function Pv(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,t3.createHash)("sha256").update(n).digest("hex")}function o3(e){return e.system&&e.system[Ov]?e.system[Ov]:GR||(GR=ze({database:"system",table:Ov,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),GR)}async function fIe(e,t,r,n){try{let s=o3(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return ri.error?.(`Failed to get stored hash: ${s.message}`),null}}async function e3(e,t,r,n,s){try{let i=o3(s),o=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:o,hash:n})}catch(i){ri.error?.(`Failed to store hash: ${i.message}`)}}function pIe(e){if((0,n3.getWorkerIndex)()!==0){ri.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(a(function(r){return r.entryType!=="file"||r.eventType==="unlink"?Promise.resolve():a3(r,yn,Me).then(n=>{ri.debug?.("Data loader processed file: %s: %s",(0,Ma.basename)(r.absolutePath),n.message)})},"handleDataLoaderEntry"))}async function a3({contents:e,absolutePath:t},r,n){let s=(0,Ma.extname)(t)||"unknown",i;try{if(s===".yaml"||s===".yml")i=(0,r3.parseDocument)(e.toString()).toJSON();else if(s===".json")i=JSON.parse(e.toString());else throw new qR(t,s)}catch(d){throw d instanceof Os?d:new $R(t,d)}if(!i)throw new VR(t);let{database:o,table:c,records:l}=i;if(!c)throw new kE(t,"table");if(!l)throw new kE(t,"records");if(!Array.isArray(l))throw new KR(t,"records","array");let u=o?`${o}.${c}`:c;if(o?.toLowerCase()==="system")throw new YR(o,c);try{let d;if(o&&n[o]&&n[o][c])ri.debug?.(`Using existing table ${u} from database tables`),d=n[o][c];else if(r&&r[c])ri.debug?.(`Using existing table ${u} from global tables`),d=r[c];else{ri.debug?.(`Table ${u} not found, creating new table`);let _=[];if(l.length>0){let R=l[0];Object.keys(R).map(S=>{let y={name:S,type:typeof R[S]};return S==="id"&&(y.isPrimaryKey=!0),y}).forEach(S=>{_.push(S)})}d=await ze({database:o,table:c,attributes:_})}let f=l.length,m=0,p=0,h=0,E=100;for(let _=0;_<l.length;_+=E){let R=l.slice(_,_+E),S=[];for(let y of R)S.push(async()=>{try{let w=null,I=y.id;I!==void 0&&(w=await d.get(I));let H=Pv(y);if(!w){m++;let z=await d.put(y);return await e3(o,c,I,H,n),z}let X=await fIe(o,c,I,n);if(!X)return h++,Promise.resolve({inserted:0,updated:0});let q={};for(let z of Object.keys(y))z in w&&(q[z]=w[z]);return Pv(q)!==X?(h++,Promise.resolve({inserted:0,updated:0})):H!==X?(p++,await d.patch(I,y),await e3(o,c,I,H,n),{updated:1}):(h++,Promise.resolve({inserted:0,updated:0}))}catch(w){if(w instanceof Os)ri.error?.(`Record processing error: ${w.message}`);else{let I=new HE(u,w);ri.error?.(`Record processing error: ${I.message}`)}return Promise.resolve({inserted:0,updated:0,error:w.message})}});await Promise.all(S.map(y=>y()))}if(m>0||p>0){let _=`Loaded ${m} new and updated ${p} records in ${u}`;return h>0&&(_+=` (${h} records skipped)`),ri.info?.(_),new em(t,o,c,"success",m+p,_)}else if(h>0){let _=`All ${h} records in ${u} already up-to-date`;return ri.info?.(_),new em(t,o,c,"skipped",f,_)}else{let _=`No records to process in ${u}`;return ri.info?.(_),new em(t,o,c,"success",0,_)}}catch(d){throw d instanceof Os?d:new HE(u,d)}}var Ma,t3,r3,n3,Ua,s3,i3,ri,Ov,GR,mIe,Os,qR,$R,VR,kE,KR,YR,HE,em,c3=se(()=>{Ma=require("node:path"),t3=require("node:crypto"),r3=require("yaml");Oe();n3=b(st()),Ua=b(Jr()),s3=b(Ee()),i3=b(Q()),ri=i3.default.forComponent("dataLoader"),Ov="hdb_dataloader_hash";a(Pv,"computeRecordHash");a(o3,"getHashTrackingTable");a(fIe,"getStoredHash");a(e3,"storeHash");mIe=!0;a(pIe,"handleApplication");a(a3,"loadDataFile");Os=class extends s3.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=Ua.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},qR=class extends Os{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Ma.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},$R=class extends Os{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Ma.basename)(t)}: ${r.message}`,Ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},VR=class extends Os{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Ma.basename)(t)} is empty or invalid`,Ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},kE=class extends Os{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Ma.basename)(t)} is missing required "${r}" property`,Ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},KR=class extends Os{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Ma.basename)(t)} has invalid "${r}" property, expected ${n}`,Ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},YR=class extends Os{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ua.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},HE=class extends Os{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ua.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},em=class{static{a(this,"DataLoaderResult")}#e;#t;#n;#r;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#n=n||"unknown",this.#r=s,this.#s=i,this.#i=o}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#n}get status(){return this.#r}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#n,status:this.#r,count:this.#s,message:this.#i}}}});var Dv={};ye(Dv,{calculateRestHttpURL:()=>T3,hdbServer:()=>gIe,start:()=>gIe});async function gIe(e){try{Mi.default.debug("In Fastify server"+process.cwd()),Mi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Mi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=l3.default.isMaster,await SIe();let t=e.securePort>0;tm=TIe(t,e.resources),await tm.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(tm.server,e),tm.server.closeIdleConnections||await tm.listen({port:0,host:"::"})}catch(r){throw tm.close(),Mi.default.error(r),Mi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Mi.default.fatal(t),process.exit(1)}}async function SIe(){return Mi.default.trace("Configuring HarperDB process."),_3.default.setSchemaDataToGlobal(),Ei()}function TIe(e,t){Mi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=bIe(e),n=(0,u3.default)(r);n.server.headersTimeout=IIe(),n.setErrorHandler(Oo.serverErrorHandler);let s=AIe();s&&n.register(d3.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(p3.default),n.register(f3.default),xm(n),n.get("/health",()=>"HarperDB is running."),n.register(m3.default,{root:h3.default.join(E3.PACKAGE_ROOT,"studio/web")});let i=Ui.default.get(Sm.LOCAL_STUDIO_ON);return!g3.default.isEmpty(i)&&i.toString().toLowerCase()==="true"?n.get("/",(o,c)=>c.sendFile("index.html")):n.get("/",(o,c)=>c.sendFile("running.html")),n.get("/api/openapi/rest",{preValidation:[Oo.authAndEnsureUserOnRequest]},yIe(t)),n.post("/",{preValidation:[Oo.reqBodyValidationHandler,Oo.authHandler],config:{isOperation:!0}},RIe),Mi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function yIe(e){let t=Ui.default.get(x.HTTP_PORT),r=Ui.default.get(x.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?kS(e,T3(t,r,n)):(Mi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new S3.ServerError("Forbidden",403))}function T3(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return n.hostname.toLowerCase()==="localhost"||n.hostname.match(/^[\d.:]+$/)?t?(n.port=t,n.protocol="https:"):e&&(n.port=e,n.protocol="http:"):(n.port="443",n.protocol="https:"),n.toString()}function RIe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,Oo.handlePostRequest)(e,t)}function bIe(e){let t=Ui.default.get(rm.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ui.default.get(rm.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:EIe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:Ui.default.get(rm.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function AIe(){let e=Ui.default.get(rm.OPERATIONSAPI_NETWORK_CORS),t=Ui.default.get(rm.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===_Ie)&&(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 IIe(){return Ui.default.get(rm.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??hIe}var l3,Ui,Mi,u3,d3,f3,m3,p3,h3,E3,_3,g3,Oo,S3,hIe,EIe,_Ie,rm,tm,y3=se(()=>{l3=b(require("cluster")),Ui=b(fe());G();Mi=b(Q()),u3=b(require("fastify")),d3=b(require("@fastify/cors")),f3=b(require("@fastify/compress")),m3=b(require("@fastify/static")),p3=b(RC()),h3=b(require("path")),E3=b(yt()),_3=b(ro()),g3=b(ae());Es();Hr();Oo=b(FR());Go();_C();S3=b(Ee());Ui.default.initSync();hIe=6e4,EIe=1024*1024*1024,_Ie="TRUE",{CONFIG_PARAMS:rm}=j;a(gIe,"operationsServer");a(SIe,"setUp");a(TIe,"buildServer");a(yIe,"restOpenAPIHandler");a(T3,"calculateRestHttpURL");a(RIe,"handler");a(bIe,"getServerOptions");a(AIe,"getCORSOpts");a(IIe,"getHeaderTimeoutConfig")});var Fv={};ye(Fv,{disableNATS:()=>NIe,publishToStream:()=>zR,setNATSReplicator:()=>vv,setPublishToStream:()=>CIe,setSubscription:()=>Bv,start:()=>wIe});function wIe(){GE.default.get(x.CLUSTERING_ENABLED)&&PIe()}function NIe(e=!0){w3=e}function CIe(e,t){zR=e,Bv=t}function PIe(){if(w3||process.env._DISABLE_NATS)return;let e=lt(),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];vv(s,r,i)}}ql((r,n)=>{vv(r.tableName,r.databaseName,r),n&&C3(r)}),!R3&&(R3=!0)}function vv(e,t,r){if(t==="system"&&LIe.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 Xt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){C3(i)}static subscribe(){let i=new ns;return Bv(t,e,i),i}static subscribeOnThisThread(i){return i<(GE.default.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??OIe)}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 WR(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=N3;return i}a(n,"getNATSTransaction")}function C3(e){let t=GE.default.get(x.CLUSTERING_NODENAME);zR(`${Uv.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,xv.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 b3,Uv,xv,A3,I3,GE,jR,w3,zR,Bv,OIe,N3,R3,LIe,WR,Mv,O3=se(()=>{Oe();zi();b3=b(Sr()),Uv=b(Pt()),xv=b(so());ku();A3=b(JR()),I3=b(Un()),GE=b(fe());G();jR=b(Q());a(wIe,"start");a(NIe,"disableNATS");zR=b3.publishToStream,Bv=A3.setSubscription;a(CIe,"setPublishToStream");OIe=2;a(PIe,"assignReplicationSource");LIe=["hdb_job","hdb_raw_analytics","hdb_info"];a(vv,"setNATSReplicator");a(C3,"publishSchema");WR=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=GE.default.get(x.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let o=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(jR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=o)),l.table===f&&l.operation===m?(o.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(zR(`${Uv.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,xv.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw jR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},Mv=class extends WR{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,I3.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};N3=new Mv});async function M3({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await kv.get(e,{returnNonexistent:!0});i=new qv(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await kv.get(e);o&&o.delete()}i=new XR(e,t)}return n&&(n.id=e,n.user={username:t?.username},qE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function Hv(){return QR++,QR>65500&&(QR=1),QR}function Gv(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=xs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=new Us(i.relativeURL);o.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return bt(r,()=>s?t===void 0?c.delete(o,r):c.put(o,e.data,r):c.publish(o,e.data,r))}var L3,Wc,D3,v3,P3,kv,qE,QR,XR,qv,U3=se(()=>{Oe();tc();L3=b(Un()),Wc=b(Q());ja();D3=b(st()),v3=b(kL());Hr();bg();P3=100,kv=ze({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"}]}}]}),qE=ze({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,D3.getWorkerIndex)()===0&&(async()=>{await v3.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of qE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await Gv(r,t,r)}catch{(0,Wc.warn)("Failed to publish will",t)}qE.delete(e.id)}})();a(M3,"getSession");QR=1;a(Hv,"getNextMessageId");XR=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:o,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};o&&(0,Wc.trace)("Resuming subscription from",s,"from",o);let p=xs.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let y=S.split("/"),w;for(let X=0;X<y.length;X++)if(y[X].indexOf("+")>-1)if(y[X]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&w)throw new Error("Filters can not be combined");let I=!0;y[y.length-1]==="#"&&(y.length--,I=!1),w&&(n=a(X=>{let q=X.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(I&&q.length!==y.length)return!1;for(let k=0;k<y.length;k++)if(y[k]!=="+"&&y[k]!==q[k])return!1;return!0},"filter"));let H=y.indexOf("+");m.url="/"+(H>-1?y.slice(0,H):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,_=p.Resource,R=await bt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await _.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let w=(async()=>{for await(let I of y)try{let H;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,H=this.needsAcknowledge(I)):(I.acknowledge?.(),H=Hv());let X=I.id;if(Array.isArray(X)&&(X=sd(X)),X==null&&(X=""),await this.listener(E+"/"+X,I.value,H,t)===!1)break;this.awaitingAcks?.size>P3?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-P3)):await new Promise(setImmediate)}catch(H){(0,Wc.warn)(H)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=Hv();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 Gv(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();bt(r,async()=>{try{if(!t){let n=await qE.get(this.sessionId);n?.doesExist()&&await Gv(n,n.data,r)}}finally{await qE.delete(this.sessionId)}}).catch(n=>{(0,Wc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(Gv,"publish");qv=class extends XR{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=Hv(),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,Wc.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,L3.getNextMonotonicTime)()),(0,Wc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),kv.put(this.sessionRecord)}}});var $v={};ye($v,{bypassAuth:()=>DIe,start:()=>MIe});function DIe(){G3=!0}function MIe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new H3.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);o.events.emit("connection",u),rr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=B3(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),o);u.on("message",p),u.on("close",h),u.on("error",E=>{rr.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),rr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await lf(p,l);if(!E.valid)throw rr.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,nm.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eb.notify?.({username:d?.username,status:oi.SUCCESS,type:Ka.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,nm.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&eb.error?.({username:h,status:oi.FAILURE,type:Ka.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else rr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){o.events.emit("error",p,u),rr.error?.(p)}else if(l.required)return rr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&vIe(u.remoteAddress)&&(d=await Fp(),rr.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=B3(u,p=>u.write(p),null,d,o);u.on("data",f),u.on("close",m),u.on("error",p=>{rr.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function B3(e,t,r,n,s){x3||(x3=!0,Zm(f=>{ZR>0&&f.push({metric:"mqtt-connections",connections:ZR,byThread:!0})}));let i;ZR++;let o,c={protocolVersion:4},l=(0,tb.parser)({protocolVersion:5});function u(f){l.parse(f)}a(u,"onMessage");function d(){ZR--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),en(!1,"connection","mqtt","disconnect"),rr.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),rr.info?.(y);return}let m=f.cmd;if(o)o.then&&await o;else if(m!=="connect"){rr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Ye(f.length,"bytes-received",E,R(f),"mqtt");try{switch(o?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Ue.getUser(f.username,f.password.toString(),r),(0,nm.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eb.notify?.({username:n?.username,status:oi.SUCCESS,type:Ka.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(z){return(0,nm.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&eb.error?.({username:f.username,status:oi.FAILURE,type:Ka.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,z),en(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),en(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let z=e.deserialize||(e.deserialize=Ho(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?z(f.will.payload):void 0,delete f.will.payload}o=M3({user:n,...f}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(z){return rr.error?.(z),s.events.emit("auth-failed",f,e,z),en(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:z.code||5,returnCode:z.code||128})}s.events.emit("connected",o,e),en(!0,"connection","mqtt","connect"),_({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let y=a(async(z,Y,ce,de)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",z);let te=z.indexOf("/",1),Se=te>0?z.slice(0,te):z;_({cmd:"publish",topic:z,payload:await S(Y),messageId:ce||Math.floor(Math.random()*1e8),qos:de.qos},Se);let Ne=e._socket??e;return Ne.writableNeedDrain?new Promise(Ke=>Ne.once("drain",Ke)):!Ne.closed}catch(te){return rr.error?.(te),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(y),o.sessionWasPresent&&await o.resume();break;case"subscribe":let w=[];for(let z of f.subscriptions){let Y;try{let ce=await o.addSubscription(z,z.qos>=1);Y=ce?ce.qos||0:c.protocolVersion<5?128:143}catch(ce){s.events.emit("error",ce,e,z,o),ce.statusCode?ce.statusCode===500?rr.warn?.(ce):rr.info?.(ce):rr.error?.(ce),Y=c.protocolVersion<5?128:ce.statusCode===403?135:ce.statusCode===404?143:128}w.push(Y)}await o.committed,_({cmd:"suback",granted:w,messageId:f.messageId});break;case"unsubscribe":{let z=[];for(let Y of f.unsubscriptions)z.push(o.removeSubscription(Y)?0:17);_({cmd:"unsuback",granted:z,messageId:f.messageId});break}case"pubrel":_({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let I=f.qos===2?"pubrec":"puback",H=e.deserialize||(e.deserialize=Ho(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?H(f.payload):void 0,k;try{k=await o.publish(f,q)}catch(z){s.events.emit("error",z,e,f,o),rr.warn?.(z),f.qos>0&&_({cmd:I,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&_({cmd:I,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":_({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(f.messageId);break;case"pingreq":_({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),en(!0,"connection","mqtt","disconnect"),rr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,o),rr.error?.(y),_({cmd:"disconnect"})}function _(y,w){let I=(0,tb.generate)(y,c);t(I),Ye(I.length,"bytes-sent",w,R(y),"mqtt")}a(_,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(R,"packetMethodName");function S(y){return ko(y,r)}a(S,"serialize")}),l.on("error",f=>{rr.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var tb,nm,F3,k3,H3,eb,rr,G3,vIe,x3,ZR,q3=se(()=>{tb=require("mqtt-packet");U3();Es();Go();is();Hr();nm=b(fe());G();F3=b(ir()),k3=b(Q()),H3=require("events");MT();eb=(0,F3.loggerWithTag)("auth-event"),rr=(0,k3.forComponent)("mqtt"),G3=(0,nm.get)(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(DIe,"bypassAuth");vIe=a(e=>G3&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");a(MIe,"start");ZR=0;a(B3,"onSocket")});function rb(e,t){if(t?.includes(".."))throw new Vv(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var Vv,Kv=se(()=>{Vv=class extends Error{static{a(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};a(rb,"resolveBaseURLPath")});function $3(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(o=>o[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var V3=se(()=>{a($3,"deriveCommonPatternBase")});function nb(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=a((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var Yv=se(()=>{a(nb,"deriveGlobOptions")});var K3,Wv,$E,Y3=se(()=>{Kv();V3();Yv();K3=require("micromatch"),Wv=class extends Error{static{a(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},$E=class{static{a(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=rb(this.name,this.config.urlPath),this.globOptions=nb(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new Wv(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,K3.scan)(s).base),this.commonPatternBase=$3(this.patternBases)}}});function W3(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function bu(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(W3(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(W3(n,t)){t=t.slice(n.length+1);break}}}return(0,j3.join)(e.baseURLPath,t)}var j3,jv=se(()=>{j3=require("node:path");a(W3,"pathStartsWithBase");a(bu,"deriveURLPath")});function z3(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var ib,J3,Q3,zv,X3,Z3,sb,e6=se(()=>{ib=require("node:events");Y3();J3=b(Q()),Q3=b(require("chokidar")),zv=require("node:path"),X3=require("node:fs/promises");jv();Z3=require("micromatch"),sb=class extends ib.EventEmitter{static{a(this,"EntryHandler")}#e;#t;#n;#r;#s;ready;constructor(t,r,n,s){super(),this.#e=new $E(t,r,z3(n)),this.#n=s||J3.default.loggerWithTag(t),this.#r=new Set,this.#s=!1,this.ready=(0,ib.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#i(...[t,r,n]){if(r===""&&(r="/"),!(0,Z3.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,zv.join)(this.directory,r);switch(t){case"add":case"change":{let i=bu(this.#e,r,"file"),o=(0,X3.readFile)(s).then(c=>{let l={eventType:t,entryType:"file",contents:c,stats:n,absolutePath:s,urlPath:i};this.emit("all",l),this.emit(t,l)}).finally(()=>{this.#r.delete(o),this.#c()});this.#r.add(o);break}case"unlink":{let i=bu(this.#e,r,"file"),o={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}case"addDir":case"unlinkDir":{let i=bu(this.#e,r,"directory"),o={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}}}#o(t){this.emit("error",t)}#u(){this.#s=!0,this.#r.size>0&&this.#n.debug?.(`Initial scan complete, still waiting for ${this.#r.size} pending file reads`),this.#c()}#c(){this.#s&&this.#r.size===0&&this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,zv.join)(this.#e.directory,r));return this.#t=Q3.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:a(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.#i.bind(this)).on("error",this.#o.bind(this)).on("ready",this.#u.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,z3(t)),this.#a()}};a(z3,"castConfig")});var ob,Jv=se(()=>{ob={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var cb,t6,r6,n6,s6,i6,Qv,Xv,Zv,eM,tM,ab,o6=se(()=>{cb=require("events"),t6=b(require("yaml")),r6=b(require("chokidar")),n6=require("node:fs/promises"),s6=require("util"),i6=b(Q());Jv();Qv=class extends Error{static{a(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},Xv=class extends Error{static{a(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},Zv=class extends Error{static{a(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},eM=class extends Error{static{a(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},tM=class extends Error{static{a(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},ab=class extends cb.EventEmitter{static{a(this,"OptionsWatcher")}#e;#t;#n;#r;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||i6.default.loggerWithTag(t),this.ready=(0,cb.once)(this,"ready"),this.#t=r6.default.watch(r,{persistent:!1}).on("add",this.#o.bind(this)).on("change",this.#o.bind(this)).on("error",this.#u.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#o.bind(this))}#o(){(0,n6.readFile)(this.#e,"utf-8").then(t=>{this.#r=t6.default.parse(t),this.#r&&this.#s in this.#r?this.#n?this.#l(this.#r[this.#s],this.#n):(this.#n=this.#r[this.#s],this.emit("ready",this.#n)):this.#n&&(this.#n=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#r?(this.#a(),this.emit("remove")):(this.#a(),this.emit("ready"));return}this.emit("error",t)})}#u(t){this.emit("error",new Qv(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.#a(),this.emit("remove")}#a(){this.#r=ob,this.#n=this.#r[this.#s]}#l(t,r,n=[]){if(!this.#d(r)||!this.#d(t)){this.#m(n,t);return}for(let s of Object.keys(r))s in t||this.#m(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let o=n.concat(s),c=this.#f(o);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#m(o,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#d(c)?this.#l(i,c,o):this.#m(o,i);continue}(0,s6.isDeepStrictEqual)(i,c)||this.#m(o,i)}}#d(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#f(t){let r=this.#n;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#m(t,r){if(!this.#n)throw new Xv;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new Zv(t,r);let n=this.#n;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new eM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new tM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#n)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#n?this.#f(t):void 0}getAll(){return structuredClone(this.#n)}getRoot(){return this.#r}}});var VE,a6,lb,ub,c6=se(()=>{VE=require("node:events");e6();o6();a6=b(Q());yD();lb=class extends Error{static{a(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},ub=class extends VE.EventEmitter{static{a(this,"Scope")}#e;#t;#n;#r;#s;#i;#o;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#n=t,this.#t=r,this.#e=n,this.#i=(0,a6.loggerWithTag)(this.#n),this.resources=s,this.server=i,this.#s=[],this.#o=new Set,this.ready=(0,VE.once)(this,"ready"),this.options=new ab(t,n,this.#i).on("error",this.#c.bind(this)).on("change",this.#d.bind(this)()).on("ready",this.#u.bind(this))}get logger(){return this.#i}get name(){return this.#n}get directory(){return this.#t}get configFilePath(){return this.#e}#u(){this.emit("ready")}#c(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#a(t){let r=new sb(this.#n,this.#t,t,this.#i).on("error",this.#c.bind(this)).on("add",this.#l("add")).on("change",this.#l("change")).on("unlink",this.#l("unlink")).on("addDir",this.#l("addDir")).on("unlinkDir",this.#l("unlinkDir"));return this.#s.push(r),r}#l(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#d(){let t=this;return a(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#r){t.#r=t.#a(i);return}t.#r.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#f(){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){let n,s=a((i,o)=>{let c=new Set,l=a(d=>{let f=o(d);if(f instanceof Promise){let m=f.catch(p=>{throw this.#i.error?.("Error in async entry handler:",p),this.#c(p),p}).finally(()=>c.delete(m));c.add(m)}},"wrapped"),u=(0,VE.once)(i,"ready").then(async()=>{c.size>0&&await Promise.all(c),i.emit("initialLoadComplete")});return this.#o.add(u),u.finally(()=>this.#o.delete(u)),l},"wrapHandler");if(t===void 0)if(this.#r)n=this.#r;else{let i=this.#f();if(i)this.#r=this.#a(i),n=this.#r;else{this.emit("error",new lb);return}}else if(typeof t=="function"){if(this.#r)n=this.#r;else{let o=this.#f();if(o)this.#r=this.#a(o),n=this.#r;else{this.emit("error",new lb);return}}let i=s(n,t);n.on("all",i)}else if(n=this.#a(t),r){let i=s(n,r);n.on("all",i)}return n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),b4()}async waitForInitialLoads(){this.#o.size>0&&await Promise.all(this.#o)}}});function Au(e){return typeof e=="string"&&e.trim()!==""}function rM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>Au(t))}function f6(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function UIe(e){e.config.root&&KE.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 lM(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(f6(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let o=(0,YE.join)(e.directory,i);db.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,o,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,o,e.resources))}return s}async function m6(e){let t=!1;if(t=await UIe(e),t)return t;let r=await(0,l6.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,YE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=bu(e,n.path,"directory");db.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=bu(e,n.path,"file"),o=await(0,u6.readFile)(s);db.isMainThread&&e.module.setupFile?(await e.module.setupFile(o,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(o,i,s,e.resources),t=!0)}else KE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var db,l6,KE,YE,u6,d6,fb,xi,nM,sM,iM,oM,aM,cM,lM,uM,dM,p6=se(()=>{db=require("node:worker_threads"),l6=b(require("fast-glob")),KE=b(Q());Kv();Yv();YE=require("node:path"),u6=require("node:fs/promises");jv();d6=require("micromatch"),fb=class{static{a(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!Au(this.config.files)&&!rM(this.config.files)&&!f6(this.config.files))throw new nM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!rM(this.config.files.source)&&!Au(this.config.files.source))throw new sM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new iM(this);if(this.config.files.ignore!==void 0&&!rM(this.config.files.ignore)&&!Au(this.config.files.ignore))throw new oM(this)}if(this.config.root!==void 0&&!Au(this.config.root))throw new cM(this);if(this.config.path!==void 0&&!Au(this.config.path))throw new uM(this);if(this.config.path&&(KE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!Au(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new dM(this);this.globOptions=nb(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new aM(this,r);return r.startsWith("/")&&(KE.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,d6.scan)(r).base),this.baseURLPath=rb(this.name,this.config.urlPath)}},xi=class extends Error{static{a(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,YE.basename)(r.directory)}) ${t}`)}},nM=class extends xi{static{a(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},sM=class extends xi{static{a(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},iM=class extends xi{static{a(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},oM=class extends xi{static{a(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},aM=class extends xi{static{a(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},cM=class extends xi{static{a(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},lM=class extends xi{static{a(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},uM=class extends xi{static{a(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},dM=class extends xi{static{a(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};a(Au,"isNonEmptyString");a(rM,"isArrayOfNonEmptyStrings");a(f6,"isObject");a(UIe,"handleRoots");a(m6,"processResourceExtensionComponent")});var jy={};ye(jy,{getComponentName:()=>Ky,loadComponent:()=>Eb,loadComponentDirectories:()=>g6,setErrorReporter:()=>BIe});function g6(e,t){t&&(mM=t),e&&(_M=e);let r=[];if((0,jt.existsSync)(fM)){let s=(0,jt.readdirSync)(fM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Yr.join)(fM,o);r.push(Eb(c,mM,Jb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Eb(n,mM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{_6=!0})}function BIe(e){pb=e}function FIe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{Pa.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(Pa.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,Yr.join)(e,"node_modules");(0,jt.existsSync)(s)||(0,jt.mkdirSync)(s);let i=(0,Yr.join)(s,"harperdb");if((0,jt.existsSync)(i)){if((0,jt.realpathSync)(i)===(0,jt.realpathSync)(EM.PACKAGE_ROOT))return t();(0,jt.rmSync)(i,{recursive:!0,force:!0})}(0,jt.symlinkSync)(EM.PACKAGE_ROOT,i,"dir"),t()}finally{Pa.primaryStore.unlock(e,0)}})}function S6(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(!Pa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(S6(e,t))}))return new Promise((o,c)=>{n=o,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)});let i;return Promise.race([Promise.resolve(t.handleApplication(e)).then(async()=>{await e.waitForInitialLoads()}),new Promise((o,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{Pa.primaryStore.unlock(e.name,0),clearTimeout(i)})})}async function Eb(e,t,r,n,s,i){let o=(0,jt.realpathSync)(e);if(mb.has(o))return mb.get(o);mb.set(o,!0),s&&(_M=s);try{let c,l=(0,Yr.join)(e,"harperdb-config.yaml");if((0,jt.existsSync)(l)?c=n?(0,_b.getConfigObj)():(0,hM.parseDocument)((0,jt.readFileSync)(l,"utf8")).toJSON():!n&&(0,jt.existsSync)(l=(0,Yr.join)(e,"config.yaml"))?c=(0,hM.parseDocument)((0,jt.readFileSync)(l,"utf8")).toJSON():c=ob,!n)try{await FIe(e)}catch(m){xa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&xa.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=hb,d={};for(let m in c){let p=n?m:`${(0,Yr.basename)(e)}.${m}`;hb=m;let h=c[m];if(!h)continue;lo.loading(p);let E,_=h.package;try{if(_){let I=null;if(n)I=(0,Yr.join)(e,"components",m);else{let H=e;for(I=(0,Yr.join)(H,"node_modules",m);!(0,jt.existsSync)(I);){if(H=(0,Yr.dirname)(H),H.length<(0,E6.getHdbBasePath)().length){I=null;break}I=(0,Yr.join)(H,"node_modules",m)}}if(I)E=await Eb(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else E=xIe[m];if(!E){lo.loaded(p,`Application component '${p}' processed`);continue}let R=a(I=>(I.origin=r,ze(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,w=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let I=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw lo.failed(p,I,`Component '${p}' failed to load`),I}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&xa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new ub(m,e,l,t,Ue);await S6(I,E),lo.loaded(p,`Component '${p}' loaded successfully`);continue}if(pM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:R,port:w,securePort:y,resources:t,...h})||E,n&&S))for(let I of[w,y])try{if(+I&&!h6.includes(I)){let H=gM.get(x.HTTP_SESSIONAFFINITY);H&&xa.default.warn("Session affinity is not recommended and may cause memory leaks"),(H||!HS)&&(h6.push(I),$L(I,H))}}catch(H){console.error("Error listening on socket",I,H,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:R,port:w,securePort:y,resources:t,...h})||E),_M.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new fb({config:h,name:m,directory:e,module:E,resources:t});d[m]=await m6(I)}lo.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,Yr.basename)(e)}' due to: ${R.message}`,pb?.(R),((0,WE.getWorkerIndex)()===0?console:xa.default).error(R),t.set(h.path||"/",new Sl(R),null,!0),lo.failed(p,R,`Could not load component '${p}'`)}}if(hb=u,pM.isMainThread&&!_6&&i&&(0,WE.watchDir)(e,async()=>g6()),c.extensionModule||c.pluginModule){let m=await xS((0,Yr.join)(e,c.extensionModule||c.pluginModule));return mb.set(o,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;pb?.(new Error(m)),((0,WE.getWorkerIndex)()===0?console:xa.default).error(m),lo.failed((0,Yr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||xa.default.warn(`Component ${m} from (${(0,Yr.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}`,pb?.(c),t.set("",new Sl(c))}}var jt,Yr,pM,hM,gM,EM,xa,WE,E6,_b,fM,_M,_6,mM,xIe,h6,mb,pb,hb,Ky,oE=se(()=>{jt=require("node:fs"),Yr=require("node:path"),pM=require("node:worker_threads"),hM=require("yaml"),gM=b(fe()),EM=b(yt());G();n$();m$();N$();M$();U$();J$();JQ();QQ();ZQ();xa=b(Q());c3();WE=b(st());uC();Hr();Oe();KL();E6=b(fe());y3();sR();O3();Ss();q3();_b=b(gt());oh();SI();c6();p6();BL();TE();Gp();Jv();fM=(0,_b.resolvePath)(gM.get(x.COMPONENTSROOT)),_M=new Map;a(g6,"loadComponentDirectories");xIe={REST:qS,rest:qS,graphql:rC,graphqlSchema:eC,roles:lC,jsResource:dC,fastifyRoutes:Iv,login:mC,static:Nv,operationsApi:Dv,customFunctions:{},http:Vy,clustering:Fv,replication:sa,authentication:mE,mqtt:$v,loadEnv:Cv,logging:xa.default,dataLoader:Lv},h6=[],mb=new Map;a(BIe,"setErrorReporter");Ky=a(()=>hb,"getComponentName");a(FIe,"symlinkHarperModule");a(S6,"sequentiallyHandleApplication");a(Eb,"loadComponent")});var zy=M((cVe,T6)=>{var{isMainThread:SM}=require("worker_threads"),{getTables:kIe}=(Oe(),v(ft)),{loadComponentDirectories:HIe,loadComponent:GIe}=(oE(),v(jy)),{resetResources:qIe}=(tc(),v(TI)),$Ie=gt(),{dirname:VIe}=require("path"),{getConnection:KIe}=Sr(),YIe=fe(),{CONFIG_PARAMS:WIe}=(G(),v(j)),{loadCertificates:jIe}=ys(),{installApplications:zIe}=(fR(),v(dR)),{loadAndWatchLicensesDir:JIe}=(tE(),v(Fy)),TM=new Map;async function QIe(e=!1){!SM&&YIe.get(WIe.CLUSTERING_ENABLED)&&KIe();try{SM&&await zIe()}catch(n){console.error(n)}let t=qIe();kIe(),t.isWorker=e,SM&&JIe(),await jIe(),await GIe(VIe($Ie.getConfigFilePath()),t,"hdb",!0,TM),await HIe(TM,t);let r=[];for(let[n]of TM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(QIe,"loadRootComponents");T6.exports.loadRootComponents=QIe});var st=M((uVe,Fi)=>{"use strict";iA();var{Worker:XIe,MessageChannel:ZIe,parentPort:Po,isMainThread:IM,threadId:ewe,workerData:Lo}=require("worker_threads"),{PACKAGE_ROOT:twe}=yt(),{join:A6,isAbsolute:rwe,extname:nwe}=require("path"),{server:I6}=(Hr(),v(ym)),{watch:swe,readdir:iwe}=require("fs/promises"),{totalmem:y6}=require("os"),{setHeapSnapshotNearHeapLimit:owe}=require("v8"),jc=(G(),v(j)),Tb=fe(),Bi=Q(),{randomBytes:awe}=require("crypto"),{_assignPackageExport:cwe}=ai(),R6=1024*1024,Ba=[],ni=[],lwe=50,wM=1e4,uwe="restart",w6="request_thread_info",N6="resource_report",C6="thread_info",O6="added-port",dwe="ack",yM;cwe("threads",ni);Fi.exports={startWorker:RM,restartWorkers:CM,shutdownWorkers:U6,shutdownWorkersNow:Ewe,workers:Ba,setMonitorListener:Awe,onMessageFromWorkers:_we,onMessageByType:B6,broadcast:Swe,broadcastWithAcknowledgement:ywe,setChildListenerByType:hwe,getWorkerIndex:P6,getWorkerCount:L6,getTicketKeys:v6,setMainIsWorker:mwe,setTerminateTimeout:fwe,restartNumber:Lo?.restartNumber||1};ni.onMessageByType=B6;ni.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ni.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Fi.exports.whenThreadsStarted=new Promise(e=>{Fi.exports.threadsHaveStarted=e});Tb.get(jc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&owe(1);var NM;function fwe(e){wM=e}a(fwe,"setTerminateTimeout");function P6(){return Lo?Lo.workerIndex:NM?0:void 0}a(P6,"getWorkerIndex");function L6(){return Lo?Lo.workerCount:NM?1:void 0}a(L6,"getWorkerCount");function mwe(e){NM=e,Fi.exports.threadsHaveStarted()}a(mwe,"setMainIsWorker");var D6=1,gb;function v6(){return gb||(gb=IM?awe(48):Lo.ticketKeys,gb)}a(v6,"getTicketKeys");Object.defineProperty(I6,"workerIndex",{get(){return P6()}});Object.defineProperty(I6,"workerCount",{get(){return L6()}});var M6={[w6](e,t){Rwe(t)},[N6](e,t){bwe(t,e)}};function RM(e,t={}){let r=process.constrainedMemory?.()||y6();r=Math.min(r,y6(),2e4*R6);let n=Tb.get(jc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/R6/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of ni){let d=new ZIe;d.existingPort=u,i.push(d),o.push(d.port2)}nwe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];Tb.get(jc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new XIe(rwe(e)?e:A6(twe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:D6=t.threadCount,name:t.name,restartNumber:Fi.exports.restartNumber,ticketKeys:v6()},transferList:o,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:O6,port:u,threadId:l.threadId},[u]);return yb(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>RM(e,t),l.on("error",u=>{Bi.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{Ba.splice(Ba.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<lwe?(t.unexpectedRestarts=l.unexpectedRestarts+1,RM(e,t)):Bi.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{M6[u.type]?.(u,l)}),Ba.push(l),wwe(),t.onStarted&&t.onStarted(l),l.name=t.name,l}a(RM,"startWorker");var pwe=[jc.THREAD_TYPES.HTTP];async function CM(e=null,t=Math.max(D6>3,1),r=!0){if(IM){try{process.chdir(process.cwd())}catch(o){Bi.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=zy();await o()}Fi.exports.restartNumber++,t<1&&(t=t*Ba.length);let n=[],s=[];for(let o of Ba.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Bi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Fi.exports.restartNumber,type:jc.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=pwe.indexOf(o.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},wM*2).unref();o.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),d=new Promise(f=>{let m=a(p=>{p.type===jc.ITC_EVENT_TYPES.CHILD_STARTED&&(Bi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Bi.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Vf();r&&(e==="http"||!e)&&Tb.get(jc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Po.postMessage({type:uwe,workerType:e})}a(CM,"restartWorkers");function hwe(e,t){M6[e]=t}a(hwe,"setChildListenerByType");function U6(e){return CM(e,1/0,!1)}a(U6,"shutdownWorkers");function Ewe(e){return U6(e),Promise.all(Ba.map(t=>t.terminate()))}a(Ewe,"shutdownWorkersNow");var x6=[];function _we(e){x6.push(e)}a(_we,"onMessageFromWorkers");var bM=new Map;function B6(e,t){let r=bM.get(e);r||bM.set(e,r=[]),r.push(t)}a(B6,"onMessageByType");var gwe=10;async function Swe(e,t){let r=0;for(let n of ni)try{n.postMessage(e),r++>gwe&&(r=0,await new Promise(setImmediate))}catch(s){Bi.error("Unable to send message to worker",s)}t&&k6(e,null)}a(Swe,"broadcast");var Sb=new Map,Twe=1;function ywe(e){return new Promise(t=>{let r=0;for(let n of ni)try{let s=Twe++,i=a(()=>{Sb.delete(s),--r===0&&t(),n!==Po&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Sb.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Sb)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Bi.error("Unable to send message to worker",s)}r===0&&t()})}a(ywe,"broadcastWithAcknowledgement");function Rwe(e){e.postMessage({type:C6,workers:F6()})}a(Rwe,"sendThreadInfo");function F6(){let e=Date.now();return Ba.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(F6,"getChildWorkerInfo");function bwe(e,t){e.resources=t,e.resources.updated=Date.now()}a(bwe,"recordResourceReport");var AM;function Awe(e){AM=e}a(Awe,"setMonitorListener");var Iwe=1e3,b6=!1;function wwe(){b6||(b6=!0,setInterval(()=>{for(let e of Ba){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}AM&&AM()},Iwe).unref())}a(wwe,"startMonitoring");var Nwe=1e3;if(Po&&Lo?.addPorts){yb(Po);for(let e=0,t=Lo.addPorts.length;e<t;e++){let r=Lo.addPorts[e];r.threadId=Lo.addThreadIds[e],yb(r)}setInterval(()=>{let e=process.memoryUsage();Po.postMessage({type:N6,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Nwe).unref(),yM=a(()=>new Promise((e,t)=>{Po.on("message",r),Po.postMessage({type:w6});function r(n){n.type===C6&&(Po.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else yM=F6;Fi.exports.getThreadInfo=yM;function yb(e,t){ni.push(e),e.on("message",r=>{if(r.type===O6)r.port.threadId=r.threadId,yb(r.port);else if(r.type===dwe){let n=Sb.get(r.id);n&&n()}else k6(r,e)}).on("close",()=>{ni.splice(ni.indexOf(e),1)}).on("exit",()=>{ni.splice(ni.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(yb,"addPort");function k6(e,t){for(let n of x6)n(e,t);let r=bM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Bi.error(s)}}a(k6,"notifyMessageListeners");if(IM){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await iwe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(A6(s,o.name));try{for await(let{filename:o}of swe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await CM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watchDir");Fi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Po.on("message",async e=>{let{type:t}=e;t===jc.ITC_EVENT_TYPES.SHUTDOWN&&(Fi.exports.restartNumber=e.restartNumber,Po.unref(),setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate",ewe),process.exit(0)},wM).unref())})});var K6=M((pVe,V6)=>{"use strict";var{promises:sm,createReadStream:Cwe,createWriteStream:Owe}=require("fs"),{createGzip:Pwe}=require("zlib"),{promisify:Lwe}=require("util"),{pipeline:Dwe}=require("stream"),vwe=Lwe(Dwe),PM=require("path"),$6=fe();$6.initSync();var Rb=Q(),{CONFIG_PARAMS:Mwe,ITC_EVENT_TYPES:fVe}=(G(),v(j)),{onMessageFromWorkers:mVe}=st(),{convertToMS:H6}=ae(),{onStorageReclamation:Uwe}=(eg(),v(Jx)),xwe=6e4,Bwe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Fwe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",OM,G6;V6.exports=kwe;function kwe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:o}){if(s===!1)return;let c=0;if(Uwe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(Bwe);if(!i)throw new Error(Fwe);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=H6(r));let d;return OM=Date.now(),Rb.trace("Log rotate enabled, maxSize:",t,"interval:",r),G6=setInterval(async()=>{if(l){let f;f=await sm.stat(e.path),f.size>=l&&(d=await q6(e.path,i))}if(u&&Date.now()-OM>=u&&(d=await q6(e.path,i),OM=Date.now()),n||c){let f=H6(n??"1M")/(1+c);c=0;let m=await sm.readdir(i);for(let p of m)try{let h=await sm.stat(PM.join(i,p));Date.now()-h.mtimeMs>f&&await sm.unlink(PM.join(i,p))}catch(h){Rb.error("Error trying to remove log",p,h)}}},o??xwe).unref(),{end(){clearInterval(G6)},getLastRotatedLogPath(){return d}}}a(kwe,"logRotator");async function q6(e,t){let r=$6.get(Mwe.LOGGING_ROTATION_COMPRESS),n=PM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await sm.rename(e,n),r&&(e=n,n+=".gz",await vwe(Cwe(e),Pwe(),Owe(n)),await sm.unlink(e)),Rb.closeLogFile(),Rb.notify(`hdb.log rotated, old log moved to ${n}`),n}a(q6,"moveLogFile")});var J6={};ye(J6,{RootConfigWatcher:()=>LM});var Y6,W6,j6,bb,z6,LM,Q6=se(()=>{Y6=b(require("chokidar")),W6=require("node:fs/promises"),j6=b(gt()),bb=require("node:stream"),z6=require("yaml"),LM=class extends bb.EventEmitter{static{a(this,"RootConfigWatcher")}#e;#t;#n;ready;constructor(){super(),this.#e=(0,j6.getConfigFilePath)(),this.ready=(0,bb.once)(this,"ready"),this.#t=Y6.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,W6.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,z6.parse)(t);if(!this.#n){this.#n=r,this.emit("ready",this.#n);return}this.emit("change",this.#n=r)}).catch(t=>{})}close(){return this.#t.close(),this.#n=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#n}}});var Q=M((SVe,Lb)=>{"use strict";var Fa=require("fs-extra"),{workerData:Hwe,threadId:Gwe,isMainThread:nX}=require("worker_threads"),JE=require("path"),sX=require("yaml"),iX=require("properties-reader"),Wr=(G(),v(j)),X6=tl(),qwe=require("os"),{PACKAGE_ROOT:kM}=yt(),{_assignPackageExport:$we}=ai(),{Console:Vwe}=require("console"),vM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),Z6=new Map,{join:ka}=JE,eX=1e4,fr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Kwe={STDOUT:"stdOut",STDERR:"stdErr"},gVe=ka(kM,"logs"),Ywe=ka(kM,"config/yaml/",Wr.HDB_DEFAULT_CONFIG_FILE),Wwe=1e4,QE,XE,Ab,oX,Do,MM,DM,wb,xt,es,Nb,Cb,im,zE,jE;function Ib(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=JE.dirname(n)):t.root?n=ka(t.root,MM):(n=xt.path,t.root||(t.root=JE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=fr[t.level]??xt?.level??fr.info,aX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(xt.path===e.path&&r)}a(Ib,"updateLogger");function aX(e){let t=e.conditional??(e.conditional={});t.notify=fr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=fr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=fr.error>=e.level?e.error.bind(e):void 0,t.warn=fr.warn>=e.level?e.warn.bind(e):void 0,t.info=fr.info>=e.level?e.info.bind(e):void 0,t.debug=fr.debug>=e.level?e.debug.bind(e):void 0,t.trace=fr.trace>=e.level?e.trace.bind(e):void 0}a(aX,"updateConditional");async function UM(){jE||(jE=new mNe,await jE.ready,jE.on("change",UM));let e=jE.config,t=e.logging??{};Ib(xt,t),wb=xt.path,QE=t.console??!1,t.external&&Ib(es,t.external);for(let r in e){let n=e[r];n.logging?Ib(xt.forComponent(r),n.logging,r):xt.hasComponent(r)&&Ib(xt.forComponent(r),t,r)}}a(UM,"updateLogSettings");var xM=class extends Vwe{static{a(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){On="trace",this.level<=fr.trace&&super.info(...t),On="info"}debug(...t){On="debug",this.level<=fr.debug&&super.info(...t),On="info"}info(...t){On="info",this.level<=fr.info&&super.info(...t),On="info"}warn(...t){On="warn",this.level<=fr.warn&&super.warn(...t),On="info"}error(...t){On="error",this.level<=fr.error&&super.error(...t),On="info"}fatal(...t){im=!0;try{On="fatal",this.level<=fr.fatal&&super.error(...t),On="info"}finally{im=!1}}notify(...t){im=!0;try{On="notify",this.level<=fr.notify&&super.info(...t),On="info"}finally{im=!1}}withTag(t){return lX(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};zE===void 0&&cX();Lb.exports={notify:rNe,fatal:nNe,error:FM,warn:sNe,info:Zwe,debug:tNe,trace:eNe,logLevel:Do,loggerWithTag:lX,suppressLogging:Qwe,initLogSettings:cX,logCustomLevel:iNe,closeLogFile:uX,createLogger:Pb,logsAtLevel:zwe,getLogFilePath:a(()=>wb,"getLogFilePath"),forComponent:a(e=>xt.forComponent(e),"forComponent"),setMainLogger:dNe,setLogLevel:aNe,OUTPUTS:Kwe,AuthAuditLog:fNe,start:UM,startOnMainThread:UM,errorToString:uNe,disableStdio:jwe};function jwe(){vM=a(function(){},"nativeStdWrite")}a(jwe,"disableStdio");Lb.exports.externalLogger={notify(...e){es.notify(...e)},fatal(...e){es.fatal(...e)},error(...e){es.error(...e)},warn(...e){es.warn(...e)},info(...e){es.info(...e)},debug(...e){es.debug(...e)},trace(...e){es.trace(...e)},withTag(e){return es.withTag(e)},loggerWithTag(e){return es.withTag(e)}};$we("logger",Lb.exports.externalLogger);function zwe(e){return fr[Do]<=fr[e]}a(zwe,"logsAtLevel");function cX(e=!1){try{if(zE===void 0||e){uX();let t=oNe(),r=X6(["ROOTPATH"]);try{zE=iX(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Fa.pathExistsSync(ka(r.ROOTPATH,Wr.HDB_CONFIG_FILE)))throw s}let n;if({level:Do,configLogPath:DM,toFile:XE,logConsole:QE,colorMode:oX,rotation:n,toStream:Ab}=cNe(r.ROOTPATH?ka(r.ROOTPATH,Wr.HDB_CONFIG_FILE):zE.get("settings_path")),MM=Wr.LOG_NAMES.HDB,wb=ka(DM,MM),xt=Pb({path:wb,level:Do,stdStreams:Ab,rotation:n}),es=xt.forComponent("external"),es.tag=null,nX)try{require("segfault-handler").registerHandler(ka(DM,"crash.log"))}catch{}}}catch(t){if(zE=void 0,t.code===Wr.NODE_ERROR_CODES.ENOENT||t.code===Wr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=X6(Object.keys(Wr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=Wr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let o=r[s];if(i===Wr.CONFIG_PARAMS.LOGGING_LEVEL){Do=o;continue}i===Wr.CONFIG_PARAMS.LOGGING_CONSOLE&&(QE=i)}let{defaultLevel:n}=lNe();XE=!1,Ab=!0,Do=Do===void 0?n:Do,xt=Pb({level:Do}),es=xt.forComponent("external"),es.tag=null;return}throw FM("Error initializing log settings"),FM(t),t}process.env.DEV_MODE&&(Ab=!0),Jwe()}a(cX,"initLogSettings");var zc=!0;function Jwe(){XE&&(process.stdout.write=function(e){return typeof e=="string"&&zc&&QE&&(e=e.toString(),e[e.length-1]===`
130
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(Mye,"parseNPMStdErr");function Uye(e){let t=_R.object({projects:_R.array().min(1).items(_R.string()).required(),dry_run:_R.boolean().default(!1)});return Oye.validateBySchema(e,t)}a(Uye,"modulesValidator")});var _D={};ye(_D,{describeMetric:()=>g4,describeMetricOp:()=>ED,get:()=>E4,getOp:()=>pD,listMetrics:()=>_4,listMetricsOp:()=>hD});async function Bye(e){return(await ag().get(e)).hostname}function m4(e,t){return e.length===0||e.includes(t)}function pD(e){return _E.trace?.("get_analytics request:",e),E4(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function h4(e){return"conditions"in e?{...e,conditions:e.conditions.map(h4)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function E4(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(h4));let o=t??[];m4(o,"id")||o.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return o.length>0&&(c.select=o),_E.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],m4(o,"node")&&(_E.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await Bye(d)),_E.trace?.("get_analytics result:",JSON.stringify(u)),u})}function hD(e){return _4(e.metric_types)}async function _4(e=["builtin"]){let t=[],r=Object.values(Ko);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,o=await databases.system.hdb_analytics.search(s);for await(let c of o)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function ED(e){return g4(e.metric)}async function g4(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let o in s)n.push({name:o,type:typeof s[o]});let i={attributes:n};return _E.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var p4,xye,_E,gD=se(()=>{p4=b(Q());JA();QA();({forComponent:xye}=p4.default),_E=xye("analytics").conditional;a(Bye,"lookupHostname");a(m4,"isSelected");a(pD,"getOp");a(h4,"conformCondition");a(E4,"get");a(hD,"listMetricsOp");a(_4,"listMetrics");a(ED,"describeMetricOp");a(g4,"describeMetric")});var gR,SR,gE,TR=se(()=>{gR={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},SR=Object.keys(gR),gE="primary"});function T4(e){return S4.validateBySchema(e,Gye)}var SE,S4,Fye,kye,Hye,Gye,y4=se(()=>{SE=b(require("joi")),S4=b(mt());TR();Fye=SR,kye=Object.entries(gR).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),Hye=a(()=>{let e=SE.default.string().min(1).max(512);return Object.entries(gR).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:SE.default.string().valid(...r.allowedValues).messages({"any.only":kye[t]})}))}),e.required()},"createStatusValidationSchema"),Gye=SE.default.object({id:SE.default.string().valid(...Fye).required(),status:Hye()});a(T4,"validateStatus")});function R4(){SD||(SD=Pa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),TD=new Uint8Array(SD))}function b4(){R4(),TD[0]=1}function A4(){return R4(),TD[0]===1}var SD,TD,yD=se(()=>{TE();a(R4,"ensureInitialized");a(b4,"requestRestart");a(A4,"restartNeeded")});var wD={};ye(wD,{DEFAULT_STATUS_ID:()=>gE,STATUS_IDS:()=>SR,Status:()=>Pa,clear:()=>bD,get:()=>AD,set:()=>ID});function RE(){return RD||(RD=ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),RD}function bD({id:e}){return yE.debug?.("clearStatus",e),RE().delete(e)}async function $ye(){yE.debug?.("getAllStatus");let e=RE().get({}),t=await Hp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=A4();return{systemStatus:e,componentStatus:r,restartRequired:n}}function AD({id:e}){return e?(yE.debug?.("getStatus",e),RE().get(e)):(yE.debug?.("getStatus","all"),$ye())}function ID({status:e,id:t=gE}){let r=T4({status:e,id:t});if(r)throw(0,yR.handleHDBError)(r,r.message,qye.BAD_REQUEST);return yE.debug?.("setStatus",t,e),RE().put(t,{status:e})}var yR,I4,qye,RD,Pa,yE,TE=se(()=>{Oe();yR=b(Ee()),I4=b(ir());y4();TR();Gp();yD();TR();({HTTP_STATUS_CODES:qye}=yR.hdbErrors);a(RE,"getStatusTable");Pa={get primaryStore(){return RE().primaryStore}},yE=(0,I4.loggerWithTag)("status");a(bD,"clearStatus");a($ye,"getAllStatus");a(AD,"getStatus");a(ID,"setStatus")});var PD={};ye(PD,{getFingerprint:()=>CD,getRegistrationInfo:()=>ND,setLicense:()=>OD});function ND(){return{version:w4.packageJson.version,deprecated:!0}}function CD(){return{message:"this-is-deprecated",deprecated:!0}}function OD(){return{deprecated:!0}}var w4,LD=se(()=>{w4=b(yt());a(ND,"getRegistrationInfo");a(CD,"getFingerprint");a(OD,"setLicense")});var C4=M((CGe,N4)=>{"use strict";var bE=require("alasql"),hu=require("recursive-iterator"),Oi=Q(),Vye=ae(),AE=(G(),v(j)),DD=class{static{a(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Yye(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=>AE.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=>!AE.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][AE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Kye(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!AE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new bE.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Kye(e){return e.filter(t=>t[AE.PERMS_CRUD_ENUM.READ])}a(Kye,"filterReadRestrictedAttrs");function Yye(e,t,r,n,s){Wye(e,t,r,n,s)}a(Yye,"interpretAST");function IE(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(IE,"addSchemaTableToMap");function Wye(e,t,r,n,s){if(!e){Oi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof bE.yy.Insert?Qye(e,t,r):e instanceof bE.yy.Select?jye(e,t,r,n,s):e instanceof bE.yy.Update?zye(e,t,r):e instanceof bE.yy.Delete?Jye(e,t,r):Oi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Wye,"getRecordAttributesAST");function jye(e,t,r,n,s){if(!e){Oi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Vye.isEmptyOrZeroLength(i)){Oi.error("No schema specified");return}e.from.forEach(c=>{IE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),IE(c.table,t,r,n,s)});let o=new hu(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Oi.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new hu(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{Oi.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new hu(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{Oi.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new hu(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{Oi.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}a(jye,"getSelectAttributes");function zye(e,t,r){if(!e){Oi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new hu(e.columns),s=e.table.databaseid;IE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&vD(e.table.tableid,s,i.columnid,t,r)}a(zye,"getUpdateAttributes");function Jye(e,t,r){if(!e){Oi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new hu(e.where),s=e.table.databaseid;IE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&vD(e.table.tableid,s,i.columnid,t,r)}a(Jye,"getDeleteAttributes");function Qye(e,t,r){if(!e){Oi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new hu(e.columns),s=e.into.databaseid;IE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&vD(e.into.tableid,s,i.columnid,t,r)}a(Qye,"getInsertAttributes");function vD(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(vD,"pushAttribute");N4.exports=DD});var IR=M((PGe,K4)=>{"use strict";var MD=Vn(),RR=gn(),Ns=VT(),CE=Vl(),UD=vl(),Xye=HO(),Zye=VK(),OE=(Es(),v(co)),bR=sh(),vr=Q(),eRe=YO(),tRe=ry(),rRe=SP(),nRe=sy(),sRe=RP(),iRe=bP(),oRe=wP(),aRe=CP(),xD=ly(),La=ae(),L4=Vf(),Nn=(G(),v(j)),D4=b2(),cRe=vh(),v4=(Kd(),v(uh)),M4=(sR(),v(mE)),U4=gt(),dr=cD(),x4=ER(),lRe=mD(),Yf=ys(),B4=(gf(),v(_f)),BD=(gD(),v(_D)),FD=(TE(),v(wD)),F4=(tE(),v(Fy)),kD=(LD(),v(PD)),k4=qC(),{handleHDBError:Xn,hdbErrors:H4}=Ee(),{HDB_ERROR_MSGS:dn,HTTP_STATUS_CODES:wE}=H4,ee=new Map,G4="delete",Vc="insert",Xs="read",Eu="update",NE="describe",O4=CE.describeSchema.name,P4=CE.describeTable.name,q4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},uRe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},dRe="catchup",fRe="handleGetJob",mRe="handleGetJobsByStartDate",AR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},pRe=[Ns.createTable.name,Ns.createAttribute.name,Ns.dropTable.name,Ns.dropAttribute.name],$4={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},ne=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};ee.set(MD.insert.name,new ne(!1,[Vc]));ee.set(MD.update.name,new ne(!1,[Eu]));ee.set(MD.upsert.name,new ne(!1,[Vc,Eu]));ee.set(RR.searchByConditions.name,new ne(!1,[Xs]));ee.set(RR.searchByHash.name,new ne(!1,[Xs]));ee.set(RR.searchByValue.name,new ne(!1,[Xs]));ee.set(RR.search.name,new ne(!1,[Xs]));ee.set(Ns.createSchema.name,new ne(!0,[]));ee.set(Ns.createTable.name,new ne(!0,[]));ee.set(Ns.createAttribute.name,new ne(!1,[Vc]));ee.set(Ns.dropSchema.name,new ne(!0,[]));ee.set(Ns.dropTable.name,new ne(!0,[]));ee.set(Ns.dropAttribute.name,new ne(!0,[]));ee.set(CE.describeSchema.name,new ne(!1,[Xs]));ee.set(CE.describeTable.name,new ne(!1,[Xs]));ee.set(UD.deleteRecord.name,new ne(!1,[G4]));ee.set(OE.addUser.name,new ne(!0,[]));ee.set(OE.alterUser.name,new ne(!0,[]));ee.set(OE.dropUser.name,new ne(!0,[]));ee.set(OE.listUsersExternal.name,new ne(!0,[]));ee.set(bR.listRoles.name,new ne(!0,[]));ee.set(bR.addRole.name,new ne(!0,[]));ee.set(bR.alterRole.name,new ne(!0,[]));ee.set(bR.dropRole.name,new ne(!0,[]));ee.set(eRe.name,new ne(!0,[]));ee.set(tRe.name,new ne(!0,[]));ee.set(rRe.name,new ne(!0,[]));ee.set(nRe.name,new ne(!0,[]));ee.set(sRe.name,new ne(!0,[]));ee.set(iRe.name,new ne(!0,[]));ee.set(xD.setRoutes.name,new ne(!0,[]));ee.set(xD.getRoutes.name,new ne(!0,[]));ee.set(xD.deleteRoutes.name,new ne(!0,[]));ee.set(U4.setConfiguration.name,new ne(!0,[]));ee.set(oRe.clusterStatus.name,new ne(!0,[]));ee.set(aRe.name,new ne(!0,[]));ee.set(UD.deleteFilesBefore.name,new ne(!0,[]));ee.set(UD.deleteAuditLogsBefore.name,new ne(!0,[]));ee.set(L4.restart.name,new ne(!0,[]));ee.set(L4.restartService.name,new ne(!0,[]));ee.set(Xye.name,new ne(!0,[]));ee.set(Zye.name,new ne(!0,[Xs]));ee.set(Ns.cleanupOrphanBlobs.name,new ne(!0,[]));ee.set(cRe.systemInformation.name,new ne(!0,[]));ee.set(U4.getConfiguration.name,new ne(!0,[]));ee.set(x4.readTransactionLog.name,new ne(!0,[]));ee.set(x4.deleteTransactionLogsBefore.name,new ne(!0,[]));ee.set(lRe.installModules.name,new ne(!0,[]));ee.set(Yf.createCsr.name,new ne(!0,[]));ee.set(Yf.signCertificate.name,new ne(!0,[]));ee.set(Yf.listCertificates.name,new ne(!0,[]));ee.set(Yf.addCertificate.name,new ne(!0,[]));ee.set(Yf.removeCertificate.name,new ne(!0,[]));ee.set(Yf.getKey.name,new ne(!0,[]));ee.set(B4.addNodeBack.name,new ne(!0,[]));ee.set(B4.removeNodeBack.name,new ne(!0,[]));ee.set(BD.getOp.name,new ne(!1,[Xs]));ee.set(BD.listMetricsOp.name,new ne(!1,[Xs]));ee.set(BD.describeMetricOp.name,new ne(!1,[Xs]));ee.set(FD.clear.name,new ne(!0,[]));ee.set(FD.get.name,new ne(!0,[]));ee.set(FD.set.name,new ne(!0,[]));ee.set(F4.installUsageLicenseOp.name,new ne(!0,[]));ee.set(F4.getUsageLicensesOp.name,new ne(!0,[]));ee.set(kD.getFingerprint.name,new ne(!0,[]));ee.set(kD.setLicense.name,new ne(!0,[]));ee.set(v4.createTokens.name,new ne(!1,[]));ee.set(v4.refreshOperationToken.name,new ne(!1,[]));ee.set(M4.login.name,new ne(!1,[]));ee.set(M4.logout.name,new ne(!1,[]));ee.set(dr.customFunctionsStatus.name,new ne(!0,[]));ee.set(dr.getCustomFunctions.name,new ne(!0,[]));ee.set(dr.getComponents.name,new ne(!0,[]));ee.set(dr.getComponentFile.name,new ne(!0,[]));ee.set(dr.setComponentFile.name,new ne(!0,[]));ee.set(dr.dropComponent.name,new ne(!0,[]));ee.set(dr.getCustomFunction.name,new ne(!0,[]));ee.set(dr.setCustomFunction.name,new ne(!0,[]));ee.set(dr.dropCustomFunction.name,new ne(!0,[]));ee.set(dr.addComponent.name,new ne(!0,[]));ee.set(dr.dropCustomFunctionProject.name,new ne(!0,[]));ee.set(dr.packageComponent.name,new ne(!0,[]));ee.set(dr.deployComponent.name,new ne(!0,[]));ee.set(dr.addSSHKey.name,new ne(!0,[]));ee.set(dr.getSSHKey.name,new ne(!0,[]));ee.set(dr.updateSSHKey.name,new ne(!0,[]));ee.set(dr.deleteSSHKey.name,new ne(!0,[]));ee.set(dr.listSSHKeys.name,new ne(!0,[]));ee.set(dr.setSSHKnownHosts.name,new ne(!0,[]));ee.set(dr.getSSHKnownHosts.name,new ne(!0,[]));ee.set(kD.getRegistrationInfo.name,new ne(!1,[]));ee.set(OE.userInfo.name,new ne(!1,[]));ee.set(CE.describeAll.name,new ne(!1,[]));ee.set(fRe,new ne(!1,[]));ee.set(mRe,new ne(!0,[]));ee.set(dRe,new ne(!0,[]));ee.set(AR.CSV_DATA_LOAD,new ne(!1,[Vc,Eu]));ee.set(AR.CSV_URL_LOAD,new ne(!1,[Vc,Eu]));ee.set(AR.CSV_FILE_LOAD,new ne(!1,[Vc,Eu]));ee.set(AR.IMPORT_FROM_S3,new ne(!1,[Vc,Eu]));ee.set($4.EXPORT_TO_S3,new ne(!0,[]));ee.set($4.EXPORT_LOCAL,new ne(!0,[]));ee.set(Nn.VALID_SQL_OPS_ENUM.DELETE,new ne(!1,[G4]));ee.set(Nn.VALID_SQL_OPS_ENUM.SELECT,new ne(!1,[Xs]));ee.set(Nn.VALID_SQL_OPS_ENUM.INSERT,new ne(!1,[Vc]));ee.set(Nn.VALID_SQL_OPS_ENUM.UPDATE,new ne(!1,[Eu]));K4.exports={verifyPerms:ERe,verifyPermsAst:hRe,verifyBulkLoadAttributePerms:gRe};function hRe(e,t,r){if(La.isEmptyOrZeroLength(e))throw vr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(La.isEmptyOrZeroLength(t))throw vr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(La.isEmptyOrZeroLength(r))throw vr.info("verify_perms_ast has a null operation parameter"),Xn(new Error);try{let n=C4(),s=require("alasql"),i=new k4,o=new n(e),c=o.getSchemas(),l=new Map;if((!c||c.length===0)&&o.affected_attributes&&o.affected_attributes.size>0)throw vr.info("No schemas defined in verifyPermsAst(), will not continue."),Xn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&q4[r])throw Xn(new Error,dn.DROP_SYSTEM,wE.FORBIDDEN);if(u&&!d)return null;let f=D4.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=o.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=o.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=V4(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let _=o.getAttributesBySchemaTableName(h,p[E]),R=GD(t.role.permission,h,p[E]);HD(_,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Xn(n)}}a(hRe,"verifyPermsAst");function ERe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw vr.info("null required parameter in verifyPerms"),Xn(new Error,dn.DEFAULT_INVALID_REQUEST,wE.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new k4;if(La.isEmptyOrZeroLength(e.hdb_user?.role)||La.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return vr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(dn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=o.has(Nn.SYSTEM_SCHEMA_NAME)||s===Nn.SYSTEM_SCHEMA_NAME;if(l&&d&&uRe[e.operation]&&(i===Nn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Nn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Nn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&q4[r])throw Xn(new Error,dn.DROP_SYSTEM,wE.FORBIDDEN);if(l&&!d||u===!0&&(r===Ns.createSchema.name||r===Ns.dropSchema.name))return null;if(pRe.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=D4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===O4||r===P4)&&!f.super_user){if(s===Nn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(dn.SCHEMA_PERM_ERROR(s));if(r===O4&&(!f[s]||!f[s][NE]))return c.handleInvalidItem(dn.SCHEMA_NOT_FOUND(s));if(r===P4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][NE]))return c.handleInvalidItem(dn.TABLE_NOT_FOUND(s,i))}let m=V4(e.hdb_user,r,o,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Nn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],_=f[s].tables[i];_[Nn.PERMS_CRUD_ENUM.READ]&&(_.attribute_permissions.length>0?_.attribute_permissions.filter(S=>S[Nn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=E)}let p=_Re(e),h=GD(e.hdb_user?.role?.permission,s,i);return HD(p,h,r,i,s,c,n),c.getPermsResponse()}a(ERe,"verifyPerms");function V4(e,t,r,n,s){if(La.arrayHasEmptyValues([e,t,r]))throw vr.info("hasPermissions has an invalid parameter"),Xn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw vr.info(`operation ${t} not found.`),Xn(new Error,dn.OP_NOT_FOUND(t),wE.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return vr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(dn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][NE]===!1){n.addInvalidItem(dn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(dn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=o[l].tables[d];if(!f||f[NE]===!1)n.addInvalidItem(dn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!La.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],_=f[E];(_==null||_===!1)&&(vr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=dn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw vr.error(p),vr.error(m),Xn(H4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}a(V4,"hasPermissions");function HD(e,t,r,n,s,i,o){if(!e||!t)throw vr.info("no attributes specified in checkAttributePerms."),Xn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw vr.info(`no permissions found for ${r} in checkAttributePerms().`),Xn(new Error);if(La.isEmptyOrZeroLength(t))return vr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[NE]===!1){i.addInvalidItem(dn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Nn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Xs)throw Xn(new Error,dn.SYSTEM_TIMESTAMP_PERMS_ERR,wE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(dn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(HD,"checkAttributePerms");function _Re(e){let t=new Set;try{if(e.action)return t;if(e.operation===Nn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){vr.info(r)}return t}a(_Re,"getRecordAttributes");function GD(e,t,r){let n=new Map;if(La.isEmpty(e))return vr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{vr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(GD,"getAttributePermissions");function gRe(e,t,r,n,s,i,o){let c=new Set(i),l=GD(e,n,s);HD(c,l,t,s,n,o,r)}a(gRe,"verifyBulkLoadAttributePerms")});var $D=M((DGe,Y4)=>{"use strict";var qD=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Y4.exports=qD});var zD=M((FGe,lJ)=>{"use strict";var wR=Vn(),CR=MC(),SRe=require("needle"),Pi=(G(),v(j)),MGe=Pt(),Wf=ae(),{handleHDBError:tr,hdbErrors:tJ}=Ee(),{HTTP_STATUS_CODES:fn,HDB_ERROR_MSGS:Mr,CHECK_LOGS_WRAPPER:gu}=tJ,jf=Q(),VD=require("papaparse");Wf.promisifyPapaParse();var Li=require("fs-extra"),TRe=require("path"),{chain:W4}=require("stream-chain"),j4=require("stream-json/streamers/StreamArray"),z4=require("stream-json/utils/Batch"),J4=require("stream-chain/utils/comp"),{finished:Q4}=require("stream"),yRe=fe(),rJ=UC(),RRe=xC(),{BulkLoadFileObject:YD,BulkLoadDataObject:bRe}=SV(),WD=qC(),{verifyBulkLoadAttributePerms:nJ}=IR(),UGe=$D(),xGe=Sr(),BGe=so(),{databases:ARe}=(Oe(),v(ft)),{coerceType:IRe}=(Rg(),v(qq)),X4="No records parsed from csv file.",_u=`${yRe.get("HDB_ROOT")}/tmp`,{schemaRegex:wRe}=Qi(),Z4=1024*1024*2,eJ=5e3,NRe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};lJ.exports={csvDataLoad:CRe,csvURLLoad:ORe,csvFileLoad:PRe,importFromS3:LRe};async function CRe(e,t){let r=CR.dataObject(e);if(r)throw tr(r,r.message,fn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=oJ(e.schema,e.table),i=VD.parse(e.data,{header:!0,skipEmptyLines:!0,transform:KD.bind(null,s),dynamicTyping:!1}),o=new WD;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&nJ(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw tr(new Error,c,fn.BAD_REQUEST,void 0,void 0,!0);let l=new bRe(e.action,e.schema,e.table,i.data);return n=await rJ.callOperationFunctionAsAwait(aJ,l,null),n.message===X4?X4:cJ(n.records,n.number_written)}catch(s){throw Su(s)}}a(CRe,"csvDataLoad");async function ORe(e){let t=CR.urlObject(e);if(t)throw tr(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${_u}/${r}`;try{await DRe(e,r)}catch(s){throw jf.error(Mr.DOWNLOAD_FILE_ERR(r)+" - "+s),tr(s,gu(Mr.DOWNLOAD_FILE_ERR(r)))}try{let s=new YD(this.job_operation_function.name,e.action,e.schema,e.table,n,Pi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await jD(s);return await NR(n),i}catch(s){throw await NR(n),Su(s)}}a(ORe,"csvURLLoad");async function PRe(e){let t=CR.fileObject(e);if(t)throw tr(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);let r=new YD(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Pi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await jD(r)}catch(n){throw Su(n)}}a(PRe,"csvFileLoad");async function LRe(e){let t=CR.s3FileObject(e);if(t)throw tr(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=TRe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${_u}/${s}`;let i=new YD(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await vRe(s,e);let o=await jD(i);return await NR(r),o}catch(n){throw await NR(r),Su(n)}}a(LRe,"importFromS3");async function DRe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await SRe("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 tr(n,s,n.statusCode,Pi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}URe(r,e.csv_url),await MRe(t,r.raw)}a(DRe,"downloadCSVFile");async function vRe(e,t){try{let r=`${_u}/${e}`;await Li.mkdirp(_u),await Li.writeFile(`${_u}/${e}`,"",{flag:"a+"});let n=await Li.createWriteStream(r),s=await RRe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){jf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw jf.error(Mr.S3_DOWNLOAD_ERR+" - "+r),tr(r,gu(Mr.S3_DOWNLOAD_ERR))}}a(vRe,"downloadFileFromS3");async function MRe(e,t){try{await Li.mkdirp(_u),await Li.writeFile(`${_u}/${e}`,t)}catch(r){throw jf.error(Mr.WRITE_TEMP_FILE_ERR),tr(r,gu(Mr.DEFAULT_BULK_LOAD_ERR))}}a(MRe,"writeFileToTempFolder");async function NR(e){if(e)try{await Li.access(e),await Li.unlink(e)}catch{jf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(NR,"deleteTempFile");function URe(e,t){if(e.statusCode!==tJ.HTTP_STATUS_CODES.OK)throw tr(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,fn.BAD_REQUEST);if(!NRe[e.headers["content-type"]])throw tr(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,fn.BAD_REQUEST);if(!e.raw)throw tr(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,fn.BAD_REQUEST)}a(URe,"validateURLResponse");async function jD(e){try{let t;switch(e.file_type){case Pi.VALID_S3_FILE_TYPES.CSV:t=await xRe(e);break;case Pi.VALID_S3_FILE_TYPES.JSON:t=await BRe(e);break;default:throw tr(new Error,Mr.DEFAULT_BULK_LOAD_ERR,fn.BAD_REQUEST,Pi.LOG_LEVELS.ERROR,Mr.INVALID_FILE_EXT_ERR(e))}return cJ(t.records,t.number_written)}catch(t){throw Su(t)}}a(jD,"fileLoad");async function sJ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await wR.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&nJ(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=tr(c);r(l)}}a(sJ,"validateChunk");async function iJ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Wf.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Wf.isEmpty(c)&&!Wf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await rJ.callOperationFunctionAsAwait(aJ,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=tr(c,gu(Mr.INSERT_CSV_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.INSERT_CSV_ERR+" - "+c);r(l)}}a(iJ,"insertChunk");async function xRe(e){let t={records:0,number_written:0},r=oJ(e.schema,e.table);try{let n=new WD,s=Li.createReadStream(e.file_path,{highWaterMark:Z4});s.setEncoding("utf8"),await VD.parsePromise(s,sJ.bind(null,e,n),KD.bind(null,r));let i=n.getPermsResponse();if(i)throw tr(new Error,i,fn.BAD_REQUEST);return s=Li.createReadStream(e.file_path,{highWaterMark:Z4}),s.setEncoding("utf8"),await VD.parsePromise(s,iJ.bind(null,e,t),KD.bind(null,r)),s.destroy(),t}catch(n){throw tr(n,gu(Mr.PAPA_PARSE_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.PAPA_PARSE_ERR+n)}}a(xRe,"callPapaParse");function oJ(e,t){let r=ARe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>IRe(i,s));return n}a(oJ,"createTransformMap");function KD(e,t,r){let n=e.get(r);return n?n(t):Wf.autoCast(t)}a(KD,"typeFunction");async function BRe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new WD,s=W4([Li.createReadStream(e.file_path,{encoding:"utf-8"}),j4.withParser(),c=>c.value,new z4({batchSize:eJ}),J4(async c=>{await sJ(e,n,r,c)})]);await new Promise((c,l)=>{Q4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw tr(new Error,i,fn.BAD_REQUEST);let o=W4([Li.createReadStream(e.file_path,{encoding:"utf-8"}),j4.withParser(),c=>c.value,new z4({batchSize:eJ}),J4(async c=>{await iJ(e,t,r,c)})]);return await new Promise((c,l)=>{Q4(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw tr(n,gu(Mr.INSERT_JSON_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.INSERT_JSON_ERR+n)}}a(BRe,"insertJson");async function aJ(e){let t={};try{e.data&&e.data.length>0&&FRe(e.data[0])?t=await kRe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",jf.info(t.message))}catch(r){throw Su(r)}return t}a(aJ,"callBulkFileLoad");function FRe(e){let t=Object.keys(e);for(let r of t)if(!wRe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(FRe,"validateColumnNames");async function kRe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=wR.insert;break;case"update":i=wR.update;break;case"upsert":i=wR.upsert;break;default:throw tr(new Error,Mr.INVALID_ACTION_PARAM_ERR(n),fn.BAD_REQUEST,Pi.LOG_LEVELS.ERROR,Mr.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)o.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Wf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Su(o)}}a(kRe,"bulkFileLoad");function cJ(e,t){return`successfully loaded ${t} of ${e} records`}a(cJ,"buildResponseMsg");function Su(e){return tr(e,gu(Mr.DEFAULT_BULK_LOAD_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Su,"buildTopLevelErrMsg")});var OR=M((HGe,uJ)=>{"use strict";var HRe=fs();uJ.exports={writeTransaction:GRe};function GRe(e,t,r){return HRe.writeTransaction(e,t,r)}a(GRe,"writeTransaction")});var pJ=M(($Ge,mJ)=>{"use strict";var qRe=gn(),$Re=ro(),dJ=Q(),VRe=Vn(),qGe=OR(),KRe=require("clone"),QD=require("alasql"),YRe=eS(),fJ=require("util"),WRe=fJ.promisify($Re.getTableSchema),jRe=fJ.promisify(qRe.search),zRe=(G(),v(j)),JD=ae();YRe(QD);mJ.exports={update:QRe};var JRe="There was a problem performing this update. Please check the logs and try again.";async function QRe({statement:e,hdb_user:t}){let r=await WRe(e.table.databaseid,e.table.tableid),n=XRe(e.columns);JD.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=KRe(s),c=JD.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=QD.parse(l).statements[0],d=await jRe(u),f=ZRe(n,d);return ebe(o,f,t)}a(QRe,"update");function XRe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=QD.compile(`SELECT ${r.expression.toString()} AS [${zRe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw dJ.error(t),new Error(JRe)}}a(XRe,"createUpdateRecord");function ZRe(e,t){return JD.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(ZRe,"buildUpdateRecords");async function ebe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await VRe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){dJ.error(`Error delete new_attributes from update response: ${i}`)}return s}a(ebe,"updateRecords")});var EJ=M((WGe,hJ)=>{var tbe=require("alasql"),rbe=gn(),nbe=Q(),sbe=fs(),ZD=require("util"),XD=ae(),ibe=(G(),v(j)),obe=ro(),KGe=OR(),YGe=Vn(),abe="record",cbe="successfully deleted",lbe=ZD.callbackify(mbe),ube=ZD.promisify(rbe.search),dbe=ZD.promisify(obe.getTableSchema);hJ.exports={convertDelete:lbe};function fbe(e){return`${e.deleted_hashes.length} ${abe}${e.deleted_hashes.length===1?"":"s"} ${cbe}`}a(fbe,"generateReturnMessage");async function mbe({statement:e,hdb_user:t}){let r=await dbe(e.table.databaseid,e.table.tableid);XD.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=XD.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=tbe.parse(o).statements[0],l={operation:ibe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await ube(c);let u=await sbe.deleteRecords(l);return XD.isEmptyOrZeroLength(u.message)&&(u.message=fbe(u)),delete u.txn_time,u}catch(u){throw nbe.error(u),u.hdb_code?u.message:u}}a(mbe,"convertDelete")});var LE=M((zGe,yJ)=>{"use strict";yJ.exports={evaluateSQL:wbe,processAST:TJ,convertSQLToAST:SJ,checkASTPermissions:gJ};var pbe=Vn(),_J=require("util"),hbe=_J.callbackify(pbe.insert),Ebe=gn().search,_be=pJ().update,gbe=_J.callbackify(_be),Sbe=EJ().convertDelete,Kc=require("alasql"),Tbe=IR(),PR=Q(),ybe=eS(),Rbe=ae(),PE=(G(),v(j)),{hdbErrors:bbe,handleHDBError:ev}=Ee(),{HTTP_STATUS_CODES:tv}=bbe;ybe(Kc);var Abe=403,Ibe="There was a problem performing this insert. Please check the logs and try again.",rv=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function wbe(e,t){let r=e.parsed_sql_object;if(!r){r=SJ(e.sql);let n,s=r.ast.statements[0];if(s instanceof Kc.yy.Insert?n=s.into.databaseid:s instanceof Kc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Kc.yy.Update||s instanceof Kc.yy.Delete?n=s.table.databaseid:PR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Kc.yy.Select)&&Rbe.isEmptyOrZeroLength(n))return t("No schema specified",null)}TJ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(wbe,"evaluateSQL");function gJ(e,t){let r;try{r=Tbe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(gJ,"checkASTPermissions");function SJ(e){let t=new rv;if(!e)throw ev(new Error,"The 'sql' parameter is missing from the request body",tv.BAD_REQUEST);try{let r=e.trim(),n=Kc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
131
+ `);throw n[1]?ev(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,tv.BAD_REQUEST):ev(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",tv.BAD_REQUEST)}return t}a(SJ,"convertSQLToAST");function TJ(e,t,r){try{let n=Nbe;if(!e.bypass_auth&&!t.permissions_checked){let i=gJ(e,t);if(i&&i.length>0)return r(Abe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case PE.VALID_SQL_OPS_ENUM.SELECT:n=Ebe,s=t.ast.statements[0];break;case PE.VALID_SQL_OPS_ENUM.INSERT:n=Cbe;break;case PE.VALID_SQL_OPS_ENUM.UPDATE:n=gbe;break;case PE.VALID_SQL_OPS_ENUM.DELETE:n=Sbe;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(TJ,"processAST");function Nbe(e,t){PR.info(e),t("unknown sql statement")}a(Nbe,"nullFunction");function Cbe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Obe(i,e.values)}catch(o){return r(o)}hbe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){PR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Cbe,"convertInsert");function Obe(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]]=Kc.compile(`SELECT ${s.toString()} AS [${PE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw PR.error(r),new Error(Ibe)}}a(Obe,"createDataObjects")});var iv=M((QGe,OJ)=>{"use strict";var sv=gn(),Pbe=xC(),{AsyncParser:Lbe}=require("json2csv"),LR=require("stream"),Cs=ae(),nv=require("fs-extra"),Dbe=require("path"),Zs=Q(),{promisify:AJ}=require("util"),DE=ae(),{handleHDBError:br,hdbErrors:vbe}=Ee(),{HDB_ERROR_MSGS:Zn,HTTP_STATUS_CODES:Ar}=vbe,{streamAsJSON:Mbe}=(AA(),v(Ax)),{Upload:Ube}=require("@aws-sdk/lib-storage"),{toCsvStream:xbe}=(qo(),v(Mx)),RJ=["search_by_value","search_by_hash","sql","search_by_conditions"],bJ=["json","csv"],IJ="json",wJ="csv",Bbe="Successfully exported JSON locally.",Fbe="Successfully exported CSV locally.",kbe=1e3,Hbe=sv.searchByHash,Gbe=sv.searchByValue,qbe=AJ(LR.finished);OJ.exports={export_to_s3:Ybe,export_local:$be};async function $be(e){Zs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=NJ(e);if(!Cs.isEmpty(t))throw Zs.error(t),br(new Error,t,Ar.BAD_REQUEST,void 0,void 0,!0);if(Cs.isEmpty(e.path))throw Zs.error(Zn.MISSING_VALUE("path")),br(new Error,Zn.MISSING_VALUE("path"),Ar.BAD_REQUEST,void 0,void 0,!0);let r=(Cs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Dbe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Cs.buildFolderPath(e.path,r);await Vbe(e.path);let s=await CJ(e);return await Kbe(n,e.format,s)}a($be,"export_local");async function Vbe(e){if(Zs.trace("in confirmPath"),Cs.isEmptyOrZeroLength(e))throw br(new Error,`Invalid path: ${e}`,Ar.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await nv.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,Zs.error(n),br(new Error,n,Ar.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw Zs.error(r),br(new Error,r,Ar.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Vbe,"confirmPath");async function Kbe(e,t,r){if(Zs.trace("in saveToLocal"),DE.isEmptyOrZeroLength(e))throw br(new Error,Zn.INVALID_VALUE("file_path"),Ar.BAD_REQUEST,void 0,void 0,!0);if(DE.isEmptyOrZeroLength(t))throw br(new Error,Zn.INVALID_VALUE("Source format"),Ar.BAD_REQUEST,void 0,void 0,!0);if(DE.isEmpty(r))throw br(new Error,Zn.NOT_FOUND("Data"),Ar.BAD_REQUEST,void 0,void 0,!0);if(t===IJ){let n=nv.createWriteStream(e);return Mbe(r).pipe(n),await qbe(n),{message:Bbe,path:e}}else if(t===wJ){let n=nv.createWriteStream(e),s=LR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new Lbe(i,c).fromInput(s).toOutput(n).promise(!1),{message:Fbe,path:e}}throw br(new Error,Zn.INVALID_VALUE("format"),Ar.BAD_REQUEST)}a(Kbe,"saveToLocal");async function Ybe(e){if(!e.s3||Object.keys(e.s3).length===0)throw br(new Error,Zn.MISSING_VALUE("S3 object"),Ar.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw br(new Error,Zn.MISSING_VALUE("aws_access_key_id"),Ar.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw br(new Error,Zn.MISSING_VALUE("aws_secret_access_key"),Ar.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.bucket))throw br(new Error,Zn.MISSING_VALUE("bucket"),Ar.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.key))throw br(new Error,Zn.MISSING_VALUE("key"),Ar.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.region))throw br(new Error,Zn.MISSING_VALUE("region"),Ar.BAD_REQUEST);let t=NJ(e);if(!Cs.isEmpty(t))throw br(new Error,t,Ar.BAD_REQUEST);Zs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await CJ(e)}catch(l){throw Zs.error(l),l}let n,s=await Pbe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new LR.PassThrough;if(e.format===wJ){i=e.s3.key+".csv";let l=xbe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===IJ){i=e.s3.key+".json";let l=new LR.Readable;l.pipe(o),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%kbe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw br(new Error,Zn.INVALID_VALUE("format"),Ar.BAD_REQUEST);return new Ube({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Ybe,"export_to_s3");function NJ(e){if(Zs.trace("in exportCoreValidation"),Cs.isEmpty(e.format))return"format missing";if(bJ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${bJ.join(", ")}`;let t=e.search_operation.operation;if(Cs.isEmpty(t))return"search_operation.operation missing";if(RJ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${RJ.join(", ")}`}a(NJ,"exportCoreValidation");async function CJ(e){Zs.trace("in getRecords");let t,r;if(DE.isEmpty(e.search_operation)||DE.isEmptyOrZeroLength(e.search_operation.operation))throw br(new Error,Zn.INVALID_VALUE("Search operation"),Ar.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Gbe;break;case"search_by_hash":t=Hbe;break;case"search_by_conditions":t=sv.searchByConditions;break;case"sql":{let n=LE();t=AJ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Zs.error(r),br(new Error,r,Ar.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(CJ,"getRecords")});var LJ=M((ZGe,PJ)=>{"use strict";var ov=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};PJ.exports=ov});var MJ=M((tqe,vJ)=>{"use strict";var Wbe=(G(),v(j)),DJ=require("moment"),jbe=require("uuid").v4,av=class{static{a(this,"JobObject")}constructor(){this.id=jbe(),this.type=void 0,this.start_datetime=DJ().valueOf(),this.created_datetime=DJ().valueOf(),this.end_datetime=void 0,this.status=Wbe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};vJ.exports=av});var lv=M((nqe,qJ)=>{"use strict";var zbe=require("uuid").v4,kJ=Vn(),HJ=gn(),Jbe=di(),Qbe=dd(),Xbe=LJ(),Ut=(G(),v(j)),Zbe=MJ(),eAe=VS(),Di=Q(),tAe=Cm(),zf=ae(),{promisify:rAe}=require("util"),Tu=require("moment"),DR=MC(),UJ=kw(),{deleteTransactionLogsBeforeValidator:nAe}=dD(),{handleHDBError:xJ,hdbErrors:sAe,ClientError:iAe}=Ee(),{HTTP_STATUS_CODES:BJ}=sAe,FJ=HJ.searchByValue,oAe=HJ.searchByHash,aAe=kJ.insert,cAe=kJ.update,cv;qJ.exports={addJob:dAe,updateJob:mAe,handleGetJob:lAe,handleGetJobsByStartDate:uAe,getJobById:GJ};async function lAe(e){if(e.id===void 0)throw new iAe("'id' is required");let t=await GJ(e.id);return zf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(lAe,"handleGetJob");async function uAe(e){try{let t=await fAe(e);if(Di.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Tu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Tu(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Di.error(r),new Error(r)}}a(uAe,"handleGetJobsByStartDate");async function dAe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||zf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Di.info(d),t.error=d,t}if(!Ut.JOB_TYPE_ENUM[e.operation])return Di.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ut.OPERATIONS_ENUM.CSV_FILE_LOAD:n=DR.fileObject(e);break;case Ut.OPERATIONS_ENUM.CSV_URL_LOAD:n=DR.urlObject(e);break;case Ut.OPERATIONS_ENUM.CSV_DATA_LOAD:n=DR.dataObject(e);break;case Ut.OPERATIONS_ENUM.IMPORT_FROM_S3:n=DR.s3FileObject(e);break;case Ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=UJ(e,"date");break;case Ut.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=UJ(e,"timestamp");break;case Ut.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=nAe(e);break;case Ut.OPERATIONS_ENUM.RESTART_SERVICE:if(Ut.HDB_PROCESS_SERVICES[e.service]===void 0)throw xJ(new Error,"Invalid service",BJ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw xJ(n,n.message,BJ.BAD_REQUEST,void 0,void 0,!0);let s=new Zbe;s.type=e.operation===Ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Jbe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await FJ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Di.error(f),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=zbe();try{o=await FJ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Di.error(f),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Di.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new tAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await aAe(l)}catch(d){return Di.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Di.trace(d)}return t}a(dAe,"addJob");async function fAe(e){let t=Tu(e.from_date,Tu.ISO_8601),r=Tu(e.to_date,Tu.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 Xbe(n,e.hdb_user);try{if(!cv){let i=LE();cv=rAe(i.evaluateSQL)}return await cv(s)}catch(i){throw Di.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(fAe,"getJobsInDateRange");async function GJ(e){if(zf.isEmptyOrZeroLength(e))return zf.errorizeMessage("Invalid job ID specified.");let t=new Qbe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await oAe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Di.error(n),zf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(GJ,"getJobById");async function mAe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(zf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ut.JOB_STATUS_ENUM.COMPLETE||e.status===Ut.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Tu().valueOf());let t=new eAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await cAe(t),r}a(mAe,"updateJob")});var JJ=M((iqe,zJ)=>{"use strict";var $J=ae(),Ur=(G(),v(j)),pAe=require("moment"),vR=zD(),vE=Q(),VJ=lv(),KJ=iv(),YJ=vl(),WJ=st(),hAe=ER(),EAe=Vf(),{parentPort:_Ae,isMainThread:jJ}=require("worker_threads"),{onMessageByType:gAe}=st(),uv=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function SAe(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($J.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if($J.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ur.JOB_TYPE_ENUM.csv_file_load:await Co(e,vR.csvFileLoad);break;case Ur.JOB_TYPE_ENUM.csv_url_load:await Co(e,vR.csvURLLoad);break;case Ur.JOB_TYPE_ENUM.csv_data_load:await Co(e,vR.csvDataLoad);break;case Ur.JOB_TYPE_ENUM.import_from_s3:await Co(e,vR.importFromS3);break;case Ur.JOB_TYPE_ENUM.empty_trash:break;case Ur.JOB_TYPE_ENUM.export_local:await Co(e,KJ.export_local);break;case Ur.JOB_TYPE_ENUM.export_to_s3:await Co(e,KJ.export_to_s3);break;case Ur.JOB_TYPE_ENUM.delete_files_before:case Ur.JOB_TYPE_ENUM.delete_records_before:await Co(e,YJ.deleteFilesBefore);break;case Ur.JOB_TYPE_ENUM.delete_audit_logs_before:await Co(e,YJ.deleteAuditLogsBefore);break;case Ur.JOB_TYPE_ENUM.delete_transaction_logs_before:await Co(e,hAe.deleteTransactionLogsBefore);break;case Ur.JOB_TYPE_ENUM.restart_service:return await Co(e,EAe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(SAe,"parseMessage");async function Co(e,t){try{e.job.status=Ur.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=pAe().valueOf(),await VJ.updateJob(e.job),await TAe(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):vE.error(`There was an error running ${t.name} job with id ${e.job.id}`),vE.error(n),e.job.message=n,e.job.status=Ur.JOB_STATUS_ENUM.ERROR;try{await VJ.updateJob(e.job)}catch(s){throw vE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Co,"runJob");async function TAe(e){vE.trace("launching job thread:",e),jJ?WJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):_Ae.postMessage({type:Ur.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(TAe,"launchJobThread");jJ&&gAe(Ur.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{WJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){vE.error(r)}});zJ.exports={parseMessage:SAe,RunnerMessage:uv}});var XJ=M((aqe,QJ)=>{"use strict";var yAe=ae(),dv=fe(),Yc=(G(),v(j)),RAe=Pt(),bAe=Sr(),Oo=Q(),AAe=$D(),IAe=so();dv.initSync();QJ.exports={postOperationHandler:NAe,sendOperationTransaction:ME};async function ME(e,t,r,n){if(e.schema===Yc.SYSTEM_SCHEMA_NAME)return;let s=wAe(e,t,r);s&&(Oo.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await bAe.publishToStream(`${RAe.SUBJECT_PREFIXES.TXN}.${e.schema}`,IAe.createNatsTableStreamName(e.schema,e.table),n,s))}a(ME,"sendOperationTransaction");function wAe(e,t,r){if(yAe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Yc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(wAe,"convertCRUDOperationToTransaction");async function NAe(e,t,r){if(!dv.get(Yc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Oo.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=dv.get(Yc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new AAe(t.txn_time,n,s);switch(e.operation){case Yc.OPERATIONS_ENUM.INSERT:try{await ME(e,t.inserted_hashes,i,r)}catch(o){Oo.error("There was an error calling clustering postOperationHandler for insert."),Oo.error(o)}break;case Yc.OPERATIONS_ENUM.DELETE:try{await ME(e,t.deleted_hashes,i,r)}catch(o){Oo.error("There was an error calling clustering postOperationHandler for delete."),Oo.error(o)}break;case Yc.OPERATIONS_ENUM.UPDATE:try{await ME(e,t.update_hashes,i,r)}catch(o){Oo.error("There was an error calling clustering postOperationHandler for update."),Oo.error(o)}break;case Yc.OPERATIONS_ENUM.UPSERT:try{await ME(e,t.upserted_hashes,i,r)}catch(o){Oo.error("There was an error calling clustering postOperationHandler for upsert."),Oo.error(o)}break;default:break}return t}a(NAe,"postOperationHandler")});var Z,ZJ=se(()=>{Z=class{static{a(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var lD={};ye(lD,{chooseOperation:()=>SQ,executeJob:()=>ei,getOperationFunction:()=>TQ,operation:()=>Tv,processLocalTransaction:()=>gQ});function PAe(e){if(!fv){let t=LE();fv=Sv.promisify(t.evaluateSQL)}return fv(e)}async function gQ(e,t){try{if(e.body.operation!=="read_log"&&(FE.default.log_level===_m.INFO||FE.default.log_level===_m.DEBUG||FE.default.log_level===_m.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;Cn.info(c)}}catch(n){Cn.error(n)}let r=await EQ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return LAe[e.body.operation]&&dQ.default.setSchemaDataToGlobal(n=>{n&&Cn.error(n)}),r}function SQ(e){let t;try{t=TQ(e)}catch(s){throw Cn.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=LE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,o=s.convertSQLToAST(i);if(e.parsed_sql_object=o,!e.bypass_auth){let c=s.checkASTPermissions(e,o);if(c)throw Cn.error(`${eQ.FORBIDDEN} from operation ${e.operation}`),Cn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,ti.handleHDBError)(new Error,c,ti.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=uQ.default.verifyPerms(i,s);if(o)throw Cn.error(`${eQ.FORBIDDEN} from operation ${e.operation}`),Cn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,ti.handleHDBError)(new Error,o,ti.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,ti.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function TQ(e){if(Cn.trace(`getOperationFunction with operation: ${e.operation}`),tQ.has(e.operation))return tQ.get(e.operation);throw(0,ti.handleHDBError)(new Error,ti.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ti.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function Tv(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=SQ(e);return gQ({body:e},n)}async function DAe(e){Cn.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[rA]=!0;let o;switch(i.operation){case V.INSERT:o=await Ru.default.insert(i);break;case V.UPDATE:o=await Ru.default.update(i);break;case V.UPSERT:o=await Ru.default.upsert(i);break;case V.DELETE:o=await Qf.default.deleteRecord(i);break;default:Cn.warn("invalid operation in catchup");break}await CAe.postOperationHandler(i,o,e)}catch(o){Cn.info("Invalid operation in transaction"),Cn.error(o)}}async function ei(e){(0,hQ.transformReq)(e);let t,r;try{if(r=await UR.default.addJob(e),r){t=r.createdJob,Cn.info("addJob result",r);let n=new Ev.default.RunnerMessage(t,e);return{message:await Ev.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Cn.error(i),(0,ti.handleHDBError)(n,i)}}function vAe(){let e=new Map;return e.set(V.INSERT,new Z(Ru.default.insert)),e.set(V.UPDATE,new Z(Ru.default.update)),e.set(V.UPSERT,new Z(Ru.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(Jf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(Jf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(Jf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(Jf.default.searchByValue)),e.set(V.SEARCH,new Z(OAe)),e.set(V.SQL,new Z(PAe)),e.set(V.CSV_DATA_LOAD,new Z(ei,UE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(ei,UE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(ei,UE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(ei,UE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(vi.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(vi.default.createSchema)),e.set(V.CREATE_TABLE,new Z(vi.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(vi.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(vi.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(vi.default.dropSchema)),e.set(V.DROP_TABLE,new Z(vi.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(vi.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(xE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(xE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(xE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(xE.default.describeAll)),e.set(V.DELETE,new Z(Qf.default.deleteRecord)),e.set(V.ADD_USER,new Z(ON)),e.set(V.ALTER_USER,new Z(PN)),e.set(V.DROP_USER,new Z(LN)),e.set(V.LIST_USERS,new Z(vN)),e.set(V.LIST_ROLES,new Z(BE.default.listRoles)),e.set(V.ADD_ROLE,new Z(BE.default.addRole)),e.set(V.ALTER_ROLE,new Z(BE.default.alterRole)),e.set(V.DROP_ROLE,new Z(BE.default.dropRole)),e.set(V.USER_INFO,new Z(DN)),e.set(V.READ_LOG,new Z(nQ.default)),e.set(V.ADD_NODE,new Z(sQ.default)),e.set(V.UPDATE_NODE,new Z(mv.default)),e.set(V.SET_NODE_REPLICATION,new Z(mv.default)),e.set(V.REMOVE_NODE,new Z(iQ.default)),e.set(V.CONFIGURE_CLUSTER,new Z(oQ.default)),e.set(V.PURGE_STREAM,new Z(aQ.default)),e.set(V.SET_CONFIGURATION,new Z(_v.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(cQ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(lQ.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(MR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(MR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(MR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(ei,pv.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(yu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(yu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(yu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(yu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(yu.default.removeCertificate)),e.set(V.GET_KEY,new Z(yu.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(mP)),e.set(V.REMOVE_NODE_BACK,new Z(pP)),e.set(V.DELETE_FILES_BEFORE,new Z(ei,Qf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(ei,Qf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(ei,pv.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(UR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(UR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z(ND)),e.set(V.GET_FINGERPRINT,new Z(CD)),e.set(V.SET_LICENSE,new Z(OD)),e.set(V.RESTART,new Z(hv.default.restart)),e.set(V.RESTART_SERVICE,new Z(ei,hv.default.restartService)),e.set(V.CATCHUP,new Z(DAe)),e.set(V.SYSTEM_INFORMATION,new Z(fQ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(ei,Qf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(rQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(IC)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(wC)),e.set(V.LOGIN,new Z(sD)),e.set(V.LOGOUT,new Z(iD)),e.set(V.GET_CONFIGURATION,new Z(_v.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(wt.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(wt.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(wt.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(wt.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(wt.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(wt.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(wt.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(wt.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(wt.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(wt.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(wt.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(wt.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(gv.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(ei,gv.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(mQ.default.installModules)),e.set(V.GET_BACKUP,new Z(vi.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new Z(vi.default.cleanupOrphanBlobs)),e.set(V.ADD_SSH_KEY,new Z(wt.default.addSSHKey)),e.set(V.GET_SSH_KEY,new Z(wt.default.getSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(wt.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(wt.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(wt.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(wt.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(wt.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(pD)),e.set(V.LIST_METRICS,new Z(hD)),e.set(V.DESCRIBE_METRIC,new Z(ED)),e.set(V.GET_STATUS,new Z(AD)),e.set(V.SET_STATUS,new Z(ID)),e.set(V.CLEAR_STATUS,new Z(bD)),e.set(V.INSTALL_USAGE_LICENSE,new Z(AL)),e.set(V.GET_USAGE_LICENSES,new Z(CL)),e}var Jf,UE,vi,xE,Qf,rQ,BE,wt,FE,nQ,sQ,mv,iQ,oQ,aQ,cQ,lQ,MR,pv,uQ,UR,ti,hv,Sv,Ru,dQ,fQ,Ev,_v,gv,mQ,pQ,hQ,yu,EQ,_Q,eQ,Cn,CAe,OAe,fv,LAe,tQ,uD=se(()=>{Jf=b(gn()),UE=b(zD()),vi=b(VT()),xE=b(Vl()),Qf=b(vl()),rQ=b(HO());Es();BE=b(sh()),wt=b(cD()),FE=b(Q()),nQ=b(YO()),sQ=b(ry()),mv=b(SP()),iQ=b(sy()),oQ=b(RP()),aQ=b(bP()),cQ=b(wP()),lQ=b(CP()),MR=b(ly()),pv=b(iv()),uQ=b(IR()),UR=b(lv());G();ti=b(Ee()),hv=b(Vf()),Sv=b(require("util")),Ru=b(Vn()),dQ=b(ro()),fQ=b(vh()),Ev=b(JJ());Kd();sR();_v=b(gt()),gv=b(ER()),mQ=b(mD()),pQ=b(ai()),hQ=b(ae());Hr();yu=b(ys());gf();gD();EQ=b(UC()),_Q=b(XJ());TE();tE();LD();ZJ();({HTTP_STATUS_CODES:eQ}=ti.hdbErrors),Cn=FE.default.loggerWithTag("operation"),{transactToClusteringUtils:CAe}=_Q.default,OAe=Sv.promisify(Jf.default.search);a(PAe,"evaluateSQL");LAe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};a(gQ,"processLocalTransaction");tQ=vAe();Ue.operation=Tv;a(SQ,"chooseOperation");a(TQ,"getOperationFunction");(0,pQ._assignPackageExport)("operation",Tv);a(Tv,"operation");a(DAe,"catchup");a(ei,"executeJob");a(vAe,"initializeOperationFunctionMap")});var FR=M((pqe,AQ)=>{"use strict";var xR=(G(),v(j)),MAe=ae(),Xf=Q(),{handleHDBError:yv,hdbErrors:BR}=Ee(),{isMainThread:UAe}=require("worker_threads"),{Readable:xAe}=require("stream"),yQ=require("os"),BAe=require("util"),FAe=CC(),bQ=BAe.promisify(FAe.authorize),RQ=(uD(),v(lD)),{createGzip:kAe,constants:HAe}=require("zlib"),GAe=[xR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,xR.OPERATIONS_ENUM.LOGIN,xR.OPERATIONS_ENUM.LOGOUT];function qAe(e){let t=`Found an uncaught exception with message: ${e.message}. ${yQ.EOL}Stack: ${e.stack} ${yQ.EOL}Terminating ${UAe?"HDB":"thread"}.`;console.error(t),Xf.fatal(t),process.exit(1)}a(qAe,"handleServerUncaughtException");function $Ae(e,t,r){if(Xf[e.logLevel||"info"](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:BR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a($Ae,"serverErrorHandler");function VAe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=yv(new Error,"Invalid JSON.",BR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(MAe.isEmpty(e.body.operation)){let n=yv(new Error,"Request body must include an 'operation' property.",BR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(VAe,"reqBodyValidationHandler");function KAe(e,t,r){let n;!GAe.includes(e.body.operation)||e.body.operation===xR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?bQ(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{i.statusCode=401,Xf.debug("Login failed",i),r(i,null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(KAe,"authHandler");function YAe(e,t,r){bQ(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{Xf.warn(n),Xf.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(yv(n,s,BR.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(YAe,"authAndEnsureUserOnRequest");async function WAe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=RQ.chooseOperation(e.body);let s=await RQ.processLocalTransaction(e,n);if(s instanceof xAe&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(kAe({level:HAe.Z_BEST_SPEED})))}return s}catch(s){throw Xf.error(s),s}}a(WAe,"handlePostRequest");AQ.exports={authHandler:KAe,authAndEnsureUserOnRequest:YAe,handlePostRequest:WAe,handleServerUncaughtException:qAe,serverErrorHandler:$Ae,reqBodyValidationHandler:VAe}});var CQ=M((Eqe,NQ)=>{"use strict";var jAe=require("fastify-plugin"),{handlePostRequest:IQ,authHandler:zAe,reqBodyValidationHandler:JAe}=FR();async function QAe(e){e.decorate("hdbCore",{preValidation:[JAe,zAe],request:a(t=>wQ(IQ(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>wQ(IQ(t,r,!0)),"requestWithoutAuthentication")})}a(QAe,"hdbCore");async function wQ(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(wQ,"convertAsyncIterators");NQ.exports=jAe(QAe)});var PQ=M((Sqe,OQ)=>{"use strict";var gqe=require("fs"),kR=fe();kR.initSync();var{CONFIG_PARAMS:Rv}=(G(),v(j)),XAe=1024*1024*1024;function ZAe(e){let t=kR.get(Rv.HTTP_TIMEOUT),r=kR.get(Rv.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:XAe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:kR.get(Rv.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(ZAe,"getServerOptions");OQ.exports=ZAe});var vQ=M((yqe,DQ)=>{"use strict";var bv=fe();bv.initSync();var{CONFIG_PARAMS:LQ}=(G(),v(j));function eIe(){let e=bv.get(LQ.HTTP_CORSACCESSLIST),t=bv.get(LQ.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(eIe,"getCORSOptions");DQ.exports=eIe});var xQ=M((bqe,UQ)=>{"use strict";var MQ=fe();MQ.initSync();var tIe=(G(),v(j));function rIe(){return MQ.get(tIe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(rIe,"getHeaderTimeoutConfig");UQ.exports=rIe});var Iv={};ye(Iv,{customFunctionsServer:()=>iIe,ready:()=>zQ,start:()=>sIe});function sIe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Da||(Da=jQ(t),Ue.http((await Da).server));let o=await Da,c=(0,Av.dirname)(s),l=(0,Av.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!BQ.has(c)){BQ.add(c);try{o.register(aIe(c,l))}catch(u){if(u.message==="Root plugin has already booted")Tt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:zQ}}async function iIe(){try{Tt.info("In Custom Functions Fastify server"+process.cwd()),Tt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tt.debug(`Custom Functions server process ${process.pid} starting up.`),await oIe();let e=$Q.get(x.HTTP_SECUREPORT)>0,t;try{t=Da=await jQ(e)}catch(r){throw Tt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Tt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Tt.error(`Custom Functions ${process.pid} Error: ${e}`),Tt.error(e),process.exit(1)}}async function oIe(){try{Tt.info("Custom Functions starting configuration."),await Ei(),Tt.info("Custom Functions completed configuration.")}catch(e){Tt.error(e)}}function aIe(e,t){return async function(r){try{Tt.info("Custom Functions starting buildRoutes"),Tt.trace("Loading fastify routes folder "+e),(0,FQ.existsSync)(e)&&r.register(qQ.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Tt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Tt.error(s.message):s&&Tt.error(s),o()})}catch(n){Tt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function jQ(e){Tt.info("Custom Functions starting buildServer.");let t=(0,VQ.default)(e),r=(0,kQ.default)(t);r.server.headersTimeout=(0,YQ.default)(),r.setErrorHandler(WQ.serverErrorHandler);let n=(0,KQ.default)();return n&&r.register(HQ.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(GQ.default),await r.register(nIe),await r.after(),xm(r),Tt.info("Custom Functions completed buildServer."),r}function zQ(){if(Da)return Da.then?Da.then(e=>e.ready()):Da.ready()}var Av,FQ,kQ,HQ,GQ,qQ,$Q,Tt,nIe,VQ,KQ,YQ,WQ,Da,BQ,JQ=se(()=>{Av=require("path"),FQ=require("fs"),kQ=b(require("fastify")),HQ=b(require("@fastify/cors")),GQ=b(RC()),qQ=b(require("@fastify/autoload")),$Q=b(fe());G();Tt=b(Q()),nIe=b(CQ());Es();VQ=b(PQ()),KQ=b(vQ()),YQ=b(xQ()),WQ=b(FR());qo();Hr();BQ=new Set;a(sIe,"start");a(iIe,"customFunctionsServer");a(oIe,"setUp");a(aIe,"buildRouteFolder");a(jQ,"buildServer");a(zQ,"ready")});var Nv={};ye(Nv,{handleApplication:()=>cIe,suppressHandleApplicationWarning:()=>lIe});function cIe(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,va.join)(n.absolutePath,"index.html");(0,Zf.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&(r.set((0,va.dirname)(n.urlPath),null),r.set((0,va.join)((0,va.dirname)(n.urlPath),"/"),n.absolutePath));break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,va.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let o=t.get(n.pathname);if(!o){let d=e.options.get(["index"])??!0;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);if(d&&(o=r.get(n.pathname),o===null))return{status:301,headers:{Location:(0,va.join)(n.pathname,"/")}}}if(!o){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(o=t.get(`${n.pathname}.${f}`),o)break}if(o)return{handlesHeaders:!0,body:(0,wv.default)(n,(0,Zf.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(uIe(c),!c)return{status:404,body:"File not found"};let l=(0,va.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,Zf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,wv.default)(n,(0,Zf.realpathSync)(l))}},{runFirst:!0})}function uIe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var Zf,va,wv,lIe,QQ=se(()=>{Zf=require("node:fs"),va=require("node:path"),wv=b(require("send"));a(cIe,"handleApplication");lIe=!0;a(uIe,"validateNotFoundOption")});var Cv={};ye(Cv,{start:()=>dIe});function dIe({override:e}){return{handleFile:a((t,r,n)=>{HR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,XQ.parse)(t))){if(process.env[s]!==void 0)if(HR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)HR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var XQ,HR,ZQ=se(()=>{XQ=require("dotenv"),HR=b(Q());a(dIe,"start")});var Lv={};ye(Lv,{DataLoaderError:()=>Os,DataLoaderResult:()=>em,EmptyFileError:()=>VR,FileParseError:()=>$R,InvalidPropertyTypeError:()=>KR,MissingRequiredPropertyError:()=>kE,RecordProcessingError:()=>HE,SystemDatabaseError:()=>YR,UnsupportedFileExtensionError:()=>qR,computeRecordHash:()=>Pv,handleApplication:()=>pIe,loadDataFile:()=>a3,suppressHandleApplicationWarning:()=>mIe});function Pv(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,t3.createHash)("sha256").update(n).digest("hex")}function o3(e){return e.system&&e.system[Ov]?e.system[Ov]:GR||(GR=ze({database:"system",table:Ov,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),GR)}async function fIe(e,t,r,n){try{let s=o3(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return ri.error?.(`Failed to get stored hash: ${s.message}`),null}}async function e3(e,t,r,n,s){try{let i=o3(s),o=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:o,hash:n})}catch(i){ri.error?.(`Failed to store hash: ${i.message}`)}}function pIe(e){if((0,n3.getWorkerIndex)()!==0){ri.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(a(function(r){return r.entryType!=="file"||r.eventType==="unlink"?Promise.resolve():a3(r,yn,Me).then(n=>{ri.debug?.("Data loader processed file: %s: %s",(0,Ma.basename)(r.absolutePath),n.message)})},"handleDataLoaderEntry"))}async function a3({contents:e,absolutePath:t},r,n){let s=(0,Ma.extname)(t)||"unknown",i;try{if(s===".yaml"||s===".yml")i=(0,r3.parseDocument)(e.toString()).toJSON();else if(s===".json")i=JSON.parse(e.toString());else throw new qR(t,s)}catch(d){throw d instanceof Os?d:new $R(t,d)}if(!i)throw new VR(t);let{database:o,table:c,records:l}=i;if(!c)throw new kE(t,"table");if(!l)throw new kE(t,"records");if(!Array.isArray(l))throw new KR(t,"records","array");let u=o?`${o}.${c}`:c;if(o?.toLowerCase()==="system")throw new YR(o,c);try{let d;if(o&&n[o]&&n[o][c])ri.debug?.(`Using existing table ${u} from database tables`),d=n[o][c];else if(r&&r[c])ri.debug?.(`Using existing table ${u} from global tables`),d=r[c];else{ri.debug?.(`Table ${u} not found, creating new table`);let _=[];if(l.length>0){let R=l[0];Object.keys(R).map(S=>{let y={name:S,type:typeof R[S]};return S==="id"&&(y.isPrimaryKey=!0),y}).forEach(S=>{_.push(S)})}d=await ze({database:o,table:c,attributes:_})}let f=l.length,m=0,p=0,h=0,E=100;for(let _=0;_<l.length;_+=E){let R=l.slice(_,_+E),S=[];for(let y of R)S.push(async()=>{try{let w=null,I=y.id;I!==void 0&&(w=await d.get(I));let H=Pv(y);if(!w){m++;let z=await d.put(y);return await e3(o,c,I,H,n),z}let X=await fIe(o,c,I,n);if(!X)return h++,Promise.resolve({inserted:0,updated:0});let q={};for(let z of Object.keys(y))z in w&&(q[z]=w[z]);return Pv(q)!==X?(h++,Promise.resolve({inserted:0,updated:0})):H!==X?(p++,await d.patch(I,y),await e3(o,c,I,H,n),{updated:1}):(h++,Promise.resolve({inserted:0,updated:0}))}catch(w){if(w instanceof Os)ri.error?.(`Record processing error: ${w.message}`);else{let I=new HE(u,w);ri.error?.(`Record processing error: ${I.message}`)}return Promise.resolve({inserted:0,updated:0,error:w.message})}});await Promise.all(S.map(y=>y()))}if(m>0||p>0){let _=`Loaded ${m} new and updated ${p} records in ${u}`;return h>0&&(_+=` (${h} records skipped)`),ri.info?.(_),new em(t,o,c,"success",m+p,_)}else if(h>0){let _=`All ${h} records in ${u} already up-to-date`;return ri.info?.(_),new em(t,o,c,"skipped",f,_)}else{let _=`No records to process in ${u}`;return ri.info?.(_),new em(t,o,c,"success",0,_)}}catch(d){throw d instanceof Os?d:new HE(u,d)}}var Ma,t3,r3,n3,Ua,s3,i3,ri,Ov,GR,mIe,Os,qR,$R,VR,kE,KR,YR,HE,em,c3=se(()=>{Ma=require("node:path"),t3=require("node:crypto"),r3=require("yaml");Oe();n3=b(st()),Ua=b(Jr()),s3=b(Ee()),i3=b(Q()),ri=i3.default.forComponent("dataLoader"),Ov="hdb_dataloader_hash";a(Pv,"computeRecordHash");a(o3,"getHashTrackingTable");a(fIe,"getStoredHash");a(e3,"storeHash");mIe=!0;a(pIe,"handleApplication");a(a3,"loadDataFile");Os=class extends s3.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=Ua.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},qR=class extends Os{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Ma.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},$R=class extends Os{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Ma.basename)(t)}: ${r.message}`,Ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},VR=class extends Os{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Ma.basename)(t)} is empty or invalid`,Ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},kE=class extends Os{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Ma.basename)(t)} is missing required "${r}" property`,Ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},KR=class extends Os{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Ma.basename)(t)} has invalid "${r}" property, expected ${n}`,Ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},YR=class extends Os{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ua.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},HE=class extends Os{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ua.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},em=class{static{a(this,"DataLoaderResult")}#e;#t;#n;#r;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#n=n||"unknown",this.#r=s,this.#s=i,this.#i=o}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#n}get status(){return this.#r}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#n,status:this.#r,count:this.#s,message:this.#i}}}});var Dv={};ye(Dv,{calculateRestHttpURL:()=>T3,hdbServer:()=>gIe,start:()=>gIe});async function gIe(e){try{Mi.default.debug("In Fastify server"+process.cwd()),Mi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Mi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=l3.default.isMaster,await SIe();let t=e.securePort>0;tm=TIe(t,e.resources),await tm.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(tm.server,e),tm.server.closeIdleConnections||await tm.listen({port:0,host:"::"})}catch(r){throw tm.close(),Mi.default.error(r),Mi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Mi.default.fatal(t),process.exit(1)}}async function SIe(){return Mi.default.trace("Configuring HarperDB process."),_3.default.setSchemaDataToGlobal(),Ei()}function TIe(e,t){Mi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=bIe(e),n=(0,u3.default)(r);n.server.headersTimeout=IIe(),n.setErrorHandler(Po.serverErrorHandler);let s=AIe();s&&n.register(d3.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(p3.default),n.register(f3.default),xm(n),n.get("/health",()=>"HarperDB is running."),n.register(m3.default,{root:h3.default.join(E3.PACKAGE_ROOT,"studio/web")});let i=Ui.default.get(Sm.LOCAL_STUDIO_ON);return!g3.default.isEmpty(i)&&i.toString().toLowerCase()==="true"?n.get("/",(o,c)=>c.sendFile("index.html")):n.get("/",(o,c)=>c.sendFile("running.html")),n.get("/api/openapi/rest",{preValidation:[Po.authAndEnsureUserOnRequest]},yIe(t)),n.post("/",{preValidation:[Po.reqBodyValidationHandler,Po.authHandler],config:{isOperation:!0}},RIe),Mi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function yIe(e){let t=Ui.default.get(x.HTTP_PORT),r=Ui.default.get(x.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?kS(e,T3(t,r,n)):(Mi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new S3.ServerError("Forbidden",403))}function T3(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return n.hostname.toLowerCase()==="localhost"||n.hostname.match(/^[\d.:]+$/)?t?(n.port=t,n.protocol="https:"):e&&(n.port=e,n.protocol="http:"):(n.port="443",n.protocol="https:"),n.toString()}function RIe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,Po.handlePostRequest)(e,t)}function bIe(e){let t=Ui.default.get(rm.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ui.default.get(rm.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:EIe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:Ui.default.get(rm.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function AIe(){let e=Ui.default.get(rm.OPERATIONSAPI_NETWORK_CORS),t=Ui.default.get(rm.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===_Ie)&&(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 IIe(){return Ui.default.get(rm.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??hIe}var l3,Ui,Mi,u3,d3,f3,m3,p3,h3,E3,_3,g3,Po,S3,hIe,EIe,_Ie,rm,tm,y3=se(()=>{l3=b(require("cluster")),Ui=b(fe());G();Mi=b(Q()),u3=b(require("fastify")),d3=b(require("@fastify/cors")),f3=b(require("@fastify/compress")),m3=b(require("@fastify/static")),p3=b(RC()),h3=b(require("path")),E3=b(yt()),_3=b(ro()),g3=b(ae());Es();Hr();Po=b(FR());qo();_C();S3=b(Ee());Ui.default.initSync();hIe=6e4,EIe=1024*1024*1024,_Ie="TRUE",{CONFIG_PARAMS:rm}=j;a(gIe,"operationsServer");a(SIe,"setUp");a(TIe,"buildServer");a(yIe,"restOpenAPIHandler");a(T3,"calculateRestHttpURL");a(RIe,"handler");a(bIe,"getServerOptions");a(AIe,"getCORSOpts");a(IIe,"getHeaderTimeoutConfig")});var Fv={};ye(Fv,{disableNATS:()=>NIe,publishToStream:()=>zR,setNATSReplicator:()=>vv,setPublishToStream:()=>CIe,setSubscription:()=>Bv,start:()=>wIe});function wIe(){GE.default.get(x.CLUSTERING_ENABLED)&&PIe()}function NIe(e=!0){w3=e}function CIe(e,t){zR=e,Bv=t}function PIe(){if(w3||process.env._DISABLE_NATS)return;let e=lt(),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];vv(s,r,i)}}ql((r,n)=>{vv(r.tableName,r.databaseName,r),n&&C3(r)}),!R3&&(R3=!0)}function vv(e,t,r){if(t==="system"&&LIe.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 Xt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){C3(i)}static subscribe(){let i=new ns;return Bv(t,e,i),i}static subscribeOnThisThread(i){return i<(GE.default.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??OIe)}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 WR(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=N3;return i}a(n,"getNATSTransaction")}function C3(e){let t=GE.default.get(x.CLUSTERING_NODENAME);zR(`${Uv.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,xv.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 b3,Uv,xv,A3,I3,GE,jR,w3,zR,Bv,OIe,N3,R3,LIe,WR,Mv,O3=se(()=>{Oe();zi();b3=b(Sr()),Uv=b(Pt()),xv=b(so());ku();A3=b(JR()),I3=b(Un()),GE=b(fe());G();jR=b(Q());a(wIe,"start");a(NIe,"disableNATS");zR=b3.publishToStream,Bv=A3.setSubscription;a(CIe,"setPublishToStream");OIe=2;a(PIe,"assignReplicationSource");LIe=["hdb_job","hdb_raw_analytics","hdb_info"];a(vv,"setNATSReplicator");a(C3,"publishSchema");WR=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=GE.default.get(x.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let o=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(jR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=o)),l.table===f&&l.operation===m?(o.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(zR(`${Uv.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,xv.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw jR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},Mv=class extends WR{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,I3.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};N3=new Mv});async function M3({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await kv.get(e,{returnNonexistent:!0});i=new qv(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await kv.get(e);o&&o.delete()}i=new XR(e,t)}return n&&(n.id=e,n.user={username:t?.username},qE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function Hv(){return QR++,QR>65500&&(QR=1),QR}function Gv(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=xs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=new Us(i.relativeURL);o.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return bt(r,()=>s?t===void 0?c.delete(o,r):c.put(o,e.data,r):c.publish(o,e.data,r))}var L3,Wc,D3,v3,P3,kv,qE,QR,XR,qv,U3=se(()=>{Oe();tc();L3=b(Un()),Wc=b(Q());ja();D3=b(st()),v3=b(kL());Hr();bg();P3=100,kv=ze({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"}]}}]}),qE=ze({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,D3.getWorkerIndex)()===0&&(async()=>{await v3.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of qE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await Gv(r,t,r)}catch{(0,Wc.warn)("Failed to publish will",t)}qE.delete(e.id)}})();a(M3,"getSession");QR=1;a(Hv,"getNextMessageId");XR=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:o,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};o&&(0,Wc.trace)("Resuming subscription from",s,"from",o);let p=xs.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let y=S.split("/"),w;for(let X=0;X<y.length;X++)if(y[X].indexOf("+")>-1)if(y[X]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&w)throw new Error("Filters can not be combined");let I=!0;y[y.length-1]==="#"&&(y.length--,I=!1),w&&(n=a(X=>{let q=X.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(I&&q.length!==y.length)return!1;for(let k=0;k<y.length;k++)if(y[k]!=="+"&&y[k]!==q[k])return!1;return!0},"filter"));let H=y.indexOf("+");m.url="/"+(H>-1?y.slice(0,H):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,_=p.Resource,R=await bt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await _.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let w=(async()=>{for await(let I of y)try{let H;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,H=this.needsAcknowledge(I)):(I.acknowledge?.(),H=Hv());let X=I.id;if(Array.isArray(X)&&(X=sd(X)),X==null&&(X=""),await this.listener(E+"/"+X,I.value,H,t)===!1)break;this.awaitingAcks?.size>P3?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-P3)):await new Promise(setImmediate)}catch(H){(0,Wc.warn)(H)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=Hv();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 Gv(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();bt(r,async()=>{try{if(!t){let n=await qE.get(this.sessionId);n?.doesExist()&&await Gv(n,n.data,r)}}finally{await qE.delete(this.sessionId)}}).catch(n=>{(0,Wc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(Gv,"publish");qv=class extends XR{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=Hv(),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,Wc.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,L3.getNextMonotonicTime)()),(0,Wc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),kv.put(this.sessionRecord)}}});var $v={};ye($v,{bypassAuth:()=>DIe,start:()=>MIe});function DIe(){G3=!0}function MIe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new H3.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);o.events.emit("connection",u),rr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=B3(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),o);u.on("message",p),u.on("close",h),u.on("error",E=>{rr.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),rr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await lf(p,l);if(!E.valid)throw rr.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,nm.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eb.notify?.({username:d?.username,status:oi.SUCCESS,type:Ka.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,nm.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&eb.error?.({username:h,status:oi.FAILURE,type:Ka.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else rr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){o.events.emit("error",p,u),rr.error?.(p)}else if(l.required)return rr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&vIe(u.remoteAddress)&&(d=await Fp(),rr.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=B3(u,p=>u.write(p),null,d,o);u.on("data",f),u.on("close",m),u.on("error",p=>{rr.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function B3(e,t,r,n,s){x3||(x3=!0,Zm(f=>{ZR>0&&f.push({metric:"mqtt-connections",connections:ZR,byThread:!0})}));let i;ZR++;let o,c={protocolVersion:4},l=(0,tb.parser)({protocolVersion:5});function u(f){l.parse(f)}a(u,"onMessage");function d(){ZR--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),en(!1,"connection","mqtt","disconnect"),rr.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),rr.info?.(y);return}let m=f.cmd;if(o)o.then&&await o;else if(m!=="connect"){rr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Ye(f.length,"bytes-received",E,R(f),"mqtt");try{switch(o?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Ue.getUser(f.username,f.password.toString(),r),(0,nm.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eb.notify?.({username:n?.username,status:oi.SUCCESS,type:Ka.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(z){return(0,nm.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&eb.error?.({username:f.username,status:oi.FAILURE,type:Ka.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,z),en(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),en(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let z=e.deserialize||(e.deserialize=Go(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?z(f.will.payload):void 0,delete f.will.payload}o=M3({user:n,...f}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(z){return rr.error?.(z),s.events.emit("auth-failed",f,e,z),en(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:z.code||5,returnCode:z.code||128})}s.events.emit("connected",o,e),en(!0,"connection","mqtt","connect"),_({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let y=a(async(z,Y,ce,de)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",z);let te=z.indexOf("/",1),Se=te>0?z.slice(0,te):z;_({cmd:"publish",topic:z,payload:await S(Y),messageId:ce||Math.floor(Math.random()*1e8),qos:de.qos},Se);let Ne=e._socket??e;return Ne.writableNeedDrain?new Promise(Ke=>Ne.once("drain",Ke)):!Ne.closed}catch(te){return rr.error?.(te),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(y),o.sessionWasPresent&&await o.resume();break;case"subscribe":let w=[];for(let z of f.subscriptions){let Y;try{let ce=await o.addSubscription(z,z.qos>=1);Y=ce?ce.qos||0:c.protocolVersion<5?128:143}catch(ce){s.events.emit("error",ce,e,z,o),ce.statusCode?ce.statusCode===500?rr.warn?.(ce):rr.info?.(ce):rr.error?.(ce),Y=c.protocolVersion<5?128:ce.statusCode===403?135:ce.statusCode===404?143:128}w.push(Y)}await o.committed,_({cmd:"suback",granted:w,messageId:f.messageId});break;case"unsubscribe":{let z=[];for(let Y of f.unsubscriptions)z.push(o.removeSubscription(Y)?0:17);_({cmd:"unsuback",granted:z,messageId:f.messageId});break}case"pubrel":_({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let I=f.qos===2?"pubrec":"puback",H=e.deserialize||(e.deserialize=Go(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?H(f.payload):void 0,k;try{k=await o.publish(f,q)}catch(z){s.events.emit("error",z,e,f,o),rr.warn?.(z),f.qos>0&&_({cmd:I,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&_({cmd:I,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":_({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(f.messageId);break;case"pingreq":_({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),en(!0,"connection","mqtt","disconnect"),rr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,o),rr.error?.(y),_({cmd:"disconnect"})}function _(y,w){let I=(0,tb.generate)(y,c);t(I),Ye(I.length,"bytes-sent",w,R(y),"mqtt")}a(_,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(R,"packetMethodName");function S(y){return Ho(y,r)}a(S,"serialize")}),l.on("error",f=>{rr.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var tb,nm,F3,k3,H3,eb,rr,G3,vIe,x3,ZR,q3=se(()=>{tb=require("mqtt-packet");U3();Es();qo();is();Hr();nm=b(fe());G();F3=b(ir()),k3=b(Q()),H3=require("events");MT();eb=(0,F3.loggerWithTag)("auth-event"),rr=(0,k3.forComponent)("mqtt"),G3=(0,nm.get)(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(DIe,"bypassAuth");vIe=a(e=>G3&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");a(MIe,"start");ZR=0;a(B3,"onSocket")});function rb(e,t){if(t?.includes(".."))throw new Vv(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var Vv,Kv=se(()=>{Vv=class extends Error{static{a(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};a(rb,"resolveBaseURLPath")});function $3(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(o=>o[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var V3=se(()=>{a($3,"deriveCommonPatternBase")});function nb(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=a((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var Yv=se(()=>{a(nb,"deriveGlobOptions")});var K3,Wv,$E,Y3=se(()=>{Kv();V3();Yv();K3=require("micromatch"),Wv=class extends Error{static{a(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},$E=class{static{a(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=rb(this.name,this.config.urlPath),this.globOptions=nb(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new Wv(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,K3.scan)(s).base),this.commonPatternBase=$3(this.patternBases)}}});function W3(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function bu(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(W3(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(W3(n,t)){t=t.slice(n.length+1);break}}}return(0,j3.join)(e.baseURLPath,t)}var j3,jv=se(()=>{j3=require("node:path");a(W3,"pathStartsWithBase");a(bu,"deriveURLPath")});function z3(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var ib,J3,Q3,zv,X3,Z3,sb,e6=se(()=>{ib=require("node:events");Y3();J3=b(Q()),Q3=b(require("chokidar")),zv=require("node:path"),X3=require("node:fs/promises");jv();Z3=require("micromatch"),sb=class extends ib.EventEmitter{static{a(this,"EntryHandler")}#e;#t;#n;#r;#s;ready;constructor(t,r,n,s){super(),this.#e=new $E(t,r,z3(n)),this.#n=s||J3.default.loggerWithTag(t),this.#r=new Set,this.#s=!1,this.ready=(0,ib.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#i(...[t,r,n]){if(r===""&&(r="/"),!(0,Z3.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,zv.join)(this.directory,r);switch(t){case"add":case"change":{let i=bu(this.#e,r,"file"),o=(0,X3.readFile)(s).then(c=>{let l={eventType:t,entryType:"file",contents:c,stats:n,absolutePath:s,urlPath:i};this.emit("all",l),this.emit(t,l)}).finally(()=>{this.#r.delete(o),this.#c()});this.#r.add(o);break}case"unlink":{let i=bu(this.#e,r,"file"),o={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}case"addDir":case"unlinkDir":{let i=bu(this.#e,r,"directory"),o={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}}}#o(t){this.emit("error",t)}#u(){this.#s=!0,this.#r.size>0&&this.#n.debug?.(`Initial scan complete, still waiting for ${this.#r.size} pending file reads`),this.#c()}#c(){this.#s&&this.#r.size===0&&this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,zv.join)(this.#e.directory,r));return this.#t=Q3.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:a(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.#i.bind(this)).on("error",this.#o.bind(this)).on("ready",this.#u.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,z3(t)),this.#a()}};a(z3,"castConfig")});var ob,Jv=se(()=>{ob={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var cb,t6,r6,n6,s6,i6,Qv,Xv,Zv,eM,tM,ab,o6=se(()=>{cb=require("events"),t6=b(require("yaml")),r6=b(require("chokidar")),n6=require("node:fs/promises"),s6=require("util"),i6=b(Q());Jv();Qv=class extends Error{static{a(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},Xv=class extends Error{static{a(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},Zv=class extends Error{static{a(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},eM=class extends Error{static{a(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},tM=class extends Error{static{a(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},ab=class extends cb.EventEmitter{static{a(this,"OptionsWatcher")}#e;#t;#n;#r;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||i6.default.loggerWithTag(t),this.ready=(0,cb.once)(this,"ready"),this.#t=r6.default.watch(r,{persistent:!1}).on("add",this.#o.bind(this)).on("change",this.#o.bind(this)).on("error",this.#u.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#o.bind(this))}#o(){(0,n6.readFile)(this.#e,"utf-8").then(t=>{this.#r=t6.default.parse(t),this.#r&&this.#s in this.#r?this.#n?this.#l(this.#r[this.#s],this.#n):(this.#n=this.#r[this.#s],this.emit("ready",this.#n)):this.#n&&(this.#n=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#r?(this.#a(),this.emit("remove")):(this.#a(),this.emit("ready"));return}this.emit("error",t)})}#u(t){this.emit("error",new Qv(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.#a(),this.emit("remove")}#a(){this.#r=ob,this.#n=this.#r[this.#s]}#l(t,r,n=[]){if(!this.#d(r)||!this.#d(t)){this.#m(n,t);return}for(let s of Object.keys(r))s in t||this.#m(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let o=n.concat(s),c=this.#f(o);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#m(o,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#d(c)?this.#l(i,c,o):this.#m(o,i);continue}(0,s6.isDeepStrictEqual)(i,c)||this.#m(o,i)}}#d(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#f(t){let r=this.#n;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#m(t,r){if(!this.#n)throw new Xv;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new Zv(t,r);let n=this.#n;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new eM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new tM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#n)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#n?this.#f(t):void 0}getAll(){return structuredClone(this.#n)}getRoot(){return this.#r}}});var VE,a6,lb,ub,c6=se(()=>{VE=require("node:events");e6();o6();a6=b(Q());yD();lb=class extends Error{static{a(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},ub=class extends VE.EventEmitter{static{a(this,"Scope")}#e;#t;#n;#r;#s;#i;#o;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#n=t,this.#t=r,this.#e=n,this.#i=(0,a6.loggerWithTag)(this.#n),this.resources=s,this.server=i,this.#s=[],this.#o=new Set,this.ready=(0,VE.once)(this,"ready"),this.options=new ab(t,n,this.#i).on("error",this.#c.bind(this)).on("change",this.#d.bind(this)()).on("ready",this.#u.bind(this))}get logger(){return this.#i}get name(){return this.#n}get directory(){return this.#t}get configFilePath(){return this.#e}#u(){this.emit("ready")}#c(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#a(t){let r=new sb(this.#n,this.#t,t,this.#i).on("error",this.#c.bind(this)).on("add",this.#l("add")).on("change",this.#l("change")).on("unlink",this.#l("unlink")).on("addDir",this.#l("addDir")).on("unlinkDir",this.#l("unlinkDir"));return this.#s.push(r),r}#l(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#d(){let t=this;return a(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#r){t.#r=t.#a(i);return}t.#r.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#f(){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){let n,s=a((i,o)=>{let c=new Set,l=a(d=>{let f=o(d);if(f instanceof Promise){let m=f.catch(p=>{throw this.#i.error?.("Error in async entry handler:",p),this.#c(p),p}).finally(()=>c.delete(m));c.add(m)}},"wrapped"),u=(0,VE.once)(i,"ready").then(async()=>{c.size>0&&await Promise.all(c),i.emit("initialLoadComplete")});return this.#o.add(u),u.finally(()=>this.#o.delete(u)),l},"wrapHandler");if(t===void 0)if(this.#r)n=this.#r;else{let i=this.#f();if(i)this.#r=this.#a(i),n=this.#r;else{this.emit("error",new lb);return}}else if(typeof t=="function"){if(this.#r)n=this.#r;else{let o=this.#f();if(o)this.#r=this.#a(o),n=this.#r;else{this.emit("error",new lb);return}}let i=s(n,t);n.on("all",i)}else if(n=this.#a(t),r){let i=s(n,r);n.on("all",i)}return n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),b4()}async waitForInitialLoads(){this.#o.size>0&&await Promise.all(this.#o)}}});function Au(e){return typeof e=="string"&&e.trim()!==""}function rM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>Au(t))}function f6(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function UIe(e){e.config.root&&KE.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 lM(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(f6(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let o=(0,YE.join)(e.directory,i);db.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,o,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,o,e.resources))}return s}async function m6(e){let t=!1;if(t=await UIe(e),t)return t;let r=await(0,l6.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,YE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=bu(e,n.path,"directory");db.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=bu(e,n.path,"file"),o=await(0,u6.readFile)(s);db.isMainThread&&e.module.setupFile?(await e.module.setupFile(o,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(o,i,s,e.resources),t=!0)}else KE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var db,l6,KE,YE,u6,d6,fb,xi,nM,sM,iM,oM,aM,cM,lM,uM,dM,p6=se(()=>{db=require("node:worker_threads"),l6=b(require("fast-glob")),KE=b(Q());Kv();Yv();YE=require("node:path"),u6=require("node:fs/promises");jv();d6=require("micromatch"),fb=class{static{a(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!Au(this.config.files)&&!rM(this.config.files)&&!f6(this.config.files))throw new nM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!rM(this.config.files.source)&&!Au(this.config.files.source))throw new sM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new iM(this);if(this.config.files.ignore!==void 0&&!rM(this.config.files.ignore)&&!Au(this.config.files.ignore))throw new oM(this)}if(this.config.root!==void 0&&!Au(this.config.root))throw new cM(this);if(this.config.path!==void 0&&!Au(this.config.path))throw new uM(this);if(this.config.path&&(KE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!Au(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new dM(this);this.globOptions=nb(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new aM(this,r);return r.startsWith("/")&&(KE.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,d6.scan)(r).base),this.baseURLPath=rb(this.name,this.config.urlPath)}},xi=class extends Error{static{a(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,YE.basename)(r.directory)}) ${t}`)}},nM=class extends xi{static{a(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},sM=class extends xi{static{a(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},iM=class extends xi{static{a(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},oM=class extends xi{static{a(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},aM=class extends xi{static{a(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},cM=class extends xi{static{a(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},lM=class extends xi{static{a(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},uM=class extends xi{static{a(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},dM=class extends xi{static{a(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};a(Au,"isNonEmptyString");a(rM,"isArrayOfNonEmptyStrings");a(f6,"isObject");a(UIe,"handleRoots");a(m6,"processResourceExtensionComponent")});var jy={};ye(jy,{getComponentName:()=>Ky,loadComponent:()=>Eb,loadComponentDirectories:()=>g6,setErrorReporter:()=>BIe});function g6(e,t){t&&(mM=t),e&&(_M=e);let r=[];if((0,jt.existsSync)(fM)){let s=(0,jt.readdirSync)(fM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Yr.join)(fM,o);r.push(Eb(c,mM,Jb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Eb(n,mM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{_6=!0})}function BIe(e){pb=e}function FIe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{Pa.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(Pa.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,Yr.join)(e,"node_modules");(0,jt.existsSync)(s)||(0,jt.mkdirSync)(s);let i=(0,Yr.join)(s,"harperdb");if((0,jt.existsSync)(i)){if((0,jt.realpathSync)(i)===(0,jt.realpathSync)(EM.PACKAGE_ROOT))return t();(0,jt.rmSync)(i,{recursive:!0,force:!0})}(0,jt.symlinkSync)(EM.PACKAGE_ROOT,i,"dir"),t()}finally{Pa.primaryStore.unlock(e,0)}})}function S6(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(!Pa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(S6(e,t))}))return new Promise((o,c)=>{n=o,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)});let i;return Promise.race([Promise.resolve(t.handleApplication(e)).then(async()=>{await e.waitForInitialLoads()}),new Promise((o,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{Pa.primaryStore.unlock(e.name,0),clearTimeout(i)})})}async function Eb(e,t,r,n,s,i){let o=(0,jt.realpathSync)(e);if(mb.has(o))return mb.get(o);mb.set(o,!0),s&&(_M=s);try{let c,l=(0,Yr.join)(e,"harperdb-config.yaml");if((0,jt.existsSync)(l)?c=n?(0,_b.getConfigObj)():(0,hM.parseDocument)((0,jt.readFileSync)(l,"utf8")).toJSON():!n&&(0,jt.existsSync)(l=(0,Yr.join)(e,"config.yaml"))?c=(0,hM.parseDocument)((0,jt.readFileSync)(l,"utf8")).toJSON():c=ob,!n)try{await FIe(e)}catch(m){xa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&xa.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=hb,d={};for(let m in c){let p=n?m:`${(0,Yr.basename)(e)}.${m}`;hb=m;let h=c[m];if(!h)continue;lo.loading(p);let E,_=h.package;try{if(_){let I=null;if(n)I=(0,Yr.join)(e,"components",m);else{let H=e;for(I=(0,Yr.join)(H,"node_modules",m);!(0,jt.existsSync)(I);){if(H=(0,Yr.dirname)(H),H.length<(0,E6.getHdbBasePath)().length){I=null;break}I=(0,Yr.join)(H,"node_modules",m)}}if(I)E=await Eb(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else E=xIe[m];if(!E){lo.loaded(p,`Application component '${p}' processed`);continue}let R=a(I=>(I.origin=r,ze(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,w=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let I=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw lo.failed(p,I,`Component '${p}' failed to load`),I}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&xa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new ub(m,e,l,t,Ue);await S6(I,E),lo.loaded(p,`Component '${p}' loaded successfully`);continue}if(pM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:R,port:w,securePort:y,resources:t,...h})||E,n&&S))for(let I of[w,y])try{if(+I&&!h6.includes(I)){let H=gM.get(x.HTTP_SESSIONAFFINITY);H&&xa.default.warn("Session affinity is not recommended and may cause memory leaks"),(H||!HS)&&(h6.push(I),$L(I,H))}}catch(H){console.error("Error listening on socket",I,H,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:R,port:w,securePort:y,resources:t,...h})||E),_M.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new fb({config:h,name:m,directory:e,module:E,resources:t});d[m]=await m6(I)}lo.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,Yr.basename)(e)}' due to: ${R.message}`,pb?.(R),((0,WE.getWorkerIndex)()===0?console:xa.default).error(R),t.set(h.path||"/",new Sl(R),null,!0),lo.failed(p,R,`Could not load component '${p}'`)}}if(hb=u,pM.isMainThread&&!_6&&i&&(0,WE.watchDir)(e,async()=>g6()),c.extensionModule||c.pluginModule){let m=await xS((0,Yr.join)(e,c.extensionModule||c.pluginModule));return mb.set(o,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;pb?.(new Error(m)),((0,WE.getWorkerIndex)()===0?console:xa.default).error(m),lo.failed((0,Yr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||xa.default.warn(`Component ${m} from (${(0,Yr.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}`,pb?.(c),t.set("",new Sl(c))}}var jt,Yr,pM,hM,gM,EM,xa,WE,E6,_b,fM,_M,_6,mM,xIe,h6,mb,pb,hb,Ky,oE=se(()=>{jt=require("node:fs"),Yr=require("node:path"),pM=require("node:worker_threads"),hM=require("yaml"),gM=b(fe()),EM=b(yt());G();n$();m$();N$();M$();U$();J$();JQ();QQ();ZQ();xa=b(Q());c3();WE=b(st());uC();Hr();Oe();KL();E6=b(fe());y3();sR();O3();Ss();q3();_b=b(gt());oh();SI();c6();p6();BL();TE();Gp();Jv();fM=(0,_b.resolvePath)(gM.get(x.COMPONENTSROOT)),_M=new Map;a(g6,"loadComponentDirectories");xIe={REST:qS,rest:qS,graphql:rC,graphqlSchema:eC,roles:lC,jsResource:dC,fastifyRoutes:Iv,login:mC,static:Nv,operationsApi:Dv,customFunctions:{},http:Vy,clustering:Fv,replication:ia,authentication:mE,mqtt:$v,loadEnv:Cv,logging:xa.default,dataLoader:Lv},h6=[],mb=new Map;a(BIe,"setErrorReporter");Ky=a(()=>hb,"getComponentName");a(FIe,"symlinkHarperModule");a(S6,"sequentiallyHandleApplication");a(Eb,"loadComponent")});var zy=M((cVe,T6)=>{var{isMainThread:SM}=require("worker_threads"),{getTables:kIe}=(Oe(),v(ft)),{loadComponentDirectories:HIe,loadComponent:GIe}=(oE(),v(jy)),{resetResources:qIe}=(tc(),v(TI)),$Ie=gt(),{dirname:VIe}=require("path"),{getConnection:KIe}=Sr(),YIe=fe(),{CONFIG_PARAMS:WIe}=(G(),v(j)),{loadCertificates:jIe}=ys(),{installApplications:zIe}=(fR(),v(dR)),{loadAndWatchLicensesDir:JIe}=(tE(),v(Fy)),TM=new Map;async function QIe(e=!1){!SM&&YIe.get(WIe.CLUSTERING_ENABLED)&&KIe();try{SM&&await zIe()}catch(n){console.error(n)}let t=qIe();kIe(),t.isWorker=e,SM&&JIe(),await jIe(),await GIe(VIe($Ie.getConfigFilePath()),t,"hdb",!0,TM),await HIe(TM,t);let r=[];for(let[n]of TM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(QIe,"loadRootComponents");T6.exports.loadRootComponents=QIe});var st=M((uVe,Fi)=>{"use strict";iA();var{Worker:XIe,MessageChannel:ZIe,parentPort:Lo,isMainThread:IM,threadId:ewe,workerData:Do}=require("worker_threads"),{PACKAGE_ROOT:twe}=yt(),{join:A6,isAbsolute:rwe,extname:nwe}=require("path"),{server:I6}=(Hr(),v(ym)),{watch:swe,readdir:iwe}=require("fs/promises"),{totalmem:y6}=require("os"),{setHeapSnapshotNearHeapLimit:owe}=require("v8"),jc=(G(),v(j)),Tb=fe(),Bi=Q(),{randomBytes:awe}=require("crypto"),{_assignPackageExport:cwe}=ai(),R6=1024*1024,Ba=[],ni=[],lwe=50,wM=1e4,uwe="restart",w6="request_thread_info",N6="resource_report",C6="thread_info",O6="added-port",dwe="ack",yM;cwe("threads",ni);Fi.exports={startWorker:RM,restartWorkers:CM,shutdownWorkers:U6,shutdownWorkersNow:Ewe,workers:Ba,setMonitorListener:Awe,onMessageFromWorkers:_we,onMessageByType:B6,broadcast:Swe,broadcastWithAcknowledgement:ywe,setChildListenerByType:hwe,getWorkerIndex:P6,getWorkerCount:L6,getTicketKeys:v6,setMainIsWorker:mwe,setTerminateTimeout:fwe,restartNumber:Do?.restartNumber||1};ni.onMessageByType=B6;ni.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ni.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Fi.exports.whenThreadsStarted=new Promise(e=>{Fi.exports.threadsHaveStarted=e});Tb.get(jc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&owe(1);var NM;function fwe(e){wM=e}a(fwe,"setTerminateTimeout");function P6(){return Do?Do.workerIndex:NM?0:void 0}a(P6,"getWorkerIndex");function L6(){return Do?Do.workerCount:NM?1:void 0}a(L6,"getWorkerCount");function mwe(e){NM=e,Fi.exports.threadsHaveStarted()}a(mwe,"setMainIsWorker");var D6=1,gb;function v6(){return gb||(gb=IM?awe(48):Do.ticketKeys,gb)}a(v6,"getTicketKeys");Object.defineProperty(I6,"workerIndex",{get(){return P6()}});Object.defineProperty(I6,"workerCount",{get(){return L6()}});var M6={[w6](e,t){Rwe(t)},[N6](e,t){bwe(t,e)}};function RM(e,t={}){let r=process.constrainedMemory?.()||y6();r=Math.min(r,y6(),2e4*R6);let n=Tb.get(jc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/R6/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of ni){let d=new ZIe;d.existingPort=u,i.push(d),o.push(d.port2)}nwe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];Tb.get(jc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new XIe(rwe(e)?e:A6(twe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:D6=t.threadCount,name:t.name,restartNumber:Fi.exports.restartNumber,ticketKeys:v6()},transferList:o,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:O6,port:u,threadId:l.threadId},[u]);return yb(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>RM(e,t),l.on("error",u=>{Bi.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{Ba.splice(Ba.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<lwe?(t.unexpectedRestarts=l.unexpectedRestarts+1,RM(e,t)):Bi.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{M6[u.type]?.(u,l)}),Ba.push(l),wwe(),t.onStarted&&t.onStarted(l),l.name=t.name,l}a(RM,"startWorker");var pwe=[jc.THREAD_TYPES.HTTP];async function CM(e=null,t=Math.max(D6>3,1),r=!0){if(IM){try{process.chdir(process.cwd())}catch(o){Bi.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=zy();await o()}Fi.exports.restartNumber++,t<1&&(t=t*Ba.length);let n=[],s=[];for(let o of Ba.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Bi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Fi.exports.restartNumber,type:jc.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=pwe.indexOf(o.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},wM*2).unref();o.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),d=new Promise(f=>{let m=a(p=>{p.type===jc.ITC_EVENT_TYPES.CHILD_STARTED&&(Bi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Bi.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Vf();r&&(e==="http"||!e)&&Tb.get(jc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Lo.postMessage({type:uwe,workerType:e})}a(CM,"restartWorkers");function hwe(e,t){M6[e]=t}a(hwe,"setChildListenerByType");function U6(e){return CM(e,1/0,!1)}a(U6,"shutdownWorkers");function Ewe(e){return U6(e),Promise.all(Ba.map(t=>t.terminate()))}a(Ewe,"shutdownWorkersNow");var x6=[];function _we(e){x6.push(e)}a(_we,"onMessageFromWorkers");var bM=new Map;function B6(e,t){let r=bM.get(e);r||bM.set(e,r=[]),r.push(t)}a(B6,"onMessageByType");var gwe=10;async function Swe(e,t){let r=0;for(let n of ni)try{n.postMessage(e),r++>gwe&&(r=0,await new Promise(setImmediate))}catch(s){Bi.error("Unable to send message to worker",s)}t&&k6(e,null)}a(Swe,"broadcast");var Sb=new Map,Twe=1;function ywe(e){return new Promise(t=>{let r=0;for(let n of ni)try{let s=Twe++,i=a(()=>{Sb.delete(s),--r===0&&t(),n!==Lo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Sb.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Sb)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Bi.error("Unable to send message to worker",s)}r===0&&t()})}a(ywe,"broadcastWithAcknowledgement");function Rwe(e){e.postMessage({type:C6,workers:F6()})}a(Rwe,"sendThreadInfo");function F6(){let e=Date.now();return Ba.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(F6,"getChildWorkerInfo");function bwe(e,t){e.resources=t,e.resources.updated=Date.now()}a(bwe,"recordResourceReport");var AM;function Awe(e){AM=e}a(Awe,"setMonitorListener");var Iwe=1e3,b6=!1;function wwe(){b6||(b6=!0,setInterval(()=>{for(let e of Ba){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}AM&&AM()},Iwe).unref())}a(wwe,"startMonitoring");var Nwe=1e3;if(Lo&&Do?.addPorts){yb(Lo);for(let e=0,t=Do.addPorts.length;e<t;e++){let r=Do.addPorts[e];r.threadId=Do.addThreadIds[e],yb(r)}setInterval(()=>{let e=process.memoryUsage();Lo.postMessage({type:N6,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Nwe).unref(),yM=a(()=>new Promise((e,t)=>{Lo.on("message",r),Lo.postMessage({type:w6});function r(n){n.type===C6&&(Lo.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else yM=F6;Fi.exports.getThreadInfo=yM;function yb(e,t){ni.push(e),e.on("message",r=>{if(r.type===O6)r.port.threadId=r.threadId,yb(r.port);else if(r.type===dwe){let n=Sb.get(r.id);n&&n()}else k6(r,e)}).on("close",()=>{ni.splice(ni.indexOf(e),1)}).on("exit",()=>{ni.splice(ni.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(yb,"addPort");function k6(e,t){for(let n of x6)n(e,t);let r=bM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Bi.error(s)}}a(k6,"notifyMessageListeners");if(IM){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await iwe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(A6(s,o.name));try{for await(let{filename:o}of swe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await CM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watchDir");Fi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Lo.on("message",async e=>{let{type:t}=e;t===jc.ITC_EVENT_TYPES.SHUTDOWN&&(Fi.exports.restartNumber=e.restartNumber,Lo.unref(),setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate",ewe),process.exit(0)},wM).unref())})});var K6=M((pVe,V6)=>{"use strict";var{promises:sm,createReadStream:Cwe,createWriteStream:Owe}=require("fs"),{createGzip:Pwe}=require("zlib"),{promisify:Lwe}=require("util"),{pipeline:Dwe}=require("stream"),vwe=Lwe(Dwe),PM=require("path"),$6=fe();$6.initSync();var Rb=Q(),{CONFIG_PARAMS:Mwe,ITC_EVENT_TYPES:fVe}=(G(),v(j)),{onMessageFromWorkers:mVe}=st(),{convertToMS:H6}=ae(),{onStorageReclamation:Uwe}=(eg(),v(Jx)),xwe=6e4,Bwe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Fwe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",OM,G6;V6.exports=kwe;function kwe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:o}){if(s===!1)return;let c=0;if(Uwe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(Bwe);if(!i)throw new Error(Fwe);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=H6(r));let d;return OM=Date.now(),Rb.trace("Log rotate enabled, maxSize:",t,"interval:",r),G6=setInterval(async()=>{if(l){let f;f=await sm.stat(e.path),f.size>=l&&(d=await q6(e.path,i))}if(u&&Date.now()-OM>=u&&(d=await q6(e.path,i),OM=Date.now()),n||c){let f=H6(n??"1M")/(1+c);c=0;let m=await sm.readdir(i);for(let p of m)try{let h=await sm.stat(PM.join(i,p));Date.now()-h.mtimeMs>f&&await sm.unlink(PM.join(i,p))}catch(h){Rb.error("Error trying to remove log",p,h)}}},o??xwe).unref(),{end(){clearInterval(G6)},getLastRotatedLogPath(){return d}}}a(kwe,"logRotator");async function q6(e,t){let r=$6.get(Mwe.LOGGING_ROTATION_COMPRESS),n=PM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await sm.rename(e,n),r&&(e=n,n+=".gz",await vwe(Cwe(e),Pwe(),Owe(n)),await sm.unlink(e)),Rb.closeLogFile(),Rb.notify(`hdb.log rotated, old log moved to ${n}`),n}a(q6,"moveLogFile")});var J6={};ye(J6,{RootConfigWatcher:()=>LM});var Y6,W6,j6,bb,z6,LM,Q6=se(()=>{Y6=b(require("chokidar")),W6=require("node:fs/promises"),j6=b(gt()),bb=require("node:stream"),z6=require("yaml"),LM=class extends bb.EventEmitter{static{a(this,"RootConfigWatcher")}#e;#t;#n;ready;constructor(){super(),this.#e=(0,j6.getConfigFilePath)(),this.ready=(0,bb.once)(this,"ready"),this.#t=Y6.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,W6.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,z6.parse)(t);if(!this.#n){this.#n=r,this.emit("ready",this.#n);return}this.emit("change",this.#n=r)}).catch(t=>{})}close(){return this.#t.close(),this.#n=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#n}}});var Q=M((SVe,Lb)=>{"use strict";var Fa=require("fs-extra"),{workerData:Hwe,threadId:Gwe,isMainThread:nX}=require("worker_threads"),JE=require("path"),sX=require("yaml"),iX=require("properties-reader"),Wr=(G(),v(j)),X6=tl(),qwe=require("os"),{PACKAGE_ROOT:kM}=yt(),{_assignPackageExport:$we}=ai(),{Console:Vwe}=require("console"),vM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),Z6=new Map,{join:ka}=JE,eX=1e4,fr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Kwe={STDOUT:"stdOut",STDERR:"stdErr"},gVe=ka(kM,"logs"),Ywe=ka(kM,"config/yaml/",Wr.HDB_DEFAULT_CONFIG_FILE),Wwe=1e4,QE,XE,Ab,oX,vo,MM,DM,wb,xt,es,Nb,Cb,im,zE,jE;function Ib(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=JE.dirname(n)):t.root?n=ka(t.root,MM):(n=xt.path,t.root||(t.root=JE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=fr[t.level]??xt?.level??fr.info,aX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(xt.path===e.path&&r)}a(Ib,"updateLogger");function aX(e){let t=e.conditional??(e.conditional={});t.notify=fr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=fr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=fr.error>=e.level?e.error.bind(e):void 0,t.warn=fr.warn>=e.level?e.warn.bind(e):void 0,t.info=fr.info>=e.level?e.info.bind(e):void 0,t.debug=fr.debug>=e.level?e.debug.bind(e):void 0,t.trace=fr.trace>=e.level?e.trace.bind(e):void 0}a(aX,"updateConditional");async function UM(){jE||(jE=new mNe,await jE.ready,jE.on("change",UM));let e=jE.config,t=e.logging??{};Ib(xt,t),wb=xt.path,QE=t.console??!1,t.external&&Ib(es,t.external);for(let r in e){let n=e[r];n.logging?Ib(xt.forComponent(r),n.logging,r):xt.hasComponent(r)&&Ib(xt.forComponent(r),t,r)}}a(UM,"updateLogSettings");var xM=class extends Vwe{static{a(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){On="trace",this.level<=fr.trace&&super.info(...t),On="info"}debug(...t){On="debug",this.level<=fr.debug&&super.info(...t),On="info"}info(...t){On="info",this.level<=fr.info&&super.info(...t),On="info"}warn(...t){On="warn",this.level<=fr.warn&&super.warn(...t),On="info"}error(...t){On="error",this.level<=fr.error&&super.error(...t),On="info"}fatal(...t){im=!0;try{On="fatal",this.level<=fr.fatal&&super.error(...t),On="info"}finally{im=!1}}notify(...t){im=!0;try{On="notify",this.level<=fr.notify&&super.info(...t),On="info"}finally{im=!1}}withTag(t){return lX(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};zE===void 0&&cX();Lb.exports={notify:rNe,fatal:nNe,error:FM,warn:sNe,info:Zwe,debug:tNe,trace:eNe,logLevel:vo,loggerWithTag:lX,suppressLogging:Qwe,initLogSettings:cX,logCustomLevel:iNe,closeLogFile:uX,createLogger:Pb,logsAtLevel:zwe,getLogFilePath:a(()=>wb,"getLogFilePath"),forComponent:a(e=>xt.forComponent(e),"forComponent"),setMainLogger:dNe,setLogLevel:aNe,OUTPUTS:Kwe,AuthAuditLog:fNe,start:UM,startOnMainThread:UM,errorToString:uNe,disableStdio:jwe};function jwe(){vM=a(function(){},"nativeStdWrite")}a(jwe,"disableStdio");Lb.exports.externalLogger={notify(...e){es.notify(...e)},fatal(...e){es.fatal(...e)},error(...e){es.error(...e)},warn(...e){es.warn(...e)},info(...e){es.info(...e)},debug(...e){es.debug(...e)},trace(...e){es.trace(...e)},withTag(e){return es.withTag(e)},loggerWithTag(e){return es.withTag(e)}};$we("logger",Lb.exports.externalLogger);function zwe(e){return fr[vo]<=fr[e]}a(zwe,"logsAtLevel");function cX(e=!1){try{if(zE===void 0||e){uX();let t=oNe(),r=X6(["ROOTPATH"]);try{zE=iX(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Fa.pathExistsSync(ka(r.ROOTPATH,Wr.HDB_CONFIG_FILE)))throw s}let n;if({level:vo,configLogPath:DM,toFile:XE,logConsole:QE,colorMode:oX,rotation:n,toStream:Ab}=cNe(r.ROOTPATH?ka(r.ROOTPATH,Wr.HDB_CONFIG_FILE):zE.get("settings_path")),MM=Wr.LOG_NAMES.HDB,wb=ka(DM,MM),xt=Pb({path:wb,level:vo,stdStreams:Ab,rotation:n}),es=xt.forComponent("external"),es.tag=null,nX)try{require("segfault-handler").registerHandler(ka(DM,"crash.log"))}catch{}}}catch(t){if(zE=void 0,t.code===Wr.NODE_ERROR_CODES.ENOENT||t.code===Wr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=X6(Object.keys(Wr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=Wr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let o=r[s];if(i===Wr.CONFIG_PARAMS.LOGGING_LEVEL){vo=o;continue}i===Wr.CONFIG_PARAMS.LOGGING_CONSOLE&&(QE=i)}let{defaultLevel:n}=lNe();XE=!1,Ab=!0,vo=vo===void 0?n:vo,xt=Pb({level:vo}),es=xt.forComponent("external"),es.tag=null;return}throw FM("Error initializing log settings"),FM(t),t}process.env.DEV_MODE&&(Ab=!0),Jwe()}a(cX,"initLogSettings");var zc=!0;function Jwe(){XE&&(process.stdout.write=function(e){return typeof e=="string"&&zc&&QE&&(e=e.toString(),e[e.length-1]===`
132
132
  `&&(e=e.slice(0,-1)),Cb(e)),vM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&zc&&QE&&(e[e.length-1]===`
133
133
  `&&(e=e.slice(0,-1)),Cb(e)),vM.apply(process.stderr,arguments)})}a(Jwe,"stdioLogging");function lX(e,t,r=xt){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<=fr[i]?function(...o){Ob=e;try{return s.call(r,...o)}finally{Ob=void 0}}:null}a(n,"logWithTag")}a(lX,"loggerWithTag");function Qwe(e){try{zc=!1,e()}finally{zc=!0}}a(Qwe,"suppressLogging");var Xwe=Hwe?.name?.replace(/ /g,"-")||"main",On="info",BM,Ob;function Pb({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:o}){t||(t="info");let c=fr[t],l;function u(p){if(XE)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),zc=!1;try{process.stdout.write(p)}finally{zc=!0}}else f(p);else r&&process.stdout.write(p)}a(u,"logStdOut");function d(p){if(XE){if(f(p),r){zc=!1;try{process.stderr.write(p)}finally{zc=!0}}}else r&&process.stderr.write(p)}a(d,"logStdErr");let f=e&&rX(e,n,s);function m(p){return{write(h){let E=[On];E.unshift(BM||Xwe+"/"+Gwe),Ob&&E.push(Ob),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(a(m,"logPrepend"),s&&(Cb=f),l=new xM({stdout:m(i??u),stderr:m(i??d),colorMode:r&&oX||!1},c),aX(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=rX(e,l.rotation,s),s&&(Cb=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!o){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=Pb({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}a(Pb,"createLogger");var tX=100;function rX(e,t,r){let n=Z6.get(e),s,i,o,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,Z6.set(e,n)),nX&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=K6();try{n.rotator=h({logger:n,...t})}catch(E){n("Error initializing log rotator",E)}},100));let u=0;return n;function d(h){u++;let E=`${new Date().toISOString()} ${h}${h.endsWith(`
134
134
  `)?"":`
135
135
  `}`;c?(c.length<eX?c.push(E):c.length===eX&&c.push(`Maximum log buffer rate reached, logs will be throttled
136
- `),im&&(clearTimeout(o),f())):im||l<performance.now()+tX?f(E):(l=Math.min(l,performance.now()+tX),c=[E],o=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Fa.appendFileSync(s,c?c.join(""):h);let _=performance.now();l=Math.max(_,l)+(_-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{Fa.closeSync(s)}catch{}s=null,r&&(Nb=null)}function p(h){if(!s){try{s=Fa.openSync(e,"a"),r&&(Nb=s)}catch(E){if(E.code==="ENOENT"&&!h)return Fa.mkdirpSync(JE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},Wwe).unref()}}}a(rX,"getFileLogger");function Zwe(...e){xt.info(...e)}a(Zwe,"info");function eNe(...e){xt.trace(...e)}a(eNe,"trace");function FM(...e){xt.error(...e)}a(FM,"error");function tNe(...e){xt.debug(...e)}a(tNe,"debug");function rNe(...e){xt.notify(...e)}a(rNe,"notify");function nNe(...e){xt.fatal(...e)}a(nNe,"fatal");function sNe(...e){xt.warn(...e)}a(sNe,"warn");function iNe(e,t,r,...n){BM=r.service_name;try{xt[e](...n)}finally{BM=void 0}}a(iNe,"logCustomLevel");function oNe(){let e;try{e=qwe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ka(e,Wr.HDB_HOME_DIR_NAME,Wr.BOOT_PROPS_FILE_NAME);return Fa.existsSync(t)||(t=ka(kM,"utility/hdb_boot_properties.file")),t}a(oNe,"getPropsFilePath");function aNe(e){Do=e}a(aNe,"setLogLevel");function cNe(e){try{if(e.includes("config/settings.js")){let u=iX(e);return{level:u.get(Wr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:JE.dirname(u.get(Wr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:u.get(Wr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:u.get(Wr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=sX.parseDocument(Fa.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),o=t.getIn(["logging","console"]),c=t.getIn(["logging","colors"])??!0,l=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:o,colorMode:c,rotation:l}}catch(t){if(t.code===Wr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(cNe,"getLogConfig");function lNe(){try{let e=sX.parseDocument(Fa.readFileSync(Ywe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(lNe,"getDefaultConfig");function uNe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}a(uNe,"errorToString");function dNe(e){xt=e}a(dNe,"setMainLogger");function uX(){try{Fa.closeSync(Nb)}catch{}Nb=null}a(uX,"closeLogFile");function fNe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(fNe,"AuthAuditLog");var{RootConfigWatcher:mNe}=(Q6(),v(J6))});var fe=M((pX,hX)=>{"use strict";var HM=require("fs-extra"),Iu=require("path"),dX=require("os"),pNe=require("properties-reader"),e_=Q(),ZE=ae(),qe=(G(),v(j)),Db=gt(),hNe="Error initializing environment manager",vb="BOOT_PROPS_FILE_PATH",fX=!1,ENe={[qe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ha={};Object.assign(pX,hX.exports={BOOT_PROPS_FILE_PATH:vb,getHdbBasePath:_Ne,setHdbBasePath:gNe,get:mX,initSync:TNe,setProperty:rt,initTestEnvironment:yNe});function _Ne(){return Ha[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(_Ne,"getHdbBasePath");function gNe(e){Ha[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(gNe,"setHdbBasePath");function mX(e){let t=Db.getConfigValue(e);return t===void 0?Ha[e]:t}a(mX,"get");function rt(e,t){ENe[e]&&(Ha[e]=t),Db.updateConfigObject(e,t)}a(rt,"setProperty");function SNe(){let e;try{e=ZE.getPropsFilePath(),HM.accessSync(e,HM.constants.F_OK|HM.constants.R_OK),fX=!0;let t=pNe(e);return Ha[qe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(qe.HDB_SETTINGS_NAMES.INSTALL_USER),Ha[qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ha[vb]=e,!0}catch{return e_.trace(`Environment manager found no properties file at ${e}`),!1}}a(SNe,"doesPropFileExist");function TNe(e=!1){try{(fX||SNe()||ZE.noBootFile()||e)&&(Db.initConfig(e),Ha[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Db.getConfigValue(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){e_.error(hNe),e_.error(t),console.error(t),process.exit(1)}}a(TNe,"initSync");function yNe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Iu.join(__dirname,"../../","unitTests");Ha[vb]=Iu.join(l,"hdb_boot_properties.file"),rt(qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Iu.join(l,"settings.test")),rt(qe.HDB_SETTINGS_NAMES.INSTALL_USER,dX.userInfo()?dX.userInfo().username:void 0),rt(qe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),rt(qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Iu.join(l,"envDir","log")),rt(qe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),rt(qe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),rt(qe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),rt(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Iu.join(l,"envDir")),rt(qe.CONFIG_PARAMS.STORAGE_PATH,Iu.join(l,"envDir")),s&&(rt(qe.CONFIG_PARAMS.HTTP_SECUREPORT,mX(qe.CONFIG_PARAMS.HTTP_PORT)),rt(qe.CONFIG_PARAMS.HTTP_PORT,null)),rt(qe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),rt(qe.CONFIG_PARAMS.HTTP_PORT,9926),rt(qe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),rt(qe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),rt(qe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ZE.isEmpty(i)?!1:i),rt(qe.CONFIG_PARAMS.HTTP_CORS,ZE.isEmpty(i)?!1:i),rt(qe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),rt(qe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),rt(qe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),rt(qe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),rt(qe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Iu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),rt(qe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ZE.isEmpty(c)?!1:c),o&&(rt("CORS_ACCESSLIST",o),rt(qe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(rt(qe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),rt(qe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(rt(qe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),rt(qe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(rt(qe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),rt(qe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${vb}. Please check your boot props and settings files`;e_.fatal(r),e_.error(t)}}a(yNe,"initTestEnvironment")});var Sr=M((NVe,DX)=>{"use strict";var jr=fe();jr.initSync();var RNe=require("fs-extra"),bNe=require("semver"),n_=require("path"),{monotonicFactory:ANe}=require("ulidx"),_X=ANe(),INe=require("util"),gX=require("child_process"),wNe=INe.promisify(gX.exec),NNe=gX.spawn,mn=Pt(),nt=(G(),v(j)),{packageJson:CNe,PACKAGE_ROOT:ONe}=yt(),Mb=ae(),ki=Q(),Ub=so(),PNe=OR(),t_=gt(),{broadcast:LNe,onMessageByType:DNe,getWorkerIndex:vNe}=st(),{isMainThread:SX}=require("worker_threads"),{Encoder:MNe,decode:VM}=require("msgpackr"),TX=new MNe,{isEmpty:Ou}=Mb,yX=(Es(),v(co)),RVe=48*36e11;SX&&DNe(nt.ITC_EVENT_TYPES.RESTART,()=>{Pn=void 0,Cu=void 0});var{connect:UNe,StorageType:xNe,RetentionPolicy:BNe,AckPolicy:KM,DeliverPolicy:YM,DiscardPolicy:FNe,NatsConnection:bVe,JetStreamManager:AVe,JetStreamClient:IVe,StringCodec:wVe,JSONCodec:kNe,createInbox:WM,headers:HNe,ErrorCode:EX}=require("nats"),{recordAction:GNe}=(is(),v(dg)),{encodeBlobsAsBuffers:qNe}=(ss(),v(J_)),RX=kNe(),$Ne="clustering",VNe=CNe.engines[mn.NATS_SERVER_NAME],KNe=n_.join(ONe,"dependencies"),$M=n_.join(KNe,`${process.platform}-${process.arch}`,mn.NATS_BINARY_NAME),GM,qM,r_,wu,Nu;DX.exports={runCommand:bX,checkNATSServerInstalled:YNe,createConnection:jM,getConnection:s_,getJetStreamManager:i_,getJetStream:IX,getNATSReferences:vo,getServerList:jNe,createLocalStream:zM,listStreams:wX,deleteLocalStream:zNe,getServerConfig:om,listRemoteStreams:JNe,viewStream:QNe,viewStreamIterator:XNe,publishToStream:ZNe,request:rCe,reloadNATS:JM,reloadNATSHub:nCe,reloadNATSLeaf:sCe,extractServerName:tCe,requestErrorHandler:iCe,createLocalTableStream:PX,createTableStreams:cCe,purgeTableStream:LX,purgeSchemaTableStreams:lCe,getStreamInfo:uCe,updateLocalStreams:fCe,closeConnection:WNe,getJsmServerName:xb,addNatsMsgHeader:NX,clearClientCache:AX,updateRemoteConsumer:oCe,createConsumer:CX,updateConsumerIterator:aCe};async function bX(e,t=void 0){let{stdout:r,stderr:n}=await wNe(e,{cwd:t});if(n)throw new Error(n.replace(`
136
+ `),im&&(clearTimeout(o),f())):im||l<performance.now()+tX?f(E):(l=Math.min(l,performance.now()+tX),c=[E],o=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Fa.appendFileSync(s,c?c.join(""):h);let _=performance.now();l=Math.max(_,l)+(_-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{Fa.closeSync(s)}catch{}s=null,r&&(Nb=null)}function p(h){if(!s){try{s=Fa.openSync(e,"a"),r&&(Nb=s)}catch(E){if(E.code==="ENOENT"&&!h)return Fa.mkdirpSync(JE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},Wwe).unref()}}}a(rX,"getFileLogger");function Zwe(...e){xt.info(...e)}a(Zwe,"info");function eNe(...e){xt.trace(...e)}a(eNe,"trace");function FM(...e){xt.error(...e)}a(FM,"error");function tNe(...e){xt.debug(...e)}a(tNe,"debug");function rNe(...e){xt.notify(...e)}a(rNe,"notify");function nNe(...e){xt.fatal(...e)}a(nNe,"fatal");function sNe(...e){xt.warn(...e)}a(sNe,"warn");function iNe(e,t,r,...n){BM=r.service_name;try{xt[e](...n)}finally{BM=void 0}}a(iNe,"logCustomLevel");function oNe(){let e;try{e=qwe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ka(e,Wr.HDB_HOME_DIR_NAME,Wr.BOOT_PROPS_FILE_NAME);return Fa.existsSync(t)||(t=ka(kM,"utility/hdb_boot_properties.file")),t}a(oNe,"getPropsFilePath");function aNe(e){vo=e}a(aNe,"setLogLevel");function cNe(e){try{if(e.includes("config/settings.js")){let u=iX(e);return{level:u.get(Wr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:JE.dirname(u.get(Wr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:u.get(Wr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:u.get(Wr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=sX.parseDocument(Fa.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),o=t.getIn(["logging","console"]),c=t.getIn(["logging","colors"])??!0,l=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:o,colorMode:c,rotation:l}}catch(t){if(t.code===Wr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(cNe,"getLogConfig");function lNe(){try{let e=sX.parseDocument(Fa.readFileSync(Ywe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(lNe,"getDefaultConfig");function uNe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}a(uNe,"errorToString");function dNe(e){xt=e}a(dNe,"setMainLogger");function uX(){try{Fa.closeSync(Nb)}catch{}Nb=null}a(uX,"closeLogFile");function fNe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(fNe,"AuthAuditLog");var{RootConfigWatcher:mNe}=(Q6(),v(J6))});var fe=M((pX,hX)=>{"use strict";var HM=require("fs-extra"),Iu=require("path"),dX=require("os"),pNe=require("properties-reader"),e_=Q(),ZE=ae(),qe=(G(),v(j)),Db=gt(),hNe="Error initializing environment manager",vb="BOOT_PROPS_FILE_PATH",fX=!1,ENe={[qe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ha={};Object.assign(pX,hX.exports={BOOT_PROPS_FILE_PATH:vb,getHdbBasePath:_Ne,setHdbBasePath:gNe,get:mX,initSync:TNe,setProperty:rt,initTestEnvironment:yNe});function _Ne(){return Ha[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(_Ne,"getHdbBasePath");function gNe(e){Ha[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(gNe,"setHdbBasePath");function mX(e){let t=Db.getConfigValue(e);return t===void 0?Ha[e]:t}a(mX,"get");function rt(e,t){ENe[e]&&(Ha[e]=t),Db.updateConfigObject(e,t)}a(rt,"setProperty");function SNe(){let e;try{e=ZE.getPropsFilePath(),HM.accessSync(e,HM.constants.F_OK|HM.constants.R_OK),fX=!0;let t=pNe(e);return Ha[qe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(qe.HDB_SETTINGS_NAMES.INSTALL_USER),Ha[qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ha[vb]=e,!0}catch{return e_.trace(`Environment manager found no properties file at ${e}`),!1}}a(SNe,"doesPropFileExist");function TNe(e=!1){try{(fX||SNe()||ZE.noBootFile()||e)&&(Db.initConfig(e),Ha[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Db.getConfigValue(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){e_.error(hNe),e_.error(t),console.error(t),process.exit(1)}}a(TNe,"initSync");function yNe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Iu.join(__dirname,"../../","unitTests");Ha[vb]=Iu.join(l,"hdb_boot_properties.file"),rt(qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Iu.join(l,"settings.test")),rt(qe.HDB_SETTINGS_NAMES.INSTALL_USER,dX.userInfo()?dX.userInfo().username:void 0),rt(qe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),rt(qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Iu.join(l,"envDir","log")),rt(qe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),rt(qe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),rt(qe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),rt(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Iu.join(l,"envDir")),rt(qe.CONFIG_PARAMS.STORAGE_PATH,Iu.join(l,"envDir")),s&&(rt(qe.CONFIG_PARAMS.HTTP_SECUREPORT,mX(qe.CONFIG_PARAMS.HTTP_PORT)),rt(qe.CONFIG_PARAMS.HTTP_PORT,null)),rt(qe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),rt(qe.CONFIG_PARAMS.HTTP_PORT,9926),rt(qe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),rt(qe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),rt(qe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ZE.isEmpty(i)?!1:i),rt(qe.CONFIG_PARAMS.HTTP_CORS,ZE.isEmpty(i)?!1:i),rt(qe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),rt(qe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),rt(qe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),rt(qe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),rt(qe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Iu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),rt(qe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ZE.isEmpty(c)?!1:c),o&&(rt("CORS_ACCESSLIST",o),rt(qe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(rt(qe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),rt(qe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(rt(qe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),rt(qe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(rt(qe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),rt(qe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${vb}. Please check your boot props and settings files`;e_.fatal(r),e_.error(t)}}a(yNe,"initTestEnvironment")});var Sr=M((NVe,DX)=>{"use strict";var jr=fe();jr.initSync();var RNe=require("fs-extra"),bNe=require("semver"),n_=require("path"),{monotonicFactory:ANe}=require("ulidx"),_X=ANe(),INe=require("util"),gX=require("child_process"),wNe=INe.promisify(gX.exec),NNe=gX.spawn,mn=Pt(),nt=(G(),v(j)),{packageJson:CNe,PACKAGE_ROOT:ONe}=yt(),Mb=ae(),ki=Q(),Ub=so(),PNe=OR(),t_=gt(),{broadcast:LNe,onMessageByType:DNe,getWorkerIndex:vNe}=st(),{isMainThread:SX}=require("worker_threads"),{Encoder:MNe,decode:VM}=require("msgpackr"),TX=new MNe,{isEmpty:Ou}=Mb,yX=(Es(),v(co)),RVe=48*36e11;SX&&DNe(nt.ITC_EVENT_TYPES.RESTART,()=>{Pn=void 0,Cu=void 0});var{connect:UNe,StorageType:xNe,RetentionPolicy:BNe,AckPolicy:KM,DeliverPolicy:YM,DiscardPolicy:FNe,NatsConnection:bVe,JetStreamManager:AVe,JetStreamClient:IVe,StringCodec:wVe,JSONCodec:kNe,createInbox:WM,headers:HNe,ErrorCode:EX}=require("nats"),{recordAction:GNe}=(is(),v(dg)),{encodeBlobsAsBuffers:qNe}=(ss(),v(J_)),RX=kNe(),$Ne="clustering",VNe=CNe.engines[mn.NATS_SERVER_NAME],KNe=n_.join(ONe,"dependencies"),$M=n_.join(KNe,`${process.platform}-${process.arch}`,mn.NATS_BINARY_NAME),GM,qM,r_,wu,Nu;DX.exports={runCommand:bX,checkNATSServerInstalled:YNe,createConnection:jM,getConnection:s_,getJetStreamManager:i_,getJetStream:IX,getNATSReferences:Mo,getServerList:jNe,createLocalStream:zM,listStreams:wX,deleteLocalStream:zNe,getServerConfig:om,listRemoteStreams:JNe,viewStream:QNe,viewStreamIterator:XNe,publishToStream:ZNe,request:rCe,reloadNATS:JM,reloadNATSHub:nCe,reloadNATSLeaf:sCe,extractServerName:tCe,requestErrorHandler:iCe,createLocalTableStream:PX,createTableStreams:cCe,purgeTableStream:LX,purgeSchemaTableStreams:lCe,getStreamInfo:uCe,updateLocalStreams:fCe,closeConnection:WNe,getJsmServerName:xb,addNatsMsgHeader:NX,clearClientCache:AX,updateRemoteConsumer:oCe,createConsumer:CX,updateConsumerIterator:aCe};async function bX(e,t=void 0){let{stdout:r,stderr:n}=await wNe(e,{cwd:t});if(n)throw new Error(n.replace(`
137
137
  `,""));return r.replace(`
138
- `,"")}a(bX,"runCommand");async function YNe(){try{await RNe.access($M)}catch{return!1}let e=await bX(`${$M} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return bNe.eq(t,VNe)}a(YNe,"checkNATSServerInstalled");async function jM(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await yX.getClusterUser();if(Ou(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}ki.trace("create nats connection called");let i=await UNe({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:jr.get(nt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:jr.get(nt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:jr.get(nt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),ki.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&ki.error("Error with Nats client connection, connection closed",o),i===Pn&&AX()}),i}a(jM,"createConnection");function AX(){Pn=void 0,wu=void 0,Nu=void 0,Cu=void 0}a(AX,"clearClientCache");async function WNe(){Pn&&(await Pn.drain(),Pn=void 0,wu=void 0,Nu=void 0,Cu=void 0)}a(WNe,"closeConnection");var Pn,Cu;async function s_(){return Cu||(Cu=jM(jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Pn=await Cu),Pn||Cu}a(s_,"getConnection");async function i_(){if(wu)return wu;Ou(Pn)&&await s_();let{domain:e}=om(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ou(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return wu=await Pn.jetstreamManager({domain:e,timeout:6e4}),wu}a(i_,"getJetStreamManager");async function IX(){if(Nu)return Nu;Ou(Pn)&&await s_();let{domain:e}=om(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ou(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Nu=Pn.jetstream({domain:e,timeout:6e4}),Nu}a(IX,"getJetStream");async function vo(){let e=Pn||await s_(),t=wu||await i_(),r=Nu||await IX();return{connection:e,jsm:t,js:r}}a(vo,"getNATSReferences");async function jNe(e){let t=jr.get(nt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await yX.getClusterUser(),s=await jM(t,r,n),i=WM(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=RX.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 Mb.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(jNe,"getServerList");async function zM(e,t){let{jsm:r}=await vo(),n=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:xNe.File,retention:BNe.Limits,subjects:t,discard:FNe.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(zM,"createLocalStream");async function wX(){let{jsm:e}=await vo(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(wX,"listStreams");async function zNe(e){let{jsm:t}=await vo();await t.streams.delete(e)}a(zNe,"deleteLocalStream");async function JNe(e){let{connection:t}=await vo(),r=[],n=WM(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(RX.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(JNe,"listRemoteStreams");async function QNe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await vo(),i=_X(),o={durable_name:i,ack_policy:KM.Explicit};t&&(o.deliver_policy=YM.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=VM(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(mn.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(QNe,"viewStream");async function*XNe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await vo(),i=_X(),o={durable_name:i,ack_policy:KM.Explicit};t&&(o.deliver_policy=YM.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=VM(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(mn.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}a(XNe,"viewStreamIterator");async function ZNe(e,t,r,n){ki.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=NX(n,r);let{js:s}=await vo(),i=await xb(),o=`${e}.${i}`,c=await qNe(()=>n instanceof Uint8Array?n:TX.encode(n));try{ki.trace(`publishToStream publishing to subject: ${o}`),GNe(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return OX(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){ki.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await zM(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(ZNe,"publishToStream");function NX(e,t){t===void 0&&(t=HNe());let r=jr.get(nt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(mn.MSG_HEADERS.ORIGIN)&&r&&t.append(mn.MSG_HEADERS.ORIGIN,r),t}a(NX,"addNatsMsgHeader");function om(e){e=e.toLowerCase();let t=n_.join(jr.get(nt.CONFIG_PARAMS.ROOTPATH),$Ne);if(e===nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ou(qM)&&(qM={port:t_.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:t_.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_NODENAME)+mn.SERVER_SUFFIX.HUB,config_file:mn.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:n_.join(t,mn.PID_FILES.HUB),hdbNatsPath:t}),qM;if(e===nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ou(GM)&&(GM={port:t_.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:t_.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_NODENAME)+mn.SERVER_SUFFIX.LEAF,config_file:mn.NATS_CONFIG_FILES.LEAF_SERVER,domain:t_.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_NODENAME)+mn.SERVER_SUFFIX.LEAF,pid_file_path:n_.join(t,mn.PID_FILES.LEAF),hdbNatsPath:t}),GM;ki.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(om,"getServerConfig");async function CX(e,t,r,n){try{await e.consumers.add(t,{ack_policy:KM.Explicit,durable_name:r,deliver_policy:YM.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(CX,"createConsumer");async function eCe(e,t,r){await e.consumers.delete(t,r)}a(eCe,"removeConsumer");function tCe(e){return e.split(".")[1]}a(tCe,"extractServerName");async function rCe(e,t,r=6e4,n=WM()){if(!Mb.isObject(t))throw new Error("data param must be an object");let s=TX.encode(t),{connection:i}=await vo(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return VM(c.data)}a(rCe,"request");function JM(e){return new Promise(async(t,r)=>{let n=NNe($M,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(JM,"reloadNATS");async function nCe(){let{pid_file_path:e}=om(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await JM(e)}a(nCe,"reloadNATSHub");async function sCe(){let{pid_file_path:e}=om(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await JM(e)}a(sCe,"reloadNATSLeaf");function iCe(e,t,r){let n;switch(e.code){case EX.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case EX.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(iCe,"requestErrorHandler");async function oCe(e,t){let r=t+mn.SERVER_SUFFIX.LEAF,{connection:n}=await vo(),{jsm:s}=await pCe(r),{schema:i,table:o}=e,c=Ub.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await OX(async()=>{if(e.subscribe===!0)await CX(s,c,n.info.server_name,l);else try{await eCe(s,c,n.info.server_name)}catch(u){ki.trace(u)}})}a(oCe,"updateRemoteConsumer");async function aCe(e,t,r,n){let s=Ub.createNatsTableStreamName(e,t),i=r+mn.SERVER_SUFFIX.LEAF,o={type:nt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!SX&&vNe()<jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=JR();await c(o)}await LNe(o),n==="stop"&&await Mb.asyncSetTimeout(1e3)}a(aCe,"updateConsumerIterator");function OX(e){return PNe.writeTransaction(nt.SYSTEM_SCHEMA_NAME,nt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(OX,"exclusiveLock");async function PX(e,t){let r=Ub.createNatsTableStreamName(e,t),n=await xb(),s=dCe(e,t,n);await zM(r,[s])}a(PX,"createLocalTableStream");async function cCe(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await PX(n,s)}}a(cCe,"createTableStreams");async function LX(e,t,r=void 0){if(jr.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Ub.createNatsTableStreamName(e,t),{domain:s}=om(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await s_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")ki.warn(n);else throw n}}a(LX,"purgeTableStream");async function lCe(e,t){if(jr.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await LX(e,t[r])}a(lCe,"purgeSchemaTableStreams");async function uCe(e){return(await i_()).streams.info(e)}a(uCe,"getStreamInfo");function dCe(e,t,r){return`${mn.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(dCe,"createSubjectName");async function xb(){if(r_)return r_;if(r_=(await i_())?.nc?.info?.server_name,r_===void 0)throw new Error("Unable to get jetstream manager server name");return r_}a(xb,"getJsmServerName");async function fCe(){let e=await i_(),t=await xb(),r=await wX();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=mCe(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");ki.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(fCe,"updateLocalStreams");function mCe(e){let{config:t}=e,r=!1,n=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(mCe,"updateStreamLimits");async function pCe(e){let t,r;try{t=await Pn.jetstream({domain:e}),r=await Pn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw ki.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(pCe,"connectToRemoteJS")});var JR=M((DVe,VX)=>{"use strict";var{decode:hCe}=require("msgpackr"),{isMainThread:OVe,parentPort:PVe,threadId:LVe}=require("worker_threads"),kb=Sr(),am=Pt(),ZM=(G(),v(j)),Ln=Q(),XM=fe(),ECe=(G(),v(j)),{onMessageByType:_Ce}=st(),xX=so(),{recordAction:vX,recordActionBinary:gCe}=(is(),v(dg)),{publishToStream:SCe}=kb,{ConsumerEvents:MX}=require("nats"),TCe=gn(),{promisify:yCe}=require("util"),{decodeBlobsWithWrites:RCe}=(ss(),v(J_)),BX=yCe(setTimeout),Hb=1e4,Gb,Fb,bCe,ACe,FX,o_=new Map,cm=new Map;VX.exports={initialize:kX,ingestConsumer:eU,setSubscription:ICe,setIgnoreOrigin:CCe,getDatabaseSubscriptions:NCe,updateConsumer:HX};async function kX(){_Ce(ZM.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await HX(n)}),FX=!0,Ln.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await kb.getNATSReferences();Gb=e,Fb=e.info.server_name,bCe=t,ACe=r}a(kX,"initialize");async function HX(e){if(e.status==="start"){let{js:t,jsm:r}=await GX(e.node_domain_name);eU(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=o_.get(e.stream_name+e.node_domain_name);t&&(Ln.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),o_.set(e.stream_name+e.node_domain_name,"close")),cm.get(e.node_domain_name)==="failed"&&cm.set(e.node_domain_name,"close")}}a(HX,"updateConsumer");var qb=new Map;function ICe(e,t,r){let n=qb.get(e);n||qb.set(e,n=new Map),n.set(t,r),FX||kX().then(wCe)}a(ICe,"setSubscription");async function wCe(){let e=await TCe.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+am.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await GX(r),!n))break;let{schema:o,table:c}=i,l=xX.createNatsTableStreamName(o,c);eU(l,n,s,r)}}}a(wCe,"accessConsumers");async function GX(e){let t,r,n=1;for(;!r;)try{t=await Gb.jetstream({domain:e}),r=await Gb.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(cm.get(e)==="close")break;cm.set(e,"failed"),n%10===1&&Ln.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Hb?n++*100:Hb;await BX(i)}return{js:t,jsm:r}}a(GX,"connectToRemoteJS");function NCe(){return qb}a(NCe,"getDatabaseSubscriptions");var qX;function CCe(e){qX=e}a(CCe,"setIgnoreOrigin");var $X=100,UX=new Array($X),Bb=0;async function eU(e,t,r,n){let{connection:s}=await kb.getNATSReferences();Gb=s,Fb=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Fb),Ln.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(cm.get(n)==="close")break;o%10===1&&Ln.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Ln.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await kb.createConsumer(r,e,Fb,new Date(Date.now()).toISOString()));let d=o++*100<Hb?o++*100:Hb;await BX(d)}let c=!1,l;for(;!c;){if(o_.get(e+n)==="close"||cm.get(n)==="close"){o_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:XM.get(ZM.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),o_.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===MX.ConsumerDeleted&&(await l.close(),c=!0),d.type===MX.HeartbeatsMissed){let f=d.data;Ln.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(Ln.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await UX[Bb],UX[Bb]=OCe(d).catch(f=>{Ln.error(f)}),++Bb>=$X&&(Bb=0)}catch(d){d.message==="consumer deleted"?(Ln.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Ln.error("Error consuming clustering ingest, restarting consumer",d)}}}a(eU,"ingestConsumer");async function OCe(e){let t;await RCe(()=>{t=hCe(e.data)}),vX(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Ln.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=XM.get(ZM.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(am.MSG_HEADERS.TRANSACTED_NODES)&&r.values(am.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(am.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!qX),gCe(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(am.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;Ln.trace("processing message:",o,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),Ln.trace(`messageProcessor nats msg id: ${e.headers.get(am.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:_,user:R,node_name:S}=m||{},y=qb.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:QM(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:_,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map((H,X)=>({type:QM(o),value:H,expiresAt:p,id:f?.[X],table:u}));for(;l;)I.push({type:QM(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:I,table:u,timestamp:_,onCommit:h,user:R,nodeName:S})}XM.get(ECe.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&SCe(e.subject.split(".").slice(0,-1).join("."),xX.createNatsTableStreamName(c,u),e.headers,e.data),await E;let w=Date.now()-_;_&&vX(w,"replication-latency",e.subject,o,"ingest")}catch(o){Ln.error(o)}e.ack()}a(OCe,"messageProcessor");function QM(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(QM,"convertOperation")});var PCe=JR();(async()=>{try{await PCe.initialize()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();
138
+ `,"")}a(bX,"runCommand");async function YNe(){try{await RNe.access($M)}catch{return!1}let e=await bX(`${$M} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return bNe.eq(t,VNe)}a(YNe,"checkNATSServerInstalled");async function jM(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await yX.getClusterUser();if(Ou(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}ki.trace("create nats connection called");let i=await UNe({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:jr.get(nt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:jr.get(nt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:jr.get(nt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),ki.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&ki.error("Error with Nats client connection, connection closed",o),i===Pn&&AX()}),i}a(jM,"createConnection");function AX(){Pn=void 0,wu=void 0,Nu=void 0,Cu=void 0}a(AX,"clearClientCache");async function WNe(){Pn&&(await Pn.drain(),Pn=void 0,wu=void 0,Nu=void 0,Cu=void 0)}a(WNe,"closeConnection");var Pn,Cu;async function s_(){return Cu||(Cu=jM(jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Pn=await Cu),Pn||Cu}a(s_,"getConnection");async function i_(){if(wu)return wu;Ou(Pn)&&await s_();let{domain:e}=om(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ou(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return wu=await Pn.jetstreamManager({domain:e,timeout:6e4}),wu}a(i_,"getJetStreamManager");async function IX(){if(Nu)return Nu;Ou(Pn)&&await s_();let{domain:e}=om(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ou(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Nu=Pn.jetstream({domain:e,timeout:6e4}),Nu}a(IX,"getJetStream");async function Mo(){let e=Pn||await s_(),t=wu||await i_(),r=Nu||await IX();return{connection:e,jsm:t,js:r}}a(Mo,"getNATSReferences");async function jNe(e){let t=jr.get(nt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await yX.getClusterUser(),s=await jM(t,r,n),i=WM(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=RX.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 Mb.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(jNe,"getServerList");async function zM(e,t){let{jsm:r}=await Mo(),n=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:xNe.File,retention:BNe.Limits,subjects:t,discard:FNe.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(zM,"createLocalStream");async function wX(){let{jsm:e}=await Mo(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(wX,"listStreams");async function zNe(e){let{jsm:t}=await Mo();await t.streams.delete(e)}a(zNe,"deleteLocalStream");async function JNe(e){let{connection:t}=await Mo(),r=[],n=WM(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(RX.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(JNe,"listRemoteStreams");async function QNe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Mo(),i=_X(),o={durable_name:i,ack_policy:KM.Explicit};t&&(o.deliver_policy=YM.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=VM(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(mn.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(QNe,"viewStream");async function*XNe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Mo(),i=_X(),o={durable_name:i,ack_policy:KM.Explicit};t&&(o.deliver_policy=YM.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=VM(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(mn.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}a(XNe,"viewStreamIterator");async function ZNe(e,t,r,n){ki.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=NX(n,r);let{js:s}=await Mo(),i=await xb(),o=`${e}.${i}`,c=await qNe(()=>n instanceof Uint8Array?n:TX.encode(n));try{ki.trace(`publishToStream publishing to subject: ${o}`),GNe(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return OX(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){ki.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await zM(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(ZNe,"publishToStream");function NX(e,t){t===void 0&&(t=HNe());let r=jr.get(nt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(mn.MSG_HEADERS.ORIGIN)&&r&&t.append(mn.MSG_HEADERS.ORIGIN,r),t}a(NX,"addNatsMsgHeader");function om(e){e=e.toLowerCase();let t=n_.join(jr.get(nt.CONFIG_PARAMS.ROOTPATH),$Ne);if(e===nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ou(qM)&&(qM={port:t_.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:t_.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_NODENAME)+mn.SERVER_SUFFIX.HUB,config_file:mn.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:n_.join(t,mn.PID_FILES.HUB),hdbNatsPath:t}),qM;if(e===nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ou(GM)&&(GM={port:t_.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:t_.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_NODENAME)+mn.SERVER_SUFFIX.LEAF,config_file:mn.NATS_CONFIG_FILES.LEAF_SERVER,domain:t_.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_NODENAME)+mn.SERVER_SUFFIX.LEAF,pid_file_path:n_.join(t,mn.PID_FILES.LEAF),hdbNatsPath:t}),GM;ki.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(om,"getServerConfig");async function CX(e,t,r,n){try{await e.consumers.add(t,{ack_policy:KM.Explicit,durable_name:r,deliver_policy:YM.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(CX,"createConsumer");async function eCe(e,t,r){await e.consumers.delete(t,r)}a(eCe,"removeConsumer");function tCe(e){return e.split(".")[1]}a(tCe,"extractServerName");async function rCe(e,t,r=6e4,n=WM()){if(!Mb.isObject(t))throw new Error("data param must be an object");let s=TX.encode(t),{connection:i}=await Mo(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return VM(c.data)}a(rCe,"request");function JM(e){return new Promise(async(t,r)=>{let n=NNe($M,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(JM,"reloadNATS");async function nCe(){let{pid_file_path:e}=om(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await JM(e)}a(nCe,"reloadNATSHub");async function sCe(){let{pid_file_path:e}=om(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await JM(e)}a(sCe,"reloadNATSLeaf");function iCe(e,t,r){let n;switch(e.code){case EX.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case EX.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(iCe,"requestErrorHandler");async function oCe(e,t){let r=t+mn.SERVER_SUFFIX.LEAF,{connection:n}=await Mo(),{jsm:s}=await pCe(r),{schema:i,table:o}=e,c=Ub.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await OX(async()=>{if(e.subscribe===!0)await CX(s,c,n.info.server_name,l);else try{await eCe(s,c,n.info.server_name)}catch(u){ki.trace(u)}})}a(oCe,"updateRemoteConsumer");async function aCe(e,t,r,n){let s=Ub.createNatsTableStreamName(e,t),i=r+mn.SERVER_SUFFIX.LEAF,o={type:nt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!SX&&vNe()<jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=JR();await c(o)}await LNe(o),n==="stop"&&await Mb.asyncSetTimeout(1e3)}a(aCe,"updateConsumerIterator");function OX(e){return PNe.writeTransaction(nt.SYSTEM_SCHEMA_NAME,nt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(OX,"exclusiveLock");async function PX(e,t){let r=Ub.createNatsTableStreamName(e,t),n=await xb(),s=dCe(e,t,n);await zM(r,[s])}a(PX,"createLocalTableStream");async function cCe(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await PX(n,s)}}a(cCe,"createTableStreams");async function LX(e,t,r=void 0){if(jr.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Ub.createNatsTableStreamName(e,t),{domain:s}=om(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await s_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")ki.warn(n);else throw n}}a(LX,"purgeTableStream");async function lCe(e,t){if(jr.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await LX(e,t[r])}a(lCe,"purgeSchemaTableStreams");async function uCe(e){return(await i_()).streams.info(e)}a(uCe,"getStreamInfo");function dCe(e,t,r){return`${mn.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(dCe,"createSubjectName");async function xb(){if(r_)return r_;if(r_=(await i_())?.nc?.info?.server_name,r_===void 0)throw new Error("Unable to get jetstream manager server name");return r_}a(xb,"getJsmServerName");async function fCe(){let e=await i_(),t=await xb(),r=await wX();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=mCe(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");ki.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(fCe,"updateLocalStreams");function mCe(e){let{config:t}=e,r=!1,n=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(mCe,"updateStreamLimits");async function pCe(e){let t,r;try{t=await Pn.jetstream({domain:e}),r=await Pn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw ki.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(pCe,"connectToRemoteJS")});var JR=M((DVe,VX)=>{"use strict";var{decode:hCe}=require("msgpackr"),{isMainThread:OVe,parentPort:PVe,threadId:LVe}=require("worker_threads"),kb=Sr(),am=Pt(),ZM=(G(),v(j)),Ln=Q(),XM=fe(),ECe=(G(),v(j)),{onMessageByType:_Ce}=st(),xX=so(),{recordAction:vX,recordActionBinary:gCe}=(is(),v(dg)),{publishToStream:SCe}=kb,{ConsumerEvents:MX}=require("nats"),TCe=gn(),{promisify:yCe}=require("util"),{decodeBlobsWithWrites:RCe}=(ss(),v(J_)),BX=yCe(setTimeout),Hb=1e4,Gb,Fb,bCe,ACe,FX,o_=new Map,cm=new Map;VX.exports={initialize:kX,ingestConsumer:eU,setSubscription:ICe,setIgnoreOrigin:CCe,getDatabaseSubscriptions:NCe,updateConsumer:HX};async function kX(){_Ce(ZM.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await HX(n)}),FX=!0,Ln.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await kb.getNATSReferences();Gb=e,Fb=e.info.server_name,bCe=t,ACe=r}a(kX,"initialize");async function HX(e){if(e.status==="start"){let{js:t,jsm:r}=await GX(e.node_domain_name);eU(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=o_.get(e.stream_name+e.node_domain_name);t&&(Ln.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),o_.set(e.stream_name+e.node_domain_name,"close")),cm.get(e.node_domain_name)==="failed"&&cm.set(e.node_domain_name,"close")}}a(HX,"updateConsumer");var qb=new Map;function ICe(e,t,r){let n=qb.get(e);n||qb.set(e,n=new Map),n.set(t,r),FX||kX().then(wCe)}a(ICe,"setSubscription");async function wCe(){let e=await TCe.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+am.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await GX(r),!n))break;let{schema:o,table:c}=i,l=xX.createNatsTableStreamName(o,c);eU(l,n,s,r)}}}a(wCe,"accessConsumers");async function GX(e){let t,r,n=1;for(;!r;)try{t=await Gb.jetstream({domain:e}),r=await Gb.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(cm.get(e)==="close")break;cm.set(e,"failed"),n%10===1&&Ln.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Hb?n++*100:Hb;await BX(i)}return{js:t,jsm:r}}a(GX,"connectToRemoteJS");function NCe(){return qb}a(NCe,"getDatabaseSubscriptions");var qX;function CCe(e){qX=e}a(CCe,"setIgnoreOrigin");var $X=100,UX=new Array($X),Bb=0;async function eU(e,t,r,n){let{connection:s}=await kb.getNATSReferences();Gb=s,Fb=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Fb),Ln.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(cm.get(n)==="close")break;o%10===1&&Ln.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Ln.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await kb.createConsumer(r,e,Fb,new Date(Date.now()).toISOString()));let d=o++*100<Hb?o++*100:Hb;await BX(d)}let c=!1,l;for(;!c;){if(o_.get(e+n)==="close"||cm.get(n)==="close"){o_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:XM.get(ZM.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),o_.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===MX.ConsumerDeleted&&(await l.close(),c=!0),d.type===MX.HeartbeatsMissed){let f=d.data;Ln.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(Ln.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await UX[Bb],UX[Bb]=OCe(d).catch(f=>{Ln.error(f)}),++Bb>=$X&&(Bb=0)}catch(d){d.message==="consumer deleted"?(Ln.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Ln.error("Error consuming clustering ingest, restarting consumer",d)}}}a(eU,"ingestConsumer");async function OCe(e){let t;await RCe(()=>{t=hCe(e.data)}),vX(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Ln.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=XM.get(ZM.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(am.MSG_HEADERS.TRANSACTED_NODES)&&r.values(am.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(am.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!qX),gCe(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(am.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;Ln.trace("processing message:",o,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),Ln.trace(`messageProcessor nats msg id: ${e.headers.get(am.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:_,user:R,node_name:S}=m||{},y=qb.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:QM(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:_,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map((H,X)=>({type:QM(o),value:H,expiresAt:p,id:f?.[X],table:u}));for(;l;)I.push({type:QM(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:I,table:u,timestamp:_,onCommit:h,user:R,nodeName:S})}XM.get(ECe.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&SCe(e.subject.split(".").slice(0,-1).join("."),xX.createNatsTableStreamName(c,u),e.headers,e.data),await E;let w=Date.now()-_;_&&vX(w,"replication-latency",e.subject,o,"ingest")}catch(o){Ln.error(o)}e.ack()}a(OCe,"messageProcessor");function QM(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(QM,"convertOperation")});var PCe=JR();(async()=>{try{await PCe.initialize()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();