harperdb 4.5.20 → 4.5.21

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,97 +1,97 @@
1
- "use strict";var vQ=Object.create;var Wd=Object.defineProperty;var UQ=Object.getOwnPropertyDescriptor;var xQ=Object.getOwnPropertyNames;var BQ=Object.getPrototypeOf,HQ=Object.prototype.hasOwnProperty;var a=(e,t)=>Wd(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var P=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Be=(e,t)=>{for(var r in t)Wd(e,r,{get:t[r],enumerable:!0})},iP=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of xQ(t))!HQ.call(e,s)&&s!==r&&Wd(e,s,{get:()=>t[s],enumerable:!(n=UQ(t,s))||n.enumerable});return e};var M=(e,t,r)=>(r=e!=null?vQ(BQ(e)):{},iP(t||!e||!e.__esModule?Wd(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>iP(Wd({},"__esModule",{value:!0}),e);var Et=P((QTe,cP)=>{var{join:kQ,dirname:oP}=require("node:path"),{existsSync:FQ,readFileSync:GQ}=require("node:fs");function qQ(){let t=__dirname,r,n=0;for(;!FQ(r=kQ(t,"package.json"));)if(t===(t=oP(t))||n++>10)throw new Error("Could not find package root");return r}a(qQ,"findPackageJson");var aP=qQ(),$Q=JSON.parse(GQ(aP,"utf8")),VQ=oP(aP);cP.exports={packageJson:$Q,PACKAGE_ROOT:VQ}});var $={};Be($,{AUTH_AUDIT_STATUS:()=>xs,AUTH_AUDIT_TYPES:()=>zo,BOOT_PROPS_FILE_NAME:()=>mj,BOOT_PROP_PARAMS:()=>dP,CLUSTERING_FLAG:()=>Gj,CLUSTERING_PROCESSES:()=>ej,CLUSTER_MESSAGE_TYPE_ENUM:()=>oA,CLUSTER_OPERATIONS:()=>Dj,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>fP,DATABASES_DIR_NAME:()=>cc,DATABASES_PARAM_CONFIG:()=>Uj,DEFAULT_DATABASE_NAME:()=>rj,ESCAPED_FORWARD_SLASH_REGEX:()=>fj,FORWARD_SLASH_REGEX:()=>uj,FUNC_VAL:()=>Wj,GEO_CONVERSION_ENUM:()=>Mj,HDB_COMPONENT_CONFIG_FILE:()=>WQ,HDB_CONFIG_FILE:()=>KQ,HDB_DEFAULT_CONFIG_FILE:()=>YQ,HDB_FILE_PERMISSIONS:()=>Ej,HDB_HOME_DIR_NAME:()=>hj,HDB_PID_FILE:()=>tj,HDB_PROCESS_SERVICES:()=>ZQ,HDB_PROC_NAME:()=>zQ,HDB_RESTART_SCRIPT:()=>QQ,HDB_ROOT_DIR_NAME:()=>tA,HDB_SETTINGS_NAMES:()=>iA,HDB_SUPPORT_ADDRESS:()=>uP,INFO_TABLE_HASH_ATTRIBUTE:()=>yj,INSERT_MAX_CHARACTER_SIZE:()=>Aj,INSTALL_PROMPTS:()=>Tj,ITC_EVENT_TYPES:()=>cA,JOB_STATUS_ENUM:()=>wj,JOB_TYPE_ENUM:()=>xj,JWT_ENUM:()=>Qd,LAUNCH_SERVICE_SCRIPTS:()=>ij,LEGACY_CONFIG_PARAMS:()=>vj,LEGACY_DATABASES_DIR_NAME:()=>Nm,LICENSE_FILE_NAME:()=>Nj,LICENSE_KEY_DIR_NAME:()=>sA,LICENSE_VALUES:()=>Bj,LOG_LEVELS:()=>sj,LOG_NAMES:()=>nj,MEM_SETTING_KEY:()=>_j,METADATA_PROPERTY:()=>Fj,NODE_ERROR_CODES:()=>kj,OPERATIONS_ENUM:()=>Yt,PERMS_CRUD_ENUM:()=>Kj,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>Vj,PRE_4_0_0_VERSION:()=>zj,PROCESS_DESCRIPTORS:()=>XQ,PROCESS_NAME_ENV_PROP:()=>Sj,RAM_ALLOCATION_ENUM:()=>Hj,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>Im,REG_KEY_FILE_NAME:()=>Oj,RESTART_TIMEOUT_MS:()=>pj,ROLE_TYPES_ENUM:()=>oj,S3_BUCKET_AUTH_KEYS:()=>Cj,SEARCH_NOT_FOUND_MESSAGE:()=>cj,SEARCH_WILDCARDS:()=>Yj,SERVICE_ACTIONS_ENUM:()=>Lj,SUPPORT_HELP_MSG:()=>aj,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>bj,SYSTEM_SCHEMA_NAME:()=>zd,SYSTEM_TABLE_NAMES:()=>Fl,THREAD_TYPES:()=>lA,TIME_STAMP_NAMES:()=>$j,TIME_STAMP_NAMES_ENUM:()=>qj,TRANSACTIONS_DIR_NAME:()=>gj,UNICODE_FORWARD_SLASH:()=>dj,UNICODE_PERIOD:()=>lj,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>Rj,VALID_S3_FILE_TYPES:()=>Ij,VALID_SQL_OPS_ENUM:()=>Pj,VALUE_SEARCH_COMPARATORS:()=>wm,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>aA});var bm,Om,KQ,YQ,tA,WQ,zQ,QQ,lP,eA,rA,nA,jQ,JQ,XQ,ZQ,ej,tj,rj,nj,sj,ij,oj,uP,aj,cj,lj,uj,dj,fj,_j,zd,hj,sA,mj,pj,Ej,cc,Nm,gj,Sj,dP,Tj,Aj,Rj,Fl,yj,bj,Oj,Nj,wj,Yt,Ij,Cj,Pj,Dj,Lj,Mj,iA,vj,B,fP,Uj,xj,oA,Bj,Hj,kj,Fj,Gj,_P,hP,qj,$j,Vj,wm,aA,Kj,Yj,Wj,Im,Qd,cA,lA,zj,xs,zo,G=be(()=>{bm=require("node:path"),Om=M(Et()),KQ="harperdb-config.yaml",YQ="defaultConfig.yaml",tA="hdb",WQ="config.yaml",zQ="harperdb.js",QQ="restartHdb.js",lP="HarperDB",eA="Custom Functions",rA="Clustering Hub",nA="Clustering Leaf",jQ="Clustering Ingest Service",JQ="Clustering Reply Service",XQ={HDB:lP,CLUSTERING_HUB:rA,CLUSTERING_LEAF:nA,CLUSTERING_INGEST_SERVICE:jQ,CLUSTERING_REPLY_SERVICE:JQ,CUSTOM_FUNCTIONS:eA,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"},ZQ={harperdb:lP,"clustering hub":rA,"clustering leaf":nA,"custom functions":eA,custom_functions:eA,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},ej={CLUSTERING_HUB_PROC_DESCRIPTOR:rA,CLUSTERING_LEAF_PROC_DESCRIPTOR:nA},tj="hdb.pid",rj="data",nj={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},sj={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},ij={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,bm.join)(Om.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,bm.join)(Om.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,bm.join)(Om.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},oj={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},uP="support@harperdb.io",aj=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${uP}`,cj="None of the specified records were found.",lj="U+002E",uj=/\//g,dj="U+002F",fj=/U\+002F/g,_j="--max-old-space-size=",zd="system",hj=".harperdb",sA="keys",mj="hdb_boot_properties.file",pj=6e4,Ej=448,cc="database",Nm="schema",gj="transactions",Sj="PROCESS_NAME",dP={SETTINGS_PATH_KEY:"settings_path"},Tj={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"},Aj=250,Rj={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Fl={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"},yj="info_id",bj={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"},Oj="060493.ks",Nj=".license",wj={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},Yt={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key"},Ij={CSV:".csv",JSON:".json"},Cj={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Pj={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Dj={[Yt.INSERT]:Yt.INSERT,[Yt.UPDATE]:Yt.UPDATE,[Yt.UPSERT]:Yt.UPSERT,[Yt.DELETE]:Yt.DELETE},Lj={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},Mj={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},iA={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"},vj={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"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},fP={settings_path:dP.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];fP[t.toLowerCase()]=t}Uj={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},xj={csv_file_load:"csv_file_load",csv_data_load:Yt.CSV_DATA_LOAD,csv_url_load:Yt.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"},oA={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"},Bj={VERSION_DEFAULT:"2.2.0"},Hj={DEVELOPMENT:8192,DEFAULT:512},kj={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},Fj=Symbol("metadata"),Gj="__clustering__",_P="__createdtime__",hP="__updatedtime__",qj={CREATED_TIME:_P,UPDATED_TIME:hP},$j=[_P,hP],Vj=15984864e5,wm={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},aA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},Kj={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Yj=["*","%"],Wj="func_val",Im={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Qd={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},cA={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},lA={HTTP:"http"},zj="3.x.x",xs={SUCCESS:"success",FAILURE:"failure"},zo={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var lc=P((JTe,EP)=>{"use strict";var mP=require("minimist");EP.exports=Qj;function Qj(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=pP(process.env),n=pP(mP(process.argv))):(r=process.env,n=mP(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(Qj,"assignCMDENVVariables");function pP(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(pP,"objKeysToLowerCase")});var ui=P(Bs=>{"use strict";global.Resource=Bs.Resource=void 0;global.tables=Bs.tables={};global.databases=Bs.databases={};global.getUser=Bs.getUser=void 0;global.authenticateUser=Bs.authenticateUser=void 0;global.server=Bs.server={};global.contentTypes=Bs.contentTypes=null;global.threads=Bs.threads=[];global.logger={};Bs._assignPackageExport=(e,t)=>{global[e]=Bs[e]=t}});var X=P((LP,MP)=>{"use strict";var zi=require("fs-extra"),{workerData:jj,threadId:Jj,isMainThread:Xj}=require("worker_threads"),fi=require("path"),AP=require("yaml"),RP=require("properties-reader"),Wt=(G(),D($)),gP=lc(),Zj=require("os"),{PACKAGE_ROOT:_A}=Et(),{_assignPackageExport:e2}=ui(),SP=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),hr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},yP={STDOUT:"stdOut",STDERR:"stdErr"},t2=fi.join(_A,"logs"),r2=fi.join(_A,"config/yaml/",Wt.HDB_DEFAULT_CONFIG_FILE),n2=1e4,uA,di,as,Pr,Cm,jd,Pm,Qo,Jd;Jd===void 0&&bP();Object.assign(LP,{notify:CP,fatal:PP,error:Dm,warn:DP,info:NP,debug:IP,trace:wP,setLogLevel:d2,log_level:Pr,loggerWithTag:o2,suppressLogging:a2,initLogSettings:bP,logCustomLevel:l2,closeLogFile:hA,logsAtLevel:s2,getLogFilePath:a(()=>Pm,"getLogFilePath"),OUTPUTS:yP,AuthAuditLog:h2});e2("logger",MP.exports);var dA;function s2(e){return hr[Pr]<=hr[e]}a(s2,"logsAtLevel");function bP(e=!1){try{if(Jd===void 0||e){hA();let t=u2(),r=gP(["ROOTPATH"]);try{Jd=RP(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!zi.pathExistsSync(fi.join(r.ROOTPATH,Wt.HDB_CONFIG_FILE)))throw n}if({level:Pr,config_log_path:jd,to_file:di,to_stream:as}=f2(r.ROOTPATH?fi.join(r.ROOTPATH,Wt.HDB_CONFIG_FILE):Jd.get("settings_path")),Cm=Wt.LOG_NAMES.HDB,Pm=fi.join(jd,Cm),Xj)try{require("segfault-handler").registerHandler(fi.join(jd,"crash.log"))}catch{}}}catch(t){if(Jd=void 0,t.code===Wt.NODE_ERROR_CODES.ENOENT||t.code===Wt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=gP(Object.keys(Wt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Wt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Wt.CONFIG_PARAMS.LOGGING_LEVEL){Pr=l;continue}if(c===Wt.CONFIG_PARAMS.LOGGING_STDSTREAMS){as=l;continue}c===Wt.CONFIG_PARAMS.LOGGING_FILE&&(di=c),c===Wt.CONFIG_PARAMS.LOGGING_CONSOLE&&(uA=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=_2();di=di===void 0?s:di,di=TP(di),as=as===void 0?i:as,as=TP(as),Pr=Pr===void 0?n:Pr,jd=t2,Cm=Wt.LOG_NAMES.INSTALL,Pm=fi.join(jd,Cm);return}throw Dm("Error initializing log settings"),Dm(t),t}process.env.DEV_MODE&&(as=!0),i2()}a(bP,"initLogSettings");var jo=!0;function i2(){di&&(process.stdout.write=function(e){return typeof e=="string"&&jo&&uA!==!1&&(fA(),e=e.toString(),e[e.length-1]===`
2
- `&&(e=e.slice(0,-1)),zi.appendFileSync(Qo,Hs("stdout",[e]))),SP.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&jo&&uA!==!1&&(fA(),e[e.length-1]===`
3
- `&&(e=e.slice(0,-1)),zi.appendFileSync(Qo,Hs("stderr",[e]))),SP.apply(process.stderr,arguments)})}a(i2,"stdioLogging");function o2(e,t){let r={tagName:e.replace(/ /g,"-")};return{notify:n(CP,"notify"),fatal:n(PP,"fatal"),error:n(Dm,"error"),warn:n(DP,"warn"),info:n(NP,"info"),debug:n(IP,"debug"),trace:n(wP,"trace")};function n(s,i){return!t||hr[Pr]<=hr[i]?function(...o){return s(r,...o)}:null}}a(o2,"loggerWithTag");function a2(e){try{jo=!1,e()}finally{jo=!0}}a(a2,"suppressLogging");var c2=jj?.name?.replace(/ /g,"-")||"main";function Hs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||c2+"/"+Jj);c<s;c++){let u=t[c];if(u instanceof Error&&u.stack)n+=u.stack,Object.keys(u).length>0&&(n+=`
1
+ "use strict";var Mj=Object.create;var zd=Object.defineProperty;var vj=Object.getOwnPropertyDescriptor;var Uj=Object.getOwnPropertyNames;var xj=Object.getPrototypeOf,Bj=Object.prototype.hasOwnProperty;var a=(e,t)=>zd(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var P=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Be=(e,t)=>{for(var r in t)zd(e,r,{get:t[r],enumerable:!0})},iP=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Uj(t))!Bj.call(e,s)&&s!==r&&zd(e,s,{get:()=>t[s],enumerable:!(n=vj(t,s))||n.enumerable});return e};var M=(e,t,r)=>(r=e!=null?Mj(xj(e)):{},iP(t||!e||!e.__esModule?zd(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>iP(zd({},"__esModule",{value:!0}),e);var Et=P((QTe,cP)=>{var{join:Hj,dirname:oP}=require("node:path"),{existsSync:kj,readFileSync:Fj}=require("node:fs");function Gj(){let t=__dirname,r,n=0;for(;!kj(r=Hj(t,"package.json"));)if(t===(t=oP(t))||n++>10)throw new Error("Could not find package root");return r}a(Gj,"findPackageJson");var aP=Gj(),qj=JSON.parse(Fj(aP,"utf8")),$j=oP(aP);cP.exports={packageJson:qj,PACKAGE_ROOT:$j}});var $={};Be($,{AUTH_AUDIT_STATUS:()=>xs,AUTH_AUDIT_TYPES:()=>zo,BOOT_PROPS_FILE_NAME:()=>hQ,BOOT_PROP_PARAMS:()=>dP,CLUSTERING_FLAG:()=>FQ,CLUSTERING_PROCESSES:()=>Zj,CLUSTER_MESSAGE_TYPE_ENUM:()=>oA,CLUSTER_OPERATIONS:()=>PQ,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>fP,DATABASES_DIR_NAME:()=>cc,DATABASES_PARAM_CONFIG:()=>vQ,DEFAULT_DATABASE_NAME:()=>tQ,ESCAPED_FORWARD_SLASH_REGEX:()=>dQ,FORWARD_SLASH_REGEX:()=>lQ,FUNC_VAL:()=>YQ,GEO_CONVERSION_ENUM:()=>LQ,HDB_COMPONENT_CONFIG_FILE:()=>Yj,HDB_CONFIG_FILE:()=>Vj,HDB_DEFAULT_CONFIG_FILE:()=>Kj,HDB_FILE_PERMISSIONS:()=>mQ,HDB_HOME_DIR_NAME:()=>_Q,HDB_PID_FILE:()=>eQ,HDB_PROCESS_SERVICES:()=>Xj,HDB_PROC_NAME:()=>Wj,HDB_RESTART_SCRIPT:()=>zj,HDB_ROOT_DIR_NAME:()=>tA,HDB_SETTINGS_NAMES:()=>iA,HDB_SUPPORT_ADDRESS:()=>uP,INFO_TABLE_HASH_ATTRIBUTE:()=>RQ,INSERT_MAX_CHARACTER_SIZE:()=>TQ,INSTALL_PROMPTS:()=>SQ,ITC_EVENT_TYPES:()=>cA,JOB_STATUS_ENUM:()=>NQ,JOB_TYPE_ENUM:()=>UQ,JWT_ENUM:()=>Qd,LAUNCH_SERVICE_SCRIPTS:()=>sQ,LEGACY_CONFIG_PARAMS:()=>MQ,LEGACY_DATABASES_DIR_NAME:()=>Op,LICENSE_FILE_NAME:()=>OQ,LICENSE_KEY_DIR_NAME:()=>sA,LICENSE_VALUES:()=>xQ,LOG_LEVELS:()=>nQ,LOG_NAMES:()=>rQ,MEM_SETTING_KEY:()=>fQ,METADATA_PROPERTY:()=>kQ,NODE_ERROR_CODES:()=>HQ,OPERATIONS_ENUM:()=>Yt,PERMS_CRUD_ENUM:()=>VQ,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>$Q,PRE_4_0_0_VERSION:()=>WQ,PROCESS_DESCRIPTORS:()=>Jj,PROCESS_NAME_ENV_PROP:()=>gQ,RAM_ALLOCATION_ENUM:()=>BQ,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>wp,REG_KEY_FILE_NAME:()=>bQ,RESTART_TIMEOUT_MS:()=>pQ,ROLE_TYPES_ENUM:()=>iQ,S3_BUCKET_AUTH_KEYS:()=>IQ,SEARCH_NOT_FOUND_MESSAGE:()=>aQ,SEARCH_WILDCARDS:()=>KQ,SERVICE_ACTIONS_ENUM:()=>DQ,SUPPORT_HELP_MSG:()=>oQ,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>yQ,SYSTEM_SCHEMA_NAME:()=>jd,SYSTEM_TABLE_NAMES:()=>Fl,THREAD_TYPES:()=>lA,TIME_STAMP_NAMES:()=>qQ,TIME_STAMP_NAMES_ENUM:()=>GQ,TRANSACTIONS_DIR_NAME:()=>EQ,UNICODE_FORWARD_SLASH:()=>uQ,UNICODE_PERIOD:()=>cQ,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>AQ,VALID_S3_FILE_TYPES:()=>wQ,VALID_SQL_OPS_ENUM:()=>CQ,VALUE_SEARCH_COMPARATORS:()=>Np,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>aA});var yp,bp,Vj,Kj,tA,Yj,Wj,zj,lP,eA,rA,nA,jj,Qj,Jj,Xj,Zj,eQ,tQ,rQ,nQ,sQ,iQ,uP,oQ,aQ,cQ,lQ,uQ,dQ,fQ,jd,_Q,sA,hQ,pQ,mQ,cc,Op,EQ,gQ,dP,SQ,TQ,AQ,Fl,RQ,yQ,bQ,OQ,NQ,Yt,wQ,IQ,CQ,PQ,DQ,LQ,iA,MQ,B,fP,vQ,UQ,oA,xQ,BQ,HQ,kQ,FQ,_P,hP,GQ,qQ,$Q,Np,aA,VQ,KQ,YQ,wp,Qd,cA,lA,WQ,xs,zo,G=be(()=>{yp=require("node:path"),bp=M(Et()),Vj="harperdb-config.yaml",Kj="defaultConfig.yaml",tA="hdb",Yj="config.yaml",Wj="harperdb.js",zj="restartHdb.js",lP="HarperDB",eA="Custom Functions",rA="Clustering Hub",nA="Clustering Leaf",jj="Clustering Ingest Service",Qj="Clustering Reply Service",Jj={HDB:lP,CLUSTERING_HUB:rA,CLUSTERING_LEAF:nA,CLUSTERING_INGEST_SERVICE:jj,CLUSTERING_REPLY_SERVICE:Qj,CUSTOM_FUNCTIONS:eA,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"},Xj={harperdb:lP,"clustering hub":rA,"clustering leaf":nA,"custom functions":eA,custom_functions:eA,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},Zj={CLUSTERING_HUB_PROC_DESCRIPTOR:rA,CLUSTERING_LEAF_PROC_DESCRIPTOR:nA},eQ="hdb.pid",tQ="data",rQ={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},nQ={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},sQ={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,yp.join)(bp.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,yp.join)(bp.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,yp.join)(bp.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},iQ={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},uP="support@harperdb.io",oQ=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${uP}`,aQ="None of the specified records were found.",cQ="U+002E",lQ=/\//g,uQ="U+002F",dQ=/U\+002F/g,fQ="--max-old-space-size=",jd="system",_Q=".harperdb",sA="keys",hQ="hdb_boot_properties.file",pQ=6e4,mQ=448,cc="database",Op="schema",EQ="transactions",gQ="PROCESS_NAME",dP={SETTINGS_PATH_KEY:"settings_path"},SQ={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"},TQ=250,AQ={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Fl={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"},RQ="info_id",yQ={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"},bQ="060493.ks",OQ=".license",NQ={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},Yt={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key"},wQ={CSV:".csv",JSON:".json"},IQ={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},CQ={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},PQ={[Yt.INSERT]:Yt.INSERT,[Yt.UPDATE]:Yt.UPDATE,[Yt.UPSERT]:Yt.UPSERT,[Yt.DELETE]:Yt.DELETE},DQ={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},LQ={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},iA={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"},MQ={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"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},fP={settings_path:dP.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];fP[t.toLowerCase()]=t}vQ={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},UQ={csv_file_load:"csv_file_load",csv_data_load:Yt.CSV_DATA_LOAD,csv_url_load:Yt.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"},oA={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"},xQ={VERSION_DEFAULT:"2.2.0"},BQ={DEVELOPMENT:8192,DEFAULT:512},HQ={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},kQ=Symbol("metadata"),FQ="__clustering__",_P="__createdtime__",hP="__updatedtime__",GQ={CREATED_TIME:_P,UPDATED_TIME:hP},qQ=[_P,hP],$Q=15984864e5,Np={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},aA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},VQ={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},KQ=["*","%"],YQ="func_val",wp={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Qd={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},cA={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},lA={HTTP:"http"},WQ="3.x.x",xs={SUCCESS:"success",FAILURE:"failure"},zo={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var lc=P((XTe,EP)=>{"use strict";var pP=require("minimist");EP.exports=zQ;function zQ(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=mP(process.env),n=mP(pP(process.argv))):(r=process.env,n=pP(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(zQ,"assignCMDENVVariables");function mP(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(mP,"objKeysToLowerCase")});var ui=P(Bs=>{"use strict";global.Resource=Bs.Resource=void 0;global.tables=Bs.tables={};global.databases=Bs.databases={};global.getUser=Bs.getUser=void 0;global.authenticateUser=Bs.authenticateUser=void 0;global.server=Bs.server={};global.contentTypes=Bs.contentTypes=null;global.threads=Bs.threads=[];global.logger={};Bs._assignPackageExport=(e,t)=>{global[e]=Bs[e]=t}});var X=P((LP,MP)=>{"use strict";var zi=require("fs-extra"),{workerData:jQ,threadId:QQ,isMainThread:JQ}=require("worker_threads"),fi=require("path"),AP=require("yaml"),RP=require("properties-reader"),Wt=(G(),D($)),gP=lc(),XQ=require("os"),{PACKAGE_ROOT:_A}=Et(),{_assignPackageExport:ZQ}=ui(),SP=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),hr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},yP={STDOUT:"stdOut",STDERR:"stdErr"},e2=fi.join(_A,"logs"),t2=fi.join(_A,"config/yaml/",Wt.HDB_DEFAULT_CONFIG_FILE),r2=1e4,uA,di,as,Pr,Ip,Jd,Cp,jo,Xd;Xd===void 0&&bP();Object.assign(LP,{notify:CP,fatal:PP,error:Pp,warn:DP,info:NP,debug:IP,trace:wP,setLogLevel:u2,log_level:Pr,loggerWithTag:i2,suppressLogging:o2,initLogSettings:bP,logCustomLevel:c2,closeLogFile:hA,logsAtLevel:n2,getLogFilePath:a(()=>Cp,"getLogFilePath"),OUTPUTS:yP,AuthAuditLog:_2});ZQ("logger",MP.exports);var dA;function n2(e){return hr[Pr]<=hr[e]}a(n2,"logsAtLevel");function bP(e=!1){try{if(Xd===void 0||e){hA();let t=l2(),r=gP(["ROOTPATH"]);try{Xd=RP(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!zi.pathExistsSync(fi.join(r.ROOTPATH,Wt.HDB_CONFIG_FILE)))throw n}if({level:Pr,config_log_path:Jd,to_file:di,to_stream:as}=d2(r.ROOTPATH?fi.join(r.ROOTPATH,Wt.HDB_CONFIG_FILE):Xd.get("settings_path")),Ip=Wt.LOG_NAMES.HDB,Cp=fi.join(Jd,Ip),JQ)try{require("segfault-handler").registerHandler(fi.join(Jd,"crash.log"))}catch{}}}catch(t){if(Xd=void 0,t.code===Wt.NODE_ERROR_CODES.ENOENT||t.code===Wt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=gP(Object.keys(Wt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Wt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Wt.CONFIG_PARAMS.LOGGING_LEVEL){Pr=l;continue}if(c===Wt.CONFIG_PARAMS.LOGGING_STDSTREAMS){as=l;continue}c===Wt.CONFIG_PARAMS.LOGGING_FILE&&(di=c),c===Wt.CONFIG_PARAMS.LOGGING_CONSOLE&&(uA=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=f2();di=di===void 0?s:di,di=TP(di),as=as===void 0?i:as,as=TP(as),Pr=Pr===void 0?n:Pr,Jd=e2,Ip=Wt.LOG_NAMES.INSTALL,Cp=fi.join(Jd,Ip);return}throw Pp("Error initializing log settings"),Pp(t),t}process.env.DEV_MODE&&(as=!0),s2()}a(bP,"initLogSettings");var Qo=!0;function s2(){di&&(process.stdout.write=function(e){return typeof e=="string"&&Qo&&uA!==!1&&(fA(),e=e.toString(),e[e.length-1]===`
2
+ `&&(e=e.slice(0,-1)),zi.appendFileSync(jo,Hs("stdout",[e]))),SP.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Qo&&uA!==!1&&(fA(),e[e.length-1]===`
3
+ `&&(e=e.slice(0,-1)),zi.appendFileSync(jo,Hs("stderr",[e]))),SP.apply(process.stderr,arguments)})}a(s2,"stdioLogging");function i2(e,t){let r={tagName:e.replace(/ /g,"-")};return{notify:n(CP,"notify"),fatal:n(PP,"fatal"),error:n(Pp,"error"),warn:n(DP,"warn"),info:n(NP,"info"),debug:n(IP,"debug"),trace:n(wP,"trace")};function n(s,i){return!t||hr[Pr]<=hr[i]?function(...o){return s(r,...o)}:null}}a(i2,"loggerWithTag");function o2(e){try{Qo=!1,e()}finally{Qo=!0}}a(o2,"suppressLogging");var a2=jQ?.name?.replace(/ /g,"-")||"main";function Hs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||a2+"/"+QQ);c<s;c++){let u=t[c];if(u instanceof Error&&u.stack)n+=u.stack,Object.keys(u).length>0&&(n+=`
4
4
  `+JSON.stringify(u)),u.cause&&(t[c--]=u.cause,u&&(n+=`
5
5
  Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Object ["+Object.keys(u)+"]"}else n+=u;c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
6
- `}a(Hs,"createLogRecord");function Xd(e){if(di){if(OP(e),as){jo=!1;try{process.stdout.write(e)}finally{jo=!0}}}else as&&process.stdout.write(e)}a(Xd,"logStdOut");function Lm(e){if(di){if(OP(e),as){jo=!1;try{process.stderr.write(e)}finally{jo=!0}}}else as&&process.stderr.write(e)}a(Lm,"logStdErr");function OP(e){fA(),Qo?zi.appendFileSync(Qo,e):dA||console.log(e)}a(OP,"logToFile");function hA(){try{zi.closeSync(Qo)}catch{}Qo=null}a(hA,"closeLogFile");function fA(){if(!Qo){try{Qo=zi.openSync(Pm,"a")}catch(e){dA||(dA=!0,console.error(e))}setTimeout(()=>{hA()},n2).unref()}}a(fA,"openLogFile");function NP(...e){hr[Pr]<=hr.info&&Xd(Hs("info",e))}a(NP,"info");function wP(...e){hr[Pr]<=hr.trace&&Xd(Hs("trace",e))}a(wP,"trace");function Dm(...e){hr[Pr]<=hr.error&&Lm(Hs("error",e))}a(Dm,"error");function IP(...e){hr[Pr]<=hr.debug&&Xd(Hs("debug",e))}a(IP,"debug");function CP(...e){hr[Pr]<=hr.notify&&Xd(Hs("notify",e))}a(CP,"notify");function PP(...e){hr[Pr]<=hr.fatal&&Lm(Hs("fatal",e))}a(PP,"fatal");function DP(...e){hr[Pr]<=hr.warn&&Lm(Hs("warn",e))}a(DP,"warn");function l2(e,t,...r){t===yP.STDERR?Lm(Hs(e,r)):Xd(Hs(e,r))}a(l2,"logCustomLevel");function u2(){let e;try{e=Zj.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=fi.join(e,Wt.HDB_HOME_DIR_NAME,Wt.BOOT_PROPS_FILE_NAME);return zi.existsSync(t)||(t=fi.join(_A,"utility/hdb_boot_properties.file")),t}a(u2,"getPropsFilePath");function d2(e){Pr=e}a(d2,"setLogLevel");function TP(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(TP,"autoCastBoolean");function f2(e){try{if(e.includes("config/settings.js")){let o=RP(e);return{level:o.get(Wt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:fi.dirname(o.get(Wt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Wt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Wt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=AP.parseDocument(zi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Wt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(f2,"getLogConfig");function _2(){try{let e=AP.parseDocument(zi.readFileSync(r2,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(_2,"getDefaultConfig");function h2(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(h2,"AuthAuditLog")});var mA=P((tAe,vP)=>{"use strict";var m2=require("util"),p2=require("path"),E2=require("child_process"),g2=m2.promisify(E2.execFile),S2=1e3*1e3*10;vP.exports={findPs:T2};async function T2(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await g2("ps",["wwxo",`pid,${r}`],{maxBuffer:S2});for(let s of n.trim().split(`
7
- `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:p2.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(T2,"findPs")});var Ft=P((nAe,xP)=>{"use strict";var A2="__dbis__",R2="__txns__",y2="__environment_name__",b2="__dbi_defintion__",O2={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"},N2=["__createdtime__","__updatedtime__"],w2="\uFFFF",UP={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},I2=Object.values(UP);xP.exports={AUDIT_STORE_NAME:R2,INTERNAL_DBIS_NAME:A2,DBI_DEFINITION_NAME:b2,SEARCH_TYPES:O2,TIMESTAMP_NAMES:N2,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:y2,TRANSACTIONS_DBI_NAMES_ENUM:UP,TRANSACTIONS_DBIS:I2,OVERFLOW_MARKER:w2}});var Dn=P((sAe,KP)=>{"use strict";var BP=(G(),D($)),HP=Ft(),kP={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},FP=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),GP={500:FP("There was an error processing your request."),400:"Invalid request"},C2=GP[kP.INTERNAL_SERVER_ERROR],P2={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")},D2={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},L2={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"},M2={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${HP.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${HP.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"},v2={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${BP.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 ${BP.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"},qP={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"},U2={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."},x2={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")},B2={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"},H2={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},k2={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")},$P={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")},VP={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")},F2={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"},G2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},q2={...qP,...L2,...P2,...U2,...x2,...B2,...H2,...k2,...v2,...$P,...VP,...F2,...G2,...D2};KP.exports={CHECK_LOGS_WRAPPER:FP,HDB_ERROR_MSGS:q2,DEFAULT_ERROR_MSGS:GP,DEFAULT_ERROR_RESP:C2,HTTP_STATUS_CODES:kP,LMDB_ERRORS_ENUM:M2,AUTHENTICATION_ERROR_MSGS:qP,VALIDATION_ERROR_MSGS:$P,ITC_ERRORS:VP}});var he=P((oAe,zP)=>{"use strict";var Gl=Dn(),$2=X(),V2=(G(),D($)),Mm=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,YP),this.statusCode=n||Gl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Gl.DEFAULT_ERROR_MSGS[n]?Gl.DEFAULT_ERROR_MSGS[n]:Gl.DEFAULT_ERROR_MSGS[Gl.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&&$2[s](i)}},pA=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}},EA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function YP(e,t,r,n=V2.LOG_LEVELS.ERROR,s=null,i=!1){if(WP(e))return e;let o=new Mm(e,t,r,n,s);return i&&delete o.stack,o}a(YP,"handleHDBError");function WP(e){return e.__proto__.constructor.name===Mm.name}a(WP,"isHDBError");zP.exports={isHDBError:WP,handleHDBError:YP,ClientError:pA,ServerError:EA,hdb_errors:Gl}});var gA=P(QP=>{"use strict";var K2={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
6
+ `}a(Hs,"createLogRecord");function Zd(e){if(di){if(OP(e),as){Qo=!1;try{process.stdout.write(e)}finally{Qo=!0}}}else as&&process.stdout.write(e)}a(Zd,"logStdOut");function Dp(e){if(di){if(OP(e),as){Qo=!1;try{process.stderr.write(e)}finally{Qo=!0}}}else as&&process.stderr.write(e)}a(Dp,"logStdErr");function OP(e){fA(),jo?zi.appendFileSync(jo,e):dA||console.log(e)}a(OP,"logToFile");function hA(){try{zi.closeSync(jo)}catch{}jo=null}a(hA,"closeLogFile");function fA(){if(!jo){try{jo=zi.openSync(Cp,"a")}catch(e){dA||(dA=!0,console.error(e))}setTimeout(()=>{hA()},r2).unref()}}a(fA,"openLogFile");function NP(...e){hr[Pr]<=hr.info&&Zd(Hs("info",e))}a(NP,"info");function wP(...e){hr[Pr]<=hr.trace&&Zd(Hs("trace",e))}a(wP,"trace");function Pp(...e){hr[Pr]<=hr.error&&Dp(Hs("error",e))}a(Pp,"error");function IP(...e){hr[Pr]<=hr.debug&&Zd(Hs("debug",e))}a(IP,"debug");function CP(...e){hr[Pr]<=hr.notify&&Zd(Hs("notify",e))}a(CP,"notify");function PP(...e){hr[Pr]<=hr.fatal&&Dp(Hs("fatal",e))}a(PP,"fatal");function DP(...e){hr[Pr]<=hr.warn&&Dp(Hs("warn",e))}a(DP,"warn");function c2(e,t,...r){t===yP.STDERR?Dp(Hs(e,r)):Zd(Hs(e,r))}a(c2,"logCustomLevel");function l2(){let e;try{e=XQ.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=fi.join(e,Wt.HDB_HOME_DIR_NAME,Wt.BOOT_PROPS_FILE_NAME);return zi.existsSync(t)||(t=fi.join(_A,"utility/hdb_boot_properties.file")),t}a(l2,"getPropsFilePath");function u2(e){Pr=e}a(u2,"setLogLevel");function TP(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(TP,"autoCastBoolean");function d2(e){try{if(e.includes("config/settings.js")){let o=RP(e);return{level:o.get(Wt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:fi.dirname(o.get(Wt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Wt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Wt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=AP.parseDocument(zi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Wt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(d2,"getLogConfig");function f2(){try{let e=AP.parseDocument(zi.readFileSync(t2,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(f2,"getDefaultConfig");function _2(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(_2,"AuthAuditLog")});var pA=P((rAe,vP)=>{"use strict";var h2=require("util"),p2=require("path"),m2=require("child_process"),E2=h2.promisify(m2.execFile),g2=1e3*1e3*10;vP.exports={findPs:S2};async function S2(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await E2("ps",["wwxo",`pid,${r}`],{maxBuffer:g2});for(let s of n.trim().split(`
7
+ `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:p2.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(S2,"findPs")});var Ft=P((sAe,xP)=>{"use strict";var T2="__dbis__",A2="__txns__",R2="__environment_name__",y2="__dbi_defintion__",b2={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"},O2=["__createdtime__","__updatedtime__"],N2="\uFFFF",UP={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},w2=Object.values(UP);xP.exports={AUDIT_STORE_NAME:A2,INTERNAL_DBIS_NAME:T2,DBI_DEFINITION_NAME:y2,SEARCH_TYPES:b2,TIMESTAMP_NAMES:O2,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:R2,TRANSACTIONS_DBI_NAMES_ENUM:UP,TRANSACTIONS_DBIS:w2,OVERFLOW_MARKER:N2}});var Dn=P((iAe,KP)=>{"use strict";var BP=(G(),D($)),HP=Ft(),kP={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},FP=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),GP={500:FP("There was an error processing your request."),400:"Invalid request"},I2=GP[kP.INTERNAL_SERVER_ERROR],C2={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")},P2={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},D2={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"},L2={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${HP.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${HP.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"},M2={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${BP.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 ${BP.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"},qP={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"},v2={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."},U2={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")},x2={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"},B2={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},H2={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")},$P={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")},VP={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")},k2={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"},F2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},G2={...qP,...D2,...C2,...v2,...U2,...x2,...B2,...H2,...M2,...$P,...VP,...k2,...F2,...P2};KP.exports={CHECK_LOGS_WRAPPER:FP,HDB_ERROR_MSGS:G2,DEFAULT_ERROR_MSGS:GP,DEFAULT_ERROR_RESP:I2,HTTP_STATUS_CODES:kP,LMDB_ERRORS_ENUM:L2,AUTHENTICATION_ERROR_MSGS:qP,VALIDATION_ERROR_MSGS:$P,ITC_ERRORS:VP}});var he=P((aAe,zP)=>{"use strict";var Gl=Dn(),q2=X(),$2=(G(),D($)),Lp=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,YP),this.statusCode=n||Gl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Gl.DEFAULT_ERROR_MSGS[n]?Gl.DEFAULT_ERROR_MSGS[n]:Gl.DEFAULT_ERROR_MSGS[Gl.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&&q2[s](i)}},mA=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}},EA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function YP(e,t,r,n=$2.LOG_LEVELS.ERROR,s=null,i=!1){if(WP(e))return e;let o=new Lp(e,t,r,n,s);return i&&delete o.stack,o}a(YP,"handleHDBError");function WP(e){return e.__proto__.constructor.name===Lp.name}a(WP,"isHDBError");zP.exports={isHDBError:WP,handleHDBError:YP,ClientError:mA,ServerError:EA,hdb_errors:Gl}});var gA=P(jP=>{"use strict";var V2={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
8
8
  `),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
9
- `)},Y2="certificate.pem",W2="privateKey.pem",z2="caCertificate.pem",Q2="natsCertificate.pem",j2="natsCaCertificate.pem",Rt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},J2={tls_certificate:Rt.SERVER,tls_certificateAuthority:Rt.CA,customFunctions_tls_certificate:Rt.SERVER,customFunctions_tls_certificateAuthority:Rt.CA,operationsApi_tls_certificate:Rt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:Rt["OPERATIONS-CA"]},X2={[Rt.SERVER]:2,[Rt.DEFAULT]:1},Z2={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},eJ={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},tJ={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},rJ={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},nJ={[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1};Object.assign(QP,{CERTIFICATE_PEM_NAME:Y2,PRIVATEKEY_PEM_NAME:W2,CA_PEM_NAME:z2,CERT_NAME:Rt,CERT_CONFIG_NAME_MAP:J2,CERT_PREFERENCE_APP:X2,CERT_PREFERENCE_OPS:Z2,CERT_PREFERENCE_REP:eJ,CA_CERT_PREFERENCE_REP:tJ,CA_CERT_PREFERENCE_OPS:rJ,CA_CERT_PREFERENCE_APP:nJ,CERTIFICATE_VALUES:K2,NATS_CERTIFICATE_PEM_NAME:Q2,NATS_CA_PEM_NAME:j2})});var nt=P((lAe,jP)=>{"use strict";var on=require("validate.js");on.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||on.validators.type.checks[t](e)?null:` must be a '${t}' value`};on.validators.type.checks={Object:a(function(e){return on.isObject(e)&&!on.isArray(e)},"Object"),Array:on.isArray,Integer:on.isInteger,Number:on.isNumber,String:on.isString,Date:on.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};on.validators.hasValidFileExt=function(e,t){return on.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};jP.exports={validateObject:sJ,validateObjectAsync:iJ,validateBySchema:oJ};function sJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=on(e,t,{format:"flat"});return r?new Error(r):null}a(sJ,"validateObject");async function iJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await on.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(iJ,"validateObjectAsync");function oJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(oJ,"validateBySchema")});var TA=P((fAe,rD)=>{"use strict";var eD=require("fs-extra"),Ee=require("joi"),aJ=require("os"),{boolean:ke,string:ft,number:er,array:Jo}=Ee.types(),{totalmem:JP}=require("os"),uc=require("path"),cJ=X(),SA=oe(),dAe=gA(),XP=(G(),D($)),lJ=nt(),ZP="log",uJ="components",dJ="Invalid logging.rotation.maxSize unit. Available units are G, M or K",fJ="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",_J="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",hJ="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",mJ="rootPath config parameter is undefined",an=Ee.alternatives([er.min(0),ft]).optional().empty(null),vm=Ee.alternatives([Jo.items(ft,{host:ft.required(),port:an},{hostname:ft.required(),port:an}).empty(null),Jo.items(ft)]),_i,tD=!1;rD.exports={configValidator:pJ,routesValidator:RJ,route_constraints:vm};function pJ(e,t=!1){if(tD=t,_i=e.rootPath,SA.isEmpty(_i))throw mJ;let r=ke.optional(),n=er.min(0).max(1e3).empty(null).default(AJ),s=ft.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Zd),i=ft.optional().empty(null),o=ft.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Ee.string().empty(null).default(Zd),l=Ee.custom(gJ).empty(null).default(Zd),u=e.clustering?.enabled,f=Ee.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return u===!0?d=Ee.object({enabled:r,hubServer:Ee.object({cluster:Ee.object({name:Ee.required().empty(null),network:Ee.object({port:an,routes:vm}).required()}).required(),leafNodes:Ee.object({network:Ee.object({port:an}).required()}).required(),network:Ee.object({port:an}).required()}).required(),leafServer:Ee.object({network:Ee.object({port:an,routes:vm}).required(),streams:Ee.object({maxAge:er.min(120).allow(null).optional(),maxBytes:er.min(1).allow(null).optional(),maxMsgs:er.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Ee.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ke.optional(),databaseLevel:ke.optional(),tls:Ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.required(),verify:ke.optional()}),user:ft.optional().empty(null)}).optional():d=Ee.object({enabled:r,tls:Ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.optional()})}).optional(),Ee.object({authentication:Ee.alternatives(Ee.object({authorizeLocal:ke,cacheTTL:er.required(),cookie:Ee.object({domains:Jo.items(ft).optional(),expires:ft.optional()}),enableSessions:ke,hashFunction:ft.valid("md5","sha256","argon2id").optional().empty(null)}),ke).optional(),analytics:Ee.object({aggregatePeriod:er}),replication:Ee.object({hostname:Ee.alternatives(ft,er).optional().empty(null),url:ft.optional().empty(null),port:an,securePort:an,routes:Jo.optional().empty(null),databases:Ee.alternatives(ft,Jo),enableRootCAs:ke.optional(),copyTablesToCatchUp:ke.optional()}).optional(),componentsRoot:s.optional(),clustering:d,localStudio:Ee.object({enabled:r}).required(),logging:Ee.object({auditAuthEvents:Ee.object({logFailed:ke,logSuccessful:ke}),file:ke.required(),level:Ee.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Ee.object({enabled:ke.optional(),compress:ke.optional(),interval:ft.custom(TJ).optional().empty(null),maxSize:ft.custom(SJ).optional().empty(null),path:ft.optional().empty(null).default(Zd)}).required(),root:s,stdStreams:ke.required(),auditLog:ke.required()}).required(),operationsApi:Ee.object({network:Ee.object({cors:ke.optional(),corsAccessList:Jo.optional(),headersTimeout:er.min(1).optional(),keepAliveTimeout:er.min(1).optional(),port:an,domainSocket:Ee.optional().empty("hdb/operations-server").default(Zd),securePort:an,timeout:er.min(1).optional()}).optional(),tls:Ee.alternatives([Ee.array().items(f),f])}).required(),rootPath:ft.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Ee.object({network:Ee.object({port:an,securePort:an,mtls:Ee.alternatives([ke.optional(),Ee.object({user:ft.optional(),certificateAuthority:i,required:ke.optional()})])}).required(),webSocket:ke.optional(),requireAuthentication:ke.optional()}),http:Ee.object({compressionThreshold:er.optional(),cors:ke.optional(),corsAccessList:Jo.optional(),headersTimeout:er.min(1).optional(),port:an,securePort:an,maxHeaderSize:er.optional(),mtls:Ee.alternatives([ke.optional(),Ee.object({user:ft.optional(),certificateAuthority:i,required:ke.optional()})]),threadRange:Ee.alternatives([Jo.optional(),ft.optional()])}).required(),threads:Ee.alternatives(n.optional(),Ee.object({count:n.optional(),debug:Ee.alternatives(ke.optional(),Ee.object({startingPort:er.min(1).optional(),host:ft.optional(),waitForDebugger:ke.optional()})),maxHeapMemory:er.min(0).optional()})),storage:Ee.object({writeAsync:ke.required(),overlappingSync:ke.optional(),caching:ke.optional(),compression:Ee.alternatives([ke.optional(),Ee.object({dictionary:ft.optional(),threshold:er.optional()})]),compactOnStart:ke.optional(),compactOnStartKeepBackup:ke.optional(),noReadAhead:ke.optional(),path:l,prefetchWrites:ke.optional(),maxFreeSpaceToLoad:er.optional(),maxFreeSpaceToRetain:er.optional()}).required(),ignoreScripts:ke.optional(),tls:Ee.alternatives([Ee.array().items(f),f])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(pJ,"configValidator");function EJ(e){return tD||eD.existsSync(e)?null:`Specified path ${e} does not exist.`}a(EJ,"doesPathExist");function gJ(e,t){Ee.assert(e,ft.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=EJ(e);if(r)return t.message(r)}a(gJ,"validatePath");function SJ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(dJ);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(_J):e}a(SJ,"validateRotationMaxSize");function TJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(fJ);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(hJ):e}a(TJ,"validateRotationInterval");function AJ(e,t){let r=t.state.path.join("."),n=aJ.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||JP();return i=Math.round(Math.min(i,JP())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),cJ.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(AJ,"setDefaultThreads");function Zd(e,t){let r=t.state.path.join(".");if(!SA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(SA.isEmpty(_i))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return uc.join(_i,uJ);case"logging.root":return uc.join(_i,ZP);case"clustering.leafServer.streams.path":return uc.join(_i,"clustering","leaf");case"storage.path":let n=uc.join(_i,XP.LEGACY_DATABASES_DIR_NAME);return eD.existsSync(n)?n:uc.join(_i,XP.DATABASES_DIR_NAME);case"logging.rotation.path":return uc.join(_i,ZP);case"operationsApi.network.domainSocket":return r==null?null:uc.join(_i,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Zd,"setDefaultRoot");function RJ(e){let t=Ee.object({routes:vm});return lJ.validateBySchema({routes:e},t)}a(RJ,"routesValidator")});var ql={};Be(ql,{server:()=>Ke});var nD,Ke,Dr=be(()=>{nD=M(ui()),Ke={};(0,nD._assignPackageExport)("server",Ke)});var wt=P(hD=>{"use strict";var cs=(G(),D($)),mr=oe(),tr=X(),{configValidator:yJ,routesValidator:sD}=TA(),Gr=require("fs-extra"),oD=require("yaml"),Mn=require("path"),bJ=require("is-number"),aD=require("properties-reader"),OJ=require("lodash"),{handleHDBError:NJ}=he(),{HTTP_STATUS_CODES:wJ,HDB_ERROR_MSGS:$l}=Dn(),{server:IJ}=(Dr(),D(ql)),{PACKAGE_ROOT:cD}=Et(),{DATABASES_PARAM_CONFIG:ef,CONFIG_PARAMS:Ln,CONFIG_PARAM_MAP:ks}=cs,CJ="Unable to get config value because config is uninitialized",PJ="Config successfully initialized",DJ="Error backing up config file",LJ="Empty parameter sent to getConfigValue",lD=Mn.join(cD,"config","yaml",cs.HDB_DEFAULT_CONFIG_FILE),MJ=Mn.join(cD,"config","yaml","defaultNatsConfig.yaml"),vJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",iD={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"},Um,Nt,xm;Object.assign(hD,{createConfigFile:UJ,getDefaultConfig:xJ,getConfigValue:dD,initConfig:Bm,flattenConfig:Vl,updateConfigValue:fD,updateConfigObject:HJ,getConfiguration:GJ,setConfiguration:qJ,readConfigFile:bA,getClusteringRoutes:$J,initOldConfig:_D,getConfigFromFile:VJ,getConfigFilePath:dc,addConfig:KJ,deleteConfigFromFile:YJ,getConfigObj:WJ,resolvePath:AA,getFlatConfigObj:zJ});function AA(e){if(e?.startsWith("~/"))return Mn.join(mr.getHomeDir(),e.slice(1));let t=ce();try{return Mn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(AA,"resolvePath");function UJ(e,t=!1){let r=Xo(lD);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=oD.parseDocument(Gr.readFileSync(MJ,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Um=Vl(r.toJSON());let n;for(let c in e){let l=ks[c.toLowerCase()];if(l===Ln.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("_"),f=RA(l,e[c]);l==="rootPath"&&f?.endsWith("/")&&(f=f.slice(0,-1));try{r.setIn([...u],f)}catch(d){tr.error(d)}}}n&&uD(r,n),yA(r,t);let s=r.toJSON();Nt=Vl(s);let i=r.getIn(["rootPath"]),o=Mn.join(i,cs.HDB_CONFIG_FILE);if(Gr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Gr.writeFileSync(o,String(r)),tr.trace(`Config file written to ${o}`)}a(UJ,"createConfigFile");function uD(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!mr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(ef.TABLES))for(let i in n[s][ef.TABLES])for(let o in n[s][ef.TABLES][i]){let c=n[s][ef.TABLES][i][o],l=[Ln.DATABASES,s,ef.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=[Ln.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){tr.error("Error parsing schemas CLI/env config arguments",n)}}a(uD,"setSchemasConfig");function xJ(e){if(Um===void 0){let r=Xo(lD);Um=Vl(r.toJSON())}let t=ks[e.toLowerCase()];if(t!==void 0)return Um[t.toLowerCase()]}a(xJ,"getDefaultConfig");function dD(e){if(e==null){tr.info(LJ);return}if(Nt===void 0){tr.trace(CJ);return}let t=ks[e.toLowerCase()];if(t!==void 0)return Nt[t.toLowerCase()]}a(dD,"getConfigValue");function dc(e=mr.getPropsFilePath()){let t=mr.getEnvCliRootPath();if(t)return AA(Mn.join(t,cs.HDB_CONFIG_FILE));let r=aD(e);return AA(r.get(cs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(dc,"getConfigFilePath");function Bm(e=!1){if(Nt===void 0||e){let t;if(!mr.noBootFile()){t=mr.getPropsFilePath();try{Gr.accessSync(t,Gr.constants.F_OK|Gr.constants.R_OK)}catch(i){throw tr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=dc(t),n;if(r.includes("config/settings.js"))try{_D(r);return}catch(i){if(i.code!==cs.NODE_ERROR_CODES.ENOENT)throw i}try{n=Xo(r)}catch(i){if(i.code===cs.NODE_ERROR_CODES.ENOENT){tr.trace(`HarperDB config file not found at ${r}.
10
- This can occur during early stages of install where the config file has not yet been created`);return}else throw tr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}BJ(n,r),yA(n);let s=n.toJSON();if(IJ.config=s,Nt=Vl(s),Nt.logging_rotation_rotate)for(let i in iD)Nt[i]&&tr.error(`Config ${iD[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);tr.trace(PJ)}}a(Bm,"initConfig");function BJ(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Mn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Mn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n){if(tr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Gr.writeFileSync(t,String(e))}}a(BJ,"checkForUpdatedConfig");function yA(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 $l.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 $l.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=yJ(r,t);if(n.error)throw $l.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(yA,"validateConfig");function HJ(e,t){Nt===void 0&&(Nt={});let r=ks[e.toLowerCase()];if(r===void 0){tr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Nt[r.toLowerCase()]=t}a(HJ,"updateConfigObject");function fD(e,t,r=void 0,n=!1,s=!1,i=!1){Nt===void 0&&Bm();let o=dD(ks.hdb_root),c=Mn.join(o,cs.HDB_CONFIG_FILE),l=Xo(c),u;if(r&&Nt){let h=!1;for(let _ in r)if(r[_]!=Nt[_.toLowerCase()]){h=!0;break}if(!h){tr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Ln.DATABASES)u=t;else if(r===void 0){let h;if(i)h=e;else if(h=ks[e.toLowerCase()],h===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let _=h.split("_"),m=RA(h,t);l.setIn([..._],m)}else for(let h in r){let _=ks[h.toLowerCase()];if(_===Ln.HTTP_SECUREPORT&&r[h]===Nt[Ln.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),_===Ln.OPERATIONSAPI_NETWORK_SECUREPORT&&r[h]===Nt[Ln.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),_===Ln.DATABASES){u=r[h];continue}if(_?.startsWith("threads_")){let m=l.getIn(["threads"]);m>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],m))}if(!_&&(h.endsWith("_package")||h.endsWith("_port"))&&(_=h),_!==void 0){let m=_.split("_"),S=cs.LEGACY_CONFIG_PARAMS[h.toUpperCase()];S&&S.startsWith("customFunctions")&&l.hasIn(S.split("_"))&&(_=S,m=S.split("_"));let g=RA(_,r[h]);_==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{m.length>1&&typeof l.getIn(m.slice(0,-1))=="boolean"&&l.deleteIn(m.slice(0,-1)),l.setIn([...m],g)}catch(R){tr.error(R)}}}u&&uD(l,u),yA(l);let f=l.getIn(["rootPath"]),d=Mn.join(f,cs.HDB_CONFIG_FILE);if(n===!0&&kJ(c,f),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Gr.writeFileSync(d,String(l)),s&&(Nt=Vl(l.toJSON())),tr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(fD,"updateConfigValue");function kJ(e,t){try{let r=Mn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${cs.HDB_CONFIG_FILE}.bak`);Gr.copySync(e,r),tr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){tr.error(DJ),tr.error(r)}}a(kJ,"backupConfigFile");var FJ=["databases"];function Vl(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}),xm=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])&&!FJ.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;!Ln[l.toUpperCase()]&&ks[l]&&(s[ks[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Vl,"flattenConfig");function RA(e,t){if(e===Ln.CLUSTERING_NODENAME||e===Ln.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(bJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||mr.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 mr.autoCast(t)}a(RA,"castConfigValue");function GJ(){let e=mr.getPropsFilePath(),t=dc(e);return Xo(t).toJSON()}a(GJ,"getConfiguration");async function qJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return fD(void 0,void 0,s,!0),vJ}catch(i){throw typeof i=="string"||i instanceof String?NJ(i,i,wJ.BAD_REQUEST,void 0,void 0,!0):i}}a(qJ,"setConfiguration");function bA(){let e=mr.getPropsFilePath();try{Gr.accessSync(e,Gr.constants.F_OK|Gr.constants.R_OK)}catch(n){if(!mr.noBootFile())throw tr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=dc(e);return Xo(t).toJSON()}a(bA,"readConfigFile");function Xo(e){return oD.parseDocument(Gr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Xo,"parseYamlDoc");function $J(){let e=bA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=mr.isEmptyOrZeroLength(t)?[]:t;let r=sD(t);if(r)throw $l.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=mr.isEmptyOrZeroLength(n)?[]:n;let s=sD(n);if(s)throw $l.CONFIG_VALIDATION(s.message);if(!mr.isEmptyOrZeroLength(n)&&!mr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!mr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw $l.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a($J,"getClusteringRoutes");function _D(e){let t=aD(e);Nt={};for(let r in ks){let n=t.get(r.toUpperCase());if(mr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ks[r].toLowerCase();s===Ln.LOGGING_ROOT?Nt[s]=Mn.dirname(n):Nt[s]=n}return Nt}a(_D,"initOldConfig");function VJ(e){let t=bA();return OJ.get(t,e.replaceAll("_","."))}a(VJ,"getConfigFromFile");async function KJ(e,t){let r=Xo(dc());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await Gr.writeFile(dc(),String(r))}a(KJ,"addConfig");function YJ(e){let t=dc(mr.getPropsFilePath()),r=Xo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Mn.join(n,cs.HDB_CONFIG_FILE);Gr.writeFileSync(s,String(r))}a(YJ,"deleteConfigFromFile");function WJ(){return xm||(Bm(),xm)}a(WJ,"getConfigObj");function zJ(){return Nt||Bm(),Nt}a(zJ,"getFlatConfigObj")});var ce=P((SD,TD)=>{"use strict";var OA=require("fs-extra"),fc=require("path"),mD=require("os"),QJ=require("properties-reader"),rf=X(),tf=oe(),Me=(G(),D($)),Hm=wt(),jJ="Error initializing environment manager",km="BOOT_PROPS_FILE_PATH",pD=!1,JJ={[Me.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Me.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Qi={};Object.assign(SD,TD.exports={BOOT_PROPS_FILE_PATH:km,getHdbBasePath:XJ,setHdbBasePath:ZJ,get:ED,initSync:t4,setProperty:ze,initTestEnvironment:n4,setCloneVar:r4});function XJ(){return Qi[Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(XJ,"getHdbBasePath");function ZJ(e){Qi[Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ZJ,"setHdbBasePath");function ED(e){let t=Hm.getConfigValue(e);return t===void 0?Qi[e]:t}a(ED,"get");function ze(e,t){JJ[e]&&(Qi[e]=t),Hm.updateConfigObject(e,t)}a(ze,"setProperty");function e4(){let e;try{e=tf.getPropsFilePath(),OA.accessSync(e,OA.constants.F_OK|OA.constants.R_OK),pD=!0;let t=QJ(e);return Qi[Me.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Me.HDB_SETTINGS_NAMES.INSTALL_USER),Qi[Me.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Me.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Qi[km]=e,!0}catch{return rf.trace(`Environment manager found no properties file at ${e}`),!1}}a(e4,"doesPropFileExist");function t4(e=!1){try{((pD||e4()||tf.noBootFile())&&!gD||e)&&(Hm.initConfig(e),Qi[Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Hm.getConfigValue(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){rf.error(jJ),rf.error(t),console.error(t),process.exit(1)}}a(t4,"initSync");var gD=!1;function r4(e){gD=e}a(r4,"setCloneVar");function n4(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=fc.join(__dirname,"../../","unitTests");Qi[km]=fc.join(l,"hdb_boot_properties.file"),ze(Me.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,fc.join(l,"settings.test")),ze(Me.HDB_SETTINGS_NAMES.INSTALL_USER,mD.userInfo()?mD.userInfo().username:void 0),ze(Me.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ze(Me.HDB_SETTINGS_NAMES.LOG_PATH_KEY,fc.join(l,"envDir","log")),ze(Me.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ze(Me.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ze(Me.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ze(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,fc.join(l,"envDir")),ze(Me.CONFIG_PARAMS.STORAGE_PATH,fc.join(l,"envDir")),s&&(ze(Me.CONFIG_PARAMS.HTTP_SECUREPORT,ED(Me.CONFIG_PARAMS.HTTP_PORT)),ze(Me.CONFIG_PARAMS.HTTP_PORT,null)),ze(Me.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ze(Me.CONFIG_PARAMS.HTTP_PORT,9926),ze(Me.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ze(Me.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),ze(Me.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,tf.isEmpty(i)?!1:i),ze(Me.CONFIG_PARAMS.HTTP_CORS,tf.isEmpty(i)?!1:i),ze(Me.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ze(Me.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ze(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ze(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ze(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,fc.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ze(Me.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,tf.isEmpty(c)?!1:c),o&&(ze("CORS_ACCESSLIST",o),ze(Me.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ze(Me.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ze(Me.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ze(Me.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ze(Me.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ze(Me.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ze(Me.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${km}. Please check your boot props and settings files`;rf.fatal(r),rf.error(t)}}a(n4,"initTestEnvironment")});var gt=P((EAe,wD)=>{"use strict";var cf=(G(),D($)),s4=oe(),cn=ce(),lf=require("path"),i4=require("minimist"),AD=require("fs-extra"),RD=require("lodash");cn.initSync();var{CONFIG_PARAMS:Zo,DATABASES_PARAM_CONFIG:nf,SYSTEM_SCHEMA_NAME:Fm}=cf,sf,of,af;function yD(){if(sf!==void 0)return sf;if(cn.getHdbBasePath()!==void 0)return sf=cn.get(Zo.STORAGE_PATH)||lf.join(cn.getHdbBasePath(),cf.DATABASES_DIR_NAME),sf}a(yD,"getBaseSchemaPath");function bD(){if(of!==void 0)return of;if(cn.getHdbBasePath()!==void 0)return of=ND(Fm),of}a(bD,"getSystemSchemaPath");function OD(){if(af!==void 0)return af;if(cn.getHdbBasePath()!==void 0)return af=cn.get(cf.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||lf.join(cn.getHdbBasePath(),cf.TRANSACTIONS_DIR_NAME),af}a(OD,"getTransactionAuditStoreBasePath");function o4(e,t){let r=cn.get(Zo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||lf.join(OD(),e.toString())}a(o4,"getTransactionAuditStorePath");function ND(e,t){e=e.toString(),t=t&&t.toString();let r=cn.get(cf.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||lf.join(yD(),e)}a(ND,"getSchemaPath");function a4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,i4(process.argv));let n=r[Zo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!s4.isObject(n))throw o;i=n}for(let o of i){let c=o[Fm];if(!c)continue;let l=cn.get(Zo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[nf.PATH];if(u)return RD.set(l,[Fm,nf.TABLES,t,nf.PATH],u),cn.setProperty(Zo.DATABASES,l),u;let f=c?.[nf.PATH];if(f)return RD.set(l,[Fm,nf.PATH],f),cn.setProperty(Zo.DATABASES,l),f}}let s=r[Zo.STORAGE_PATH.toUpperCase()];if(s){if(!AD.pathExistsSync(s))throw new Error(s+" does not exist");let i=lf.join(s,e);return AD.mkdirsSync(i),cn.setProperty(Zo.STORAGE_PATH,s),i}return bD()}a(a4,"initSystemSchemaPaths");function c4(){sf=void 0,of=void 0,af=void 0}a(c4,"resetPaths");wD.exports={getBaseSchemaPath:yD,getSystemSchemaPath:bD,getTransactionAuditStorePath:o4,getTransactionAuditStoreBasePath:OD,getSchemaPath:ND,initSystemSchemaPaths:a4,resetPaths:c4}});var ln=P((AAe,LD)=>{"use strict";var l4=Dn().LMDB_ERRORS_ENUM,SAe=require("lmdb"),u4=Ft(),TAe=require("buffer").Buffer,{OVERFLOW_MARKER:ID,MAX_SEARCH_KEY_LENGTH:Gm}=u4,CD=["number","string","symbol","boolean","bigint"];function d4(e){if(e=e?.primaryStore||e,!e)throw new Error(l4.ENV_REQUIRED)}a(d4,"validateEnv");function f4(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(f4,"stringifyData");function _4(e){return e instanceof Date?e.valueOf():e}a(_4,"convertKeyValueToWrite");function h4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(CD.includes(typeof e))return e.length>Gm?[e.slice(0,Gm)+ID]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(CD.includes(typeof i))i.length>Gm?r.push(i.slice(0,Gm)+ID):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(h4,"getIndexedValues");var qm=0,PD=0;function DD(){PD=Date.now()-performance.now()}a(DD,"adjustStartTime");DD();var m4=6e4;setInterval(DD,m4).unref();function p4(){let e=performance.now()+PD;return e>qm?(qm=e,e):(qm+=488e-6,qm)}a(p4,"getNextMonotonicTime");LD.exports={validateEnv:d4,stringifyData:f4,convertKeyValueToWrite:_4,getNextMonotonicTime:p4,getIndexedValues:h4}});var uf=P((yAe,MD)=>{"use strict";var E4=(G(),D($)).OPERATIONS_ENUM,NA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=E4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};MD.exports=NA});var df=P((NAe,BD)=>{"use strict";var OAe=uf(),$m=(G(),D($)),wA=oe(),vD=X(),g4=require("uuid"),{handleHDBError:Vm,hdb_errors:S4}=he(),{HDB_ERROR_MSGS:Km,HTTP_STATUS_CODES:Ym}=S4;BD.exports=UD;function UD(e,t,r){for(let s=0;s<t.length;s++)xD(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];T4(i,r,e.operation)}}a(UD,"processRows");UD.validateAttribute=xD;function xD(e){if(Buffer.byteLength(String(e))>$m.INSERT_MAX_CHARACTER_SIZE)throw Vm(new Error,Km.ATTR_NAME_LENGTH_ERR(e),Ym.BAD_REQUEST,void 0,void 0,!0);if(wA.isEmptyOrZeroLength(e)||wA.isEmpty(e.trim()))throw Vm(new Error,Km.ATTR_NAME_NULLISH_ERR,Ym.BAD_REQUEST,void 0,void 0,!0)}a(xD,"validateAttribute");function T4(e,t,r){if(!e.hasOwnProperty(t)||wA.isEmptyOrZeroLength(e[t])){if(r===$m.OPERATIONS_ENUM.INSERT||r===$m.OPERATIONS_ENUM.UPSERT){e[t]=g4.v4();return}throw vD.error("Update transaction aborted due to record with no hash value:",e),Vm(new Error,Km.RECORD_MISSING_HASH_ERR,Ym.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>$m.INSERT_MAX_CHARACTER_SIZE)throw vD.error(e),Vm(new Error,Km.HASH_VAL_LENGTH_ERR,Ym.BAD_REQUEST,void 0,void 0,!0)}a(T4,"validateHash")});var HD,vn,IA,Kl=be(()=>{HD=require("events"),vn=class extends HD.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new IA;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)}},IA=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function KD(e){PA=e}function b4(){y4=setInterval(function(){for(let e of CA)if(e.stale){let t=e.getContext()?.url;qD.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},R4).unref()}var DA,GD,qD,$D,VD,kD,CA,A4,ff,FD,PA,_c,Wm,R4,y4,zm=be(()=>{DA=M(ln()),GD=M(he()),qD=M(X()),$D=M(ce());G();VD=M(oe()),kD=100,CA=new Set,A4=(0,VD.convertToMS)($D.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(KD,"replicationConfirmation");_c=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),CA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(CA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(ff&&!this.overloadChecked&&performance.now()-FD>A4)throw new GD.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,DA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let _=d;_<this.validated;_++)this.writes[_]?.validate?.(this.timestamp);let h;for(let _=d;_<this.validated;_++){let m=this.writes[_];m&&(m.before||m.beforeIntermediate)&&(h=!0)}if(h)return(async()=>{try{for(let _=0;_<2;_++){let m;for(let S=d;S<this.validated;S++){let g=this.writes[S];if(!g)continue;let R=g[_===0?"before":"beforeIntermediate"];if(R){let E=R();m?m.push?m.push(E):m=[m,E]:m=E}}m&&await(m.push?Promise.all(m):m)}}catch(_){throw this.abort(),_}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.doneWriting?2:1;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let h=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||h}else l();else for(let h of this.writes)c(h)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<kD>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return ff||(ff=s,FD=performance.now(),ff.then(()=>{ff=null})),s.then(d=>{if(d){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let h=this.writes[0].store.rootStore.databaseName,_=this.writes[this.writes.length-1];PA&&_&&i.push(PA(h,_.store.getEntry(_.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+kD/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let f={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(h=>({txnTime:r,next:h}));f.next=d}return f}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},Wm=class extends _c{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,DA.getNextMonotonicTime)())}getReadTxn(){}},R4=3e4;a(b4,"startMonitoringTxns");b4()});function It(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new _c;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 YD,hc=be(()=>{YD=M(ui());zm();a(It,"transaction");(0,YD._assignPackageExport)("transaction",It);It.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};It.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function MA(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=u(l);for(let _=1;_<e.length;_++){let m=e[_],S=u(m);d=d.concat(S)}let h=new Set;return d.filter(_=>{let m=_.key??_;return h.has(m)?!1:(h.add(m),!0)})}else{let d=u(l),h=f(e.slice(1),!0,l.estimated_count);return h.length>0?o(d,h):d}function u(d){return d.conditions?MA(d.conditions,d.operator,r,n,s,i,o,c):zl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(u,"executeCondition");function f(d,h,_){return d.map((m,S)=>{if(m.conditions){let E=m.operator==="or",T=f(m.conditions,!E,_);return E?(O,v)=>T.some(F=>F(O,v)):(O,v)=>T.every(F=>F(O,v))}let g=(m.attribute||m[0])===r.primaryKey,R=mf(m,r,i,c,g,_);return h&&S<d.length-1&&_&&(_=M4(r.primaryStore,m.estimated_count,_)),R}).filter(Boolean)}a(f,"mapConditionsToFilters")}function zl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(c===void 0&&l!=="sort")throw new dn.ClientError(`Search condition for ${o} must have a value`);if(Array.isArray(o)){let E=o[0],T=mi(n.attributes,E);if(T.relationship){if(o.length<2)throw new dn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=T.definition?.tableClass||T.elements?.definition?.tableClass,v=new Map,F=zl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,O,s,v);if(T.relationship.to){i[o[0]]=v;let q=!!mi(O.attributes,T.relationship.to)?.elements;F=C4(F,T,O.primaryStore,q,v)}if(T.relationship.from){let q=a(Q=>(Q?.key!==void 0&&(Q=Q.key),zl({attribute:T.relationship.from,value:Q},t,r,n,s,v)),"searchEntry");T.elements?(i[o[0]]=v,F=P4(F,T,O.primaryStore,v,q)):F=F.flatMap(q)}return F}else if(o.length===1)o=o[0];else throw new dn.ClientError("Unable to query by attribute "+JSON.stringify(o))}let u,f,d,h;c instanceof Date&&(c=c.getTime());let _;switch(vA[l]||l){case"lt":u=!0,f=c;break;case"le":u=!0,f=c,d=!0;break;case"gt":u=c,h=!0;break;case"ge":u=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],u=c,f=c.slice(0),f[f.length-1]=hi.MAXIMUM_KEY;break;case"starts_with":u=c.toString(),f=c+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":u=c[0],u instanceof Date&&(u=u.getTime()),f=c[1],f instanceof Date&&(f=f.getTime()),d=l==="gele"||l==="gtle"||l==="between",h=l==="gtlt"||l==="gtle";break;case"equals":case void 0:u=c,f=c,d=!0;break;case"ne":if(c===null){u=c,h=!0;break}case"sort":case"contains":case"ends_with":u=!0,_=!0;break;default:throw new dn.ClientError(`Unknown query comparator "${l}"`)}let m,S=o===n.primaryKey||o==null;if(typeof u=="string"&&u.length>ls.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,ls.MAX_SEARCH_KEY_LENGTH)+ls.OVERFLOW_MARKER,h=!1,m=mf(e,n,null,i,S)),typeof f=="string"&&f.length>ls.MAX_SEARCH_KEY_LENGTH&&(f=f.slice(0,ls.MAX_SEARCH_KEY_LENGTH)+ls.OVERFLOW_MARKER,d=!0,m=m??mf(e,n,null,i,S)),r){let E=u;u=f,f=E,E=!h,h=!d,d=E}let g=S?n.primaryStore:n.indices[o];if(!g||g.isIndexing||_||c===null&&!g.indexNulls){if(s===!1&&!g)throw new dn.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new dn.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(g?.isIndexing)throw new dn.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&g&&!g.indexNulls)throw new dn.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(m=m??mf(e,n,null,i,S),!m)throw new dn.ClientError(`Unknown search operator ${e.comparator}`)}let R={start:u,end:f,inclusiveEnd:d,exclusiveStart:h,values:!0,versions:S,transaction:t,reverse:r};if(S){let E=g.getRange(R).map(m?function({key:T,value:O}){return this?.isSync?O&&m(O)?T:ea.SKIP:new Promise((v,F)=>setImmediate(()=>{try{v(O&&m(O)?T:ea.SKIP)}catch(q){F(q)}}))}:T=>T.value==null&&!(T.metadataFlags&(fn|ra))?ea.SKIP:T);return E.hasEntries=!0,E}else return g?g.getRange(R).map(m?function({key:E,value:T}){let O;return typeof E=="string"&&E.length>ls.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(T):O={[o]:E},this.isSync?m(O)?T:ea.SKIP:new Promise((v,F)=>setImmediate(()=>{try{v(m(O)?T:ea.SKIP)}catch(q){F(q)}}))}:({value:E})=>E):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:E,value:T}){return this.isSync?T&&m(T)?E:ea.SKIP:new Promise((O,v)=>setImmediate(()=>{try{O(T&&m(T)?E:ea.SKIP)}catch(F){v(F)}}))})}function mi(e,t){if(Array.isArray(t))if(t.length>1){let r=mi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?mi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function C4(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,f)=>{let d=s.get(u);d?d.push(f):s.set(u,d=[f])},"add_entry");for(let u of e){let f=u.value??r.get(u.key??u),d=f?.[c];if(d!=null&&!s.filters?.some(h=>!h(f)))if(n)for(let h=0;h<d.length;h++)l(d[h],u);else l(d,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 P4(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=f=>f[t.relationship.from]?.filter?.(d=>u.has(d));for(let f of e){if(n.filters){let d=r.get(f);if(n.filters.some(h=>!h(d)))continue}u.add(f)}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 mf(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 f=c[0],d=mi(t.attributes,f),h=d.definition?.tableClass||d.elements.definition?.tableClass,_=n?.[f],m=mf({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},h,r,_?.[f]?.joined,c[1]===h.primaryKey,i);if(!m)return;if(_){_.filters||(_.filters=[]),_.filters.push(m);return}let S=t.propertyResolvers?.[f],g,R=a((E,T)=>{let O,v;if(S){if(S.from&&m.idFilter){if(!g)if(m.idFilter.idSet?.size===1){for(let q of m.idFilter.idSet)e={attribute:S.from,value:q};g=u(S.from,m.idFilter,!0,!0)}else g=u(S.from,m.idFilter,!1,!0);let F=g(E);return g.idFilter&&(R.idFilter=g.idFilter),F}v=S(E,r,T),O=v?.value}else O=E[f];return O?Array.isArray(O)?O.some(m):m(O,v):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),vA[o]||o){case ls.SEARCH_TYPES.EQUALS:case void 0:return u(c,f=>f===l,!0);case"contains":return u(c,f=>f?.toString().includes(l));case"ends_with":return u(c,f=>f?.toString().endsWith(l));case"starts_with":return u(c,f=>typeof f=="string"&&f.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,f=>{if(!Array.isArray(f))return!1;for(let d=0,h=l.length;d<h;d++)if(f[d]!==l[d])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,f=>(0,hi.compareKeys)(f,l[0])>=0&&(0,hi.compareKeys)(f,l[1])<=0,!0);case"gt":return u(c,f=>(0,hi.compareKeys)(f,l)>0);case"ge":return u(c,f=>(0,hi.compareKeys)(f,l)>=0);case"lt":return u(c,f=>(0,hi.compareKeys)(f,l)<0);case"le":return u(c,f=>(0,hi.compareKeys)(f,l)<=0);case"ne":return u(c,f=>(0,hi.compareKeys)(f,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new dn.ClientError(`Unknown query comparator "${o}"`)}function u(f,d,h,_){let m;h=h&&!s&&t?.indices[f]&&i>3,h&&(e.estimated_count==null&&jm(t)(e),m=e.estimated_count>>4,(isNaN(m)||m>=i)&&(h=!1));let S=0,g=3;function R(E){let T=E[f],O;if(typeof T!="object"||!T||_?O=d(T):Array.isArray(T)?O=T.some(d):T instanceof Date&&(O=d(T.getTime())),h&&(g++,!O&&!R.idFilter&&++S/g*(i-g)>m)){let v=zl(e,r.transaction.getReadTxn(),!1,t).map(Ql),F=new Set(v);R.idFilter=q=>F.has(Ql(q)),R.idFilter.idSet=F}return O}return a(R,"recordFilter"),s&&(R.idFilter=d),R}a(u,"attributeComparator")}function jm(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/ji(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=vA[n]||n,n===ls.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=mi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=jm(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*ji(e.indices[i.relationship.from])/(ji(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=ji(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=w4*ji(e.primaryStore)+1:n==="between"?r.estimated_count=N4*ji(e.primaryStore)+1:n==="sort"?r.estimated_count=ji(e.primaryStore)+1:r.estimated_count=O4*ji(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Jm(e){if(e)if(ta=e,Yl.lastIndex=0,D4.test(e))try{let t=_f(new Wl,"");if(un!==ta.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${un} in '${ta}'`,t}else return new URLSearchParams(e)}function _f(e,t){let r=Yl,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(ta);){un=r.lastIndex;let[,f,d]=n;if(o){if(f)throw new SyntaxError(`expected operator, but encountered '${f}'`);o=!1,c=!1}else c=!0;let h;switch(d){case"=":if(s!=null){if(f.length<=2)i=f;else throw new SyntaxError(`invalid FIQL operator ${f}`);l=WD}else{if(l=decodeURIComponent,i="equals",!f)throw new SyntaxError("attribute must be specified before equality comparator");s=hf(f)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=I4[d],l=LA[i]?WD:decodeURIComponent,!f)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=hf(f);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let m={comparator:i,attribute:s||null,value:l(f)};if(i==="eq"&&zD(m,f),s===""){let S=e.conditions[e.conditions.length-1];S.chainedConditions=S.chainedConditions||[],S.chainedConditions.push(m),S.operator=u}else Qm(e,u),e.conditions.push(m)}d==="&"?(u="and",s=void 0):d==="|"?(u="or",s=void 0):d==="&="?(u="and",s=""):d==="|="&&(u="or",s="");break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(hf(f)),s=void 0;break;case"(":Yl.lastIndex=un;let _=_f(f?[]:new Wl,")");switch(f){case"":Qm(e,u),e.conditions.push(_);break;case"limit":switch(_.length){case 1:e.limit=+_[0];break;case 2:e.offset=+_[0],e.limit=_[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(_[0])&&_.length===1&&!_[0].name?(e.select=_[0],e.select.asArray=!0):_.length===1?e.select=_[0]:_.length===2&&_[1]===""?e.select=_.slice(0,1):e.select=_;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=QD(_);break;default:throw new SyntaxError(`unknown query function call ${f}`)}ta[un]===","?r.lastIndex=++un:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!f)throw new SyntaxError("property sets must have a defined parent property name");Yl.lastIndex=un,h=_f([],"}"),h.name=f,e.push(h),ta[un]===","?r.lastIndex=++un:o=!0;break;case"[":Yl.lastIndex=un,f?(h=_f(new Wl,"]"),h.name=f):h=_f(e.conditions?new Wl:[],"]"),e.conditions?(Qm(e,u),e.conditions.push(h),s=null):e.push(h),ta[un]===","?r.lastIndex=++un:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let m={comparator:i||"equals",attribute:s,value:l(f)};i==="eq"&&zD(m,f),Qm(e,u),e.conditions.push(m)}else if(f)throw new SyntaxError("no attribute or comparison specified")}else(f||e.length>0&&c)&&e.push(hf(f));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?L4:Yl,r.lastIndex=un),un===ta.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Qm(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function hf(e){return e.indexOf(".")>-1?e.split(".").map(hf):decodeURIComponent(e)}function WD(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 dn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function zD(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new dn.ClientError("wildcard can only be used at the end of a string")}function QD(e){let t=jD(e[0]);return e.length>1&&(t.next=QD(e.slice(1))),t}function jD(e){if(Array.isArray(e)){let t=jD(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function Ql(e){return Array.isArray(e)?e.join("\0"):e}function ji(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function M4(e,t,r){return t*r/ji(e)}var dn,ls,hi,ea,O4,N4,w4,I4,LA,vA,D4,Yl,L4,un,ta,Wl,mc,pf=be(()=>{dn=M(he()),ls=M(Ft()),hi=require("ordered-binary"),ea=require("lmdb");Ef();O4=.3,N4=.1,w4=.05,I4={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},LA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(MA,"executeConditions");a(zl,"searchByIndex");a(mi,"findAttribute");a(C4,"joinTo");a(P4,"joinFrom");vA={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(mf,"filterByType");a(jm,"estimateCondition");D4=/[()[\]|!<>.]|(=\w*=)/,Yl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,L4=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Jm,"parseQuery");a(_f,"parseBlock");a(Qm,"assignOperator");a(hf,"decodeProperty");a(WD,"typedDecoding");a(zD,"wildcardDecoding");a(QD,"toSortObject");a(jD,"toSortEntry");Wl=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Ql,"flattenKey");a(ji,"estimatedEntryCount");a(M4,"intersectionEstimate");mc=class{constructor(t){this.url=t}static{a(this,"SimpleURLQuery")}get(){}[Symbol.iterator](){return[][Symbol.iterator]()}}});var xA={};Be(xA,{MultiPartId:()=>Zm,Resource:()=>qr,snake_case:()=>U4,transformForSelect:()=>ep});function U4(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function JD(e,t){if(pc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(pc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Zm;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){pc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return pc=!0,null;e[e.length-1]==="/"&&(pc=!0)}return t.coerceId(decodeURIComponent(e))}function Un(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,f;if(r?(o?(f=i,o=o.getContext?.()||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(f=s,c=f[this.primaryKey]??null,o=i.getContext?.()||i):f=i:(f=s,s=void 0,c=f.getId?.()??f[this.primaryKey]),c===null&&(u=!0)):i?o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="object"&&s){if(l=s,typeof(c=s.url)=="string")if(this.directURLMapping)c=c.slice(1);else{let _=c.indexOf("?");if(_>-1){let S=this.parseQuery(c.slice(_+1));l?S&&(l=Object.assign(S,l)):l=S,c=c.slice(0,_)}let m=this.parsePath(c,o,l);m?.id!==void 0?(m.query&&(l?l=Object.assign(m.query,l):l=m.query),u=m.isCollection,c=m.id):c=m}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new mc(c),c==null&&(u=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||u?(d={...t},l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),u&&(d.isCollection=!0)):d=t,o.transaction){let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)}else return It(o,()=>{let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)},d);function h(_){if(o.authorize){o.authorize=!1;let m=t.type==="read"?_.allowRead(o.user,l,o):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(o.user,f,o):_.allowUpdate(o.user,f,o):t.type==="create"?_.allowCreate(o.user,f,o):_.allowDelete(o.user,l,o);if(m?.then)return m.then(S=>{if(!S)throw new Xm(o.user);return typeof f?.then=="function"?f.then(g=>e(_,l,o,g)):e(_,l,o,f)});if(!m)throw new Xm(o.user)}return typeof f?.then=="function"?f.then(m=>e(_,l,o,m)):e(_,l,o,f)}a(h,"authorizeActionOnResource")}}function xn(e,t){let r=new eL.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 UA(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 ep(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):UA(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=[],f=i(UA(l,r,n));for(let d of e)u.push(f(d));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(h=>h&&typeof h=="object"?c(h):h);let u={},f=i(UA(l,r,n)),d;for(let h of e){let _=f(h);_===void 0&&o&&(_=null),_?.then?(d||(d=[]),d.push(_.then(m=>u[h.name||h]=m))):u[h.name||h]=_}return d?Promise.all(d).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 f=r[c.name]?.definition?.tableClass;l=s[c.name]=ep(c.select||c,f)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var XD,ZD,eL,v4,qr,Xm,pc,Zm,na=be(()=>{XD=require("crypto");Kl();ZD=M(ui()),eL=M(he());hc();pf();v4={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qr=class{static{a(this,"Resource")}#e;#t;#n;static transactions;static directURLMapping=!1;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=Un(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=ep(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Un(function(t,r,n,s){if(Array.isArray(s)&&t.#n){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,u=l.getResource(c[l.primaryKey],n,{async:!0});u.then?i.push(u.then(f=>f.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):xn(t,"put")},{hasContent:!0,type:"update"});static patch=Un(function(t,r,n,s){return t.patch?t.patch(s,r):xn(t,"patch")},{hasContent:!0,type:"update"});static delete=Un(function(t,r,n,s){return t.delete?t.delete(r):xn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,XD.randomUUID)()}static create(t,r,n){let s;return t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n||(n={}),It(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):xn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=Un(function(t,r,n,s){return t.invalidate?t.invalidate(r):xn(t,"delete")},{hasContent:!1,type:"update"});static post=Un(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Un(function(t,r,n,s){return t.connect?t.connect(s,r):xn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Un(function(t,r,n,s){return t.subscribe?t.subscribe(r):xn(t,"subscribe")},{type:"read"});static publish=Un(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.publish(s,r):xn(t,"publish")},{hasContent:!0,type:"create"});static search=Un(function(t,r,n,s){let i=t.search?t.search(r):xn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=ep(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Un(function(t,r,n,s){return t.search?t.search(s,r):xn(t,"search")},{hasContent:!0,type:"read"});static copy=Un(function(t,r,n,s){return t.copy?t.copy(s,r):xn(t,"copy")},{hasContent:!0,type:"create"});static move=Un(function(t,r,n,s){return t.move?t.move(s,r):xn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;xn(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t){return Jm(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&v4[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:JD(t,this),isCollection:pc}}let i=JD(t,this);return pc?{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(f=>f.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 f of l){let d=f.#e,h=u.get(d);h?h.push(f):u.set(d,[f])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new vn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new vn}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,ZD._assignPackageExport)("Resource",qr);a(U4,"snake_case");Xm=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(JD,"pathToId");Zm=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Un,"transactional");a(xn,"missingMethod");a(UA,"selectFromObject");a(ep,"transformForSelect")});var sa,BA=be(()=>{sa=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var nL={};Be(nL,{Resources:()=>tp,keyArrayToString:()=>jl,resetResources:()=>x4,resources:()=>us});function x4(){return us=new tp,Ke.resources=us,us}function jl(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var tL,rL,tp,us,Jl=be(()=>{hc();BA();tL=M(X()),rL=M(he());Dr();tp=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new rL.ServerError(`Conflicting paths for ${t}`);tL.default.error(c),i.Resource=new sa(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let f=this.get(c.slice(0,u));f&&(f.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),f=this.get(u),d=-1;if(!f&&n===o&&(d=u.indexOf("?",s),d!==-1)){let h=u.slice(0,d);f=this.get(h)}if(f&&(!r||f.exportTypes?.[r]!==!1)){if(f.relativeURL=t.slice(d!==-1?d:n),!f.hasSubPaths)return f;i=f}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 It(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(x4,"resetResources");a(jl,"keyArrayToString")});var HA=P((JAe,sL)=>{if(__filename.endsWith("dev.js")){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:o,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:f,spawn:d}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:h}=Et(),_=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],m="ts-build";if(u){let R=!1,E=!1;if(E=s(n(h,m))){let T=new Set;e.sync(_.map(O=>`${O}/**/*.ts`),{cwd:h}).forEach(O=>{let v=0,F=0;try{T.add(O),v=i(n(h,O)).mtimeMs-5e3,F=i(n(h,m,O.replace(/.ts$/,".js"))).mtimeMs}catch{}v>F&&(R=!0)}),e.sync(_.map(O=>`${O}/**/*.js`),{cwd:n(h,m)}).forEach(O=>{if(!T.has(O.replace(/.js$/,".ts")))try{l(n(h,m,O))}catch{}})}else R=!0;if(R){console.log("Compiling TypeScript...");let T=f("npx",["tsc"],{cwd:h});if(T.stdout?.length&&console.log(T.stdout.toString()),T.stderr?.length&&console.log(T.stderr.toString()),E){let O=n(t(),"harperdb-tsc.pid"),v=!1;if(s(O))try{process.kill(+o(O,"utf8"),0),v=!0}catch{}if(!v){console.log("Starting background TypeScript compilation...");let F=d("npx",["tsc","--watch"],{detached:!0,cwd:h,stdio:"ignore"});F.on("error",q=>{console.error("Error trying to compile TypeScript",q)}),F.pid&&c(O,String(F.pid),"utf-8"),F.unref()}}}}let S=sL.constructor,g=S._findPath;S._findPath=function(R,E,T){if(R.startsWith(".")&&!T&&E.length===1&&E[0].startsWith(h)&&!E[0].includes("node_modules")){let O=r(h,E[0]),v;O.startsWith(m)?v=n(h,r(m,O)):v=n(h,m,O);let F=n(v,R),q=F+".js";if(s(q))return q;if(F.includes(".")&&s(F))return F}return g(R,E,T)}}});var GA={};Be(GA,{loadGQLSchema:()=>k4,start:()=>FA,startOnMainThread:()=>H4});function FA({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:f}=await import("graphql"),d=o(new c(r.toString(),s)),h=new Map,_=[],m;for(let R of d.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(Q){if(Q.kind==="NonNullType"){let z=F(Q.type);return z.nullable=!1,z}if(Q.kind==="ListType")return{type:"array",elements:F(Q.type)};let se={type:Q.name?.value};return Object.defineProperty(se,"location",{value:Q.loc.startToken}),se};a(F,"getProperty");let E=R.name.value,T=[],O={table:null,database:null,properties:T};h.set(E,O);for(let Q of R.directives){if(Q.name.value==="table"){for(let se of Q.arguments)O[se.name.value]=se.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=E),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,_.push(O)}if(Q.name.value==="sealed"&&(O.sealed=!0),Q.name.value==="splitSegments"&&(O.splitSegments=!0),Q.name.value==="replicate"&&(O.replicate=!0),Q.name.value==="export"){O.export=!0;for(let se of Q.arguments)typeof O.export!="object"&&(O.export={}),O.export[se.name.value]=se.value.value}}let v=!1,q={};for(let Q of R.fields){let te=F(Q.type);te.name=Q.name.value,T.push(te),q[te.name]=void 0;for(let se of Q.directives){let z=se.name.value;if(z==="primaryKey")v?console.warn("Can not define two attributes as a primary key at",se.loc):(te.isPrimaryKey=!0,v=!0);else if(z==="indexed")te.indexed=!0;else if(z==="computed"){for(let ne of se.arguments||[])if(ne.name.value==="from"){let le=ne.value.value;te.computed={from:g(le,ne,q)},te.version==null&&(te.version=le)}else ne.name.value==="version"&&(te.version=ne.value.value);te.computed=te.computed||!0}else if(z==="relationship"){let ne={};for(let le of se.arguments)ne[le.name.value]=le.value.value;te.relationship=ne}else if(z==="createdTime")te.assignCreatedTime=!0;else if(z==="updatedTime")te.assignUpdatedTime=!0;else if(z==="expiresAt")te.expiresAt=!0;else if(z==="allow"){let ne=te.authorizedRoles=[];for(let le of se.arguments)le.name.value==="role"&&ne.push(le.value.value)}else server.knownGraphQLDirectives.includes(z)&&console.warn(`@${z} is an unknown directive, at`,se.loc)}}O.type=E,E==="Query"&&(m=O)}function S(R){let E=h.get(R.type);E?(Object.defineProperty(R,"properties",{value:E.properties}),Object.defineProperty(R,"definition",{value:E})):R.type==="array"?S(R.elements):B4.includes(R.type)||(0,oL.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let R of h.values())for(let E of R.properties)S(E);for(let R of _)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,kA.dirname)(n),R.tableClass):i.set((0,kA.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,E,T){return new iL.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:E.loc.startToken.line-1,columnOffset:E.loc.startToken.column}).runInThisContext()(T)}a(g,"createComputedFrom")}}var kA,iL,oL,B4,H4,k4,aL=be(()=>{kA=require("path"),iL=require("node:vm");Ue();oL=M(st()),B4=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(FA,"start");H4=FA,k4=FA({ensureTable:_t}).handleFile});var hL={};Be(hL,{parse:()=>$A,streamAsJSON:()=>gf,stringify:()=>Ec});function gf(e){return new qA({value:e})}function cL(e){return console.error(e),JSON.stringify(e.toString())}function lL(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Ec(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===fL)return _L(e);if(t.resolution)return t.resolution.then(()=>Ec(e));throw t}}function _L(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+=_L(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Ec(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function $A(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),q4.test(e)?F4.parse(e):JSON.parse(e)):null}var uL,dL,F4,G4,fL,qA,q4,VA=be(()=>{uL=require("stream"),dL=M(require("json-bigint-fixes")),F4=(0,dL.default)({useNativeBigInt:!0}),G4=1e4,fL={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw fL};a(gf,"streamAsJSON");qA=class extends uL.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),cL)}catch(s){yield cL(s)}else yield Ec(t)}else yield Ec(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);lL(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>G4?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 lL(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(cL,"handleError");a(lL,"when");a(Ec,"stringify");a(_L,"jsStringify");q4=/[[,:]\s*-?\d{16,}/;a($A,"parse")});var pi=P(np=>{var rp=X();for(let e of["trace","debug","info","warn","error","fatal","notify"])rp.logsAtLevel(e)&&(np[e]=rp[e]);np.loggerWithTag=e=>rp.loggerWithTag(e,!0);np.setLogLevel=rp.setLogLevel});var _p={};Be(_p,{Blob:()=>gi,blobsWereEncoded:()=>gc,databasePaths:()=>YA,decodeBlobsWithWrites:()=>fp,decodeFromDatabase:()=>Sc,decodeWithBlobCallback:()=>yf,deleteBlob:()=>lp,deleteBlobsInObject:()=>ia,deleteRootBlobPathsForDB:()=>QA,encodeBlobsAsBuffers:()=>X4,encodeBlobsWithFilePath:()=>dp,findBlobsInObject:()=>Zl,getFileId:()=>up,getFilePathForBlob:()=>yL,getRootBlobPathsForDB:()=>Rf,setDeletionDelay:()=>Y4});function TL(){}function lp(e){let t=yL(e);t&&setTimeout(()=>{(0,Je.unlink)(t,r=>{r&&Ji.default.debug?.("Error trying to remove blob file",r)})},AL)}function Y4(e){AL=e}function RL(e){let t=_n.get(e);if(!t)t={storageIndex:0,fileId:null,store:hn},_n.set(e,t);else{if(t.fileId)return t;t.store=hn}return z4(t),t.source?KA(e,t.source,t):t.contentBuffer?W4(e,t):KA(e,Tf.Readable.from(e.stream()),t),t}function KA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let f=s+":blob";if(!i.attemptLock(f,0))throw new Error(`Unable to get lock for blob file ${s}`);let d=(0,Je.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());d.write(Buffer.concat([m(BigInt(g.length)+0xff000000000000n),g])),S(t.errored);return}let h=!1;e.size!==void 0&&(d.write(m(e.size)),h=!0);let _;o?(h||d.write(V4),_=(0,ap.createDeflate)(),t.pipe(_).pipe(d)):(h||d.write($4),t.pipe(d)),t.on("error",S);function m(g){let R=BigInt(g),E=new Uint8Array(pr),T=new DataView(E.buffer);return R|=BigInt(o?zA:SL)<<48n,T.setBigInt64(0,R),E}a(m,"createHeader");function S(g){i.unlock(f,0);let R=d.fd;g?(R&&(0,Je.close)(R),u(g)):c?(0,Je.fdatasync)(R,E=>{E&&u(E),l(),(0,Je.close)(R)}):(l(),(0,Je.close)(R))}a(S,"finished"),d.on("error",S).on("finish",()=>{if(h)S();else{let g=_?_.bytesWritten:d.bytesWritten-pr;e.size=g,(0,Je.write)(d.fd,m(g),0,pr,0,S)}})}),e}function up(e){return _n.get(e)?.fileId}function yL(e){let t=_n.get(e);return t?.fileId&&Af(t)}function Rf(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=YA.get(e);if(!t){if(!e.databaseName)return Ji.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,cp.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Zi.join)(n,e.databaseName)):t=[(0,Zi.join)((0,cp.getHdbBasePath)(),"blobs",e.databaseName)],YA.set(e,t)}return t}async function QA(e){let t=Rf(e);t&&await Promise.all(t.map(r=>bL(r)))}async function bL(e){if((0,Je.existsSync)(e)){for(let t of await(0,ds.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await bL((0,Zi.join)(e,t.name));else try{await(0,ds.unlink)((0,Zi.join)(e,t.name))}catch(r){Ji.default.warn?.("Error deleting file",r)}try{await(0,ds.rmdir)(e)}catch(t){Ji.default.warn?.("Error deleting directory",t)}}}function Af({storageIndex:e,fileId:t,store:r}){let n=Rf(r);return(0,Zi.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 W4(e,t){let r=t.contentBuffer,n=r.length;if(!(n<gL))return e.size=n,KA(e,Tf.Readable.from([r]),t)}function z4(e){let t=Rf(e.store),r=Q4(),n=t?.length>1?j4(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Af(e),o=(0,Zi.dirname)(i);(0,Je.existsSync)(o)||(0,WA.ensureDirSync)(o),e.filePath=i}function Q4(){let e=EL.get(hn);if(!e){let t=0,r=Rf(hn);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,Zi.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(hn.getUserSharedBuffer("blob-file-id",e.buffer)),EL.set(hn,e)}return Number(Atomics.add(e,0,1n))}function j4(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(op);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,J4(e)),e.frequencyTable[t%op]}async function J4(e){if(!ds.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o;try{o=await(0,ds.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,WA.ensureDirSync)(s),o=await(0,ds.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(op),n=t.map(s=>1/s);for(let s=0;s<op;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 dp(e,t,r){Xl=t,hn=r,gc=!1;try{return e()}finally{Xl=void 0,hn=void 0}}function X4(e){Lr=[];let t;try{t=e()}catch(n){throw Lr=void 0,n}let r=Lr.length<2?Lr[0]:Promise.all(Lr);return Lr=void 0,r?r.then(()=>e()):t}function fp(e,t){try{Lr=[],Xi=t,e()}catch(n){throw Xi=void 0,Lr=void 0,n}Xi=void 0;let r=Lr.length<2?Lr[0]:Promise.all(Lr);return Lr=void 0,r}function yf(e,t,r){hn=r;try{return Xi=t,e()}finally{Xi=void 0}}function Sc(e,t){return hn=t,e()}function ia(e){Zl(e,t=>{lp(t)})}function Zl(e,t){if(e instanceof gi)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Zl(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Zl(e[r],t)}}function Z4(){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""}}}var Ei,ds,Je,ap,Tf,WA,cp,Zi,Ji,gL,pr,SL,zA,mL,$4,V4,pL,_n,Xi,gi,Xl,Lr,hn,gc,Sf,sp,K4,ip,AL,YA,EL,op,fs=be(()=>{Ei=require("msgpackr"),ds=require("node:fs/promises"),Je=require("node:fs"),ap=require("node:zlib"),Tf=require("node:stream"),WA=require("fs-extra"),cp=M(ce());G();Zi=require("path"),Ji=M(pi());eo();gL=8192,pr=8,SL=0,zA=1,mL=255,$4=new Uint8Array([0,SL,255,255,255,255,255,255]),V4=new Uint8Array([0,zA,255,255,255,255,255,255]),pL=0xffffffffffff,_n=new WeakMap,gi=global.Blob||Z4(),gc=!1,Sf=new Uint8Array(8),sp=new DataView(Sf.buffer),K4=6e4;a(TL,"InstanceOfBlobWithNoConstructor");TL.prototype=gi.prototype;ip=class e extends TL{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=_n.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):(JA()&&jA(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=_n.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=Af(t),o,c=a(async()=>{let l,u=pr;try{if(l=await(0,ds.readFile)(i),l.length>=pr){l.copy(Sf,0,0,pr);let d=sp.getBigUint64(0);if(Number(d>>48n)===mL)throw new Error("Error in blob: "+buffer.subarray(pr));if(u=Number(d&0xffffffffffffn),u<n&&(u=n),u<pL&&(this.size=u,this.#t))for(let h of this.#t)h(u)}}catch(d){if(d.code!=="ENOENT")throw d;l=Buffer.alloc(0)}function f(d){if(u>d.length){let h=t.store,_=t.fileId+":blob";if(o)throw new Error(`Incomplete blob for ${i}`);return new Promise((m,S)=>{if(h.attemptLock(_,0,()=>(o=!0,m(c()))))return o=!0,h.unlock(_,0),m(c())})}return(n!=null||r!=null)&&(d=d.subarray(r??0,n??d.length)),d}return a(f,"checkCompletion"),l[1]===zA?new Promise((d,h)=>{(0,ap.deflate)(l.subarray(pr),(_,m)=>{_?h(_):d(f(m))})}):f(l.subarray(pr))},"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=_n.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(S){S.enqueue(r),S.close()}});let i=Af(t),o,c=0,l=0,u,f,d,h=!1,_=this;return new ReadableStream({start(){let S=1e3,g=a((R,E)=>{(0,Je.open)(i,"r",(T,O)=>{if(T){if(T.code==="ENOENT"&&d!==!1&&(Ji.default.debug?.("File does not exist yet, waiting for it to be created",i,S),S-- >0))return setTimeout(()=>{m(),g(R,E)},20).unref();E(T),_.#e?.forEach(v=>v(T))}else o=O,R(O)})},"openFile");return new Promise(g)},pull:a(S=>{let g=0,R=100;return new Promise(a(function E(T,O){function v(q){(0,Je.close)(o),clearTimeout(f),u&&u.close(),O(q),_.#e?.forEach(Q=>Q(q))}a(v,"onError");let F=Buffer.allocUnsafe(262144);(0,Je.read)(o,F,0,F.length,c,(q,Q,te)=>{if(l+=Q,q)return v(q);if(c===0){if(Q<pr){R-- >0&&d!==!1?(m(),Ji.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>E(T,O),20).unref()):(Ji.default.debug?.("File was empty, throwing error",i,R),O(new Error(`Blob ${t.fileId} was empty`)));return}te.copy(Sf,0,0,pr);let se=sp.getBigUint64(0);if(Number(se>>48n)===mL)return v(new Error("Error in blob: "+te.subarray(pr)));if(g=Number(se&0xffffffffffffn),g<pL&&_.size!==g&&(_.size=g,_.#t))for(let z of _.#t)z(g);te=te.subarray(pr,Q),l-=pr}else if(Q===0){let se=Buffer.allocUnsafe(8);return(0,Je.read)(o,se,0,pr,0,z=>{if(z)return v(z);if(Sf.set(se),g=Number(sp.getBigUint64(0)&0xffffffffffffn),g>l){m()?u?f=setTimeout(()=>{v(new Error(`File read timed out reading from ${i}`))},K4).unref():(u=(0,Je.watch)(i,{persistent:!1},()=>{u.close(),u=null,f&&(clearTimeout(f),f=null,E(T,O))}),E(T,O)):h?v(new Error("Blob is incomplete")):(h=!0,E(T,O));return}(0,Je.close)(o),S.close(),T()})}else te=te.subarray(0,Q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=Q,E(T,O);s&&l>=s&&(l>s&&(te=te.subarray(0,s-c)),l=g=s),n&&n>c&&(te=te.subarray(n-c))}c+=Q;try{S.enqueue(te)}catch(se){return Ji.default.debug?.("Error enqueuing chunk",se),T()}l===g&&((0,Je.close)(o),S.close()),T()})},"readMore"))},"pull"),cancel(){(0,Je.close)(o),clearTimeout(f),u&&u.close()}});function m(){if(d===void 0){let S=t.store,g=t.fileId+":blob";d=!S.attemptLock(g,0,()=>{d=!1}),d||S.unlock(g,0)}return d}}slice(t,r,n){let s=_n.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};_n.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)};_n.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(t){if(hn=t?.primaryStore?.rootStore,!hn)throw new Error("No target table specified");return RL(this).saving??Promise.resolve()}},AL=500;a(lp,"deleteBlob");a(Y4,"setDeletionDelay");global.createBlob=function(e,t){let r=new ip(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(_n.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Tf.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Tf.Readable.from(e);else throw new Error("Invalid source type");return r};a(RL,"saveBlob");a(KA,"writeBlobWithStream");a(up,"getFileId");a(yL,"getFilePathForBlob");YA=new Map;a(Rf,"getRootBlobPathsForDB");a(QA,"deleteRootBlobPathsForDB");a(bL,"rimrafSteadily");a(Af,"getFilePath");a(W4,"writeBlobWithBuffer");a(z4,"generateFilePath");EL=new Map;a(Q4,"getNextFileId");op=128;a(j4,"getNextStorageIndex");a(J4,"createFrequencyTableForStoragePaths");a(dp,"encodeBlobsWithFilePath");a(X4,"encodeBlobsAsBuffers");a(fp,"decodeBlobsWithWrites");a(yf,"decodeWithBlobCallback");a(Sc,"decodeFromDatabase");a(ia,"deleteBlobsInObject");a(Zl,"findBlobsInObject");(0,Ei.addExtension)({Class:gi,type:11,unpack:a(function(e){let t=(0,Ei.unpack)(e),r=new ip;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(_n.set(r,{storageIndex:t[1],fileId:t[2],store:hn}),Xi)return Xi(r)??r;if(!hn)throw new Error("No store specified, cannot load blob from storage")}else _n.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=_n.get(e);if(Xl!==void 0&&(gc=!0,t?.recordId!==void 0&&t.recordId!==Xl))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<gL)return r.size=t.contentBuffer.length,(0,Ei.pack)([r,t.contentBuffer])}if(Xl!==void 0){if(t=RL(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Xl,(0,Ei.pack)([r,t.storageIndex,t.fileId])}if(t){if(Xi)return Xi(e),(0,Ei.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,Je.readFileSync)(Af(t));if(n.length>=pr&&(n.copy(Sf,0,0,pr),Number(sp.getBigUint64(0)&0xffffffffffffn)===n.length-pr))return Buffer.concat([(0,Ei.pack)([r]),n]);if(Lr)Lr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Lr)return Lr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Ei.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(Z4,"polyfillBlob")});var LL={};Be(LL,{asyncSerialization:()=>jA,contentTypes:()=>tR,findBestSerializer:()=>mp,getDeserializer:()=>no,hasAsyncSerialization:()=>JA,registerContentHandlers:()=>Nf,serialize:()=>wf,serializeMessage:()=>oa,toCsvStream:()=>hp});function t3(e){try{return e?.[0]===123?eR(e):e}catch{return e}}function Nf(e){e.register(n3,{serializers:[{regex:/^application\/json$/,serializer:gf},{regex:/^application\/cbor$/,serializer:a(function(t){return new Tc.EncoderStream(Of).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Ac.Readable.from((0,Si.encodeIter)(t,Of)):(0,Si.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),hp(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Si.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Tc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function mp(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,...f]=l.split(/\s*;\s*/),d=1,h={q:1};for(let m of f){let S=m.indexOf("=");h[m.substring(0,S)]=m.substring(S+1)}d=+h.q;let _=$r.get(u);if(_){let m=(_.q||1)*d;m>s&&(n=_,i=_.type||u,s=m,o=h)}}if(!n){if(r)throw new wL.ClientError("No supported content types found in Accept header, supported types include: "+Array.from($r.keys()).join(", "),406);n=$r.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function wf(e,t,r){let n=NL&&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 gi)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=mp(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}),ZA.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,ro.createBrotliCompress)({params:{[ro.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?ro.constants.BROTLI_MODE_TEXT:ro.constants.BROTLI_MODE_GENERIC,[ro.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>NL?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,ro.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function oa(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;to=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=mp(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=bf(e);return to?.length>0?(to.length===1?to[0]:Promise.all(to)).then(()=>oa(e,t,!0)):n}finally{to=void 0}}function jA(e){if(to)to.push(e);else throw new Error("Unable to serialize asynchronously")}function JA(){return!!to}function s3(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 o3(e){return i3.includes(e)}function a3(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 no(e="",t=!1){let r=a3(e),n=r.type&&$r.get(r.type)?.deserialize||c3(r);return t?s=>s3(s).then(n):n}function c3(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!o3(e.parameters.charset)&&ZA.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 eR(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function l3(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 hp(e,t){let r=Ac.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 e3(n,s);return r.pipe(i)}var Si,Tc,ro,wL,Ac,IL,XA,CL,ZA,e3,PL,bf,eR,Of,$r,tR,OL,DL,r3,n3,NL,to,i3,eo=be(()=>{VA();Si=require("msgpackr"),Tc=require("cbor-x"),ro=require("zlib"),wL=M(he()),Ac=M(require("stream"));Dr();IL=M(ui()),XA=M(ce());G();CL=M(require("yaml")),ZA=M(pi());fs();({Transform:e3}=require("json2csv")),PL=XA.default.get(B.SERIALIZATION_BIGINT)!==!1,bf=PL?Ec:JSON.stringify,eR=PL?$A:JSON.parse,Of={useRecords:!1,useToJSON:!0},$r=new Map,tR=$r;Ke.contentTypes=tR;(0,IL._assignPackageExport)("contentTypes",tR);$r.set("application/json",{serializeStream:gf,serialize:bf,deserialize(e){return eR(e)},q:.8});OL=new Tc.Encoder(Of);$r.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Tc.EncoderStream(Of).end(e)},serialize:OL.encode,deserialize:OL.decode,q:1});$r.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Ac.Readable.from((0,Si.encodeIter)(e,Of)):(0,Si.pack)(e)},serialize:Si.pack,deserialize:Si.unpack,q:.9});$r.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),hp(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]),hp(e,e?.getColumns?.())},q:.1});$r.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Ac.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});$r.set("text/yaml",{serialize(e){return CL.stringify(e,{aliasDuplicateObjects:!1})},q:.7});$r.set("text/event-stream",{serializeStream:a(function(e){return Ac.Readable.from(l3(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+`
11
- `),e.data){let r=e.data;typeof r=="object"&&(r=bf(r)),t+="data: "+r+`
9
+ `)},K2="certificate.pem",Y2="privateKey.pem",W2="caCertificate.pem",z2="natsCertificate.pem",j2="natsCaCertificate.pem",Rt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},Q2={tls_certificate:Rt.SERVER,tls_certificateAuthority:Rt.CA,customFunctions_tls_certificate:Rt.SERVER,customFunctions_tls_certificateAuthority:Rt.CA,operationsApi_tls_certificate:Rt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:Rt["OPERATIONS-CA"]},J2={[Rt.SERVER]:2,[Rt.DEFAULT]:1},X2={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},Z2={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},eJ={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},tJ={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},rJ={[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1};Object.assign(jP,{CERTIFICATE_PEM_NAME:K2,PRIVATEKEY_PEM_NAME:Y2,CA_PEM_NAME:W2,CERT_NAME:Rt,CERT_CONFIG_NAME_MAP:Q2,CERT_PREFERENCE_APP:J2,CERT_PREFERENCE_OPS:X2,CERT_PREFERENCE_REP:Z2,CA_CERT_PREFERENCE_REP:eJ,CA_CERT_PREFERENCE_OPS:tJ,CA_CERT_PREFERENCE_APP:rJ,CERTIFICATE_VALUES:V2,NATS_CERTIFICATE_PEM_NAME:z2,NATS_CA_PEM_NAME:j2})});var nt=P((uAe,QP)=>{"use strict";var on=require("validate.js");on.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||on.validators.type.checks[t](e)?null:` must be a '${t}' value`};on.validators.type.checks={Object:a(function(e){return on.isObject(e)&&!on.isArray(e)},"Object"),Array:on.isArray,Integer:on.isInteger,Number:on.isNumber,String:on.isString,Date:on.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};on.validators.hasValidFileExt=function(e,t){return on.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};QP.exports={validateObject:nJ,validateObjectAsync:sJ,validateBySchema:iJ};function nJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=on(e,t,{format:"flat"});return r?new Error(r):null}a(nJ,"validateObject");async function sJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await on.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(sJ,"validateObjectAsync");function iJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(iJ,"validateBySchema")});var TA=P((_Ae,rD)=>{"use strict";var eD=require("fs-extra"),Ee=require("joi"),oJ=require("os"),{boolean:ke,string:ft,number:er,array:Jo}=Ee.types(),{totalmem:JP}=require("os"),uc=require("path"),aJ=X(),SA=oe(),fAe=gA(),XP=(G(),D($)),cJ=nt(),ZP="log",lJ="components",uJ="Invalid logging.rotation.maxSize unit. Available units are G, M or K",dJ="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",fJ="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",_J="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",hJ="rootPath config parameter is undefined",an=Ee.alternatives([er.min(0),ft]).optional().empty(null),Mp=Ee.alternatives([Jo.items(ft,{host:ft.required(),port:an},{hostname:ft.required(),port:an}).empty(null),Jo.items(ft)]),_i,tD=!1;rD.exports={configValidator:pJ,routesValidator:AJ,route_constraints:Mp};function pJ(e,t=!1){if(tD=t,_i=e.rootPath,SA.isEmpty(_i))throw hJ;let r=ke.optional(),n=er.min(0).max(1e3).empty(null).default(TJ),s=ft.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ef),i=ft.optional().empty(null),o=ft.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Ee.string().empty(null).default(ef),l=Ee.custom(EJ).empty(null).default(ef),u=e.clustering?.enabled,f=Ee.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return u===!0?d=Ee.object({enabled:r,hubServer:Ee.object({cluster:Ee.object({name:Ee.required().empty(null),network:Ee.object({port:an,routes:Mp}).required()}).required(),leafNodes:Ee.object({network:Ee.object({port:an}).required()}).required(),network:Ee.object({port:an}).required()}).required(),leafServer:Ee.object({network:Ee.object({port:an,routes:Mp}).required(),streams:Ee.object({maxAge:er.min(120).allow(null).optional(),maxBytes:er.min(1).allow(null).optional(),maxMsgs:er.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Ee.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ke.optional(),databaseLevel:ke.optional(),tls:Ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.required(),verify:ke.optional()}),user:ft.optional().empty(null)}).optional():d=Ee.object({enabled:r,tls:Ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ke.optional()})}).optional(),Ee.object({authentication:Ee.alternatives(Ee.object({authorizeLocal:ke,cacheTTL:er.required(),cookie:Ee.object({domains:Jo.items(ft).optional(),expires:ft.optional()}),enableSessions:ke,hashFunction:ft.valid("md5","sha256","argon2id").optional().empty(null)}),ke).optional(),analytics:Ee.object({aggregatePeriod:er}),replication:Ee.object({hostname:Ee.alternatives(ft,er).optional().empty(null),url:ft.optional().empty(null),port:an,securePort:an,routes:Jo.optional().empty(null),databases:Ee.alternatives(ft,Jo),enableRootCAs:ke.optional(),copyTablesToCatchUp:ke.optional()}).optional(),componentsRoot:s.optional(),clustering:d,localStudio:Ee.object({enabled:r}).required(),logging:Ee.object({auditAuthEvents:Ee.object({logFailed:ke,logSuccessful:ke}),file:ke.required(),level:Ee.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Ee.object({enabled:ke.optional(),compress:ke.optional(),interval:ft.custom(SJ).optional().empty(null),maxSize:ft.custom(gJ).optional().empty(null),path:ft.optional().empty(null).default(ef)}).required(),root:s,stdStreams:ke.required(),auditLog:ke.required()}).required(),operationsApi:Ee.object({network:Ee.object({cors:ke.optional(),corsAccessList:Jo.optional(),headersTimeout:er.min(1).optional(),keepAliveTimeout:er.min(1).optional(),port:an,domainSocket:Ee.optional().empty("hdb/operations-server").default(ef),securePort:an,timeout:er.min(1).optional()}).optional(),tls:Ee.alternatives([Ee.array().items(f),f])}).required(),rootPath:ft.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Ee.object({network:Ee.object({port:an,securePort:an,mtls:Ee.alternatives([ke.optional(),Ee.object({user:ft.optional(),certificateAuthority:i,required:ke.optional()})])}).required(),webSocket:ke.optional(),requireAuthentication:ke.optional()}),http:Ee.object({compressionThreshold:er.optional(),cors:ke.optional(),corsAccessList:Jo.optional(),headersTimeout:er.min(1).optional(),port:an,securePort:an,maxHeaderSize:er.optional(),mtls:Ee.alternatives([ke.optional(),Ee.object({user:ft.optional(),certificateAuthority:i,required:ke.optional()})]),threadRange:Ee.alternatives([Jo.optional(),ft.optional()])}).required(),threads:Ee.alternatives(n.optional(),Ee.object({count:n.optional(),debug:Ee.alternatives(ke.optional(),Ee.object({startingPort:er.min(1).optional(),host:ft.optional(),waitForDebugger:ke.optional()})),maxHeapMemory:er.min(0).optional()})),storage:Ee.object({writeAsync:ke.required(),overlappingSync:ke.optional(),caching:ke.optional(),compression:Ee.alternatives([ke.optional(),Ee.object({dictionary:ft.optional(),threshold:er.optional()})]),compactOnStart:ke.optional(),compactOnStartKeepBackup:ke.optional(),noReadAhead:ke.optional(),path:l,prefetchWrites:ke.optional(),maxFreeSpaceToLoad:er.optional(),maxFreeSpaceToRetain:er.optional()}).required(),ignoreScripts:ke.optional(),tls:Ee.alternatives([Ee.array().items(f),f])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(pJ,"configValidator");function mJ(e){return tD||eD.existsSync(e)?null:`Specified path ${e} does not exist.`}a(mJ,"doesPathExist");function EJ(e,t){Ee.assert(e,ft.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=mJ(e);if(r)return t.message(r)}a(EJ,"validatePath");function gJ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(uJ);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(fJ):e}a(gJ,"validateRotationMaxSize");function SJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(dJ);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(_J):e}a(SJ,"validateRotationInterval");function TJ(e,t){let r=t.state.path.join("."),n=oJ.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||JP();return i=Math.round(Math.min(i,JP())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),aJ.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(TJ,"setDefaultThreads");function ef(e,t){let r=t.state.path.join(".");if(!SA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(SA.isEmpty(_i))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return uc.join(_i,lJ);case"logging.root":return uc.join(_i,ZP);case"clustering.leafServer.streams.path":return uc.join(_i,"clustering","leaf");case"storage.path":let n=uc.join(_i,XP.LEGACY_DATABASES_DIR_NAME);return eD.existsSync(n)?n:uc.join(_i,XP.DATABASES_DIR_NAME);case"logging.rotation.path":return uc.join(_i,ZP);case"operationsApi.network.domainSocket":return r==null?null:uc.join(_i,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ef,"setDefaultRoot");function AJ(e){let t=Ee.object({routes:Mp});return cJ.validateBySchema({routes:e},t)}a(AJ,"routesValidator")});var ql={};Be(ql,{server:()=>Ke});var nD,Ke,Dr=be(()=>{nD=M(ui()),Ke={};(0,nD._assignPackageExport)("server",Ke)});var wt=P(hD=>{"use strict";var cs=(G(),D($)),pr=oe(),tr=X(),{configValidator:RJ,routesValidator:sD}=TA(),Gr=require("fs-extra"),oD=require("yaml"),Mn=require("path"),yJ=require("is-number"),aD=require("properties-reader"),bJ=require("lodash"),{handleHDBError:OJ}=he(),{HTTP_STATUS_CODES:NJ,HDB_ERROR_MSGS:$l}=Dn(),{server:wJ}=(Dr(),D(ql)),{PACKAGE_ROOT:cD}=Et(),{DATABASES_PARAM_CONFIG:tf,CONFIG_PARAMS:Ln,CONFIG_PARAM_MAP:ks}=cs,IJ="Unable to get config value because config is uninitialized",CJ="Config successfully initialized",PJ="Error backing up config file",DJ="Empty parameter sent to getConfigValue",lD=Mn.join(cD,"config","yaml",cs.HDB_DEFAULT_CONFIG_FILE),LJ=Mn.join(cD,"config","yaml","defaultNatsConfig.yaml"),MJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",iD={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"},vp,Nt,Up;Object.assign(hD,{createConfigFile:vJ,getDefaultConfig:UJ,getConfigValue:dD,initConfig:xp,flattenConfig:Vl,updateConfigValue:fD,updateConfigObject:BJ,getConfiguration:FJ,setConfiguration:GJ,readConfigFile:bA,getClusteringRoutes:qJ,initOldConfig:_D,getConfigFromFile:$J,getConfigFilePath:dc,addConfig:VJ,deleteConfigFromFile:KJ,getConfigObj:YJ,resolvePath:AA,getFlatConfigObj:WJ});function AA(e){if(e?.startsWith("~/"))return Mn.join(pr.getHomeDir(),e.slice(1));let t=ce();try{return Mn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(AA,"resolvePath");function vJ(e,t=!1){let r=Xo(lD);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=oD.parseDocument(Gr.readFileSync(LJ,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}vp=Vl(r.toJSON());let n;for(let c in e){let l=ks[c.toLowerCase()];if(l===Ln.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("_"),f=RA(l,e[c]);l==="rootPath"&&f?.endsWith("/")&&(f=f.slice(0,-1));try{r.setIn([...u],f)}catch(d){tr.error(d)}}}n&&uD(r,n),yA(r,t);let s=r.toJSON();Nt=Vl(s);let i=r.getIn(["rootPath"]),o=Mn.join(i,cs.HDB_CONFIG_FILE);if(Gr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Gr.writeFileSync(o,String(r)),tr.trace(`Config file written to ${o}`)}a(vJ,"createConfigFile");function uD(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!pr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(tf.TABLES))for(let i in n[s][tf.TABLES])for(let o in n[s][tf.TABLES][i]){let c=n[s][tf.TABLES][i][o],l=[Ln.DATABASES,s,tf.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=[Ln.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){tr.error("Error parsing schemas CLI/env config arguments",n)}}a(uD,"setSchemasConfig");function UJ(e){if(vp===void 0){let r=Xo(lD);vp=Vl(r.toJSON())}let t=ks[e.toLowerCase()];if(t!==void 0)return vp[t.toLowerCase()]}a(UJ,"getDefaultConfig");function dD(e){if(e==null){tr.info(DJ);return}if(Nt===void 0){tr.trace(IJ);return}let t=ks[e.toLowerCase()];if(t!==void 0)return Nt[t.toLowerCase()]}a(dD,"getConfigValue");function dc(e=pr.getPropsFilePath()){let t=pr.getEnvCliRootPath();if(t)return AA(Mn.join(t,cs.HDB_CONFIG_FILE));let r=aD(e);return AA(r.get(cs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(dc,"getConfigFilePath");function xp(e=!1){if(Nt===void 0||e){let t;if(!pr.noBootFile()){t=pr.getPropsFilePath();try{Gr.accessSync(t,Gr.constants.F_OK|Gr.constants.R_OK)}catch(i){throw tr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=dc(t),n;if(r.includes("config/settings.js"))try{_D(r);return}catch(i){if(i.code!==cs.NODE_ERROR_CODES.ENOENT)throw i}try{n=Xo(r)}catch(i){if(i.code===cs.NODE_ERROR_CODES.ENOENT){tr.trace(`HarperDB config file not found at ${r}.
10
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw tr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}xJ(n,r),yA(n);let s=n.toJSON();if(wJ.config=s,Nt=Vl(s),Nt.logging_rotation_rotate)for(let i in iD)Nt[i]&&tr.error(`Config ${iD[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);tr.trace(CJ)}}a(xp,"initConfig");function xJ(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Mn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Mn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n){if(tr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Gr.writeFileSync(t,String(e))}}a(xJ,"checkForUpdatedConfig");function yA(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 $l.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 $l.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=RJ(r,t);if(n.error)throw $l.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(yA,"validateConfig");function BJ(e,t){Nt===void 0&&(Nt={});let r=ks[e.toLowerCase()];if(r===void 0){tr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Nt[r.toLowerCase()]=t}a(BJ,"updateConfigObject");function fD(e,t,r=void 0,n=!1,s=!1,i=!1){Nt===void 0&&xp();let o=dD(ks.hdb_root),c=Mn.join(o,cs.HDB_CONFIG_FILE),l=Xo(c),u;if(r&&Nt){let h=!1;for(let _ in r)if(r[_]!=Nt[_.toLowerCase()]){h=!0;break}if(!h){tr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Ln.DATABASES)u=t;else if(r===void 0){let h;if(i)h=e;else if(h=ks[e.toLowerCase()],h===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let _=h.split("_"),p=RA(h,t);l.setIn([..._],p)}else for(let h in r){let _=ks[h.toLowerCase()];if(_===Ln.HTTP_SECUREPORT&&r[h]===Nt[Ln.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),_===Ln.OPERATIONSAPI_NETWORK_SECUREPORT&&r[h]===Nt[Ln.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),_===Ln.DATABASES){u=r[h];continue}if(_?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!_&&(h.endsWith("_package")||h.endsWith("_port"))&&(_=h),_!==void 0){let p=_.split("_"),S=cs.LEGACY_CONFIG_PARAMS[h.toUpperCase()];S&&S.startsWith("customFunctions")&&l.hasIn(S.split("_"))&&(_=S,p=S.split("_"));let g=RA(_,r[h]);_==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{p.length>1&&typeof l.getIn(p.slice(0,-1))=="boolean"&&l.deleteIn(p.slice(0,-1)),l.setIn([...p],g)}catch(R){tr.error(R)}}}u&&uD(l,u),yA(l);let f=l.getIn(["rootPath"]),d=Mn.join(f,cs.HDB_CONFIG_FILE);if(n===!0&&HJ(c,f),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Gr.writeFileSync(d,String(l)),s&&(Nt=Vl(l.toJSON())),tr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(fD,"updateConfigValue");function HJ(e,t){try{let r=Mn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${cs.HDB_CONFIG_FILE}.bak`);Gr.copySync(e,r),tr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){tr.error(PJ),tr.error(r)}}a(HJ,"backupConfigFile");var kJ=["databases"];function Vl(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}),Up=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])&&!kJ.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;!Ln[l.toUpperCase()]&&ks[l]&&(s[ks[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Vl,"flattenConfig");function RA(e,t){if(e===Ln.CLUSTERING_NODENAME||e===Ln.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(yJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||pr.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 pr.autoCast(t)}a(RA,"castConfigValue");function FJ(){let e=pr.getPropsFilePath(),t=dc(e);return Xo(t).toJSON()}a(FJ,"getConfiguration");async function GJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return fD(void 0,void 0,s,!0),MJ}catch(i){throw typeof i=="string"||i instanceof String?OJ(i,i,NJ.BAD_REQUEST,void 0,void 0,!0):i}}a(GJ,"setConfiguration");function bA(){let e=pr.getPropsFilePath();try{Gr.accessSync(e,Gr.constants.F_OK|Gr.constants.R_OK)}catch(n){if(!pr.noBootFile())throw tr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=dc(e);return Xo(t).toJSON()}a(bA,"readConfigFile");function Xo(e){return oD.parseDocument(Gr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Xo,"parseYamlDoc");function qJ(){let e=bA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pr.isEmptyOrZeroLength(t)?[]:t;let r=sD(t);if(r)throw $l.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=pr.isEmptyOrZeroLength(n)?[]:n;let s=sD(n);if(s)throw $l.CONFIG_VALIDATION(s.message);if(!pr.isEmptyOrZeroLength(n)&&!pr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!pr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw $l.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(qJ,"getClusteringRoutes");function _D(e){let t=aD(e);Nt={};for(let r in ks){let n=t.get(r.toUpperCase());if(pr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ks[r].toLowerCase();s===Ln.LOGGING_ROOT?Nt[s]=Mn.dirname(n):Nt[s]=n}return Nt}a(_D,"initOldConfig");function $J(e){let t=bA();return bJ.get(t,e.replaceAll("_","."))}a($J,"getConfigFromFile");async function VJ(e,t){let r=Xo(dc());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await Gr.writeFile(dc(),String(r))}a(VJ,"addConfig");function KJ(e){let t=dc(pr.getPropsFilePath()),r=Xo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Mn.join(n,cs.HDB_CONFIG_FILE);Gr.writeFileSync(s,String(r))}a(KJ,"deleteConfigFromFile");function YJ(){return Up||(xp(),Up)}a(YJ,"getConfigObj");function WJ(){return Nt||xp(),Nt}a(WJ,"getFlatConfigObj")});var ce=P((SD,TD)=>{"use strict";var OA=require("fs-extra"),fc=require("path"),pD=require("os"),zJ=require("properties-reader"),nf=X(),rf=oe(),Me=(G(),D($)),Bp=wt(),jJ="Error initializing environment manager",Hp="BOOT_PROPS_FILE_PATH",mD=!1,QJ={[Me.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Me.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ji={};Object.assign(SD,TD.exports={BOOT_PROPS_FILE_PATH:Hp,getHdbBasePath:JJ,setHdbBasePath:XJ,get:ED,initSync:e4,setProperty:ze,initTestEnvironment:r4,setCloneVar:t4});function JJ(){return ji[Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(JJ,"getHdbBasePath");function XJ(e){ji[Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(XJ,"setHdbBasePath");function ED(e){let t=Bp.getConfigValue(e);return t===void 0?ji[e]:t}a(ED,"get");function ze(e,t){QJ[e]&&(ji[e]=t),Bp.updateConfigObject(e,t)}a(ze,"setProperty");function ZJ(){let e;try{e=rf.getPropsFilePath(),OA.accessSync(e,OA.constants.F_OK|OA.constants.R_OK),mD=!0;let t=zJ(e);return ji[Me.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Me.HDB_SETTINGS_NAMES.INSTALL_USER),ji[Me.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Me.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ji[Hp]=e,!0}catch{return nf.trace(`Environment manager found no properties file at ${e}`),!1}}a(ZJ,"doesPropFileExist");function e4(e=!1){try{((mD||ZJ()||rf.noBootFile())&&!gD||e)&&(Bp.initConfig(e),ji[Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Bp.getConfigValue(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){nf.error(jJ),nf.error(t),console.error(t),process.exit(1)}}a(e4,"initSync");var gD=!1;function t4(e){gD=e}a(t4,"setCloneVar");function r4(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=fc.join(__dirname,"../../","unitTests");ji[Hp]=fc.join(l,"hdb_boot_properties.file"),ze(Me.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,fc.join(l,"settings.test")),ze(Me.HDB_SETTINGS_NAMES.INSTALL_USER,pD.userInfo()?pD.userInfo().username:void 0),ze(Me.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ze(Me.HDB_SETTINGS_NAMES.LOG_PATH_KEY,fc.join(l,"envDir","log")),ze(Me.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ze(Me.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ze(Me.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ze(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,fc.join(l,"envDir")),ze(Me.CONFIG_PARAMS.STORAGE_PATH,fc.join(l,"envDir")),s&&(ze(Me.CONFIG_PARAMS.HTTP_SECUREPORT,ED(Me.CONFIG_PARAMS.HTTP_PORT)),ze(Me.CONFIG_PARAMS.HTTP_PORT,null)),ze(Me.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ze(Me.CONFIG_PARAMS.HTTP_PORT,9926),ze(Me.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ze(Me.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),ze(Me.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,rf.isEmpty(i)?!1:i),ze(Me.CONFIG_PARAMS.HTTP_CORS,rf.isEmpty(i)?!1:i),ze(Me.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ze(Me.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ze(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ze(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ze(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,fc.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ze(Me.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,rf.isEmpty(c)?!1:c),o&&(ze("CORS_ACCESSLIST",o),ze(Me.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ze(Me.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ze(Me.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ze(Me.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ze(Me.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ze(Me.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ze(Me.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Hp}. Please check your boot props and settings files`;nf.fatal(r),nf.error(t)}}a(r4,"initTestEnvironment")});var gt=P((gAe,wD)=>{"use strict";var lf=(G(),D($)),n4=oe(),cn=ce(),uf=require("path"),s4=require("minimist"),AD=require("fs-extra"),RD=require("lodash");cn.initSync();var{CONFIG_PARAMS:Zo,DATABASES_PARAM_CONFIG:sf,SYSTEM_SCHEMA_NAME:kp}=lf,of,af,cf;function yD(){if(of!==void 0)return of;if(cn.getHdbBasePath()!==void 0)return of=cn.get(Zo.STORAGE_PATH)||uf.join(cn.getHdbBasePath(),lf.DATABASES_DIR_NAME),of}a(yD,"getBaseSchemaPath");function bD(){if(af!==void 0)return af;if(cn.getHdbBasePath()!==void 0)return af=ND(kp),af}a(bD,"getSystemSchemaPath");function OD(){if(cf!==void 0)return cf;if(cn.getHdbBasePath()!==void 0)return cf=cn.get(lf.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||uf.join(cn.getHdbBasePath(),lf.TRANSACTIONS_DIR_NAME),cf}a(OD,"getTransactionAuditStoreBasePath");function i4(e,t){let r=cn.get(Zo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||uf.join(OD(),e.toString())}a(i4,"getTransactionAuditStorePath");function ND(e,t){e=e.toString(),t=t&&t.toString();let r=cn.get(lf.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||uf.join(yD(),e)}a(ND,"getSchemaPath");function o4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,s4(process.argv));let n=r[Zo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!n4.isObject(n))throw o;i=n}for(let o of i){let c=o[kp];if(!c)continue;let l=cn.get(Zo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[sf.PATH];if(u)return RD.set(l,[kp,sf.TABLES,t,sf.PATH],u),cn.setProperty(Zo.DATABASES,l),u;let f=c?.[sf.PATH];if(f)return RD.set(l,[kp,sf.PATH],f),cn.setProperty(Zo.DATABASES,l),f}}let s=r[Zo.STORAGE_PATH.toUpperCase()];if(s){if(!AD.pathExistsSync(s))throw new Error(s+" does not exist");let i=uf.join(s,e);return AD.mkdirsSync(i),cn.setProperty(Zo.STORAGE_PATH,s),i}return bD()}a(o4,"initSystemSchemaPaths");function a4(){of=void 0,af=void 0,cf=void 0}a(a4,"resetPaths");wD.exports={getBaseSchemaPath:yD,getSystemSchemaPath:bD,getTransactionAuditStorePath:i4,getTransactionAuditStoreBasePath:OD,getSchemaPath:ND,initSystemSchemaPaths:o4,resetPaths:a4}});var ln=P((RAe,LD)=>{"use strict";var c4=Dn().LMDB_ERRORS_ENUM,TAe=require("lmdb"),l4=Ft(),AAe=require("buffer").Buffer,{OVERFLOW_MARKER:ID,MAX_SEARCH_KEY_LENGTH:Fp}=l4,CD=["number","string","symbol","boolean","bigint"];function u4(e){if(e=e?.primaryStore||e,!e)throw new Error(c4.ENV_REQUIRED)}a(u4,"validateEnv");function d4(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(d4,"stringifyData");function f4(e){return e instanceof Date?e.valueOf():e}a(f4,"convertKeyValueToWrite");function _4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(CD.includes(typeof e))return e.length>Fp?[e.slice(0,Fp)+ID]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(CD.includes(typeof i))i.length>Fp?r.push(i.slice(0,Fp)+ID):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(_4,"getIndexedValues");var Gp=0,PD=0;function DD(){PD=Date.now()-performance.now()}a(DD,"adjustStartTime");DD();var h4=6e4;setInterval(DD,h4).unref();function p4(){let e=performance.now()+PD;return e>Gp?(Gp=e,e):(Gp+=488e-6,Gp)}a(p4,"getNextMonotonicTime");LD.exports={validateEnv:u4,stringifyData:d4,convertKeyValueToWrite:f4,getNextMonotonicTime:p4,getIndexedValues:_4}});var df=P((bAe,MD)=>{"use strict";var m4=(G(),D($)).OPERATIONS_ENUM,NA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=m4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};MD.exports=NA});var ff=P((wAe,BD)=>{"use strict";var NAe=df(),qp=(G(),D($)),wA=oe(),vD=X(),E4=require("uuid"),{handleHDBError:$p,hdb_errors:g4}=he(),{HDB_ERROR_MSGS:Vp,HTTP_STATUS_CODES:Kp}=g4;BD.exports=UD;function UD(e,t,r){for(let s=0;s<t.length;s++)xD(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];S4(i,r,e.operation)}}a(UD,"processRows");UD.validateAttribute=xD;function xD(e){if(Buffer.byteLength(String(e))>qp.INSERT_MAX_CHARACTER_SIZE)throw $p(new Error,Vp.ATTR_NAME_LENGTH_ERR(e),Kp.BAD_REQUEST,void 0,void 0,!0);if(wA.isEmptyOrZeroLength(e)||wA.isEmpty(e.trim()))throw $p(new Error,Vp.ATTR_NAME_NULLISH_ERR,Kp.BAD_REQUEST,void 0,void 0,!0)}a(xD,"validateAttribute");function S4(e,t,r){if(!e.hasOwnProperty(t)||wA.isEmptyOrZeroLength(e[t])){if(r===qp.OPERATIONS_ENUM.INSERT||r===qp.OPERATIONS_ENUM.UPSERT){e[t]=E4.v4();return}throw vD.error("Update transaction aborted due to record with no hash value:",e),$p(new Error,Vp.RECORD_MISSING_HASH_ERR,Kp.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>qp.INSERT_MAX_CHARACTER_SIZE)throw vD.error(e),$p(new Error,Vp.HASH_VAL_LENGTH_ERR,Kp.BAD_REQUEST,void 0,void 0,!0)}a(S4,"validateHash")});var HD,vn,IA,Kl=be(()=>{HD=require("events"),vn=class extends HD.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new IA;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)}},IA=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function KD(e){PA=e}function y4(){R4=setInterval(function(){for(let e of CA)if(e.stale){let t=e.getContext()?.url;qD.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},A4).unref()}var DA,GD,qD,$D,VD,kD,CA,T4,_f,FD,PA,_c,Yp,A4,R4,Wp=be(()=>{DA=M(ln()),GD=M(he()),qD=M(X()),$D=M(ce());G();VD=M(oe()),kD=100,CA=new Set,T4=(0,VD.convertToMS)($D.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(KD,"replicationConfirmation");_c=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),CA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(CA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(_f&&!this.overloadChecked&&performance.now()-FD>T4)throw new GD.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,DA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let _=d;_<this.validated;_++)this.writes[_]?.validate?.(this.timestamp);let h;for(let _=d;_<this.validated;_++){let p=this.writes[_];p&&(p.before||p.beforeIntermediate)&&(h=!0)}if(h)return(async()=>{try{for(let _=0;_<2;_++){let p;for(let S=d;S<this.validated;S++){let g=this.writes[S];if(!g)continue;let R=g[_===0?"before":"beforeIntermediate"];if(R){let E=R();p?p.push?p.push(E):p=[p,E]:p=E}}p&&await(p.push?Promise.all(p):p)}}catch(_){throw this.abort(),_}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.doneWriting?2:1;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let h=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||h}else l();else for(let h of this.writes)c(h)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<kD>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return _f||(_f=s,FD=performance.now(),_f.then(()=>{_f=null})),s.then(d=>{if(d){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let h=this.writes[0].store.rootStore.databaseName,_=this.writes[this.writes.length-1];PA&&_&&i.push(PA(h,_.store.getEntry(_.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+kD/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let f={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(h=>({txnTime:r,next:h}));f.next=d}return f}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},Yp=class extends _c{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,DA.getNextMonotonicTime)())}getReadTxn(){}},A4=3e4;a(y4,"startMonitoringTxns");y4()});function It(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new _c;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 YD,hc=be(()=>{YD=M(ui());Wp();a(It,"transaction");(0,YD._assignPackageExport)("transaction",It);It.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};It.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function MA(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=u(l);for(let _=1;_<e.length;_++){let p=e[_],S=u(p);d=d.concat(S)}let h=new Set;return d.filter(_=>{let p=_.key??_;return h.has(p)?!1:(h.add(p),!0)})}else{let d=u(l),h=f(e.slice(1),!0,l.estimated_count);return h.length>0?o(d,h):d}function u(d){return d.conditions?MA(d.conditions,d.operator,r,n,s,i,o,c):zl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(u,"executeCondition");function f(d,h,_){return d.map((p,S)=>{if(p.conditions){let E=p.operator==="or",T=f(p.conditions,!E,_);return E?(O,v)=>T.some(F=>F(O,v)):(O,v)=>T.every(F=>F(O,v))}let g=(p.attribute||p[0])===r.primaryKey,R=mf(p,r,i,c,g,_);return h&&S<d.length-1&&_&&(_=L4(r.primaryStore,p.estimated_count,_)),R}).filter(Boolean)}a(f,"mapConditionsToFilters")}function zl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(c===void 0&&l!=="sort")throw new dn.ClientError(`Search condition for ${o} must have a value`);if(Array.isArray(o)){let E=o[0],T=pi(n.attributes,E);if(T.relationship){if(o.length<2)throw new dn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=T.definition?.tableClass||T.elements?.definition?.tableClass,v=new Map,F=zl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,O,s,v);if(T.relationship.to){i[o[0]]=v;let q=!!pi(O.attributes,T.relationship.to)?.elements;F=I4(F,T,O.primaryStore,q,v)}if(T.relationship.from){let q=a(j=>(j?.key!==void 0&&(j=j.key),zl({attribute:T.relationship.from,value:j},t,r,n,s,v)),"searchEntry");T.elements?(i[o[0]]=v,F=C4(F,T,O.primaryStore,v,q)):F=F.flatMap(q)}return F}else if(o.length===1)o=o[0];else throw new dn.ClientError("Unable to query by attribute "+JSON.stringify(o))}let u,f,d,h;c instanceof Date&&(c=c.getTime());let _;switch(vA[l]||l){case"lt":u=!0,f=c;break;case"le":u=!0,f=c,d=!0;break;case"gt":u=c,h=!0;break;case"ge":u=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],u=c,f=c.slice(0),f[f.length-1]=hi.MAXIMUM_KEY;break;case"starts_with":u=c.toString(),f=c+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":u=c[0],u instanceof Date&&(u=u.getTime()),f=c[1],f instanceof Date&&(f=f.getTime()),d=l==="gele"||l==="gtle"||l==="between",h=l==="gtlt"||l==="gtle";break;case"equals":case void 0:u=c,f=c,d=!0;break;case"ne":if(c===null){u=c,h=!0;break}case"sort":case"contains":case"ends_with":u=!0,_=!0;break;default:throw new dn.ClientError(`Unknown query comparator "${l}"`)}let p,S=o===n.primaryKey||o==null;if(typeof u=="string"&&u.length>ls.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,ls.MAX_SEARCH_KEY_LENGTH)+ls.OVERFLOW_MARKER,h=!1,p=mf(e,n,null,i,S)),typeof f=="string"&&f.length>ls.MAX_SEARCH_KEY_LENGTH&&(f=f.slice(0,ls.MAX_SEARCH_KEY_LENGTH)+ls.OVERFLOW_MARKER,d=!0,p=p??mf(e,n,null,i,S)),r){let E=u;u=f,f=E,E=!h,h=!d,d=E}let g=S?n.primaryStore:n.indices[o];if(!g||g.isIndexing||_||c===null&&!g.indexNulls){if(s===!1&&!g)throw new dn.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new dn.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(g?.isIndexing)throw new dn.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&g&&!g.indexNulls)throw new dn.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(p=p??mf(e,n,null,i,S),!p)throw new dn.ClientError(`Unknown search operator ${e.comparator}`)}let R={start:u,end:f,inclusiveEnd:d,exclusiveStart:h,values:!0,versions:S,transaction:t,reverse:r};if(S){let E=g.getRange(R).map(p?function({key:T,value:O}){return this?.isSync?O&&p(O)?T:ea.SKIP:new Promise((v,F)=>setImmediate(()=>{try{v(O&&p(O)?T:ea.SKIP)}catch(q){F(q)}}))}:T=>T.value==null&&!(T.metadataFlags&(fn|ra))?ea.SKIP:T);return E.hasEntries=!0,E}else return g?g.getRange(R).map(p?function({key:E,value:T}){let O;return typeof E=="string"&&E.length>ls.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(T):O={[o]:E},this.isSync?p(O)?T:ea.SKIP:new Promise((v,F)=>setImmediate(()=>{try{v(p(O)?T:ea.SKIP)}catch(q){F(q)}}))}:({value:E})=>E):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:E,value:T}){return this.isSync?T&&p(T)?E:ea.SKIP:new Promise((O,v)=>setImmediate(()=>{try{O(T&&p(T)?E:ea.SKIP)}catch(F){v(F)}}))})}function pi(e,t){if(Array.isArray(t))if(t.length>1){let r=pi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?pi(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 I4(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,f)=>{let d=s.get(u);d?d.push(f):s.set(u,d=[f])},"add_entry");for(let u of e){let f=u.value??r.get(u.key??u),d=f?.[c];if(d!=null&&!s.filters?.some(h=>!h(f)))if(n)for(let h=0;h<d.length;h++)l(d[h],u);else l(d,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 C4(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=f=>f[t.relationship.from]?.filter?.(d=>u.has(d));for(let f of e){if(n.filters){let d=r.get(f);if(n.filters.some(h=>!h(d)))continue}u.add(f)}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 mf(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 f=c[0],d=pi(t.attributes,f),h=d.definition?.tableClass||d.elements.definition?.tableClass,_=n?.[f],p=mf({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},h,r,_?.[f]?.joined,c[1]===h.primaryKey,i);if(!p)return;if(_){_.filters||(_.filters=[]),_.filters.push(p);return}let S=t.propertyResolvers?.[f],g,R=a((E,T)=>{let O,v;if(S){if(S.from&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let q of p.idFilter.idSet)e={attribute:S.from,value:q};g=u(S.from,p.idFilter,!0,!0)}else g=u(S.from,p.idFilter,!1,!0);let F=g(E);return g.idFilter&&(R.idFilter=g.idFilter),F}v=S(E,r,T),O=v?.value}else O=E[f];return O?Array.isArray(O)?O.some(p):p(O,v):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),vA[o]||o){case ls.SEARCH_TYPES.EQUALS:case void 0:return u(c,f=>f===l,!0);case"contains":return u(c,f=>f?.toString().includes(l));case"ends_with":return u(c,f=>f?.toString().endsWith(l));case"starts_with":return u(c,f=>typeof f=="string"&&f.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,f=>{if(!Array.isArray(f))return!1;for(let d=0,h=l.length;d<h;d++)if(f[d]!==l[d])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,f=>(0,hi.compareKeys)(f,l[0])>=0&&(0,hi.compareKeys)(f,l[1])<=0,!0);case"gt":return u(c,f=>(0,hi.compareKeys)(f,l)>0);case"ge":return u(c,f=>(0,hi.compareKeys)(f,l)>=0);case"lt":return u(c,f=>(0,hi.compareKeys)(f,l)<0);case"le":return u(c,f=>(0,hi.compareKeys)(f,l)<=0);case"ne":return u(c,f=>(0,hi.compareKeys)(f,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new dn.ClientError(`Unknown query comparator "${o}"`)}function u(f,d,h,_){let p;h=h&&!s&&t?.indices[f]&&i>3,h&&(e.estimated_count==null&&jp(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(h=!1));let S=0,g=3;function R(E){let T=E[f],O;if(typeof T!="object"||!T||_?O=d(T):Array.isArray(T)?O=T.some(d):T instanceof Date&&(O=d(T.getTime())),h&&(g++,!O&&!R.idFilter&&++S/g*(i-g)>p)){let v=zl(e,r.transaction.getReadTxn(),!1,t).map(jl),F=new Set(v);R.idFilter=q=>F.has(jl(q)),R.idFilter.idSet=F}return O}return a(R,"recordFilter"),s&&(R.idFilter=d),R}a(u,"attributeComparator")}function jp(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/Qi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=vA[n]||n,n===ls.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=pi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=jp(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*Qi(e.indices[i.relationship.from])/(Qi(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=Qi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=N4*Qi(e.primaryStore)+1:n==="between"?r.estimated_count=O4*Qi(e.primaryStore)+1:n==="sort"?r.estimated_count=Qi(e.primaryStore)+1:r.estimated_count=b4*Qi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Qp(e){if(e)if(ta=e,Yl.lastIndex=0,P4.test(e))try{let t=hf(new Wl,"");if(un!==ta.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${un} in '${ta}'`,t}else return new URLSearchParams(e)}function hf(e,t){let r=Yl,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(ta);){un=r.lastIndex;let[,f,d]=n;if(o){if(f)throw new SyntaxError(`expected operator, but encountered '${f}'`);o=!1,c=!1}else c=!0;let h;switch(d){case"=":if(s!=null){if(f.length<=2)i=f;else throw new SyntaxError(`invalid FIQL operator ${f}`);l=WD}else{if(l=decodeURIComponent,i="equals",!f)throw new SyntaxError("attribute must be specified before equality comparator");s=pf(f)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=w4[d],l=LA[i]?WD:decodeURIComponent,!f)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=pf(f);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(f)};if(i==="eq"&&zD(p,f),s===""){let S=e.conditions[e.conditions.length-1];S.chainedConditions=S.chainedConditions||[],S.chainedConditions.push(p),S.operator=u}else zp(e,u),e.conditions.push(p)}d==="&"?(u="and",s=void 0):d==="|"?(u="or",s=void 0):d==="&="?(u="and",s=""):d==="|="&&(u="or",s="");break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(pf(f)),s=void 0;break;case"(":Yl.lastIndex=un;let _=hf(f?[]:new Wl,")");switch(f){case"":zp(e,u),e.conditions.push(_);break;case"limit":switch(_.length){case 1:e.limit=+_[0];break;case 2:e.offset=+_[0],e.limit=_[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(_[0])&&_.length===1&&!_[0].name?(e.select=_[0],e.select.asArray=!0):_.length===1?e.select=_[0]:_.length===2&&_[1]===""?e.select=_.slice(0,1):e.select=_;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=jD(_);break;default:throw new SyntaxError(`unknown query function call ${f}`)}ta[un]===","?r.lastIndex=++un:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!f)throw new SyntaxError("property sets must have a defined parent property name");Yl.lastIndex=un,h=hf([],"}"),h.name=f,e.push(h),ta[un]===","?r.lastIndex=++un:o=!0;break;case"[":Yl.lastIndex=un,f?(h=hf(new Wl,"]"),h.name=f):h=hf(e.conditions?new Wl:[],"]"),e.conditions?(zp(e,u),e.conditions.push(h),s=null):e.push(h),ta[un]===","?r.lastIndex=++un:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let p={comparator:i||"equals",attribute:s,value:l(f)};i==="eq"&&zD(p,f),zp(e,u),e.conditions.push(p)}else if(f)throw new SyntaxError("no attribute or comparison specified")}else(f||e.length>0&&c)&&e.push(pf(f));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?D4:Yl,r.lastIndex=un),un===ta.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function zp(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function pf(e){return e.indexOf(".")>-1?e.split(".").map(pf):decodeURIComponent(e)}function WD(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 dn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function zD(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new dn.ClientError("wildcard can only be used at the end of a string")}function jD(e){let t=QD(e[0]);return e.length>1&&(t.next=jD(e.slice(1))),t}function QD(e){if(Array.isArray(e)){let t=QD(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function jl(e){return Array.isArray(e)?e.join("\0"):e}function Qi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function L4(e,t,r){return t*r/Qi(e)}var dn,ls,hi,ea,b4,O4,N4,w4,LA,vA,P4,Yl,D4,un,ta,Wl,pc,Ef=be(()=>{dn=M(he()),ls=M(Ft()),hi=require("ordered-binary"),ea=require("lmdb");gf();b4=.3,O4=.1,N4=.05,w4={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},LA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(MA,"executeConditions");a(zl,"searchByIndex");a(pi,"findAttribute");a(I4,"joinTo");a(C4,"joinFrom");vA={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(mf,"filterByType");a(jp,"estimateCondition");P4=/[()[\]|!<>.]|(=\w*=)/,Yl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,D4=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Qp,"parseQuery");a(hf,"parseBlock");a(zp,"assignOperator");a(pf,"decodeProperty");a(WD,"typedDecoding");a(zD,"wildcardDecoding");a(jD,"toSortObject");a(QD,"toSortEntry");Wl=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(jl,"flattenKey");a(Qi,"estimatedEntryCount");a(L4,"intersectionEstimate");pc=class{constructor(t){this.url=t}static{a(this,"SimpleURLQuery")}get(){}[Symbol.iterator](){return[][Symbol.iterator]()}}});var xA={};Be(xA,{MultiPartId:()=>Xp,Resource:()=>qr,snake_case:()=>v4,transformForSelect:()=>Zp});function v4(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function JD(e,t){if(mc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(mc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Xp;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){mc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return mc=!0,null;e[e.length-1]==="/"&&(mc=!0)}return t.coerceId(decodeURIComponent(e))}function Un(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,f;if(r?(o?(f=i,o=o.getContext?.()||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(f=s,c=f[this.primaryKey]??null,o=i.getContext?.()||i):f=i:(f=s,s=void 0,c=f.getId?.()??f[this.primaryKey]),c===null&&(u=!0)):i?o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="object"&&s){if(l=s,typeof(c=s.url)=="string")if(this.directURLMapping)c=c.slice(1);else{let _=c.indexOf("?");if(_>-1){let S=this.parseQuery(c.slice(_+1));l?S&&(l=Object.assign(S,l)):l=S,c=c.slice(0,_)}let p=this.parsePath(c,o,l);p?.id!==void 0?(p.query&&(l?l=Object.assign(p.query,l):l=p.query),u=p.isCollection,c=p.id):c=p}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new pc(c),c==null&&(u=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||u?(d={...t},l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),u&&(d.isCollection=!0)):d=t,o.transaction){let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)}else return It(o,()=>{let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)},d);function h(_){if(o.authorize){o.authorize=!1;let p=t.type==="read"?_.allowRead(o.user,l,o):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(o.user,f,o):_.allowUpdate(o.user,f,o):t.type==="create"?_.allowCreate(o.user,f,o):_.allowDelete(o.user,l,o);if(p?.then)return p.then(S=>{if(!S)throw new Jp(o.user);return typeof f?.then=="function"?f.then(g=>e(_,l,o,g)):e(_,l,o,f)});if(!p)throw new Jp(o.user)}return typeof f?.then=="function"?f.then(p=>e(_,l,o,p)):e(_,l,o,f)}a(h,"authorizeActionOnResource")}}function xn(e,t){let r=new eL.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 UA(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 Zp(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):UA(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=[],f=i(UA(l,r,n));for(let d of e)u.push(f(d));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(h=>h&&typeof h=="object"?c(h):h);let u={},f=i(UA(l,r,n)),d;for(let h of e){let _=f(h);_===void 0&&o&&(_=null),_?.then?(d||(d=[]),d.push(_.then(p=>u[h.name||h]=p))):u[h.name||h]=_}return d?Promise.all(d).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 f=r[c.name]?.definition?.tableClass;l=s[c.name]=Zp(c.select||c,f)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var XD,ZD,eL,M4,qr,Jp,mc,Xp,na=be(()=>{XD=require("crypto");Kl();ZD=M(ui()),eL=M(he());hc();Ef();M4={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qr=class{static{a(this,"Resource")}#e;#t;#n;static transactions;static directURLMapping=!1;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=Un(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Zp(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Un(function(t,r,n,s){if(Array.isArray(s)&&t.#n){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,u=l.getResource(c[l.primaryKey],n,{async:!0});u.then?i.push(u.then(f=>f.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):xn(t,"put")},{hasContent:!0,type:"update"});static patch=Un(function(t,r,n,s){return t.patch?t.patch(s,r):xn(t,"patch")},{hasContent:!0,type:"update"});static delete=Un(function(t,r,n,s){return t.delete?t.delete(r):xn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,XD.randomUUID)()}static create(t,r,n){let s;return t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n||(n={}),It(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):xn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=Un(function(t,r,n,s){return t.invalidate?t.invalidate(r):xn(t,"delete")},{hasContent:!1,type:"update"});static post=Un(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Un(function(t,r,n,s){return t.connect?t.connect(s,r):xn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Un(function(t,r,n,s){return t.subscribe?t.subscribe(r):xn(t,"subscribe")},{type:"read"});static publish=Un(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.publish(s,r):xn(t,"publish")},{hasContent:!0,type:"create"});static search=Un(function(t,r,n,s){let i=t.search?t.search(r):xn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Zp(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Un(function(t,r,n,s){return t.search?t.search(s,r):xn(t,"search")},{hasContent:!0,type:"read"});static copy=Un(function(t,r,n,s){return t.copy?t.copy(s,r):xn(t,"copy")},{hasContent:!0,type:"create"});static move=Un(function(t,r,n,s){return t.move?t.move(s,r):xn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;xn(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t){return Qp(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&M4[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:JD(t,this),isCollection:mc}}let i=JD(t,this);return mc?{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(f=>f.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 f of l){let d=f.#e,h=u.get(d);h?h.push(f):u.set(d,[f])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new vn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new vn}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,ZD._assignPackageExport)("Resource",qr);a(v4,"snake_case");Jp=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(JD,"pathToId");Xp=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Un,"transactional");a(xn,"missingMethod");a(UA,"selectFromObject");a(Zp,"transformForSelect")});var sa,BA=be(()=>{sa=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var nL={};Be(nL,{Resources:()=>em,keyArrayToString:()=>Ql,resetResources:()=>U4,resources:()=>us});function U4(){return us=new em,Ke.resources=us,us}function Ql(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var tL,rL,em,us,Jl=be(()=>{hc();BA();tL=M(X()),rL=M(he());Dr();em=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new rL.ServerError(`Conflicting paths for ${t}`);tL.default.error(c),i.Resource=new sa(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let f=this.get(c.slice(0,u));f&&(f.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),f=this.get(u),d=-1;if(!f&&n===o&&(d=u.indexOf("?",s),d!==-1)){let h=u.slice(0,d);f=this.get(h)}if(f&&(!r||f.exportTypes?.[r]!==!1)){if(f.relativeURL=t.slice(d!==-1?d:n),!f.hasSubPaths)return f;i=f}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 It(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(U4,"resetResources");a(Ql,"keyArrayToString")});var HA=P((XAe,sL)=>{if(__filename.endsWith("dev.js")){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:o,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:f,spawn:d}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:h}=Et(),_=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],p="ts-build";if(u){let R=!1,E=!1;if(E=s(n(h,p))){let T=new Set;e.sync(_.map(O=>`${O}/**/*.ts`),{cwd:h}).forEach(O=>{let v=0,F=0;try{T.add(O),v=i(n(h,O)).mtimeMs-5e3,F=i(n(h,p,O.replace(/.ts$/,".js"))).mtimeMs}catch{}v>F&&(R=!0)}),e.sync(_.map(O=>`${O}/**/*.js`),{cwd:n(h,p)}).forEach(O=>{if(!T.has(O.replace(/.js$/,".ts")))try{l(n(h,p,O))}catch{}})}else R=!0;if(R){console.log("Compiling TypeScript...");let T=f("npx",["tsc"],{cwd:h});if(T.stdout?.length&&console.log(T.stdout.toString()),T.stderr?.length&&console.log(T.stderr.toString()),E){let O=n(t(),"harperdb-tsc.pid"),v=!1;if(s(O))try{process.kill(+o(O,"utf8"),0),v=!0}catch{}if(!v){console.log("Starting background TypeScript compilation...");let F=d("npx",["tsc","--watch"],{detached:!0,cwd:h,stdio:"ignore"});F.on("error",q=>{console.error("Error trying to compile TypeScript",q)}),F.pid&&c(O,String(F.pid),"utf-8"),F.unref()}}}}let S=sL.constructor,g=S._findPath;S._findPath=function(R,E,T){if(R.startsWith(".")&&!T&&E.length===1&&E[0].startsWith(h)&&!E[0].includes("node_modules")){let O=r(h,E[0]),v;O.startsWith(p)?v=n(h,r(p,O)):v=n(h,p,O);let F=n(v,R),q=F+".js";if(s(q))return q;if(F.includes(".")&&s(F))return F}return g(R,E,T)}}});var GA={};Be(GA,{loadGQLSchema:()=>H4,start:()=>FA,startOnMainThread:()=>B4});function FA({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:f}=await import("graphql"),d=o(new c(r.toString(),s)),h=new Map,_=[],p;for(let R of d.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(j){if(j.kind==="NonNullType"){let z=F(j.type);return z.nullable=!1,z}if(j.kind==="ListType")return{type:"array",elements:F(j.type)};let se={type:j.name?.value};return Object.defineProperty(se,"location",{value:j.loc.startToken}),se};a(F,"getProperty");let E=R.name.value,T=[],O={table:null,database:null,properties:T};h.set(E,O);for(let j of R.directives){if(j.name.value==="table"){for(let se of j.arguments)O[se.name.value]=se.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=E),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,_.push(O)}if(j.name.value==="sealed"&&(O.sealed=!0),j.name.value==="splitSegments"&&(O.splitSegments=!0),j.name.value==="replicate"&&(O.replicate=!0),j.name.value==="export"){O.export=!0;for(let se of j.arguments)typeof O.export!="object"&&(O.export={}),O.export[se.name.value]=se.value.value}}let v=!1,q={};for(let j of R.fields){let te=F(j.type);te.name=j.name.value,T.push(te),q[te.name]=void 0;for(let se of j.directives){let z=se.name.value;if(z==="primaryKey")v?console.warn("Can not define two attributes as a primary key at",se.loc):(te.isPrimaryKey=!0,v=!0);else if(z==="indexed")te.indexed=!0;else if(z==="computed"){for(let ne of se.arguments||[])if(ne.name.value==="from"){let le=ne.value.value;te.computed={from:g(le,ne,q)},te.version==null&&(te.version=le)}else ne.name.value==="version"&&(te.version=ne.value.value);te.computed=te.computed||!0}else if(z==="relationship"){let ne={};for(let le of se.arguments)ne[le.name.value]=le.value.value;te.relationship=ne}else if(z==="createdTime")te.assignCreatedTime=!0;else if(z==="updatedTime")te.assignUpdatedTime=!0;else if(z==="expiresAt")te.expiresAt=!0;else if(z==="allow"){let ne=te.authorizedRoles=[];for(let le of se.arguments)le.name.value==="role"&&ne.push(le.value.value)}else server.knownGraphQLDirectives.includes(z)&&console.warn(`@${z} is an unknown directive, at`,se.loc)}}O.type=E,E==="Query"&&(p=O)}function S(R){let E=h.get(R.type);E?(Object.defineProperty(R,"properties",{value:E.properties}),Object.defineProperty(R,"definition",{value:E})):R.type==="array"?S(R.elements):x4.includes(R.type)||(0,oL.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let R of h.values())for(let E of R.properties)S(E);for(let R of _)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,kA.dirname)(n),R.tableClass):i.set((0,kA.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,E,T){return new iL.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:E.loc.startToken.line-1,columnOffset:E.loc.startToken.column}).runInThisContext()(T)}a(g,"createComputedFrom")}}var kA,iL,oL,x4,B4,H4,aL=be(()=>{kA=require("path"),iL=require("node:vm");Ue();oL=M(st()),x4=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(FA,"start");B4=FA,H4=FA({ensureTable:_t}).handleFile});var hL={};Be(hL,{parse:()=>$A,streamAsJSON:()=>Sf,stringify:()=>Ec});function Sf(e){return new qA({value:e})}function cL(e){return console.error(e),JSON.stringify(e.toString())}function lL(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Ec(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===fL)return _L(e);if(t.resolution)return t.resolution.then(()=>Ec(e));throw t}}function _L(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+=_L(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Ec(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function $A(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),G4.test(e)?k4.parse(e):JSON.parse(e)):null}var uL,dL,k4,F4,fL,qA,G4,VA=be(()=>{uL=require("stream"),dL=M(require("json-bigint-fixes")),k4=(0,dL.default)({useNativeBigInt:!0}),F4=1e4,fL={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw fL};a(Sf,"streamAsJSON");qA=class extends uL.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),cL)}catch(s){yield cL(s)}else yield Ec(t)}else yield Ec(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);lL(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>F4?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 lL(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(cL,"handleError");a(lL,"when");a(Ec,"stringify");a(_L,"jsStringify");G4=/[[,:]\s*-?\d{16,}/;a($A,"parse")});var mi=P(rm=>{var tm=X();for(let e of["trace","debug","info","warn","error","fatal","notify"])tm.logsAtLevel(e)&&(rm[e]=tm[e]);rm.loggerWithTag=e=>tm.loggerWithTag(e,!0);rm.setLogLevel=tm.setLogLevel});var fm={};Be(fm,{Blob:()=>gi,blobsWereEncoded:()=>gc,databasePaths:()=>YA,decodeBlobsWithWrites:()=>dm,decodeFromDatabase:()=>Sc,decodeWithBlobCallback:()=>bf,deleteBlob:()=>cm,deleteBlobsInObject:()=>ia,deleteRootBlobPathsForDB:()=>jA,encodeBlobsAsBuffers:()=>J4,encodeBlobsWithFilePath:()=>um,findBlobsInObject:()=>Zl,getFileId:()=>lm,getFilePathForBlob:()=>yL,getRootBlobPathsForDB:()=>yf,setDeletionDelay:()=>K4});function TL(){}function cm(e){let t=yL(e);t&&setTimeout(()=>{(0,Je.unlink)(t,r=>{r&&Ji.default.debug?.("Error trying to remove blob file",r)})},AL)}function K4(e){AL=e}function RL(e){let t=_n.get(e);if(!t)t={storageIndex:0,fileId:null,store:hn},_n.set(e,t);else{if(t.fileId)return t;t.store=hn}return W4(t),t.source?KA(e,t.source,t):t.contentBuffer?Y4(e,t):KA(e,Af.Readable.from(e.stream()),t),t}function KA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let f=s+":blob";if(!i.attemptLock(f,0))throw new Error(`Unable to get lock for blob file ${s}`);let d=(0,Je.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());d.write(Buffer.concat([p(BigInt(g.length)+0xff000000000000n),g])),S(t.errored);return}let h=!1;e.size!==void 0&&(d.write(p(e.size)),h=!0);let _;o?(h||d.write($4),_=(0,om.createDeflate)(),t.pipe(_).pipe(d)):(h||d.write(q4),t.pipe(d)),t.on("error",S);function p(g){let R=BigInt(g),E=new Uint8Array(mr),T=new DataView(E.buffer);return R|=BigInt(o?zA:SL)<<48n,T.setBigInt64(0,R),E}a(p,"createHeader");function S(g){i.unlock(f,0);let R=d.fd;g?(R&&(0,Je.close)(R),u(g)):c?(0,Je.fdatasync)(R,E=>{E&&u(E),l(),(0,Je.close)(R)}):(l(),(0,Je.close)(R))}a(S,"finished"),d.on("error",S).on("finish",()=>{if(h)S();else{let g=_?_.bytesWritten:d.bytesWritten-mr;e.size=g,(0,Je.write)(d.fd,p(g),0,mr,0,S)}})}),e}function lm(e){return _n.get(e)?.fileId}function yL(e){let t=_n.get(e);return t?.fileId&&Rf(t)}function yf(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=YA.get(e);if(!t){if(!e.databaseName)return Ji.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,am.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Zi.join)(n,e.databaseName)):t=[(0,Zi.join)((0,am.getHdbBasePath)(),"blobs",e.databaseName)],YA.set(e,t)}return t}async function jA(e){let t=yf(e);t&&await Promise.all(t.map(r=>bL(r)))}async function bL(e){if((0,Je.existsSync)(e)){for(let t of await(0,ds.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await bL((0,Zi.join)(e,t.name));else try{await(0,ds.unlink)((0,Zi.join)(e,t.name))}catch(r){Ji.default.warn?.("Error deleting file",r)}try{await(0,ds.rmdir)(e)}catch(t){Ji.default.warn?.("Error deleting directory",t)}}}function Rf({storageIndex:e,fileId:t,store:r}){let n=yf(r);return(0,Zi.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 Y4(e,t){let r=t.contentBuffer,n=r.length;if(!(n<gL))return e.size=n,KA(e,Af.Readable.from([r]),t)}function W4(e){let t=yf(e.store),r=z4(),n=t?.length>1?j4(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Rf(e),o=(0,Zi.dirname)(i);(0,Je.existsSync)(o)||(0,WA.ensureDirSync)(o),e.filePath=i}function z4(){let e=EL.get(hn);if(!e){let t=0,r=yf(hn);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,Zi.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(hn.getUserSharedBuffer("blob-file-id",e.buffer)),EL.set(hn,e)}return Number(Atomics.add(e,0,1n))}function j4(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(im);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,Q4(e)),e.frequencyTable[t%im]}async function Q4(e){if(!ds.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o;try{o=await(0,ds.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,WA.ensureDirSync)(s),o=await(0,ds.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(im),n=t.map(s=>1/s);for(let s=0;s<im;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 um(e,t,r){Xl=t,hn=r,gc=!1;try{return e()}finally{Xl=void 0,hn=void 0}}function J4(e){Lr=[];let t;try{t=e()}catch(n){throw Lr=void 0,n}let r=Lr.length<2?Lr[0]:Promise.all(Lr);return Lr=void 0,r?r.then(()=>e()):t}function dm(e,t){try{Lr=[],Xi=t,e()}catch(n){throw Xi=void 0,Lr=void 0,n}Xi=void 0;let r=Lr.length<2?Lr[0]:Promise.all(Lr);return Lr=void 0,r}function bf(e,t,r){hn=r;try{return Xi=t,e()}finally{Xi=void 0}}function Sc(e,t){return hn=t,e()}function ia(e){Zl(e,t=>{cm(t)})}function Zl(e,t){if(e instanceof gi)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Zl(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Zl(e[r],t)}}function Z4(){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""}}}var Ei,ds,Je,om,Af,WA,am,Zi,Ji,gL,mr,SL,zA,pL,q4,$4,mL,_n,Xi,gi,Xl,Lr,hn,gc,Tf,nm,V4,sm,AL,YA,EL,im,X4,fs=be(()=>{Ei=require("msgpackr"),ds=require("node:fs/promises"),Je=require("node:fs"),om=require("node:zlib"),Af=require("node:stream"),WA=require("fs-extra"),am=M(ce());G();Zi=require("path"),Ji=M(mi());eo();gL=8192,mr=8,SL=0,zA=1,pL=255,q4=new Uint8Array([0,SL,255,255,255,255,255,255]),$4=new Uint8Array([0,zA,255,255,255,255,255,255]),mL=0xffffffffffff,_n=new WeakMap,gi=global.Blob||Z4(),gc=!1,Tf=new Uint8Array(8),nm=new DataView(Tf.buffer),V4=6e4;a(TL,"InstanceOfBlobWithNoConstructor");TL.prototype=gi.prototype;sm=class e extends TL{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=_n.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):(JA()&&QA(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=_n.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=Rf(t),o,c=a(async()=>{let l,u=mr;try{if(l=await(0,ds.readFile)(i),l.length>=mr){l.copy(Tf,0,0,mr);let d=nm.getBigUint64(0);if(Number(d>>48n)===pL)throw new Error("Error in blob: "+buffer.subarray(mr));if(u=Number(d&0xffffffffffffn),u<n&&(u=n),u<mL&&(this.size=u,this.#t))for(let h of this.#t)h(u)}}catch(d){if(d.code!=="ENOENT")throw d;l=Buffer.alloc(0)}function f(d){if(u>d.length){let h=t.store,_=t.fileId+":blob";if(o)throw new Error(`Incomplete blob for ${i}`);return new Promise((p,S)=>{if(h.attemptLock(_,0,()=>(o=!0,p(c()))))return o=!0,h.unlock(_,0),p(c())})}return(n!=null||r!=null)&&(d=d.subarray(r??0,n??d.length)),d}return a(f,"checkCompletion"),l[1]===zA?new Promise((d,h)=>{(0,om.deflate)(l.subarray(mr),(_,p)=>{_?h(_):d(f(p))})}):f(l.subarray(mr))},"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=_n.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(S){S.enqueue(r),S.close()}});let i=Rf(t),o,c=0,l=0,u,f,d,h=!1,_=this;return new ReadableStream({start(){let S=1e3,g=a((R,E)=>{(0,Je.open)(i,"r",(T,O)=>{if(T){if(T.code==="ENOENT"&&d!==!1&&(Ji.default.debug?.("File does not exist yet, waiting for it to be created",i,S),S-- >0))return setTimeout(()=>{p(),g(R,E)},20).unref();E(T),_.#e?.forEach(v=>v(T))}else o=O,R(O)})},"openFile");return new Promise(g)},pull:a(S=>{let g=0,R=100;return new Promise(a(function E(T,O){function v(q){(0,Je.close)(o),clearTimeout(f),u&&u.close(),O(q),_.#e?.forEach(j=>j(q))}a(v,"onError");let F=Buffer.allocUnsafe(262144);(0,Je.read)(o,F,0,F.length,c,(q,j,te)=>{if(l+=j,q)return v(q);if(c===0){if(j<mr){R-- >0&&d!==!1?(p(),Ji.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>E(T,O),20).unref()):(Ji.default.debug?.("File was empty, throwing error",i,R),O(new Error(`Blob ${t.fileId} was empty`)));return}te.copy(Tf,0,0,mr);let se=nm.getBigUint64(0);if(Number(se>>48n)===pL)return v(new Error("Error in blob: "+te.subarray(mr)));if(g=Number(se&0xffffffffffffn),g<mL&&_.size!==g&&(_.size=g,_.#t))for(let z of _.#t)z(g);te=te.subarray(mr,j),l-=mr}else if(j===0){let se=Buffer.allocUnsafe(8);return(0,Je.read)(o,se,0,mr,0,z=>{if(z)return v(z);if(Tf.set(se),g=Number(nm.getBigUint64(0)&0xffffffffffffn),g>l){p()?u?f=setTimeout(()=>{v(new Error(`File read timed out reading from ${i}`))},V4).unref():(u=(0,Je.watch)(i,{persistent:!1},()=>{u.close(),u=null,f&&(clearTimeout(f),f=null,E(T,O))}),E(T,O)):h?v(new Error("Blob is incomplete")):(h=!0,E(T,O));return}(0,Je.close)(o),S.close(),T()})}else te=te.subarray(0,j);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=j,E(T,O);s&&l>=s&&(l>s&&(te=te.subarray(0,s-c)),l=g=s),n&&n>c&&(te=te.subarray(n-c))}c+=j;try{S.enqueue(te)}catch(se){return Ji.default.debug?.("Error enqueuing chunk",se),T()}l===g&&((0,Je.close)(o),S.close()),T()})},"readMore"))},"pull"),cancel(){(0,Je.close)(o),clearTimeout(f),u&&u.close()}});function p(){if(d===void 0){let S=t.store,g=t.fileId+":blob";d=!S.attemptLock(g,0,()=>{d=!1}),d||S.unlock(g,0)}return d}}slice(t,r,n){let s=_n.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};_n.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)};_n.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(t){if(hn=t?.primaryStore?.rootStore,!hn)throw new Error("No target table specified");return RL(this).saving??Promise.resolve()}},AL=500;a(cm,"deleteBlob");a(K4,"setDeletionDelay");global.createBlob=function(e,t){let r=new sm(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(_n.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Af.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Af.Readable.from(e);else throw new Error("Invalid source type");return r};a(RL,"saveBlob");a(KA,"writeBlobWithStream");a(lm,"getFileId");a(yL,"getFilePathForBlob");YA=new Map;a(yf,"getRootBlobPathsForDB");a(jA,"deleteRootBlobPathsForDB");a(bL,"rimrafSteadily");a(Rf,"getFilePath");a(Y4,"writeBlobWithBuffer");a(W4,"generateFilePath");EL=new Map;a(z4,"getNextFileId");im=128;a(j4,"getNextStorageIndex");a(Q4,"createFrequencyTableForStoragePaths");a(um,"encodeBlobsWithFilePath");a(J4,"encodeBlobsAsBuffers");a(dm,"decodeBlobsWithWrites");a(bf,"decodeWithBlobCallback");a(Sc,"decodeFromDatabase");a(ia,"deleteBlobsInObject");a(Zl,"findBlobsInObject");X4=new Ei.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Ei.addExtension)({Class:gi,type:11,unpack:a(function(e){let t=X4.unpack(e),r=new sm;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(_n.set(r,{storageIndex:t[1],fileId:t[2],store:hn}),Xi)return Xi(r)??r;if(!hn)throw new Error("No store specified, cannot load blob from storage")}else _n.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=_n.get(e);if(Xl!==void 0&&(gc=!0,t?.recordId!==void 0&&t.recordId!==Xl))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<gL)return r.size=t.contentBuffer.length,(0,Ei.pack)([r,t.contentBuffer])}if(Xl!==void 0){if(t=RL(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Xl,(0,Ei.pack)([r,t.storageIndex,t.fileId])}if(t){if(Xi)return Xi(e),(0,Ei.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,Je.readFileSync)(Rf(t));if(n.length>=mr&&(n.copy(Tf,0,0,mr),Number(nm.getBigUint64(0)&0xffffffffffffn)===n.length-mr))return Buffer.concat([(0,Ei.pack)([r]),n]);if(Lr)Lr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Lr)return Lr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Ei.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(Z4,"polyfillBlob")});var LL={};Be(LL,{asyncSerialization:()=>QA,contentTypes:()=>tR,findBestSerializer:()=>hm,getDeserializer:()=>no,hasAsyncSerialization:()=>JA,registerContentHandlers:()=>wf,serialize:()=>If,serializeMessage:()=>oa,toCsvStream:()=>_m});function t3(e){try{return e?.[0]===123?eR(e):e}catch{return e}}function wf(e){e.register(n3,{serializers:[{regex:/^application\/json$/,serializer:Sf},{regex:/^application\/cbor$/,serializer:a(function(t){return new Tc.EncoderStream(Nf).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Ac.Readable.from((0,Si.encodeIter)(t,Nf)):(0,Si.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),_m(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Si.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Tc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function hm(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,...f]=l.split(/\s*;\s*/),d=1,h={q:1};for(let p of f){let S=p.indexOf("=");h[p.substring(0,S)]=p.substring(S+1)}d=+h.q;let _=$r.get(u);if(_){let p=(_.q||1)*d;p>s&&(n=_,i=_.type||u,s=p,o=h)}}if(!n){if(r)throw new wL.ClientError("No supported content types found in Accept header, supported types include: "+Array.from($r.keys()).join(", "),406);n=$r.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function If(e,t,r){let n=NL&&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 gi)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=hm(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}),ZA.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,ro.createBrotliCompress)({params:{[ro.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?ro.constants.BROTLI_MODE_TEXT:ro.constants.BROTLI_MODE_GENERIC,[ro.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>NL?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,ro.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function oa(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;to=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=hm(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=Of(e);return to?.length>0?(to.length===1?to[0]:Promise.all(to)).then(()=>oa(e,t,!0)):n}finally{to=void 0}}function QA(e){if(to)to.push(e);else throw new Error("Unable to serialize asynchronously")}function JA(){return!!to}function s3(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 o3(e){return i3.includes(e)}function a3(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 no(e="",t=!1){let r=a3(e),n=r.type&&$r.get(r.type)?.deserialize||c3(r);return t?s=>s3(s).then(n):n}function c3(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!o3(e.parameters.charset)&&ZA.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 eR(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function l3(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 _m(e,t){let r=Ac.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 e3(n,s);return r.pipe(i)}var Si,Tc,ro,wL,Ac,IL,XA,CL,ZA,e3,PL,Of,eR,Nf,$r,tR,OL,DL,r3,n3,NL,to,i3,eo=be(()=>{VA();Si=require("msgpackr"),Tc=require("cbor-x"),ro=require("zlib"),wL=M(he()),Ac=M(require("stream"));Dr();IL=M(ui()),XA=M(ce());G();CL=M(require("yaml")),ZA=M(mi());fs();({Transform:e3}=require("json2csv")),PL=XA.default.get(B.SERIALIZATION_BIGINT)!==!1,Of=PL?Ec:JSON.stringify,eR=PL?$A:JSON.parse,Nf={useRecords:!1,useToJSON:!0},$r=new Map,tR=$r;Ke.contentTypes=tR;(0,IL._assignPackageExport)("contentTypes",tR);$r.set("application/json",{serializeStream:Sf,serialize:Of,deserialize(e){return eR(e)},q:.8});OL=new Tc.Encoder(Nf);$r.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Tc.EncoderStream(Nf).end(e)},serialize:OL.encode,deserialize:OL.decode,q:1});$r.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Ac.Readable.from((0,Si.encodeIter)(e,Nf)):(0,Si.pack)(e)},serialize:Si.pack,deserialize:Si.unpack,q:.9});$r.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),_m(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]),_m(e,e?.getColumns?.())},q:.1});$r.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Ac.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});$r.set("text/yaml",{serialize(e){return CL.stringify(e,{aliasDuplicateObjects:!1})},q:.7});$r.set("text/event-stream",{serializeStream:a(function(e){return Ac.Readable.from(l3(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+`
11
+ `),e.data){let r=e.data;typeof r=="object"&&(r=Of(r)),t+="data: "+r+`
12
12
  `}return e.id&&(t+="id: "+e.id+`
13
13
  `),e.retry&&(t+="retry: "+e.retry+`
14
14
  `),t+`
15
- `}else return typeof e=="object"?`data: ${bf(e)}
15
+ `}else return typeof e=="object"?`data: ${Of(e)}
16
16
 
17
17
  `:`data: ${e}
18
18
 
19
- `},"serialize"),compressible:!1,q:.8});$r.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()}});DL={type:"application/json",serializeStream:gf,serialize:bf,deserialize:t3,q:.5};$r.set("*/*",DL);$r.set("",DL);a(t3,"tryJSONParse");a(Nf,"registerContentHandlers");r3=require("fastify-plugin"),n3=r3(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=mp(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 f=l.getColumns;l=l.mapError(d=>(d.toJSON=()=>({error:d.name,message:d.message,...d.partialObject}),d)),l.getColumns=f}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((f,d)=>{s.header(f,d)},"set")}})})}),r()},{name:"content-type-negotiation"});a(mp,"findBestSerializer");NL=XA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);a(wf,"serialize");a(oa,"serializeMessage");a(jA,"asyncSerialization");a(JA,"hasAsyncSerialization");a(s3,"streamToBuffer");i3=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(o3,"isBufferEncoding");a(a3,"parseContentType");a(no,"getDeserializer");a(c3,"deserializerUnknownType");a(l3,"transformIterable");a(hp,"toCsvStream")});var nR={};Be(nR,{start:()=>g3});function u3(e){if(e.kind!==ve.Kind.OPERATION_DEFINITION&&e.kind!==ve.Kind.FRAGMENT_DEFINITION)throw new yr(`Unexpected non-executable definition type ${e.kind}.`)}function ML(e){if(typeof e!="object"||e===null)throw new Ti("Request body must be an object.");if(!("query"in e))throw new Ti("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ti("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ti("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ti("Request body `operationName` field must be a string.")}function rR(e){return parseInt(e.value,10)}function UL(e){return parseFloat(e.value)}function xL(e,t,r){let n=r.get(e.name.value);return BL(n)?HL(n,t):{attribute:t,value:n}}function BL(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function HL(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],BL(n)?HL(n,t):{attribute:t,value:n}))}function d3(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case ve.Kind.NULL:return{attribute:t,value:null};case ve.Kind.INT:return{attribute:t,value:rR(e.value)};case ve.Kind.FLOAT:return{attribute:t,value:UL(e.value)};case ve.Kind.BOOLEAN:case ve.Kind.STRING:return{attribute:t,value:e.value.value};case ve.Kind.VARIABLE:return xL(e.value,t,r);case ve.Kind.OBJECT:return kL(e.value,t,r);case ve.Kind.LIST:case ve.Kind.ENUM:default:throw new yr(`Value type, ${e.value.kind}, is not supported.`)}}function kL(e,t,r){return e.fields.flatMap(n=>d3(n,t,r))}function f3(e,t){switch(e.value.kind){case ve.Kind.NULL:return{attribute:e.name.value,value:null};case ve.Kind.INT:return{attribute:e.name.value,value:rR(e.value)};case ve.Kind.FLOAT:return{attribute:e.name.value,value:UL(e.value)};case ve.Kind.BOOLEAN:case ve.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case ve.Kind.VARIABLE:return xL(e.value,e.name.value,t);case ve.Kind.OBJECT:return kL(e.value,[e.name.value],t);case ve.Kind.LIST:case ve.Kind.ENUM:default:throw new yr(`Argument type, ${e.value.kind}, is not supported.`)}}function _3(e,t){return e.flatMap(r=>f3(r,t))}function pp(e,t){return e.selections.flatMap(r=>{switch(r.kind){case ve.Kind.FIELD:return r;case ve.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new yr(`Fragment \`${n}\` not found.`);return pp(s.selectionSet,t)}case ve.Kind.INLINE_FRAGMENT:return pp(r.selectionSet,t)}})}function FL(e,t){return pp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:FL(r.selectionSet,t)}:r.name.value)}async function h3(e,t,r,n){let s=us.getMatch(e.name.value,"graphql");if(s===void 0)throw new yr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:FL(e.selectionSet,r),conditions:_3(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 GL(e){switch(e.kind){case ve.Kind.NULL:return null;case ve.Kind.INT:return rR(e);case ve.Kind.FLOAT:return parseFloat(e.value);case ve.Kind.STRING:case ve.Kind.BOOLEAN:return e.value;case ve.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:GL(r.value),...t}),{});case ve.Kind.LIST:case ve.Kind.ENUM:default:throw new yr(`Value type, ${e.kind}, is not supported.`)}}function m3(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=GL(n.defaultValue)),n.type.kind===ve.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new yr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function p3(e,t,r,n){if(e.operation===ve.OperationTypeNode.SUBSCRIPTION)throw new yr("Subscriptions are not supported.");if(e.operation===ve.OperationTypeNode.MUTATION)throw new yr("Mutations are not supported yet.");let s=m3(e.variableDefinitions,t),i=await Promise.all(pp(e.selectionSet,r).map(c=>h3(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function vL({query:e,variables:t={},operationName:r},n){let s=ve.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(u3(u),u.kind===ve.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new yr("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new yr(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new yr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new yr(`Operation \`${r}\` not found.`);let l=await p3(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function E3(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 ML(r),vL(r,e)}case"POST":{let r=await no(e.headers.get("content-type"),!0)(e._nodeRequest);return ML(r),vL(r,e)}default:throw new Ti("Method Not Allowed",405,{Allow:"GET, POST"})}}function g3(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await E3(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ti)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof ve.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof yr)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 Ti)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof ve.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof yr)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 ve,yr,Ti,qL=be(()=>{ve=M(require("graphql"));eo();Jl();a(u3,"assertExecutableDefinitionNode");a(ML,"assertRequestParams");a(rR,"processIntValueNode");a(UL,"processFloatValueNode");a(xL,"processVariableNode");a(BL,"isObject");a(HL,"transformObjectIntoQueryCondition");a(d3,"processObjectFieldNode");a(kL,"processObjectValueNode");a(f3,"processArgumentNode");a(_3,"buildConditionsQuery");a(pp,"fillInFragments");a(FL,"buildSelectQuery");a(h3,"processFieldNode");a(GL,"processConstValueNode");a(m3,"resolveVariables");a(p3,"executeOperation");a(vL,"resolver");yr=class extends Error{static{a(this,"GraphQLQueryingError")}},Ti=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(E3,"graphqlQueryingHandler");a(g3,"start")});var Ri=P((hRe,KL)=>{"use strict";var VL=oe(),$L=(G(),D($)),eu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ai=require("joi"),aa={schema_format:{pattern:eu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},S3=Ai.alternatives(Ai.string().min(1).max(aa.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+aa.schema_format.message}),Ai.number(),Ai.array()).required(),T3=Ai.alternatives(Ai.string().min(1).max(aa.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+aa.schema_format.message}),Ai.number()),A3=Ai.alternatives(Ai.string().min(1).max(aa.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+aa.schema_format.message}),Ai.number()).required();function R3(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>aa.schema_length.maximum?`'${e}' maximum of 250 characters`:eu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(R3,"checkValidTable");function y3(e,t){return VL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(y3,"validateSchemaExists");function b3(e,t){let r=t.state.ancestors[0].schema;return VL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(b3,"validateTableExists");function O3(e,t){return e.toLowerCase()===$L.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${$L.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(O3,"validateSchemaName");KL.exports={common_validators:aa,schema_regex:eu,hdb_schema_table:S3,validateSchemaExists:y3,validateTableExists:b3,validateSchemaName:O3,checkValidTable:R3,hdb_database:T3,hdb_table:A3}});var iR=P((pRe,WL)=>{var{hdb_table:N3,hdb_database:YL}=Ri(),w3=nt(),sR=require("joi"),I3={undefined:"undefined",null:"null"},C3=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||I3[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),P3=sR.object({database:YL,schema:YL,table:N3,records:sR.array().items(sR.object().custom(C3)).required()});WL.exports=function(e){return w3.validateBySchema(e,P3)}});var QL=P((gRe,zL)=>{"use strict";var oR=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")}};zL.exports=oR});var JL=P((TRe,jL)=>{"use strict";var aR=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};jL.exports=aR});var rM={};Be(rM,{HAS_EXPIRATION:()=>Sp,HAS_RESIDENCY_ID:()=>hR,HAS_STRUCTURE_UPDATE:()=>Ap,LAST_TIMESTAMP_PLACEHOLDER:()=>Df,LOCAL_TIMESTAMP:()=>D3,METADATA:()=>yc,NEW_TIMESTAMP_PLACEHOLDER:()=>ZL,NO_TIMESTAMP:()=>cR,PENDING_LOCAL_TIME:()=>mR,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>_R,RecordEncoder:()=>fR,TIMESTAMP_ASSIGN_LAST:()=>M3,TIMESTAMP_ASSIGN_NEW:()=>eM,TIMESTAMP_ASSIGN_PREVIOUS:()=>tM,TIMESTAMP_PLACEHOLDER:()=>Ep,TIMESTAMP_RECORD_PREVIOUS:()=>lR,handleLocalTimeForGets:()=>Rp,recordUpdater:()=>pR,removeEntry:()=>Oc});function U3(){return Pf[0]=Pf[0]^64,L3.getFloat64(0)}function Rp(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++;let l=r.call(this,o,c),u=l?.value,f=u?.[yc];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l&&(l.key=o),l};let n=e.get;e.get=function(o,c){let l=n.call(this,o,c);return l?.[yc]>=0?l.value: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=>{let u=l.value,f=u[yc];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),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,Rc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Rc.length;u++){let f=Rc[u].deref();(!f||f.isDone||f.isCommitted)&&Rc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function pR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?tu=i?.localTime?lR|tM:cR:tu=l?i?.localTime?lR|16384:eM|16384:cR;let _=u?.expiresAt;if(_>=0&&(c|=Sp),Cf=c,uR=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:tu>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(dR=E,Cf|=hR,g|=Nc),R!==E&&(g|=wc,R||(R=0)),c&Sp&&(g|=Mf),u?.originatingOperation&&(g|=Lf),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&mn&&(r.getBinaryFast(i.localTime)||ia(i.value));let T;if(s!==void 0&&(T=dp(()=>e.put(n,s,m),n,e.rootStore),gc&&(g|=mn)),l){let O=u?.user?.username;if(h&&(dp(()=>e.encoder.encode(h),n,e.rootStore),gc&&(g|=mn)),e.encoder.hasStructureUpdate&&(g|=Ap,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let v=i?.localTime,F=r.get(v);if(F){let q=Ct(F).previousLocalTime;return T=r.put(v,bc(o,t,n,q,u?.nodeId??server.replication.getThisNodeId(r)??0,O,f,If,g,E,R,_),{ifVersion:S}),T}}T=r.put(s===void 0?ZL:Df,bc(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,O,f,If,g,E,R,_,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return T}catch(R){throw R.message+=" id: "+n+" options: "+m,R}}}function Oc(e,t,r){if(t)return t.value&&t.metadataFlags&mn&&!e.auditStore.getBinaryFast(t.localTime)&&ia(t.value),e.remove(t.key,r)}var XL,gp,Ep,Df,_R,ZL,D3,yc,Pf,L3,cR,eM,M3,tM,lR,Sp,hR,mR,Ap,v3,If,tu,Cf,uR,dR,fR,Rc,ru=be(()=>{XL=require("msgpackr");so();gp=M(X());fs();fs();Ep=new Uint8Array([1,1,1,1,4,64,0,0]),Df=new Uint8Array([1,1,1,1,1,0,0,0]),_R=new Uint8Array([1,1,1,1,3,64,0,0]),ZL=new Uint8Array([1,1,1,1,0,64,0,0]),D3=Symbol("local-timestamp"),yc=Symbol("metadata"),Pf=new Uint8Array(8),L3=new DataView(Pf.buffer,0,8),cR=0,eM=0,M3=1,tM=3,lR=4,Sp=16,hR=32,mR=1,Ap=256,tu=0,Cf=-1,uR=-1,dR=0,fR=class extends XL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(tu||Cf>=0){let o=0,c=tu;c&&(o+=8,tu=0);let l=Cf,u=uR,f=dR;l>=0&&(o+=4,Cf=-1,u>=0&&(o+=8,uR=-1),f&&(o+=4,dR=0));let d=v3=r.call(this,s,i|2048|o);If=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(Ep[4]=c,Ep[5]=c>>8,d.set(Ep,h),h+=8),gc&&(l|=mn),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|Tp<<24),h+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(h,u),h+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,f)),d}else return If=r.call(this,s,i),If};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Pf,0,c),c+=8;else for(let h=0;h<8;h++)Pf[h]=t[c++];l=U3(),i=t[c]}let u,f;i<32&&(i===Tp?(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&Sp&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&hR&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=Sc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[yc]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:Sc(()=>super.decode(t,r),this.rootStore)}catch(c){return gp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(U3,"getTimestamp");a(Rp,"handleLocalTimeForGets");Rc=[];setInterval(()=>{for(let e=0;e<Rc.length;e++){let t=Rc[e].deref();!t||t.isDone||t.isCommitted?Rc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(gp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):gp.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(pR,"recordUpdater");a(Oc,"removeEntry")});var vf=P((NRe,sM)=>{"use strict";var nM=ce(),x3=(G(),D($)),{RecordEncoder:B3}=(ru(),D(rM));nM.initSync();var H3=nM.get(x3.CONFIG_PARAMS.STORAGE_CACHING)!==!1,ER=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=H3&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:B3})}};sM.exports=ER});var Uf=P((IRe,iM)=>{"use strict";var Bn=ce(),_s=(G(),D($));Bn.initSync();var yp=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=Bn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Bn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Bn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Bn.get(_s.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Bn.get(_s.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Bn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Bn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Bn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Bn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Bn.get(_s.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Bn.get(_s.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Bn.get(_s.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};iM.exports=yp;yp.MAX_DBS=1e4});var ht=P((PRe,mM)=>{"use strict";var SR=require("lmdb"),Fs=require("fs-extra"),Hn=require("path"),bp=ln(),cM=X(),pn=Dn().LMDB_ERRORS_ENUM,Op=JL(),TR=vf(),lM=Uf(),ca=Ft(),oM=(G(),D($)),{table:k3,resetDatabases:F3}=(Ue(),D(at)),aM=ce(),Gs=ca.INTERNAL_DBIS_NAME,uM=ca.DBI_DEFINITION_NAME,G3="data.mdb",q3="lock.mdb",xf=".mdb",$3="-lock",gR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=hs(t,r),this.key_type=this.dbi[ca.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ca.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new SR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Np(e,t){if(e===void 0)throw new Error(pn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(pn.ENV_NAME_REQUIRED)}a(Np,"pathEnvNameValidation");async function AR(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(pn.INVALID_BASE_PATH):n}try{let n=Hn.join(e,t+xf);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Hn.join(e,t,G3),Fs.constants.R_OK|Fs.constants.F_OK),Hn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(pn.INVALID_ENVIRONMENT)}else throw new Error(pn.INVALID_ENVIRONMENT);throw n}}a(AR,"validateEnvironmentPath");function wp(e,t){if(bp.validateEnv(e),t===void 0)throw new Error(pn.DBI_NAME_REQUIRED)}a(wp,"validateEnvDBIName");async function V3(e,t,r=!1,n=!1){Np(e,t);let s=Hn.basename(e);t=t.toString();let i=aM.get(oM.CONFIG_PARAMS.DATABASES);i||aM.setProperty(oM.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await AR(e,t,n),dM(e,t,r)}catch(o){if(o.message===pn.INVALID_ENVIRONMENT){let c=Hn.join(e,t);await Fs.mkdirp(n?c:e);let l=new lM(n?c:c+xf,!1),u=SR.open(l);u.dbis=Object.create(null);let f=new TR(!1);u.openDB(Gs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=RR(e,t,r);return u[ca.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(V3,"createEnvironment");async function K3(e,t,r,n=!0){Np(e,t),t=t.toString();let s=Hn.join(e,t);return k3({table:t,database:Hn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(K3,"copyEnvironment");async function dM(e,t,r=!1){Np(e,t),t=t.toString();let n=RR(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 AR(e,t),i=Hn.join(e,t+xf),o=s!=i,c=new lM(s,o),l=SR.open(c);l.dbis=Object.create(null);let u=_M(l);for(let f=0;f<u.length;f++)hs(l,u[f]);return l[ca.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(dM,"openEnvironment");async function Y3(e,t,r=!1){Np(e,t),t=t.toString();let n=Hn.join(e,t+xf),s=await AR(e,t);if(global.lmdb_map!==void 0){let i=RR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await fM(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+$3:Hn.join(Hn.dirname(s),q3))}a(Y3,"deleteEnvironment");async function fM(e){bp.validateEnv(e);let t=e[ca.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(fM,"closeEnvironment");function RR(e,t,r=!1){let s=`${Hn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(RR,"getCachedEnvironmentName");function W3(e){bp.validateEnv(e);let t=Object.create(null),r=hs(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new Op,s)}catch{cM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(W3,"listDBIDefinitions");function _M(e){bp.validateEnv(e);let t=[],r=hs(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(_M,"listDBIs");function z3(e,t){let n=hs(e,Gs).getEntry(t),s=new Op;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{cM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(z3,"getDBIDefinition");function hM(e,t,r,n=!r){if(wp(e,t),t=t.toString(),t===Gs)throw new Error(pn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return hs(e,t)}catch(s){if(s.message===pn.DBI_DOES_NOT_EXIST){let i=new TR(r,n===!0),o=e.openDB(t,i),c=new Op(r===!0,n);return o[uM]=c,hs(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(hM,"createDBI");function hs(e,t){if(wp(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=z3(e,t):r=new Op,r===void 0)throw new Error(pn.DBI_DOES_NOT_EXIST);let n;try{let s=new TR(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(pn.DBI_DOES_NOT_EXIST):s}return n[uM]=r,e.dbis[t]=n,n}a(hs,"openDBI");function Q3(e,t){wp(e,t),t=t.toString();let r=hs(e,t),n=r.getStats();return r[ca.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(Q3,"statDBI");async function j3(e,t){try{let r=Hn.join(e,t+xf);return(await Fs.stat(r)).size}catch{throw new Error(pn.INVALID_ENVIRONMENT)}}a(j3,"environmentDataSize");function J3(e,t){if(wp(e,t),t=t.toString(),t===Gs)throw new Error(pn.CANNOT_DROP_INTERNAL_DBIS_NAME);hs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],hs(e,Gs).removeSync(t)}a(J3,"dropDBI");function X3(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{hs(e,i)}catch(o){if(o.message===pn.DBI_DOES_NOT_EXIST)hM(e,i,i!==t,i===t),n=!0;else throw o}}n&&F3()}a(X3,"initializeDBIs");mM.exports={openDBI:hs,openEnvironment:dM,createEnvironment:V3,listDBIs:_M,listDBIDefinitions:W3,createDBI:hM,dropDBI:J3,statDBI:Q3,deleteEnvironment:Y3,initializeDBIs:X3,TransactionCursor:gR,environmentDataSize:j3,copyEnvironment:K3,closeEnvironment:fM}});var EM=P((LRe,pM)=>{"use strict";var yR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};pM.exports=yR});var SM=P((vRe,gM)=>{"use strict";var bR=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}};gM.exports=bR});var AM=P((xRe,TM)=>{"use strict";var OR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};TM.exports=OR});var Cc=P((GRe,bM)=>{"use strict";var Z3=ht(),eX=EM(),tX=SM(),rX=AM(),yi=ln(),Bf=Dn().LMDB_ERRORS_ENUM,nX=Ft(),io=(G(),D($)),sX=oe(),iX=require("uuid"),HRe=require("lmdb"),{handleHDBError:oX,hdb_errors:aX}=he(),{OVERFLOW_MARKER:kRe,MAX_SEARCH_KEY_LENGTH:FRe}=nX,RM=ce();RM.initSync();var Ip=RM.get(io.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),NR=io.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ic=io.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function cX(e,t,r,n,s=yi.getNextMonotonicTime()){PR(e,t,r,n),wR(e,t,r);let i=new eX,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];yM(u,!0,s);let f=lX(e,t,r,u),d=u[t];o.push(f),c.push(d)}return IR(o,c,n,i,s)}a(cX,"insertRecords");function lX(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 f=c([[{}]]);Array.isArray(f)&&(c=f[0][io.FUNC_VAL],n[o]=c)}let l=yi.getIndexedValues(c),u=e.dbis[o];if(l){Ip&&u.prefetch(l.map(f=>({key:f,value:s})),Cp);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}Ip&&e.dbis[t].prefetch([s],Cp),e.dbis[t].put(s,n,n[Ic])})}a(lX,"insertRecord");function uX(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(uX,"removeSkippedRecords");function yM(e,t,r){let n=r>0;(n||!Number.isInteger(e[Ic]))&&(e[Ic]=r||(r=yi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[NR]))&&(e[NR]=r||yi.getNextMonotonicTime()):delete e[NR]}a(yM,"setTimestamps");function wR(e,t,r){r.indexOf(io.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(io.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(io.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(io.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Z3.initializeDBIs(e,t,r)}a(wR,"initializeTransaction");async function dX(e,t,r,n,s=yi.getNextMonotonicTime()){PR(e,t,r,n),wR(e,t,r);let i=new tX,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=CR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return IR(c,l,n,i,s,o)}a(dX,"updateRecords");async function fX(e,t,r,n,s=yi.getNextMonotonicTime()){try{PR(e,t,r,n)}catch(l){throw oX(l,l.message,aX.HTTP_STATUS_CODES.BAD_REQUEST)}wR(e,t,r);let i=new rX,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;sX.isEmpty(u[t])?(f=iX.v4(),u[t]=f):f=u[t];let d=CR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return IR(o,c,n,i,s)}a(fX,"upsertRecords");async function IR(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||yi.getNextMonotonicTime(),uX(r,i),n}a(IR,"finalizeWrite");function CR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(yM(r,!f,o),Number.isInteger(r[Ic])&&u[Ic]>r[Ic])return!1;f&&s.original_records.push(u);let d,h=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let S=r[m],g=e.dbis[m];if(g===void 0)continue;let R=u[m];if(typeof S=="function"){let T=S([[u]]);Array.isArray(T)&&(S=T[0][io.FUNC_VAL],r[m]=S)}if(S===R)continue;let E=yi.getIndexedValues(R);if(E){Ip&&g.prefetch(E.map(T=>({key:T,value:n})),Cp);for(let T=0,O=E.length;T<O;T++)g.remove(E[T],n)}if(E=yi.getIndexedValues(S),E){Ip&&g.prefetch(E.map(T=>({key:T,value:n})),Cp);for(let T=0,O=E.length;T<O;T++)g.put(E[T],n)}}let _={...u,...r};c.put(n,_,_[Ic])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:CR(e,t,r,n,s,i,o))}a(CR,"updateUpsertRecord");function _X(e,t,r){if(yi.validateEnv(e),t===void 0)throw new Error(Bf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Bf.WRITE_ATTRIBUTES_REQUIRED):new Error(Bf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(_X,"validateBasic");function PR(e,t,r,n){if(_X(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Bf.RECORDS_REQUIRED):new Error(Bf.RECORDS_MUST_BE_ARRAY)}a(PR,"validateWrite");function Cp(){}a(Cp,"noop");bM.exports={insertRecords:cX,updateRecords:dX,upsertRecords:fX}});var oo=P(($Re,hX)=>{hX.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var NM=P((VRe,OM)=>{"use strict";var mX=require("uuid"),DR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||mX.v4(),this.schema_table=`${this.schema}.${this.table}`}};OM.exports=DR});var Pp=P((YRe,wM)=>{"use strict";var pX=NM(),LR=class extends pX{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}};wM.exports=LR});var CM=P((zRe,IM)=>{"use strict";IM.exports=gX;var EX="inserted";function gX(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===EX?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(gX,"returnObject")});var Dp=P((JRe,DM)=>{"use strict";var SX=(G(),D($)),MR=ht(),TX=Cc(),{getSystemSchemaPath:AX,getSchemaPath:RX}=gt(),jRe=oo(),{validateBySchema:yX}=nt(),Hf=require("joi"),bX=Pp(),OX=CM(),{handleHDBError:NX,hdb_errors:wX,ClientError:IX}=he(),PM=oe(),{HTTP_STATUS_CODES:CX}=wX,PX="inserted";DM.exports=DX;async function DX(e){let t=yX(e,Hf.object({database:Hf.string(),schema:Hf.string(),table:Hf.string().required(),attribute:Hf.string().required()}));if(t)throw new IX(t.message);let r=!e.skip_table_check&&PM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw NX(new Error,r,CX.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=PM.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 bX(e.schema,e.table,e.attribute,e.id);try{let i=await MR.openEnvironment(RX(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);MR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await MR.openEnvironment(AX(),SX.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await TX.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return OX(PX,c,{records:[s]},l)}catch(i){throw i}}a(DX,"lmdbCreateAttribute")});var kf=P((eye,MM)=>{"use strict";var ao=oe(),LM=X(),ZRe=iR(),{getDatabases:LX}=(Ue(),D(at)),{ClientError:Pc}=he();MM.exports=MX;function MX(e){if(ao.isEmpty(e))throw new Pc("invalid update parameters defined.");if(ao.isEmptyOrZeroLength(e.schema))throw new Pc("invalid schema specified.");if(ao.isEmptyOrZeroLength(e.table))throw new Pc("invalid table specified.");if(!Array.isArray(e.records))throw new Pc("records must be an array");let t=LX()[e.schema]?.[e.table];if(ao.isEmpty(t))throw new Pc(`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&&ao.isEmptyOrZeroLength(o[r]))throw LM.error("a valid hash attribute must be provided with update record:",o),new Pc("a valid hash attribute must be provided with update record, check log for more info");if(!ao.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw LM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Pc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ao.isEmpty(o[r])&&o[r]!==""&&n.has(ao.autoCast(o[r]))&&(o.skip=!0),n.add(ao.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(MX,"insertUpdateValidate")});var UM=P((rye,vM)=>{"use strict";var vR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};vM.exports=vR});var HM=P((sye,BM)=>{"use strict";var UR=ht(),vX=X(),xM=Dn().LMDB_ERRORS_ENUM;BM.exports=UX;async function UX(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 UR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==xM.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await UR.closeEnvironment(global.lmdb_map[n]),await UR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==xM.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){vX.error(t)}}a(UX,"cleanLMDBMap")});var JM=P((aye,jM)=>{"use strict";var xR=require("recursive-iterator"),xX=require("alasql"),BR=require("clone"),kM=oe(),{handleHDBError:FM,hdb_errors:BX}=he(),{HDB_ERROR_MSGS:GM,HTTP_STATUS_CODES:qM}=BX,{getDatabases:HX}=(Ue(),D(at)),kX=["DISTINCT_ARRAY"],$M=Symbol("validateTables"),HR=Symbol("validateTable"),oye=Symbol("getAllColumns"),VM=Symbol("validateAllColumns"),Lp=Symbol("findColumn"),KM=Symbol("validateOrderBy"),Ff=Symbol("validateSegment"),kR=Symbol("validateColumn"),YM=Symbol("setColumnsForTable"),WM=Symbol("checkColumnsForAsterisk"),zM=Symbol("validateGroupBy"),QM=Symbol("hasColumns"),FR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$M](),this[WM](),this[VM]()}[$M](){if(this[QM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[HR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[HR](t.table)})}}[QM](){let t=!1,r=new xR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[HR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=HX();if(!r[t.databaseid])throw FM(new Error,GM.SCHEMA_NOT_FOUND(t.databaseid),qM.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw FM(new Error,GM.TABLE_NOT_FOUND(t.databaseid,t.tableid),qM.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=BR(s);i.table=BR(t),this.attributes.push(i)})}[Lp](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)}[WM](){let t=new xR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[YM](r.tableid)}[YM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new xX.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[VM](){this[Ff](this.statement.columns,!1),this[Ff](this.statement.joins,!1),this[Ff](this.statement.where,!1),this[zM](this.statement.group,!1),this[Ff](this.statement.order,!0)}[Ff](t,r){if(!t)return;let n=new xR(t),s=[];for(let{node:i,path:o}of n)!kM.isEmpty(i)&&!kM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[KM](i):s.push(this[kR](i)));return s}[zM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&kX.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=BR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Lp](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[Lp](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[KM](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[kR](t)}[kR](t){let r=this[Lp](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]}};jM.exports=FR});var tv=P((lye,ev)=>{"use strict";var XM=require("lodash"),Gf=require("mathjs"),FX=require("jsonata"),ZM=oe();ev.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?XM.uniqWith(e,XM.isEqual):e,"distinct_array"),searchJSON:GX,mad:qf.bind(null,Gf.mad),mean:qf.bind(null,Gf.mean),mode:qf.bind(null,Gf.mode),prod:qf.bind(null,Gf.prod),median:qf.bind(null,Gf.median)};function qf(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(qf,"aggregateFunction");function GX(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(ZM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ZM.isEmpty(this.__ala__.res[r])){let n=FX(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(GX,"searchJSON")});var nv=P((dye,rv)=>{"use strict";var rr=require("moment"),GR="YYYY-MM-DDTHH:mm:ss.SSSZZ";rr.suppressDeprecationWarnings=!0;rv.exports={current_date:a(()=>rr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>rr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return rr(e).utc().format("YYYY");case"month":return rr(e).utc().format("MM");case"day":return rr(e).utc().format("DD");case"hour":return rr(e).utc().format("HH");case"minute":return rr(e).utc().format("mm");case"second":return rr(e).utc().format("ss");case"millisecond":return rr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>rr(e).utc().format(GR),"date"),date_format:a((e,t)=>rr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>rr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>rr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=rr(e).utc(),s=rr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>rr().utc().valueOf(),"now"),get_server_time:a(()=>rr().format(GR),"get_server_time"),offset_utc:a((e,t)=>rr(e).utc().utcOffset(t).format(GR),"offset_utc")}});var av=P((_ye,ov)=>{"use strict";var qX=require("@turf/area"),$X=require("@turf/length"),VX=require("@turf/circle"),KX=require("@turf/difference"),YX=require("@turf/distance"),WX=require("@turf/boolean-contains"),zX=require("@turf/boolean-equal"),QX=require("@turf/boolean-disjoint"),jX=require("@turf/helpers"),sv=(G(),D($)),$e=oe(),co=X();ov.exports={geoArea:JX,geoLength:XX,geoCircle:ZX,geoDifference:e6,geoDistance:iv,geoNear:t6,geoContains:r6,geoEqual:n6,geoCrosses:s6,geoConvert:i6};function JX(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return qX.default(e)}catch(t){return co.trace(t,e),NaN}}a(JX,"geoArea");function XX(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return $X.default(e,{units:t||"kilometers"})}catch(r){return co.trace(r,e),NaN}}a(XX,"geoLength");function ZX(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return VX.default(e,t,{units:r||"kilometers"})}catch(n){return co.trace(n,e,t),NaN}}a(ZX,"geoCircle");function e6(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return KX(e,t)}catch(r){return co.trace(r,e,t),NaN}}a(e6,"geoDifference");function iv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return YX.default(e,t,{units:r||"kilometers"})}catch(n){return co.trace(n,e,t),NaN}}a(iv,"geoDistance");function t6(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return iv(e,t,n)<=r}catch(s){return co.trace(s,e,t),!1}}a(t6,"geoNear");function r6(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return WX.default(e,t)}catch(r){return co.trace(r,e,t),!1}}a(r6,"geoContains");function n6(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return zX.default(e,t)}catch(r){return co.trace(r,e,t),!1}}a(n6,"geoEqual");function s6(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!QX.default(e,t)}catch(r){return co.trace(r,e,t),!1}}a(s6,"geoCrosses");function i6(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(sv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(sv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),jX[t](e,r)}a(i6,"geoConvert")});var Mp=P((mye,cv)=>{var Dc=tv(),kn=nv(),bi=av();cv.exports=e=>{e.aggr.mad=e.aggr.MAD=Dc.mad,e.aggr.mean=e.aggr.MEAN=Dc.mean,e.aggr.mode=e.aggr.MODE=Dc.mode,e.aggr.prod=e.aggr.PROD=Dc.prod,e.aggr.median=e.aggr.MEDIAN=Dc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Dc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Dc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=kn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=kn.current_time,e.fn.extract=e.fn.EXTRACT=kn.extract,e.fn.date=e.fn.DATE=kn.date,e.fn.date_format=e.fn.DATE_FORMAT=kn.date_format,e.fn.date_add=e.fn.DATE_ADD=kn.date_add,e.fn.date_sub=e.fn.DATE_SUB=kn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=kn.date_diff,e.fn.now=e.fn.NOW=kn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=kn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=kn.get_server_time,e.fn.getdate=e.fn.GETDATE=kn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=kn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=bi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=bi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=bi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=bi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=bi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=bi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=bi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=bi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=bi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=bi.geoNear}});var fv=P((pye,dv)=>{"use strict";var $f=require("lodash"),En=require("alasql");En.options.cache=!1;var o6=Mp(),lv=require("clone"),vp=require("recursive-iterator"),He=X(),Xe=oe(),nu=Fn(),a6=(G(),D($)),{hdb_errors:c6}=he(),{getDatabases:uv}=(Ue(),D(at)),l6="IS NULL",qs="There was a problem performing this search. Please check the logs and try again.";o6(En);var qR=class{static{a(this,"SQLSearch")}constructor(t,r){if(Xe.isEmpty(t))throw He.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Xe.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Xe.isEmptyOrZeroLength(n))return He.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw He.error("Error thrown from checkEmptySQL in SQLSearch class method search."),He.error(n),new Error(qs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw He.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),He.error(n),new Error(qs)}if(Object.keys(this.data).length===0)return He.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw He.error("Error thrown from processJoins in SQLSearch class method search."),He.error(n),new Error(qs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw He.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),He.error(n),new Error(qs)}try{return t=await this._finalSQL(),t}catch(n){throw He.error("Error thrown from finalSQL in SQLSearch class method search."),He.error(n),new Error(qs)}}_getColumns(){let t=new vp(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(lv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$f.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=uv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Xe.isEmpty(this.statement.where)){He.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new vp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Xe.isEmpty(r)&&r.right)if(Xe.isNotEmptyAndHasValue(r.right.value)){let n=Xe.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new En.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Xe.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new En.yy.LogicValue({value:i}):n instanceof En.yy.StringValue&&Xe.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new En.yy.NumValue({value:i}))});if(t){He.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new vp(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(!Xe.isEmpty(a6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Xe.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Xe.isEmptyOrZeroLength(r.left.columnid)||Xe.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Xe.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"=":!Xe.isEmpty(r.right.value)||!Xe.isEmpty(r.left.value)?n.add(Xe.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(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&Xe.isEmptyOrZeroLength(this.statement.from)&&Xe.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&&$f.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(Xe.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Xe.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(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&!Xe.isEmptyOrZeroLength(this.columns.columns))return t;if(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&Xe.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await En.promise(r)}catch(r){throw He.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),He.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(lv(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Xe.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(l6)>-1&&this.tables.forEach(s=>{let i={columnid:uv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$f.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Xe.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!Xe.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await nu.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw He.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),He.error(f),new Error(qs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let h=await nu.getDataByValue(d);for(let[_,m]of h)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,m[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,_))}))}catch(f){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),He.error(f),new Error(qs)}else if(!Xe.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Xe.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,h=f.length;d<h;d++){let _=f[d];c.search_attribute=_.attribute,c.search_value=_.search_value;let m=await nu.getDataByValue(c,_.operation);if(l)for(let[S]of m)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of m)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),He.error(f),new Error(qs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await nu.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,h]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),He.error(f),new Error(qs)}}}_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 En.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 En.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new En.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 En.yy.FuncValue:new En.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(_=>{_.joinmode&&_.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(_.table);let m=_.joinmode+" JOIN ? AS "+(_.as?_.as:_.table.tableid);_.on&&(m+=" ON "+_.on.toString()),i.push(m),t.push(Object.values(this.data[`${_.table.databaseid_orig}_${_.table.as?_.table.as_orig:_.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(_=>{let m=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__hash_name,S=_.as?_.as_orig:_.tableid_orig;o.push({key:`'${S}.${m}'`,schema:_.databaseid_orig,table:_.as?_.as_orig:_.tableid_orig,keys:new Set}),r.push(`${_.as?_.as:_.tableid}.\`${m}\` AS "${S}.${m}"`),c[_.as?_.as_orig:_.tableid_orig]=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(_=>{_.is_func?r.push(_.initial_select_column.toString()):_.initial_select_column.tableid?r.push(`${_.initial_select_column.tableid}.${_.initial_select_column.columnid} AS ${_.expression.columnid}`):r.push(`${_.initial_select_column.columnid} AS ${_.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let _=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,m=this._convertColumnsToIndexes(_,s);h=await En.promise(m,t),t=null}catch(_){throw He.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),He.error(_),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let _=0,m=h.length;_<m;_++){let S=h[_];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(_=>{let m=Object.keys(this.data[`${_.schema}_${_.table}`].__merged_data),S=$f.difference(m,[..._.keys].map(g=>g.toString()));for(let g=0,R=S.length;g<R;g++){let E=S[g];delete this.data[`${_.schema}_${_.table}`].__merged_data[E]}})}return{existing_attributes:c,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new vp(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=$f.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw He.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),He.error(i),new Error(qs)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await nu.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let h=o[f],_=l.get(h);for(let m=0;m<u;m++){let S=s.columns[m],g=_[S]===void 0?null:_[S];this.data[n].__merged_data[h].push(g)}}}}catch(r){throw He.error("Error thrown from getDataByHash function in SQLSearch class method getData."),He.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();He.trace(`Final SQL: ${s}`),n=await En.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),He.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw He.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),He.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return He.error(c6.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),He.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await nu.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw He.error("There was an error when processing this SQL operation. Check your logs"),He.error(o),new Error(qs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};dv.exports=qR});var Vr=P((gye,_v)=>{"use strict";var u6=JM();_v.exports={searchByConditions:f6,searchByHash:_6,searchByValue:h6,search:m6};var $R=Fn(),{transformReq:VR}=oe(),d6=fv();async function f6(e){return VR(e),$R.searchByConditions(e)}a(f6,"searchByConditions");async function _6(e){VR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of $R.searchByHash(e))r&&t.push(r);return t}a(_6,"searchByHash");async function h6(e){VR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of $R.searchByValue(e))t.push(r);return t}a(h6,"searchByValue");function m6(e,t){try{let r=new u6(e);r.validate(),new d6(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(m6,"search")});var lo=P((Tye,Ev)=>{"use strict";var Vf=require("crypto"),p6=ce(),{CONFIG_PARAMS:E6}=(G(),D($)),mv="aes-256-cbc",g6=32,S6=16,KR=64,pv=32,T6=KR+pv,hv=new Map;Ev.exports={encrypt:A6,decrypt:R6,createNatsTableStreamName:y6};function A6(e){let t=Vf.randomBytes(g6),r=Vf.randomBytes(S6),n=Vf.createCipheriv(mv,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(A6,"encrypt");function R6(e){let t=e.substr(0,KR),r=e.substr(KR,pv),n=e.substr(T6,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Vf.createDecipheriv(mv,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(R6,"decrypt");function y6(e,t){let r=p6.get(E6.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=hv.get(r);return n||(n=Vf.createHash("md5").update(r).digest("hex"),hv.set(r,n)),n}a(y6,"createNatsTableStreamName")});var uo=P((yye,Av)=>{"use strict";var Rye=Vr(),Kf=X(),{validateBySchema:gv}=nt(),Lc=require("joi"),b6=lo(),Up=oe(),{handleHDBError:xp,hdb_errors:O6,ClientError:Sv}=he(),{HDB_ERROR_MSGS:Bp,HTTP_STATUS_CODES:YR}=O6,Tv=ce();Tv.initSync();var{getDatabases:WR}=(Ue(),D(at)),N6=require("fs-extra"),w6=(G(),D($));Av.exports={describeAll:I6,describeTable:Hp,describeSchema:C6};async function I6(e={}){try{let t=Up.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=WR(),o={},c={},l=[],u=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let h=i[d];for(let _ in h)try{let m;if(t||s||r)m=await Hp({schema:d,table:_,exact_count:u});else if(n&&n[d].describe&&n[d].tables[_].describe){let S=n[d].tables[_].attribute_permissions;m=await Hp({schema:d,table:_,exact_count:u},S)}m&&l.push(m)}catch(m){Kf.error(m)}}let f={};for(let d in l)t||s||r?(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?f[d]={}:c[d]&&(f[d]={});return f}catch(t){return Kf.error("Got an error in describeAll"),Kf.error(t),xp(new Error,Bp.DESCRIBE_ALL_ERR)}}a(I6,"describeAll");async function Hp(e,t){Up.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=gv(e,Lc.object({database:Lc.string(),table:Lc.string().required(),exact_count:Lc.boolean().strict()}));if(i)throw new Sv(i.message);let c=WR()[r];if(!c)throw xp(new Error,Bp.SCHEMA_NOT_FOUND(e.schema),YR.NOT_FOUND);let l=c[n];if(!l)throw xp(new Error,Bp.TABLE_NOT_FOUND(e.schema,e.table),YR.NOT_FOUND);function u(_){f.push({attribute:_.attribute,type:_.type,elements:_.elements?.type,indexed:_.indexed,is_primary_key:_.isPrimaryKey,assigned_created_time:_.assignCreatedTime,assigned_updated_time:_.assignUpdatedTime,nullable:_.nullable,properties:_.properties?_.properties.map(m=>({type:m.type,name:m.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let _={};s.forEach(m=>{m.describe&&(_[m.attribute_name]=!0)}),l.attributes.forEach(m=>{_[m.name]&&u(m)})}else l.attributes?.forEach(_=>u(_));let d;try{d=(await N6.stat(l.primaryStore.env.path)).size}catch(_){Kf.warn("unable to get database size",_)}let h={schema:r,name:l.tableName,hash_attribute:l.attributes.find(_=>_.isPrimaryKey||_.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(h.replicate=l.replicate),l.expirationMS!==void 0&&(h.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(h.sealed=l.sealed),l.sources?.length>0&&(h.sources=l.sources.map(_=>_.name).filter(_=>_&&_!=="NATSReplicator"&&_!=="Replicator")),Tv.get(w6.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=b6.createNatsTableStreamName(h.schema,h.name));try{let _=await l.getRecordCount({exactCount:!!e.exact_count});h.record_count=_.recordCount,h.table_size=l.getSize(),h.db_audit_size=l.getAuditSize(),h.estimated_record_range=_.estimatedRange;let m=l.auditStore;if(m)for(let S of m.getKeys({reverse:!0,limit:1}))h.last_updated_record=S[0];if(!h.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))h.last_updated_record=S}catch(_){Kf.warn(`unable to stat table dbi due to ${_}`)}return h}a(Hp,"descTable");async function C6(e){Up.transformReq(e);let t=gv(e,Lc.object({database:Lc.string(),exact_count:Lc.boolean().strict()}));if(t)throw new Sv(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=WR()[n];if(!i)throw xp(new Error,Bp.SCHEMA_NOT_FOUND(e.schema),YR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Up.isEmpty(l)||l.describe){let u=await Hp({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(C6,"describeSchema")});var $s=P((wye,Nv)=>{var P6=oo(),{callbackify:yv,promisify:D6}=require("util"),{getDatabases:bv}=(Ue(),D(at));Nv.exports={setSchemaDataToGlobal:Rv,getTableSchema:L6,getSystemSchema:M6,setSchemaDataToGlobalAsync:D6(Rv)};var Ov=uo(),Oye=yv(Ov.describeAll),Nye=yv(Ov.describeTable);function Rv(e){global.hdb_schema=bv(),e&&e()}a(Rv,"setSchemaDataToGlobal");function L6(e,t,r){let n=bv()[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(L6,"getTableSchema");function M6(){return P6}a(M6,"getSystemSchema")});var QR=P((Cye,Cv)=>{var v6=nt(),zR=require("joi"),{hdb_table:U6,hdb_database:wv}=Ri(),Iv={schema:wv,database:wv,table:U6},x6={date:zR.date().iso().required()},B6={timestamp:zR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Cv.exports=function(e,t){let r=t==="timestamp"?{...Iv,...B6}:{...Iv,...x6},n=zR.object(r);return v6.validateBySchema(e,n)}});var Lv=P((Pye,Dv)=>{var H6=nt(),jR=require("joi"),{hdb_table:k6,hdb_database:Pv}=Ri(),F6=jR.object({schema:Pv,database:Pv,table:k6,hash_values:jR.array().required(),ids:jR.array()});Dv.exports=function(e){return H6.validateBySchema(e,F6)}});var ey=P((Dye,Mv)=>{"use strict";var JR=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}},XR=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},ZR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Mv.exports={InsertObject:JR,NoSQLSeachObject:XR,DeleteResponseObject:ZR}});var Uc=P((Mye,Hv)=>{"use strict";var Uv=QR(),G6=Lv(),Mc=oe(),vv=require("moment"),xv=X(),{promisify:q6,callbackify:$6}=require("util"),vc=(G(),D($)),V6=$s(),ty=q6(V6.getTableSchema),ry=Fn(),{DeleteResponseObject:K6}=ey(),{handleHDBError:la,hdb_errors:Y6}=he(),{HDB_ERROR_MSGS:kp,HTTP_STATUS_CODES:ua}=Y6,W6="records successfully deleted",z6=$6(Bv);Hv.exports={delete:z6,deleteRecord:Bv,deleteFilesBefore:Q6,deleteAuditLogsBefore:j6};async function Q6(e){let t=Uv(e,"date");if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);if(Mc.transformReq(e),!vv(e.date,vv.ISO_8601).isValid())throw la(new Error,kp.INVALID_DATE,ua.BAD_REQUEST,vc.LOG_LEVELS.ERROR,kp.INVALID_DATE,!0);let n=Mc.checkSchemaTableExist(e.schema,e.table);if(n)throw la(new Error,n,ua.NOT_FOUND,vc.LOG_LEVELS.ERROR,n,!0);let s=await ry.deleteRecordsBefore(e);if(await ty(e.schema,e.table),xv.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(Q6,"deleteFilesBefore");async function j6(e){let t=Uv(e,"timestamp");if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);if(Mc.transformReq(e),isNaN(e.timestamp))throw la(new Error,kp.INVALID_VALUE("Timestamp"),ua.BAD_REQUEST,vc.LOG_LEVELS.ERROR,kp.INVALID_VALUE("Timestamp"),!0);let r=Mc.checkSchemaTableExist(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,vc.LOG_LEVELS.ERROR,r,!0);let n=await ry.deleteAuditLogsBefore(e);return await ty(e.schema,e.table),xv.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(j6,"deleteAuditLogsBefore");async function Bv(e){e.ids&&(e.hash_values=e.ids);let t=G6(e);if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);Mc.transformReq(e);let r=Mc.checkSchemaTableExist(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,vc.LOG_LEVELS.ERROR,r,!0);try{await ty(e.schema,e.table);let n=await ry.deleteRecords(e);return Mc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${W6}`),n}catch(n){if(n.message===vc.SEARCH_NOT_FOUND_MESSAGE){let s=new K6;return s.message=vc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Bv,"deleteRecord")});var Fp={};Be(Fp,{HASH_FUNCTION:()=>zf,hash:()=>iy,validate:()=>oy});function ny(e=Wf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Yf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function iy(e,t=zf[Fv?.toUpperCase()]??"sha256"){return sy[t](e)}function oy(e,t,r=zf[Fv?.toUpperCase()]??"sha256"){return e?J6[r](e,t):!1}var Yf,su,kv,Fv,Wf,Gv,zf,sy,J6,Gp=be(()=>{Yf=M(require("node:crypto")),su=M(require("argon2")),kv=M(ce());G();Fv=(0,kv.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Wf=16,Gv=9,zf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(zf||{});a(ny,"generateSalt");sy={md5:a((e,t=void 0)=>{t=t??ny(Gv);let r=Yf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??ny(Wf);let r=Yf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=ny(Wf),r=await su.hash(e,{type:su.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},J6={md5:a((e,t)=>{let r=e.slice(0,Gv);return e===sy.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,Wf);return e===sy.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await su.verify(e.slice(Wf),t),"argon2id")};a(iy,"hash");a(oy,"validate")});var $v=P((Bye,qv)=>{var ay=nt(),Kr={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 X6(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,ay.validateObject(e,Kr)}a(X6,"addUserValidation");function Z6(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,ay.validateObject(e,Kr)}a(Z6,"alterUserValidation");function eZ(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,ay.validateObject(e,Kr)}a(eZ,"dropUserValidation");qv.exports={addUserValidation:X6,alterUserValidation:Z6,dropUserValidation:eZ}});var Pt=P((Fye,Kv)=>{"use strict";var{platform:kye}=require("os"),tZ="nats-server.zip",cy="nats-server",rZ=process.platform==="win32"?`${cy}.exe`:cy,nZ=/^[^\s.,*>]+$/,Vv="__request__",sZ=a(e=>`${e}.${Vv}`,"REQUEST_SUBJECT"),iZ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},oZ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},aZ={HUB:"hub.pid",LEAF:"leaf.pid"},cZ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},lZ={SUCCESS:"success",ERROR:"error"},uZ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},dZ={TXN:"txn",MSGID:"msgid"},iu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},fZ={[iu.ERR]:1,[iu.WRN]:2,[iu.INF]:3,[iu.DBG]:4,[iu.TRC]:5},_Z={debug:"-D",trace:"-DVV"};Kv.exports={NATS_SERVER_ZIP:tZ,NATS_SERVER_NAME:cy,NATS_BINARY_NAME:rZ,PID_FILES:aZ,NATS_CONFIG_FILES:oZ,SERVER_SUFFIX:cZ,NATS_TERM_CONSTRAINTS_RX:nZ,REQUEST_SUFFIX:Vv,UPDATE_REMOTE_RESPONSE_STATUSES:lZ,CLUSTER_STATUS_STATUSES:uZ,REQUEST_SUBJECT:sZ,SUBJECT_PREFIXES:dZ,MSG_HEADERS:iZ,LOG_LEVELS:iu,LOG_LEVEL_FLAGS:_Z,LOG_LEVEL_HIERARCHY:fZ}});var Gn=P((qye,br)=>{"use strict";var zv="username is required",Qv="nothing to update, must supply active, role or password to update",jv="password cannot be an empty string",Jv="If role is specified, it cannot be empty.",Xv="active must be true or false";br.exports.addUser=RZ;br.exports.alterUser=yZ;br.exports.dropUser=OZ;br.exports.getSuperUser=PZ;br.exports.userInfo=NZ;br.exports.listUsers=$p;br.exports.listUsersExternal=wZ;br.exports.setUsersWithRolesCache=xc;br.exports.findAndValidateUser=Ey;br.exports.getClusterUser=DZ;br.exports.getUsersWithRolesCache=CZ;br.exports.USERNAME_REQUIRED=zv;br.exports.ALTERUSER_NOTHING_TO_UPDATE=Qv;br.exports.EMPTY_PASSWORD=jv;br.exports.EMPTY_ROLE=Jv;br.exports.ACTIVE_BOOLEAN=Xv;var Zv=gn(),hZ=Uc(),Qf=(Gp(),D(Fp)),eU=$v(),jf=Vr(),_y=_o(),Oi=oe(),tU=require("validate.js"),hy=X(),{promisify:mZ}=require("util"),my=lo(),uy=(G(),D($)),Yv=Pt(),pZ=wt(),EZ=ce(),gZ=oo(),{hdb_errors:SZ,ClientError:Vs}=he(),{HTTP_STATUS_CODES:fo,AUTHENTICATION_ERROR_MSGS:ly,HDB_ERROR_MSGS:ou}=SZ,{UserEventMsg:py}=Ks(),dy=require("lodash"),{server:qp}=(Dr(),D(ql)),TZ=X();qp.getUser=(e,t)=>Ey(e,t,t!=null);qp.authenticateUser=(e,t)=>Ey(e,t);var rU={username:!0,active:!0,role:!0,password:!0},Wv=new Map,AZ=mZ(hZ.delete),fy=EZ.get(uy.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Qf.HASH_FUNCTION.SHA256,Ni;async function RZ(e){let t=tU.cleanAttributes(e,rU),r=eU.addUserValidation(t);if(r)throw new Vs(r.message);let n=await jf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Vs(ou.ROLE_NAME_NOT_FOUND(t.role),fo.NOT_FOUND);if(n.length>1)throw new Vs(ou.DUP_ROLES_FOUND(t.role),fo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=my.encrypt(t.password)),t.password=await Qf.hash(t.password,fy),t.hash_function=fy,t.role=n[0].id;let s=await Zv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(hy.debug(s),await xc(),s.skipped_hashes.length===1)throw new Vs(ou.USER_ALREADY_EXISTS(t.username),fo.CONFLICT);return _y.signalUserChange(new py(process.pid)),`${t.username} successfully added`}a(RZ,"addUser");async function yZ(e){let t=tU.cleanAttributes(e,rU);if(Oi.isEmptyOrZeroLength(t.username))throw new Error(zv);if(Oi.isEmptyOrZeroLength(t.password)&&Oi.isEmptyOrZeroLength(t.role)&&Oi.isEmptyOrZeroLength(t.active))throw new Error(Qv);if(!Oi.isEmpty(t.password)&&Oi.isEmptyOrZeroLength(t.password.trim()))throw new Error(jv);if(!Oi.isEmpty(t.active)&&!Oi.isBoolean(t.active))throw new Error(Xv);if(!Oi.isEmpty(t.password)&&!Oi.isEmptyOrZeroLength(t.password.trim())&&(bZ(t.username)&&(t.hash=my.encrypt(t.password)),t.password=await Qf.hash(t.password,fy)),t.role==="")throw new Error(Jv);if(t.role){let n=await jf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Vs(ou.ALTER_USER_ROLE_NOT_FOUND(t.role),fo.NOT_FOUND);if(n.length>1)throw new Vs(ou.DUP_ROLES_FOUND(t.role),fo.CONFLICT);t.role=n[0].id}let r=await Zv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await xc(),_y.signalUserChange(new py(process.pid)),r}a(yZ,"alterUser");function bZ(e){let t=!1,r=Ni.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(bZ,"isClusterUser");async function OZ(e){let t=eU.dropUserValidation(e);if(t)throw new Vs(t.message);if(Ni.get(e.username)===void 0)throw new Vs(ou.USER_NOT_EXIST(e.username),fo.NOT_FOUND);let r=await AZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return hy.debug(r),await xc(),_y.signalUserChange(new py(process.pid)),`${e.username} successfully deleted`}a(OZ,"dropUser");async function NZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=dy.cloneDeep(e.hdb_user);let r=await jf.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(NZ,"userInfo");async function wZ(){let e=await $p();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(wZ,"listUsersExternal");async function $p(){let e=await jf.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=dy.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await jf.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=dy.cloneDeep(s),s.role=t[s.role],IZ(s.role),n.set(s.username,s);return n}a($p,"listUsers");function IZ(e){if(!e){hy.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(gZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(IZ,"appendSystemTablesToRole");async function xc(e=void 0){e?Ni=e:Ni=await $p()}a(xc,"setUsersWithRolesCache");async function CZ(){return Ni||await xc(),Ni}a(CZ,"getUsersWithRolesCache");async function Ey(e,t,r=!0){Ni||await xc();let n=Ni.get(e);if(!n){if(!r)return{username:e};throw new Vs(ly.GENERIC_AUTH_FAIL,fo.UNAUTHORIZED)}if(n&&!n.active)throw new Vs(ly.USER_INACTIVE,fo.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(Wv.get(t)===n.password)return s;{let i=Qf.validate(n.password,t,n.hash_function||Qf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)Wv.set(t,n.password);else throw new Vs(ly.GENERIC_AUTH_FAIL,fo.UNAUTHORIZED)}}return s}a(Ey,"findAndValidateUser");async function PZ(){Ni||await xc();for(let[,e]of Ni)if(e.role.role==="super_user")return e}a(PZ,"getSuperUser");async function DZ(){let e=await $p(),t=pZ.getConfigFromFile(uy.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==uy.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=my.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Yv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Yv.SERVER_SUFFIX.ADMIN,r}a(DZ,"getClusterUser");var nU=[];qp.invalidateUser=function(e){for(let t of nU)try{t(e)}catch(r){TZ.error("Error invalidating user",r)}};qp.onInvalidatedUser=function(e){nU.push(e)}});var Xf=P((Yye,aU)=>{"use strict";var Bc=X(),qn=(G(),D($)),LZ=HM(),Vye=$s(),Kye=uo(),MZ=Gn(),{validateEvent:sU}=Ks(),Jf=Fn(),vZ=require("process"),{resetDatabases:UZ}=(Ue(),D(at)),xZ={[qn.ITC_EVENT_TYPES.SCHEMA]:BZ,[qn.ITC_EVENT_TYPES.USER]:oU};async function BZ(e){let t=sU(e);if(t){Bc.error(t);return}Bc.trace("ITC schemaHandler received schema event:",e),await LZ(e.message),await HZ(e.message)}a(BZ,"schemaHandler");async function HZ(e){try{Jf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Jf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Jf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=UZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Bc.error(t)}}a(HZ,"syncSchemaMetadata");var iU=[];async function oU(e){try{try{Jf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Jf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Bc.warn(r)}let t=sU(e);if(t){Bc.error(t);return}Bc.trace(`ITC userHandler ${qn.HDB_ITC_CLIENT_PREFIX}${vZ.pid} received user event:`,e),await MZ.setUsersWithRolesCache();for(let r of iU)r()}catch(t){Bc.error(t)}}a(oU,"userHandler");oU.addListener=function(e){iU.push(e)};aU.exports=xZ});var Ks=P((Xye,lU)=>{"use strict";var zye=X(),gy=oe(),kZ=(G(),D($)),{ITC_ERRORS:Zf}=Dn(),{parentPort:Qye,threadId:FZ,isMainThread:GZ,workerData:jye}=require("worker_threads"),{onMessageFromWorkers:qZ,broadcast:Jye,broadcastWithAcknowledgement:$Z}=st();lU.exports={sendItcEvent:VZ,validateEvent:cU,SchemaEventMsg:KZ,UserEventMsg:YZ};var Vp;qZ(async(e,t)=>{Vp=Vp||Xf(),cU(e),Vp[e.type]&&await Vp[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function VZ(e){return!GZ&&e.message&&(e.message.originator=FZ),$Z(e)}a(VZ,"sendItcEvent");function cU(e){if(typeof e!="object")return Zf.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||gy.isEmpty(e.type))return Zf.MISSING_TYPE;if(!e.hasOwnProperty("message")||gy.isEmpty(e.message))return Zf.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||gy.isEmpty(e.message.originator))return Zf.MISSING_ORIGIN;if(kZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Zf.INVALID_EVENT(e.type)}a(cU,"validateEvent");function KZ(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(KZ,"SchemaEventMsg");function YZ(e){this.originator=e}a(YZ,"UserEventMsg")});var _o=P((tbe,_U)=>{"use strict";var uU=(G(),D($)),ebe=oe(),Kp=X(),dU=UM(),au,{sendItcEvent:fU}=Ks();function WZ(e){try{Kp.info("signalSchemaChange called with message:",e),au=au||Xf();let t=new dU(uU.ITC_EVENT_TYPES.SCHEMA,e);return au.schema(t),fU(t)}catch(t){Kp.error(t)}}a(WZ,"signalSchemaChange");function zZ(e){try{Kp.trace("signalUserChange called with message:",e),au=au||Xf();let t=new dU(uU.ITC_EVENT_TYPES.USER,e);return au.user(t),fU(t)}catch(t){Kp.error(t)}}a(zZ,"signalUserChange");_U.exports={signalSchemaChange:WZ,signalUserChange:zZ}});var Yp=P((nbe,mU)=>{"use strict";var hU=oe(),QZ=(G(),D($)),jZ=X(),JZ=Dp(),XZ=Pp(),ZZ=_o(),{SchemaEventMsg:e8}=Ks(),t8="already exists in";mU.exports=r8;async function r8(e,t,r){if(hU.isEmptyOrZeroLength(r))return r;let n=[];hU.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 n8(e,t.schema,t.name,i)})),s}a(r8,"lmdbCheckForNewAttributes");async function n8(e,t,r,n){let s=new XZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await s8(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(t8))jZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(n8,"createNewAttribute");async function s8(e){let t;return t=await JZ(e),ZZ.signalSchemaChange(new e8(process.pid,QZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(s8,"createAttribute")});var cu=P((ibe,pU)=>{"use strict";var Sy=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}};pU.exports=Sy});var gU=P((abe,EU)=>{"use strict";var i8=cu(),o8=(G(),D($)).OPERATIONS_ENUM,Ty=class extends i8{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(o8.INSERT,r,n,s,i),this.records=t}};EU.exports=Ty});var TU=P((lbe,SU)=>{"use strict";var a8=cu(),c8=(G(),D($)).OPERATIONS_ENUM,Ay=class extends a8{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(c8.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};SU.exports=Ay});var RU=P((dbe,AU)=>{"use strict";var l8=cu(),u8=(G(),D($)).OPERATIONS_ENUM,Ry=class extends l8{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(u8.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};AU.exports=Ry});var bU=P((_be,yU)=>{"use strict";var d8=cu(),f8=(G(),D($)).OPERATIONS_ENUM,yy=class extends d8{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(f8.DELETE,n,s,t,i),this.original_records=r}};yU.exports=yy});var e_=P((pbe,IU)=>{"use strict";var mbe=require("path"),OU=ht(),_8=gU(),h8=TU(),m8=RU(),p8=bU(),lu=Ft(),NU=oe(),{CONFIG_PARAMS:E8}=(G(),D($)),wU=ce();wU.initSync();var Wp=(G(),D($)).OPERATIONS_ENUM,{getTransactionAuditStorePath:g8}=gt();IU.exports=S8;async function S8(e,t){if(wU.get(E8.LOGGING_AUDITLOG)===!1)return;let r=g8(e.schema,e.table),n=await OU.openEnvironment(r,e.table,!0),s=T8(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){OU.initializeDBIs(n,lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,lu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),NU.isEmpty(s.user_name)||n.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(S8,"writeTransaction");function T8(e,t){let r=NU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Wp.INSERT)return new _8(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Wp.UPDATE)return new h8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Wp.UPSERT)return new m8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Wp.DELETE)return new p8(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(T8,"createTransactionObject")});var by=P((Sbe,CU)=>{"use strict";var A8=kf(),gbe=uf(),t_=(G(),D($)),R8=df(),y8=Cc().insertRecords,b8=ht(),O8=X(),N8=Yp(),{getSchemaPath:w8}=gt(),I8=e_();CU.exports=C8;async function C8(e){try{let{schema_table:t,attributes:r}=A8(e);R8(e,r,t.hash_attribute),e.schema!==t_.SYSTEM_SCHEMA_NAME&&(r.includes(t_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(t_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(t_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(t_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await N8(e.hdb_auth_header,t,r),s=w8(e.schema,e.table),i=await b8.openEnvironment(s,e.table),o=await y8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await I8(e,o)}catch(c){O8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(C8,"lmdbCreateRecords")});var LU=P((Abe,DU)=>{"use strict";var PU=(G(),D($)),P8=by(),D8=uf(),L8=require("fs-extra"),{getSchemaPath:M8}=gt();DU.exports=v8;async function v8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new D8(PU.SYSTEM_SCHEMA_NAME,PU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await P8(r),await L8.mkdirp(M8(e.schema))}a(v8,"lmdbCreateSchema")});var vU=P((ybe,MU)=>{"use strict";var Oy=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}};MU.exports=Oy});var HU=P((Ibe,BU)=>{"use strict";var UU=ht(),Ny=ln(),wy=Dn().LMDB_ERRORS_ENUM,U8=Ft(),xU=X(),Obe=oe(),x8=require("lmdb"),B8=vU(),H8=(G(),D($)),{OVERFLOW_MARKER:Nbe,MAX_SEARCH_KEY_LENGTH:wbe}=U8,k8=H8.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function F8(e,t,r,n){if(Ny.validateEnv(e),t===void 0)throw new Error(wy.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(wy.IDS_REQUIRED):new Error(wy.IDS_MUST_BE_ITERABLE);try{let s=UU.listDBIs(e);UU.initializeDBIs(e,t,s);let i=new B8,o,c=[],l=[];for(let h=0,_=r.length;h<_;h++)try{o=r[h];let m=e.dbis[t].get(o);if(!m||n&&m[k8]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,x8.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let R=s[g];if(!m.hasOwnProperty(R)||R===t)continue;let E=e.dbis[R],T=m[R];if(T!=null)try{let O=Ny.getIndexedValues(T);if(O)for(let v=0,F=O.length;v<F;v++)E.remove(O[v],o)}catch{xU.warn(`cannot delete from attribute: ${R}, ${T}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(m)}catch(m){xU.warn(m),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let h=0,_=f.length;h<_;h++)f[h]===!0?i.deleted.push(l[h]):(i.skipped.push(l[h]),u.push(h));let d=0;for(let h=0;h<u.length;h++){let _=u[h];i.original_records.splice(_-d,1),d++}return i.txn_time=Ny.getNextMonotonicTime(),i}catch(s){throw s}}a(F8,"deleteRecords");BU.exports={deleteRecords:F8}});var r_=P((Pbe,FU)=>{"use strict";var uu=oe(),G8=HU(),q8=ht(),{getSchemaPath:$8}=gt(),V8=e_(),K8=X();FU.exports=Y8;async function Y8(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(uu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(uu.isEmptyOrZeroLength(e.hash_values)&&!uu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];uu.isEmpty(l)||e.hash_values.push(l)}}if(uu.isEmptyOrZeroLength(e.hash_values))return kU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(uu.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=$8(e.schema,e.table),i=await q8.openEnvironment(s,e.table),o=await G8.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await V8(e,o)}catch(c){K8.error(`unable to write transaction due to ${c.message}`)}return kU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Y8,"lmdbDeleteRecords");function kU(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(kU,"createDeleteResponse")});var Cy=P((Mbe,GU)=>{"use strict";var W8=(G(),D($)),Lbe=ln();function Iy(e,t){let r=Object.create(null);if(t.length===1&&W8.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(Iy,"parseRow");function z8(e,t,r,n){let s=Iy(r,e);n.push(s)}a(z8,"searchAll");function Q8(e,t,r,n){let s=Iy(r,e);n[t]=s}a(Q8,"searchAllToMap");function j8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(j8,"iterateDBI");function Hc(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(Hc,"pushResults");function J8(e,t,r,n,s,i){t.toString().endsWith(e)&&Hc(t,r,n,s,i)}a(J8,"endsWith");function X8(e,t,r,n,s,i){t.toString().includes(e)&&Hc(t,r,n,s,i)}a(X8,"contains");function Z8(e,t,r,n,s,i){t>e&&Hc(t,r,n,s,i)}a(Z8,"greaterThanCompare");function e5(e,t,r,n,s,i){t>=e&&Hc(t,r,n,s,i)}a(e5,"greaterThanEqualCompare");function t5(e,t,r,n,s,i){t<e&&Hc(t,r,n,s,i)}a(t5,"lessThanCompare");function r5(e,t,r,n,s,i){t<=e&&Hc(t,r,n,s,i)}a(r5,"lessThanEqualCompare");GU.exports={parseRow:Iy,searchAll:z8,searchAllToMap:Q8,iterateDBI:j8,endsWith:J8,contains:X8,greaterThanCompare:Z8,greaterThanEqualCompare:e5,lessThanCompare:t5,lessThanEqualCompare:r5,pushResults:Hc}});var du=P((Hbe,zU)=>{"use strict";var da=ht(),Ube=X(),$n=ln(),zp=Ft(),zt=Dn().LMDB_ERRORS_ENUM,xbe=oe(),n5=(G(),D($)),Qp=Cy(),{parseRow:s5}=Qp,Bbe=require("lmdb"),{OVERFLOW_MARKER:qU,MAX_SEARCH_KEY_LENGTH:i5}=zp;function $U(e,t,r,n=!1,s=void 0,i=void 0){return kc(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($U,"iterateFullIndex");function n_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return kc(e,t,r,(f,d,h,_)=>{let E={transaction:f,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 _===r?(E.values=!1,d.getRange(E).map(T=>({value:T}))):d.getRange(E)})}a(n_,"iterateRangeBetween");function kc(e,t,r,n){let s=e.database||e,i=da.openDBI(s,r);i[zp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&da.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(kc,"setupTransaction");function VU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(qU)){if(!s)if(r)s=da.openDBI(e,r);else{let l=da.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=da.openDBI(e,l[u]),!s[zp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(VU,"getOverflowCheck");function o5(e,t,r,n=!1,s=void 0,i=void 0){if($n.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return kc(e,t,t,(o,c,l)=>(jp(r),r=s_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>s5(u.value,r))))}a(o5,"searchAll");function a5(e,t,r,n=!1,s=void 0,i=void 0){if($n.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);jp(r),r=s_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of $U(e,t,t,n,s,i))o.set(c,Qp.parseRow(l,r));return o}a(a5,"searchAllToMap");function c5(e,t,r=!1,n=void 0,s=void 0){if($n.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=$U(e,void 0,t,r,n,s),c=o.transaction,l=VU(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(c5,"iterateDBI");function l5(e,t){if($n.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return da.statDBI(e,t).entryCount}a(l5,"countAll");function u5(e,t,r,n,s=!1,i=void 0,o=void 0){return fa(e,r,n),kc(e,t,r,(c,l,u,f)=>(n=$n.convertKeyValueToWrite(n),f===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(d=>({key:n,value:d}))))}a(u5,"equals");function d5(e,t,r){return fa(e,t,r),da.openDBI(e,t).getValuesCount(r)}a(d5,"count");function f5(e,t,r,n,s=!1,i=void 0,o=void 0){return fa(e,r,n),kc(e,null,r,(c,l)=>{n=$n.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let h of l.getKeys({transaction:c,start:n}))if(!h.startsWith(n)){d=h;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),f=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(h=>{let{key:_}=h;if(_!==d){if(_.toString().startsWith(n))return h;if(u===!0)return f.DONE}}),f.filter(h=>h)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(f5,"startsWith");function _5(e,t,r,n,s=!1,i=void 0,o=void 0){return KU(e,t,r,n,s,i,o,!0)}a(_5,"endsWith");function KU(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return fa(e,r,n),kc(e,null,r,(l,u,f,d)=>{let h=VU(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(_=>{let m=_.toString();return m.endsWith(qU)?u.getValues(_,{transaction:l}).map(S=>{let g=h(_,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?m.endsWith(n):m.includes(n))?u[zp.DBI_DEFINITION_NAME].is_hash_attribute?{key:_,value:_}:u.getValues(_,{transaction:l}).map(S=>({key:_,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(KU,"contains");function h5(e,t,r,n,s=!1,i=void 0,o=void 0){fa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),n_(e,t,r,n,l,s,i,o,!0,!1)}a(h5,"greaterThan");function m5(e,t,r,n,s=!1,i=void 0,o=void 0){fa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),n_(e,t,r,n,l,s,i,o,!1,!1)}a(m5,"greaterThanEqual");function p5(e,t,r,n,s=!1,i=void 0,o=void 0){fa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),n_(e,t,r,l,n,s,i,o,!1,!0)}a(p5,"lessThan");function E5(e,t,r,n,s=!1,i=void 0,o=void 0){fa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),n_(e,t,r,l,n,s,i,o,!1,!1)}a(E5,"lessThanEqual");function g5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if($n.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=$n.convertKeyValueToWrite(n),s=$n.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return n_(e,t,r,n,s,i,o,c)}a(g5,"between");function S5(e,t,r,n){$n.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(jp(r),r=s_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Qp.parseRow(c,r)),o}a(S5,"searchByHash");function T5(e,t,r){$n.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(T5,"checkHashExists");function A5(e,t,r,n,s=[]){return WU(e,t,r,n,s),YU(e,t,r,n,s).map(i=>i[1])}a(A5,"batchSearchByHash");function R5(e,t,r,n,s=[]){WU(e,t,r,n,s);let i=new Map;for(let[o,c]of YU(e,t,r,n,s))i.set(o,c);return i}a(R5,"batchSearchByHashToMap");function YU(e,t,r,n,s=[]){return kc(e,t,t,(i,o,c)=>{r=s_(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,Qp.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(YU,"batchHashSearch");function WU(e,t,r,n,s){if($n.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(jp(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(WU,"initializeBatchSearchByHash");function jp(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(jp,"validateFetchAttributes");function fa(e,t,r){if($n.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>i5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(fa,"validateComparisonFunctions");function s_(e,t){return t.length===1&&n5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=da.listDBIs(e)),t}a(s_,"setGetWholeRowAttributes");zU.exports={searchAll:o5,searchAllToMap:a5,count:d5,countAll:l5,equals:u5,startsWith:f5,endsWith:_5,contains:KU,searchByHash:S5,setGetWholeRowAttributes:s_,batchSearchByHash:A5,batchSearchByHashToMap:R5,checkHashExists:T5,iterateDBI:c5,greaterThan:h5,greaterThanEqual:m5,lessThan:p5,lessThanEqual:E5,between:g5}});var fu=P((Fbe,ZU)=>{var QU=require("lodash"),jU=nt(),Fe=require("joi"),y5=oe(),{hdb_schema_table:i_,checkValidTable:JU,hdb_table:XU,hdb_database:Jp}=Ri(),{handleHDBError:b5,hdb_errors:O5}=he(),{getDatabases:N5}=(Ue(),D(at)),{HTTP_STATUS_CODES:w5}=O5,I5=Fe.object({database:Jp,schema:Jp,table:XU,search_attribute:i_,search_value:Fe.any().required(),get_attributes:Fe.array().min(1).items(Fe.alternatives(i_,Fe.object())).optional(),desc:Fe.bool(),limit:Fe.number().integer().min(1),offset:Fe.number().integer().min(0)}),C5=Fe.object({database:Jp,schema:Jp,table:XU,operator:Fe.string().valid("and","or").default("and").lowercase(),offset:Fe.number().integer().min(0),limit:Fe.number().integer().min(1),get_attributes:Fe.array().min(1).items(Fe.alternatives(i_,Fe.object())).optional(),sort:Fe.object({attribute:Fe.alternatives(i_,Fe.array().min(1)),descending:Fe.bool().optional()}).optional(),conditions:Fe.array().min(1).items(Fe.alternatives(Fe.object({operator:Fe.string().valid("and","or").default("and").lowercase(),conditions:Fe.array()}),Fe.object({search_attribute:Fe.alternatives(i_,Fe.array().min(1)),search_type:Fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:Fe.when("search_type",{switch:[{is:"equals",then:Fe.any()},{is:"between",then:Fe.array().items(Fe.alternatives([Fe.string(),Fe.number()])).length(2)}],otherwise:Fe.alternatives(Fe.string(),Fe.number())}).required()}))).required()});ZU.exports=function(e,t){let r=null;switch(t){case"value":r=jU.validateBySchema(e,I5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(JU("database",e.schema)),i(JU("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=jU.validateBySchema(e,C5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=y5.checkGlobalSchemaTable(e.schema,e.table);if(s)return b5(new Error,s,w5.NOT_FOUND);let o=N5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(f=>{for(let d=0,h=f.conditions.length;d<h;d++){let _=f.conditions[d];_.conditions?l(_):c.push(_.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=QU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!QU.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var Py=P((qbe,e0)=>{"use strict";var P5=ht(),D5=fu(),{getSchemaPath:L5}=gt();e0.exports=M5;function M5(e){let t=D5(e,"hashes");if(t)throw t;let r=L5(e.schema,e.table);return P5.openEnvironment(r,e.table)}a(M5,"initialize")});var Dy=P((Vbe,t0)=>{"use strict";var v5=du(),U5=Py();t0.exports=x5;async function x5(e){let t=await U5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return v5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(x5,"lmdbGetDataByHash")});var _u=P((Ybe,r0)=>{"use strict";var Ly=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};r0.exports=Ly});var s0=P((Qbe,n0)=>{"use strict";var zbe=_u(),B5=du(),H5=Py();n0.exports=k5;async function k5(e){let t=await H5(e),r=global.hdb_schema[e.schema][e.table];return B5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(k5,"lmdbSearchByHash")});var Ys=P((Jbe,i0)=>{"use strict";var My=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};i0.exports=My});var Xp=P((Zbe,d0)=>{"use strict";var Yr=du(),F5=ht(),G5=oe(),Ge=Ft(),Fc=(G(),D($)),q5=oo(),o0=Dn().LMDB_ERRORS_ENUM,{getSchemaPath:$5}=gt(),ho=Fc.SEARCH_WILDCARDS;async function V5(e,t,r){let n;e.schema===Fc.SYSTEM_SCHEMA_NAME?n=q5[e.table]:n=global.hdb_schema[e.schema][e.table];let s=u0(e,n.hash_attribute,r,t);return c0(e,s,n.hash_attribute,r)}a(V5,"prepSearch");async function c0(e,t,r,n){let s=$5(e.schema,e.table),i=await F5.openEnvironment(s,e.table),o=l0(i,e,t,r),c=o.transaction||i;if([Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ge.SEARCH_TYPES.SEARCH_ALL,Ge.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(K5(e,r)===!1){let f=e.search_attribute;if(f===r)return n?a0(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?a0(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Yr.batchSearchByHashToMap(c,r,e.get_attributes,u):Yr.batchSearchByHash(c,r,e.get_attributes,u)}a(c0,"executeSearch");function l0(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 Ge.SEARCH_TYPES.EQUALS:s=Yr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.CONTAINS:s=Yr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.ENDS_WITH:case Ge.SEARCH_TYPES._ENDS_WITH:s=Yr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.STARTS_WITH:case Ge.SEARCH_TYPES._STARTS_WITH:s=Yr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Yr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Yr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ge.SEARCH_TYPES.SEARCH_ALL:return Yr.searchAll(e,n,t.get_attributes,o,c,l);case Ge.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Yr.searchAllToMap(e,n,t.get_attributes,o,c,l);case Ge.SEARCH_TYPES.BETWEEN:s=Yr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Ge.SEARCH_TYPES.GREATER_THAN:case Ge.SEARCH_TYPES._GREATER_THAN:s=Yr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ge.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Yr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.LESS_THAN:case Ge.SEARCH_TYPES._LESS_THAN:s=Yr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.LESS_THAN_EQUAL:case Ge.SEARCH_TYPES._LESS_THAN_EQUAL:s=Yr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(l0,"searchByType");function a0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(a0,"createMapFromIterable");function K5(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(K5,"checkToFetchMore");function u0(e,t,r,n){if(G5.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ho.indexOf(s)>-1)return r===!0?Ge.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ge.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ho[0])<0&&s.indexOf(ho[1])<0)return c===!0?r===!0?Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ge.SEARCH_TYPES.EQUALS;if(ho.indexOf(i)>=0&&ho.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ge.SEARCH_TYPES.CONTAINS;if(ho.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ge.SEARCH_TYPES.ENDS_WITH;if(ho.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ge.SEARCH_TYPES.STARTS_WITH;if(s.includes(ho[0])||s.includes(ho[1]))return Ge.SEARCH_TYPES.EQUALS;throw new Error(o0.UNKNOWN_SEARCH_TYPE)}else switch(n){case Fc.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ge.SEARCH_TYPES.BETWEEN;case Fc.VALUE_SEARCH_COMPARATORS.GREATER:return Ge.SEARCH_TYPES.GREATER_THAN;case Fc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ge.SEARCH_TYPES.GREATER_THAN_EQUAL;case Fc.VALUE_SEARCH_COMPARATORS.LESS:return Ge.SEARCH_TYPES.LESS_THAN;case Fc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ge.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(o0.UNKNOWN_SEARCH_TYPE)}}a(u0,"createSearchTypeFromSearchObject");d0.exports={executeSearch:c0,createSearchTypeFromSearchObject:u0,prepSearch:V5,searchByType:l0}});var _0=P((rOe,f0)=>{"use strict";var tOe=Ys(),Y5=fu(),W5=oe(),z5=(G(),D($)),Q5=Xp();f0.exports=j5;function j5(e,t){if(!W5.isEmpty(t)&&z5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Y5(e,"value");if(n)throw n;return Q5.prepSearch(e,t,!0)}a(j5,"lmdbGetDataByValue")});var o_=P((iOe,h0)=>{"use strict";var sOe=Ys(),J5=fu(),X5=oe(),Z5=(G(),D($)),e9=Xp();h0.exports=t9;async function t9(e,t){if(!X5.isEmpty(t)&&Z5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=J5(e,"value");if(n)throw n;return e9.prepSearch(e,t,!1)}a(t9,"lmdbSearchByValue")});var p0=P((cOe,m0)=>{"use strict";var aOe=Ft(),vy=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}},Uy=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},xy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};m0.exports={SearchByConditionsObject:vy,SearchCondition:Uy,SortAttribute:xy}});var A0=P((fOe,T0)=>{"use strict";var uOe=p0().SearchByConditionsObject,r9=Ys(),n9=fu(),By=du(),Zp=Ft(),{Resource:dOe}=(na(),D(xA)),S0=Xp(),s9=Cy(),i9=require("lodash"),{getSchemaPath:o9}=gt(),E0=ht(),{handleHDBError:a9,hdb_errors:c9}=he(),{HTTP_STATUS_CODES:l9}=c9,u9=1e8;T0.exports=d9;async function d9(e){let t=n9(e,"conditions");if(t)throw a9(t,t.message,l9.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=o9(e.schema,e.table),n=await E0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)E0.openDBI(n,u.search_attribute);let i=i9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===Zp.SEARCH_TYPES.EQUALS?u.estimated_count=By.count(n,u.search_attribute,u.search_value):f===Zp.SEARCH_TYPES.CONTAINS||f===Zp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=u9}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await g0(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(S0.filterByType),d=f.length,h=By.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(_=>u.get(_,{transaction:o,lazy:!0})),d>0&&(l=l.filter(_=>{for(let m=0;m<d;m++)if(!f[m](_))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(_=>s9.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await g0(o,e,h,s.hash_attribute);c=c.concat(_)}let u=new Set,f=e.offset||0;c=c.filter(d=>u.has(d)?!1:(u.add(d),!0)).slice(f,e.limit&&e.limit+f),l=By.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(d9,"lmdbSearchByConditions");async function g0(e,t,r,n){let s=new r9(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Zp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,S0.searchByType(e,s,i,n).map(o=>o.value)}a(g0,"executeConditionSearch")});var a_=P((hOe,R0)=>{"use strict";var f9=(G(),D($)).OPERATIONS_ENUM,Hy=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=f9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};R0.exports=Hy});var ky=P((pOe,P0)=>{"use strict";var N0=Ys(),w0=a_(),I0=o_(),C0=r_(),Sn=(G(),D($)),y0=oe(),b0=ht(),{getTransactionAuditStorePath:_9,getSchemaPath:h9}=gt(),O0=X();P0.exports=m9;async function m9(e){try{if(y0.isEmpty(global.hdb_schema[e.schema])||y0.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await p9(e),await E9(e);let t=h9(e.schema,e.table);try{await b0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")O0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=_9(e.schema,e.table);await b0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")O0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(m9,"lmdbDropTable");async function p9(e){let t=new N0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await I0(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 w0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await C0(s)}a(p9,"deleteAttributesFromSystem");async function E9(e){let t=new N0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await I0(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 w0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await C0(s)}catch(i){throw i}}a(E9,"dropTableFromSystem")});var L0=P((gOe,D0)=>{"use strict";var g9=require("fs-extra"),S9=Ys(),T9=_u(),A9=a_(),R9=ky(),y9=r_(),b9=Dy(),O9=o_(),mo=(G(),D($)),{getSchemaPath:N9}=gt(),{handleHDBError:w9,hdb_errors:I9}=he(),{HDB_ERROR_MSGS:C9,HTTP_STATUS_CODES:P9}=I9;D0.exports=D9;async function D9(e){let t;try{t=await L9(e.schema);let r=new S9(mo.SYSTEM_SCHEMA_NAME,mo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await O9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await R9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new A9(mo.SYSTEM_SCHEMA_NAME,mo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await y9(s);let i=N9(t);await g9.remove(i)}catch(r){throw r}}a(D9,"lmdbDropSchema");async function L9(e){let t=new T9(mo.SYSTEM_SCHEMA_NAME,mo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await b9(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw w9(new Error,C9.SCHEMA_NOT_FOUND(e),P9.NOT_FOUND,void 0,void 0,!0);return n}a(L9,"validateDropSchema")});var c_=P((TOe,M0)=>{"use strict";var Fy=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};M0.exports=Fy});var qy=P((yOe,v0)=>{"use strict";var M9=require("fs-extra"),eE=ht(),{getTransactionAuditStorePath:v9}=gt(),Gy=Ft(),ROe=c_();v0.exports=U9;async function U9(e){let t;try{let r=v9(e.schema,e.table);await M9.mkdirp(r),t=await eE.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{eE.createDBI(t,Gy.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),eE.createDBI(t,Gy.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),eE.createDBI(t,Gy.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(U9,"createTransactionsAuditEnvironment")});var B0=P((NOe,x0)=>{"use strict";var $y=(G(),D($)),U0=ht(),x9=Cc(),{getSystemSchemaPath:B9,getSchemaPath:H9}=gt(),OOe=oo(),k9=Dp(),Vy=Pp(),F9=X(),G9=qy();x0.exports=q9;async function q9(e,t){let r=H9(t.schema,t.table),n=new Vy(t.schema,t.table,$y.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Vy(t.schema,t.table,$y.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Vy(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await U0.createEnvironment(r,t.table),e!==void 0){let o=await U0.openEnvironment(B9(),$y.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await x9.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Ky(n),await Ky(s),await Ky(i)}await G9(t)}catch(o){throw o}}a(q9,"lmdbCreateTable");async function Ky(e){try{await k9(e)}catch(t){F9.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ky,"createAttribute")});var k0=P((IOe,H0)=>{"use strict";var $9=kf(),V9=df(),K9=Yp(),l_=(G(),D($)),Y9=Cc().updateRecords,W9=ht(),{getSchemaPath:z9}=gt(),Q9=e_(),j9=X();H0.exports=J9;async function J9(e){try{let{schema_table:t,attributes:r}=$9(e);V9(e,r,t.hash_attribute),e.schema!==l_.SYSTEM_SCHEMA_NAME&&(r.includes(l_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(l_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(l_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(l_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await K9(e.hdb_auth_header,t,r),s=z9(e.schema,e.table),i=await W9.openEnvironment(s,e.table),o=await Y9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Q9(e,o)}catch(c){j9.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(J9,"lmdbUpdateRecords")});var G0=P((POe,F0)=>{"use strict";var X9=(G(),D($)).OPERATIONS_ENUM,Yy=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=X9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};F0.exports=Yy});var $0=P((MOe,q0)=>{"use strict";var LOe=G0(),Z9=kf(),e7=df(),t7=Yp(),u_=(G(),D($)),r7=Cc().upsertRecords,n7=ht(),{getSchemaPath:s7}=gt(),i7=e_(),o7=X(),{handleHDBError:a7,hdb_errors:c7}=he();q0.exports=l7;async function l7(e){let t;try{t=Z9(e)}catch(l){throw a7(l,l.message,c7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;e7(e,n,r.hash_attribute),e.schema!==u_.SYSTEM_SCHEMA_NAME&&(n.includes(u_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(u_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(u_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(u_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await t7(e.hdb_auth_header,r,n),i=s7(e.schema,e.table),o=await n7.openEnvironment(i,e.table),c=await r7(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await i7(e,c)}catch(l){o7.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(l7,"lmdbUpsertRecords")});var K0=P((UOe,V0)=>{"use strict";var Wy=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};V0.exports=Wy});var W0=P((BOe,Y0)=>{"use strict";var zy=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}};Y0.exports=zy});var j0=P((FOe,Q0)=>{"use strict";var Qy=ht(),{getTransactionAuditStorePath:u7}=gt(),kOe=K0(),d_=Ft(),d7=oe(),z0=W0(),f7=require("util").promisify,_7=f7(setTimeout),h7=1e4,m7=100;Q0.exports=p7;async function p7(e){let t=u7(e.schema,e.table),r=await Qy.openEnvironment(t,e.table,!0),n=Qy.listDBIs(r);Qy.initializeDBIs(r,d_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new z0;do s=await E7(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 _7(m7);while(s.transactions_deleted>0);return i}a(p7,"deleteAuditLogsBefore");async function E7(e,t){let r=new z0;try{let n=e.dbis[d_.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[d_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];d7.isEmpty(c)||(s=e.dbis[d_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[d_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>h7)break}return await s,r}catch(n){throw n}}a(E7,"deleteTransactions")});var X0=P((qOe,J0)=>{"use strict";var jy=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};J0.exports=jy});var ex=P((KOe,Z0)=>{"use strict";var g7=Ys(),S7=a_(),VOe=X0(),wi=(G(),D($)),T7=oe(),Jy=ht(),A7=oo(),R7=o_(),y7=r_(),{getSchemaPath:b7}=gt();Z0.exports=O7;async function O7(e,t=!0){let r;e.schema===wi.SYSTEM_SCHEMA_NAME?r=A7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await w7(e),s=b7(e.schema,e.table),i=await Jy.openEnvironment(s,e.table);return t===!0&&await N7(e,i,r.hash_attribute),Jy.dropDBI(i,e.attribute),n}a(O7,"lmdbDropAttribute");async function N7(e,t,r){let n=Jy.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 f in c)f!==i&&(u[f]=c[f]);s=t.dbis[r].put(o,u,l)}await s}a(N7,"removeAttributeFromAllObjects");async function w7(e){let t=new g7(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await R7(t)).filter(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(T7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new S7(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return y7(i)}a(w7,"dropAttributeFromSystem")});var ox=P((zOe,ix)=>{"use strict";var Xy=ht(),hu=Ft(),WOe=ln(),Zy=(G(),D($)),tx=oe(),{getTransactionAuditStorePath:I7}=gt(),C7=du(),tE=cu(),P7=X();ix.exports=D7;async function D7(e){let t=I7(e.schema,e.table),r=await Xy.openEnvironment(t,e.table,!0),n=Xy.listDBIs(r);Xy.initializeDBIs(r,hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return rx(r,e.search_values);case Zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,M7(r,e.search_values,s);case Zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return L7(r,e.search_values);default:return rx(r)}}a(D7,"readAuditLog");function rx(e,t=[0,Date.now()]){tx.isEmpty(t[0])&&(t[0]=0),tx.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[hu.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 tE,s))}a(rx,"searchTransactionsByTimestamp");function L7(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[hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,sx(e,i))}return Object.fromEntries(r)}a(L7,"searchTransactionsByUsername");function M7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=C7.equals(e,hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let h=Number(d);n.has(h)?n.get(h).push(u.toString()):n.set(h,[u.toString()])}}let s=Array.from(n.keys()),i=sx(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);nx(l,"records",r,f,o),nx(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(M7,"searchTransactionsByHashValues");function nx(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),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new tE(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new tE(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(nx,"loopRecords");function sx(e,t){let r=[];try{let n=e.dbis[hu.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 tE,i);r.push(o)}}catch(i){P7.warn(i)}return r}catch(n){throw n}}a(sx,"batchSearchTransactions")});var cx=P((XOe,ax)=>{"use strict";var{getSchemaPath:jOe}=gt(),JOe=ht(),{database:v7}=(Ue(),D(at));ax.exports={writeTransaction:U7};async function U7(e,t,r){return v7({database:e,table:t}).transaction(r)}a(U7,"writeTransaction")});var fx=P((eNe,dx)=>{"use strict";var{getSchemaPath:lx}=gt(),ux=ht();dx.exports={flush:x7,resetReadTxn:B7};async function x7(e,t){return(await ux.openEnvironment(lx(e,t),t.toString())).flushed}a(x7,"flush");async function B7(e,t){try{(await ux.openEnvironment(lx(e,t),t.toString())).resetReadTxn()}catch{}}a(B7,"resetReadTxn")});var px=P((rNe,mx)=>{"use strict";var{Readable:H7}=require("stream"),{getDatabases:k7}=(Ue(),D(at)),{readSync:F7,openSync:G7,createReadStream:_x}=require("fs"),{open:q7}=require("lmdb"),hx=vf(),$7=Uf(),{AUDIT_STORE_OPTIONS:V7}=(so(),D(Ex)),{INTERNAL_DBIS_NAME:K7,AUDIT_STORE_NAME:Y7}=Ft();mx.exports=z7;var eb=32768,W7=100;async function z7(e){let t=e.database||e.schema||"data",r=k7()[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 f=u.dbisDB,d=q7({noSync:!0,maxDbs:$7.MAX_DBS}),h,_=d.openDB(K7,new hx(!1)),m=f.useReadTransaction(),S=0,g=a(async function(E,T){T.encoding="binary",T.encoder=void 0;let O=d.openDB(E,T),v=f.openDB(E,T);for(let{key:F,version:q,value:Q}of v.getRange({start:null,transaction:m,versions:v.useVersions}))h=O.put(F,Q,q),S++%W7===0&&(await new Promise(te=>setTimeout(te,20)),m.openTimer&&(m.openTimer=0))},"copyDatabase");for(let{key:E,value:T}of f.getRange({transaction:m,start:!1}))if(s.some(O=>E.startsWith?.(O+"/"))){_.put(E,T);let[,O]=E.split("/"),v=!O,F=new hx(!v,v);await g(E,F)}e.include_audit&&await g(Y7,{...V7}),await h;let R=_x(d.path);return R.headers=l(),R.on("close",()=>{m.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=G7(o.path);return o.transaction(()=>{let u=Buffer.alloc(eb);F7(c,u,0,eb),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=_x(null,{fd:c,start:eb}),h=new H7.from(async function*(){yield u;for await(let _ of d)f.openTimer&&(f.openTimer=0),yield _;f.done()}());return h.headers=l(),h});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(z7,"getBackup")});var Tx=P((sNe,Sx)=>{"use strict";var Q7=X(),{handleHDBError:j7}=he(),J7=QL(),X7=Dp(),Z7=by(),eee=LU(),tee=r_(),ree=Dy(),nee=s0(),see=_0(),iee=o_(),oee=A0(),aee=L0(),cee=B0(),lee=k0(),uee=$0(),dee=j0(),fee=ky(),_ee=ex(),hee=ox(),mee=cx(),gx=fx(),pee=px(),tb=class extends J7{static{a(this,"LMDBBridge")}async searchByConditions(t){return oee(t)}async getDataByHash(t){return await ree(t)}async searchByHash(t){return await nee(t)}async getDataByValue(t,r){return await see(t,r)}async searchByValue(t){return await iee(t)}async createSchema(t){return await eee(t)}async dropSchema(t){return await aee(t)}async createTable(t,r){return await cee(t,r)}async dropTable(t){return await fee(t)}async createAttribute(t){return await X7(t)}async createRecords(t){return await Z7(t)}async updateRecords(t){return await lee(t)}async upsertRecords(t){try{return await uee(t)}catch(r){throw j7(r,null,null,Q7.ERR,r)}}async deleteRecords(t){return await tee(t)}async dropAttribute(t){return await _ee(t)}async deleteAuditLogsBefore(t){return await dee(t)}async readAuditLog(t){return await hee(t)}writeTransaction(t,r,n){return mee.writeTransaction(t,r,n)}flush(t,r){return gx.flush(t,r)}resetReadTxn(t,r){return gx.resetReadTxn(t,r)}getBackup(t){return pee(t)}};Sx.exports=tb});var nb={};Be(nb,{add:()=>rE,applyReverse:()=>Ax,getRecordAtTime:()=>rb,rebuildUpdateBefore:()=>nE});function rE(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 nE(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,rE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Ax(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Eee[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Rx}}function rb(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Ct(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":Ax(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===Rx&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Ct(l),f;switch(u.type){case"put":f=u.getValue(r);break;case"patch":f=u.getValue(r);break}for(let d in f)o[d]&&(s[d]=f[d],o[d]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var Eee,Rx,sE=be(()=>{so();a(rE,"add");rE.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)};Eee={add:rE};a(nE,"rebuildUpdateBefore");a(Ax,"applyReverse");Rx={};a(rb,"getRecordAtTime")});function Tn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function cE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a string, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(h=>typeof h=="string")||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a string, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="number"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a number, attempt to assign ${h}`);Tn(this)[l]=d},"set");break;case"Int":u=a(function(d){let h=d?.__op__?d.value:d;if(!(h>>0===h||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Long":u=a(function(d){let h=d?.__op__?d.value:d;if(!(Math.round(h)===d&&Math.abs(h)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="bigint"||d==null&&c.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be a number, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a boolean, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Date":u=a(function(d){if(!(d instanceof Date||d==null&&c.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Vn.ClientError(`${l} must be a Date, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof gi||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){Tn(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be an object, attempt to assign ${d}`);Tn(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let _=d[l];if(_?.__op__){let m=this.getRecord()?.[l];return _.update(m)}return _}let h=this.getRecord()?.[l];if(h&&typeof h=="object"){let _=sb(h,c);if(_)return d||this._setChanges(d=Object.create(null)),d[l]=_}return h},set:u,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,n[l]=f,(!(l in r)||Object.getOwnPropertyDescriptor(r,l)?.get?.isAttribute)&&Object.defineProperty(r,l,f)}i("getProperty",function(c){let l=n[c];if(l)return l.get.call(this);let u=this.getChanges();return u?.[c]!==void 0?u[c]:this.getRecord()?.[c]}),i("set",function(c,l){let u=n[c];if(u)return u.set.call(this,l);if(t.sealed)throw new Vn.ClientError("Can not add a property to a sealed table schema");Tn(this)[c]=l}),i("deleteProperty",function(c){Tn(this)[c]=void 0}),i("toJSON",function(){let c=this.getChanges?.(),l;for(let f in c){l||(l={...this.getRecord()});let d=c[f];if(d?.__op__){let h=l[f];d=d.update(h)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,bx);break}o=c}while(o&&o!==bx)}function sb(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends f_{static{a(this,"TrackedObject")}},cE(r,t)),new r(e)):new f_(e);case Array:let n=new oE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=sb(o,t?.elements)),n[s]=o}return n;default:return e}}function lE(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=lE(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 qc(e,t=e.getChanges?.()){let r;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=qc(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?.()});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=nb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=qc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)gee.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function iE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Gc]||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(iE(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(iE(s))return!0}else return!0}else return!0}}return!1}var Vn,yx,bx,f_,gee,Gc,oE,aE,ib=be(()=>{Vn=M(he());sE();fs();a(Tn,"getChanges");a(cE,"assignTrackedAccessors");yx=Object.prototype,bx=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(yx[t])return yx[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=sb(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(sb,"trackObject");f_=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}};cE(f_,{});a(lE,"collapseData");gee=Object.prototype.hasOwnProperty;a(qc,"updateAndFreeze");a(iE,"hasChanges");Gc=Symbol.for("has-array-changes"),oE=class extends Array{static{a(this,"TrackedArray")}#e;[Gc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Gc]=!0,super.splice(...t)}push(...t){return this[Gc]=!0,super.push(...t)}pop(){return this[Gc]=!0,super.pop()}unshift(...t){return this[Gc]=!0,super.unshift(...t)}shift(){return this[Gc]=!0,super.shift()}};oE.prototype.constructor=Array;aE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Lx={};Be(Lx,{ResourceBridge:()=>cb});function lb({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 Nx(e,t){let r=Ii(e),n=lb(e,r);if(!r)throw new Ws.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;It(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++],f;try{f=await r.get({id:u,lazy:s,select:n},i),f=f&&lE(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ii(e){let t=e.database||e.schema||Tee,r=Ze()[t];if(!r)throw(0,Ws.handleHDBError)(new Error,See.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function wx(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*Ix(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:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);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:[f]}}}s&&(yield s)}var Cx,uE,Ws,Px,ob,ab,Dx,See,Tee,Aee,Ree,Ox,cb,Mx=be(()=>{"use strict";Cx=M(Tx()),uE=M(fu()),Ws=M(he());Ue();Px=M(kf());G();ob=M(_o()),ab=M(Ks()),Dx=M(oe());hc();ib();({HDB_ERROR_MSGS:See}=Ws.hdb_errors),Tee="data",Aee=1e4,Ree=10,cb=class extends Cx.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Ox=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,uE.default)(t,"conditions");if(r)throw(0,Ws.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ii(t);if(!n)throw new Ws.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:lb(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ws.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}]}_t({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ii(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ii(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:f,version:d}=r.primaryStore.getEntry(o);return i(o,f,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ii(t).dropTable()}createSchema(t){return mu({database:t.schema,table:null}),ob.signalSchemaChange(new ab.SchemaEventMsg(process.pid,Yt.CREATE_SCHEMA,t.schema))}async dropSchema(t){await ub(t.schema),ob.signalSchemaChange(new ab.SchemaEventMsg(process.pid,Yt.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,Ox.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Px.default)(t),s,i=Ze()[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),It(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(h=>h.name==f)||s.push(f);s.length>0&&await i.addAttributes(s.map(f=>({name:f,indexed:!0})))}let l=[],u=[];for(let f of t.records){let d=f[i.primaryKey],h=d!=null&&await i.get(d,o);if(t.requires_existing&&!h||t.requires_no_existing&&h){u.push(f[i.primaryKey]);continue}h&&(h=lE(h));for(let _ in f)if(Object.prototype.hasOwnProperty.call(f,_)){let m=f[_];if(typeof m=="function")try{let S=m([[h]]);Array.isArray(S)&&(m=S[0].func_val,f[_]=m)}catch(S){throw S.message+="Trying to set key "+_+" on object"+JSON.stringify(f),S}}if(h)for(let _ in h)Object.prototype.hasOwnProperty.call(f,_)||(f[_]=h[_]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Ze()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),It(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 wx(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Ze()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ws.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:wm.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,Dx.async_set_timeout)(Ree),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%Aee===0&&await u();return l.length>0&&await u(),s?wx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,uE.default)(t,"hashes");if(r)throw r;return Nx(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Nx(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&aA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,uE.default)(t,"value");if(n)throw n;let s=Ii(t);if(!s)throw new Ws.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===wm.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:lb(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ii(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){Ii({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ii(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ii(t),n={};switch(t.search_type){case Im.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Im.USERNAME:let s=t.search_values;for await(let i of Ix(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Ix(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(lb,"getSelect");a(Nx,"getRecords");a(Ii,"getTable");a(wx,"createDeleteResponse");a(Ix,"groupRecordsInHistory")});var Fn=P((ENe,vx)=>{"use strict";var{ResourceBridge:yee}=(Mx(),D(Lx)),bee=ce();bee.initSync();var dE;function Oee(){return dE||(dE=new yee,dE)}a(Oee,"getBridge");vx.exports=Oee()});var gn=P((SNe,Hx)=>{"use strict";var _E=iR(),Mr=oe(),Nee=require("util"),hE=Fn(),wee=$s(),Ux=X(),{handleHDBError:$c,hdb_errors:Iee}=he(),{HTTP_STATUS_CODES:Vc}=Iee,Cee=Nee.promisify(wee.getTableSchema),Pee="updated",xx="inserted",Bx="upserted";Hx.exports={insert:Lee,update:Mee,upsert:vee,validation:Dee,flush:Uee};async function Dee(e){if(Mr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Mr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Mr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Cee(e.schema,e.table),r=_E(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&&Mr.isEmptyOrZeroLength(c[n]))throw Ux.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(!Mr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Ux.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Mr.isEmpty(c[n])&&c[n]!==""&&s.has(Mr.autoCast(c[n]))&&(c.skip=!0),s.add(Mr.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(Dee,"validation");async function Lee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=_E(e);if(t)throw $c(new Error,t.message,Vc.BAD_REQUEST);Mr.transformReq(e);let r=Mr.checkSchemaTableExist(e.schema,e.table);if(r)throw $c(new Error,r,Vc.BAD_REQUEST);let n=await hE.createRecords(e);return fE(xx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Lee,"insertData");async function Mee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=_E(e);if(t)throw $c(new Error,t.message,Vc.BAD_REQUEST);Mr.transformReq(e);let r=Mr.checkSchemaTableExist(e.schema,e.table);if(r)throw $c(new Error,r,Vc.BAD_REQUEST);let n=await hE.updateRecords(e);return Mr.isEmpty(n.existing_rows)?fE(Pee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):fE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Mee,"updateData");async function vee(e){if(e.operation!=="upsert")throw $c(new Error,"invalid operation, must be upsert",Vc.INTERNAL_SERVER_ERROR);let t=_E(e);if(t)throw $c(new Error,t.message,Vc.BAD_REQUEST);Mr.transformReq(e);let r=Mr.checkSchemaTableExist(e.schema,e.table);if(r)throw $c(new Error,r,Vc.BAD_REQUEST);let n=await hE.upsertRecords(e);return fE(Bx,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(vee,"upsertData");function fE(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===xx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Bx?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(fE,"returnObject");function Uee(e){return Mr.transformReq(e),hE.flush(e.schema,e.table)}a(Uee,"flush")});var Vx=P((ANe,$x)=>{var pu=require("validate.js"),Fx=nt(),Eu=(G(),D($)),{handleHDBError:xee,hdb_errors:Bee}=he(),{HDB_ERROR_MSGS:Qt,HTTP_STATUS_CODES:Hee}=Bee,db=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),kee={STRUCTURE_USER:"structure_user"},kx=Object.values(Eu.ROLE_TYPES_ENUM),Fee="attribute_permissions",Gee="attribute_name",{PERMS_CRUD_ENUM:gu}=Eu,qee=[Fee,...Object.values(gu)],Gx=[gu.READ,gu.INSERT,gu.UPDATE],$ee=[Gee,...Gx];function Vee(e){let t=db();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,qx(e,t)}a(Vee,"addRoleValidation");function Kee(e){let t=db();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,qx(e,t)}a(Kee,"alterRoleValidation");function Yee(e){let t=db();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Fx.validateObject(e,t)}a(Yee,"dropRoleValidation");var Wee=["operation","role","id","permission","hdb_user","access"];function qx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Wee.includes(n[o])||s.push(n[o]);s.length>0&&nr(Qt.INVALID_ROLE_JSON_KEYS(s),r);let i=Fx.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nr(o,r)}),e.permission){let o=zee(e);o&&nr(o,r),kx.forEach(c=>{e.permission[c]&&!pu.isBoolean(e.permission[c])&&nr(Qt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(kx.indexOf(o)<0){if(o===kee.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,f=l.length;u<f;u++){let d=l[u];global.hdb_schema[d]||nr(Qt.SCHEMA_NOT_FOUND(d),r)}continue}nr(Qt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nr(Qt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){nr(Qt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{qee.includes(f)||nr(Qt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(gu).forEach(f=>{pu.isDefined(u[f])?pu.isBoolean(u[f])||nr(Qt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):nr(Qt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){nr(Qt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){nr(Qt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:h})=>h),d={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let _=u.attribute_permissions[h];if(Object.keys(_).forEach(S=>{!$ee.includes(S)&&S!==gu.DELETE&&nr(Qt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!pu.isDefined(_.attribute_name)){nr(Qt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let m=_.attribute_name;if(!f.includes(m)){nr(Qt.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,l);continue}Gx.forEach(S=>{pu.isDefined(_[S])?pu.isBoolean(_[S])||nr(Qt.ATTR_PERM_NOT_BOOLEAN(S,m),r,o,l):nr(Qt.ATTR_PERM_MISSING(S,m),r,o,l)}),!d.read&&_.read===!0&&(d.read=!0),!d.insert&&_.insert===!0&&(d.insert=!0),!d.update&&_.update===!0&&(d.update=!0)}if(u.read===!1&&d.read===!0||u.insert===!1&&d.insert===!0||u.update===!1&&d.update===!0){let h=`${o}.${l}`;nr(Qt.MISMATCHED_TABLE_ATTR_PERMS(h),r,o,l)}}}}return Qee(r)}a(qx,"customValidate");$x.exports={addRoleValidation:Vee,alterRoleValidation:Kee,dropRoleValidation:Yee};function zee(e){let{operation:t,permission:r}=e;if(t===Eu.OPERATIONS_ENUM.ADD_ROLE||t===Eu.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return Qt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Eu.ROLE_TYPES_ENUM.SUPER_USER:Eu.ROLE_TYPES_ENUM.CLUSTER_USER;return Qt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(zee,"validateNoSUPerms");function Qee(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Qt.ROLE_PERMS_ERROR,...e};return xee(new Error,n,Hee.BAD_REQUEST)}else return null}a(Qee,"generateRolePermResponse");function nr(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(nr,"addPermError")});var h_=P((bNe,zx)=>{"use strict";var Kx=gn(),Yx=Vr(),jee=Uc(),_b=Vx(),hb=_o(),yNe=require("uuid").v4,Jee=require("util"),mE=(G(),D($)),Xee=oe(),mb=Yx.searchByValue,Zee=Yx.searchByHash,ete=Jee.promisify(jee.delete),tte=Ys(),rte=_u(),{hdb_errors:nte,handleHDBError:Kc}=he(),{HDB_ERROR_MSGS:Wx,HTTP_STATUS_CODES:__}=nte,{UserEventMsg:pb}=Ks();zx.exports={addRole:ste,alterRole:ite,dropRole:ote,listRoles:ate};function fb(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(fb,"scrubRoleDetails");async function ste(e){let t=_b.addRoleValidation(e);if(t)throw t;e=fb(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await mb(r)||[])}catch(i){throw Kc(i)}if(n&&n.length>0)throw Kc(new Error,Wx.ROLE_ALREADY_EXISTS(e.role),__.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 Kx.insert(s),hb.signalUserChange(new pb(process.pid)),e=fb(e),e}a(ste,"addRole");async function ite(e){let t=_b.alterRoleValidation(e);if(t)throw t;e=fb(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Kx.update(r)}catch(s){throw Kc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Kc(new Error,"Invalid role id",__.BAD_REQUEST,void 0,void 0,!0);return await hb.signalUserChange(new pb(process.pid)),e}a(ite,"alterRole");async function ote(e){let t=_b.dropRoleValidation(e);if(t)throw Kc(new Error,t,__.BAD_REQUEST,void 0,void 0,!0);let r=new rte(mE.SYSTEM_SCHEMA_NAME,mE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Zee(r));if(n.length===0)throw Kc(new Error,Wx.ROLE_NOT_FOUND,__.NOT_FOUND,void 0,void 0,!0);let s=new tte(mE.SYSTEM_SCHEMA_NAME,mE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await mb(s)),o=!1;if(Xee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Kc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,__.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await ete(c),hb.signalUserChange(new pb(process.pid)),`${n[0].role} successfully deleted`}a(ote,"dropRole");async function ate(){return mb({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(ate,"listRoles")});var Eb={};Be(Eb,{start:()=>Jx,startOnMainThread:()=>ute});function Jx({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Qx.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(cte.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 f=[];for(let d in u.attributes){let h=u.attributes[d];h.attribute_name=d,f.push(h)}u.attribute_permissions=f,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 f of u.attribute_permissions)f.read=!!f.read,f.insert=!!f.insert,f.update=!!f.update}else u.attribute_permissions=null}}i.role=i.id=s,await lte(i)}}}async function lte(e){let t=Ze().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,jx.isEqual)(i,e)?void 0:(e.id=r.id,(0,pE.alterRole)(e))}return(0,pE.addRole)(e)}var pE,Qx,jx,cte,ute,Xx=be(()=>{Ue();pE=M(h_()),Qx=require("yaml"),jx=require("lodash"),cte=["super_user","cluster_user","structure_user"];a(Jx,"start");a(lte,"ensureRole");ute=Jx});async function EE(e){let t=(0,tB.pathToFileURL)(e).toString();if(dte)return m_||(m_=fte(hte)),(await(await m_).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function fte(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),m_=new Compartment({console,Math,Date,fetch:_te,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,eB.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:qr,tables:Kn,databases:Ye})}};let n=await(0,Zx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),m_}function _te(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 hte(){return{Resource:qr,tables:Kn}}var Zx,eB,tB,dte,m_,gb=be(()=>{na();Ue();Zx=require("fs/promises"),eB=require("path"),tB=require("url"),dte=!1;a(EE,"secureImport");a(fte,"getCompartment");a(_te,"secureOnlyFetch");a(hte,"getGlobalVars")});var Tb={};Be(Tb,{handleFile:()=>mte});async function mte(e,t,r,n){let s=new Map,i=await EE(r);c(i.default)&&n.set((0,Sb.dirname)(t),i.default),o(i,(0,Sb.dirname)(t));function o(l,u){for(let f in l){let d=l[f];c(d)?n.set(u+"/"+f,d):typeof d=="object"&&o(d,u+"/"+f)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var Sb,rB=be(()=>{gb();Sb=require("path");a(mte,"handleFile")});var Rb={};Be(Rb,{start:()=>pte});function pte({resources:e}){e.set("login",Ab),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Ab,nB=be(()=>{na();a(pte,"start");Ab=class extends qr{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)}}}});var A_={};Be(A_,{addAnalyticsListener:()=>T_,calculateCPUUtilization:()=>RB,diffResourceUsage:()=>yB,recordAction:()=>Dt,recordActionBinary:()=>Yn,setAnalyticsEnabled:()=>Ete});function Ete(e){EB=e}function gte(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 Ste(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},SE.set(e,o)}function Dt(e,t,r,n,s){if(!EB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=SE.get(i);o?gte(e,o):Ste(i,e,t,r,n,s),gE||Tte()}function Yn(e,t,r,n,s){Dt(!!e,t,r,n,s)}function T_(e){TB.push(e)}function Tte(){gE=performance.now(),setTimeout(async()=>{let e=performance.now()-gE;gE=0;let t=[],r={time:Date.now(),period:e,threadId:Yc.threadId,metrics:t};for(let[s,i]of SE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of AB){let h=Math.floor(c*d),_=o[h-1];if(h>l){let m=h-l;if(_===f){let S=u[u.length-1];typeof S=="number"?u[u.length-1]={value:S,count:1+m}:S.count+=m}else u.push(m>1?{value:_,count:m}:_),f=_;l=h}}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 bB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Yc.threadId,byThread:!0,...n});for(let s of TB)s(t);SE=new Map,Yc.parentPort?Yc.parentPort.postMessage({type:SB,report:r}):wB({report:r})},gB).unref()}function TE(e,t,r){let n={id:(0,g_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function RB(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function yB(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(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 Ate(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};TE(e,"table-size",l),Wc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function sB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=pB.default.statSync(s.primaryStore.env.path).size,c=Ate(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};TE(e,"database-size",u),Wc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wc.warn?.("Error getting DB size metrics",s)}}function iB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={database:r,...i};TE(e,"storage-volume",o),Wc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Wc.warn?.("Error getting DB volume metrics",s)}}async function Rte(e,t=6e4){let r=bb(),n=OB(),s=new Promise(E=>{let T=performance.now();setImmediate(()=>{let O=performance.now();O-T>5e3&&Wc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-T)+"ms"),T=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-T>5e3&&Wc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-T)+"ms"),E(O-T)})}),i;for(let E of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(E.value?.time){i=E.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],f;for(let{key:E,value:T}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!T)continue;if(o){if(E>o+t)break}else o=E;f=E;let{metrics:O,threadId:v}=T;for(let F of O||[]){let{path:q,method:Q,type:te,metric:se,count:z,total:ne,distribution:le,threads:ie,...Re}=F;z||(z=1);let me=se+(q?"-"+q:"");Q!==void 0&&(me+="-"+Q),te!==void 0&&(me+="-"+te);let Ae=c.get(me);if(Ae){if(Ae.threads){let dt=Ae.threads[v];if(dt)Ae=dt;else{Ae.threads[v]={...Re};continue}}Ae.count||(Ae.count=1);let xt=Ae.count;for(let dt in Re){let Cn=Re[dt];typeof Cn=="number"&&(Ae[dt]=(Ae[dt]*xt+Cn*z)/(xt+z))}Ae.count+=z,ne>=0&&(Ae.total+=ne,Ae.ratio=Ae.total/Ae.count)}else Ae={period:t,...F},delete Ae.distribution,c.set(me,Ae),Ae.byThread&&(Ae.threads=[],Ae.threads[v]={...Re},u.push(Ae));if(le){le=le.map(dt=>typeof dt=="number"?{value:dt,count:1}:dt);let xt=l.get(me);xt?xt.push(...le):l.set(me,le)}}await bB()}for(let E of u){let{path:T,method:O,type:v,metric:F,count:q,total:Q,distribution:te,threads:se,...z}=E;se=se.filter(ne=>ne);for(let ne in z){if(typeof E[ne]!="number")continue;let le=0;for(let ie of se){let Re=ie[ne];typeof Re=="number"&&(le+=Re)}E[ne]=le}E.count=se.length,delete E.threads,delete E.byThread}for(let[E,T]of l){let O=c.get(E);T.sort((dt,Cn)=>dt.value>Cn.value?1:-1);let v=O.count-1,F=[],q=0,Q=0,te;for(let dt of AB){let Cn=v*dt;for(;q<Cn;)te=T[Q++],q+=te.count,Q===1&&q--;let nn=T[Q>1?Q-2:0];te||(te=T[0]),F.push(te.value-(te.value-nn.value)*(q-Cn)/te.count)}let[se,z,ne,le,ie,Re,me,Ae,xt]=F;Object.assign(O,{p1:se,p10:z,p25:ne,median:le,p75:ie,p90:Re,p95:me,p99:Ae,p999:xt})}let d;for(let[E,T]of c)T.id=(0,g_.getNextMonotonicTime)(),T.time=f,n.primaryStore.put(T.id,T,{append:!0}).then(O=>{O||n.primaryStore.put(T.id,T)}),d=!0;let h=Date.now(),{idle:_,active:m}=performance.eventLoopUtilization();if(d||m*10>_){let E=(0,g_.getNextMonotonicTime)(),T={id:E,metric:"main-thread-utilization",idle:_-oB,active:m-aB,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(E,T,{append:!0}).then(O=>{O||n.primaryStore.put(E,T)})}oB=_,aB=m;let S=process.resourceUsage(),g=yB(p_,S);g.time=h,g.period=p_.time?h-p_.time:t,g.cpuUtilization=RB(p_,g.period),TE(n,"resource-usage",g),p_=g;let R=Ze();sB(n,R),sB(n,{system:R.system}),iB(n,R),iB(n,{system:R.system})}async function cB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function bb(){return lB||(lB=_t({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function OB(){return uB||(uB=_t({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Ote(){NB=!0;let e=(0,S_.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Rte(gB,e),await cB(bb(),yte),await cB(OB(),bte)},Math.min(e/2,2147483647)).unref()}function wB(e,t){let r=e.report;r.threadId=t?.threadId||Yc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(dB+=n.mean*n.count);r.totalBytesProcessed=dB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(fB.get(t))}),fB.set(t,t.performance.eventLoopUtilization())),r.id=(0,g_.getNextMonotonicTime)(),bb().primaryStore.put(r.id,r),NB||Ote(),Nte&&(IB=Ite(r))}async function Ite(e){if(await IB,!_a){let r=(0,E_.dirname)((0,hB.getLogFilePath)());try{_a=await(0,yb.open)((0,E_.join)(r,"analytics.log"),"r+")}catch{_a=await(0,yb.open)((0,E_.join)(r,"analytics.log"),"w+")}}let t=(await _a.stat()).size;if(t>wte){let r=Buffer.alloc(t);await _a.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await _a.write(r,{position:0}),await _a.truncate(r.length),t=r.length}await _a.write(JSON.stringify(e)+`
20
- `,t)}var Yc,_B,hB,mB,E_,yb,g_,S_,pB,Wc,SE,EB,gE,gB,SB,TB,AB,oB,aB,p_,bB,yte,bte,lB,uB,NB,dB,fB,Nte,IB,_a,wte,Ci=be(()=>{Yc=require("worker_threads"),_B=M(st());Ue();hB=M(X()),mB=M(pi()),E_=require("path"),yb=require("fs/promises"),g_=M(ln()),S_=M(ce());G();Dr();pB=M(require("node:fs")),Wc=(0,mB.loggerWithTag)("analytics");(0,S_.initSync)();SE=new Map,EB=(0,S_.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;a(Ete,"setAnalyticsEnabled");a(gte,"recordExistingAction");a(Ste,"recordNewAction");a(Dt,"recordAction");Ke.recordAnalytics=Dt;a(Yn,"recordActionBinary");gE=0,gB=1e3,SB="analytics-report",TB=[];a(T_,"addAnalyticsListener");AB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Tte,"sendAnalytics");a(TE,"storeMetric");a(RB,"calculateCPUUtilization");a(yB,"diffResourceUsage");a(Ate,"storeTableSizeMetrics");a(sB,"storeDBSizeMetrics");a(iB,"storeVolumeMetrics");a(Rte,"aggregation");oB=0,aB=0,p_={},bB=a(()=>new Promise(setImmediate),"rest");a(cB,"cleanup");yte=36e5,bte=31536e6;a(bb,"getRawAnalyticsTable");a(OB,"getAnalyticsTable");(0,_B.setChildListenerByType)(SB,wB);a(Ote,"startScheduledTasks");dB=0,fB=new Map,Nte=!1;a(wB,"recordAnalytics");wte=1e6;a(Ite,"logAnalytics")});var CB={};Be(CB,{Headers:()=>po,appendHeader:()=>AE,mergeHeaders:()=>Ob});function AE(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 Ob(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new po(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 po,R_=be(()=>{po=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(AE,"appendHeader");a(Ob,"mergeHeaders")});function vB(e){let t={openapi:Cte,info:{title:"HarperDB HTTP REST interface",version:MB.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},f=[];if(o)for(let{type:T,name:O,elements:v,relationship:F,definition:q}of o){if(F)T==="array"?u[O]={type:"array",items:{$ref:ha+v.type}}:u[O]={$ref:ha+T};else{let Q=q??v?.definition;if(Q){if(!t.components.schemas[Q.type]){let te={};Q.properties.forEach(se=>{te[se.name]=new Cb(Nb[se.type],se.type)}),t.components.schemas[Q.type]=new LB(te)}T==="array"?u[O]={type:"array",items:{$ref:ha+Q.type}}:u[O]={$ref:ha+Q.type}}else T==="array"?v.type==="Any"||v.type=="ID"?u[O]={type:"array",items:{format:v.type}}:u[O]={type:"array",items:new Cb(Nb[v.type],v.type)}:T==="Any"||T=="ID"?u[O]={format:T}:u[O]=new Cb(Nb[T],T)}f.push(new Pb(O,"query",u[O]))}let d=Object.keys(u),h=new Pb(c,"path",{format:"ID"});h.required=!0,h.description="primary key of record";let _=new Pb("property","path",{enum:d});_.required=!0,t.components.schemas[i]=new LB(u);let m=l.post!==Resource.prototype.post||l.update,S=typeof l.put=="function",g=typeof l.get=="function",R=typeof l.delete=="function",E="/"+s+"/";m&&(t.paths[E]={},t.paths[E].post=new Pte(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[E]||(t.paths[E]={}),t.paths[E].get=new wb(f,r,{200:new Ib({$ref:ha+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new DB(f,r,"delete all the records that match the provided query",{204:new PB})),E="/"+s+"/{"+c+"}",g&&(t.paths[E]={},t.paths[E].get=new wb([h],r,{200:new Ib({$ref:ha+i})},"retrieve a record by its primary key")),S&&(t.paths[E]||(t.paths[E]={}),t.paths[E].put=new Dte([h],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new DB([h],r,"delete a record with the given primary key",{204:new PB})),g&&_.schema.enum.length>0&&(E="/"+s+"/{"+c+"}.{property}",t.paths[E]={},t.paths[E].get=new wb([h,_],r,{200:new Ib({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Pte(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:ha+e}}}},this.security=t,this.responses={200:{description:Db,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function wb(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Ib(e){this.description=Db,this.content={"application/json":{schema:e}}}function PB(){this.description="successfully processed request, no content returned to client"}function Dte(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:ha+r}}}},this.responses={200:{description:Db}}}function DB(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function LB(e){this.type="object",this.properties=e}function Cb(e,t){this.type=e,this.format=t}function Pb(e,t,r){this.name=e,this.in=t,this.schema=r}var MB,Cte,Nb,ha,Db,UB=be(()=>{MB=M(Et()),Cte="3.0.3",Nb={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},ha="#/components/schemas/",Db="successful operation";a(vB,"generateJsonApi");a(Pte,"Post");a(wb,"Get");a(Ib,"Response200");a(PB,"Response204");a(Dte,"Put");a(DB,"Delete");a(LB,"ResourceSchema");a(Cb,"Type");a(Pb,"Parameter")});var BB={};Be(BB,{Request:()=>y_,createReuseportFd:()=>RE});var xB,y_,Lb,Mb,RE,yE=be(()=>{xB=require("os"),y_=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new Mb(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new Lb(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},Lb=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)}},Mb=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,xB.platform)()!="win32"&&(RE=require("node-unix-socket").createReuseportFd)});var OE={};Be(OE,{parseHeaderValue:()=>Ub,start:()=>vte});async function Mte(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Jm(e);let i=new po;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==HB){let g=bE.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new mc(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=Ub(g);for(let E of R)switch(E.name){case"max-age":e.expiresAt=E.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=Ub(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let d=await It(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=no(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Su.ClientError(g,400)}if(e.authorize=!0,o===HB&&s==="GET"){if(e?.user?.role?.permission?.super_user)return vB(bE);throw new Su.ServerError("Forbidden",403)}switch(s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Su.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Su.ServerError(`Method ${s} is not recognized`,501)}}),h=200,_;if(d==null)h=s==="GET"||s==="HEAD"?404:204,vb.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=Ob(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=wf(d.data,e,d)),d}else if(_=e.lastModified){Lte[0]=_;let g=String.fromCharCode(34,(vr[0]&63)+62,(vr[0]>>6)+(vr[1]<<2&63)+62,(vr[1]>>4)+(vr[2]<<4&63)+62,(vr[2]>>2)+62,(vr[3]&63)+62,(vr[3]>>6)+(vr[4]<<2&63)+62,(vr[4]>>4)+(vr[5]<<4&63)+62,(vr[5]>>2)+62,(vr[6]&63)+62,(vr[6]>>6)+(vr[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(d?.onDone&&d.onDone(),h=304,d=void 0):i.setIfNone("ETag",g),vb.lastModified&&i.setIfNone("Last-Modified",new Date(_).toUTCString())}e.createdResource&&(h=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let m={status:h,headers:i,body:void 0},S=d?.wasLoadedFromSource?.();return S!==void 0&&(m.wasCacheMiss=S,!S&&_&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||_))/1e3))),d!==void 0&&(m.body=wf(d,e,m),s==="HEAD"&&(m.body=void 0)),m}catch(o){o.statusCode?o.statusCode===500?Pi.warn(o):Pi.info(o):Pi.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=wf(o.contentType?o:o.toString(),e,c),c}}function vte(e){vb=e,e.includeExpensiveRecordCountEstimates&&(y_.prototype.includeExpensiveRecordCountEstimates=!0),!kB&&(kB=!0,bE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Mte(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{b_++;let s=new vn;FB||(FB=!0,T_(l=>{b_>0&&l.push({metric:"ws-connections",connections:b_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Pi.warn(l)});let o;t.on("message",a(function(u){o||(o=no(r.requestedContentType??r.headers.asObject["content-type"],!1));let f=o(u);Dt(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(f)},"message"));let c;t.on("close",()=>{b_--,Yn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=bE.getMatch(l,"ws");if(Yn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Dt(m=>({count:m.count,total:b_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new mc(u.relativeURL),d=u.Resource;c=(await It(r,()=>d.connect(f,s,r)))[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;){let m=await oa(_.value,r);t.send(m),Dt(m.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(S=>t._socket.once("drain",S))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Pi.warn(l):Pi.info(l):Pi.error(l),t.close(Ute[l.statusCode]||1011,l.toString())}t.close()},e))}function Ub(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 Pi,Su,vr,Lte,vb,HB,kB,bE,FB,b_,Ute,GB=be(()=>{eo();Ci();Pi=M(X()),Su=M(he());pf();Kl();hc();R_();UB();pf();yE();vr=new Uint8Array(8),Lte=new Float64Array(vr.buffer,0,1),vb={},HB="openapi";a(Mte,"http");b_=0;a(vte,"start");Ute={401:3e3,403:3003};a(Ub,"parseHeaderValue")});var xb=P((twe,$B)=>{var{recordAction:NE,recordActionBinary:qB}=(Ci(),D(A_)),xte=require("fastify-plugin"),Bte=200;$B.exports=xte(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,f,d;l.config?.isOperation?(u=n.body?.operation,f="operation"):(u=l.url,f="fastify-route",d=l.method),NE(o,"duration",u,d,f),qB(s.raw.statusCode<400,"success",u,d,f),qB(1,"response_"+s.raw.statusCode,u,d,f);let h=Bte;i?.pipe?(i.on("data",g=>{h+=g.length}),i.on("end",()=>{NE(performance.now()-c,"transfer",u,d,f),NE(h,"bytes-sent",u,d,f)})):(h+=i?.length||0,NE(h,"bytes-sent",u,d,f));let _=o.toFixed(3),m=s.getHeader("Server-Timing"),S=`db;dur=${_}`;s.header("Server-Timing",m?`${m}, ${S}`:S)}),r()},{name:"hdb-request-time"})});var KB=P((rwe,VB)=>{var Hte=nt(),kte={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};VB.exports=function(e){return Hte.validateObject(e,kte)}});var wE=P((nwe,YB)=>{"use strict";var Fte=(G(),D($)).OPERATIONS_ENUM,Bb=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Fte.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};YB.exports=Bb});var w_={};Be(w_,{createTokens:()=>qte,getJWTRSAKeys:()=>LE,refreshOperationToken:()=>$te,validateOperationToken:()=>Fb,validateRefreshToken:()=>ME});async function LE(){if(IE)return IE;try{let e=O_.default.join(N_.default.getHdbBasePath(),sA),t=await CE.default.readFile(O_.default.join(e,Qd.JWT_PASSPHRASE_NAME),"utf8"),r=await CE.default.readFile(O_.default.join(e,Qd.JWT_PRIVATE_KEY_NAME),"utf8");return IE={publicKey:await CE.default.readFile(O_.default.join(e,Qd.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},IE}catch(e){throw DE.default.error(e),new zs.ClientError(Au.NO_ENCRYPTION_KEYS,Tu.INTERNAL_SERVER_ERROR)}}async function qte(e){let t=(0,Hb.validateBySchema)(e,Di.default.object({username:Di.default.string().optional(),password:Di.default.string().optional(),role:Di.default.string().optional(),expires_in:Di.default.alternatives(Di.default.string(),Di.default.number()).optional()}));if(t)throw new zs.ClientError(t.message);let r;try{let d=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,d=!1),r=await(0,kb.findAndValidateUser)(e.username,e.password,d)}catch(d){throw DE.default.error(d),new zs.ClientError(Au.INVALID_CREDENTIALS,Tu.UNAUTHORIZED)}if(!r)throw new zs.ClientError(Au.INVALID_CREDENTIALS,Tu.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 LE(),c=await Ru.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??JB,algorithm:PE,subject:"operation"}),l=await Ru.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:Gte,algorithm:PE,subject:"refresh"}),u=iy(l,"sha256");if((await(0,WB.update)(new zB.default(zd,Fl.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new zs.ClientError(Au.REFRESH_TOKEN_SAVE_FAILED,Tu.INTERNAL_SERVER_ERROR);return QB.default.signalUserChange(new jB.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function $te(e){let t=(0,Hb.validateBySchema)(e,Di.default.object({refresh_token:Di.default.string().required()}).required());if(t)throw new zs.ClientError(t.message);let{refresh_token:r}=e;await ME(r);let n=await LE(),s=await Ru.default.decode(r);return{operation_token:await Ru.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:JB,algorithm:PE,subject:"operation"})}}async function Fb(e){return XB(e,"operation")}async function ME(e){return XB(e,"refresh")}async function XB(e,t){try{let r=await LE(),n=await Ru.default.verify(e,r.publicKey,{algorithms:PE,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,kb.findAndValidateUser)(n.username,void 0,!1);if(t==="refresh"&&!oy(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw DE.default.warn(r),r?.name==="TokenExpiredError"?new zs.ClientError(Au.TOKEN_EXPIRED,Tu.FORBIDDEN):new zs.ClientError(Au.INVALID_TOKEN,Tu.UNAUTHORIZED)}}var Ru,CE,O_,Di,Hb,zs,DE,kb,WB,zB,QB,jB,N_,Tu,Au,JB,Gte,PE,IE,yu=be(()=>{Ru=M(require("jsonwebtoken")),CE=M(require("fs-extra")),O_=M(require("node:path")),Di=M(require("joi")),Hb=M(nt());G();zs=M(he()),DE=M(X());Gp();kb=M(Gn()),WB=M(gn()),zB=M(wE()),QB=M(_o()),jB=M(Ks()),N_=M(ce()),{HTTP_STATUS_CODES:Tu,AUTHENTICATION_ERROR_MSGS:Au}=zs.hdb_errors;N_.default.initSync();JB=N_.default.get(B.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Gte=N_.default.get(B.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",PE="RS256";a(LE,"getJWTRSAKeys");a(qte,"createTokens");a($te,"refreshOperationToken");a(Fb,"validateOperationToken");a(ME,"validateRefreshToken");a(XB,"validateToken")});var Gb=P((cwe,tH)=>{"use strict";var Vte=KB(),bu=require("passport"),Kte=require("passport-local").Strategy,Yte=require("passport-http").BasicStrategy,Wte=require("util"),zte=Gn(),eH=Wte.callbackify(zte.findAndValidateUser),awe=Dn(),Qte=(G(),D($)),ZB=(yu(),D(w_));bu.use(new Kte(function(e,t,r){eH(e,t,r)}));bu.use(new Yte(function(e,t,r){eH(e,t,r)}));bu.serializeUser(function(e,t){t(null,e)});bu.deserializeUser(function(e,t){t(null,e)});function jte(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":bu.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Qte.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?ZB.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):ZB.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:bu.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(jte,"authorize");function Jte(e,t){let r=Vte(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(Jte,"checkPermissions");tH.exports={authorize:jte,checkPermissions:Jte}});var vE=P((uwe,rH)=>{"use strict";var Xte=Fn();rH.exports={writeTransaction:Zte};function Zte(e,t,r){return Xte.writeTransaction(e,t,r)}a(Zte,"writeTransaction")});var oH=P((_we,iH)=>{"use strict";var ere=Vr(),tre=$s(),nH=X(),rre=gn(),fwe=vE(),nre=require("clone"),$b=require("alasql"),sre=Mp(),sH=require("util"),ire=sH.promisify(tre.getTableSchema),ore=sH.promisify(ere.search),are=(G(),D($)),qb=oe();sre($b);iH.exports={update:lre};var cre="There was a problem performing this update. Please check the logs and try again.";async function lre({statement:e,hdb_user:t}){let r=await ire(e.table.databaseid,e.table.tableid),n=ure(e.columns);qb.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=nre(s),c=qb.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=$b.parse(l).statements[0],f=await ore(u),d=dre(n,f);return fre(o,d,t)}a(lre,"update");function ure(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=$b.compile(`SELECT ${r.expression.toString()} AS [${are.FUNC_VAL}] FROM ?`)}),t}catch(t){throw nH.error(t),new Error(cre)}}a(ure,"createUpdateRecord");function dre(e,t){return qb.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(dre,"buildUpdateRecords");async function fre(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await rre.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){nH.error(`Error delete new_attributes from update response: ${i}`)}return s}a(fre,"updateRecords")});var cH=P((Ewe,aH)=>{var _re=require("alasql"),hre=Vr(),mre=X(),pre=Fn(),Kb=require("util"),Vb=oe(),Ere=(G(),D($)),gre=$s(),mwe=vE(),pwe=gn(),Sre="record",Tre="successfully deleted",Are=Kb.callbackify(Ore),Rre=Kb.promisify(hre.search),yre=Kb.promisify(gre.getTableSchema);aH.exports={convertDelete:Are};function bre(e){return`${e.deleted_hashes.length} ${Sre}${e.deleted_hashes.length===1?"":"s"} ${Tre}`}a(bre,"generateReturnMessage");async function Ore({statement:e,hdb_user:t}){let r=await yre(e.table.databaseid,e.table.tableid);Vb.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Vb.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=_re.parse(o).statements[0],l={operation:Ere.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Rre(c);let u=await pre.deleteRecords(l);return Vb.isEmptyOrZeroLength(u.message)&&(u.message=bre(u)),delete u.txn_time,u}catch(u){throw mre.error(u),u.hdb_code?u.message:u}}a(Ore,"convertDelete")});var _H=P((Swe,fH)=>{"use strict";var Nre=uo(),{hdb_errors:lH}=he(),{getDatabases:uH}=(Ue(),D(at));fH.exports={checkSchemaExists:dH,checkSchemaTableExists:wre,schema_describe:Nre};async function dH(e){if(!uH()[e])return lH.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(dH,"checkSchemaExists");async function wre(e,t){let r=await dH(e);if(r)return r;if(!uH()[e][t])return lH.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wre,"checkSchemaTableExists")});var jb=P((bwe,OH)=>{"use strict";var{decode:Ire}=require("msgpackr"),{isMainThread:Awe,parentPort:Rwe,threadId:ywe}=require("worker_threads"),BE=Er(),Ou=Pt(),zb=(G(),D($)),Wr=X(),Wb=ce(),Cre=(G(),D($)),{onMessageByType:Pre}=st(),EH=lo(),{recordAction:hH,recordActionBinary:Dre}=(Ci(),D(A_)),{publishToStream:Lre}=BE,{ConsumerEvents:mH}=require("nats"),Mre=Vr(),{promisify:vre}=require("util"),{decodeBlobsWithWrites:Ure}=(fs(),D(_p)),gH=vre(setTimeout),HE=1e4,kE,xE,xre,Bre,SH,I_=new Map,Nu=new Map;OH.exports={initialize:TH,ingestConsumer:Qb,setSubscription:Hre,setIgnoreOrigin:Gre,getDatabaseSubscriptions:Fre,updateConsumer:AH};async function TH(){Pre(zb.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await AH(n)}),SH=!0,Wr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await BE.getNATSReferences();kE=e,xE=e.info.server_name,xre=t,Bre=r}a(TH,"initialize");async function AH(e){if(e.status==="start"){let{js:t,jsm:r}=await RH(e.node_domain_name);Qb(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=I_.get(e.stream_name+e.node_domain_name);t&&(Wr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),I_.set(e.stream_name+e.node_domain_name,"close")),Nu.get(e.node_domain_name)==="failed"&&Nu.set(e.node_domain_name,"close")}}a(AH,"updateConsumer");var FE=new Map;function Hre(e,t,r){let n=FE.get(e);n||FE.set(e,n=new Map),n.set(t,r),SH||TH().then(kre)}a(Hre,"setSubscription");async function kre(){let e=await Mre.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Ou.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await RH(r),!n))break;let{schema:o,table:c}=i,l=EH.createNatsTableStreamName(o,c);Qb(l,n,s,r)}}}a(kre,"accessConsumers");async function RH(e){let t,r,n=1;for(;!r;)try{t=await kE.jetstream({domain:e}),r=await kE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Nu.get(e)==="close")break;Nu.set(e,"failed"),n%10===1&&Wr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<HE?n++*100:HE;await gH(i)}return{js:t,jsm:r}}a(RH,"connectToRemoteJS");function Fre(){return FE}a(Fre,"getDatabaseSubscriptions");var yH;function Gre(e){yH=e}a(Gre,"setIgnoreOrigin");var bH=100,pH=new Array(bH),UE=0;async function Qb(e,t,r,n){let{connection:s}=await BE.getNATSReferences();kE=s,xE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,xE),Wr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Nu.get(n)==="close")break;o%10===1&&Wr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Wr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await BE.createConsumer(r,e,xE,new Date(Date.now()).toISOString()));let f=o++*100<HE?o++*100:HE;await gH(f)}let c=!1,l;for(;!c;){if(I_.get(e+n)==="close"||Nu.get(n)==="close"){I_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Wb.get(zb.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),I_.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===mH.ConsumerDeleted&&(await l.close(),c=!0),f.type===mH.HeartbeatsMissed){let d=f.data;Wr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(Wr.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 f of l)await pH[UE],pH[UE]=qre(f).catch(d=>{Wr.error(d)}),++UE>=bH&&(UE=0)}catch(f){f.message==="consumer deleted"?(Wr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Wr.error("Error consuming clustering ingest, restarting consumer",f)}}}a(Qb,"ingestConsumer");async function qre(e){let t;await Ure(()=>{t=Ire(e.data)}),hH(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Wr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Wb.get(zb.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Ou.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Ou.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Ou.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!yH),Dre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Ou.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:f,hash_values:d,__origin:h,expiresAt:_}=t;Wr.trace("processing message:",o,c,u,(f?"records: "+f.map(v=>v?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Wr.trace(`messageProcessor nats msg id: ${e.headers.get(Ou.MSG_HEADERS.NATS_MSG_ID)}`);let m;f||(f=d);let S=new Promise(v=>m=v),{timestamp:g,user:R,node_name:E}=h||{},T=FE.get(c)?.get(u);if(!T)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=m,T.send(t);else if(f.length===1&&!l)T.send({type:Yb(o),value:f[0],id:d?.[0],expiresAt:_,timestamp:g,table:u,onCommit:m,user:R,nodeName:E});else{let v=f.map((F,q)=>({type:Yb(o),value:F,expiresAt:_,id:d?.[q],table:u}));for(;l;)v.push({type:Yb(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;T.send({type:"transaction",writes:v,table:u,timestamp:g,onCommit:m,user:R,nodeName:E})}Wb.get(Cre.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Lre(e.subject.split(".").slice(0,-1).join("."),EH.createNatsTableStreamName(c,u),e.headers,e.data),await S;let O=Date.now()-g;g&&hH(O,"replication-latency",e.subject,o,"ingest")}catch(o){Wr.error(o)}e.ack()}a(qre,"messageProcessor");function Yb(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Yb,"convertOperation")});var Er=P((Dwe,qH)=>{"use strict";var Or=ce();Or.initSync();var $re=require("fs-extra"),Vre=require("semver"),D_=require("path"),{monotonicFactory:Kre}=require("ulidx"),wH=Kre(),Yre=require("util"),IH=require("child_process"),Wre=Yre.promisify(IH.exec),zre=IH.spawn,Ur=Pt(),Qe=(G(),D($)),{packageJson:Qre,PACKAGE_ROOT:jre}=Et(),GE=oe(),Qs=X(),qE=lo(),Jre=vE(),C_=wt(),{broadcast:Xre,onMessageByType:Zre,getWorkerIndex:ene}=st(),{isMainThread:CH}=require("worker_threads"),{Encoder:tne,decode:eO}=require("msgpackr"),PH=new tne,{isEmpty:Jc}=GE,DH=Gn(),Nwe=48*36e11;CH&&Zre(Qe.ITC_EVENT_TYPES.RESTART,()=>{zr=void 0,jc=void 0});var{connect:rne,StorageType:nne,RetentionPolicy:sne,AckPolicy:tO,DeliverPolicy:rO,DiscardPolicy:ine,NatsConnection:wwe,JetStreamManager:Iwe,JetStreamClient:Cwe,StringCodec:Pwe,JSONCodec:one,createInbox:nO,headers:ane,ErrorCode:NH}=require("nats"),{recordAction:cne}=(Ci(),D(A_)),{encodeBlobsAsBuffers:lne}=(fs(),D(_p)),LH=one(),une="clustering",dne=Qre.engines[Ur.NATS_SERVER_NAME],fne=D_.join(jre,"dependencies"),Zb=D_.join(fne,`${process.platform}-${process.arch}`,Ur.NATS_BINARY_NAME),Jb,Xb,P_,zc,Qc;qH.exports={runCommand:MH,checkNATSServerInstalled:_ne,createConnection:sO,getConnection:L_,getJetStreamManager:M_,getJetStream:UH,getNATSReferences:Li,getServerList:mne,createLocalStream:iO,listStreams:xH,deleteLocalStream:pne,getServerConfig:wu,listRemoteStreams:Ene,viewStream:gne,viewStreamIterator:Sne,publishToStream:Tne,request:yne,reloadNATS:oO,reloadNATSHub:bne,reloadNATSLeaf:One,extractServerName:Rne,requestErrorHandler:Nne,createLocalTableStream:FH,createTableStreams:Cne,purgeTableStream:GH,purgeSchemaTableStreams:Pne,getStreamInfo:Dne,updateLocalStreams:Mne,closeConnection:hne,getJsmServerName:$E,addNatsMsgHeader:BH,clearClientCache:vH,updateRemoteConsumer:wne,createConsumer:HH,updateConsumerIterator:Ine};async function MH(e,t=void 0){let{stdout:r,stderr:n}=await Wre(e,{cwd:t});if(n)throw new Error(n.replace(`
19
+ `},"serialize"),compressible:!1,q:.8});$r.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()}});DL={type:"application/json",serializeStream:Sf,serialize:Of,deserialize:t3,q:.5};$r.set("*/*",DL);$r.set("",DL);a(t3,"tryJSONParse");a(wf,"registerContentHandlers");r3=require("fastify-plugin"),n3=r3(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=hm(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 f=l.getColumns;l=l.mapError(d=>(d.toJSON=()=>({error:d.name,message:d.message,...d.partialObject}),d)),l.getColumns=f}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((f,d)=>{s.header(f,d)},"set")}})})}),r()},{name:"content-type-negotiation"});a(hm,"findBestSerializer");NL=XA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);a(If,"serialize");a(oa,"serializeMessage");a(QA,"asyncSerialization");a(JA,"hasAsyncSerialization");a(s3,"streamToBuffer");i3=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(o3,"isBufferEncoding");a(a3,"parseContentType");a(no,"getDeserializer");a(c3,"deserializerUnknownType");a(l3,"transformIterable");a(_m,"toCsvStream")});var nR={};Be(nR,{start:()=>g3});function u3(e){if(e.kind!==ve.Kind.OPERATION_DEFINITION&&e.kind!==ve.Kind.FRAGMENT_DEFINITION)throw new yr(`Unexpected non-executable definition type ${e.kind}.`)}function ML(e){if(typeof e!="object"||e===null)throw new Ti("Request body must be an object.");if(!("query"in e))throw new Ti("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ti("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ti("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ti("Request body `operationName` field must be a string.")}function rR(e){return parseInt(e.value,10)}function UL(e){return parseFloat(e.value)}function xL(e,t,r){let n=r.get(e.name.value);return BL(n)?HL(n,t):{attribute:t,value:n}}function BL(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function HL(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],BL(n)?HL(n,t):{attribute:t,value:n}))}function d3(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case ve.Kind.NULL:return{attribute:t,value:null};case ve.Kind.INT:return{attribute:t,value:rR(e.value)};case ve.Kind.FLOAT:return{attribute:t,value:UL(e.value)};case ve.Kind.BOOLEAN:case ve.Kind.STRING:return{attribute:t,value:e.value.value};case ve.Kind.VARIABLE:return xL(e.value,t,r);case ve.Kind.OBJECT:return kL(e.value,t,r);case ve.Kind.LIST:case ve.Kind.ENUM:default:throw new yr(`Value type, ${e.value.kind}, is not supported.`)}}function kL(e,t,r){return e.fields.flatMap(n=>d3(n,t,r))}function f3(e,t){switch(e.value.kind){case ve.Kind.NULL:return{attribute:e.name.value,value:null};case ve.Kind.INT:return{attribute:e.name.value,value:rR(e.value)};case ve.Kind.FLOAT:return{attribute:e.name.value,value:UL(e.value)};case ve.Kind.BOOLEAN:case ve.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case ve.Kind.VARIABLE:return xL(e.value,e.name.value,t);case ve.Kind.OBJECT:return kL(e.value,[e.name.value],t);case ve.Kind.LIST:case ve.Kind.ENUM:default:throw new yr(`Argument type, ${e.value.kind}, is not supported.`)}}function _3(e,t){return e.flatMap(r=>f3(r,t))}function pm(e,t){return e.selections.flatMap(r=>{switch(r.kind){case ve.Kind.FIELD:return r;case ve.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new yr(`Fragment \`${n}\` not found.`);return pm(s.selectionSet,t)}case ve.Kind.INLINE_FRAGMENT:return pm(r.selectionSet,t)}})}function FL(e,t){return pm(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:FL(r.selectionSet,t)}:r.name.value)}async function h3(e,t,r,n){let s=us.getMatch(e.name.value,"graphql");if(s===void 0)throw new yr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:FL(e.selectionSet,r),conditions:_3(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 GL(e){switch(e.kind){case ve.Kind.NULL:return null;case ve.Kind.INT:return rR(e);case ve.Kind.FLOAT:return parseFloat(e.value);case ve.Kind.STRING:case ve.Kind.BOOLEAN:return e.value;case ve.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:GL(r.value),...t}),{});case ve.Kind.LIST:case ve.Kind.ENUM:default:throw new yr(`Value type, ${e.kind}, is not supported.`)}}function p3(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=GL(n.defaultValue)),n.type.kind===ve.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new yr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function m3(e,t,r,n){if(e.operation===ve.OperationTypeNode.SUBSCRIPTION)throw new yr("Subscriptions are not supported.");if(e.operation===ve.OperationTypeNode.MUTATION)throw new yr("Mutations are not supported yet.");let s=p3(e.variableDefinitions,t),i=await Promise.all(pm(e.selectionSet,r).map(c=>h3(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function vL({query:e,variables:t={},operationName:r},n){let s=ve.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(u3(u),u.kind===ve.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new yr("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new yr(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new yr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new yr(`Operation \`${r}\` not found.`);let l=await m3(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function E3(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 ML(r),vL(r,e)}case"POST":{let r=await no(e.headers.get("content-type"),!0)(e._nodeRequest);return ML(r),vL(r,e)}default:throw new Ti("Method Not Allowed",405,{Allow:"GET, POST"})}}function g3(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await E3(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ti)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof ve.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof yr)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 Ti)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof ve.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof yr)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 ve,yr,Ti,qL=be(()=>{ve=M(require("graphql"));eo();Jl();a(u3,"assertExecutableDefinitionNode");a(ML,"assertRequestParams");a(rR,"processIntValueNode");a(UL,"processFloatValueNode");a(xL,"processVariableNode");a(BL,"isObject");a(HL,"transformObjectIntoQueryCondition");a(d3,"processObjectFieldNode");a(kL,"processObjectValueNode");a(f3,"processArgumentNode");a(_3,"buildConditionsQuery");a(pm,"fillInFragments");a(FL,"buildSelectQuery");a(h3,"processFieldNode");a(GL,"processConstValueNode");a(p3,"resolveVariables");a(m3,"executeOperation");a(vL,"resolver");yr=class extends Error{static{a(this,"GraphQLQueryingError")}},Ti=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(E3,"graphqlQueryingHandler");a(g3,"start")});var Ri=P((pRe,KL)=>{"use strict";var VL=oe(),$L=(G(),D($)),eu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ai=require("joi"),aa={schema_format:{pattern:eu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},S3=Ai.alternatives(Ai.string().min(1).max(aa.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+aa.schema_format.message}),Ai.number(),Ai.array()).required(),T3=Ai.alternatives(Ai.string().min(1).max(aa.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+aa.schema_format.message}),Ai.number()),A3=Ai.alternatives(Ai.string().min(1).max(aa.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+aa.schema_format.message}),Ai.number()).required();function R3(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>aa.schema_length.maximum?`'${e}' maximum of 250 characters`:eu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(R3,"checkValidTable");function y3(e,t){return VL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(y3,"validateSchemaExists");function b3(e,t){let r=t.state.ancestors[0].schema;return VL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(b3,"validateTableExists");function O3(e,t){return e.toLowerCase()===$L.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${$L.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(O3,"validateSchemaName");KL.exports={common_validators:aa,schema_regex:eu,hdb_schema_table:S3,validateSchemaExists:y3,validateTableExists:b3,validateSchemaName:O3,checkValidTable:R3,hdb_database:T3,hdb_table:A3}});var iR=P((ERe,WL)=>{var{hdb_table:N3,hdb_database:YL}=Ri(),w3=nt(),sR=require("joi"),I3={undefined:"undefined",null:"null"},C3=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||I3[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),P3=sR.object({database:YL,schema:YL,table:N3,records:sR.array().items(sR.object().custom(C3)).required()});WL.exports=function(e){return w3.validateBySchema(e,P3)}});var jL=P((SRe,zL)=>{"use strict";var oR=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")}};zL.exports=oR});var JL=P((ARe,QL)=>{"use strict";var aR=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};QL.exports=aR});var rM={};Be(rM,{HAS_EXPIRATION:()=>gm,HAS_RESIDENCY_ID:()=>hR,HAS_STRUCTURE_UPDATE:()=>Tm,LAST_TIMESTAMP_PLACEHOLDER:()=>Lf,LOCAL_TIMESTAMP:()=>D3,METADATA:()=>yc,NEW_TIMESTAMP_PLACEHOLDER:()=>ZL,NO_TIMESTAMP:()=>cR,PENDING_LOCAL_TIME:()=>pR,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>_R,RecordEncoder:()=>fR,TIMESTAMP_ASSIGN_LAST:()=>M3,TIMESTAMP_ASSIGN_NEW:()=>eM,TIMESTAMP_ASSIGN_PREVIOUS:()=>tM,TIMESTAMP_PLACEHOLDER:()=>mm,TIMESTAMP_RECORD_PREVIOUS:()=>lR,handleLocalTimeForGets:()=>Am,recordUpdater:()=>mR,removeEntry:()=>Oc});function U3(){return Df[0]=Df[0]^64,L3.getFloat64(0)}function Am(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++;let l=r.call(this,o,c),u=l?.value,f=u?.[yc];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l&&(l.key=o),l};let n=e.get;e.get=function(o,c){let l=n.call(this,o,c);return l?.[yc]>=0?l.value: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=>{let u=l.value,f=u[yc];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),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,Rc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Rc.length;u++){let f=Rc[u].deref();(!f||f.isDone||f.isCommitted)&&Rc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function mR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?tu=i?.localTime?lR|tM:cR:tu=l?i?.localTime?lR|16384:eM|16384:cR;let _=u?.expiresAt;if(_>=0&&(c|=gm),Pf=c,uR=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:o,instructedWrite:tu>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(dR=E,Pf|=hR,g|=Nc),R!==E&&(g|=wc,R||(R=0)),c&gm&&(g|=vf),u?.originatingOperation&&(g|=Mf),d&&(p.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&pn&&(r.getBinaryFast(i.localTime)||ia(i.value));let T;if(s!==void 0&&(T=um(()=>e.put(n,s,p),n,e.rootStore),gc&&(g|=pn)),l){let O=u?.user?.username;if(h&&(um(()=>e.encoder.encode(h),n,e.rootStore),gc&&(g|=pn)),e.encoder.hasStructureUpdate&&(g|=Tm,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let v=i?.localTime,F=r.get(v);if(F){let q=Ct(F).previousLocalTime;return T=r.put(v,bc(o,t,n,q,u?.nodeId??server.replication.getThisNodeId(r)??0,O,f,Cf,g,E,R,_),{ifVersion:S}),T}}T=r.put(s===void 0?ZL:Lf,bc(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,O,f,Cf,g,E,R,_,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return T}catch(R){throw R.message+=" id: "+n+" options: "+p,R}}}function Oc(e,t,r){if(t)return t.value&&t.metadataFlags&pn&&!e.auditStore.getBinaryFast(t.localTime)&&ia(t.value),e.remove(t.key,r)}var XL,Em,mm,Lf,_R,ZL,D3,yc,Df,L3,cR,eM,M3,tM,lR,gm,hR,pR,Tm,v3,Cf,tu,Pf,uR,dR,fR,Rc,ru=be(()=>{XL=require("msgpackr");so();Em=M(X());fs();fs();mm=new Uint8Array([1,1,1,1,4,64,0,0]),Lf=new Uint8Array([1,1,1,1,1,0,0,0]),_R=new Uint8Array([1,1,1,1,3,64,0,0]),ZL=new Uint8Array([1,1,1,1,0,64,0,0]),D3=Symbol("local-timestamp"),yc=Symbol("metadata"),Df=new Uint8Array(8),L3=new DataView(Df.buffer,0,8),cR=0,eM=0,M3=1,tM=3,lR=4,gm=16,hR=32,pR=1,Tm=256,tu=0,Pf=-1,uR=-1,dR=0,fR=class extends XL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(tu||Pf>=0){let o=0,c=tu;c&&(o+=8,tu=0);let l=Pf,u=uR,f=dR;l>=0&&(o+=4,Pf=-1,u>=0&&(o+=8,uR=-1),f&&(o+=4,dR=0));let d=v3=r.call(this,s,i|2048|o);Cf=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(mm[4]=c,mm[5]=c>>8,d.set(mm,h),h+=8),gc&&(l|=pn),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|Sm<<24),h+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(h,u),h+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,f)),d}else return Cf=r.call(this,s,i),Cf};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Df,0,c),c+=8;else for(let h=0;h<8;h++)Df[h]=t[c++];l=U3(),i=t[c]}let u,f;i<32&&(i===Sm?(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&gm&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&hR&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=Sc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[yc]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:Sc(()=>super.decode(t,r),this.rootStore)}catch(c){return Em.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(U3,"getTimestamp");a(Am,"handleLocalTimeForGets");Rc=[];setInterval(()=>{for(let e=0;e<Rc.length;e++){let t=Rc[e].deref();!t||t.isDone||t.isCommitted?Rc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Em.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Em.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(mR,"recordUpdater");a(Oc,"removeEntry")});var Uf=P((wRe,sM)=>{"use strict";var nM=ce(),x3=(G(),D($)),{RecordEncoder:B3}=(ru(),D(rM));nM.initSync();var H3=nM.get(x3.CONFIG_PARAMS.STORAGE_CACHING)!==!1,ER=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=H3&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:B3})}};sM.exports=ER});var xf=P((CRe,iM)=>{"use strict";var Bn=ce(),_s=(G(),D($));Bn.initSync();var Rm=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=Bn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Bn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Bn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Bn.get(_s.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Bn.get(_s.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Bn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Bn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Bn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Bn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Bn.get(_s.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Bn.get(_s.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Bn.get(_s.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};iM.exports=Rm;Rm.MAX_DBS=1e4});var ht=P((DRe,pM)=>{"use strict";var SR=require("lmdb"),Fs=require("fs-extra"),Hn=require("path"),ym=ln(),cM=X(),mn=Dn().LMDB_ERRORS_ENUM,bm=JL(),TR=Uf(),lM=xf(),ca=Ft(),oM=(G(),D($)),{table:k3,resetDatabases:F3}=(Ue(),D(at)),aM=ce(),Gs=ca.INTERNAL_DBIS_NAME,uM=ca.DBI_DEFINITION_NAME,G3="data.mdb",q3="lock.mdb",Bf=".mdb",$3="-lock",gR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=hs(t,r),this.key_type=this.dbi[ca.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ca.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new SR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Om(e,t){if(e===void 0)throw new Error(mn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(mn.ENV_NAME_REQUIRED)}a(Om,"pathEnvNameValidation");async function AR(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(mn.INVALID_BASE_PATH):n}try{let n=Hn.join(e,t+Bf);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Hn.join(e,t,G3),Fs.constants.R_OK|Fs.constants.F_OK),Hn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(mn.INVALID_ENVIRONMENT)}else throw new Error(mn.INVALID_ENVIRONMENT);throw n}}a(AR,"validateEnvironmentPath");function Nm(e,t){if(ym.validateEnv(e),t===void 0)throw new Error(mn.DBI_NAME_REQUIRED)}a(Nm,"validateEnvDBIName");async function V3(e,t,r=!1,n=!1){Om(e,t);let s=Hn.basename(e);t=t.toString();let i=aM.get(oM.CONFIG_PARAMS.DATABASES);i||aM.setProperty(oM.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await AR(e,t,n),dM(e,t,r)}catch(o){if(o.message===mn.INVALID_ENVIRONMENT){let c=Hn.join(e,t);await Fs.mkdirp(n?c:e);let l=new lM(n?c:c+Bf,!1),u=SR.open(l);u.dbis=Object.create(null);let f=new TR(!1);u.openDB(Gs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=RR(e,t,r);return u[ca.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(V3,"createEnvironment");async function K3(e,t,r,n=!0){Om(e,t),t=t.toString();let s=Hn.join(e,t);return k3({table:t,database:Hn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(K3,"copyEnvironment");async function dM(e,t,r=!1){Om(e,t),t=t.toString();let n=RR(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 AR(e,t),i=Hn.join(e,t+Bf),o=s!=i,c=new lM(s,o),l=SR.open(c);l.dbis=Object.create(null);let u=_M(l);for(let f=0;f<u.length;f++)hs(l,u[f]);return l[ca.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(dM,"openEnvironment");async function Y3(e,t,r=!1){Om(e,t),t=t.toString();let n=Hn.join(e,t+Bf),s=await AR(e,t);if(global.lmdb_map!==void 0){let i=RR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await fM(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+$3:Hn.join(Hn.dirname(s),q3))}a(Y3,"deleteEnvironment");async function fM(e){ym.validateEnv(e);let t=e[ca.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(fM,"closeEnvironment");function RR(e,t,r=!1){let s=`${Hn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(RR,"getCachedEnvironmentName");function W3(e){ym.validateEnv(e);let t=Object.create(null),r=hs(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new bm,s)}catch{cM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(W3,"listDBIDefinitions");function _M(e){ym.validateEnv(e);let t=[],r=hs(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(_M,"listDBIs");function z3(e,t){let n=hs(e,Gs).getEntry(t),s=new bm;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{cM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(z3,"getDBIDefinition");function hM(e,t,r,n=!r){if(Nm(e,t),t=t.toString(),t===Gs)throw new Error(mn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return hs(e,t)}catch(s){if(s.message===mn.DBI_DOES_NOT_EXIST){let i=new TR(r,n===!0),o=e.openDB(t,i),c=new bm(r===!0,n);return o[uM]=c,hs(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(hM,"createDBI");function hs(e,t){if(Nm(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=z3(e,t):r=new bm,r===void 0)throw new Error(mn.DBI_DOES_NOT_EXIST);let n;try{let s=new TR(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(mn.DBI_DOES_NOT_EXIST):s}return n[uM]=r,e.dbis[t]=n,n}a(hs,"openDBI");function j3(e,t){Nm(e,t),t=t.toString();let r=hs(e,t),n=r.getStats();return r[ca.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(j3,"statDBI");async function Q3(e,t){try{let r=Hn.join(e,t+Bf);return(await Fs.stat(r)).size}catch{throw new Error(mn.INVALID_ENVIRONMENT)}}a(Q3,"environmentDataSize");function J3(e,t){if(Nm(e,t),t=t.toString(),t===Gs)throw new Error(mn.CANNOT_DROP_INTERNAL_DBIS_NAME);hs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],hs(e,Gs).removeSync(t)}a(J3,"dropDBI");function X3(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{hs(e,i)}catch(o){if(o.message===mn.DBI_DOES_NOT_EXIST)hM(e,i,i!==t,i===t),n=!0;else throw o}}n&&F3()}a(X3,"initializeDBIs");pM.exports={openDBI:hs,openEnvironment:dM,createEnvironment:V3,listDBIs:_M,listDBIDefinitions:W3,createDBI:hM,dropDBI:J3,statDBI:j3,deleteEnvironment:Y3,initializeDBIs:X3,TransactionCursor:gR,environmentDataSize:Q3,copyEnvironment:K3,closeEnvironment:fM}});var EM=P((MRe,mM)=>{"use strict";var yR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};mM.exports=yR});var SM=P((URe,gM)=>{"use strict";var bR=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}};gM.exports=bR});var AM=P((BRe,TM)=>{"use strict";var OR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};TM.exports=OR});var Cc=P((qRe,bM)=>{"use strict";var Z3=ht(),eX=EM(),tX=SM(),rX=AM(),yi=ln(),Hf=Dn().LMDB_ERRORS_ENUM,nX=Ft(),io=(G(),D($)),sX=oe(),iX=require("uuid"),kRe=require("lmdb"),{handleHDBError:oX,hdb_errors:aX}=he(),{OVERFLOW_MARKER:FRe,MAX_SEARCH_KEY_LENGTH:GRe}=nX,RM=ce();RM.initSync();var wm=RM.get(io.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),NR=io.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ic=io.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function cX(e,t,r,n,s=yi.getNextMonotonicTime()){PR(e,t,r,n),wR(e,t,r);let i=new eX,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];yM(u,!0,s);let f=lX(e,t,r,u),d=u[t];o.push(f),c.push(d)}return IR(o,c,n,i,s)}a(cX,"insertRecords");function lX(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 f=c([[{}]]);Array.isArray(f)&&(c=f[0][io.FUNC_VAL],n[o]=c)}let l=yi.getIndexedValues(c),u=e.dbis[o];if(l){wm&&u.prefetch(l.map(f=>({key:f,value:s})),Im);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}wm&&e.dbis[t].prefetch([s],Im),e.dbis[t].put(s,n,n[Ic])})}a(lX,"insertRecord");function uX(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(uX,"removeSkippedRecords");function yM(e,t,r){let n=r>0;(n||!Number.isInteger(e[Ic]))&&(e[Ic]=r||(r=yi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[NR]))&&(e[NR]=r||yi.getNextMonotonicTime()):delete e[NR]}a(yM,"setTimestamps");function wR(e,t,r){r.indexOf(io.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(io.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(io.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(io.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Z3.initializeDBIs(e,t,r)}a(wR,"initializeTransaction");async function dX(e,t,r,n,s=yi.getNextMonotonicTime()){PR(e,t,r,n),wR(e,t,r);let i=new tX,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=CR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return IR(c,l,n,i,s,o)}a(dX,"updateRecords");async function fX(e,t,r,n,s=yi.getNextMonotonicTime()){try{PR(e,t,r,n)}catch(l){throw oX(l,l.message,aX.HTTP_STATUS_CODES.BAD_REQUEST)}wR(e,t,r);let i=new rX,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;sX.isEmpty(u[t])?(f=iX.v4(),u[t]=f):f=u[t];let d=CR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return IR(o,c,n,i,s)}a(fX,"upsertRecords");async function IR(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||yi.getNextMonotonicTime(),uX(r,i),n}a(IR,"finalizeWrite");function CR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(yM(r,!f,o),Number.isInteger(r[Ic])&&u[Ic]>r[Ic])return!1;f&&s.original_records.push(u);let d,h=a(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let S=r[p],g=e.dbis[p];if(g===void 0)continue;let R=u[p];if(typeof S=="function"){let T=S([[u]]);Array.isArray(T)&&(S=T[0][io.FUNC_VAL],r[p]=S)}if(S===R)continue;let E=yi.getIndexedValues(R);if(E){wm&&g.prefetch(E.map(T=>({key:T,value:n})),Im);for(let T=0,O=E.length;T<O;T++)g.remove(E[T],n)}if(E=yi.getIndexedValues(S),E){wm&&g.prefetch(E.map(T=>({key:T,value:n})),Im);for(let T=0,O=E.length;T<O;T++)g.put(E[T],n)}}let _={...u,...r};c.put(n,_,_[Ic])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:CR(e,t,r,n,s,i,o))}a(CR,"updateUpsertRecord");function _X(e,t,r){if(yi.validateEnv(e),t===void 0)throw new Error(Hf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Hf.WRITE_ATTRIBUTES_REQUIRED):new Error(Hf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(_X,"validateBasic");function PR(e,t,r,n){if(_X(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Hf.RECORDS_REQUIRED):new Error(Hf.RECORDS_MUST_BE_ARRAY)}a(PR,"validateWrite");function Im(){}a(Im,"noop");bM.exports={insertRecords:cX,updateRecords:dX,upsertRecords:fX}});var oo=P((VRe,hX)=>{hX.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var NM=P((KRe,OM)=>{"use strict";var pX=require("uuid"),DR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||pX.v4(),this.schema_table=`${this.schema}.${this.table}`}};OM.exports=DR});var Cm=P((WRe,wM)=>{"use strict";var mX=NM(),LR=class extends mX{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}};wM.exports=LR});var CM=P((jRe,IM)=>{"use strict";IM.exports=gX;var EX="inserted";function gX(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===EX?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(gX,"returnObject")});var Pm=P((XRe,DM)=>{"use strict";var SX=(G(),D($)),MR=ht(),TX=Cc(),{getSystemSchemaPath:AX,getSchemaPath:RX}=gt(),JRe=oo(),{validateBySchema:yX}=nt(),kf=require("joi"),bX=Cm(),OX=CM(),{handleHDBError:NX,hdb_errors:wX,ClientError:IX}=he(),PM=oe(),{HTTP_STATUS_CODES:CX}=wX,PX="inserted";DM.exports=DX;async function DX(e){let t=yX(e,kf.object({database:kf.string(),schema:kf.string(),table:kf.string().required(),attribute:kf.string().required()}));if(t)throw new IX(t.message);let r=!e.skip_table_check&&PM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw NX(new Error,r,CX.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=PM.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 bX(e.schema,e.table,e.attribute,e.id);try{let i=await MR.openEnvironment(RX(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);MR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await MR.openEnvironment(AX(),SX.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await TX.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return OX(PX,c,{records:[s]},l)}catch(i){throw i}}a(DX,"lmdbCreateAttribute")});var Ff=P((tye,MM)=>{"use strict";var ao=oe(),LM=X(),eye=iR(),{getDatabases:LX}=(Ue(),D(at)),{ClientError:Pc}=he();MM.exports=MX;function MX(e){if(ao.isEmpty(e))throw new Pc("invalid update parameters defined.");if(ao.isEmptyOrZeroLength(e.schema))throw new Pc("invalid schema specified.");if(ao.isEmptyOrZeroLength(e.table))throw new Pc("invalid table specified.");if(!Array.isArray(e.records))throw new Pc("records must be an array");let t=LX()[e.schema]?.[e.table];if(ao.isEmpty(t))throw new Pc(`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&&ao.isEmptyOrZeroLength(o[r]))throw LM.error("a valid hash attribute must be provided with update record:",o),new Pc("a valid hash attribute must be provided with update record, check log for more info");if(!ao.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw LM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Pc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ao.isEmpty(o[r])&&o[r]!==""&&n.has(ao.autoCast(o[r]))&&(o.skip=!0),n.add(ao.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(MX,"insertUpdateValidate")});var UM=P((nye,vM)=>{"use strict";var vR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};vM.exports=vR});var HM=P((iye,BM)=>{"use strict";var UR=ht(),vX=X(),xM=Dn().LMDB_ERRORS_ENUM;BM.exports=UX;async function UX(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 UR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==xM.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await UR.closeEnvironment(global.lmdb_map[n]),await UR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==xM.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){vX.error(t)}}a(UX,"cleanLMDBMap")});var JM=P((cye,QM)=>{"use strict";var xR=require("recursive-iterator"),xX=require("alasql"),BR=require("clone"),kM=oe(),{handleHDBError:FM,hdb_errors:BX}=he(),{HDB_ERROR_MSGS:GM,HTTP_STATUS_CODES:qM}=BX,{getDatabases:HX}=(Ue(),D(at)),kX=["DISTINCT_ARRAY"],$M=Symbol("validateTables"),HR=Symbol("validateTable"),aye=Symbol("getAllColumns"),VM=Symbol("validateAllColumns"),Dm=Symbol("findColumn"),KM=Symbol("validateOrderBy"),Gf=Symbol("validateSegment"),kR=Symbol("validateColumn"),YM=Symbol("setColumnsForTable"),WM=Symbol("checkColumnsForAsterisk"),zM=Symbol("validateGroupBy"),jM=Symbol("hasColumns"),FR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$M](),this[WM](),this[VM]()}[$M](){if(this[jM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[HR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[HR](t.table)})}}[jM](){let t=!1,r=new xR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[HR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=HX();if(!r[t.databaseid])throw FM(new Error,GM.SCHEMA_NOT_FOUND(t.databaseid),qM.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw FM(new Error,GM.TABLE_NOT_FOUND(t.databaseid,t.tableid),qM.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=BR(s);i.table=BR(t),this.attributes.push(i)})}[Dm](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)}[WM](){let t=new xR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[YM](r.tableid)}[YM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new xX.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[VM](){this[Gf](this.statement.columns,!1),this[Gf](this.statement.joins,!1),this[Gf](this.statement.where,!1),this[zM](this.statement.group,!1),this[Gf](this.statement.order,!0)}[Gf](t,r){if(!t)return;let n=new xR(t),s=[];for(let{node:i,path:o}of n)!kM.isEmpty(i)&&!kM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[KM](i):s.push(this[kR](i)));return s}[zM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&kX.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=BR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Dm](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[Dm](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[KM](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[kR](t)}[kR](t){let r=this[Dm](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]}};QM.exports=FR});var tv=P((uye,ev)=>{"use strict";var XM=require("lodash"),qf=require("mathjs"),FX=require("jsonata"),ZM=oe();ev.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?XM.uniqWith(e,XM.isEqual):e,"distinct_array"),searchJSON:GX,mad:$f.bind(null,qf.mad),mean:$f.bind(null,qf.mean),mode:$f.bind(null,qf.mode),prod:$f.bind(null,qf.prod),median:$f.bind(null,qf.median)};function $f(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($f,"aggregateFunction");function GX(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(ZM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ZM.isEmpty(this.__ala__.res[r])){let n=FX(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(GX,"searchJSON")});var nv=P((fye,rv)=>{"use strict";var rr=require("moment"),GR="YYYY-MM-DDTHH:mm:ss.SSSZZ";rr.suppressDeprecationWarnings=!0;rv.exports={current_date:a(()=>rr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>rr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return rr(e).utc().format("YYYY");case"month":return rr(e).utc().format("MM");case"day":return rr(e).utc().format("DD");case"hour":return rr(e).utc().format("HH");case"minute":return rr(e).utc().format("mm");case"second":return rr(e).utc().format("ss");case"millisecond":return rr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>rr(e).utc().format(GR),"date"),date_format:a((e,t)=>rr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>rr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>rr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=rr(e).utc(),s=rr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>rr().utc().valueOf(),"now"),get_server_time:a(()=>rr().format(GR),"get_server_time"),offset_utc:a((e,t)=>rr(e).utc().utcOffset(t).format(GR),"offset_utc")}});var av=P((hye,ov)=>{"use strict";var qX=require("@turf/area"),$X=require("@turf/length"),VX=require("@turf/circle"),KX=require("@turf/difference"),YX=require("@turf/distance"),WX=require("@turf/boolean-contains"),zX=require("@turf/boolean-equal"),jX=require("@turf/boolean-disjoint"),QX=require("@turf/helpers"),sv=(G(),D($)),$e=oe(),co=X();ov.exports={geoArea:JX,geoLength:XX,geoCircle:ZX,geoDifference:e6,geoDistance:iv,geoNear:t6,geoContains:r6,geoEqual:n6,geoCrosses:s6,geoConvert:i6};function JX(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return qX.default(e)}catch(t){return co.trace(t,e),NaN}}a(JX,"geoArea");function XX(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return $X.default(e,{units:t||"kilometers"})}catch(r){return co.trace(r,e),NaN}}a(XX,"geoLength");function ZX(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return VX.default(e,t,{units:r||"kilometers"})}catch(n){return co.trace(n,e,t),NaN}}a(ZX,"geoCircle");function e6(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return KX(e,t)}catch(r){return co.trace(r,e,t),NaN}}a(e6,"geoDifference");function iv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return YX.default(e,t,{units:r||"kilometers"})}catch(n){return co.trace(n,e,t),NaN}}a(iv,"geoDistance");function t6(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return iv(e,t,n)<=r}catch(s){return co.trace(s,e,t),!1}}a(t6,"geoNear");function r6(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return WX.default(e,t)}catch(r){return co.trace(r,e,t),!1}}a(r6,"geoContains");function n6(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return zX.default(e,t)}catch(r){return co.trace(r,e,t),!1}}a(n6,"geoEqual");function s6(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!jX.default(e,t)}catch(r){return co.trace(r,e,t),!1}}a(s6,"geoCrosses");function i6(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(sv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(sv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),QX[t](e,r)}a(i6,"geoConvert")});var Lm=P((mye,cv)=>{var Dc=tv(),kn=nv(),bi=av();cv.exports=e=>{e.aggr.mad=e.aggr.MAD=Dc.mad,e.aggr.mean=e.aggr.MEAN=Dc.mean,e.aggr.mode=e.aggr.MODE=Dc.mode,e.aggr.prod=e.aggr.PROD=Dc.prod,e.aggr.median=e.aggr.MEDIAN=Dc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Dc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Dc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=kn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=kn.current_time,e.fn.extract=e.fn.EXTRACT=kn.extract,e.fn.date=e.fn.DATE=kn.date,e.fn.date_format=e.fn.DATE_FORMAT=kn.date_format,e.fn.date_add=e.fn.DATE_ADD=kn.date_add,e.fn.date_sub=e.fn.DATE_SUB=kn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=kn.date_diff,e.fn.now=e.fn.NOW=kn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=kn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=kn.get_server_time,e.fn.getdate=e.fn.GETDATE=kn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=kn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=bi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=bi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=bi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=bi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=bi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=bi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=bi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=bi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=bi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=bi.geoNear}});var fv=P((Eye,dv)=>{"use strict";var Vf=require("lodash"),En=require("alasql");En.options.cache=!1;var o6=Lm(),lv=require("clone"),Mm=require("recursive-iterator"),He=X(),Xe=oe(),nu=Fn(),a6=(G(),D($)),{hdb_errors:c6}=he(),{getDatabases:uv}=(Ue(),D(at)),l6="IS NULL",qs="There was a problem performing this search. Please check the logs and try again.";o6(En);var qR=class{static{a(this,"SQLSearch")}constructor(t,r){if(Xe.isEmpty(t))throw He.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Xe.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Xe.isEmptyOrZeroLength(n))return He.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw He.error("Error thrown from checkEmptySQL in SQLSearch class method search."),He.error(n),new Error(qs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw He.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),He.error(n),new Error(qs)}if(Object.keys(this.data).length===0)return He.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw He.error("Error thrown from processJoins in SQLSearch class method search."),He.error(n),new Error(qs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw He.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),He.error(n),new Error(qs)}try{return t=await this._finalSQL(),t}catch(n){throw He.error("Error thrown from finalSQL in SQLSearch class method search."),He.error(n),new Error(qs)}}_getColumns(){let t=new Mm(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(lv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Vf.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=uv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Xe.isEmpty(this.statement.where)){He.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Mm(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Xe.isEmpty(r)&&r.right)if(Xe.isNotEmptyAndHasValue(r.right.value)){let n=Xe.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new En.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Xe.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new En.yy.LogicValue({value:i}):n instanceof En.yy.StringValue&&Xe.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new En.yy.NumValue({value:i}))});if(t){He.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Mm(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(!Xe.isEmpty(a6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Xe.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Xe.isEmptyOrZeroLength(r.left.columnid)||Xe.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Xe.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"=":!Xe.isEmpty(r.right.value)||!Xe.isEmpty(r.left.value)?n.add(Xe.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(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&Xe.isEmptyOrZeroLength(this.statement.from)&&Xe.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&&Vf.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(Xe.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Xe.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(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&!Xe.isEmptyOrZeroLength(this.columns.columns))return t;if(Xe.isEmptyOrZeroLength(this.all_table_attributes)&&Xe.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await En.promise(r)}catch(r){throw He.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),He.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(lv(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Xe.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(l6)>-1&&this.tables.forEach(s=>{let i={columnid:uv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Vf.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Xe.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!Xe.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await nu.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw He.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),He.error(f),new Error(qs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let h=await nu.getDataByValue(d);for(let[_,p]of h)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,_))}))}catch(f){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),He.error(f),new Error(qs)}else if(!Xe.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Xe.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,h=f.length;d<h;d++){let _=f[d];c.search_attribute=_.attribute,c.search_value=_.search_value;let p=await nu.getDataByValue(c,_.operation);if(l)for(let[S]of p)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of p)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),He.error(f),new Error(qs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await nu.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,h]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw He.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),He.error(f),new Error(qs)}}}_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 En.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 En.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new En.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 En.yy.FuncValue:new En.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(_=>{_.joinmode&&_.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(_.table);let p=_.joinmode+" JOIN ? AS "+(_.as?_.as:_.table.tableid);_.on&&(p+=" ON "+_.on.toString()),i.push(p),t.push(Object.values(this.data[`${_.table.databaseid_orig}_${_.table.as?_.table.as_orig:_.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(_=>{let p=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__hash_name,S=_.as?_.as_orig:_.tableid_orig;o.push({key:`'${S}.${p}'`,schema:_.databaseid_orig,table:_.as?_.as_orig:_.tableid_orig,keys:new Set}),r.push(`${_.as?_.as:_.tableid}.\`${p}\` AS "${S}.${p}"`),c[_.as?_.as_orig:_.tableid_orig]=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(_=>{_.is_func?r.push(_.initial_select_column.toString()):_.initial_select_column.tableid?r.push(`${_.initial_select_column.tableid}.${_.initial_select_column.columnid} AS ${_.expression.columnid}`):r.push(`${_.initial_select_column.columnid} AS ${_.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let _=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,p=this._convertColumnsToIndexes(_,s);h=await En.promise(p,t),t=null}catch(_){throw He.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),He.error(_),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let _=0,p=h.length;_<p;_++){let S=h[_];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(_=>{let p=Object.keys(this.data[`${_.schema}_${_.table}`].__merged_data),S=Vf.difference(p,[..._.keys].map(g=>g.toString()));for(let g=0,R=S.length;g<R;g++){let E=S[g];delete this.data[`${_.schema}_${_.table}`].__merged_data[E]}})}return{existing_attributes:c,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Mm(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=Vf.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw He.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),He.error(i),new Error(qs)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await nu.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let h=o[f],_=l.get(h);for(let p=0;p<u;p++){let S=s.columns[p],g=_[S]===void 0?null:_[S];this.data[n].__merged_data[h].push(g)}}}}catch(r){throw He.error("Error thrown from getDataByHash function in SQLSearch class method getData."),He.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();He.trace(`Final SQL: ${s}`),n=await En.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),He.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw He.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),He.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return He.error(c6.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),He.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await nu.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw He.error("There was an error when processing this SQL operation. Check your logs"),He.error(o),new Error(qs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};dv.exports=qR});var Vr=P((Sye,_v)=>{"use strict";var u6=JM();_v.exports={searchByConditions:f6,searchByHash:_6,searchByValue:h6,search:p6};var $R=Fn(),{transformReq:VR}=oe(),d6=fv();async function f6(e){return VR(e),$R.searchByConditions(e)}a(f6,"searchByConditions");async function _6(e){VR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of $R.searchByHash(e))r&&t.push(r);return t}a(_6,"searchByHash");async function h6(e){VR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of $R.searchByValue(e))t.push(r);return t}a(h6,"searchByValue");function p6(e,t){try{let r=new u6(e);r.validate(),new d6(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(p6,"search")});var lo=P((Aye,Ev)=>{"use strict";var Kf=require("crypto"),m6=ce(),{CONFIG_PARAMS:E6}=(G(),D($)),pv="aes-256-cbc",g6=32,S6=16,KR=64,mv=32,T6=KR+mv,hv=new Map;Ev.exports={encrypt:A6,decrypt:R6,createNatsTableStreamName:y6};function A6(e){let t=Kf.randomBytes(g6),r=Kf.randomBytes(S6),n=Kf.createCipheriv(pv,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(A6,"encrypt");function R6(e){let t=e.substr(0,KR),r=e.substr(KR,mv),n=e.substr(T6,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Kf.createDecipheriv(pv,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(R6,"decrypt");function y6(e,t){let r=m6.get(E6.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=hv.get(r);return n||(n=Kf.createHash("md5").update(r).digest("hex"),hv.set(r,n)),n}a(y6,"createNatsTableStreamName")});var uo=P((bye,Av)=>{"use strict";var yye=Vr(),Yf=X(),{validateBySchema:gv}=nt(),Lc=require("joi"),b6=lo(),vm=oe(),{handleHDBError:Um,hdb_errors:O6,ClientError:Sv}=he(),{HDB_ERROR_MSGS:xm,HTTP_STATUS_CODES:YR}=O6,Tv=ce();Tv.initSync();var{getDatabases:WR}=(Ue(),D(at)),N6=require("fs-extra"),w6=(G(),D($));Av.exports={describeAll:I6,describeTable:Bm,describeSchema:C6};async function I6(e={}){try{let t=vm.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=WR(),o={},c={},l=[],u=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let h=i[d];for(let _ in h)try{let p;if(t||s||r)p=await Bm({schema:d,table:_,exact_count:u});else if(n&&n[d].describe&&n[d].tables[_].describe){let S=n[d].tables[_].attribute_permissions;p=await Bm({schema:d,table:_,exact_count:u},S)}p&&l.push(p)}catch(p){Yf.error(p)}}let f={};for(let d in l)t||s||r?(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?f[d]={}:c[d]&&(f[d]={});return f}catch(t){return Yf.error("Got an error in describeAll"),Yf.error(t),Um(new Error,xm.DESCRIBE_ALL_ERR)}}a(I6,"describeAll");async function Bm(e,t){vm.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=gv(e,Lc.object({database:Lc.string(),table:Lc.string().required(),exact_count:Lc.boolean().strict()}));if(i)throw new Sv(i.message);let c=WR()[r];if(!c)throw Um(new Error,xm.SCHEMA_NOT_FOUND(e.schema),YR.NOT_FOUND);let l=c[n];if(!l)throw Um(new Error,xm.TABLE_NOT_FOUND(e.schema,e.table),YR.NOT_FOUND);function u(_){f.push({attribute:_.attribute,type:_.type,elements:_.elements?.type,indexed:_.indexed,is_primary_key:_.isPrimaryKey,assigned_created_time:_.assignCreatedTime,assigned_updated_time:_.assignUpdatedTime,nullable:_.nullable,properties:_.properties?_.properties.map(p=>({type:p.type,name:p.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let _={};s.forEach(p=>{p.describe&&(_[p.attribute_name]=!0)}),l.attributes.forEach(p=>{_[p.name]&&u(p)})}else l.attributes?.forEach(_=>u(_));let d;try{d=(await N6.stat(l.primaryStore.env.path)).size}catch(_){Yf.warn("unable to get database size",_)}let h={schema:r,name:l.tableName,hash_attribute:l.attributes.find(_=>_.isPrimaryKey||_.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(h.replicate=l.replicate),l.expirationMS!==void 0&&(h.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(h.sealed=l.sealed),l.sources?.length>0&&(h.sources=l.sources.map(_=>_.name).filter(_=>_&&_!=="NATSReplicator"&&_!=="Replicator")),Tv.get(w6.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=b6.createNatsTableStreamName(h.schema,h.name));try{let _=await l.getRecordCount({exactCount:!!e.exact_count});h.record_count=_.recordCount,h.table_size=l.getSize(),h.db_audit_size=l.getAuditSize(),h.estimated_record_range=_.estimatedRange;let p=l.auditStore;if(p)for(let S of p.getKeys({reverse:!0,limit:1}))h.last_updated_record=S[0];if(!h.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))h.last_updated_record=S}catch(_){Yf.warn(`unable to stat table dbi due to ${_}`)}return h}a(Bm,"descTable");async function C6(e){vm.transformReq(e);let t=gv(e,Lc.object({database:Lc.string(),exact_count:Lc.boolean().strict()}));if(t)throw new Sv(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=WR()[n];if(!i)throw Um(new Error,xm.SCHEMA_NOT_FOUND(e.schema),YR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),vm.isEmpty(l)||l.describe){let u=await Bm({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(C6,"describeSchema")});var $s=P((Iye,Nv)=>{var P6=oo(),{callbackify:yv,promisify:D6}=require("util"),{getDatabases:bv}=(Ue(),D(at));Nv.exports={setSchemaDataToGlobal:Rv,getTableSchema:L6,getSystemSchema:M6,setSchemaDataToGlobalAsync:D6(Rv)};var Ov=uo(),Nye=yv(Ov.describeAll),wye=yv(Ov.describeTable);function Rv(e){global.hdb_schema=bv(),e&&e()}a(Rv,"setSchemaDataToGlobal");function L6(e,t,r){let n=bv()[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(L6,"getTableSchema");function M6(){return P6}a(M6,"getSystemSchema")});var jR=P((Pye,Cv)=>{var v6=nt(),zR=require("joi"),{hdb_table:U6,hdb_database:wv}=Ri(),Iv={schema:wv,database:wv,table:U6},x6={date:zR.date().iso().required()},B6={timestamp:zR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Cv.exports=function(e,t){let r=t==="timestamp"?{...Iv,...B6}:{...Iv,...x6},n=zR.object(r);return v6.validateBySchema(e,n)}});var Lv=P((Dye,Dv)=>{var H6=nt(),QR=require("joi"),{hdb_table:k6,hdb_database:Pv}=Ri(),F6=QR.object({schema:Pv,database:Pv,table:k6,hash_values:QR.array().required(),ids:QR.array()});Dv.exports=function(e){return H6.validateBySchema(e,F6)}});var ey=P((Lye,Mv)=>{"use strict";var JR=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}},XR=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},ZR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Mv.exports={InsertObject:JR,NoSQLSeachObject:XR,DeleteResponseObject:ZR}});var Uc=P((vye,Hv)=>{"use strict";var Uv=jR(),G6=Lv(),Mc=oe(),vv=require("moment"),xv=X(),{promisify:q6,callbackify:$6}=require("util"),vc=(G(),D($)),V6=$s(),ty=q6(V6.getTableSchema),ry=Fn(),{DeleteResponseObject:K6}=ey(),{handleHDBError:la,hdb_errors:Y6}=he(),{HDB_ERROR_MSGS:Hm,HTTP_STATUS_CODES:ua}=Y6,W6="records successfully deleted",z6=$6(Bv);Hv.exports={delete:z6,deleteRecord:Bv,deleteFilesBefore:j6,deleteAuditLogsBefore:Q6};async function j6(e){let t=Uv(e,"date");if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);if(Mc.transformReq(e),!vv(e.date,vv.ISO_8601).isValid())throw la(new Error,Hm.INVALID_DATE,ua.BAD_REQUEST,vc.LOG_LEVELS.ERROR,Hm.INVALID_DATE,!0);let n=Mc.checkSchemaTableExist(e.schema,e.table);if(n)throw la(new Error,n,ua.NOT_FOUND,vc.LOG_LEVELS.ERROR,n,!0);let s=await ry.deleteRecordsBefore(e);if(await ty(e.schema,e.table),xv.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(j6,"deleteFilesBefore");async function Q6(e){let t=Uv(e,"timestamp");if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);if(Mc.transformReq(e),isNaN(e.timestamp))throw la(new Error,Hm.INVALID_VALUE("Timestamp"),ua.BAD_REQUEST,vc.LOG_LEVELS.ERROR,Hm.INVALID_VALUE("Timestamp"),!0);let r=Mc.checkSchemaTableExist(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,vc.LOG_LEVELS.ERROR,r,!0);let n=await ry.deleteAuditLogsBefore(e);return await ty(e.schema,e.table),xv.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Q6,"deleteAuditLogsBefore");async function Bv(e){e.ids&&(e.hash_values=e.ids);let t=G6(e);if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);Mc.transformReq(e);let r=Mc.checkSchemaTableExist(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,vc.LOG_LEVELS.ERROR,r,!0);try{await ty(e.schema,e.table);let n=await ry.deleteRecords(e);return Mc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${W6}`),n}catch(n){if(n.message===vc.SEARCH_NOT_FOUND_MESSAGE){let s=new K6;return s.message=vc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Bv,"deleteRecord")});var km={};Be(km,{HASH_FUNCTION:()=>jf,hash:()=>iy,validate:()=>oy});function ny(e=zf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Wf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function iy(e,t=jf[Fv?.toUpperCase()]??"sha256"){return sy[t](e)}function oy(e,t,r=jf[Fv?.toUpperCase()]??"sha256"){return e?J6[r](e,t):!1}var Wf,su,kv,Fv,zf,Gv,jf,sy,J6,Fm=be(()=>{Wf=M(require("node:crypto")),su=M(require("argon2")),kv=M(ce());G();Fv=(0,kv.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),zf=16,Gv=9,jf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(jf||{});a(ny,"generateSalt");sy={md5:a((e,t=void 0)=>{t=t??ny(Gv);let r=Wf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??ny(zf);let r=Wf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=ny(zf),r=await su.hash(e,{type:su.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},J6={md5:a((e,t)=>{let r=e.slice(0,Gv);return e===sy.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,zf);return e===sy.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await su.verify(e.slice(zf),t),"argon2id")};a(iy,"hash");a(oy,"validate")});var $v=P((Hye,qv)=>{var ay=nt(),Kr={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 X6(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,ay.validateObject(e,Kr)}a(X6,"addUserValidation");function Z6(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,ay.validateObject(e,Kr)}a(Z6,"alterUserValidation");function eZ(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,ay.validateObject(e,Kr)}a(eZ,"dropUserValidation");qv.exports={addUserValidation:X6,alterUserValidation:Z6,dropUserValidation:eZ}});var Pt=P((Gye,Kv)=>{"use strict";var{platform:Fye}=require("os"),tZ="nats-server.zip",cy="nats-server",rZ=process.platform==="win32"?`${cy}.exe`:cy,nZ=/^[^\s.,*>]+$/,Vv="__request__",sZ=a(e=>`${e}.${Vv}`,"REQUEST_SUBJECT"),iZ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},oZ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},aZ={HUB:"hub.pid",LEAF:"leaf.pid"},cZ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},lZ={SUCCESS:"success",ERROR:"error"},uZ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},dZ={TXN:"txn",MSGID:"msgid"},iu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},fZ={[iu.ERR]:1,[iu.WRN]:2,[iu.INF]:3,[iu.DBG]:4,[iu.TRC]:5},_Z={debug:"-D",trace:"-DVV"};Kv.exports={NATS_SERVER_ZIP:tZ,NATS_SERVER_NAME:cy,NATS_BINARY_NAME:rZ,PID_FILES:aZ,NATS_CONFIG_FILES:oZ,SERVER_SUFFIX:cZ,NATS_TERM_CONSTRAINTS_RX:nZ,REQUEST_SUFFIX:Vv,UPDATE_REMOTE_RESPONSE_STATUSES:lZ,CLUSTER_STATUS_STATUSES:uZ,REQUEST_SUBJECT:sZ,SUBJECT_PREFIXES:dZ,MSG_HEADERS:iZ,LOG_LEVELS:iu,LOG_LEVEL_FLAGS:_Z,LOG_LEVEL_HIERARCHY:fZ}});var Gn=P(($ye,br)=>{"use strict";var zv="username is required",jv="nothing to update, must supply active, role or password to update",Qv="password cannot be an empty string",Jv="If role is specified, it cannot be empty.",Xv="active must be true or false";br.exports.addUser=RZ;br.exports.alterUser=yZ;br.exports.dropUser=OZ;br.exports.getSuperUser=PZ;br.exports.userInfo=NZ;br.exports.listUsers=qm;br.exports.listUsersExternal=wZ;br.exports.setUsersWithRolesCache=xc;br.exports.findAndValidateUser=Ey;br.exports.getClusterUser=DZ;br.exports.getUsersWithRolesCache=CZ;br.exports.USERNAME_REQUIRED=zv;br.exports.ALTERUSER_NOTHING_TO_UPDATE=jv;br.exports.EMPTY_PASSWORD=Qv;br.exports.EMPTY_ROLE=Jv;br.exports.ACTIVE_BOOLEAN=Xv;var Zv=gn(),hZ=Uc(),Qf=(Fm(),D(km)),eU=$v(),Jf=Vr(),_y=_o(),Oi=oe(),tU=require("validate.js"),hy=X(),{promisify:pZ}=require("util"),py=lo(),uy=(G(),D($)),Yv=Pt(),mZ=wt(),EZ=ce(),gZ=oo(),{hdb_errors:SZ,ClientError:Vs}=he(),{HTTP_STATUS_CODES:fo,AUTHENTICATION_ERROR_MSGS:ly,HDB_ERROR_MSGS:ou}=SZ,{UserEventMsg:my}=Ks(),dy=require("lodash"),{server:Gm}=(Dr(),D(ql)),TZ=X();Gm.getUser=(e,t)=>Ey(e,t,t!=null);Gm.authenticateUser=(e,t)=>Ey(e,t);var rU={username:!0,active:!0,role:!0,password:!0},Wv=new Map,AZ=pZ(hZ.delete),fy=EZ.get(uy.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Qf.HASH_FUNCTION.SHA256,Ni;async function RZ(e){let t=tU.cleanAttributes(e,rU),r=eU.addUserValidation(t);if(r)throw new Vs(r.message);let n=await Jf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Vs(ou.ROLE_NAME_NOT_FOUND(t.role),fo.NOT_FOUND);if(n.length>1)throw new Vs(ou.DUP_ROLES_FOUND(t.role),fo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=py.encrypt(t.password)),t.password=await Qf.hash(t.password,fy),t.hash_function=fy,t.role=n[0].id;let s=await Zv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(hy.debug(s),await xc(),s.skipped_hashes.length===1)throw new Vs(ou.USER_ALREADY_EXISTS(t.username),fo.CONFLICT);return _y.signalUserChange(new my(process.pid)),`${t.username} successfully added`}a(RZ,"addUser");async function yZ(e){let t=tU.cleanAttributes(e,rU);if(Oi.isEmptyOrZeroLength(t.username))throw new Error(zv);if(Oi.isEmptyOrZeroLength(t.password)&&Oi.isEmptyOrZeroLength(t.role)&&Oi.isEmptyOrZeroLength(t.active))throw new Error(jv);if(!Oi.isEmpty(t.password)&&Oi.isEmptyOrZeroLength(t.password.trim()))throw new Error(Qv);if(!Oi.isEmpty(t.active)&&!Oi.isBoolean(t.active))throw new Error(Xv);if(!Oi.isEmpty(t.password)&&!Oi.isEmptyOrZeroLength(t.password.trim())&&(bZ(t.username)&&(t.hash=py.encrypt(t.password)),t.password=await Qf.hash(t.password,fy)),t.role==="")throw new Error(Jv);if(t.role){let n=await Jf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Vs(ou.ALTER_USER_ROLE_NOT_FOUND(t.role),fo.NOT_FOUND);if(n.length>1)throw new Vs(ou.DUP_ROLES_FOUND(t.role),fo.CONFLICT);t.role=n[0].id}let r=await Zv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await xc(),_y.signalUserChange(new my(process.pid)),r}a(yZ,"alterUser");function bZ(e){let t=!1,r=Ni.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(bZ,"isClusterUser");async function OZ(e){let t=eU.dropUserValidation(e);if(t)throw new Vs(t.message);if(Ni.get(e.username)===void 0)throw new Vs(ou.USER_NOT_EXIST(e.username),fo.NOT_FOUND);let r=await AZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return hy.debug(r),await xc(),_y.signalUserChange(new my(process.pid)),`${e.username} successfully deleted`}a(OZ,"dropUser");async function NZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=dy.cloneDeep(e.hdb_user);let r=await Jf.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(NZ,"userInfo");async function wZ(){let e=await qm();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(wZ,"listUsersExternal");async function qm(){let e=await Jf.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=dy.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Jf.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=dy.cloneDeep(s),s.role=t[s.role],IZ(s.role),n.set(s.username,s);return n}a(qm,"listUsers");function IZ(e){if(!e){hy.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(gZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(IZ,"appendSystemTablesToRole");async function xc(e=void 0){e?Ni=e:Ni=await qm()}a(xc,"setUsersWithRolesCache");async function CZ(){return Ni||await xc(),Ni}a(CZ,"getUsersWithRolesCache");async function Ey(e,t,r=!0){Ni||await xc();let n=Ni.get(e);if(!n){if(!r)return{username:e};throw new Vs(ly.GENERIC_AUTH_FAIL,fo.UNAUTHORIZED)}if(n&&!n.active)throw new Vs(ly.USER_INACTIVE,fo.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(Wv.get(t)===n.password)return s;{let i=Qf.validate(n.password,t,n.hash_function||Qf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)Wv.set(t,n.password);else throw new Vs(ly.GENERIC_AUTH_FAIL,fo.UNAUTHORIZED)}}return s}a(Ey,"findAndValidateUser");async function PZ(){Ni||await xc();for(let[,e]of Ni)if(e.role.role==="super_user")return e}a(PZ,"getSuperUser");async function DZ(){let e=await qm(),t=mZ.getConfigFromFile(uy.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==uy.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=py.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Yv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Yv.SERVER_SUFFIX.ADMIN,r}a(DZ,"getClusterUser");var nU=[];Gm.invalidateUser=function(e){for(let t of nU)try{t(e)}catch(r){TZ.error("Error invalidating user",r)}};Gm.onInvalidatedUser=function(e){nU.push(e)}});var Zf=P((Wye,aU)=>{"use strict";var Bc=X(),qn=(G(),D($)),LZ=HM(),Kye=$s(),Yye=uo(),MZ=Gn(),{validateEvent:sU}=Ks(),Xf=Fn(),vZ=require("process"),{resetDatabases:UZ}=(Ue(),D(at)),xZ={[qn.ITC_EVENT_TYPES.SCHEMA]:BZ,[qn.ITC_EVENT_TYPES.USER]:oU};async function BZ(e){let t=sU(e);if(t){Bc.error(t);return}Bc.trace("ITC schemaHandler received schema event:",e),await LZ(e.message),await HZ(e.message)}a(BZ,"schemaHandler");async function HZ(e){try{Xf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Xf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Xf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=UZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Bc.error(t)}}a(HZ,"syncSchemaMetadata");var iU=[];async function oU(e){try{try{Xf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Xf.resetReadTxn(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Bc.warn(r)}let t=sU(e);if(t){Bc.error(t);return}Bc.trace(`ITC userHandler ${qn.HDB_ITC_CLIENT_PREFIX}${vZ.pid} received user event:`,e),await MZ.setUsersWithRolesCache();for(let r of iU)r()}catch(t){Bc.error(t)}}a(oU,"userHandler");oU.addListener=function(e){iU.push(e)};aU.exports=xZ});var Ks=P((Zye,lU)=>{"use strict";var jye=X(),gy=oe(),kZ=(G(),D($)),{ITC_ERRORS:e_}=Dn(),{parentPort:Qye,threadId:FZ,isMainThread:GZ,workerData:Jye}=require("worker_threads"),{onMessageFromWorkers:qZ,broadcast:Xye,broadcastWithAcknowledgement:$Z}=st();lU.exports={sendItcEvent:VZ,validateEvent:cU,SchemaEventMsg:KZ,UserEventMsg:YZ};var $m;qZ(async(e,t)=>{$m=$m||Zf(),cU(e),$m[e.type]&&await $m[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function VZ(e){return!GZ&&e.message&&(e.message.originator=FZ),$Z(e)}a(VZ,"sendItcEvent");function cU(e){if(typeof e!="object")return e_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||gy.isEmpty(e.type))return e_.MISSING_TYPE;if(!e.hasOwnProperty("message")||gy.isEmpty(e.message))return e_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||gy.isEmpty(e.message.originator))return e_.MISSING_ORIGIN;if(kZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return e_.INVALID_EVENT(e.type)}a(cU,"validateEvent");function KZ(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(KZ,"SchemaEventMsg");function YZ(e){this.originator=e}a(YZ,"UserEventMsg")});var _o=P((rbe,_U)=>{"use strict";var uU=(G(),D($)),tbe=oe(),Vm=X(),dU=UM(),au,{sendItcEvent:fU}=Ks();function WZ(e){try{Vm.info("signalSchemaChange called with message:",e),au=au||Zf();let t=new dU(uU.ITC_EVENT_TYPES.SCHEMA,e);return au.schema(t),fU(t)}catch(t){Vm.error(t)}}a(WZ,"signalSchemaChange");function zZ(e){try{Vm.trace("signalUserChange called with message:",e),au=au||Zf();let t=new dU(uU.ITC_EVENT_TYPES.USER,e);return au.user(t),fU(t)}catch(t){Vm.error(t)}}a(zZ,"signalUserChange");_U.exports={signalSchemaChange:WZ,signalUserChange:zZ}});var Km=P((sbe,pU)=>{"use strict";var hU=oe(),jZ=(G(),D($)),QZ=X(),JZ=Pm(),XZ=Cm(),ZZ=_o(),{SchemaEventMsg:e8}=Ks(),t8="already exists in";pU.exports=r8;async function r8(e,t,r){if(hU.isEmptyOrZeroLength(r))return r;let n=[];hU.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 n8(e,t.schema,t.name,i)})),s}a(r8,"lmdbCheckForNewAttributes");async function n8(e,t,r,n){let s=new XZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await s8(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(t8))QZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(n8,"createNewAttribute");async function s8(e){let t;return t=await JZ(e),ZZ.signalSchemaChange(new e8(process.pid,jZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(s8,"createAttribute")});var cu=P((obe,mU)=>{"use strict";var Sy=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}};mU.exports=Sy});var gU=P((cbe,EU)=>{"use strict";var i8=cu(),o8=(G(),D($)).OPERATIONS_ENUM,Ty=class extends i8{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(o8.INSERT,r,n,s,i),this.records=t}};EU.exports=Ty});var TU=P((ube,SU)=>{"use strict";var a8=cu(),c8=(G(),D($)).OPERATIONS_ENUM,Ay=class extends a8{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(c8.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};SU.exports=Ay});var RU=P((fbe,AU)=>{"use strict";var l8=cu(),u8=(G(),D($)).OPERATIONS_ENUM,Ry=class extends l8{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(u8.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};AU.exports=Ry});var bU=P((hbe,yU)=>{"use strict";var d8=cu(),f8=(G(),D($)).OPERATIONS_ENUM,yy=class extends d8{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(f8.DELETE,n,s,t,i),this.original_records=r}};yU.exports=yy});var t_=P((Ebe,IU)=>{"use strict";var mbe=require("path"),OU=ht(),_8=gU(),h8=TU(),p8=RU(),m8=bU(),lu=Ft(),NU=oe(),{CONFIG_PARAMS:E8}=(G(),D($)),wU=ce();wU.initSync();var Ym=(G(),D($)).OPERATIONS_ENUM,{getTransactionAuditStorePath:g8}=gt();IU.exports=S8;async function S8(e,t){if(wU.get(E8.LOGGING_AUDITLOG)===!1)return;let r=g8(e.schema,e.table),n=await OU.openEnvironment(r,e.table,!0),s=T8(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){OU.initializeDBIs(n,lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,lu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),NU.isEmpty(s.user_name)||n.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(S8,"writeTransaction");function T8(e,t){let r=NU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Ym.INSERT)return new _8(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ym.UPDATE)return new h8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ym.UPSERT)return new p8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Ym.DELETE)return new m8(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(T8,"createTransactionObject")});var by=P((Tbe,CU)=>{"use strict";var A8=Ff(),Sbe=df(),r_=(G(),D($)),R8=ff(),y8=Cc().insertRecords,b8=ht(),O8=X(),N8=Km(),{getSchemaPath:w8}=gt(),I8=t_();CU.exports=C8;async function C8(e){try{let{schema_table:t,attributes:r}=A8(e);R8(e,r,t.hash_attribute),e.schema!==r_.SYSTEM_SCHEMA_NAME&&(r.includes(r_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(r_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(r_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(r_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await N8(e.hdb_auth_header,t,r),s=w8(e.schema,e.table),i=await b8.openEnvironment(s,e.table),o=await y8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await I8(e,o)}catch(c){O8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(C8,"lmdbCreateRecords")});var LU=P((Rbe,DU)=>{"use strict";var PU=(G(),D($)),P8=by(),D8=df(),L8=require("fs-extra"),{getSchemaPath:M8}=gt();DU.exports=v8;async function v8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new D8(PU.SYSTEM_SCHEMA_NAME,PU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await P8(r),await L8.mkdirp(M8(e.schema))}a(v8,"lmdbCreateSchema")});var vU=P((bbe,MU)=>{"use strict";var Oy=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}};MU.exports=Oy});var HU=P((Cbe,BU)=>{"use strict";var UU=ht(),Ny=ln(),wy=Dn().LMDB_ERRORS_ENUM,U8=Ft(),xU=X(),Nbe=oe(),x8=require("lmdb"),B8=vU(),H8=(G(),D($)),{OVERFLOW_MARKER:wbe,MAX_SEARCH_KEY_LENGTH:Ibe}=U8,k8=H8.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function F8(e,t,r,n){if(Ny.validateEnv(e),t===void 0)throw new Error(wy.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(wy.IDS_REQUIRED):new Error(wy.IDS_MUST_BE_ITERABLE);try{let s=UU.listDBIs(e);UU.initializeDBIs(e,t,s);let i=new B8,o,c=[],l=[];for(let h=0,_=r.length;h<_;h++)try{o=r[h];let p=e.dbis[t].get(o);if(!p||n&&p[k8]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,x8.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let R=s[g];if(!p.hasOwnProperty(R)||R===t)continue;let E=e.dbis[R],T=p[R];if(T!=null)try{let O=Ny.getIndexedValues(T);if(O)for(let v=0,F=O.length;v<F;v++)E.remove(O[v],o)}catch{xU.warn(`cannot delete from attribute: ${R}, ${T}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(p)}catch(p){xU.warn(p),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let h=0,_=f.length;h<_;h++)f[h]===!0?i.deleted.push(l[h]):(i.skipped.push(l[h]),u.push(h));let d=0;for(let h=0;h<u.length;h++){let _=u[h];i.original_records.splice(_-d,1),d++}return i.txn_time=Ny.getNextMonotonicTime(),i}catch(s){throw s}}a(F8,"deleteRecords");BU.exports={deleteRecords:F8}});var n_=P((Dbe,FU)=>{"use strict";var uu=oe(),G8=HU(),q8=ht(),{getSchemaPath:$8}=gt(),V8=t_(),K8=X();FU.exports=Y8;async function Y8(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(uu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(uu.isEmptyOrZeroLength(e.hash_values)&&!uu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];uu.isEmpty(l)||e.hash_values.push(l)}}if(uu.isEmptyOrZeroLength(e.hash_values))return kU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(uu.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=$8(e.schema,e.table),i=await q8.openEnvironment(s,e.table),o=await G8.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await V8(e,o)}catch(c){K8.error(`unable to write transaction due to ${c.message}`)}return kU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Y8,"lmdbDeleteRecords");function kU(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(kU,"createDeleteResponse")});var Cy=P((vbe,GU)=>{"use strict";var W8=(G(),D($)),Mbe=ln();function Iy(e,t){let r=Object.create(null);if(t.length===1&&W8.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(Iy,"parseRow");function z8(e,t,r,n){let s=Iy(r,e);n.push(s)}a(z8,"searchAll");function j8(e,t,r,n){let s=Iy(r,e);n[t]=s}a(j8,"searchAllToMap");function Q8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Q8,"iterateDBI");function Hc(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(Hc,"pushResults");function J8(e,t,r,n,s,i){t.toString().endsWith(e)&&Hc(t,r,n,s,i)}a(J8,"endsWith");function X8(e,t,r,n,s,i){t.toString().includes(e)&&Hc(t,r,n,s,i)}a(X8,"contains");function Z8(e,t,r,n,s,i){t>e&&Hc(t,r,n,s,i)}a(Z8,"greaterThanCompare");function e5(e,t,r,n,s,i){t>=e&&Hc(t,r,n,s,i)}a(e5,"greaterThanEqualCompare");function t5(e,t,r,n,s,i){t<e&&Hc(t,r,n,s,i)}a(t5,"lessThanCompare");function r5(e,t,r,n,s,i){t<=e&&Hc(t,r,n,s,i)}a(r5,"lessThanEqualCompare");GU.exports={parseRow:Iy,searchAll:z8,searchAllToMap:j8,iterateDBI:Q8,endsWith:J8,contains:X8,greaterThanCompare:Z8,greaterThanEqualCompare:e5,lessThanCompare:t5,lessThanEqualCompare:r5,pushResults:Hc}});var du=P((kbe,zU)=>{"use strict";var da=ht(),xbe=X(),$n=ln(),Wm=Ft(),zt=Dn().LMDB_ERRORS_ENUM,Bbe=oe(),n5=(G(),D($)),zm=Cy(),{parseRow:s5}=zm,Hbe=require("lmdb"),{OVERFLOW_MARKER:qU,MAX_SEARCH_KEY_LENGTH:i5}=Wm;function $U(e,t,r,n=!1,s=void 0,i=void 0){return kc(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($U,"iterateFullIndex");function s_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return kc(e,t,r,(f,d,h,_)=>{let E={transaction:f,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 _===r?(E.values=!1,d.getRange(E).map(T=>({value:T}))):d.getRange(E)})}a(s_,"iterateRangeBetween");function kc(e,t,r,n){let s=e.database||e,i=da.openDBI(s,r);i[Wm.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&da.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(kc,"setupTransaction");function VU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(qU)){if(!s)if(r)s=da.openDBI(e,r);else{let l=da.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=da.openDBI(e,l[u]),!s[Wm.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(VU,"getOverflowCheck");function o5(e,t,r,n=!1,s=void 0,i=void 0){if($n.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return kc(e,t,t,(o,c,l)=>(jm(r),r=i_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>s5(u.value,r))))}a(o5,"searchAll");function a5(e,t,r,n=!1,s=void 0,i=void 0){if($n.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);jm(r),r=i_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of $U(e,t,t,n,s,i))o.set(c,zm.parseRow(l,r));return o}a(a5,"searchAllToMap");function c5(e,t,r=!1,n=void 0,s=void 0){if($n.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=$U(e,void 0,t,r,n,s),c=o.transaction,l=VU(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(c5,"iterateDBI");function l5(e,t){if($n.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return da.statDBI(e,t).entryCount}a(l5,"countAll");function u5(e,t,r,n,s=!1,i=void 0,o=void 0){return fa(e,r,n),kc(e,t,r,(c,l,u,f)=>(n=$n.convertKeyValueToWrite(n),f===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(d=>({key:n,value:d}))))}a(u5,"equals");function d5(e,t,r){return fa(e,t,r),da.openDBI(e,t).getValuesCount(r)}a(d5,"count");function f5(e,t,r,n,s=!1,i=void 0,o=void 0){return fa(e,r,n),kc(e,null,r,(c,l)=>{n=$n.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let h of l.getKeys({transaction:c,start:n}))if(!h.startsWith(n)){d=h;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),f=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(h=>{let{key:_}=h;if(_!==d){if(_.toString().startsWith(n))return h;if(u===!0)return f.DONE}}),f.filter(h=>h)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(f5,"startsWith");function _5(e,t,r,n,s=!1,i=void 0,o=void 0){return KU(e,t,r,n,s,i,o,!0)}a(_5,"endsWith");function KU(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return fa(e,r,n),kc(e,null,r,(l,u,f,d)=>{let h=VU(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(_=>{let p=_.toString();return p.endsWith(qU)?u.getValues(_,{transaction:l}).map(S=>{let g=h(_,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?p.endsWith(n):p.includes(n))?u[Wm.DBI_DEFINITION_NAME].is_hash_attribute?{key:_,value:_}:u.getValues(_,{transaction:l}).map(S=>({key:_,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(KU,"contains");function h5(e,t,r,n,s=!1,i=void 0,o=void 0){fa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),s_(e,t,r,n,l,s,i,o,!0,!1)}a(h5,"greaterThan");function p5(e,t,r,n,s=!1,i=void 0,o=void 0){fa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),s_(e,t,r,n,l,s,i,o,!1,!1)}a(p5,"greaterThanEqual");function m5(e,t,r,n,s=!1,i=void 0,o=void 0){fa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),s_(e,t,r,l,n,s,i,o,!1,!0)}a(m5,"lessThan");function E5(e,t,r,n,s=!1,i=void 0,o=void 0){fa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),s_(e,t,r,l,n,s,i,o,!1,!1)}a(E5,"lessThanEqual");function g5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if($n.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=$n.convertKeyValueToWrite(n),s=$n.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return s_(e,t,r,n,s,i,o,c)}a(g5,"between");function S5(e,t,r,n){$n.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(jm(r),r=i_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=zm.parseRow(c,r)),o}a(S5,"searchByHash");function T5(e,t,r){$n.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(T5,"checkHashExists");function A5(e,t,r,n,s=[]){return WU(e,t,r,n,s),YU(e,t,r,n,s).map(i=>i[1])}a(A5,"batchSearchByHash");function R5(e,t,r,n,s=[]){WU(e,t,r,n,s);let i=new Map;for(let[o,c]of YU(e,t,r,n,s))i.set(o,c);return i}a(R5,"batchSearchByHashToMap");function YU(e,t,r,n,s=[]){return kc(e,t,t,(i,o,c)=>{r=i_(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,zm.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(YU,"batchHashSearch");function WU(e,t,r,n,s){if($n.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(jm(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(WU,"initializeBatchSearchByHash");function jm(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(jm,"validateFetchAttributes");function fa(e,t,r){if($n.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>i5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(fa,"validateComparisonFunctions");function i_(e,t){return t.length===1&&n5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=da.listDBIs(e)),t}a(i_,"setGetWholeRowAttributes");zU.exports={searchAll:o5,searchAllToMap:a5,count:d5,countAll:l5,equals:u5,startsWith:f5,endsWith:_5,contains:KU,searchByHash:S5,setGetWholeRowAttributes:i_,batchSearchByHash:A5,batchSearchByHashToMap:R5,checkHashExists:T5,iterateDBI:c5,greaterThan:h5,greaterThanEqual:p5,lessThan:m5,lessThanEqual:E5,between:g5}});var fu=P((Gbe,ZU)=>{var jU=require("lodash"),QU=nt(),Fe=require("joi"),y5=oe(),{hdb_schema_table:o_,checkValidTable:JU,hdb_table:XU,hdb_database:Qm}=Ri(),{handleHDBError:b5,hdb_errors:O5}=he(),{getDatabases:N5}=(Ue(),D(at)),{HTTP_STATUS_CODES:w5}=O5,I5=Fe.object({database:Qm,schema:Qm,table:XU,search_attribute:o_,search_value:Fe.any().required(),get_attributes:Fe.array().min(1).items(Fe.alternatives(o_,Fe.object())).optional(),desc:Fe.bool(),limit:Fe.number().integer().min(1),offset:Fe.number().integer().min(0)}),C5=Fe.object({database:Qm,schema:Qm,table:XU,operator:Fe.string().valid("and","or").default("and").lowercase(),offset:Fe.number().integer().min(0),limit:Fe.number().integer().min(1),get_attributes:Fe.array().min(1).items(Fe.alternatives(o_,Fe.object())).optional(),sort:Fe.object({attribute:Fe.alternatives(o_,Fe.array().min(1)),descending:Fe.bool().optional()}).optional(),conditions:Fe.array().min(1).items(Fe.alternatives(Fe.object({operator:Fe.string().valid("and","or").default("and").lowercase(),conditions:Fe.array()}),Fe.object({search_attribute:Fe.alternatives(o_,Fe.array().min(1)),search_type:Fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:Fe.when("search_type",{switch:[{is:"equals",then:Fe.any()},{is:"between",then:Fe.array().items(Fe.alternatives([Fe.string(),Fe.number()])).length(2)}],otherwise:Fe.alternatives(Fe.string(),Fe.number())}).required()}))).required()});ZU.exports=function(e,t){let r=null;switch(t){case"value":r=QU.validateBySchema(e,I5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(JU("database",e.schema)),i(JU("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=QU.validateBySchema(e,C5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=y5.checkGlobalSchemaTable(e.schema,e.table);if(s)return b5(new Error,s,w5.NOT_FOUND);let o=N5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(f=>{for(let d=0,h=f.conditions.length;d<h;d++){let _=f.conditions[d];_.conditions?l(_):c.push(_.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=jU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!jU.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var Py=P(($be,e0)=>{"use strict";var P5=ht(),D5=fu(),{getSchemaPath:L5}=gt();e0.exports=M5;function M5(e){let t=D5(e,"hashes");if(t)throw t;let r=L5(e.schema,e.table);return P5.openEnvironment(r,e.table)}a(M5,"initialize")});var Dy=P((Kbe,t0)=>{"use strict";var v5=du(),U5=Py();t0.exports=x5;async function x5(e){let t=await U5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return v5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(x5,"lmdbGetDataByHash")});var _u=P((Wbe,r0)=>{"use strict";var Ly=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};r0.exports=Ly});var s0=P((Qbe,n0)=>{"use strict";var jbe=_u(),B5=du(),H5=Py();n0.exports=k5;async function k5(e){let t=await H5(e),r=global.hdb_schema[e.schema][e.table];return B5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(k5,"lmdbSearchByHash")});var Ys=P((Xbe,i0)=>{"use strict";var My=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};i0.exports=My});var Jm=P((eOe,d0)=>{"use strict";var Yr=du(),F5=ht(),G5=oe(),Ge=Ft(),Fc=(G(),D($)),q5=oo(),o0=Dn().LMDB_ERRORS_ENUM,{getSchemaPath:$5}=gt(),ho=Fc.SEARCH_WILDCARDS;async function V5(e,t,r){let n;e.schema===Fc.SYSTEM_SCHEMA_NAME?n=q5[e.table]:n=global.hdb_schema[e.schema][e.table];let s=u0(e,n.hash_attribute,r,t);return c0(e,s,n.hash_attribute,r)}a(V5,"prepSearch");async function c0(e,t,r,n){let s=$5(e.schema,e.table),i=await F5.openEnvironment(s,e.table),o=l0(i,e,t,r),c=o.transaction||i;if([Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ge.SEARCH_TYPES.SEARCH_ALL,Ge.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(K5(e,r)===!1){let f=e.search_attribute;if(f===r)return n?a0(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?a0(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Yr.batchSearchByHashToMap(c,r,e.get_attributes,u):Yr.batchSearchByHash(c,r,e.get_attributes,u)}a(c0,"executeSearch");function l0(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 Ge.SEARCH_TYPES.EQUALS:s=Yr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.CONTAINS:s=Yr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.ENDS_WITH:case Ge.SEARCH_TYPES._ENDS_WITH:s=Yr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.STARTS_WITH:case Ge.SEARCH_TYPES._STARTS_WITH:s=Yr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Yr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Yr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ge.SEARCH_TYPES.SEARCH_ALL:return Yr.searchAll(e,n,t.get_attributes,o,c,l);case Ge.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Yr.searchAllToMap(e,n,t.get_attributes,o,c,l);case Ge.SEARCH_TYPES.BETWEEN:s=Yr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Ge.SEARCH_TYPES.GREATER_THAN:case Ge.SEARCH_TYPES._GREATER_THAN:s=Yr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ge.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Yr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.LESS_THAN:case Ge.SEARCH_TYPES._LESS_THAN:s=Yr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Ge.SEARCH_TYPES.LESS_THAN_EQUAL:case Ge.SEARCH_TYPES._LESS_THAN_EQUAL:s=Yr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(l0,"searchByType");function a0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(a0,"createMapFromIterable");function K5(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(K5,"checkToFetchMore");function u0(e,t,r,n){if(G5.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ho.indexOf(s)>-1)return r===!0?Ge.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ge.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ho[0])<0&&s.indexOf(ho[1])<0)return c===!0?r===!0?Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ge.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ge.SEARCH_TYPES.EQUALS;if(ho.indexOf(i)>=0&&ho.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ge.SEARCH_TYPES.CONTAINS;if(ho.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ge.SEARCH_TYPES.ENDS_WITH;if(ho.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ge.SEARCH_TYPES.STARTS_WITH;if(s.includes(ho[0])||s.includes(ho[1]))return Ge.SEARCH_TYPES.EQUALS;throw new Error(o0.UNKNOWN_SEARCH_TYPE)}else switch(n){case Fc.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ge.SEARCH_TYPES.BETWEEN;case Fc.VALUE_SEARCH_COMPARATORS.GREATER:return Ge.SEARCH_TYPES.GREATER_THAN;case Fc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ge.SEARCH_TYPES.GREATER_THAN_EQUAL;case Fc.VALUE_SEARCH_COMPARATORS.LESS:return Ge.SEARCH_TYPES.LESS_THAN;case Fc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ge.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(o0.UNKNOWN_SEARCH_TYPE)}}a(u0,"createSearchTypeFromSearchObject");d0.exports={executeSearch:c0,createSearchTypeFromSearchObject:u0,prepSearch:V5,searchByType:l0}});var _0=P((nOe,f0)=>{"use strict";var rOe=Ys(),Y5=fu(),W5=oe(),z5=(G(),D($)),j5=Jm();f0.exports=Q5;function Q5(e,t){if(!W5.isEmpty(t)&&z5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Y5(e,"value");if(n)throw n;return j5.prepSearch(e,t,!0)}a(Q5,"lmdbGetDataByValue")});var a_=P((oOe,h0)=>{"use strict";var iOe=Ys(),J5=fu(),X5=oe(),Z5=(G(),D($)),e9=Jm();h0.exports=t9;async function t9(e,t){if(!X5.isEmpty(t)&&Z5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=J5(e,"value");if(n)throw n;return e9.prepSearch(e,t,!1)}a(t9,"lmdbSearchByValue")});var m0=P((lOe,p0)=>{"use strict";var cOe=Ft(),vy=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}},Uy=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},xy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};p0.exports={SearchByConditionsObject:vy,SearchCondition:Uy,SortAttribute:xy}});var A0=P((_Oe,T0)=>{"use strict";var dOe=m0().SearchByConditionsObject,r9=Ys(),n9=fu(),By=du(),Xm=Ft(),{Resource:fOe}=(na(),D(xA)),S0=Jm(),s9=Cy(),i9=require("lodash"),{getSchemaPath:o9}=gt(),E0=ht(),{handleHDBError:a9,hdb_errors:c9}=he(),{HTTP_STATUS_CODES:l9}=c9,u9=1e8;T0.exports=d9;async function d9(e){let t=n9(e,"conditions");if(t)throw a9(t,t.message,l9.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=o9(e.schema,e.table),n=await E0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)E0.openDBI(n,u.search_attribute);let i=i9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===Xm.SEARCH_TYPES.EQUALS?u.estimated_count=By.count(n,u.search_attribute,u.search_value):f===Xm.SEARCH_TYPES.CONTAINS||f===Xm.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=u9}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await g0(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(S0.filterByType),d=f.length,h=By.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(_=>u.get(_,{transaction:o,lazy:!0})),d>0&&(l=l.filter(_=>{for(let p=0;p<d;p++)if(!f[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(_=>s9.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await g0(o,e,h,s.hash_attribute);c=c.concat(_)}let u=new Set,f=e.offset||0;c=c.filter(d=>u.has(d)?!1:(u.add(d),!0)).slice(f,e.limit&&e.limit+f),l=By.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(d9,"lmdbSearchByConditions");async function g0(e,t,r,n){let s=new r9(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Xm.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,S0.searchByType(e,s,i,n).map(o=>o.value)}a(g0,"executeConditionSearch")});var c_=P((pOe,R0)=>{"use strict";var f9=(G(),D($)).OPERATIONS_ENUM,Hy=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=f9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};R0.exports=Hy});var ky=P((EOe,P0)=>{"use strict";var N0=Ys(),w0=c_(),I0=a_(),C0=n_(),Sn=(G(),D($)),y0=oe(),b0=ht(),{getTransactionAuditStorePath:_9,getSchemaPath:h9}=gt(),O0=X();P0.exports=p9;async function p9(e){try{if(y0.isEmpty(global.hdb_schema[e.schema])||y0.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await m9(e),await E9(e);let t=h9(e.schema,e.table);try{await b0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")O0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=_9(e.schema,e.table);await b0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")O0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(p9,"lmdbDropTable");async function m9(e){let t=new N0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await I0(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 w0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await C0(s)}a(m9,"deleteAttributesFromSystem");async function E9(e){let t=new N0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Sn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await I0(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 w0(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await C0(s)}catch(i){throw i}}a(E9,"dropTableFromSystem")});var L0=P((SOe,D0)=>{"use strict";var g9=require("fs-extra"),S9=Ys(),T9=_u(),A9=c_(),R9=ky(),y9=n_(),b9=Dy(),O9=a_(),po=(G(),D($)),{getSchemaPath:N9}=gt(),{handleHDBError:w9,hdb_errors:I9}=he(),{HDB_ERROR_MSGS:C9,HTTP_STATUS_CODES:P9}=I9;D0.exports=D9;async function D9(e){let t;try{t=await L9(e.schema);let r=new S9(po.SYSTEM_SCHEMA_NAME,po.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,po.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[po.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await O9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await R9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new A9(po.SYSTEM_SCHEMA_NAME,po.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await y9(s);let i=N9(t);await g9.remove(i)}catch(r){throw r}}a(D9,"lmdbDropSchema");async function L9(e){let t=new T9(po.SYSTEM_SCHEMA_NAME,po.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[po.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await b9(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw w9(new Error,C9.SCHEMA_NOT_FOUND(e),P9.NOT_FOUND,void 0,void 0,!0);return n}a(L9,"validateDropSchema")});var l_=P((AOe,M0)=>{"use strict";var Fy=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};M0.exports=Fy});var qy=P((bOe,v0)=>{"use strict";var M9=require("fs-extra"),Zm=ht(),{getTransactionAuditStorePath:v9}=gt(),Gy=Ft(),yOe=l_();v0.exports=U9;async function U9(e){let t;try{let r=v9(e.schema,e.table);await M9.mkdirp(r),t=await Zm.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{Zm.createDBI(t,Gy.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Zm.createDBI(t,Gy.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Zm.createDBI(t,Gy.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(U9,"createTransactionsAuditEnvironment")});var B0=P((wOe,x0)=>{"use strict";var $y=(G(),D($)),U0=ht(),x9=Cc(),{getSystemSchemaPath:B9,getSchemaPath:H9}=gt(),NOe=oo(),k9=Pm(),Vy=Cm(),F9=X(),G9=qy();x0.exports=q9;async function q9(e,t){let r=H9(t.schema,t.table),n=new Vy(t.schema,t.table,$y.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Vy(t.schema,t.table,$y.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Vy(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await U0.createEnvironment(r,t.table),e!==void 0){let o=await U0.openEnvironment(B9(),$y.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await x9.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Ky(n),await Ky(s),await Ky(i)}await G9(t)}catch(o){throw o}}a(q9,"lmdbCreateTable");async function Ky(e){try{await k9(e)}catch(t){F9.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ky,"createAttribute")});var k0=P((COe,H0)=>{"use strict";var $9=Ff(),V9=ff(),K9=Km(),u_=(G(),D($)),Y9=Cc().updateRecords,W9=ht(),{getSchemaPath:z9}=gt(),j9=t_(),Q9=X();H0.exports=J9;async function J9(e){try{let{schema_table:t,attributes:r}=$9(e);V9(e,r,t.hash_attribute),e.schema!==u_.SYSTEM_SCHEMA_NAME&&(r.includes(u_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(u_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(u_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(u_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await K9(e.hdb_auth_header,t,r),s=z9(e.schema,e.table),i=await W9.openEnvironment(s,e.table),o=await Y9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await j9(e,o)}catch(c){Q9.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(J9,"lmdbUpdateRecords")});var G0=P((DOe,F0)=>{"use strict";var X9=(G(),D($)).OPERATIONS_ENUM,Yy=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=X9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};F0.exports=Yy});var $0=P((vOe,q0)=>{"use strict";var MOe=G0(),Z9=Ff(),e7=ff(),t7=Km(),d_=(G(),D($)),r7=Cc().upsertRecords,n7=ht(),{getSchemaPath:s7}=gt(),i7=t_(),o7=X(),{handleHDBError:a7,hdb_errors:c7}=he();q0.exports=l7;async function l7(e){let t;try{t=Z9(e)}catch(l){throw a7(l,l.message,c7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;e7(e,n,r.hash_attribute),e.schema!==d_.SYSTEM_SCHEMA_NAME&&(n.includes(d_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(d_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(d_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(d_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await t7(e.hdb_auth_header,r,n),i=s7(e.schema,e.table),o=await n7.openEnvironment(i,e.table),c=await r7(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await i7(e,c)}catch(l){o7.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(l7,"lmdbUpsertRecords")});var K0=P((xOe,V0)=>{"use strict";var Wy=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};V0.exports=Wy});var W0=P((HOe,Y0)=>{"use strict";var zy=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}};Y0.exports=zy});var Q0=P((GOe,j0)=>{"use strict";var jy=ht(),{getTransactionAuditStorePath:u7}=gt(),FOe=K0(),f_=Ft(),d7=oe(),z0=W0(),f7=require("util").promisify,_7=f7(setTimeout),h7=1e4,p7=100;j0.exports=m7;async function m7(e){let t=u7(e.schema,e.table),r=await jy.openEnvironment(t,e.table,!0),n=jy.listDBIs(r);jy.initializeDBIs(r,f_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new z0;do s=await E7(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 _7(p7);while(s.transactions_deleted>0);return i}a(m7,"deleteAuditLogsBefore");async function E7(e,t){let r=new z0;try{let n=e.dbis[f_.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[f_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];d7.isEmpty(c)||(s=e.dbis[f_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[f_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>h7)break}return await s,r}catch(n){throw n}}a(E7,"deleteTransactions")});var X0=P(($Oe,J0)=>{"use strict";var Qy=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};J0.exports=Qy});var ex=P((YOe,Z0)=>{"use strict";var g7=Ys(),S7=c_(),KOe=X0(),wi=(G(),D($)),T7=oe(),Jy=ht(),A7=oo(),R7=a_(),y7=n_(),{getSchemaPath:b7}=gt();Z0.exports=O7;async function O7(e,t=!0){let r;e.schema===wi.SYSTEM_SCHEMA_NAME?r=A7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await w7(e),s=b7(e.schema,e.table),i=await Jy.openEnvironment(s,e.table);return t===!0&&await N7(e,i,r.hash_attribute),Jy.dropDBI(i,e.attribute),n}a(O7,"lmdbDropAttribute");async function N7(e,t,r){let n=Jy.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 f in c)f!==i&&(u[f]=c[f]);s=t.dbis[r].put(o,u,l)}await s}a(N7,"removeAttributeFromAllObjects");async function w7(e){let t=new g7(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await R7(t)).filter(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(T7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new S7(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return y7(i)}a(w7,"dropAttributeFromSystem")});var ox=P((jOe,ix)=>{"use strict";var Xy=ht(),hu=Ft(),zOe=ln(),Zy=(G(),D($)),tx=oe(),{getTransactionAuditStorePath:I7}=gt(),C7=du(),eE=cu(),P7=X();ix.exports=D7;async function D7(e){let t=I7(e.schema,e.table),r=await Xy.openEnvironment(t,e.table,!0),n=Xy.listDBIs(r);Xy.initializeDBIs(r,hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return rx(r,e.search_values);case Zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,M7(r,e.search_values,s);case Zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return L7(r,e.search_values);default:return rx(r)}}a(D7,"readAuditLog");function rx(e,t=[0,Date.now()]){tx.isEmpty(t[0])&&(t[0]=0),tx.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[hu.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 eE,s))}a(rx,"searchTransactionsByTimestamp");function L7(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[hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,sx(e,i))}return Object.fromEntries(r)}a(L7,"searchTransactionsByUsername");function M7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=C7.equals(e,hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let h=Number(d);n.has(h)?n.get(h).push(u.toString()):n.set(h,[u.toString()])}}let s=Array.from(n.keys()),i=sx(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);nx(l,"records",r,f,o),nx(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(M7,"searchTransactionsByHashValues");function nx(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),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new eE(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new eE(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(nx,"loopRecords");function sx(e,t){let r=[];try{let n=e.dbis[hu.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 eE,i);r.push(o)}}catch(i){P7.warn(i)}return r}catch(n){throw n}}a(sx,"batchSearchTransactions")});var cx=P((ZOe,ax)=>{"use strict";var{getSchemaPath:JOe}=gt(),XOe=ht(),{database:v7}=(Ue(),D(at));ax.exports={writeTransaction:U7};async function U7(e,t,r){return v7({database:e,table:t}).transaction(r)}a(U7,"writeTransaction")});var fx=P((tNe,dx)=>{"use strict";var{getSchemaPath:lx}=gt(),ux=ht();dx.exports={flush:x7,resetReadTxn:B7};async function x7(e,t){return(await ux.openEnvironment(lx(e,t),t.toString())).flushed}a(x7,"flush");async function B7(e,t){try{(await ux.openEnvironment(lx(e,t),t.toString())).resetReadTxn()}catch{}}a(B7,"resetReadTxn")});var mx=P((nNe,px)=>{"use strict";var{Readable:H7}=require("stream"),{getDatabases:k7}=(Ue(),D(at)),{readSync:F7,openSync:G7,createReadStream:_x}=require("fs"),{open:q7}=require("lmdb"),hx=Uf(),$7=xf(),{AUDIT_STORE_OPTIONS:V7}=(so(),D(Ex)),{INTERNAL_DBIS_NAME:K7,AUDIT_STORE_NAME:Y7}=Ft();px.exports=z7;var eb=32768,W7=100;async function z7(e){let t=e.database||e.schema||"data",r=k7()[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 f=u.dbisDB,d=q7({noSync:!0,maxDbs:$7.MAX_DBS}),h,_=d.openDB(K7,new hx(!1)),p=f.useReadTransaction(),S=0,g=a(async function(E,T){T.encoding="binary",T.encoder=void 0;let O=d.openDB(E,T),v=f.openDB(E,T);for(let{key:F,version:q,value:j}of v.getRange({start:null,transaction:p,versions:v.useVersions}))h=O.put(F,j,q),S++%W7===0&&(await new Promise(te=>setTimeout(te,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:E,value:T}of f.getRange({transaction:p,start:!1}))if(s.some(O=>E.startsWith?.(O+"/"))){_.put(E,T);let[,O]=E.split("/"),v=!O,F=new hx(!v,v);await g(E,F)}e.include_audit&&await g(Y7,{...V7}),await h;let R=_x(d.path);return R.headers=l(),R.on("close",()=>{p.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=G7(o.path);return o.transaction(()=>{let u=Buffer.alloc(eb);F7(c,u,0,eb),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=_x(null,{fd:c,start:eb}),h=new H7.from(async function*(){yield u;for await(let _ of d)f.openTimer&&(f.openTimer=0),yield _;f.done()}());return h.headers=l(),h});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(z7,"getBackup")});var Tx=P((iNe,Sx)=>{"use strict";var j7=X(),{handleHDBError:Q7}=he(),J7=jL(),X7=Pm(),Z7=by(),eee=LU(),tee=n_(),ree=Dy(),nee=s0(),see=_0(),iee=a_(),oee=A0(),aee=L0(),cee=B0(),lee=k0(),uee=$0(),dee=Q0(),fee=ky(),_ee=ex(),hee=ox(),pee=cx(),gx=fx(),mee=mx(),tb=class extends J7{static{a(this,"LMDBBridge")}async searchByConditions(t){return oee(t)}async getDataByHash(t){return await ree(t)}async searchByHash(t){return await nee(t)}async getDataByValue(t,r){return await see(t,r)}async searchByValue(t){return await iee(t)}async createSchema(t){return await eee(t)}async dropSchema(t){return await aee(t)}async createTable(t,r){return await cee(t,r)}async dropTable(t){return await fee(t)}async createAttribute(t){return await X7(t)}async createRecords(t){return await Z7(t)}async updateRecords(t){return await lee(t)}async upsertRecords(t){try{return await uee(t)}catch(r){throw Q7(r,null,null,j7.ERR,r)}}async deleteRecords(t){return await tee(t)}async dropAttribute(t){return await _ee(t)}async deleteAuditLogsBefore(t){return await dee(t)}async readAuditLog(t){return await hee(t)}writeTransaction(t,r,n){return pee.writeTransaction(t,r,n)}flush(t,r){return gx.flush(t,r)}resetReadTxn(t,r){return gx.resetReadTxn(t,r)}getBackup(t){return mee(t)}};Sx.exports=tb});var nb={};Be(nb,{add:()=>tE,applyReverse:()=>Ax,getRecordAtTime:()=>rb,rebuildUpdateBefore:()=>rE});function tE(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 rE(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,tE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Ax(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Eee[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Rx}}function rb(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Ct(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":Ax(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===Rx&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Ct(l),f;switch(u.type){case"put":f=u.getValue(r);break;case"patch":f=u.getValue(r);break}for(let d in f)o[d]&&(s[d]=f[d],o[d]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var Eee,Rx,nE=be(()=>{so();a(tE,"add");tE.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)};Eee={add:tE};a(rE,"rebuildUpdateBefore");a(Ax,"applyReverse");Rx={};a(rb,"getRecordAtTime")});function Tn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function aE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a string, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(h=>typeof h=="string")||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a string, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="number"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a number, attempt to assign ${h}`);Tn(this)[l]=d},"set");break;case"Int":u=a(function(d){let h=d?.__op__?d.value:d;if(!(h>>0===h||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Long":u=a(function(d){let h=d?.__op__?d.value:d;if(!(Math.round(h)===d&&Math.abs(h)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="bigint"||d==null&&c.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),d?.__op__?d.value=h:d=h;else throw new Vn.ClientError(`${l} must be a number, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a boolean, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Date":u=a(function(d){if(!(d instanceof Date||d==null&&c.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Vn.ClientError(`${l} must be a Date, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof gi||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);Tn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){Tn(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new Vn.ClientError(`${l} must be an object, attempt to assign ${d}`);Tn(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let _=d[l];if(_?.__op__){let p=this.getRecord()?.[l];return _.update(p)}return _}let h=this.getRecord()?.[l];if(h&&typeof h=="object"){let _=sb(h,c);if(_)return d||this._setChanges(d=Object.create(null)),d[l]=_}return h},set:u,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,n[l]=f,(!(l in r)||Object.getOwnPropertyDescriptor(r,l)?.get?.isAttribute)&&Object.defineProperty(r,l,f)}i("getProperty",function(c){let l=n[c];if(l)return l.get.call(this);let u=this.getChanges();return u?.[c]!==void 0?u[c]:this.getRecord()?.[c]}),i("set",function(c,l){let u=n[c];if(u)return u.set.call(this,l);if(t.sealed)throw new Vn.ClientError("Can not add a property to a sealed table schema");Tn(this)[c]=l}),i("deleteProperty",function(c){Tn(this)[c]=void 0}),i("toJSON",function(){let c=this.getChanges?.(),l;for(let f in c){l||(l={...this.getRecord()});let d=c[f];if(d?.__op__){let h=l[f];d=d.update(h)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,bx);break}o=c}while(o&&o!==bx)}function sb(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends __{static{a(this,"TrackedObject")}},aE(r,t)),new r(e)):new __(e);case Array:let n=new iE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=sb(o,t?.elements)),n[s]=o}return n;default:return e}}function cE(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=cE(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 qc(e,t=e.getChanges?.()){let r;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=qc(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?.()});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=nb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=qc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)gee.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function sE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Gc]||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(sE(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(sE(s))return!0}else return!0}else return!0}}return!1}var Vn,yx,bx,__,gee,Gc,iE,oE,ib=be(()=>{Vn=M(he());nE();fs();a(Tn,"getChanges");a(aE,"assignTrackedAccessors");yx=Object.prototype,bx=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(yx[t])return yx[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=sb(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(sb,"trackObject");__=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}};aE(__,{});a(cE,"collapseData");gee=Object.prototype.hasOwnProperty;a(qc,"updateAndFreeze");a(sE,"hasChanges");Gc=Symbol.for("has-array-changes"),iE=class extends Array{static{a(this,"TrackedArray")}#e;[Gc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Gc]=!0,super.splice(...t)}push(...t){return this[Gc]=!0,super.push(...t)}pop(){return this[Gc]=!0,super.pop()}unshift(...t){return this[Gc]=!0,super.unshift(...t)}shift(){return this[Gc]=!0,super.shift()}};iE.prototype.constructor=Array;oE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Lx={};Be(Lx,{ResourceBridge:()=>cb});function lb({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 Nx(e,t){let r=Ii(e),n=lb(e,r);if(!r)throw new Ws.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;It(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++],f;try{f=await r.get({id:u,lazy:s,select:n},i),f=f&&cE(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ii(e){let t=e.database||e.schema||Tee,r=Ze()[t];if(!r)throw(0,Ws.handleHDBError)(new Error,See.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function wx(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*Ix(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:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);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:[f]}}}s&&(yield s)}var Cx,lE,Ws,Px,ob,ab,Dx,See,Tee,Aee,Ree,Ox,cb,Mx=be(()=>{"use strict";Cx=M(Tx()),lE=M(fu()),Ws=M(he());Ue();Px=M(Ff());G();ob=M(_o()),ab=M(Ks()),Dx=M(oe());hc();ib();({HDB_ERROR_MSGS:See}=Ws.hdb_errors),Tee="data",Aee=1e4,Ree=10,cb=class extends Cx.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Ox=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,lE.default)(t,"conditions");if(r)throw(0,Ws.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ii(t);if(!n)throw new Ws.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:lb(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ws.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}]}_t({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ii(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ii(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:f,version:d}=r.primaryStore.getEntry(o);return i(o,f,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ii(t).dropTable()}createSchema(t){return pu({database:t.schema,table:null}),ob.signalSchemaChange(new ab.SchemaEventMsg(process.pid,Yt.CREATE_SCHEMA,t.schema))}async dropSchema(t){await ub(t.schema),ob.signalSchemaChange(new ab.SchemaEventMsg(process.pid,Yt.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,Ox.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Px.default)(t),s,i=Ze()[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),It(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(h=>h.name==f)||s.push(f);s.length>0&&await i.addAttributes(s.map(f=>({name:f,indexed:!0})))}let l=[],u=[];for(let f of t.records){let d=f[i.primaryKey],h=d!=null&&await i.get(d,o);if(t.requires_existing&&!h||t.requires_no_existing&&h){u.push(f[i.primaryKey]);continue}h&&(h=cE(h));for(let _ in f)if(Object.prototype.hasOwnProperty.call(f,_)){let p=f[_];if(typeof p=="function")try{let S=p([[h]]);Array.isArray(S)&&(p=S[0].func_val,f[_]=p)}catch(S){throw S.message+="Trying to set key "+_+" on object"+JSON.stringify(f),S}}if(h)for(let _ in h)Object.prototype.hasOwnProperty.call(f,_)||(f[_]=h[_]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Ze()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),It(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 wx(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Ze()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ws.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:Np.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,Dx.async_set_timeout)(Ree),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%Aee===0&&await u();return l.length>0&&await u(),s?wx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,lE.default)(t,"hashes");if(r)throw r;return Nx(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Nx(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&aA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,lE.default)(t,"value");if(n)throw n;let s=Ii(t);if(!s)throw new Ws.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Np.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:lb(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ii(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){Ii({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ii(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ii(t),n={};switch(t.search_type){case wp.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case wp.USERNAME:let s=t.search_values;for await(let i of Ix(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Ix(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(lb,"getSelect");a(Nx,"getRecords");a(Ii,"getTable");a(wx,"createDeleteResponse");a(Ix,"groupRecordsInHistory")});var Fn=P((gNe,vx)=>{"use strict";var{ResourceBridge:yee}=(Mx(),D(Lx)),bee=ce();bee.initSync();var uE;function Oee(){return uE||(uE=new yee,uE)}a(Oee,"getBridge");vx.exports=Oee()});var gn=P((TNe,Hx)=>{"use strict";var fE=iR(),Mr=oe(),Nee=require("util"),_E=Fn(),wee=$s(),Ux=X(),{handleHDBError:$c,hdb_errors:Iee}=he(),{HTTP_STATUS_CODES:Vc}=Iee,Cee=Nee.promisify(wee.getTableSchema),Pee="updated",xx="inserted",Bx="upserted";Hx.exports={insert:Lee,update:Mee,upsert:vee,validation:Dee,flush:Uee};async function Dee(e){if(Mr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Mr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Mr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Cee(e.schema,e.table),r=fE(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&&Mr.isEmptyOrZeroLength(c[n]))throw Ux.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(!Mr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Ux.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Mr.isEmpty(c[n])&&c[n]!==""&&s.has(Mr.autoCast(c[n]))&&(c.skip=!0),s.add(Mr.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(Dee,"validation");async function Lee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=fE(e);if(t)throw $c(new Error,t.message,Vc.BAD_REQUEST);Mr.transformReq(e);let r=Mr.checkSchemaTableExist(e.schema,e.table);if(r)throw $c(new Error,r,Vc.BAD_REQUEST);let n=await _E.createRecords(e);return dE(xx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Lee,"insertData");async function Mee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=fE(e);if(t)throw $c(new Error,t.message,Vc.BAD_REQUEST);Mr.transformReq(e);let r=Mr.checkSchemaTableExist(e.schema,e.table);if(r)throw $c(new Error,r,Vc.BAD_REQUEST);let n=await _E.updateRecords(e);return Mr.isEmpty(n.existing_rows)?dE(Pee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):dE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Mee,"updateData");async function vee(e){if(e.operation!=="upsert")throw $c(new Error,"invalid operation, must be upsert",Vc.INTERNAL_SERVER_ERROR);let t=fE(e);if(t)throw $c(new Error,t.message,Vc.BAD_REQUEST);Mr.transformReq(e);let r=Mr.checkSchemaTableExist(e.schema,e.table);if(r)throw $c(new Error,r,Vc.BAD_REQUEST);let n=await _E.upsertRecords(e);return dE(Bx,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(vee,"upsertData");function dE(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===xx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Bx?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(dE,"returnObject");function Uee(e){return Mr.transformReq(e),_E.flush(e.schema,e.table)}a(Uee,"flush")});var Vx=P((RNe,$x)=>{var mu=require("validate.js"),Fx=nt(),Eu=(G(),D($)),{handleHDBError:xee,hdb_errors:Bee}=he(),{HDB_ERROR_MSGS:jt,HTTP_STATUS_CODES:Hee}=Bee,db=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),kee={STRUCTURE_USER:"structure_user"},kx=Object.values(Eu.ROLE_TYPES_ENUM),Fee="attribute_permissions",Gee="attribute_name",{PERMS_CRUD_ENUM:gu}=Eu,qee=[Fee,...Object.values(gu)],Gx=[gu.READ,gu.INSERT,gu.UPDATE],$ee=[Gee,...Gx];function Vee(e){let t=db();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,qx(e,t)}a(Vee,"addRoleValidation");function Kee(e){let t=db();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,qx(e,t)}a(Kee,"alterRoleValidation");function Yee(e){let t=db();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Fx.validateObject(e,t)}a(Yee,"dropRoleValidation");var Wee=["operation","role","id","permission","hdb_user","access"];function qx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Wee.includes(n[o])||s.push(n[o]);s.length>0&&nr(jt.INVALID_ROLE_JSON_KEYS(s),r);let i=Fx.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nr(o,r)}),e.permission){let o=zee(e);o&&nr(o,r),kx.forEach(c=>{e.permission[c]&&!mu.isBoolean(e.permission[c])&&nr(jt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(kx.indexOf(o)<0){if(o===kee.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,f=l.length;u<f;u++){let d=l[u];global.hdb_schema[d]||nr(jt.SCHEMA_NOT_FOUND(d),r)}continue}nr(jt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nr(jt.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]){nr(jt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{qee.includes(f)||nr(jt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(gu).forEach(f=>{mu.isDefined(u[f])?mu.isBoolean(u[f])||nr(jt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):nr(jt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){nr(jt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){nr(jt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:h})=>h),d={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let _=u.attribute_permissions[h];if(Object.keys(_).forEach(S=>{!$ee.includes(S)&&S!==gu.DELETE&&nr(jt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!mu.isDefined(_.attribute_name)){nr(jt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let p=_.attribute_name;if(!f.includes(p)){nr(jt.INVALID_ATTRIBUTE_IN_PERMS(p),r,o,l);continue}Gx.forEach(S=>{mu.isDefined(_[S])?mu.isBoolean(_[S])||nr(jt.ATTR_PERM_NOT_BOOLEAN(S,p),r,o,l):nr(jt.ATTR_PERM_MISSING(S,p),r,o,l)}),!d.read&&_.read===!0&&(d.read=!0),!d.insert&&_.insert===!0&&(d.insert=!0),!d.update&&_.update===!0&&(d.update=!0)}if(u.read===!1&&d.read===!0||u.insert===!1&&d.insert===!0||u.update===!1&&d.update===!0){let h=`${o}.${l}`;nr(jt.MISMATCHED_TABLE_ATTR_PERMS(h),r,o,l)}}}}return jee(r)}a(qx,"customValidate");$x.exports={addRoleValidation:Vee,alterRoleValidation:Kee,dropRoleValidation:Yee};function zee(e){let{operation:t,permission:r}=e;if(t===Eu.OPERATIONS_ENUM.ADD_ROLE||t===Eu.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 jt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Eu.ROLE_TYPES_ENUM.SUPER_USER:Eu.ROLE_TYPES_ENUM.CLUSTER_USER;return jt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(zee,"validateNoSUPerms");function jee(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:jt.ROLE_PERMS_ERROR,...e};return xee(new Error,n,Hee.BAD_REQUEST)}else return null}a(jee,"generateRolePermResponse");function nr(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(nr,"addPermError")});var p_=P((ONe,zx)=>{"use strict";var Kx=gn(),Yx=Vr(),Qee=Uc(),_b=Vx(),hb=_o(),bNe=require("uuid").v4,Jee=require("util"),hE=(G(),D($)),Xee=oe(),pb=Yx.searchByValue,Zee=Yx.searchByHash,ete=Jee.promisify(Qee.delete),tte=Ys(),rte=_u(),{hdb_errors:nte,handleHDBError:Kc}=he(),{HDB_ERROR_MSGS:Wx,HTTP_STATUS_CODES:h_}=nte,{UserEventMsg:mb}=Ks();zx.exports={addRole:ste,alterRole:ite,dropRole:ote,listRoles:ate};function fb(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(fb,"scrubRoleDetails");async function ste(e){let t=_b.addRoleValidation(e);if(t)throw t;e=fb(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await pb(r)||[])}catch(i){throw Kc(i)}if(n&&n.length>0)throw Kc(new Error,Wx.ROLE_ALREADY_EXISTS(e.role),h_.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 Kx.insert(s),hb.signalUserChange(new mb(process.pid)),e=fb(e),e}a(ste,"addRole");async function ite(e){let t=_b.alterRoleValidation(e);if(t)throw t;e=fb(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Kx.update(r)}catch(s){throw Kc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Kc(new Error,"Invalid role id",h_.BAD_REQUEST,void 0,void 0,!0);return await hb.signalUserChange(new mb(process.pid)),e}a(ite,"alterRole");async function ote(e){let t=_b.dropRoleValidation(e);if(t)throw Kc(new Error,t,h_.BAD_REQUEST,void 0,void 0,!0);let r=new rte(hE.SYSTEM_SCHEMA_NAME,hE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Zee(r));if(n.length===0)throw Kc(new Error,Wx.ROLE_NOT_FOUND,h_.NOT_FOUND,void 0,void 0,!0);let s=new tte(hE.SYSTEM_SCHEMA_NAME,hE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await pb(s)),o=!1;if(Xee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Kc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,h_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await ete(c),hb.signalUserChange(new mb(process.pid)),`${n[0].role} successfully deleted`}a(ote,"dropRole");async function ate(){return pb({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(ate,"listRoles")});var Eb={};Be(Eb,{start:()=>Jx,startOnMainThread:()=>ute});function Jx({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,jx.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(cte.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 f=[];for(let d in u.attributes){let h=u.attributes[d];h.attribute_name=d,f.push(h)}u.attribute_permissions=f,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 f of u.attribute_permissions)f.read=!!f.read,f.insert=!!f.insert,f.update=!!f.update}else u.attribute_permissions=null}}i.role=i.id=s,await lte(i)}}}async function lte(e){let t=Ze().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Qx.isEqual)(i,e)?void 0:(e.id=r.id,(0,pE.alterRole)(e))}return(0,pE.addRole)(e)}var pE,jx,Qx,cte,ute,Xx=be(()=>{Ue();pE=M(p_()),jx=require("yaml"),Qx=require("lodash"),cte=["super_user","cluster_user","structure_user"];a(Jx,"start");a(lte,"ensureRole");ute=Jx});async function mE(e){let t=(0,tB.pathToFileURL)(e).toString();if(dte)return m_||(m_=fte(hte)),(await(await m_).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function fte(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),m_=new Compartment({console,Math,Date,fetch:_te,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,eB.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:qr,tables:Kn,databases:Ye})}};let n=await(0,Zx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),m_}function _te(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 hte(){return{Resource:qr,tables:Kn}}var Zx,eB,tB,dte,m_,gb=be(()=>{na();Ue();Zx=require("fs/promises"),eB=require("path"),tB=require("url"),dte=!1;a(mE,"secureImport");a(fte,"getCompartment");a(_te,"secureOnlyFetch");a(hte,"getGlobalVars")});var Tb={};Be(Tb,{handleFile:()=>pte});async function pte(e,t,r,n){let s=new Map,i=await mE(r);c(i.default)&&n.set((0,Sb.dirname)(t),i.default),o(i,(0,Sb.dirname)(t));function o(l,u){for(let f in l){let d=l[f];c(d)?n.set(u+"/"+f,d):typeof d=="object"&&o(d,u+"/"+f)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var Sb,rB=be(()=>{gb();Sb=require("path");a(pte,"handleFile")});var Rb={};Be(Rb,{start:()=>mte});function mte({resources:e}){e.set("login",Ab),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Ab,nB=be(()=>{na();a(mte,"start");Ab=class extends qr{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)}}}});var R_={};Be(R_,{addAnalyticsListener:()=>A_,calculateCPUUtilization:()=>RB,diffResourceUsage:()=>yB,recordAction:()=>Dt,recordActionBinary:()=>Yn,setAnalyticsEnabled:()=>Ete});function Ete(e){EB=e}function gte(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 Ste(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},gE.set(e,o)}function Dt(e,t,r,n,s){if(!EB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=gE.get(i);o?gte(e,o):Ste(i,e,t,r,n,s),EE||Tte()}function Yn(e,t,r,n,s){Dt(!!e,t,r,n,s)}function A_(e){TB.push(e)}function Tte(){EE=performance.now(),setTimeout(async()=>{let e=performance.now()-EE;EE=0;let t=[],r={time:Date.now(),period:e,threadId:Yc.threadId,metrics:t};for(let[s,i]of gE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of AB){let h=Math.floor(c*d),_=o[h-1];if(h>l){let p=h-l;if(_===f){let S=u[u.length-1];typeof S=="number"?u[u.length-1]={value:S,count:1+p}:S.count+=p}else u.push(p>1?{value:_,count:p}:_),f=_;l=h}}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 bB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Yc.threadId,byThread:!0,...n});for(let s of TB)s(t);gE=new Map,Yc.parentPort?Yc.parentPort.postMessage({type:SB,report:r}):wB({report:r})},gB).unref()}function SE(e,t,r){let n={id:(0,S_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function RB(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function yB(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(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 Ate(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};SE(e,"table-size",l),Wc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function sB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=mB.default.statSync(s.primaryStore.env.path).size,c=Ate(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};SE(e,"database-size",u),Wc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wc.warn?.("Error getting DB size metrics",s)}}function iB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={database:r,...i};SE(e,"storage-volume",o),Wc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Wc.warn?.("Error getting DB volume metrics",s)}}async function Rte(e,t=6e4){let r=bb(),n=OB(),s=new Promise(E=>{let T=performance.now();setImmediate(()=>{let O=performance.now();O-T>5e3&&Wc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-T)+"ms"),T=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-T>5e3&&Wc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-T)+"ms"),E(O-T)})}),i;for(let E of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(E.value?.time){i=E.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],f;for(let{key:E,value:T}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!T)continue;if(o){if(E>o+t)break}else o=E;f=E;let{metrics:O,threadId:v}=T;for(let F of O||[]){let{path:q,method:j,type:te,metric:se,count:z,total:ne,distribution:le,threads:ie,...Re}=F;z||(z=1);let pe=se+(q?"-"+q:"");j!==void 0&&(pe+="-"+j),te!==void 0&&(pe+="-"+te);let Ae=c.get(pe);if(Ae){if(Ae.threads){let dt=Ae.threads[v];if(dt)Ae=dt;else{Ae.threads[v]={...Re};continue}}Ae.count||(Ae.count=1);let xt=Ae.count;for(let dt in Re){let Cn=Re[dt];typeof Cn=="number"&&(Ae[dt]=(Ae[dt]*xt+Cn*z)/(xt+z))}Ae.count+=z,ne>=0&&(Ae.total+=ne,Ae.ratio=Ae.total/Ae.count)}else Ae={period:t,...F},delete Ae.distribution,c.set(pe,Ae),Ae.byThread&&(Ae.threads=[],Ae.threads[v]={...Re},u.push(Ae));if(le){le=le.map(dt=>typeof dt=="number"?{value:dt,count:1}:dt);let xt=l.get(pe);xt?xt.push(...le):l.set(pe,le)}}await bB()}for(let E of u){let{path:T,method:O,type:v,metric:F,count:q,total:j,distribution:te,threads:se,...z}=E;se=se.filter(ne=>ne);for(let ne in z){if(typeof E[ne]!="number")continue;let le=0;for(let ie of se){let Re=ie[ne];typeof Re=="number"&&(le+=Re)}E[ne]=le}E.count=se.length,delete E.threads,delete E.byThread}for(let[E,T]of l){let O=c.get(E);T.sort((dt,Cn)=>dt.value>Cn.value?1:-1);let v=O.count-1,F=[],q=0,j=0,te;for(let dt of AB){let Cn=v*dt;for(;q<Cn;)te=T[j++],q+=te.count,j===1&&q--;let nn=T[j>1?j-2:0];te||(te=T[0]),F.push(te.value-(te.value-nn.value)*(q-Cn)/te.count)}let[se,z,ne,le,ie,Re,pe,Ae,xt]=F;Object.assign(O,{p1:se,p10:z,p25:ne,median:le,p75:ie,p90:Re,p95:pe,p99:Ae,p999:xt})}let d;for(let[E,T]of c)T.id=(0,S_.getNextMonotonicTime)(),T.time=f,n.primaryStore.put(T.id,T,{append:!0}).then(O=>{O||n.primaryStore.put(T.id,T)}),d=!0;let h=Date.now(),{idle:_,active:p}=performance.eventLoopUtilization();if(d||p*10>_){let E=(0,S_.getNextMonotonicTime)(),T={id:E,metric:"main-thread-utilization",idle:_-oB,active:p-aB,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(E,T,{append:!0}).then(O=>{O||n.primaryStore.put(E,T)})}oB=_,aB=p;let S=process.resourceUsage(),g=yB(E_,S);g.time=h,g.period=E_.time?h-E_.time:t,g.cpuUtilization=RB(E_,g.period),SE(n,"resource-usage",g),E_=g;let R=Ze();sB(n,R),sB(n,{system:R.system}),iB(n,R),iB(n,{system:R.system})}async function cB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function bb(){return lB||(lB=_t({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function OB(){return uB||(uB=_t({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Ote(){NB=!0;let e=(0,T_.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Rte(gB,e),await cB(bb(),yte),await cB(OB(),bte)},Math.min(e/2,2147483647)).unref()}function wB(e,t){let r=e.report;r.threadId=t?.threadId||Yc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(dB+=n.mean*n.count);r.totalBytesProcessed=dB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(fB.get(t))}),fB.set(t,t.performance.eventLoopUtilization())),r.id=(0,S_.getNextMonotonicTime)(),bb().primaryStore.put(r.id,r),NB||Ote(),Nte&&(IB=Ite(r))}async function Ite(e){if(await IB,!_a){let r=(0,g_.dirname)((0,hB.getLogFilePath)());try{_a=await(0,yb.open)((0,g_.join)(r,"analytics.log"),"r+")}catch{_a=await(0,yb.open)((0,g_.join)(r,"analytics.log"),"w+")}}let t=(await _a.stat()).size;if(t>wte){let r=Buffer.alloc(t);await _a.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await _a.write(r,{position:0}),await _a.truncate(r.length),t=r.length}await _a.write(JSON.stringify(e)+`
20
+ `,t)}var Yc,_B,hB,pB,g_,yb,S_,T_,mB,Wc,gE,EB,EE,gB,SB,TB,AB,oB,aB,E_,bB,yte,bte,lB,uB,NB,dB,fB,Nte,IB,_a,wte,Ci=be(()=>{Yc=require("worker_threads"),_B=M(st());Ue();hB=M(X()),pB=M(mi()),g_=require("path"),yb=require("fs/promises"),S_=M(ln()),T_=M(ce());G();Dr();mB=M(require("node:fs")),Wc=(0,pB.loggerWithTag)("analytics");(0,T_.initSync)();gE=new Map,EB=(0,T_.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;a(Ete,"setAnalyticsEnabled");a(gte,"recordExistingAction");a(Ste,"recordNewAction");a(Dt,"recordAction");Ke.recordAnalytics=Dt;a(Yn,"recordActionBinary");EE=0,gB=1e3,SB="analytics-report",TB=[];a(A_,"addAnalyticsListener");AB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Tte,"sendAnalytics");a(SE,"storeMetric");a(RB,"calculateCPUUtilization");a(yB,"diffResourceUsage");a(Ate,"storeTableSizeMetrics");a(sB,"storeDBSizeMetrics");a(iB,"storeVolumeMetrics");a(Rte,"aggregation");oB=0,aB=0,E_={},bB=a(()=>new Promise(setImmediate),"rest");a(cB,"cleanup");yte=36e5,bte=31536e6;a(bb,"getRawAnalyticsTable");a(OB,"getAnalyticsTable");(0,_B.setChildListenerByType)(SB,wB);a(Ote,"startScheduledTasks");dB=0,fB=new Map,Nte=!1;a(wB,"recordAnalytics");wte=1e6;a(Ite,"logAnalytics")});var CB={};Be(CB,{Headers:()=>mo,appendHeader:()=>TE,mergeHeaders:()=>Ob});function TE(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 Ob(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new mo(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 mo,y_=be(()=>{mo=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(TE,"appendHeader");a(Ob,"mergeHeaders")});function vB(e){let t={openapi:Cte,info:{title:"HarperDB HTTP REST interface",version:MB.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},f=[];if(o)for(let{type:T,name:O,elements:v,relationship:F,definition:q}of o){if(F)T==="array"?u[O]={type:"array",items:{$ref:ha+v.type}}:u[O]={$ref:ha+T};else{let j=q??v?.definition;if(j){if(!t.components.schemas[j.type]){let te={};j.properties.forEach(se=>{te[se.name]=new Cb(Nb[se.type],se.type)}),t.components.schemas[j.type]=new LB(te)}T==="array"?u[O]={type:"array",items:{$ref:ha+j.type}}:u[O]={$ref:ha+j.type}}else T==="array"?v.type==="Any"||v.type=="ID"?u[O]={type:"array",items:{format:v.type}}:u[O]={type:"array",items:new Cb(Nb[v.type],v.type)}:T==="Any"||T=="ID"?u[O]={format:T}:u[O]=new Cb(Nb[T],T)}f.push(new Pb(O,"query",u[O]))}let d=Object.keys(u),h=new Pb(c,"path",{format:"ID"});h.required=!0,h.description="primary key of record";let _=new Pb("property","path",{enum:d});_.required=!0,t.components.schemas[i]=new LB(u);let p=l.post!==Resource.prototype.post||l.update,S=typeof l.put=="function",g=typeof l.get=="function",R=typeof l.delete=="function",E="/"+s+"/";p&&(t.paths[E]={},t.paths[E].post=new Pte(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[E]||(t.paths[E]={}),t.paths[E].get=new wb(f,r,{200:new Ib({$ref:ha+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new DB(f,r,"delete all the records that match the provided query",{204:new PB})),E="/"+s+"/{"+c+"}",g&&(t.paths[E]={},t.paths[E].get=new wb([h],r,{200:new Ib({$ref:ha+i})},"retrieve a record by its primary key")),S&&(t.paths[E]||(t.paths[E]={}),t.paths[E].put=new Dte([h],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new DB([h],r,"delete a record with the given primary key",{204:new PB})),g&&_.schema.enum.length>0&&(E="/"+s+"/{"+c+"}.{property}",t.paths[E]={},t.paths[E].get=new wb([h,_],r,{200:new Ib({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Pte(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:ha+e}}}},this.security=t,this.responses={200:{description:Db,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function wb(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Ib(e){this.description=Db,this.content={"application/json":{schema:e}}}function PB(){this.description="successfully processed request, no content returned to client"}function Dte(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:ha+r}}}},this.responses={200:{description:Db}}}function DB(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function LB(e){this.type="object",this.properties=e}function Cb(e,t){this.type=e,this.format=t}function Pb(e,t,r){this.name=e,this.in=t,this.schema=r}var MB,Cte,Nb,ha,Db,UB=be(()=>{MB=M(Et()),Cte="3.0.3",Nb={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},ha="#/components/schemas/",Db="successful operation";a(vB,"generateJsonApi");a(Pte,"Post");a(wb,"Get");a(Ib,"Response200");a(PB,"Response204");a(Dte,"Put");a(DB,"Delete");a(LB,"ResourceSchema");a(Cb,"Type");a(Pb,"Parameter")});var BB={};Be(BB,{Request:()=>b_,createReuseportFd:()=>AE});var xB,b_,Lb,Mb,AE,RE=be(()=>{xB=require("os"),b_=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new Mb(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new Lb(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},Lb=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)}},Mb=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,xB.platform)()!="win32"&&(AE=require("node-unix-socket").createReuseportFd)});var bE={};Be(bE,{parseHeaderValue:()=>Ub,start:()=>vte});async function Mte(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Qp(e);let i=new mo;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==HB){let g=yE.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new pc(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=Ub(g);for(let E of R)switch(E.name){case"max-age":e.expiresAt=E.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=Ub(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let d=await It(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=no(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Su.ClientError(g,400)}if(e.authorize=!0,o===HB&&s==="GET"){if(e?.user?.role?.permission?.super_user)return vB(yE);throw new Su.ServerError("Forbidden",403)}switch(s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Su.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Su.ServerError(`Method ${s} is not recognized`,501)}}),h=200,_;if(d==null)h=s==="GET"||s==="HEAD"?404:204,vb.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=Ob(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=If(d.data,e,d)),d}else if(_=e.lastModified){Lte[0]=_;let g=String.fromCharCode(34,(vr[0]&63)+62,(vr[0]>>6)+(vr[1]<<2&63)+62,(vr[1]>>4)+(vr[2]<<4&63)+62,(vr[2]>>2)+62,(vr[3]&63)+62,(vr[3]>>6)+(vr[4]<<2&63)+62,(vr[4]>>4)+(vr[5]<<4&63)+62,(vr[5]>>2)+62,(vr[6]&63)+62,(vr[6]>>6)+(vr[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(d?.onDone&&d.onDone(),h=304,d=void 0):i.setIfNone("ETag",g),vb.lastModified&&i.setIfNone("Last-Modified",new Date(_).toUTCString())}e.createdResource&&(h=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:h,headers:i,body:void 0},S=d?.wasLoadedFromSource?.();return S!==void 0&&(p.wasCacheMiss=S,!S&&_&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||_))/1e3))),d!==void 0&&(p.body=If(d,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(o){o.statusCode?o.statusCode===500?Pi.warn(o):Pi.info(o):Pi.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=If(o.contentType?o:o.toString(),e,c),c}}function vte(e){vb=e,e.includeExpensiveRecordCountEstimates&&(b_.prototype.includeExpensiveRecordCountEstimates=!0),!kB&&(kB=!0,yE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Mte(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{O_++;let s=new vn;FB||(FB=!0,A_(l=>{O_>0&&l.push({metric:"ws-connections",connections:O_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Pi.warn(l)});let o;t.on("message",a(function(u){o||(o=no(r.requestedContentType??r.headers.asObject["content-type"],!1));let f=o(u);Dt(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(f)},"message"));let c;t.on("close",()=>{O_--,Yn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=yE.getMatch(l,"ws");if(Yn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Dt(p=>({count:p.count,total:O_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new pc(u.relativeURL),d=u.Resource;c=(await It(r,()=>d.connect(f,s,r)))[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;){let p=await oa(_.value,r);t.send(p),Dt(p.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(S=>t._socket.once("drain",S))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Pi.warn(l):Pi.info(l):Pi.error(l),t.close(Ute[l.statusCode]||1011,l.toString())}t.close()},e))}function Ub(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 Pi,Su,vr,Lte,vb,HB,kB,yE,FB,O_,Ute,GB=be(()=>{eo();Ci();Pi=M(X()),Su=M(he());Ef();Kl();hc();y_();UB();Ef();RE();vr=new Uint8Array(8),Lte=new Float64Array(vr.buffer,0,1),vb={},HB="openapi";a(Mte,"http");O_=0;a(vte,"start");Ute={401:3e3,403:3003};a(Ub,"parseHeaderValue")});var xb=P((rwe,$B)=>{var{recordAction:OE,recordActionBinary:qB}=(Ci(),D(R_)),xte=require("fastify-plugin"),Bte=200;$B.exports=xte(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,f,d;l.config?.isOperation?(u=n.body?.operation,f="operation"):(u=l.url,f="fastify-route",d=l.method),OE(o,"duration",u,d,f),qB(s.raw.statusCode<400,"success",u,d,f),qB(1,"response_"+s.raw.statusCode,u,d,f);let h=Bte;i?.pipe?(i.on("data",g=>{h+=g.length}),i.on("end",()=>{OE(performance.now()-c,"transfer",u,d,f),OE(h,"bytes-sent",u,d,f)})):(h+=i?.length||0,OE(h,"bytes-sent",u,d,f));let _=o.toFixed(3),p=s.getHeader("Server-Timing"),S=`db;dur=${_}`;s.header("Server-Timing",p?`${p}, ${S}`:S)}),r()},{name:"hdb-request-time"})});var KB=P((nwe,VB)=>{var Hte=nt(),kte={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};VB.exports=function(e){return Hte.validateObject(e,kte)}});var NE=P((swe,YB)=>{"use strict";var Fte=(G(),D($)).OPERATIONS_ENUM,Bb=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Fte.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};YB.exports=Bb});var I_={};Be(I_,{createTokens:()=>qte,getJWTRSAKeys:()=>DE,refreshOperationToken:()=>$te,validateOperationToken:()=>Fb,validateRefreshToken:()=>LE});async function DE(){if(wE)return wE;try{let e=N_.default.join(w_.default.getHdbBasePath(),sA),t=await IE.default.readFile(N_.default.join(e,Qd.JWT_PASSPHRASE_NAME),"utf8"),r=await IE.default.readFile(N_.default.join(e,Qd.JWT_PRIVATE_KEY_NAME),"utf8");return wE={publicKey:await IE.default.readFile(N_.default.join(e,Qd.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},wE}catch(e){throw PE.default.error(e),new zs.ClientError(Au.NO_ENCRYPTION_KEYS,Tu.INTERNAL_SERVER_ERROR)}}async function qte(e){let t=(0,Hb.validateBySchema)(e,Di.default.object({username:Di.default.string().optional(),password:Di.default.string().optional(),role:Di.default.string().optional(),expires_in:Di.default.alternatives(Di.default.string(),Di.default.number()).optional()}));if(t)throw new zs.ClientError(t.message);let r;try{let d=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,d=!1),r=await(0,kb.findAndValidateUser)(e.username,e.password,d)}catch(d){throw PE.default.error(d),new zs.ClientError(Au.INVALID_CREDENTIALS,Tu.UNAUTHORIZED)}if(!r)throw new zs.ClientError(Au.INVALID_CREDENTIALS,Tu.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 DE(),c=await Ru.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??JB,algorithm:CE,subject:"operation"}),l=await Ru.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:Gte,algorithm:CE,subject:"refresh"}),u=iy(l,"sha256");if((await(0,WB.update)(new zB.default(jd,Fl.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new zs.ClientError(Au.REFRESH_TOKEN_SAVE_FAILED,Tu.INTERNAL_SERVER_ERROR);return jB.default.signalUserChange(new QB.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function $te(e){let t=(0,Hb.validateBySchema)(e,Di.default.object({refresh_token:Di.default.string().required()}).required());if(t)throw new zs.ClientError(t.message);let{refresh_token:r}=e;await LE(r);let n=await DE(),s=await Ru.default.decode(r);return{operation_token:await Ru.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:JB,algorithm:CE,subject:"operation"})}}async function Fb(e){return XB(e,"operation")}async function LE(e){return XB(e,"refresh")}async function XB(e,t){try{let r=await DE(),n=await Ru.default.verify(e,r.publicKey,{algorithms:CE,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,kb.findAndValidateUser)(n.username,void 0,!1);if(t==="refresh"&&!oy(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw PE.default.warn(r),r?.name==="TokenExpiredError"?new zs.ClientError(Au.TOKEN_EXPIRED,Tu.FORBIDDEN):new zs.ClientError(Au.INVALID_TOKEN,Tu.UNAUTHORIZED)}}var Ru,IE,N_,Di,Hb,zs,PE,kb,WB,zB,jB,QB,w_,Tu,Au,JB,Gte,CE,wE,yu=be(()=>{Ru=M(require("jsonwebtoken")),IE=M(require("fs-extra")),N_=M(require("node:path")),Di=M(require("joi")),Hb=M(nt());G();zs=M(he()),PE=M(X());Fm();kb=M(Gn()),WB=M(gn()),zB=M(NE()),jB=M(_o()),QB=M(Ks()),w_=M(ce()),{HTTP_STATUS_CODES:Tu,AUTHENTICATION_ERROR_MSGS:Au}=zs.hdb_errors;w_.default.initSync();JB=w_.default.get(B.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Gte=w_.default.get(B.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",CE="RS256";a(DE,"getJWTRSAKeys");a(qte,"createTokens");a($te,"refreshOperationToken");a(Fb,"validateOperationToken");a(LE,"validateRefreshToken");a(XB,"validateToken")});var Gb=P((lwe,tH)=>{"use strict";var Vte=KB(),bu=require("passport"),Kte=require("passport-local").Strategy,Yte=require("passport-http").BasicStrategy,Wte=require("util"),zte=Gn(),eH=Wte.callbackify(zte.findAndValidateUser),cwe=Dn(),jte=(G(),D($)),ZB=(yu(),D(I_));bu.use(new Kte(function(e,t,r){eH(e,t,r)}));bu.use(new Yte(function(e,t,r){eH(e,t,r)}));bu.serializeUser(function(e,t){t(null,e)});bu.deserializeUser(function(e,t){t(null,e)});function Qte(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":bu.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===jte.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?ZB.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):ZB.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:bu.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Qte,"authorize");function Jte(e,t){let r=Vte(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(Jte,"checkPermissions");tH.exports={authorize:Qte,checkPermissions:Jte}});var ME=P((dwe,rH)=>{"use strict";var Xte=Fn();rH.exports={writeTransaction:Zte};function Zte(e,t,r){return Xte.writeTransaction(e,t,r)}a(Zte,"writeTransaction")});var oH=P((hwe,iH)=>{"use strict";var ere=Vr(),tre=$s(),nH=X(),rre=gn(),_we=ME(),nre=require("clone"),$b=require("alasql"),sre=Lm(),sH=require("util"),ire=sH.promisify(tre.getTableSchema),ore=sH.promisify(ere.search),are=(G(),D($)),qb=oe();sre($b);iH.exports={update:lre};var cre="There was a problem performing this update. Please check the logs and try again.";async function lre({statement:e,hdb_user:t}){let r=await ire(e.table.databaseid,e.table.tableid),n=ure(e.columns);qb.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=nre(s),c=qb.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=$b.parse(l).statements[0],f=await ore(u),d=dre(n,f);return fre(o,d,t)}a(lre,"update");function ure(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=$b.compile(`SELECT ${r.expression.toString()} AS [${are.FUNC_VAL}] FROM ?`)}),t}catch(t){throw nH.error(t),new Error(cre)}}a(ure,"createUpdateRecord");function dre(e,t){return qb.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(dre,"buildUpdateRecords");async function fre(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await rre.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){nH.error(`Error delete new_attributes from update response: ${i}`)}return s}a(fre,"updateRecords")});var cH=P((gwe,aH)=>{var _re=require("alasql"),hre=Vr(),pre=X(),mre=Fn(),Kb=require("util"),Vb=oe(),Ere=(G(),D($)),gre=$s(),mwe=ME(),Ewe=gn(),Sre="record",Tre="successfully deleted",Are=Kb.callbackify(Ore),Rre=Kb.promisify(hre.search),yre=Kb.promisify(gre.getTableSchema);aH.exports={convertDelete:Are};function bre(e){return`${e.deleted_hashes.length} ${Sre}${e.deleted_hashes.length===1?"":"s"} ${Tre}`}a(bre,"generateReturnMessage");async function Ore({statement:e,hdb_user:t}){let r=await yre(e.table.databaseid,e.table.tableid);Vb.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Vb.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=_re.parse(o).statements[0],l={operation:Ere.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Rre(c);let u=await mre.deleteRecords(l);return Vb.isEmptyOrZeroLength(u.message)&&(u.message=bre(u)),delete u.txn_time,u}catch(u){throw pre.error(u),u.hdb_code?u.message:u}}a(Ore,"convertDelete")});var _H=P((Twe,fH)=>{"use strict";var Nre=uo(),{hdb_errors:lH}=he(),{getDatabases:uH}=(Ue(),D(at));fH.exports={checkSchemaExists:dH,checkSchemaTableExists:wre,schema_describe:Nre};async function dH(e){if(!uH()[e])return lH.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(dH,"checkSchemaExists");async function wre(e,t){let r=await dH(e);if(r)return r;if(!uH()[e][t])return lH.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wre,"checkSchemaTableExists")});var Qb=P((Owe,OH)=>{"use strict";var{decode:Ire}=require("msgpackr"),{isMainThread:Rwe,parentPort:ywe,threadId:bwe}=require("worker_threads"),xE=Er(),Ou=Pt(),zb=(G(),D($)),Wr=X(),Wb=ce(),Cre=(G(),D($)),{onMessageByType:Pre}=st(),EH=lo(),{recordAction:hH,recordActionBinary:Dre}=(Ci(),D(R_)),{publishToStream:Lre}=xE,{ConsumerEvents:pH}=require("nats"),Mre=Vr(),{promisify:vre}=require("util"),{decodeBlobsWithWrites:Ure}=(fs(),D(fm)),gH=vre(setTimeout),BE=1e4,HE,UE,xre,Bre,SH,C_=new Map,Nu=new Map;OH.exports={initialize:TH,ingestConsumer:jb,setSubscription:Hre,setIgnoreOrigin:Gre,getDatabaseSubscriptions:Fre,updateConsumer:AH};async function TH(){Pre(zb.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await AH(n)}),SH=!0,Wr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await xE.getNATSReferences();HE=e,UE=e.info.server_name,xre=t,Bre=r}a(TH,"initialize");async function AH(e){if(e.status==="start"){let{js:t,jsm:r}=await RH(e.node_domain_name);jb(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=C_.get(e.stream_name+e.node_domain_name);t&&(Wr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),C_.set(e.stream_name+e.node_domain_name,"close")),Nu.get(e.node_domain_name)==="failed"&&Nu.set(e.node_domain_name,"close")}}a(AH,"updateConsumer");var kE=new Map;function Hre(e,t,r){let n=kE.get(e);n||kE.set(e,n=new Map),n.set(t,r),SH||TH().then(kre)}a(Hre,"setSubscription");async function kre(){let e=await Mre.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Ou.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await RH(r),!n))break;let{schema:o,table:c}=i,l=EH.createNatsTableStreamName(o,c);jb(l,n,s,r)}}}a(kre,"accessConsumers");async function RH(e){let t,r,n=1;for(;!r;)try{t=await HE.jetstream({domain:e}),r=await HE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Nu.get(e)==="close")break;Nu.set(e,"failed"),n%10===1&&Wr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<BE?n++*100:BE;await gH(i)}return{js:t,jsm:r}}a(RH,"connectToRemoteJS");function Fre(){return kE}a(Fre,"getDatabaseSubscriptions");var yH;function Gre(e){yH=e}a(Gre,"setIgnoreOrigin");var bH=100,mH=new Array(bH),vE=0;async function jb(e,t,r,n){let{connection:s}=await xE.getNATSReferences();HE=s,UE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,UE),Wr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Nu.get(n)==="close")break;o%10===1&&Wr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Wr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await xE.createConsumer(r,e,UE,new Date(Date.now()).toISOString()));let f=o++*100<BE?o++*100:BE;await gH(f)}let c=!1,l;for(;!c;){if(C_.get(e+n)==="close"||Nu.get(n)==="close"){C_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Wb.get(zb.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),C_.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===pH.ConsumerDeleted&&(await l.close(),c=!0),f.type===pH.HeartbeatsMissed){let d=f.data;Wr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(Wr.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 f of l)await mH[vE],mH[vE]=qre(f).catch(d=>{Wr.error(d)}),++vE>=bH&&(vE=0)}catch(f){f.message==="consumer deleted"?(Wr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Wr.error("Error consuming clustering ingest, restarting consumer",f)}}}a(jb,"ingestConsumer");async function qre(e){let t;await Ure(()=>{t=Ire(e.data)}),hH(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Wr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Wb.get(zb.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Ou.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Ou.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Ou.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!yH),Dre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Ou.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:f,hash_values:d,__origin:h,expiresAt:_}=t;Wr.trace("processing message:",o,c,u,(f?"records: "+f.map(v=>v?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Wr.trace(`messageProcessor nats msg id: ${e.headers.get(Ou.MSG_HEADERS.NATS_MSG_ID)}`);let p;f||(f=d);let S=new Promise(v=>p=v),{timestamp:g,user:R,node_name:E}=h||{},T=kE.get(c)?.get(u);if(!T)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=p,T.send(t);else if(f.length===1&&!l)T.send({type:Yb(o),value:f[0],id:d?.[0],expiresAt:_,timestamp:g,table:u,onCommit:p,user:R,nodeName:E});else{let v=f.map((F,q)=>({type:Yb(o),value:F,expiresAt:_,id:d?.[q],table:u}));for(;l;)v.push({type:Yb(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;T.send({type:"transaction",writes:v,table:u,timestamp:g,onCommit:p,user:R,nodeName:E})}Wb.get(Cre.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Lre(e.subject.split(".").slice(0,-1).join("."),EH.createNatsTableStreamName(c,u),e.headers,e.data),await S;let O=Date.now()-g;g&&hH(O,"replication-latency",e.subject,o,"ingest")}catch(o){Wr.error(o)}e.ack()}a(qre,"messageProcessor");function Yb(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Yb,"convertOperation")});var Er=P((Lwe,qH)=>{"use strict";var Or=ce();Or.initSync();var $re=require("fs-extra"),Vre=require("semver"),L_=require("path"),{monotonicFactory:Kre}=require("ulidx"),wH=Kre(),Yre=require("util"),IH=require("child_process"),Wre=Yre.promisify(IH.exec),zre=IH.spawn,Ur=Pt(),je=(G(),D($)),{packageJson:jre,PACKAGE_ROOT:Qre}=Et(),FE=oe(),js=X(),GE=lo(),Jre=ME(),P_=wt(),{broadcast:Xre,onMessageByType:Zre,getWorkerIndex:ene}=st(),{isMainThread:CH}=require("worker_threads"),{Encoder:tne,decode:eO}=require("msgpackr"),PH=new tne,{isEmpty:Jc}=FE,DH=Gn(),wwe=48*36e11;CH&&Zre(je.ITC_EVENT_TYPES.RESTART,()=>{zr=void 0,Qc=void 0});var{connect:rne,StorageType:nne,RetentionPolicy:sne,AckPolicy:tO,DeliverPolicy:rO,DiscardPolicy:ine,NatsConnection:Iwe,JetStreamManager:Cwe,JetStreamClient:Pwe,StringCodec:Dwe,JSONCodec:one,createInbox:nO,headers:ane,ErrorCode:NH}=require("nats"),{recordAction:cne}=(Ci(),D(R_)),{encodeBlobsAsBuffers:lne}=(fs(),D(fm)),LH=one(),une="clustering",dne=jre.engines[Ur.NATS_SERVER_NAME],fne=L_.join(Qre,"dependencies"),Zb=L_.join(fne,`${process.platform}-${process.arch}`,Ur.NATS_BINARY_NAME),Jb,Xb,D_,zc,jc;qH.exports={runCommand:MH,checkNATSServerInstalled:_ne,createConnection:sO,getConnection:M_,getJetStreamManager:v_,getJetStream:UH,getNATSReferences:Li,getServerList:pne,createLocalStream:iO,listStreams:xH,deleteLocalStream:mne,getServerConfig:wu,listRemoteStreams:Ene,viewStream:gne,viewStreamIterator:Sne,publishToStream:Tne,request:yne,reloadNATS:oO,reloadNATSHub:bne,reloadNATSLeaf:One,extractServerName:Rne,requestErrorHandler:Nne,createLocalTableStream:FH,createTableStreams:Cne,purgeTableStream:GH,purgeSchemaTableStreams:Pne,getStreamInfo:Dne,updateLocalStreams:Mne,closeConnection:hne,getJsmServerName:qE,addNatsMsgHeader:BH,clearClientCache:vH,updateRemoteConsumer:wne,createConsumer:HH,updateConsumerIterator:Ine};async function MH(e,t=void 0){let{stdout:r,stderr:n}=await Wre(e,{cwd:t});if(n)throw new Error(n.replace(`
21
21
  `,""));return r.replace(`
22
- `,"")}a(MH,"runCommand");async function _ne(){try{await $re.access(Zb)}catch{return!1}let e=await MH(`${Zb} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Vre.eq(t,dne)}a(_ne,"checkNATSServerInstalled");async function sO(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await DH.getClusterUser();if(Jc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Qs.trace("create nats connection called");let i=await rne({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Or.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Or.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Or.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Qs.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Qs.error("Error with Nats client connection, connection closed",o),i===zr&&vH()}),i}a(sO,"createConnection");function vH(){zr=void 0,zc=void 0,Qc=void 0,jc=void 0}a(vH,"clearClientCache");async function hne(){zr&&(await zr.drain(),zr=void 0,zc=void 0,Qc=void 0,jc=void 0)}a(hne,"closeConnection");var zr,jc;async function L_(){return jc||(jc=sO(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),zr=await jc),zr||jc}a(L_,"getConnection");async function M_(){if(zc)return zc;Jc(zr)&&await L_();let{domain:e}=wu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return zc=await zr.jetstreamManager({domain:e,timeout:6e4}),zc}a(M_,"getJetStreamManager");async function UH(){if(Qc)return Qc;Jc(zr)&&await L_();let{domain:e}=wu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Qc=zr.jetstream({domain:e,timeout:6e4}),Qc}a(UH,"getJetStream");async function Li(){let e=zr||await L_(),t=zc||await M_(),r=Qc||await UH();return{connection:e,jsm:t,js:r}}a(Li,"getNATSReferences");async function mne(e){let t=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await DH.getClusterUser(),s=await sO(t,r,n),i=nO(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=LH.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();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 GE.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(mne,"getServerList");async function iO(e,t){let{jsm:r}=await Li(),n=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:nne.File,retention:sne.Limits,subjects:t,discard:ine.Old,max_msgs:s,max_bytes:i,max_age:n})}a(iO,"createLocalStream");async function xH(){let{jsm:e}=await Li(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(xH,"listStreams");async function pne(e){let{jsm:t}=await Li();await t.streams.delete(e)}a(pne,"deleteLocalStream");async function Ene(e){let{connection:t}=await Li(),r=[],n=nO(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(LH.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(Ene,"listRemoteStreams");async function gne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Li(),i=wH(),o={durable_name:i,ack_policy:tO.Explicit};t&&(o.deliver_policy=rO.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 f of l){let d=eO(f.data),h={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(h.origin=f.headers.get(Ur.MSG_HEADERS.ORIGIN)),u.push(h),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(gne,"viewStream");async function*Sne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Li(),i=wH(),o={durable_name:i,ack_policy:tO.Explicit};t&&(o.deliver_policy=rO.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 f=eO(u.data);f[0]||(f=[f]);for(let d of f){let h={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(h.origin=u.headers.get(Ur.MSG_HEADERS.ORIGIN)),yield h}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Sne,"viewStreamIterator");async function Tne(e,t,r,n){Qs.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=BH(n,r);let{js:s}=await Li(),i=await $E(),o=`${e}.${i}`,c=await lne(()=>n instanceof Uint8Array?n:PH.encode(n));try{Qs.trace(`publishToStream publishing to subject: ${o}`),cne(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 kH(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Qs.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await iO(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Tne,"publishToStream");function BH(e,t){t===void 0&&(t=ane());let r=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ur.MSG_HEADERS.ORIGIN)&&r&&t.append(Ur.MSG_HEADERS.ORIGIN,r),t}a(BH,"addNatsMsgHeader");function wu(e){e=e.toLowerCase();let t=D_.join(Or.get(Qe.CONFIG_PARAMS.ROOTPATH),une);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Jc(Xb)&&(Xb={port:C_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:C_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ur.SERVER_SUFFIX.HUB,config_file:Ur.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:D_.join(t,Ur.PID_FILES.HUB),hdb_nats_path:t}),Xb;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Jc(Jb)&&(Jb={port:C_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:C_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ur.SERVER_SUFFIX.LEAF,config_file:Ur.NATS_CONFIG_FILES.LEAF_SERVER,domain:C_.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ur.SERVER_SUFFIX.LEAF,pid_file_path:D_.join(t,Ur.PID_FILES.LEAF),hdb_nats_path:t}),Jb;Qs.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(wu,"getServerConfig");async function HH(e,t,r,n){try{await e.consumers.add(t,{ack_policy:tO.Explicit,durable_name:r,deliver_policy:rO.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(HH,"createConsumer");async function Ane(e,t,r){await e.consumers.delete(t,r)}a(Ane,"removeConsumer");function Rne(e){return e.split(".")[1]}a(Rne,"extractServerName");async function yne(e,t,r=6e4,n=nO()){if(!GE.isObject(t))throw new Error("data param must be an object");let s=PH.encode(t),{connection:i}=await Li(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return eO(c.data)}a(yne,"request");function oO(e){return new Promise(async(t,r)=>{let n=zre(Zb,["--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(oO,"reloadNATS");async function bne(){let{pid_file_path:e}=wu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await oO(e)}a(bne,"reloadNATSHub");async function One(){let{pid_file_path:e}=wu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await oO(e)}a(One,"reloadNATSLeaf");function Nne(e,t,r){let n;switch(e.code){case NH.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case NH.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Nne,"requestErrorHandler");async function wne(e,t){let r=t+Ur.SERVER_SUFFIX.LEAF,{connection:n}=await Li(),{jsm:s}=await Une(r),{schema:i,table:o}=e,c=qE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await kH(async()=>{if(e.subscribe===!0)await HH(s,c,n.info.server_name,l);else try{await Ane(s,c,n.info.server_name)}catch(u){Qs.trace(u)}})}a(wne,"updateRemoteConsumer");async function Ine(e,t,r,n){let s=qE.createNatsTableStreamName(e,t),i=r+Ur.SERVER_SUFFIX.LEAF,o={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!CH&&ene()<Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=jb();await c(o)}await Xre(o),n==="stop"&&await GE.async_set_timeout(1e3)}a(Ine,"updateConsumerIterator");function kH(e){return Jre.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(kH,"exclusiveLock");async function FH(e,t){let r=qE.createNatsTableStreamName(e,t),n=await $E(),s=Lne(e,t,n);await iO(r,[s])}a(FH,"createLocalTableStream");async function Cne(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await FH(n,s)}}a(Cne,"createTableStreams");async function GH(e,t,r=void 0){if(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=qE.createNatsTableStreamName(e,t),{domain:s}=wu(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await L_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Qs.warn(n);else throw n}}a(GH,"purgeTableStream");async function Pne(e,t){if(Or.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await GH(e,t[r])}a(Pne,"purgeSchemaTableStreams");async function Dne(e){return(await M_()).streams.info(e)}a(Dne,"getStreamInfo");function Lne(e,t,r){return`${Ur.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Lne,"createSubjectName");async function $E(){if(P_)return P_;if(P_=(await M_())?.nc?.info?.server_name,P_===void 0)throw new Error("Unable to get jetstream manager server name");return P_}a($E,"getJsmServerName");async function Mne(){let e=await M_(),t=await $E(),r=await xH();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=vne(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 f=u.join(".");Qs.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(Mne,"updateLocalStreams");function vne(e){let{config:t}=e,r=!1,n=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Or.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(vne,"updateStreamLimits");async function Une(e){let t,r;try{t=await zr.jetstream({domain:e}),r=await zr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Qs.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Une,"connectToRemoteJS")});function aO(e){let t=e.get(VE),r=t?(0,Iu.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:U_(e)??1,nodes:[]})})}i[n]=0,e.putSync(VE,(0,Iu.pack)(r))}return r}function v_(e){return aO(e).remoteNameToId}function VH(e,t){let r=aO(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 f in n){let d=n[f];d>u&&(u=d)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(VE,(0,Iu.pack)(r)),s}function KE(e,t){let r=aO(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(VE,(0,Iu.pack)(r))}return $H.trace?.("The remote node name map",e,n,s),s}var $H,Iu,VE,cO=be(()=>{$H=M(pi());ms();Iu=require("msgpackr"),VE=Symbol.for("remote-ids");a(aO,"getIdMappingRecord");a(v_,"exportIdMapping");a(VH,"remoteToLocalNodeId");a(KE,"getIdOfRemoteNode")});var lO={};Be(lO,{commits_awaiting_replication:()=>Pu,getHDBNodeTable:()=>sr,getReplicationSharedStatus:()=>YE,iterateRoutes:()=>B_,shouldReplicateToNode:()=>x_,subscribeToNodeUpdates:()=>Du});function sr(){return KH||(KH=_t({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 YE(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Du(e){sr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;QH.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 sr().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 x_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&sr().primaryStore.get(tt())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function xne(){Du(e=>{ma({},(t,r)=>{let n=e.name,s=YH.get(n);if(s||YH.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=YE(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of Pu.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*B_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Cu.default.get(B.REPLICATION_SECUREPORT)??(!Cu.default.get(B.REPLICATION_PORT)&&Cu.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Cu.default.get(B.REPLICATION_PORT)||Cu.default.get(B.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){WH.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime,revoked_certificates:t.revokedCertificates}}}var WH,zH,Cu,QH,KH,YH,Pu,Xc=be(()=>{Ue();ms();zm();WH=require("worker_threads"),zH=M(he()),Cu=M(ce());G();QH=M(pi());server.nodes=[];a(sr,"getHDBNodeTable");a(YE,"getReplicationSharedStatus");a(Du,"subscribeToNodeUpdates");a(x_,"shouldReplicateToNode");YH=new Map;KD((e,t,r)=>{if(r>server.nodes.length)throw new zH.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Pu||(Pu=new Map,xne());let n=Pu.get(e);return n||(n=[],Pu.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(xne,"startSubscriptionToReplications");a(B_,"iterateRoutes")});var ZH={};Be(ZH,{connectedToNode:()=>Zc,disconnectedFromNode:()=>Mu,ensureNode:()=>Eo,requestClusterStatus:()=>XH,startOnMainThread:()=>dO});async function dO(e){let t=0,r=Ze();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){WE.set(i,U_(l.auditStore));break}}}vi.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes?.search([])||[])i.push(o);for(let o of B_(e))try{let c=!o.subscriptions;if(c){let u=tt(),f=sr().primaryStore.get(u);if(f!==null){let d=e.url??pa();(f===void 0||f.url!==d||f.shard!==e.shard)&&await Eo(u,{name:u,url:d,shard:e.shard,replicates:!0})}}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}Du(s)});let n;function s(i,o=i?.name){let c=tt()&&o===tt()||pa()&&i?.url===pa();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let h of sr().search([]))h.replicates&&h.name!==o&&s(h,h.name);n=d}if(ct.trace("Setting up node replication for",i),!i){for(let[d,h]of Mi){let _;for(let[m,{worker:S,nodes:g}]of h){let R=g[0];if(R&&R.name==o){_=!0;for(let[E,{worker:T}]of h)h.delete(E),ct.warn("Node was deleted, unsubscribing from node",o,E,d),T?.postMessage({type:"unsubscribe-from-node",node:o,database:E,url:d});break}}if(_){Mi.get(d).iterator.remove(),Mi.delete(d);return}}return}if(c)return;if(!i.url){ct.info(`Node ${i.name} is missing url`);return}let l=Mi.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ct.info(`Added node ${i.name} at ${i.url} for process ${tt()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,h]of Lu)if(i.url===h.url){Lu.delete(d);break}Lu.set(i.name,i)}let u=Ze();if(l||(l=new Map,Mi.set(i.url,l)),l.iterator=ma(e,(d,h,_)=>{_?f(h,!0):f(h,!1)}),i.subscriptions)for(let d of i.subscriptions){let h=d.database||d.schema;u[h]||(ct.warn(`Database ${h} not found for node ${i.name}, making a subscription anyway`),f(h,!1))}function f(d,h){ct.trace("Setting up replication for database",d,"on node",i.name);let _=l.get(d),m,S=[{replicateByDefault:h,...i}];WE.has(d)&&(S.push({replicateByDefault:h,name:tt(),start_time:WE.get(d),end_time:Date.now(),replicates:!0}),WE.delete(d));let g=x_(i,d),R=vi.workers.filter(E=>E.name==="http");if(_?(m=_.worker,_.nodes=S):g&&(t=t%R.length,m=R[t++],l.set(d,{worker:m,nodes:S,url:i.url}),m?.on("exit",()=>{l.get(d)?.worker===m&&(l.delete(d),f(d,h))})),g)setTimeout(()=>{let E={type:"subscribe-to-node",database:d,nodes:S};m?m.postMessage(E):H_(E)},Bne);else{ct.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],sr().primaryStore.get(tt())?.replicates),sr().primaryStore.get(tt())?.replicates||(n=!1);let E={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};m?m.postMessage(E):QE(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),Mu=a(function(i){try{ct.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Lu.keys()),c=o.sort(),l=c.indexOf(i.name||js(i.url));if(l===-1){ct.warn("Disconnected node not found in node map",i.name,o);return}let u=Mi.get(i.url),f=u?.get(i.database);if(!f){ct.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished)return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let h=d.shard,_=(l+1)%c.length;for(;l!==_;){let m=c[_],S=Lu.get(m);u=Mi.get(S.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==h){_=(_+1)%c.length;continue}let{worker:R,nodes:E}=g,T=!1;for(let O of f.nodes){if(E.some(v=>v.name===O.name)){ct.info(`Disconnected node is already failing over to ${m} for ${i.database}`);continue}O.end_time<Date.now()||(E.push(O),T=!0)}if(f.nodes=[f.nodes[0]],!T){ct.info(`Disconnected node ${i.name} has no nodes to fail over to ${m}`);return}ct.info(`Failing over ${i.database} from ${i.name} to ${m}`),R?R.postMessage({type:"subscribe-to-node",database:i.database,nodes:E}):H_({database:i.database,nodes:E});return}ct.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){ct.error("Error failing over node",o)}},"disconnectedFromNode"),Zc=a(function(i){let o=Mi.get(i.url),c=o?.get(i.database);if(!c){ct.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];c.nodes=[l];let u=!1;for(let f of Mi.values()){let d=f.get(i.database);if(!d||d==c)continue;let{worker:h,nodes:_,connected:m}=d;if(m===!1&&_[0].shard===l.shard)u=!0,c.nodes.push(_[0]);else{let S=_.filter(g=>g.name!==l.name);S.length<_.length&&(d.nodes=S,h.postMessage({type:"subscribe-to-node",database:i.database,nodes:_}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,vi.onMessageByType)("disconnected-from-node",Mu),(0,vi.onMessageByType)("connected-to-node",Zc),(0,vi.onMessageByType)("request-cluster-status",XH)}function XH(e,t){let r=[];for(let[n,s]of Lu)try{let i=Mi.get(s.url);ct.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:h}]of i)o.push({database:l,connected:f,latency:h,thread_id:u?.threadId,nodes:d.filter(_=>!(_.end_time<Date.now())).map(_=>_.name)});let c=(0,uO.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ct.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Eo(e,t){let r=sr();e=e??js(t.url),t.name=e;try{if(t.ca){let s=new JH.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){ct.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ct.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!jH.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,uO.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ct.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var vi,zE,ct,uO,jH,JH,Bne,Mi,Mu,Zc,Lu,WE,k_=be(()=>{Ue();vi=M(st());ms();zE=require("worker_threads");Xc();ct=M(X()),uO=require("lodash"),jH=M(ce());G();JH=require("crypto"),Bne=200,Mi=new Map,Lu=new Map,WE=new Map;a(dO,"startOnMainThread");a(XH,"requestClusterStatus");zE.parentPort&&(Mu=a(e=>{zE.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Zc=a(e=>{zE.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,vi.onMessageByType)("subscribe-to-node",e=>{H_(e)}),(0,vi.onMessageByType)("unsubscribe-from-node",e=>{QE(e)}));a(Eo,"ensureNode")});var Zs=P(Rk=>{"use strict";var ir=require("path"),{watch:Hne}=require("chokidar"),An=require("fs-extra"),vu=require("node-forge"),ik=require("net"),{generateKeyPair:_O,X509Certificate:go,createPrivateKey:ok}=require("crypto"),kne=require("util");_O=kne.promisify(_O);var yt=vu.pki,Js=require("joi"),{v4:ak}=require("uuid"),{validateBySchema:EO}=nt(),St=X(),Wn=ce(),ps=(G(),D($)),{CONFIG_PARAMS:tl}=ps,Xs=gA(),{ClientError:ga}=he(),jE=require("node:tls"),{relative:ck,join:Fne}=require("node:path"),{CERT_PREFERENCE_APP:zwe,CERTIFICATE_VALUES:ek}=Xs,Gne=lc(),hO=wt(),{table:qne,getDatabases:$ne,databases:fO}=(Ue(),D(at)),{getJWTRSAKeys:tk}=(yu(),D(w_));Object.assign(Rk,{generateKeys:TO,updateConfigCert:pk,createCsr:jne,signCertificate:Jne,setCertTable:Uu,loadCertificates:_k,reviewSelfSignedCert:RO,createTLSSelector:gk,listCertificates:Tk,addCertificate:nse,removeCertificate:ise,createNatsCerts:ese,generateCertsKeys:Zne,getReplicationCert:G_,getReplicationCertAuth:Qne,renewSelfSigned:tse,hostnamesFromCert:yO,getKey:ose});var{urlToNodeName:lk,getThisNodeUrl:Vne,getThisNodeName:XE,clearThisNodeName:Kne}=(ms(),D(Aa)),{readFileSync:Yne,statSync:uk}=require("node:fs"),Qwe=ce(),{getTicketKeys:Wne,onMessageFromWorkers:zne}=st(),Ea=X(),{isMainThread:dk}=require("worker_threads"),{TLSSocket:fk,createSecureContext:jwe}=require("node:tls"),gO=3650,F_=["127.0.0.1","localhost","::1"],SO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];zne(async e=>{e.type===ps.ITC_EVENT_TYPES.RESTART&&(Wn.initSync(!0),await RO())});var xr;function Ta(){return xr||(xr=$ne().system.hdb_certificate,xr||(xr=qne({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__"}]}))),xr}a(Ta,"getCertTable");async function G_(){let e=gk("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(XE());if(!r)return;let n=new go(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(G_,"getReplicationCert");async function Qne(){Ta();let e=(await G_()).options.cert,r=new go(e).issuer.match(/CN=(.*)/)?.[1];return xr.get(r)}a(Qne,"getReplicationCertAuth");var rk,Sa=new Map;function _k(){if(rk)return;rk=!0;let e=[{configKey:tl.TLS},{configKey:tl.OPERATIONSAPI_TLS}];Ta();let t=ir.dirname(hO.getConfigFilePath()),r;for(let{configKey:n}of e){let s=hO.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&ck(Fne(t,"keys"),o);c&&nk(o,l=>{Sa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&dk){let f;nk(u,d=>{if(ek.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=Ek(u),m=new go(_),S;try{S=Ak(m)}catch(T){logger.error("error extracting host name from certificate",T);return}if(S==null){logger.error("No host name found on certificate");return}if(m.checkIssued(new go(ek.cert)))return;let g=xr.primaryStore.get(S),R=uk(u).mtimeMs,E=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=E){R<E&&St.info(`Certificate ${S} at ${u} is older (${new Date(R)}) than the certificate in the database (${E>1?new Date(E):"only self signed certificate available"})`);return}r=xr.put({name:S,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:_,private_key_name:c,is_authority:l,hostnames:h,file_timestamp:R,details:{issuer:m.issuer.replace(/\n/g," "),subject:m.subject.replace(/\n/g," "),subject_alt_name:m.subjectAltName,serial_number:m.serialNumber,valid_from:m.validFrom,valid_to:m.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(_k,"loadCertificates");function nk(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&dk&&St.warn(`Reloading ${r}:`,i),n=c,t(Ek(i)))}catch(c){St.error(`Error loading ${r}:`,i,c)}},"loadFile");An.existsSync(e)?s(e,uk(e)):St.error(`${r} file not found:`,e),Hne(e,{persistent:!1}).on("change",s)}a(nk,"loadAndWatch");function mO(){let e=Vne();if(e==null){let t=F_[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return lk(e)}a(mO,"getHost");function JE(){let e=XE();if(e==null){let t=F_[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(JE,"getCommonName");async function jne(){let e=await G_(),t=yt.certificateFromPem(e.options.cert),r=yt.privateKeyFromPem(e.options.key);St.info("Creating CSR with cert named:",e.name);let n=yt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:JE()},...SO];St.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:hk()}];return St.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),vu.pki.certificationRequestToPem(n)}a(jne,"createCsr");function hk(){let e=F_.includes(JE())?F_:[...F_,JE()];return e.includes(mO())||e.push(mO()),[{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=>ik.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(hk,"certExtensions");async function Jne(e){let t={},r=ir.join(Wn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Ta();for await(let f of xr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(Sa.has(f.private_key_name)){n=Sa.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await An.exists(ir.join(r,f.private_key_name))){n=An.readFile(ir.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await pO();s=f.ca,n=f.private_key}n=yt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=yt.certificateFromPem(s.certificate);St.info("Signing CSR with cert named",s.name);let o=yt.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return St.error(f),new Error("Error verifying CSR: "+f.message)}let c=vu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+gO),St.info("sign cert setting validity:",c.validity),St.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),St.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;St.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,vu.md.sha256.create()),t.certificate=yt.certificateToPem(c)}else St.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Jne,"signCertificate");async function Xne(e,t){await Uu({name:XE(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Uu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:yt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Xne,"createCertificateTable");async function Uu(e){let t=new go(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Ta(),await xr.patch(e)}a(Uu,"setCertTable");async function TO(){let e=await _O("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:yt.publicKeyFromPem(e.publicKey),private_key:yt.privateKeyFromPem(e.privateKey)}}a(TO,"generateKeys");async function AO(e,t,r){let n=yt.createCertificate();if(!t){let o=await G_();t=yt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+gO);let i=[{name:"commonName",value:JE()},...SO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(hk()),n.sign(e,vu.md.sha256.create()),yt.certificateToPem(n)}a(AO,"generateCertificates");async function pO(){let e=await Tk(),t;for(let r of e){if(!r.is_authority)continue;let n=await Sk(r.private_key_name);if(r.private_key_name&&n&&new go(r.certificate).checkPrivateKey(ok(n))){St.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;St.trace("No CA found with matching private key")}a(pO,"getCertAuthority");async function mk(e,t,r=!0){let n=yt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+gO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Wn.get(tl.REPLICATION_HOSTNAME)??lk(Wn.get(tl.REPLICATION_URL))??ak().split("-")[0]}`},...SO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,vu.md.sha256.create());let o=ir.join(Wn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),c=ir.join(o,Xs.PRIVATEKEY_PEM_NAME);return r&&await An.writeFile(c,yt.privateKeyToPem(e)),n}a(mk,"generateCertAuthority");async function Zne(){let{private_key:e,public_key:t}=await TO(),r=await mk(e,t),n=await AO(e,t,r);await Xne(n,r),pk()}a(Zne,"generateCertsKeys");async function ese(){let e=await AO(yt.privateKeyFromPem(Xs.CERTIFICATE_VALUES.key),void 0,yt.certificateFromPem(Xs.CERTIFICATE_VALUES.cert)),t=ir.join(Wn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME);await An.exists(r)||await An.writeFile(r,e);let n=ir.join(t,Xs.NATS_CA_PEM_NAME);await An.exists(n)||await An.writeFile(n,Xs.CERTIFICATE_VALUES.cert)}a(ese,"createNatsCerts");async function tse(){Ta();for await(let e of xr.search([{attribute:"is_self_signed",value:!0}]))await xr.delete(e.name);await RO()}a(tse,"renewSelfSigned");async function RO(){Kne(),await _k(),Ta();let e=await pO();if(!e){St.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:yt.privateKeyFromPem(An.readFileSync(u)),keyPath:u}}catch(f){return St.warn(`Failed to parse private key from ${u}:`,f.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Wn.get(tl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let f=r(u.privateKey);if(s=f.key,i=f.keyPath,f.key)break}}else{let u=Wn.get(tl.TLS_PRIVATEKEY),f=r(u);s=f.key,i=f.keyPath}let o=ir.join(Wn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),c=ck(o,i);s||(St.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{private_key:s}=await TO(),An.existsSync(ir.join(o,Xs.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${ak().split("-")[0]}.pem`),await An.writeFile(ir.join(o,c),yt.privateKeyToPem(s)));let l=await mk(s,yt.setRsaPublicKey(s.n,s.e),!1);await Uu({name:l.subject.getField("CN").value,uses:["https"],certificate:yt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await G_()){let r=XE();St.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await pO();let n=yt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await AO(yt.privateKeyFromPem(e.private_key),s,n);await Uu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(RO,"reviewSelfSignedCert");function pk(){let e=Gne(Object.keys(ps.CONFIG_PARAM_MAP),!0),t=ir.join(Wn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.PRIVATEKEY_PEM_NAME),n=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,Xs.NATS_CA_PEM_NAME),i=ps.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),hO.updateConfigValue(void 0,void 0,o,!1,!0)}a(pk,"updateConfigCert");function Ek(e){return e.startsWith("-----BEGIN")?e:Yne(e,"utf8")}a(Ek,"readPEM");var sk=jE.createSecureContext;jE.createSecureContext=function(e){if(!e.cert||!e.key)return sk(e);let t={...e};delete t.key,delete t.cert;let r=sk(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var rse=fk.prototype._init;fk.prototype._init=function(e,t){rse.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 el=new Map;function gk(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(),el.clear();let f=0;for await(let d of fO.system.hdb_certificate.search([])){let h=d.certificate,_=new go(h);d.is_authority&&(_.asString=h,el.set(_.subject,h))}for await(let d of fO.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let h=e==="operations-api",_=d.is_self_signed?1:2;h&&d.uses?.includes?.("operations")&&(_+=1);let m=await Sk(d.private_key_name),S=d.certificate,g=new go(S);if(el.has(g.issuer)&&(S+=`
23
- `+el.get(g.issuer)),!m||!S)throw new Error("Missing private key or certificate for secure server");let R={ciphers:d.ciphers,ticketKeys:Wne(),availableCAs:el,ca:t&&Array.from(el.values()),cert:S,key:m,key_file:d.private_key_name,is_self_signed:d.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let E=jE.createSecureContext(R);E.name=d.name,E.options=R,E.quality=_,E.certificateAuthorities=Array.from(el),E.certStart=S.toString().slice(0,100);let T=d.hostnames??yO(g);Array.isArray(T)||(T=[T]);let O;for(let v of T)if(v){v[0]==="*"&&(s=!0,v=v.slice(1)),v===mO()&&(_+=2),ik.isIP(v)&&(O=!0);let F=r.get(v)?.quality??0;_>F&&r.set(v,E)}else Ea.error("No hostname found for certificate at",jE.certificate);Ea.trace("Adding TLS",E.name,"for",o.ports||"client","cert named",d.name,"hostnames",T,"quality",_,"best quality",f),_>f&&(i.defaultContext=n=E,f=_,o&&(o.defaultContext=E))}catch(h){Ea.error("Error applying TLS for",d.name,h)}o?.secureContextsListeners.forEach(d=>d()),c(n)}catch(f){l(f)}}a(u,"updateTLS"),fO.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Ea.info("TLS requested for",o||"(no SNI)");let l=o;for(;;){let f=r.get(l);if(f)return Ea.debug("Found certificate for",o,f.certStart),f.updatedContext&&(f=f.updatedContext),c(null,f);if(s&&l){let d=l.indexOf(".",1);d<0?l="":l=l.slice(d)}else break}o?Ea.debug("No certificate found to match",o,"using the default certificate"):Ea.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Ea.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(gk,"createTLSSelector");async function Sk(e){let t=Sa.get(e);return!t&&e?await An.readFile(ir.join(Wn.get(tl.ROOTPATH),ps.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(Sk,"getPrivateKeyByName");async function Tk(){Ta();let e=[];for await(let t of xr.search([]))e.push(t);return e}a(Tk,"listCertificates");async function nse(e){let t=EO(e,Js.object({name:Js.string().required(),certificate:Js.string().required(),is_authority:Js.boolean().required(),private_key:Js.string(),hosts:Js.array(),uses:Js.array()}));if(t)throw new ga(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new go(n),c=!1,l=!1,u;for(let[_,m]of Sa)!s&&!c&&o.checkPrivateKey(ok(m))&&(c=!0,u=_),s&&s===m&&(l=!0,u=_);if(!i&&!s&&!c)throw new ga("A suitable private key was not found for this certificate");let f;if(!r){try{f=Ak(o)}catch(_){St.error(_)}if(f==null)throw new ga("Error extracting certificate common name, please provide a name parameter")}let d=sse(r??f);s&&!c&&!l&&(await An.writeFile(ir.join(Wn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME,d+".pem"),s),Sa.set(d,s));let h={name:r??f,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(h.private_key_name=u??d+".pem"),e.ciphers&&(h.ciphers=e.ciphers),await Uu(h),"Successfully added certificate: "+d}a(nse,"addCertificate");function sse(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(sse,"sanitizeName");async function ise(e){let t=EO(e,Js.object({name:Js.string().required()}));if(t)throw new ga(t.message);let{name:r}=e;Ta();let n=await xr.get(r);if(!n)throw new ga(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await xr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(St.info("Removing private key named",s),await An.remove(ir.join(Wn.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME,s)))}return await xr.delete(r),"Successfully removed "+r}a(ise,"removeCertificate");function Ak(e){let t=e.subject.match(/CN=(.*)/)?.[1];return t||yO(e)[0]}a(Ak,"getPrimaryHostName");function yO(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=certObj.subject.match(/CN=(.*)/)?.[1];return t?[t]:[]}a(yO,"hostnamesFromCert");async function ose(e){if(e.bypass_auth!==!0)throw new ga("Unauthorized","401");let t=EO(e,Js.object({name:Js.string().required()}));if(t)throw new ga(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await tk()).privateKey;if(r===".jwtPublic")return(await tk()).publicKey;if(Sa.get(r))return Sa.get(e.name);throw new ga("Key not found")}a(ose,"getKey")});var Vk={};Be(Vk,{CONFIRMATION_STATUS_POSITION:()=>Gk,NodeReplicationConnection:()=>$_,OPERATION_REQUEST:()=>wO,RECEIVED_TIME_POSITION:()=>CO,RECEIVED_VERSION_POSITION:()=>IO,RECEIVING_STATUS_POSITION:()=>PO,RECEIVING_STATUS_RECEIVING:()=>$k,RECEIVING_STATUS_WAITING:()=>qk,SENDING_TIME_POSITION:()=>q_,createWebSocket:()=>ig,database_subscriptions:()=>ya,replicateOverWS:()=>V_,table_update_listeners:()=>LO});async function ig(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(!OO){let l=(0,Bk.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),OO=u.secureContexts}if(i=OO.get(s),i&&ae.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,kk.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=Hk.createSecureContext({...i.options,ca:[...nl,...i.options.availableCAs.values()]})),new Uk.WebSocket(e,"harperdb-replication-v1",c)}function V_(e,t,r){let n=t.port||t.securePort,s=rl.pid%1e3+"-"+xk.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,f=t.databaseSubscriptions||ya,d,h,_=!1,m=t.subscription;m?.then&&m.then(A=>m=A);let S=t.tables||u&&Ze()[u];if(!r){ae.error?.("No authorization provided"),sn(1008,"Unauthorized");return}let g=new Map,R=[],E=r.name;E&&t.connection&&(t.connection.nodeName=E);let T,O,v,F,q,Q,te,se=5e3,z,ne=0,le=0,ie=0,Re=vk.default.get(B.REPLICATION_BLOBTIMEOUT)??12e4,me=new Map,Ae=[],xt=0,dt;if(t.url){let A=a(()=>{q&&le===e._socket?.bytesRead&&ie===e._socket?.bytesWritten?e.terminate():(q=performance.now(),e.ping(),le=e._socket?.bytesRead,ie=e._socket?.bytesWritten)},"send_ping");v=setInterval(A,Lk).unref(),A()}else Cn();e._socket?.setMaxListeners(200);function Cn(){clearTimeout(F),le=e._socket?.bytesRead,ie=e._socket?.bytesWritten,F=setTimeout(()=>{le===e._socket?.bytesRead&&ie===e._socket?.bytesWritten&&(ae.warn?.(`Timeout waiting for ping from ${E}, terminating connection and reconnecting`),e.terminate())},Lk*2).unref()}a(Cn,"resetPingTimer");function nn(){return h||(h=YE(d,u,E)),h}a(nn,"getSharedStatus"),u&&Wo(u);let wr,Hd,rc=[],KT=[],YT,Bt=[],kd=[],Fd=[],WT=150,gm=25,Gd=0,De=0,qd=!1,Wi,Ir,Pn,nc;e.on("message",A=>{ne=performance.now();try{let N=A.dataView=new sl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let w=(0,et.decode)(A),[H,U,j]=w;switch(H){case bk:{if(U){if(E){if(E!==U){ae.error?.(s,`Node name mismatch, expecting to connect to ${E}, but peer reported name as ${U}, disconnecting`),e.send((0,et.encode)([xu])),sn(1008,"Node name mismatch");return}}else if(E=U,t.connection?.tentativeNode){let Y=t.connection.tentativeNode;Y.name=E,t.connection.tentativeNode=null,Eo(E,Y)}if(t.connection&&(t.connection.nodeName=E),ae.debug?.(s,"received node name:",E,"db:",u),!u)try{Wo(u=w[2]),u==="system"&&(wr=ma(t,(Y,V)=>{Yo(V)&&Kd(V)}),e.on("close",()=>{wr?.remove()}))}catch(Y){ae.warn?.(s,"Error setting database",Y),e.send((0,et.encode)([xu])),sn(1008,Y.message);return}Ko()}break}case Pk:{ae.debug?.(s,"Received table definitions for",U.map(Y=>Y.table));for(let Y of U){let V=w[2];Y.database=V;let ue;Yo(V)&&(V==="system"?Ye[V]?.[Y.table]||(ue=I(Y,Ye[V]?.[Y.table])):ue=I(Y,Ye[V]?.[Y.table]),d||(d=ue?.auditStore),S||(S=Ze()?.[V]))}break}case xu:sn();break;case wO:try{let Y=r?.replicates||r?.subscribers||r?.name;server.operation(U,{user:r},!Y).then(V=>{Array.isArray(V)&&(V={results:V}),V.requestId=U.requestId,e.send((0,et.encode)([eg,V]))},V=>{e.send((0,et.encode)([eg,{requestId:U.requestId,error:V instanceof Error?V.toString():V}]))})}catch(Y){e.send((0,et.encode)([eg,{requestId:U.requestId,error:Y instanceof Error?Y.toString():Y}]))}break;case eg:let{resolve:J,reject:k}=g.get(U.requestId);U.error?k(new Error(U.error)):J(U),g.delete(U.requestId);break;case bO:let Ce=w[3];S||(u?ae.error?.(s,"No tables found for",u):ae.error?.(s,"Database name never received"));let de=S[Ce];de=I({table:Ce,database:u,attributes:U.attributes,schemaDefined:U.schemaDefined},de),rc[j]={name:Ce,decoder:new et.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:U.typedStructs,structures:U.structures}),getEntry(Y){return de.primaryStore.getEntry(Y)},rootStore:de.primaryStore.rootStore};break;case Ok:nc=d?VH(U,d):new Map,YT=w[2],ae.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${YT}`);break;case Nk:let ye=j;Fd[ye]=U;break;case Ck:nn()[Gk]=U,ae.trace?.(s,"received and broadcasting committed update",U),nn().buffer.notify();break;case Ik:T=U,m.send({type:"end_txn",localTime:T,remoteNodeIds:R});break;case tg:{let Y=w[1],{fileId:V,size:ue,finished:_e,error:pe}=Y,Te=me.get(V);ae.debug?.("Received blob",V,"has stream",!!Te,"connectedToBlob",!!Te?.connectedToBlob,"length",w[2].length,"finished",_e),Te||(Te=new NO.PassThrough,Te.expectedSize=ue,me.set(V,Te)),Te.lastChunk=Date.now();let Pe=w[2];Dt(Pe.byteLength,"bytes-received",`${E}.${u}`,"replication","blob");try{_e?(pe?(Te.on("error",()=>{}),Te.destroy(new Error("Blob error: "+pe))):Te.end(Pe),Te.connectedToBlob&&me.delete(V)):Te.write(Pe)}catch(Ve){ae.error?.(`Error receiving blob for ${Te.recordId} from ${E} and streaming to storage`,Ve),me.delete(V)}break}case wk:{let Y=U,V;try{let ue=w[3],_e=KT[j]||(KT[j]=S[w[4]]);if(!_e)return ae.warn?.("Unknown table id trying to handle record request",j);let pe=_e.primaryStore.getBinaryFast(Symbol.for("structures")),Te=pe.length;if(Te!==De){De=Te;let Ve=(0,et.decode)(pe);e.send((0,et.encode)([bO,{typedStructs:Ve.typed,structures:Ve.named},j,_e.tableName]))}let Pe=_e.primaryStore.getBinaryFast(ue);if(Pe){let Ve=_e.primaryStore.decoder.decode(Pe,{valueAsBuffer:!0}),We=Ve.value;Ve[yc]&mn&&(We=Buffer.from(We),yf(()=>_e.primaryStore.decoder.decode(Pe),sc,_e.primaryStore.rootStore)),V=(0,et.encode)([ZE,Y,{value:We,expiresAt:Ve.expiresAt,version:Ve.version,residencyId:Ve.residencyId,nodeId:Ve.nodeId,user:Ve.user}])}else V=(0,et.encode)([ZE,Y])}catch(ue){V=(0,et.encode)([ZE,Y,{error:ue.message}])}e.send(V);break}case ZE:{let{resolve:Y,reject:V,tableId:ue,key:_e}=g.get(w[1]),pe=w[2];if(pe?.error)V(new Error(pe.error));else if(pe){let Te;fp(()=>{let Pe=rc[ue].decoder.decode(pe.value);pe.value=Pe,pe.key=_e,Y(pe)||Te&&setTimeout(()=>Te.forEach(lp),6e4).unref()},Pe=>{let Ve=$d(Pe,_e);return Te||(Te=[]),Te.push(Ve),Ve})}else Y();g.delete(w[1]);break}case yk:{Pn=U;let Y,V,ue=!1;if(m){if(u!==m.databaseName&&!m.then){ae.error?.("Subscription request for wrong database",u,m.databaseName);return}}else m=f.get(u);if(ae.debug?.(s,"received subscription request for",u,"at",Pn),!m){let Ie;m=new Promise(Ht=>{ae.debug?.("Waiting for subscription to database "+u),Ie=Ht}),m.ready=Ie,ya.set(u,m)}if(r.name)V=sr().subscribe(r.name),V.then(async Ie=>{Y=Ie;for await(let Ht of Y){let Ot=Ht.value;if(!(Ot?.replicates===!0||Ot?.replicates?.receives||Ot?.subscriptions?.some(Rr=>(Rr.database||Rr.schema)===u&&Rr.publish!==!1))){ue=!0,e.send((0,et.encode)([xu])),sn(1008,`Unauthorized database subscription to ${u}`);return}}},Ie=>{ae.error?.(s,"Error subscribing to HDB nodes",Ie)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,et.encode)([xu])),sn(1008,`Unauthorized database subscription to ${u}`);return}if(Ir&&(ae.debug?.(s,"stopping previous subscription",u),Ir.emit("close")),Pn.length===0)return;let _e=Pn[0],pe=a(Ie=>{if(Ie&&(_e.replicateByDefault?!_e.tables.includes(Ie.tableName):_e.tables.includes(Ie.tableName)))return{table:Ie}},"tableToTableEntry"),Te={txnTime:0},Pe,Ve,We=1/0,Ms,is=a((Ie,Ht)=>{if(Ie.type==="end_txn"){Te.txnTime&&(o[i]!==66&&ae.error?.("Invalid encoding of message"),K(9),K(sg),y(Ms=Ht),Tm()),i=c,Te.txnTime=0;return}let Ot=Ie.nodeId,Rr=Ie.tableId,At=Ve[Rr];if(!At&&(At=Ve[Rr]=pe(m.tableById[Rr]),!At))return ae.debug?.("Not subscribed to table",Rr);let os=At.table,kt=os.primaryStore,vs=kt.encoder;(Ie.extendedType&Ap||!vs.typedStructs)&&(vs._mergeStructures(vs.getStructures()),vs.typedStructs&&(vs.lastTypedStructuresLength=vs.typedStructs.length));let Am=Pe[Ot];if(!(Am&&Am.startTime<Ht&&(!Am.endTime||Am.endTime>Ht)))return ng&&ae.trace?.(s,"skipping replication update",Ie.recordId,"to:",E,"from:",Ot,"subscribed:",Pe),nP();ng&&ae.trace?.(s,"sending replication update",Ie.recordId,"to:",E,"from:",Ot,"subscribed:",Pe);let zT=Ie.version;Te.txnTime!==zT&&(Te.txnTime&&(ng&&ae.trace?.(s,"new txn time, sending queued txn",Te.txnTime),o[i]!==66&&ae.error?.("Invalid encoding of message"),Tm()),Te.txnTime=zT,i=c,y(zT));let ac=Ie.residencyId,QT=Vd(ac,os),Rm;if(QT&&!QT.includes(E)){let Us=Vd(Ie.previousResidencyId,os);if(Us&&!Us.includes(E)&&(Ie.type==="put"||Ie.type==="patch")||os.getResidencyById)return nP();let Yd=Ie.recordId;ae.trace?.(s,"sending invalidation",Yd,E,"from",Ot);let XT=0;ac&&(XT|=Nc),Ie.previousResidencyId&&(XT|=wc);let ZT,ym=null;for(let sP in os.indices){if(!ym){if(ZT=Ie.getValue(kt,!0),!ZT)break;ym={}}ym[sP]=ZT[sP]}Rm=bc(Ie.version,Rr,Yd,null,Ot,Ie.user,Ie.type==="put"||Ie.type==="patch"?"invalidate":Ie.type,vs.encode(ym),XT,ac,Ie.previousResidencyId,Ie.expiresAt)}function nP(){return ae.trace?.(s,"skipping audit record",Ie.recordId),Q||(Q=setTimeout(()=>{Q=null,(Ms||0)+Dk/2<We&&(ng&&ae.trace?.(s,"sending skipped sequence update",We),e.send((0,et.encode)([Ik,We])))},Dk).unref()),new Promise(setImmediate)}a(nP,"skipAuditRecord");let jT=vs.typedStructs,JT=vs.structures;if((jT?.length!=At.typed_length||JT?.length!=At.structure_length)&&(At.typed_length=jT?.length,At.structure_length=JT.length,ae.debug?.(s,"send table struct",At.typed_length,At.structure_length),At.sentName||(At.sentName=!0),e.send((0,et.encode)([bO,{typedStructs:jT,structures:JT,attributes:os.attributes,schemaDefined:os.schemaDefined},Rr,At.table.tableName]))),ac&&!kd[ac]&&(e.send((0,et.encode)([Nk,QT,ac])),kd[ac]=!0),Rm)K(Rm.length),p(Rm);else{let Us=Ie.encoded;Ie.extendedType&mn&&yf(()=>Ie.getValue(kt),sc,kt.rootStore);let Yd=Us[0]===66?8:0;K(Us.length-Yd),p(Us,Yd),ae.trace?.("wrote record",Ie.recordId,"length:",Us.length)}return e._socket.writableNeedDrain?new Promise(Us=>{ae.debug?.(`Waiting for remote node ${E} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Us)}):xt>gm?new Promise(Us=>{dt=Us}):new Promise(setImmediate)},"sendAuditRecord"),Tm=a(()=>{c-i>8?(e.send(o.subarray(i,c)),ae.debug?.(s,"Sent message, size:",c-i),Dt(c-i,"bytes-sent",`${E}.${u}`,"replication","egress")):ae.debug?.(s,"skipping empty transaction")},"sendQueuedData");Ir=new DO.EventEmitter,Ir.once("close",()=>{ue=!0,Y?.end()});for(let{startTime:Ie}of Pn)Ie<We&&(We=Ie);(V||Promise.resolve()).then(async()=>{m=await m,d=m.auditStore,Ve=m.tableById.map(pe),Pe=[];for(let{name:Ht,startTime:Ot,endTime:Rr}of Pn){let At=KE(Ht,d);ae.debug?.("subscription to",Ht,"using local id",At,"starting",Ot),Pe[At]={startTime:Ot,endTime:Rr}}Kd(u),wr||(wr=il(Ht=>{Ht.databaseName===u&&Kd(u)}),Hd=K_(Ht=>{Ht===u&&(e.send((0,et.encode)([xu])),sn())}),e.on("close",()=>{wr?.remove(),Hd?.remove()})),e.send((0,et.encode)([Ok,v_(m.auditStore),Pn.map(({name:Ht})=>Ht)]));let Ie=!0;do{isFinite(We)||(ae.warn?.("Invalid sequence id "+We),sn(1008,"Invalid sequence id"+We));let Ht;if(Ie&&!ue&&(Ie=!1,We===0)){let Ot=We,Rr=og(d);for(let At in S){if(!pe(At))continue;let os=S[At];ae.warn?.(`Fully copying ${At} table to ${E}`);for(let kt of os.primaryStore.getRange({snapshot:!1,versions:!0})){if(ue)return;if(kt.localTime>=We){ae.trace?.(s,"Copying record from",u,At,kt.key,kt.localTime),Ot=Math.max(kt.localTime,Ot),Ht=!0,nn()[q_]=1;let vs=bc(kt.version,os.tableId,kt.key,null,Rr,null,"put",yf(()=>os.primaryStore.encoder.encode(kt.value),sc),kt.metadataFlags&-256,kt.residencyId,null,kt.expiresAt);await is({recordId:kt.key,tableId:os.tableId,type:"put",getValue(){return kt.value},encoded:vs,version:kt.version,residencyId:kt.residencyId,nodeId:Rr,extendedType:kt.metadataFlags},kt.localTime)}}}Ht&&is({type:"end_txn"},We),nn()[q_]=0,We=Ot}for(let{key:Ot,value:Rr}of d.getRange({start:We||1,exclusiveStart:!0,snapshot:!1})){if(ue)return;let At=Ct(Rr);ae.debug?.("sending audit record",new Date(Ot)),nn()[q_]=Ot,We=Ot,await is(At,Ot),Ir.startTime=Ot,Ht=!0}Ht&&is({type:"end_txn"},We),nn()[q_]=0,await Kk(d)}while(!ue)}).catch(Ie=>{ae.error?.(s,"Error handling subscription to node",Ie),sn(1008,"Error handling subscription to node")});break}}return}N.position=8;let b=!0,C,x;do{nn();let w=N.readInt();if(w===9&&N.getUint8(N.position)==sg){N.position++,T=x=N.readFloat64(),h[IO]=T,h[CO]=Date.now(),h[PO]=qk,ae.trace?.("received remote sequence update",T,u);break}let H=N.position,U=Ct(A,H,H+w),j=rc[U.tableId];j||ae.error?.(`No table found with an id of ${U.tableId}`);let J;U.residencyId&&(J=Fd[U.residencyId],ae.trace?.(s,"received residency list",J,U.type,U.recordId));try{let k=U.recordId;fp(()=>{C={table:j.name,id:k,type:U.type,nodeId:nc.get(U.nodeId),residencyList:J,timestamp:U.version,value:U.getValue(j),user:U.user,beginTxn:b,expiresAt:U.expiresAt}},Ce=>$d(Ce,k))}catch(k){throw k.message+="typed structures for current decoder"+JSON.stringify(j.decoder.typedStructs),k}b=!1,ae.trace?.(s,"received replication message",U.type,"id",C.id,"version",new Date(U.version),"nodeId",C.nodeId),h[IO]=U.version,h[CO]=Date.now(),h[PO]=$k,m.send(C),N.position=H+w}while(N.position<A.byteLength);Gd++,Dt(A.byteLength,"bytes-received",`${E}.${u}.${C?.table||"unknown_table"}`,"replication","ingest"),Gd>WT&&!qd&&(qd=!0,e.pause(),ae.debug?.(`Commit backlog causing replication back-pressure, requesting that ${E} pause replication`)),m.send({type:"end_txn",localTime:T,remoteNodeIds:R,async onCommit(){if(C){let w=Date.now()-C.timestamp;Dt(w,"replication-latency",E+"."+u+"."+C.table,C.type,"ingest")}Gd--,qd&&(qd=!1,e.resume(),ae.debug?.(`Replication resuming ${E}`)),Ae.length>0&&await Promise.all(Ae),ae.trace?.("All blobs finished"),!O&&x&&(ae.trace?.(s,"queuing confirmation of a commit at",x),setTimeout(()=>{e.send((0,et.encode)([Ck,O])),ae.trace?.(s,"sent confirmation of a commit at",O),O=null},cse)),O=x,ae.debug?.("last sequence committed",new Date(x),u)}})}catch(N){ae.error?.(s,"Error handling incoming replication message",N)}}),e.on("ping",Cn),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-q,Zc({name:E,database:u,url:t.url,latency:t.connection.latency})),q=null}),e.on("close",(A,N)=>{clearInterval(v),clearTimeout(F),clearInterval(te),Ir&&Ir.emit("close"),Wi&&Wi.end();for(let[b,{reject:C}]of g)C(new Error(`Connection closed ${N?.toString()} ${A}`));ae.debug?.(s,"closed",A,N?.toString())});function sn(A,N){e.isFinished=!0,e.close(A,N),t.connection?.emit("finished")}a(sn,"close");let Cr=new Set;async function sc(A){let N=up(A);if(Cr.has(N)){ae.debug?.("Blob already being sent",N);return}Cr.add(N);try{let b;xt++;for await(let C of A.stream())b&&(ae.debug?.("Sending blob chunk",N,"length",b.length),e.send((0,et.encode)([tg,{fileId:N,size:A.size},b]))),b=C,e._socket.writableNeedDrain&&(ae.debug?.("draining",N),await new Promise(x=>e._socket.once("drain",x)),ae.debug?.("drained",N)),Dt(C.length,"bytes-sent",`${E}.${u}`,"replication","blob");ae.debug?.("Sending final blob chunk",N,"length",b.length),e.send((0,et.encode)([tg,{fileId:N,size:A.size,finished:!0},b]))}catch(b){ae.debug?.("Error sending blob",b),e.send((0,et.encode)([tg,{fileId:N,finished:!0,error:b.toString()},Buffer.alloc(0)]))}finally{Cr.delete(N),xt--,xt<gm&&dt?.()}}a(sc,"sendBlobs");function $d(A,N){let b=up(A),C=me.get(b);ae.debug?.("Received transaction for record",N,"with blob",b,"has stream",!!C,"ended",!!C?.writableEnded),C?C.writableEnded&&me.delete(b):(C=new NO.PassThrough,me.set(b,C)),C.connectedToBlob=!0,C.lastChunk=Date.now(),C.recordId=N,A.size===void 0&&C.expectedSize&&(A.size=C.expectedSize);let x=C.blob??createBlob(C,A);C.blob=x;let w=x.save({primaryStore:m.auditStore});return w&&(w.blobId=b,Ae.push(w),w.finally(()=>{ae.debug?.(`Finished receiving blob stream ${b}`),Ae.splice(Ae.indexOf(w),1)})),x}a($d,"receiveBlobs");function Ko(){if(_||(_=!0,t.connection?.on("subscriptions-updated",Ko)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;d||(d=m?.auditStore);try{for(let C of m?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let x of C.value.nodes||[])x.lastTxnTime>(A.get(x.id)??0)&&A.set(x.id,x.lastTxnTime)}catch(C){if(!C.message.includes("Can not re"))throw C}let N=t.connection?.nodeSubscriptions?.[0];R=[];let b=t.connection?.nodeSubscriptions.map((C,x)=>{let w=[],{replicateByDefault:H}=C;if(C.subscriptions){for(let k of C.subscriptions)if(k.subscribe&&(k.schema||k.database)===u){let Ce=k.table;S?.[Ce]?.replicate!==!1&&w.push(Ce)}H=!1}else for(let k in S)(H?S[k].replicate===!1:S[k].replicate)&&w.push(k);let U=d&&KE(C.name,d),j=m?.dbisDB?.get([Symbol.for("seq"),U])??1,J=Math.max(j?.seqId??1,(typeof C.start_time=="string"?new Date(C.start_time).getTime():C.start_time)??1);if(ae.debug?.("Starting time recorded in db",C.name,U,u,j?.seqId,"start time:",J,new Date(J)),N!==C){let k=d&&KE(N.name,d),Ce=m?.dbisDB?.get([Symbol.for("seq"),k])??1;for(let de of Ce?.nodes||[])de.name===C.name&&(J=de.seqId,ae.debug?.("Using sequence id from proxy node",N.name,J))}if(U===void 0?ae.warn("Starting subscription request from node",C,"but no node id found"):R.push(U),A.get(U)>J&&(J=A.get(U),ae.debug?.("Updating start time from more recent txn recorded",N.name,J)),J===1&&rg)try{new URL(rg).hostname===C.name&&E===C.name?(ae.warn?.(`Requesting full copy of database ${u} from ${rg}`),J=0):J=Date.now()-6e4}catch(k){ae.error?.("Error parsing leader URL",rg,k)}return ae.trace?.(s,"defining subscription request",C.name,u,new Date(J)),{name:C.name,replicateByDefault:H,tables:w,startTime:J,endTime:C.end_time}});if(b)if(ae.debug?.(s,"sending subscription request",b,m?.dbisDB?.path),clearTimeout(z),b.length>0)e.send((0,et.encode)([yk,b]));else{let C=a(()=>{let x=performance.now();z=setTimeout(()=>{ne<=x?sn(1008,"Connection has no subscriptions and is no longer used"):C()},se).unref()},"schedule_close");C()}}a(Ko,"sendSubscriptionRequestUpdate");function Vd(A,N){if(!A)return;let b=Bt[A];return b||(b=N.getResidencyRecord(A),Bt[A]=b),b}a(Vd,"getResidence");function Yo(A){return!(Ra&&Ra!="*"&&!Ra[A]&&!Ra.includes?.(A)&&!Ra.some?.(N=>N.name===A))}a(Yo,"checkDatabaseAccess");function Wo(A){if(m=m||f.get(A),!Yo(A))throw new Error(`Access to database "${A}" is not permitted`);m||ae.warn?.(`No database named "${A}" was declared and registered`),d=m?.auditStore,S||(S=Ze()?.[A]);let N=tt();if(N===E)throw N?new Error("Should not connect to self",N):new Error("Node name not defined");return Sm(N,A),!0}a(Wo,"setDatabase");function Sm(A,N){let b=Ze()?.[N],C=[];for(let x in b){let w=b[x];C.push({table:x,schemaDefined:w.schemaDefined,attributes:w.attributes.map(H=>({name:H.name,type:H.type,isPrimaryKey:H.isPrimaryKey}))})}ae.trace?.("Sending database info for node",A,"database name",N),e.send((0,et.encode)([bk,A,N,C]))}a(Sm,"sendNodeDBName");function Kd(A){let N=Ze()?.[A],b=[];for(let C in N){if(Pn&&!Pn.some(w=>w.replicateByDefault?!w.tables.includes(C):w.tables.includes(C)))continue;let x=N[C];b.push({table:C,schemaDefined:x.schemaDefined,attributes:x.attributes.map(w=>({name:w.name,type:w.type,isPrimaryKey:w.isPrimaryKey}))})}e.send((0,et.encode)([Pk,b,A]))}a(Kd,"sendDBSchema"),te=setInterval(()=>{for(let[A,N]of me)N.lastChunk+Re<Date.now()&&(ae.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${N.recordId??"unknown"} from ${E}`),me.delete(A),N.end())},Re).unref();let ic=1,oc=[];return{end(){Wi&&Wi.end(),Ir&&Ir.emit("close")},getRecord(A){let N=ic++;return new Promise((b,C)=>{let x=[wk,N,A.table.tableId,A.id];oc[A.table.tableId]||(x.push(A.table.tableName),oc[A.table.tableId]=!0),e.send((0,et.encode)(x)),ne=performance.now(),g.set(N,{tableId:A.table.tableId,key:A.id,resolve(w){let{table:H,entry:U}=A;if(b(w),w)return H._recordRelocate(U,w)},reject:C})})},sendOperation(A){let N=ic++;return A.requestId=N,e.send((0,et.encode)([wO,A])),new Promise((b,C)=>{g.set(N,{resolve:b,reject:C})})}};function K(A){L(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,N=0,b=A.length){let C=b-N;L(C),A.copy(o,c,N,b),c+=C}function y(A){L(8),l.setFloat64(c,A),c+=8}function L(A){if(A+16>o.length-c){let N=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(N,0,i,c),c=c-i,i=0,o=N,l=new DataView(o.buffer,0,o.length)}}function I(A,N){let b=A.database??"data";if(b!=="data"&&!Ye[b]){ae.warn?.("Database not found",A.database);return}N||(N={});let C=N.schemaDefined,x=!1,w=A.schemaDefined,H=N.attributes||[];for(let U=0;U<A.attributes?.length;U++){let j=A.attributes[U],J=H.find(k=>k.name===j.name);(!J||J.type!==j.type)&&(C?ae.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${j.name}: ${j.type}' from '${E}' does not match local attribute ${J?"'"+J.name+": "+J.type+"'":"which does not exist"}`):(x=!0,w||(j.indexed=!0),J?H[H.indexOf(J)]=j:H.push(j)))}return x?(ae.debug?.("(Re)creating",A),_t({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:H,...N})):N}}var vk,et,Uk,xk,ae,DO,Bk,Hk,rl,kk,NO,Fk,yk,bk,Ok,xu,Nk,bO,wk,ZE,wO,eg,Ik,Ck,Pk,tg,Gk,IO,CO,q_,PO,qk,$k,ase,rg,LO,ya,ng,Dk,cse,Lk,OO,Mk,$_,MO=be(()=>{Ue();so();cO();vO();ms();vk=M(ce());G();ru();et=require("msgpackr"),Uk=require("ws"),xk=require("worker_threads"),ae=M(pi());k_();DO=require("events"),Bk=M(Zs()),Hk=M(require("node:tls"));Xc();rl=M(require("node:process")),kk=require("node:net");Ci();fs();NO=require("node:stream"),Fk=M(require("minimist")),yk=129,bk=140,Ok=141,xu=142,Nk=130,bO=132,wk=133,ZE=134,wO=136,eg=137,Ik=143,Ck=144,Pk=145,tg=146,Gk=0,IO=1,CO=2,q_=3,PO=4,qk=0,$k=1,ase=(0,Fk.default)(rl.argv),rg=ase.HDB_LEADER_URL??rl.env.HDB_LEADER_URL,LO=new Map,ya=new Map,ng=!0,Dk=300,cse=2,Lk=3e4;a(ig,"createWebSocket");Mk=500,$_=class extends DO.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??js(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=Mk;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await ig(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;ae.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${rl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ae[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=Mk,Zc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=V_(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ae.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ae.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ae.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(Mu({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();ae.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(V_,"replicateOverWS")});var Aa={};Be(Aa,{clearThisNodeName:()=>pse,disableReplication:()=>fse,enabled_databases:()=>Ra,forEachReplicatedDatabase:()=>ma,getThisNodeId:()=>og,getThisNodeName:()=>tt,getThisNodeUrl:()=>pa,hostnameToUrl:()=>ug,lastTimeInAuditStore:()=>U_,monitorNodeCAs:()=>Zk,replicateOperation:()=>gse,replication_certificate_authorities:()=>nl,sendOperationToNode:()=>W_,servers:()=>use,setReplicator:()=>tF,start:()=>dse,startOnMainThread:()=>dO,subscribeToNode:()=>H_,unsubscribeFromNode:()=>QE,urlToNodeName:()=>js});function dse(e){if(e.port||(e.port=Es.default.get(B.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=Es.default.get(B.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 s of B_(e))t.set(js(s.url),s);_se(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ke.ws(async(s,i,o,c)=>{if(i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,o);await o,s._socket.unref(),V_(s,e,i?.user),s.on("error",l=>{l.code!=="ECONNREFUSED"&&or.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Ke.http((s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!s.authorized&&s._nodeRequest.socket.authorizationError&&or.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let o=sr().primaryStore;if(s.authorized&&s.peerCertificate.subject){let c=s.peerCertificate.subject,l=c&&(o.get(c.CN)||t.get(c.CN));if(l)if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){or.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l;else or.warn(`No node found for certificate common name ${c.CN}, available nodes are ${Array.from(o.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=o.get(s.ip)||t.get(s.ip);c?s.user=c:or.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...o.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=a(()=>{let o=new Set(s.secureContexts.values());s.defaultContext&&o.add(s.defaultContext);for(let c of o)try{let l=Array.from(nl);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=lg.createSecureContext(u)}catch(l){or.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Es.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&i()}Zk(()=>{for(let s of n)s()})}function Zk(e){let t=0;Du(r=>{r?.ca&&(nl.add(r.ca),nl.size!==t&&(t=nl.size,e?.()))})}function fse(e=!0){Xk=e}function _se(e){Xk||(Ze(),Ra=e.databases,ma(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||ya;for(let[s,i]of Y_){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];tF(r,s,e),LO.get(s)?.forEach(i=>i(s))}}))}function tF(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 eF extends qr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||ya,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(or.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new vn,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 f;for(let h of c){if(h===Ke.hostname)continue;let _=hse(h,eF.subscription,e);_?.isConnected&&!u.has(_)&&(!f||_.latency<f.latency)&&(f=_)}if(!f)throw l||new jk.ServerError("No connection to any other nodes are available",502);let d={requestId:lse++,table:t,entry:i,id:i.key};u.add(f);try{return await f.getRecord(d)}catch(h){if(f.isConnected)throw h;or.warn("Error in load from node",cg,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function rF(e,t,r,n,s){let i=Y_.get(e);i||Y_.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new $_(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function hse(e,t,r){let n=Yk.get(e)?.get(r);if(n)return n;let s=sr().primaryStore.get(e);return s?.url&&(n=rF(s.url,t,r,e,s.authorization),Yk.set(e,Y_.get(s.url))),n}async function W_(e,t,r){r||(r={}),r.serverName=e.name;let n=await ig(e.url,r),s=V_(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{or.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function H_(e){try{Jk.isMainThread&&or.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=ya.get(e.database);if(!t){let n;t=new Promise(s=>{or.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,ya.set(e.database,t)}let r=rF(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>x_(n,e.database)),e.replicateByDefault)}catch(t){or.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function QE({name:e,url:t,database:r}){or.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(sr().primaryStore.getRange({})));let n=Y_.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function mse(){if(UO!==void 0)return UO;let e=Es.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||Es.default.get(B.TLS_CERTIFICATE);if(e)return UO=new zk.X509Certificate((0,Qk.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function tt(){return cg||(cg=Es.default.get("replication_hostname")??js(Es.default.get("replication_url"))??mse()??Wk("operationsapi_network_secureport")??Wk("operationsapi_network_port")??"127.0.0.1")}function pse(){cg=void 0}function Wk(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function ag(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function og(e){return v_(e)?.[tt()]}function pa(){let e=Es.default.get("replication_url");return e||ug(tt())}function ug(e){let t=ag("replication_port");if(t)return`ws://${e}:${t}`;if(t=ag("replication_secureport"),t)return`wss://${e}:${t}`;if(t=ag("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=ag("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function js(e){if(e)return new URL(e).hostname}function ma(e,t){for(let n of Object.getOwnPropertyNames(Ye))r(n);return K_(n=>{r(n)}),il((n,s)=>{r(n.databaseName)});function r(n){let s=Ye[n];or.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):Ese(n)&&t(s,n,!1)}a(r,"forDatabase")}function Ese(e){let t=Ye[e];for(let r in t)if(t[r].replicate)return!0}function U_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function gse(e){let t={message:""};if(e.replicated){e.replicated=!1,or.trace?.("Replicating operation",e.operation,"to nodes",Ke.nodes.map(n=>n.name));let r=await Promise.allSettled(Ke.nodes.map(n=>W_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ke.nodes[s]?.name,i})}return t}var Es,or,zk,Qk,lg,jk,Jk,Xk,lse,use,nl,Ra,Y_,Yk,UO,cg,ms=be(()=>{Ue();na();Kl();MO();Dr();Es=M(ce()),or=M(X()),zk=require("crypto"),Qk=require("fs");k_();Xc();G();cO();lg=M(require("node:tls")),jk=M(he()),Jk=require("worker_threads"),lse=1,use=[],nl=Es.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(lg.rootCertificates):new Set;a(dse,"start");a(Zk,"monitorNodeCAs");a(fse,"disableReplication");a(_se,"assignReplicationSource");a(tF,"setReplicator");Y_=new Map;a(rF,"getConnection");Yk=new Map;a(hse,"getConnectionByName");a(W_,"sendOperationToNode");a(H_,"subscribeToNode");a(QE,"unsubscribeFromNode");a(mse,"getCommonNameFromCert");a(tt,"getThisNodeName");a(pse,"clearThisNodeName");Object.defineProperty(Ke,"hostname",{get(){return tt()}});a(Wk,"getHostFromListeningPort");a(ag,"getPortFromListeningPort");a(og,"getThisNodeId");Ke.replication={getThisNodeId:og,exportIdMapping:v_};a(pa,"getThisNodeUrl");a(ug,"hostnameToUrl");a(js,"urlToNodeName");a(ma,"forEachReplicatedDatabase");a(Ese,"hasExplicitlyReplicatedTable");a(U_,"lastTimeInAuditStore");a(gse,"replicateOperation")});var mg=P((RIe,aF)=>{"use strict";var Bu=_H(),{validateBySchema:z_}=nt(),{common_validators:Hu,schema_regex:xO}=Ri(),ar=require("joi"),Sse=X(),Tse=require("uuid").v4,_g=_o(),ku=(G(),D($)),Ase=require("util"),ba=Fn(),{handleHDBError:So,hdb_errors:Rse,ClientError:Q_}=he(),{HDB_ERROR_MSGS:dg,HTTP_STATUS_CODES:To}=Rse,{SchemaEventMsg:hg}=Ks(),nF=Er(),{getDatabases:yse}=(Ue(),D(at)),{transformReq:Fu}=oe(),{replicateOperation:sF}=(ms(),D(Aa)),fg=ar.string().min(1).max(Hu.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+Hu.schema_format.message}),bse=ar.string().min(1).max(Hu.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+Hu.schema_format.message}).required(),Ose=ar.string().min(1).max(Hu.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+Hu.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();aF.exports={createSchema:Nse,createSchemaStructure:iF,createTable:wse,createTableStructure:oF,createAttribute:Lse,dropSchema:Ise,dropTable:Cse,dropAttribute:Pse,getBackup:Mse};async function Nse(e){let t=await iF(e);return _g.signalSchemaChange(new hg(process.pid,e.operation,e.schema)),t}a(Nse,"createSchema");async function iF(e){let t=z_(e,ar.object({database:fg,schema:fg}));if(t)throw new Q_(t.message);if(Fu(e),!await Bu.checkSchemaExists(e.schema))throw So(new Error,dg.SCHEMA_EXISTS_ERR(e.schema),To.BAD_REQUEST,ku.LOG_LEVELS.ERROR,dg.SCHEMA_EXISTS_ERR(e.schema),!0);return await ba.createSchema(e),`database '${e.schema}' successfully created`}a(iF,"createSchemaStructure");async function wse(e){return Fu(e),e.hash_attribute=e.primary_key??e.hash_attribute,await oF(e)}a(wse,"createTable");async function oF(e){let t=z_(e,ar.object({database:fg,schema:fg,table:bse,residence:ar.array().items(ar.string().min(1)).optional(),hash_attribute:Ose}));if(t)throw new Q_(t.message);if(!await Bu.checkSchemaTableExists(e.schema,e.table))throw So(new Error,dg.TABLE_EXISTS_ERR(e.schema,e.table),To.BAD_REQUEST,ku.LOG_LEVELS.ERROR,dg.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Tse(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ba.createTable(n,e);else throw So(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",To.BAD_REQUEST);else await ba.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(oF,"createTableStructure");async function Ise(e){let t=z_(e,ar.object({database:ar.string(),schema:ar.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Q_(t.message);Fu(e);let r=await Bu.checkSchemaExists(e.schema);if(r)throw So(new Error,r,To.NOT_FOUND,ku.LOG_LEVELS.ERROR,r,!0);let n=await Bu.schema_describe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await ba.dropSchema(e),_g.signalSchemaChange(new hg(process.pid,e.operation,e.schema)),await nF.purgeSchemaTableStreams(e.schema,s);let i=await sF(e);return i.message=`successfully deleted '${e.schema}'`,i}a(Ise,"dropSchema");async function Cse(e){let t=z_(e,ar.object({database:ar.string(),schema:ar.string(),table:ar.string().required()}));if(t)throw new Q_(t.message);Fu(e);let r=await Bu.checkSchemaTableExists(e.schema,e.table);if(r)throw So(new Error,r,To.NOT_FOUND,ku.LOG_LEVELS.ERROR,r,!0);await ba.dropTable(e),await nF.purgeTableStream(e.schema,e.table);let n=await sF(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(Cse,"dropTable");async function Pse(e){let t=z_(e,ar.object({database:ar.string(),schema:ar.string(),table:ar.string().required(),attribute:ar.string().required()}));if(t)throw new Q_(t.message);Fu(e);let r=await Bu.checkSchemaTableExists(e.schema,e.table);if(r)throw So(new Error,r,To.NOT_FOUND,ku.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw So(new Error,"You cannot drop a hash attribute",To.BAD_REQUEST,void 0,void 0,!0);if(ku.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw So(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,To.BAD_REQUEST,void 0,void 0,!0);try{return await ba.dropAttribute(e),Dse(e),_g.signalSchemaChange(new hg(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Sse.error(`Got an error deleting attribute ${Ase.inspect(e)}.`),n}}a(Pse,"dropAttribute");function Dse(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(Dse,"dropAttributeFromGlobal");async function Lse(e){Fu(e);let t=yse()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw So(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,To.BAD_REQUEST,void 0,void 0,!0);return await ba.createAttribute(e),_g.signalSchemaChange(new hg(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Lse,"createAttribute");function Mse(e){return ba.getBackup(e)}a(Mse,"getBackup")});var lF=P((bIe,cF)=>{"use strict";var{OPERATIONS_ENUM:vse}=(G(),D($)),BO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=vse.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};cF.exports=BO});var HO=P((wIe,hF)=>{"use strict";var Use=Fn(),NIe=lF(),pg=oe(),Eg=(G(),D($)),xse=ce(),{handleHDBError:uF,hdb_errors:Bse}=he(),{HDB_ERROR_MSGS:dF,HTTP_STATUS_CODES:fF}=Bse,Hse=Object.values(Eg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),_F="To use this operation audit log must be enabled in harperdb-config.yaml";hF.exports=kse;async function kse(e){if(pg.isEmpty(e.schema))throw new Error(dF.SCHEMA_REQUIRED_ERR);if(pg.isEmpty(e.table))throw new Error(dF.TABLE_REQUIRED_ERR);if(!xse.get(Eg.CONFIG_PARAMS.LOGGING_AUDITLOG))throw uF(new Error,_F,fF.BAD_REQUEST,Eg.LOG_LEVELS.ERROR,_F,!0);let t=pg.checkSchemaTableExist(e.schema,e.table);if(t)throw uF(new Error,t,fF.NOT_FOUND,Eg.LOG_LEVELS.ERROR,t,!0);if(!pg.isEmpty(e.search_type)&&Hse.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Use.readAuditLog(e)}a(kse,"readAuditLog")});var pF=P((CIe,mF)=>{"use strict";var{OPERATIONS_ENUM:Fse}=(G(),D($)),kO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Fse.GET_BACKUP,this.schema=t,this.table=r}};mF.exports=kO});var SF=P((MIe,gF)=>{"use strict";var Gse=Fn(),DIe=pF(),FO=oe(),qse=(G(),D($)),LIe=ce(),{handleHDBError:$se,hdb_errors:Vse}=he(),{HDB_ERROR_MSGS:EF,HTTP_STATUS_CODES:Kse}=Vse;gF.exports=Yse;async function Yse(e){if(FO.isEmpty(e.schema))throw new Error(EF.SCHEMA_REQUIRED_ERR);if(FO.isEmpty(e.table))throw new Error(EF.TABLE_REQUIRED_ERR);let t=FO.checkSchemaTableExist(e.schema,e.table);if(t)throw $se(new Error,t,Kse.NOT_FOUND,qse.LOG_LEVELS.ERROR,t,!0);return await Gse.getBackup(read_audit_log_object)}a(Yse,"getBackup")});var yF=P((UIe,RF)=>{"use strict";var Wse=ce(),Oa=require("joi"),zse=nt(),TF=require("moment"),Qse=require("fs-extra"),GO=require("path"),jse=require("lodash"),j_=(G(),D($)),{LOG_LEVELS:ol}=(G(),D($)),Jse="YYYY-MM-DD hh:mm:ss",Xse=GO.resolve(__dirname,"../logs");RF.exports=function(e){return zse.validateBySchema(e,Zse)};var Zse=Oa.object({from:Oa.custom(AF),until:Oa.custom(AF),level:Oa.valid(ol.NOTIFY,ol.FATAL,ol.ERROR,ol.WARN,ol.INFO,ol.DEBUG,ol.TRACE),order:Oa.valid("asc","desc"),limit:Oa.number().min(1),start:Oa.number().min(0),log_name:Oa.custom(eie)});function AF(e,t){if(TF(e,TF.ISO_8601).format(Jse)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(AF,"validateDatetime");function eie(e,t){if(jse.invert(j_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Wse.get(j_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?j_.LOG_NAMES.HDB:e,i=s===j_.LOG_NAMES.INSTALL?GO.join(Xse,j_.LOG_NAMES.INSTALL):GO.join(n,s);return Qse.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(eie,"validateReadLogPath")});var $O=P((BIe,OF)=>{"use strict";var gg=(G(),D($)),tie=X(),rie=ce(),nie=yF(),qO=require("path"),bF=require("fs-extra"),{once:sie}=require("events"),{handleHDBError:iie,hdb_errors:oie}=he(),{PACKAGE_ROOT:aie}=Et(),cie=qO.join(aie,"logs"),lie=1e3,uie=200;OF.exports=die;async function die(e){let t=nie(e);if(t)throw iie(t,t.message,oie.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=rie.get(gg.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?gg.LOG_NAMES.HDB:e.log_name,s=n===gg.LOG_NAMES.INSTALL?qO.join(cie,gg.LOG_NAMES.INSTALL):qO.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,f=u?new Date(e.until):void 0,d=e.limit===void 0?lie:e.limit,h=e.order===void 0?void 0:e.order,_=e.start===void 0?0:e.start,m=_+d,S=0;h==="desc"&&!l&&!f&&(S=Math.max(bF.statSync(s).size-(m+5)*uie,0));let g=bF.createReadStream(s,{start:S});g.on("error",F=>{tie.error(F)});let R=0,E=[],T="",O;g.on("data",F=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=T+F;let Q=0,te;for(;(te=q.exec(F))&&!g.destroyed;){O&&(O.message=F.slice(Q,te.index),v(O));let[se,z,ne]=te,le=ne.split("] ["),ie=le[0],Re=le[1];le.splice(0,2),O={timestamp:z,thread:ie,level:Re,tags:le,message:""},Q=te.index+se.length}T=F.slice(Q)}),g.on("end",F=>{g.destroyed||O&&(O.message=T.trim(),v(O))}),g.resume();function v(F){let q,Q,te;switch(!0){case(i&&c&&u):q=new Date(F.timestamp),Q=new Date(l),te=new Date(f),F.level===o&&q>=Q&&q<=te&&R<_?R++:F.level===o&&q>=Q&&q<=te&&(Na(F,h,E),R++,R===m&&g.destroy());break;case(i&&c):q=new Date(F.timestamp),Q=new Date(l),F.level===o&&q>=Q&&R<_?R++:F.level===o&&q>=Q&&(Na(F,h,E),R++,R===m&&g.destroy());break;case(i&&u):q=new Date(F.timestamp),te=new Date(f),F.level===o&&q<=te&&R<_?R++:F.level===o&&q<=te&&(Na(F,h,E),R++,R===m&&g.destroy());break;case(c&&u):q=new Date(F.timestamp),Q=new Date(l),te=new Date(f),q>=Q&&q<=te&&R<_?R++:q>=Q&&q<=te&&(Na(F,h,E),R++,R===m&&g.destroy());break;case i:F.level===o&&R<_?R++:F.level===o&&(Na(F,h,E),R++,R===m&&g.destroy());break;case c:q=new Date(F.timestamp),Q=new Date(l),q>=Q&&R<_?R++:q>=Q&&R>=_&&(Na(F,h,E),R++,R===m&&g.destroy());break;case u:q=new Date(F.timestamp),te=new Date(f),q<=te&&R<_?R++:q<=te&&R>=_&&(Na(F,h,E),R++,R===m&&g.destroy());break;default:R<_?R++:(Na(F,h,E),R++,R===m&&g.destroy())}}return a(v,"onLogMessage"),await sie(g,"close"),E}a(die,"readLog");function Na(e,t,r){t==="desc"?fie(e,r):t==="asc"?_ie(e,r):r.push(e)}a(Na,"pushLineToResult");function fie(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(fie,"insertDescending");function _ie(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(_ie,"insertAscending")});var Sg=P(($Ie,CF)=>{"use strict";var VO=require("joi"),{string:Gu,boolean:NF,date:hie}=VO.types(),mie=nt(),{validateSchemaExists:kIe,validateTableExists:FIe,validateSchemaName:GIe}=Ri(),pie=(G(),D($)),Eie=Pt(),wF=ce();wF.initSync();var qIe=Gu.invalid(wF.get(pie.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Eie.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),IF={operation:Gu.valid("add_node","update_node","set_node_replication"),node_name:Gu.optional(),subscriptions:VO.array().items({table:Gu.optional(),schema:Gu.optional(),database:Gu.optional(),subscribe:NF.required(),publish:NF.required().custom(Sie),start_time:hie.iso()})};function gie(e){return mie.validateBySchema(e,VO.object(IF))}a(gie,"addUpdateNodeValidator");function Sie(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(Sie,"checkForFalsy");CF.exports={addUpdateNodeValidator:gie,validation_schema:IF}});var qu=P((KIe,PF)=>{"use strict";var KO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},YO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};PF.exports={Node:KO,NodeSubscription:YO}});var LF=P((WIe,DF)=>{"use strict";var Tie=(G(),D($)).OPERATIONS_ENUM,WO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Tie.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};DF.exports=WO});var J_=P((QIe,MF)=>{"use strict";var zO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},QO=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)}};MF.exports={RemotePayloadObject:zO,RemotePayloadSubscription:QO}});var UF=P((JIe,vF)=>{"use strict";var jO=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}};vF.exports=jO});var BF=P((nCe,xF)=>{"use strict";var Aie=UF(),ZIe=Ft(),eCe=ht(),Rie=X(),{getSchemaPath:tCe,getTransactionAuditStorePath:rCe}=gt(),{getDatabases:yie}=(Ue(),D(at));xF.exports=bie;async function bie(e){let t=new Aie;try{let r=yie()[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){Rie.warn(`unable to stat table dbi due to ${r}`)}return t}a(bie,"lmdbGetTableSize")});var kF=P((iCe,HF)=>{"use strict";var JO=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}};HF.exports=JO});var Vu=P((dCe,$F)=>{"use strict";var Oie=require("fs-extra"),Nie=require("path"),Qr=require("systeminformation"),wa=X(),FF=Er(),aCe=Pt(),$u=(G(),D($)),wie=BF(),Iie=uo(),{getThreadInfo:GF}=st(),X_=ce();X_.initSync();var Cie=kF(),{openEnvironment:cCe}=ht(),{getSchemaPath:lCe}=gt(),{database:uCe,databases:XO}=(Ue(),D(at)),Tg;$F.exports={getHDBProcessInfo:rN,getNetworkInfo:sN,getDiskInfo:nN,getMemoryInfo:tN,getCPUInfo:eN,getTimeInfo:ZO,getSystemInformation:iN,systemInformation:Pie,getTableSize:oN,getMetrics:aN};function ZO(){return Qr.time()}a(ZO,"getTimeInfo");async function eN(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...f}=await Qr.cpu();f.cpu_speed=await Qr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:h,raw_currentload_irq:_,raw_currentload_nice:m,raw_currentload_system:S,raw_currentload_user:g,cpus:R,...E}=await Qr.currentLoad();return E.cpus=[],R.forEach(T=>{let{raw_load:O,raw_load_idle:v,raw_load_irq:F,raw_load_nice:q,raw_load_system:Q,raw_load_user:te,...se}=T;E.cpus.push(se)}),f.current_load=E,f}catch(e){return wa.error(`error in getCPUInfo: ${e}`),{}}}a(eN,"getCPUInfo");async function tN(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Qr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return wa.error(`error in getMemoryInfo: ${e}`),{}}}a(tN,"getMemoryInfo");async function rN(){let e={core:[],clustering:[]};try{let t=await Qr.processes(),r;try{r=Number.parseInt(await Oie.readFile(Nie.join(X_.get($u.CONFIG_PARAMS.ROOTPATH),$u.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===$u.NODE_ERROR_CODES.ENOENT)wa.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return wa.error(`error in getHDBProcessInfo: ${t}`),e}}a(rN,"getHDBProcessInfo");async function nN(){let e={};try{if(!X_.get($u.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Qr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await Qr.fsStats();return e.read_write=u,e.size=await Qr.fsSize(),e}catch(t){return wa.error(`error in getDiskInfo: ${t}`),e}}a(nN,"getDiskInfo");async function sN(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return X_.get($u.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Qr.networkInterfaceDefault(),e.latency=await Qr.inetChecksite("google.com"),(await Qr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:f,carrier_changes:d,...h}=n;e.interfaces.push(h)}),(await Qr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return wa.error(`error in getNetworkInfo: ${t}`),e}}a(sN,"getNetworkInfo");async function iN(){if(Tg!==void 0)return Tg;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Qr.osInfo();e=c;let l=await Qr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,Tg=e,Tg}catch(t){return wa.error(`error in getSystemInformation: ${t}`),e}}a(iN,"getSystemInformation");async function oN(){let e=[],t=await Iie.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await wie(n));return e}a(oN,"getTableSize");async function aN(){let e={};for(let t in XO){let r=e[t]={},n=r.tables={};for(let s in XO[t])try{let i=XO[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,f,d]=l.trim().split(" ");return{pid:u,thread:f,txnid:d}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){wa.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(aN,"getMetrics");async function qF(){if(X_.get($u.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await FF.getNATSReferences(),t=await FF.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(qF,"getNatsStreamInfo");async function Pie(e){let t=new Cie;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await iN(),t.time=ZO(),t.cpu=await eN(),t.memory=await tN(),t.disk=await nN(),t.network=await sN(),t.harperdb_processes=await rN(),t.table_size=await oN(),t.metrics=await aN(),t.threads=await GF(),t.replication=await qF(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await iN();break;case"time":t.time=ZO();break;case"cpu":t.cpu=await eN();break;case"memory":t.memory=await tN();break;case"disk":t.disk=await nN();break;case"network":t.network=await sN();break;case"harperdb_processes":t.harperdb_processes=await rN();break;case"table_size":t.table_size=await oN();break;case"database_metrics":case"metrics":t.metrics=await aN();break;case"threads":t.threads=await GF();break;case"replication":t.replication=await qF();break;default:break}return t}a(Pie,"systemInformation")});var Ao=P((pCe,WF)=>{"use strict";var Die=gn(),cN=oe(),Lie=require("util"),al=(G(),D($)),VF=ce();VF.initSync();var Mie=Gb(),KF=Vr(),{Node:_Ce,NodeSubscription:hCe}=qu(),vie=_u(),Uie=LF(),{RemotePayloadObject:xie,RemotePayloadSubscription:Bie}=J_(),{handleHDBError:Hie,hdb_errors:kie}=he(),{HTTP_STATUS_CODES:Fie,HDB_ERROR_MSGS:Gie}=kie,qie=Ys(),$ie=Vu(),{packageJson:Vie}=Et(),{getDatabases:Kie}=(Ue(),D(at)),mCe=Lie.promisify(Mie.authorize),Yie=KF.searchByHash,Wie=KF.searchByValue;WF.exports={isEmpty:zie,getNodeRecord:Qie,upsertNodeRecord:jie,buildNodePayloads:Jie,checkClusteringEnabled:Xie,getAllNodeRecords:Zie,getSystemInfo:eoe,reverseSubscription:YF};function zie(e){return e==null}a(zie,"isEmpty");async function Qie(e){let t=new vie(al.SYSTEM_SCHEMA_NAME,al.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Yie(t)}a(Qie,"getNodeRecord");async function jie(e){let t=new Uie(al.SYSTEM_SCHEMA_NAME,al.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Die.upsert(t)}a(jie,"upsertNodeRecord");function YF(e){if(cN.isEmpty(e.subscribe)||cN.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(YF,"reverseSubscription");function Jie(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,f=cN.getTableHashAttribute(l,u),{subscribe:d,publish:h}=YF(c),_=Kie()[l]?.[u],m=new Bie(l,u,f,h,d,c.start_time,_.schemaDefined?_.attributes:void 0);s.push(m)}return new xie(r,t,s,n)}a(Jie,"buildNodePayloads");function Xie(){if(!VF.get(al.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Hie(new Error,Gie.CLUSTERING_NOT_ENABLED,Fie.BAD_REQUEST,void 0,void 0,!0)}a(Xie,"checkClusteringEnabled");async function Zie(){let e=new qie(al.SYSTEM_SCHEMA_NAME,al.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Wie(e))}a(Zie,"getAllNodeRecords");async function eoe(){let e=await $ie.getSystemInformation();return{hdb_version:Vie.version,node_version:e.node_version,platform:e.platform}}a(eoe,"getSystemInfo")});var lN=P((gCe,tG)=>{"use strict";var Ag=Er(),zF=oe(),QF=Pt(),jF=(G(),D($)),Rg=X(),JF=mg(),toe=c_(),{RemotePayloadObject:roe}=J_(),{handleHDBError:XF,hdb_errors:noe}=he(),{HTTP_STATUS_CODES:ZF}=noe,{NodeSubscription:eG}=qu();tG.exports=soe;async function soe(e,t){let r;try{r=await Ag.request(`${t}.${QF.REQUEST_SUFFIX}`,new roe(jF.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Rg.trace("Response from remote describe all request:",r)}catch(o){Rg.error(`addNode received error from describe all request to remote node: ${o}`);let c=Ag.requestErrorHandler(o,"add_node",t);throw XF(new Error,c,ZF.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===QF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw XF(new Error,o,ZF.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===jF.SYSTEM_SCHEMA_NAME){await Ag.createLocalTableStream(l,c);let m=new eG(l,c,o.publish,o.subscribe);m.start_time=o.start_time,i.push(m);continue}let u=zF.doesSchemaExist(l),f=n[l]!==void 0,d=c?zF.doesTableExist(l,c):!0,h=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!f||!d&&!h){s.push(o);continue}if(!u&&f&&(Rg.trace(`addNode creating schema: ${l}`),await JF.createSchema({operation:"create_schema",schema:l})),!d&&h){Rg.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let m=new toe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(m.attributes=n[l][c].attributes),await JF.createTable(m)}await Ag.createLocalTableStream(l,c);let _=new eG(l,c,o.publish,o.subscribe);_.start_time=o.start_time,i.push(_)}return{added:i,skipped:s}}a(soe,"reviewSubscriptions")});var cl={};Be(cl,{addNodeBack:()=>loe,removeNodeBack:()=>uoe,setNode:()=>coe});async function coe(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=js(t)):t=ug(r);let n=(0,nG.validateBySchema)(e,aoe);if(n)throw(0,Ro.handleHDBError)(n,n.message,ooe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Ro.ClientError("url or hostname is required for remove_node operation");let _=r,m=sr(),S=await m.get(_);if(!S)throw new Ro.ClientError(_+" does not exist");try{await W_({url:S.url},{operation:Yt.REMOVE_NODE_BACK,name:S?.subscriptions?.length>0?tt():_},void 0)}catch(g){zn.warn(`Error removing node from target node ${_}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await m.delete(_),`Successfully removed '${_}' from cluster`}if(!t)throw new Ro.ClientError("url required for this operation");let s=pa();if(s==null)throw new Ro.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,gs.getReplicationCert)();let _=await(0,gs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,gs.createCsr)(),zn.info("Sending CSR to target node:",t)):_&&(c=_.certificate,zn.info("Sending CA named",_.name,"to target node",t))}let l={operation:Yt.ADD_NODE_BACK,hostname:(0,Ca.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Ca.get)(B.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Ca.get)(B.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(rG):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let _=rG(e);l.subscribe=_.subscribe,l.publish=_.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,f;try{u=await W_({url:t},l,e)}catch(_){_.message=`Error returned from ${t}: `+_.message,zn.warn("Error adding node:",t,"to cluster:",_),f=_}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw f?(f.message+=" and connection was required to sign certificate",f):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(zn.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,gs.setCertTable)({name:ioe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,gs.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 d={url:t,ca:u?.usingCA};if(e.hostname&&(d.name=e.hostname),e.subscriptions?d.subscriptions=e.subscriptions:d.replicates=!0,e.start_time&&(d.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(d.authorization=e.authorization),e.revoked_certificates&&(d.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?d.shard=u.shard:e.shard!==void 0&&(d.shard=e.shard),d.replicates){let _={url:s,ca:c,replicates:!0,subscriptions:null};(0,Ca.get)(B.REPLICATION_SHARD)!==void 0&&(_.shard=(0,Ca.get)(B.REPLICATION_SHARD)),e.retain_authorization&&(_.authorization=e.authorization),e.start_time&&(_.start_time=e.start_time),await Eo(tt(),_)}await Eo(u?u.nodeName:d.name??js(t),d);let h;return e.operation==="update_node"?h=`Successfully updated '${t}'`:h=`Successfully added '${t}' to cluster`,f&&(h+=" but there was an error updating target node: "+f.message),h}async function loe(e){zn.trace("addNodeBack received request:",e);let t=await(0,gs.signCertificate)(e),r;e.csr?(r=t.signingCA,zn.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,zn.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,gs.getReplicationCertAuth)();if(n.replicates){let i={url:pa(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Ca.get)(B.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Ca.get)(B.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Eo(tt(),i)}return await Eo(e.hostname,n),t.nodeName=tt(),t.usingCA=s?.certificate,zn.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function uoe(e){zn.trace("removeNodeBack received request:",e),await sr().delete(e.name)}function rG(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var gs,nG,Ia,Ca,zn,Ro,ioe,ooe,aoe,ll=be(()=>{gs=M(Zs()),nG=M(nt()),Ia=M(require("joi")),Ca=M(ce());G();k_();Xc();ms();zn=M(X()),Ro=M(he()),{pki:ioe}=require("node-forge"),{HTTP_STATUS_CODES:ooe}=Ro.hdb_errors,aoe=Ia.default.object({hostname:Ia.default.string(),verify_tls:Ia.default.boolean(),replicates:Ia.default.boolean(),subscriptions:Ia.default.array(),revoked_certificates:Ia.default.array(),shard:Ia.default.number()});a(coe,"setNode");a(loe,"addNodeBack");a(uoe,"removeNodeBack");a(rG,"reverseSubscription")});var wg=P((wCe,iG)=>{"use strict";var{handleHDBError:yg,hdb_errors:doe}=he(),{HTTP_STATUS_CODES:bg}=doe,{addUpdateNodeValidator:foe}=Sg(),Og=X(),Ng=(G(),D($)),sG=Pt(),_oe=oe(),Z_=Er(),eh=Ao(),uN=ce(),hoe=lN(),{Node:moe,NodeSubscription:poe}=qu(),{broadcast:Eoe}=st(),{setNode:goe}=(ll(),D(cl)),OCe=ce(),NCe=(G(),D($)),Soe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Toe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Aoe=uN.get(Ng.CONFIG_PARAMS.CLUSTERING_NODENAME);iG.exports=Roe;async function Roe(e,t=!1){if(Og.trace("addNode called with:",e),uN.get(Ng.CONFIG_PARAMS.REPLICATION_URL)||uN.get(Ng.CONFIG_PARAMS.REPLICATION_HOSTNAME))return goe(e);eh.checkClusteringEnabled();let r=foe(e);if(r)throw yg(r,r.message,bg.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await eh.getNodeRecord(n);if(!_oe.isEmptyOrZeroLength(d))throw yg(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,bg.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await hoe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Soe,o;let c=eh.buildNodePayloads(s,Aoe,Ng.OPERATIONS_ENUM.ADD_NODE,await eh.getSystemInfo()),l=[];for(let d=0,h=s.length;d<h;d++){let _=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new poe(_.schema,_.table,_.publish,_.subscribe))}Og.trace("addNode sending remote payload:",c);let u;try{u=await Z_.request(`${n}.${sG.REQUEST_SUFFIX}`,c)}catch(d){Og.error(`addNode received error from request: ${d}`);for(let _=0,m=s.length;_<m;_++){let S=s[_];S.publish=!1,S.subscribe=!1,await Z_.updateRemoteConsumer(S,n)}let h=Z_.requestErrorHandler(d,"add_node",n);throw yg(new Error,h,bg.INTERNAL_SERVER_ERROR,"error",h)}if(u.status===sG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw yg(new Error,d,bg.INTERNAL_SERVER_ERROR,"error",d)}Og.trace(u);for(let d=0,h=s.length;d<h;d++){let _=s[d];await Z_.updateRemoteConsumer(_,n),_.subscribe===!0&&await Z_.updateConsumerIterator(_.schema,_.table,n,"start")}let f=new moe(n,l,u.system_info);return await eh.upsertNodeRecord(f),Eoe({type:"nats_update"}),i.length>0?o.message=Toe:o.message=`Successfully added '${n}' to manifest`,o}a(Roe,"addNode")});var hN=P((PCe,aG)=>{"use strict";var{handleHDBError:dN,hdb_errors:yoe}=he(),{HTTP_STATUS_CODES:fN}=yoe,{addUpdateNodeValidator:boe}=Sg(),th=X(),Ig=(G(),D($)),oG=Pt(),CCe=oe(),rh=Er(),nh=Ao(),_N=ce(),{cloneDeep:Ooe}=require("lodash"),Noe=lN(),{Node:woe,NodeSubscription:Ioe}=qu(),{broadcast:Coe}=st(),{setNode:Poe}=(ll(),D(cl)),Doe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Loe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Moe=_N.get(Ig.CONFIG_PARAMS.CLUSTERING_NODENAME);aG.exports=voe;async function voe(e){if(th.trace("updateNode called with:",e),_N.get(Ig.CONFIG_PARAMS.REPLICATION_URL)??_N.get(Ig.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Poe(e);nh.checkClusteringEnabled();let t=boe(e);if(t)throw dN(t,t.message,fN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await nh.getNodeRecord(r);s.length>0&&(n=Ooe(s));let{added:i,skipped:o}=await Noe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Doe,c;let l=nh.buildNodePayloads(i,Moe,Ig.OPERATIONS_ENUM.UPDATE_NODE,await nh.getSystemInfo());for(let f=0,d=i.length;f<d;f++){let h=i[f];th.trace(`updateNode updating work stream for node: ${r} subscription:`,h),i[f].start_time===void 0&&delete i[f].start_time}th.trace("updateNode sending remote payload:",l);let u;try{u=await rh.request(`${r}.${oG.REQUEST_SUFFIX}`,l)}catch(f){th.error(`updateNode received error from request: ${f}`);let d=rh.requestErrorHandler(f,"update_node",r);throw dN(new Error,d,fN.INTERNAL_SERVER_ERROR,"error",d)}if(u.status===oG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${r}: ${u.message}`;throw dN(new Error,f,fN.INTERNAL_SERVER_ERROR,"error",f)}th.trace(u);for(let f=0,d=i.length;f<d;f++){let h=i[f];await rh.updateRemoteConsumer(h,r),h.subscribe===!0?await rh.updateConsumerIterator(h.schema,h.table,r,"start"):await rh.updateConsumerIterator(h.schema,h.table,r,"stop")}return n||(n=[new woe(r,[],u.system_info)]),await Uoe(n[0],i,u.system_info),o.length>0?c.message=Loe:c.message=`Successfully updated '${r}'`,c}a(voe,"updateNode");async function Uoe(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 f=n.subscriptions[l];if(f.schema===o.schema&&f.table===o.table){f.publish=o.publish,f.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Ioe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await nh.upsertNodeRecord(n),Coe({type:"nats_update"})}a(Uoe,"updateNodeTable")});var fG=P((LCe,dG)=>{"use strict";var uG=require("joi"),{string:cG}=uG.types(),xoe=nt(),lG=(G(),D($)),Boe=ce(),Hoe=Pt();dG.exports=koe;function koe(e){let t=cG.invalid(Boe.get(lG.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Hoe.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=uG.object({operation:cG.valid(lG.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return xoe.validateBySchema(e,r)}a(koe,"removeNodeValidator")});var Cg=P((vCe,EG)=>{"use strict";var{handleHDBError:_G,hdb_errors:Foe}=he(),{HTTP_STATUS_CODES:hG}=Foe,Goe=fG(),sh=X(),mG=Ao(),qoe=oe(),Ku=(G(),D($)),pG=Pt(),mN=Er(),pN=ce(),{RemotePayloadObject:$oe}=J_(),{NodeSubscription:Voe}=qu(),Koe=a_(),Yoe=Uc(),{broadcast:Woe}=st(),{setNode:zoe}=(ll(),D(cl)),Qoe=pN.get(Ku.CONFIG_PARAMS.CLUSTERING_NODENAME);EG.exports=joe;async function joe(e){if(sh.trace("removeNode called with:",e),pN.get(Ku.CONFIG_PARAMS.REPLICATION_URL)??pN.get(Ku.CONFIG_PARAMS.REPLICATION_HOSTNAME))return zoe(e);mG.checkClusteringEnabled();let t=Goe(e);if(t)throw _G(t,t.message,hG.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await mG.getNodeRecord(r);if(qoe.isEmptyOrZeroLength(n))throw _G(new Error,`Node '${r}' was not found.`,hG.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new $oe(Ku.OPERATIONS_ENUM.REMOVE_NODE,Qoe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let f=n.subscriptions[l];f.subscribe===!0&&await mN.updateConsumerIterator(f.schema,f.table,r,"stop");try{await mN.updateRemoteConsumer(new Voe(f.schema,f.table,!1,!1),r)}catch(d){sh.error(d)}}try{i=await mN.request(`${r}.${pG.REQUEST_SUFFIX}`,s),sh.trace("Remove node reply from remote node:",r,i)}catch(l){sh.error("removeNode received error from request:",l),o=!0}let c=new Koe(Ku.SYSTEM_SCHEMA_NAME,Ku.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Yoe.deleteRecord(c),Woe({type:"nats_update"}),i?.status===pG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(sh.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(joe,"removeNode")});var TG=P((xCe,SG)=>{"use strict";var gG=require("joi"),{string:Joe,array:Xoe}=gG.types(),Zoe=nt(),eae=Sg();SG.exports=tae;function tae(e){let t=gG.object({operation:Joe.valid("configure_cluster").required(),connections:Xoe.items(eae.validation_schema).required()});return Zoe.validateBySchema(e,t)}a(tae,"configureClusterValidator")});var EN=P((HCe,OG)=>{"use strict";var AG=(G(),D($)),Pg=X(),rae=oe(),nae=ce(),sae=Cg(),iae=wg(),oae=Ao(),aae=TG(),{handleHDBError:RG,hdb_errors:cae}=he(),{HTTP_STATUS_CODES:yG}=cae,lae="Configure cluster complete.",uae="Failed to configure the cluster. Check the logs for more details.",dae="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";OG.exports=fae;async function fae(e){Pg.trace("configure cluster called with:",e);let t=aae(e);if(t)throw RG(t,t.message,yG.BAD_REQUEST,void 0,void 0,!0);let r=await oae.getAllNodeRecords(),n=[];if(nae.get(AG.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let f=0,d=r.length;f<d;f++){let h=await bG(sae,{operation:AG.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name);n.push(h)}Pg.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let f=0;f<i;f++){let d=e.connections[f],h=await bG(iae,d,d.node_name);s.push(h)}Pg.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let f=0,d=u.length;f<d;f++){let h=u[f];h.status==="rejected"&&(Pg.error(h.node_name,h?.error?.message,h?.error?.stack),o.includes(h.node_name)||o.push(h.node_name)),(h?.result?.message?.includes?.("Successfully")||h?.result?.includes?.("Successfully"))&&(l=!0),!(typeof h.result=="string"&&h.result.includes("Successfully removed")||h.status==="rejected")&&c.push({node_name:h?.node_name,response:h?.result})}if(rae.isEmptyOrZeroLength(o))return{message:lae,connections:c};if(l)return{message:dae,failed_nodes:o,connections:c};throw RG(new Error,uae,yG.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(fae,"configureCluster");async function bG(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(bG,"functionWrapper")});var CG=P((FCe,IG)=>{"use strict";var ih=require("joi"),_ae=nt(),{validateSchemaExists:NG,validateTableExists:hae,validateSchemaName:wG}=Ri(),mae=ih.object({operation:ih.string().valid("purge_stream"),schema:ih.string().custom(NG).custom(wG).optional(),database:ih.string().custom(NG).custom(wG).optional(),table:ih.string().custom(hae).required()});function pae(e){return _ae.validateBySchema(e,mae)}a(pae,"purgeStreamValidator");IG.exports=pae});var gN=P((qCe,PG)=>{"use strict";var{handleHDBError:Eae,hdb_errors:gae}=he(),{HTTP_STATUS_CODES:Sae}=gae,Tae=CG(),Aae=Er(),Rae=Ao();PG.exports=yae;async function yae(e){e.schema=e.schema??e.database;let t=Tae(e);if(t)throw Eae(t,t.message,Sae.BAD_REQUEST,void 0,void 0,!0);Rae.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Aae.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(yae,"purgeStream")});var AN=P((VCe,BG)=>{"use strict";var TN=Ao(),bae=Er(),Lg=ce(),Yu=(G(),D($)),ul=Pt(),Oae=oe(),SN=X(),{RemotePayloadObject:Nae}=J_(),{ErrorCode:DG}=require("nats"),{parentPort:LG}=require("worker_threads"),{onMessageByType:wae}=st(),{getThisNodeName:Iae}=(ms(),D(Aa)),{requestClusterStatus:Cae}=(k_(),D(ZH)),{getReplicationSharedStatus:Pae,getHDBNodeTable:Dae}=(Xc(),D(lO)),{CONFIRMATION_STATUS_POSITION:Lae,RECEIVED_VERSION_POSITION:Mae,RECEIVED_TIME_POSITION:vae,SENDING_TIME_POSITION:Uae,RECEIVING_STATUS_POSITION:xae,RECEIVING_STATUS_RECEIVING:Bae}=(MO(),D(Vk)),MG=Lg.get(Yu.CONFIG_PARAMS.CLUSTERING_ENABLED),vG=Lg.get(Yu.CONFIG_PARAMS.CLUSTERING_NODENAME);BG.exports={clusterStatus:Hae,buildNodeStatus:xG};var UG;wae("cluster-status",async e=>{UG(e)});async function Hae(){if(Lg.get(Yu.CONFIG_PARAMS.REPLICATION_URL)||Lg.get(Yu.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(LG){LG.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{UG=i});for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let d of Object.values(databases[l]||{}))if(u=d.auditStore,u)break;if(!u)continue;let f=Pae(u,l,o);c.lastCommitConfirmed=Dg(f[Lae]),c.lastReceivedRemoteTime=Dg(f[Mae]),c.lastReceivedLocalTime=Dg(f[vae]),c.sendingMessage=Dg(f[Uae]),c.lastReceivedStatus=f[xae]===Bae?"Receiving":"Waiting"}}}else n=Cae();n.node_name=Iae();let s=Dae().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:vG,is_enabled:MG,connections:[]};if(!MG)return e;let t=await TN.getAllNodeRecords();if(Oae.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(xG(t[n],e.connections));return await Promise.allSettled(r),e}a(Hae,"clusterStatus");function Dg(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(Dg,"asDate");async function xG(e,t){let r=e.name,n=new Nae(Yu.OPERATIONS_ENUM.CLUSTER_STATUS,vG,void 0,await TN.getSystemInfo()),s,i,o=ul.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await bae.request(ul.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ul.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ul.CLUSTER_STATUS_STATUSES.CLOSED,SN.error(`Error getting node status from ${r} `,s))}catch(l){SN.warn(`Error getting node status from ${r}`,l),l.code===DG.NoResponders?o=ul.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===DG.Timeout?o=ul.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ul.CLUSTER_STATUS_STATUSES.CLOSED}let c=new kae(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!==Yu.PRE_4_0_0_VERSION&&await TN.upsertNodeRecord(l)}catch(l){SN.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(xG,"buildNodeStatus");function kae(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(kae,"NodeStatusObject")});var yN=P((YCe,HG)=>{"use strict";var{handleHDBError:Fae,hdb_errors:Gae}=he(),{HTTP_STATUS_CODES:qae}=Gae,$ae=Er(),Vae=Ao(),RN=oe(),Mg=require("joi"),Kae=nt(),Yae=2e3,Wae=Mg.object({timeout:Mg.number().min(1),connected_nodes:Mg.boolean(),routes:Mg.boolean()});HG.exports=zae;async function zae(e){Vae.checkClusteringEnabled();let t=Kae.validateBySchema(e,Wae);if(t)throw Fae(t,t.message,qae.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||RN.autoCastBoolean(n),o=s===void 0||RN.autoCastBoolean(s),c={nodes:[]},l=await $ae.getServerList(r??Yae),u={};if(i)for(let f=0,d=l.length;f<d;f++){let h=l[f].statsz;h&&(u[l[f].server.name]=h.routes)}for(let f=0,d=l.length;f<d;f++){if(l[f].statsz)continue;let h=l[f].server,_=l[f].data;if(h.name.endsWith("-hub")){let m={name:h.name.slice(0,-4),response_time:l[f].response_time};i&&(m.connected_nodes=[],u[h.name]&&u[h.name].forEach(S=>{m.connected_nodes.includes(S.name.slice(0,-4))||m.connected_nodes.push(S.name.slice(0,-4))})),o&&(m.routes=_.cluster?.urls?_.cluster?.urls.map(S=>({host:S.split(":")[0],port:RN.autoCast(S.split(":")[1])})):[]),c.nodes.push(m)}}return c}a(zae,"clusterNetwork")});var qG=P((zCe,GG)=>{"use strict";var bN=require("joi"),kG=nt(),{route_constraints:FG}=TA();GG.exports={setRoutesValidator:Qae,deleteRoutesValidator:jae};function Qae(e){let t=bN.object({server:bN.valid("hub","leaf"),routes:FG.required()});return kG.validateBySchema(e,t)}a(Qae,"setRoutesValidator");function jae(e){let t=bN.object({routes:FG.required()});return kG.validateBySchema(e,t)}a(jae,"deleteRoutesValidator")});var vg=P((jCe,QG)=>{"use strict";var yo=wt(),ON=oe(),Ss=(G(),D($)),Wu=ce(),$G=qG(),{handleHDBError:VG,hdb_errors:Jae}=he(),{HTTP_STATUS_CODES:KG}=Jae,YG="cluster routes successfully set",WG="cluster routes successfully deleted";QG.exports={setRoutes:Zae,getRoutes:ece,deleteRoutes:tce};function Xae(e){let t=yo.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=ON.autoCast(l.port);let u=r.some(d=>d.host===l.host&&d.port===l.port),f=n.some(d=>d.host===l.host&&d.port===l.port);u||f?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?yo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):yo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:YG,set:i,skipped:s}}a(Xae,"setRoutesNats");function Zae(e){let t=$G.setRoutesValidator(e);if(t)throw VG(t,t.message,KG.BAD_REQUEST,void 0,void 0,!0);if(Wu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED))return Xae(e);let r=[],n=[],s=Wu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{zG(s,i)?n.push(i):(s.push(i),r.push(i))}),yo.updateConfigValue(Ss.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:YG,set:r,skipped:n}}a(Zae,"setRoutes");function zG(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(zG,"existsInArray");function ece(){if(Wu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=yo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Wu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(ece,"getRoutes");function tce(e){let t=$G.deleteRoutesValidator(e);if(t)throw VG(t,t.message,KG.BAD_REQUEST,void 0,void 0,!0);if(Wu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED))return rce(e);let r=[],n=[],s=Wu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{zG(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),yo.updateConfigValue(Ss.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:WG,deleted:r,skipped:n}}a(tce,"deleteRoutes");function rce(e){let t=yo.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 f=e.routes[l],d=!1;for(let h=0,_=r.length;h<_;h++){let m=r[h];if(f.host===m.host&&f.port===m.port){r.splice(h,1),d=!0,o=!0,s.push(f);break}}if(!d){let h=!0;for(let _=0,m=n.length;_<m;_++){let S=n[_];if(f.host===S.host&&f.port===S.port){n.splice(_,1),c=!0,h=!1,s.push(f);break}}h&&i.push(f)}}return o&&(r=ON.isEmptyOrZeroLength(r)?null:r,yo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=ON.isEmptyOrZeroLength(n)?null:n,yo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:WG,deleted:s,skipped:i}}a(rce,"deleteRoutesNats")});var JG=P((XCe,jG)=>{"use strict";var oh=require("alasql"),dl=require("recursive-iterator"),ei=X(),nce=oe(),ah=(G(),D($)),NN=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,ice(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=>ah.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=>!ah.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][ah.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=sce(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=>!ah.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let f=new oh.yy.Column({columnid:u});s.tableid&&(f.tableid=s.tableid),this.ast.columns.push(f),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function sce(e){return e.filter(t=>t[ah.PERMS_CRUD_ENUM.READ])}a(sce,"filterReadRestrictedAttrs");function ice(e,t,r,n,s){oce(e,t,r,n,s)}a(ice,"interpretAST");function ch(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(ch,"addSchemaTableToMap");function oce(e,t,r,n,s){if(!e){ei.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof oh.yy.Insert?uce(e,t,r):e instanceof oh.yy.Select?ace(e,t,r,n,s):e instanceof oh.yy.Update?cce(e,t,r):e instanceof oh.yy.Delete?lce(e,t,r):ei.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(oce,"getRecordAttributesAST");function ace(e,t,r,n,s){if(!e){ei.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(nce.isEmptyOrZeroLength(i)){ei.error("No schema specified");return}e.from.forEach(c=>{ch(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ch(c.table,t,r,n,s)});let o=new dl(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{ei.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new dl(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let f=u.tableid?u.tableid:l;if(!t.get(i).has(f))if(r.has(f))f=r.get(f);else{ei.info(`table specified as ${f} not found.`);continue}t.get(i).get(f).indexOf(u.columnid)<0&&t.get(i).get(f).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new dl(c.on);for(let{node:u}of l)if(u&&u.columnid){let f=u.tableid,d=s.get(f);if(!t.get(d).has(f))if(r.has(f))f=r.get(f);else{ei.info(`table specified as ${f} not found.`);continue}t.get(d).get(f).indexOf(u.columnid)<0&&t.get(d).get(f).push(u.columnid)}}),e.order){let c=new dl(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,f=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(f).has(u))if(r.has(u))u=r.get(u);else{ei.info(`table specified as ${u} not found.`);return}t.get(f).get(u).indexOf(l.columnid)<0&&t.get(f).get(u).push(l.columnid)}}}a(ace,"getSelectAttributes");function cce(e,t,r){if(!e){ei.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new dl(e.columns),s=e.table.databaseid;ch(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wN(e.table.tableid,s,i.columnid,t,r)}a(cce,"getUpdateAttributes");function lce(e,t,r){if(!e){ei.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new dl(e.where),s=e.table.databaseid;ch(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wN(e.table.tableid,s,i.columnid,t,r)}a(lce,"getDeleteAttributes");function uce(e,t,r){if(!e){ei.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new dl(e.columns),s=e.into.databaseid;ch(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&wN(e.into.tableid,s,i.columnid,t,r)}a(uce,"getInsertAttributes");function wN(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(wN,"pushAttribute");jG.exports=NN});var ZG=P((ePe,XG)=>{"use strict";var Ug=(G(),D($)),xg=class{static{a(this,"BaseLicense")}constructor(t=0,r=Ug.RAM_ALLOCATION_ENUM.DEFAULT,n=Ug.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},IN=class extends xg{static{a(this,"ExtendedLicense")}constructor(t=0,r=Ug.RAM_ALLOCATION_ENUM.DEFAULT,n=Ug.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};XG.exports={BaseLicense:xg,ExtendedLicense:IN}});var ju=P((rPe,iq)=>{"use strict";var Qu=require("fs-extra"),Bg=(Gp(),D(Fp)),tq=require("crypto"),dce=require("moment"),fce=require("uuid").v4,jr=X(),PN=require("path"),_ce=oe(),fl=(G(),D($)),{totalmem:eq}=require("os"),hce=ZG().ExtendedLicense,zu="invalid license key format",mce="061183",pce="mofi25",Ece="aes-256-cbc",gce=16,Sce=32,rq=ce(),{resolvePath:nq}=wt();rq.initSync();var CN;iq.exports={validateLicense:sq,generateFingerPrint:Ace,licenseSearch:MN,getLicense:bce,checkMemoryLimit:Oce};function DN(){return PN.join(rq.getHdbBasePath(),fl.LICENSE_KEY_DIR_NAME,fl.LICENSE_FILE_NAME)}a(DN,"getLicenseDirPath");function Tce(){let e=DN();return nq(PN.join(e,fl.LICENSE_FILE_NAME))}a(Tce,"getLicenseFilePath");function LN(){let e=DN();return nq(PN.join(e,fl.REG_KEY_FILE_NAME))}a(LN,"getFingerPrintFilePath");async function Ace(){let e=LN();try{return await Qu.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Rce();throw jr.error(`Error writing fingerprint file to ${e}`),jr.error(t),new Error("There was an error generating the fingerprint")}}a(Ace,"generateFingerPrint");async function Rce(){let e=fce(),t=Bg.hash(e,Bg.HASH_FUNCTION.MD5),r=LN();try{await Qu.mkdirp(DN()),await Qu.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw jr.error(`Error writing fingerprint file to ${r}`),jr.error(n),new Error("There was an error generating the fingerprint")}return t}a(Rce,"writeFingerprint");function sq(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:fl.RAM_ALLOCATION_ENUM.DEFAULT,version:fl.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return jr.error("empty license key passed to validate."),r;let n=LN(),s=!1;try{s=Qu.statSync(n)}catch(i){jr.error(i)}if(s){let i;try{i=Qu.readFileSync(n,"utf8")}catch{jr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(pce),c=o[1];c=Buffer.concat([Buffer.from(c)],gce);let l=Buffer.concat([Buffer.from(i)],Sce),u=tq.createDecipheriv(Ece,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let f=null;try{f=u.update(o[0],"hex","utf8"),f.trim(),f+=u.final("utf8")}catch{let _=yce(o[0],i);if(_)f=_;else throw r.valid_license=!1,r.valid_machine=!1,console.error(zu),jr.error(zu),new Error(zu)}let d;if(isNaN(f))try{d=JSON.parse(f),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(zu),jr.error(zu),new Error(zu)}else r.exp_date=f;r.exp_date<dce().valueOf()&&(r.valid_date=!1),Bg.validate(o[1],`${mce}${i}${t}`,Bg.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||jr.error("Invalid licence"),r}a(sq,"validateLicense");function yce(e,t){try{let r=tq.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{jr.warn("Check old license failed")}}a(yce,"checkOldLicense");function MN(){let e=new hce,t=[];try{t=Qu.readFileSync(Tce(),"utf-8").split(`\r
24
- `)}catch(r){r.code==="ENOENT"?jr.debug("no license file found"):jr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(_ce.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=sq(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){jr.error("There was an error parsing the license string."),jr.error(s),e.ram_allocation=fl.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return CN=e,e}a(MN,"licenseSearch");async function bce(){return CN||await MN(),CN}a(bce,"getLicense");function Oce(){let e=MN().ram_allocation,t=process.constrainedMemory?.()||eq();if(t=Math.round(Math.min(t,eq())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(Oce,"checkMemoryLimit")});var xN=P((sPe,lq)=>{var Hg=ju(),oq=require("chalk"),Qn=X(),aq=require("prompt"),{promisify:Nce}=require("util"),vN=(G(),D($)),wce=require("fs-extra"),Ice=require("path"),Cce=oe(),{packageJson:Pce}=Et(),cq=ce();cq.initSync();var Dce=require("moment"),Lce=Nce(aq.get),Mce=Ice.join(cq.getHdbBasePath(),vN.LICENSE_KEY_DIR_NAME,vN.LICENSE_FILE_NAME,vN.LICENSE_FILE_NAME);lq.exports={getFingerprint:Uce,setLicense:vce,parseLicense:UN,register:xce,getRegistrationInfo:Hce};async function vce(e){if(e&&e.key&&e.company){try{Qn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await UN(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Qn.error(r),Qn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(vce,"setLicense");async function Uce(){let e={};try{e=await Hg.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Qn.error(r),Qn.error(t),new Error(r)}return e}a(Uce,"getFingerprint");async function UN(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Qn.info("Validating license input...");let r=Hg.validateLicense(e,t);if(Qn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Qn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Qn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Qn.info("writing license to disk"),await wce.writeFile(Mce,JSON.stringify({license_key:e,company:t}))}catch(n){throw Qn.error("Failed to write License"),n}return"Registration successful."}a(UN,"parseLicense");async function xce(){let e=await Bce();return UN(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(xce,"register");async function Bce(){let e=await Hg.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:oq.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:oq.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{aq.start()}catch(n){Qn.error(n)}let r;try{r=await Lce(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Bce,"promptForRegistration");async function Hce(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Hg.getLicense()}catch(r){throw Qn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Cce.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Pce.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Dce.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Hce,"getRegistrationInfo")});var dq=P((oPe,uq)=>{"use strict";var kce=Pt(),BN=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d,h,_,m){this.port=t,o===null&&(o=void 0),this.server_name=r+kce.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:f,port:d,routes:h,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:_},HDB:{users:m}},this.system_account="SYS"}};uq.exports=BN});var hq=P((cPe,_q)=>{"use strict";var fq=Pt(),HN=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d){this.port=t,d===null&&(d=void 0),this.server_name=r+fq.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+fq.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:f,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};_q.exports=HN});var pq=P((uPe,mq)=>{"use strict";var kN=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};mq.exports=kN});var gq=P((fPe,Eq)=>{"use strict";var Fce=Pt(),FN=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Fce.SERVER_SUFFIX.ADMIN,this.password=r}};Eq.exports=FN});var qg=P((hPe,Aq)=>{"use strict";var _l=require("path"),hl=require("fs-extra"),Gce=dq(),qce=hq(),$ce=pq(),Vce=gq(),GN=Gn(),Xu=oe(),Rn=wt(),Fg=(G(),D($)),lh=Pt(),{CONFIG_PARAMS:jt}=Fg,Zu=X(),uh=ce(),Sq=lo(),qN=Er(),Kce=Zs(),Ju="clustering",Yce=1e4,Tq=50;Aq.exports={generateNatsConfig:zce,removeNatsConfig:Qce,getHubConfigPath:Wce};function Wce(){let e=uh.get(jt.ROOTPATH);return _l.join(e,Ju,lh.NATS_CONFIG_FILES.HUB_SERVER)}a(Wce,"getHubConfigPath");async function zce(e=!1,t=void 0){let r=uh.get(jt.ROOTPATH);hl.ensureDirSync(_l.join(r,"clustering","leaf")),uh.initSync();let n=Rn.getConfigFromFile(jt.CLUSTERING_TLS_CERT_AUTH),s=Rn.getConfigFromFile(jt.CLUSTERING_TLS_PRIVATEKEY),i=Rn.getConfigFromFile(jt.CLUSTERING_TLS_CERTIFICATE);!await hl.exists(i)&&!await hl.exists(!n)&&await Kce.createNatsCerts();let o=_l.join(r,Ju,lh.PID_FILES.HUB),c=_l.join(r,Ju,lh.PID_FILES.LEAF),l=Rn.getConfigFromFile(jt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=_l.join(r,Ju,lh.NATS_CONFIG_FILES.HUB_SERVER),f=_l.join(r,Ju,lh.NATS_CONFIG_FILES.LEAF_SERVER),d=Rn.getConfigFromFile(jt.CLUSTERING_TLS_INSECURE),h=Rn.getConfigFromFile(jt.CLUSTERING_TLS_VERIFY),_=Rn.getConfigFromFile(jt.CLUSTERING_NODENAME),m=Rn.getConfigFromFile(jt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await qN.checkNATSServerInstalled()||Gg("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await GN.listUsers(),g=Rn.getConfigFromFile(jt.CLUSTERING_USER),R=await GN.getClusterUser();(Xu.isEmpty(R)||R.active!==!0)&&Gg(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await kg(jt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await kg(jt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await kg(jt.CLUSTERING_HUBSERVER_NETWORK_PORT),await kg(jt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let E=[],T=[];for(let[se,z]of S.entries())z.role?.role===Fg.ROLE_TYPES_ENUM.CLUSTER_USER&&z.active&&(E.push(new Vce(z.username,Sq.decrypt(z.hash))),T.push(new $ce(z.username,Sq.decrypt(z.hash))));let O=[],{hub_routes:v}=Rn.getClusteringRoutes();if(!Xu.isEmptyOrZeroLength(v))for(let se of v)O.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${se.host}:${se.port}`);let F=new Gce(Rn.getConfigFromFile(jt.CLUSTERING_HUBSERVER_NETWORK_PORT),_,o,i,s,n,d,h,m,Rn.getConfigFromFile(jt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Rn.getConfigFromFile(jt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),O,E,T);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Xu.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Fg.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await hl.writeJson(u,F),Zu.trace(`Hub server config written to ${u}`));let q=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${m}`,Q=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${m}`,te=new qce(Rn.getConfigFromFile(jt.CLUSTERING_LEAFSERVER_NETWORK_PORT),_,c,l,[q],[Q],E,T,i,s,n,d);n==null&&delete te.tls.ca_file,(t===void 0||t===Fg.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await hl.writeJson(f,te),Zu.trace(`Leaf server config written to ${f}`))}a(zce,"generateNatsConfig");async function kg(e){let t=uh.get(e);return Xu.isEmpty(t)&&Gg(`port undefined for '${e}'`),await Xu.isPortTaken(t)&&Gg(`'${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(kg,"isPortAvailable");function Gg(e){let t=`Error generating clustering config: ${e}`;Zu.error(t),console.error(t),process.exit(1)}a(Gg,"generateNatsConfigError");async function Qce(e){let{port:t,config_file:r}=qN.getServerConfig(e),{username:n,decrypt_hash:s}=await GN.getClusterUser(),i=0,o=2e3;for(;i<Tq;){try{let f=await qN.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){Zu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=Tq)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&&Zu.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Xu.async_set_timeout(u)}let c="0".repeat(Yce),l=_l.join(uh.get(jt.ROOTPATH),Ju,r);await hl.writeFile(l,c),await hl.remove(l),Zu.notify(e,"started.")}a(Qce,"removeNatsConfig")});var KN={};Be(KN,{compactOnStart:()=>jce,copyDb:()=>wq});async function jce(){Pa.notify("Running compact on start"),console.log("Running compact on start");let e=(0,$N.get)(B.ROOTPATH),t=new Map,r=Ze();(0,VN.updateConfigValue)(B.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,$g.join)(e,"backup",n+".mdb"),o=(0,$g.join)(e,cc,n+"-copy.mdb"),c=0;try{c=await Rq(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Pa.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await wq(n,o),console.log("Backing up",n,"to",i),await(0,ml.move)(s,i,{overwrite:!0})}try{ed()}catch(n){Pa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,ml.move)(i,s,{overwrite:!0}),await(0,ml.remove)((0,$g.join)(e,cc,`${n}-copy.mdb-lock`));try{ed()}catch(n){Pa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Pa.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,VN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,ml.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw ed(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await Rq(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
22
+ `,"")}a(MH,"runCommand");async function _ne(){try{await $re.access(Zb)}catch{return!1}let e=await MH(`${Zb} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Vre.eq(t,dne)}a(_ne,"checkNATSServerInstalled");async function sO(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await DH.getClusterUser();if(Jc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}js.trace("create nats connection called");let i=await rne({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Or.get(je.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Or.get(je.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Or.get(je.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),js.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&js.error("Error with Nats client connection, connection closed",o),i===zr&&vH()}),i}a(sO,"createConnection");function vH(){zr=void 0,zc=void 0,jc=void 0,Qc=void 0}a(vH,"clearClientCache");async function hne(){zr&&(await zr.drain(),zr=void 0,zc=void 0,jc=void 0,Qc=void 0)}a(hne,"closeConnection");var zr,Qc;async function M_(){return Qc||(Qc=sO(Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),zr=await Qc),zr||Qc}a(M_,"getConnection");async function v_(){if(zc)return zc;Jc(zr)&&await M_();let{domain:e}=wu(je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return zc=await zr.jetstreamManager({domain:e,timeout:6e4}),zc}a(v_,"getJetStreamManager");async function UH(){if(jc)return jc;Jc(zr)&&await M_();let{domain:e}=wu(je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return jc=zr.jetstream({domain:e,timeout:6e4}),jc}a(UH,"getJetStream");async function Li(){let e=zr||await M_(),t=zc||await v_(),r=jc||await UH();return{connection:e,jsm:t,js:r}}a(Li,"getNATSReferences");async function pne(e){let t=Or.get(je.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await DH.getClusterUser(),s=await sO(t,r,n),i=nO(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=LH.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();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 FE.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(pne,"getServerList");async function iO(e,t){let{jsm:r}=await Li(),n=Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:nne.File,retention:sne.Limits,subjects:t,discard:ine.Old,max_msgs:s,max_bytes:i,max_age:n})}a(iO,"createLocalStream");async function xH(){let{jsm:e}=await Li(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(xH,"listStreams");async function mne(e){let{jsm:t}=await Li();await t.streams.delete(e)}a(mne,"deleteLocalStream");async function Ene(e){let{connection:t}=await Li(),r=[],n=nO(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(LH.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(Ene,"listRemoteStreams");async function gne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Li(),i=wH(),o={durable_name:i,ack_policy:tO.Explicit};t&&(o.deliver_policy=rO.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 f of l){let d=eO(f.data),h={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(h.origin=f.headers.get(Ur.MSG_HEADERS.ORIGIN)),u.push(h),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(gne,"viewStream");async function*Sne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Li(),i=wH(),o={durable_name:i,ack_policy:tO.Explicit};t&&(o.deliver_policy=rO.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 f=eO(u.data);f[0]||(f=[f]);for(let d of f){let h={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(h.origin=u.headers.get(Ur.MSG_HEADERS.ORIGIN)),yield h}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Sne,"viewStreamIterator");async function Tne(e,t,r,n){js.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=BH(n,r);let{js:s}=await Li(),i=await qE(),o=`${e}.${i}`,c=await lne(()=>n instanceof Uint8Array?n:PH.encode(n));try{js.trace(`publishToStream publishing to subject: ${o}`),cne(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 kH(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){js.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await iO(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Tne,"publishToStream");function BH(e,t){t===void 0&&(t=ane());let r=Or.get(je.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ur.MSG_HEADERS.ORIGIN)&&r&&t.append(Ur.MSG_HEADERS.ORIGIN,r),t}a(BH,"addNatsMsgHeader");function wu(e){e=e.toLowerCase();let t=L_.join(Or.get(je.CONFIG_PARAMS.ROOTPATH),une);if(e===je.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Jc(Xb)&&(Xb={port:P_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:P_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ur.SERVER_SUFFIX.HUB,config_file:Ur.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:L_.join(t,Ur.PID_FILES.HUB),hdb_nats_path:t}),Xb;if(e===je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Jc(Jb)&&(Jb={port:P_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:P_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ur.SERVER_SUFFIX.LEAF,config_file:Ur.NATS_CONFIG_FILES.LEAF_SERVER,domain:P_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ur.SERVER_SUFFIX.LEAF,pid_file_path:L_.join(t,Ur.PID_FILES.LEAF),hdb_nats_path:t}),Jb;js.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(wu,"getServerConfig");async function HH(e,t,r,n){try{await e.consumers.add(t,{ack_policy:tO.Explicit,durable_name:r,deliver_policy:rO.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(HH,"createConsumer");async function Ane(e,t,r){await e.consumers.delete(t,r)}a(Ane,"removeConsumer");function Rne(e){return e.split(".")[1]}a(Rne,"extractServerName");async function yne(e,t,r=6e4,n=nO()){if(!FE.isObject(t))throw new Error("data param must be an object");let s=PH.encode(t),{connection:i}=await Li(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return eO(c.data)}a(yne,"request");function oO(e){return new Promise(async(t,r)=>{let n=zre(Zb,["--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(oO,"reloadNATS");async function bne(){let{pid_file_path:e}=wu(je.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await oO(e)}a(bne,"reloadNATSHub");async function One(){let{pid_file_path:e}=wu(je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await oO(e)}a(One,"reloadNATSLeaf");function Nne(e,t,r){let n;switch(e.code){case NH.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case NH.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Nne,"requestErrorHandler");async function wne(e,t){let r=t+Ur.SERVER_SUFFIX.LEAF,{connection:n}=await Li(),{jsm:s}=await Une(r),{schema:i,table:o}=e,c=GE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await kH(async()=>{if(e.subscribe===!0)await HH(s,c,n.info.server_name,l);else try{await Ane(s,c,n.info.server_name)}catch(u){js.trace(u)}})}a(wne,"updateRemoteConsumer");async function Ine(e,t,r,n){let s=GE.createNatsTableStreamName(e,t),i=r+Ur.SERVER_SUFFIX.LEAF,o={type:je.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!CH&&ene()<Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Qb();await c(o)}await Xre(o),n==="stop"&&await FE.async_set_timeout(1e3)}a(Ine,"updateConsumerIterator");function kH(e){return Jre.writeTransaction(je.SYSTEM_SCHEMA_NAME,je.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(kH,"exclusiveLock");async function FH(e,t){let r=GE.createNatsTableStreamName(e,t),n=await qE(),s=Lne(e,t,n);await iO(r,[s])}a(FH,"createLocalTableStream");async function Cne(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await FH(n,s)}}a(Cne,"createTableStreams");async function GH(e,t,r=void 0){if(Or.get(je.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=GE.createNatsTableStreamName(e,t),{domain:s}=wu(je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await M_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")js.warn(n);else throw n}}a(GH,"purgeTableStream");async function Pne(e,t){if(Or.get(je.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await GH(e,t[r])}a(Pne,"purgeSchemaTableStreams");async function Dne(e){return(await v_()).streams.info(e)}a(Dne,"getStreamInfo");function Lne(e,t,r){return`${Ur.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Lne,"createSubjectName");async function qE(){if(D_)return D_;if(D_=(await v_())?.nc?.info?.server_name,D_===void 0)throw new Error("Unable to get jetstream manager server name");return D_}a(qE,"getJsmServerName");async function Mne(){let e=await v_(),t=await qE(),r=await xH();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=vne(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 f=u.join(".");js.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(Mne,"updateLocalStreams");function vne(e){let{config:t}=e,r=!1,n=Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Or.get(je.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(vne,"updateStreamLimits");async function Une(e){let t,r;try{t=await zr.jetstream({domain:e}),r=await zr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw js.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Une,"connectToRemoteJS")});function aO(e){let t=e.get($E),r=t?(0,Iu.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:x_(e)??1,nodes:[]})})}i[n]=0,e.putSync($E,(0,Iu.pack)(r))}return r}function U_(e){return aO(e).remoteNameToId}function VH(e,t){let r=aO(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 f in n){let d=n[f];d>u&&(u=d)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync($E,(0,Iu.pack)(r)),s}function VE(e,t){let r=aO(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($E,(0,Iu.pack)(r))}return $H.trace?.("The remote node name map",e,n,s),s}var $H,Iu,$E,cO=be(()=>{$H=M(mi());ps();Iu=require("msgpackr"),$E=Symbol.for("remote-ids");a(aO,"getIdMappingRecord");a(U_,"exportIdMapping");a(VH,"remoteToLocalNodeId");a(VE,"getIdOfRemoteNode")});var lO={};Be(lO,{commits_awaiting_replication:()=>Pu,getHDBNodeTable:()=>sr,getReplicationSharedStatus:()=>KE,iterateRoutes:()=>H_,shouldReplicateToNode:()=>B_,subscribeToNodeUpdates:()=>Du});function sr(){return KH||(KH=_t({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 KE(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Du(e){sr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;jH.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 sr().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 B_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&sr().primaryStore.get(tt())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function xne(){Du(e=>{pa({},(t,r)=>{let n=e.name,s=YH.get(n);if(s||YH.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=KE(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of Pu.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*H_(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=Cu.default.get(B.REPLICATION_SECUREPORT)??(!Cu.default.get(B.REPLICATION_PORT)&&Cu.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Cu.default.get(B.REPLICATION_PORT)||Cu.default.get(B.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){WH.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime,revoked_certificates:t.revokedCertificates}}}var WH,zH,Cu,jH,KH,YH,Pu,Xc=be(()=>{Ue();ps();Wp();WH=require("worker_threads"),zH=M(he()),Cu=M(ce());G();jH=M(mi());server.nodes=[];a(sr,"getHDBNodeTable");a(KE,"getReplicationSharedStatus");a(Du,"subscribeToNodeUpdates");a(B_,"shouldReplicateToNode");YH=new Map;KD((e,t,r)=>{if(r>server.nodes.length)throw new zH.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Pu||(Pu=new Map,xne());let n=Pu.get(e);return n||(n=[],Pu.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(xne,"startSubscriptionToReplications");a(H_,"iterateRoutes")});var ZH={};Be(ZH,{connectedToNode:()=>Zc,disconnectedFromNode:()=>Mu,ensureNode:()=>Eo,requestClusterStatus:()=>XH,startOnMainThread:()=>dO});async function dO(e){let t=0,r=Ze();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){YE.set(i,x_(l.auditStore));break}}}vi.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes?.search([])||[])i.push(o);for(let o of H_(e))try{let c=!o.subscriptions;if(c){let u=tt(),f=sr().primaryStore.get(u);if(f!==null){let d=e.url??ma();(f===void 0||f.url!==d||f.shard!==e.shard)&&await Eo(u,{name:u,url:d,shard:e.shard,replicates:!0})}}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}Du(s)});let n;function s(i,o=i?.name){let c=tt()&&o===tt()||ma()&&i?.url===ma();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let h of sr().search([]))h.replicates&&h.name!==o&&s(h,h.name);n=d}if(ct.trace("Setting up node replication for",i),!i){for(let[d,h]of Mi){let _;for(let[p,{worker:S,nodes:g}]of h){let R=g[0];if(R&&R.name==o){_=!0;for(let[E,{worker:T}]of h)h.delete(E),ct.warn("Node was deleted, unsubscribing from node",o,E,d),T?.postMessage({type:"unsubscribe-from-node",node:o,database:E,url:d});break}}if(_){Mi.get(d).iterator.remove(),Mi.delete(d);return}}return}if(c)return;if(!i.url){ct.info(`Node ${i.name} is missing url`);return}let l=Mi.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ct.info(`Added node ${i.name} at ${i.url} for process ${tt()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,h]of Lu)if(i.url===h.url){Lu.delete(d);break}Lu.set(i.name,i)}let u=Ze();if(l||(l=new Map,Mi.set(i.url,l)),l.iterator=pa(e,(d,h,_)=>{_?f(h,!0):f(h,!1)}),i.subscriptions)for(let d of i.subscriptions){let h=d.database||d.schema;u[h]||(ct.warn(`Database ${h} not found for node ${i.name}, making a subscription anyway`),f(h,!1))}function f(d,h){ct.trace("Setting up replication for database",d,"on node",i.name);let _=l.get(d),p,S=[{replicateByDefault:h,...i}];YE.has(d)&&(S.push({replicateByDefault:h,name:tt(),start_time:YE.get(d),end_time:Date.now(),replicates:!0}),YE.delete(d));let g=B_(i,d),R=vi.workers.filter(E=>E.name==="http");if(_?(p=_.worker,_.nodes=S):g&&(t=t%R.length,p=R[t++],l.set(d,{worker:p,nodes:S,url:i.url}),p?.on("exit",()=>{l.get(d)?.worker===p&&(l.delete(d),f(d,h))})),g)setTimeout(()=>{let E={type:"subscribe-to-node",database:d,nodes:S};p?p.postMessage(E):k_(E)},Bne);else{ct.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],sr().primaryStore.get(tt())?.replicates),sr().primaryStore.get(tt())?.replicates||(n=!1);let E={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};p?p.postMessage(E):zE(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),Mu=a(function(i){try{ct.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Lu.keys()),c=o.sort(),l=c.indexOf(i.name||Qs(i.url));if(l===-1){ct.warn("Disconnected node not found in node map",i.name,o);return}let u=Mi.get(i.url),f=u?.get(i.database);if(!f){ct.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished)return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let h=d.shard,_=(l+1)%c.length;for(;l!==_;){let p=c[_],S=Lu.get(p);u=Mi.get(S.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==h){_=(_+1)%c.length;continue}let{worker:R,nodes:E}=g,T=!1;for(let O of f.nodes){if(E.some(v=>v.name===O.name)){ct.info(`Disconnected node is already failing over to ${p} for ${i.database}`);continue}O.end_time<Date.now()||(E.push(O),T=!0)}if(f.nodes=[f.nodes[0]],!T){ct.info(`Disconnected node ${i.name} has no nodes to fail over to ${p}`);return}ct.info(`Failing over ${i.database} from ${i.name} to ${p}`),R?R.postMessage({type:"subscribe-to-node",database:i.database,nodes:E}):k_({database:i.database,nodes:E});return}ct.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){ct.error("Error failing over node",o)}},"disconnectedFromNode"),Zc=a(function(i){let o=Mi.get(i.url),c=o?.get(i.database);if(!c){ct.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];c.nodes=[l];let u=!1;for(let f of Mi.values()){let d=f.get(i.database);if(!d||d==c)continue;let{worker:h,nodes:_,connected:p}=d;if(_)if(p===!1&&_[0].shard===l.shard)u=!0,c.nodes.push(_[0]);else{let S=_.filter(g=>g.name!==l.name);S.length<_.length&&(d.nodes=S,h.postMessage({type:"subscribe-to-node",database:i.database,nodes:_}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,vi.onMessageByType)("disconnected-from-node",Mu),(0,vi.onMessageByType)("connected-to-node",Zc),(0,vi.onMessageByType)("request-cluster-status",XH)}function XH(e,t){let r=[];for(let[n,s]of Lu)try{let i=Mi.get(s.url);ct.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:h}]of i)o.push({database:l,connected:f,latency:h,thread_id:u?.threadId,nodes:d.filter(_=>!(_.end_time<Date.now())).map(_=>_.name)});let c=(0,uO.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ct.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Eo(e,t){let r=sr();e=e??Qs(t.url),t.name=e;try{if(t.ca){let s=new JH.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){ct.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ct.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!QH.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,uO.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ct.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var vi,WE,ct,uO,QH,JH,Bne,Mi,Mu,Zc,Lu,YE,F_=be(()=>{Ue();vi=M(st());ps();WE=require("worker_threads");Xc();ct=M(X()),uO=require("lodash"),QH=M(ce());G();JH=require("crypto"),Bne=200,Mi=new Map,Lu=new Map,YE=new Map;a(dO,"startOnMainThread");a(XH,"requestClusterStatus");WE.parentPort&&(Mu=a(e=>{WE.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Zc=a(e=>{WE.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,vi.onMessageByType)("subscribe-to-node",e=>{k_(e)}),(0,vi.onMessageByType)("unsubscribe-from-node",e=>{zE(e)}));a(Eo,"ensureNode")});var Zs=P(Rk=>{"use strict";var ir=require("path"),{watch:Hne}=require("chokidar"),An=require("fs-extra"),vu=require("node-forge"),ik=require("net"),{generateKeyPair:_O,X509Certificate:go,createPrivateKey:ok}=require("crypto"),kne=require("util");_O=kne.promisify(_O);var yt=vu.pki,Js=require("joi"),{v4:ak}=require("uuid"),{validateBySchema:EO}=nt(),St=X(),Wn=ce(),ms=(G(),D($)),{CONFIG_PARAMS:tl}=ms,Xs=gA(),{ClientError:ga}=he(),jE=require("node:tls"),{relative:ck,join:Fne}=require("node:path"),{CERT_PREFERENCE_APP:jwe,CERTIFICATE_VALUES:ek}=Xs,Gne=lc(),hO=wt(),{table:qne,getDatabases:$ne,databases:fO}=(Ue(),D(at)),{getJWTRSAKeys:tk}=(yu(),D(I_));Object.assign(Rk,{generateKeys:TO,updateConfigCert:mk,createCsr:Qne,signCertificate:Jne,setCertTable:Uu,loadCertificates:_k,reviewSelfSignedCert:RO,createTLSSelector:gk,listCertificates:Tk,addCertificate:nse,removeCertificate:ise,createNatsCerts:ese,generateCertsKeys:Zne,getReplicationCert:q_,getReplicationCertAuth:jne,renewSelfSigned:tse,hostnamesFromCert:yO,getKey:ose});var{urlToNodeName:lk,getThisNodeUrl:Vne,getThisNodeName:JE,clearThisNodeName:Kne}=(ps(),D(Aa)),{readFileSync:Yne,statSync:uk}=require("node:fs"),Qwe=ce(),{getTicketKeys:Wne,onMessageFromWorkers:zne}=st(),Ea=X(),{isMainThread:dk}=require("worker_threads"),{TLSSocket:fk,createSecureContext:Jwe}=require("node:tls"),gO=3650,G_=["127.0.0.1","localhost","::1"],SO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];zne(async e=>{e.type===ms.ITC_EVENT_TYPES.RESTART&&(Wn.initSync(!0),await RO())});var xr;function Ta(){return xr||(xr=$ne().system.hdb_certificate,xr||(xr=qne({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__"}]}))),xr}a(Ta,"getCertTable");async function q_(){let e=gk("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(JE());if(!r)return;let n=new go(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(q_,"getReplicationCert");async function jne(){Ta();let e=(await q_()).options.cert,r=new go(e).issuer.match(/CN=(.*)/)?.[1];return xr.get(r)}a(jne,"getReplicationCertAuth");var rk,Sa=new Map;function _k(){if(rk)return;rk=!0;let e=[{configKey:tl.TLS},{configKey:tl.OPERATIONSAPI_TLS}];Ta();let t=ir.dirname(hO.getConfigFilePath()),r;for(let{configKey:n}of e){let s=hO.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&ck(Fne(t,"keys"),o);c&&nk(o,l=>{Sa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&dk){let f;nk(u,d=>{if(ek.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=Ek(u),p=new go(_),S;try{S=Ak(p)}catch(T){logger.error("error extracting host name from certificate",T);return}if(S==null){logger.error("No host name found on certificate");return}if(p.checkIssued(new go(ek.cert)))return;let g=xr.primaryStore.get(S),R=uk(u).mtimeMs,E=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=E){R<E&&St.info(`Certificate ${S} at ${u} is older (${new Date(R)}) than the certificate in the database (${E>1?new Date(E):"only self signed certificate available"})`);return}r=xr.put({name:S,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:_,private_key_name:c,is_authority:l,hostnames:h,file_timestamp:R,details:{issuer:p.issuer.replace(/\n/g," "),subject:p.subject.replace(/\n/g," "),subject_alt_name:p.subjectAltName,serial_number:p.serialNumber,valid_from:p.validFrom,valid_to:p.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(_k,"loadCertificates");function nk(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&dk&&St.warn(`Reloading ${r}:`,i),n=c,t(Ek(i)))}catch(c){St.error(`Error loading ${r}:`,i,c)}},"loadFile");An.existsSync(e)?s(e,uk(e)):St.error(`${r} file not found:`,e),Hne(e,{persistent:!1}).on("change",s)}a(nk,"loadAndWatch");function pO(){let e=Vne();if(e==null){let t=G_[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return lk(e)}a(pO,"getHost");function QE(){let e=JE();if(e==null){let t=G_[0];return St.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(QE,"getCommonName");async function Qne(){let e=await q_(),t=yt.certificateFromPem(e.options.cert),r=yt.privateKeyFromPem(e.options.key);St.info("Creating CSR with cert named:",e.name);let n=yt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:QE()},...SO];St.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:hk()}];return St.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),vu.pki.certificationRequestToPem(n)}a(Qne,"createCsr");function hk(){let e=G_.includes(QE())?G_:[...G_,QE()];return e.includes(pO())||e.push(pO()),[{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=>ik.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(hk,"certExtensions");async function Jne(e){let t={},r=ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Ta();for await(let f of xr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(Sa.has(f.private_key_name)){n=Sa.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await An.exists(ir.join(r,f.private_key_name))){n=An.readFile(ir.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await mO();s=f.ca,n=f.private_key}n=yt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=yt.certificateFromPem(s.certificate);St.info("Signing CSR with cert named",s.name);let o=yt.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return St.error(f),new Error("Error verifying CSR: "+f.message)}let c=vu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+gO),St.info("sign cert setting validity:",c.validity),St.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),St.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;St.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,vu.md.sha256.create()),t.certificate=yt.certificateToPem(c)}else St.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Jne,"signCertificate");async function Xne(e,t){await Uu({name:JE(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Uu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:yt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Xne,"createCertificateTable");async function Uu(e){let t=new go(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Ta(),await xr.patch(e)}a(Uu,"setCertTable");async function TO(){let e=await _O("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:yt.publicKeyFromPem(e.publicKey),private_key:yt.privateKeyFromPem(e.privateKey)}}a(TO,"generateKeys");async function AO(e,t,r){let n=yt.createCertificate();if(!t){let o=await q_();t=yt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+gO);let i=[{name:"commonName",value:QE()},...SO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(hk()),n.sign(e,vu.md.sha256.create()),yt.certificateToPem(n)}a(AO,"generateCertificates");async function mO(){let e=await Tk(),t;for(let r of e){if(!r.is_authority)continue;let n=await Sk(r.private_key_name);if(r.private_key_name&&n&&new go(r.certificate).checkPrivateKey(ok(n))){St.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;St.trace("No CA found with matching private key")}a(mO,"getCertAuthority");async function pk(e,t,r=!0){let n=yt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+gO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Wn.get(tl.REPLICATION_HOSTNAME)??lk(Wn.get(tl.REPLICATION_URL))??ak().split("-")[0]}`},...SO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,vu.md.sha256.create());let o=ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME),c=ir.join(o,Xs.PRIVATEKEY_PEM_NAME);return r&&await An.writeFile(c,yt.privateKeyToPem(e)),n}a(pk,"generateCertAuthority");async function Zne(){let{private_key:e,public_key:t}=await TO(),r=await pk(e,t),n=await AO(e,t,r);await Xne(n,r),mk()}a(Zne,"generateCertsKeys");async function ese(){let e=await AO(yt.privateKeyFromPem(Xs.CERTIFICATE_VALUES.key),void 0,yt.certificateFromPem(Xs.CERTIFICATE_VALUES.cert)),t=ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME);await An.exists(r)||await An.writeFile(r,e);let n=ir.join(t,Xs.NATS_CA_PEM_NAME);await An.exists(n)||await An.writeFile(n,Xs.CERTIFICATE_VALUES.cert)}a(ese,"createNatsCerts");async function tse(){Ta();for await(let e of xr.search([{attribute:"is_self_signed",value:!0}]))await xr.delete(e.name);await RO()}a(tse,"renewSelfSigned");async function RO(){Kne(),await _k(),Ta();let e=await mO();if(!e){St.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:yt.privateKeyFromPem(An.readFileSync(u)),keyPath:u}}catch(f){return St.warn(`Failed to parse private key from ${u}:`,f.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Wn.get(tl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let f=r(u.privateKey);if(s=f.key,i=f.keyPath,f.key)break}}else{let u=Wn.get(tl.TLS_PRIVATEKEY),f=r(u);s=f.key,i=f.keyPath}let o=ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME),c=ck(o,i);s||(St.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{private_key:s}=await TO(),An.existsSync(ir.join(o,Xs.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${ak().split("-")[0]}.pem`),await An.writeFile(ir.join(o,c),yt.privateKeyToPem(s)));let l=await pk(s,yt.setRsaPublicKey(s.n,s.e),!1);await Uu({name:l.subject.getField("CN").value,uses:["https"],certificate:yt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await q_()){let r=JE();St.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await mO();let n=yt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await AO(yt.privateKeyFromPem(e.private_key),s,n);await Uu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(RO,"reviewSelfSignedCert");function mk(){let e=Gne(Object.keys(ms.CONFIG_PARAM_MAP),!0),t=ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME),r=ir.join(t,Xs.PRIVATEKEY_PEM_NAME),n=ir.join(t,Xs.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,Xs.NATS_CA_PEM_NAME),i=ms.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),hO.updateConfigValue(void 0,void 0,o,!1,!0)}a(mk,"updateConfigCert");function Ek(e){return e.startsWith("-----BEGIN")?e:Yne(e,"utf8")}a(Ek,"readPEM");var sk=jE.createSecureContext;jE.createSecureContext=function(e){if(!e.cert||!e.key)return sk(e);let t={...e};delete t.key,delete t.cert;let r=sk(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var rse=fk.prototype._init;fk.prototype._init=function(e,t){rse.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 el=new Map;function gk(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(),el.clear();let f=0;for await(let d of fO.system.hdb_certificate.search([])){let h=d.certificate,_=new go(h);d.is_authority&&(_.asString=h,el.set(_.subject,h))}for await(let d of fO.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let h=e==="operations-api",_=d.is_self_signed?1:2;h&&d.uses?.includes?.("operations")&&(_+=1);let p=await Sk(d.private_key_name),S=d.certificate,g=new go(S);if(el.has(g.issuer)&&(S+=`
23
+ `+el.get(g.issuer)),!p||!S)throw new Error("Missing private key or certificate for secure server");let R={ciphers:d.ciphers,ticketKeys:Wne(),availableCAs:el,ca:t&&Array.from(el.values()),cert:S,key:p,key_file:d.private_key_name,is_self_signed:d.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let E=jE.createSecureContext(R);E.name=d.name,E.options=R,E.quality=_,E.certificateAuthorities=Array.from(el),E.certStart=S.toString().slice(0,100);let T=d.hostnames??yO(g);Array.isArray(T)||(T=[T]);let O;for(let v of T)if(v){v[0]==="*"&&(s=!0,v=v.slice(1)),v===pO()&&(_+=2),ik.isIP(v)&&(O=!0);let F=r.get(v)?.quality??0;_>F&&r.set(v,E)}else Ea.error("No hostname found for certificate at",jE.certificate);Ea.trace("Adding TLS",E.name,"for",o.ports||"client","cert named",d.name,"hostnames",T,"quality",_,"best quality",f),_>f&&(i.defaultContext=n=E,f=_,o&&(o.defaultContext=E))}catch(h){Ea.error("Error applying TLS for",d.name,h)}o?.secureContextsListeners.forEach(d=>d()),c(n)}catch(f){l(f)}}a(u,"updateTLS"),fO.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Ea.info("TLS requested for",o||"(no SNI)");let l=o;for(;;){let f=r.get(l);if(f)return Ea.debug("Found certificate for",o,f.certStart),f.updatedContext&&(f=f.updatedContext),c(null,f);if(s&&l){let d=l.indexOf(".",1);d<0?l="":l=l.slice(d)}else break}o?Ea.debug("No certificate found to match",o,"using the default certificate"):Ea.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Ea.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(gk,"createTLSSelector");async function Sk(e){let t=Sa.get(e);return!t&&e?await An.readFile(ir.join(Wn.get(tl.ROOTPATH),ms.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(Sk,"getPrivateKeyByName");async function Tk(){Ta();let e=[];for await(let t of xr.search([]))e.push(t);return e}a(Tk,"listCertificates");async function nse(e){let t=EO(e,Js.object({name:Js.string().required(),certificate:Js.string().required(),is_authority:Js.boolean().required(),private_key:Js.string(),hosts:Js.array(),uses:Js.array()}));if(t)throw new ga(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new go(n),c=!1,l=!1,u;for(let[_,p]of Sa)!s&&!c&&o.checkPrivateKey(ok(p))&&(c=!0,u=_),s&&s===p&&(l=!0,u=_);if(!i&&!s&&!c)throw new ga("A suitable private key was not found for this certificate");let f;if(!r){try{f=Ak(o)}catch(_){St.error(_)}if(f==null)throw new ga("Error extracting certificate common name, please provide a name parameter")}let d=sse(r??f);s&&!c&&!l&&(await An.writeFile(ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME,d+".pem"),s),Sa.set(d,s));let h={name:r??f,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(h.private_key_name=u??d+".pem"),e.ciphers&&(h.ciphers=e.ciphers),await Uu(h),"Successfully added certificate: "+d}a(nse,"addCertificate");function sse(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(sse,"sanitizeName");async function ise(e){let t=EO(e,Js.object({name:Js.string().required()}));if(t)throw new ga(t.message);let{name:r}=e;Ta();let n=await xr.get(r);if(!n)throw new ga(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await xr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(St.info("Removing private key named",s),await An.remove(ir.join(Wn.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME,s)))}return await xr.delete(r),"Successfully removed "+r}a(ise,"removeCertificate");function Ak(e){let t=e.subject.match(/CN=(.*)/)?.[1];return t||yO(e)[0]}a(Ak,"getPrimaryHostName");function yO(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=certObj.subject.match(/CN=(.*)/)?.[1];return t?[t]:[]}a(yO,"hostnamesFromCert");async function ose(e){if(e.bypass_auth!==!0)throw new ga("Unauthorized","401");let t=EO(e,Js.object({name:Js.string().required()}));if(t)throw new ga(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await tk()).privateKey;if(r===".jwtPublic")return(await tk()).publicKey;if(Sa.get(r))return Sa.get(e.name);throw new ga("Key not found")}a(ose,"getKey")});var Vk={};Be(Vk,{CONFIRMATION_STATUS_POSITION:()=>Gk,NodeReplicationConnection:()=>Bu,OPERATION_REQUEST:()=>wO,RECEIVED_TIME_POSITION:()=>CO,RECEIVED_VERSION_POSITION:()=>IO,RECEIVING_STATUS_POSITION:()=>PO,RECEIVING_STATUS_RECEIVING:()=>$k,RECEIVING_STATUS_WAITING:()=>qk,SENDING_TIME_POSITION:()=>$_,createWebSocket:()=>sg,database_subscriptions:()=>ya,replicateOverWS:()=>V_,table_update_listeners:()=>LO});async function sg(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(!OO){let l=(0,Bk.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),OO=u.secureContexts}if(i=OO.get(s),i&&ae.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,kk.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=Hk.createSecureContext({...i.options,ca:[...nl,...i.options.availableCAs.values()]})),new Uk.WebSocket(e,"harperdb-replication-v1",c)}function V_(e,t,r){let n=t.port||t.securePort,s=rl.pid%1e3+"-"+xk.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,f=t.databaseSubscriptions||ya,d,h,_=!1,p=t.subscription;p?.then&&p.then(A=>p=A);let S=t.tables||u&&Ze()[u];if(!r){ae.error?.("No authorization provided"),sn(1008,"Unauthorized");return}let g=new Map,R=[],E=r.name;E&&t.connection&&(t.connection.nodeName=E);let T,O,v,F,q,j,te,se=5e3,z,ne=0,le=0,ie=0,Re=vk.default.get(B.REPLICATION_BLOBTIMEOUT)??12e4,pe=new Map,Ae=[],xt=0,dt;if(t.url){let A=a(()=>{q&&le===e._socket?.bytesRead&&ie===e._socket?.bytesWritten?e.terminate():(q=performance.now(),e.ping(),le=e._socket?.bytesRead,ie=e._socket?.bytesWritten)},"send_ping");v=setInterval(A,Lk).unref(),A()}else Cn();e._socket?.setMaxListeners(200);function Cn(){clearTimeout(F),le=e._socket?.bytesRead,ie=e._socket?.bytesWritten,F=setTimeout(()=>{le===e._socket?.bytesRead&&ie===e._socket?.bytesWritten&&(ae.warn?.(`Timeout waiting for ping from ${E}, terminating connection and reconnecting`),e.terminate())},Lk*2).unref()}a(Cn,"resetPingTimer");function nn(){return h||(h=KE(d,u,E)),h}a(nn,"getSharedStatus"),u&&Wo(u);let wr,kd,rc=[],KT=[],YT,Bt=[],Fd=[],Gd=[],WT=150,Ep=25,qd=0,De=0,$d=!1,Wi,Ir,Pn,nc;e.on("message",A=>{ne=performance.now();try{let N=A.dataView=new sl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let w=(0,et.decode)(A),[H,U,Q]=w;switch(H){case bk:{if(U){if(E){if(E!==U){ae.error?.(s,`Node name mismatch, expecting to connect to ${E}, but peer reported name as ${U}, disconnecting`),e.send((0,et.encode)([xu])),sn(1008,"Node name mismatch");return}}else if(E=U,t.connection?.tentativeNode){let Y=t.connection.tentativeNode;Y.name=E,t.connection.tentativeNode=null,Eo(E,Y)}if(t.connection&&(t.connection.nodeName=E),ae.debug?.(s,"received node name:",E,"db:",u),!u)try{Wo(u=w[2]),u==="system"&&(wr=pa(t,(Y,V)=>{Yo(V)&&Yd(V)}),e.on("close",()=>{wr?.remove()}))}catch(Y){ae.warn?.(s,"Error setting database",Y),e.send((0,et.encode)([xu])),sn(1008,Y.message);return}Ko()}break}case Pk:{ae.debug?.(s,"Received table definitions for",U.map(Y=>Y.table));for(let Y of U){let V=w[2];Y.database=V;let ue;Yo(V)&&(V==="system"?Ye[V]?.[Y.table]||(ue=I(Y,Ye[V]?.[Y.table])):ue=I(Y,Ye[V]?.[Y.table]),d||(d=ue?.auditStore),S||(S=Ze()?.[V]))}break}case xu:sn();break;case wO:try{let Y=r?.replicates||r?.subscribers||r?.name;server.operation(U,{user:r},!Y).then(V=>{Array.isArray(V)&&(V={results:V}),V.requestId=U.requestId,e.send((0,et.encode)([ZE,V]))},V=>{e.send((0,et.encode)([ZE,{requestId:U.requestId,error:V instanceof Error?V.toString():V}]))})}catch(Y){e.send((0,et.encode)([ZE,{requestId:U.requestId,error:Y instanceof Error?Y.toString():Y}]))}break;case ZE:let{resolve:J,reject:k}=g.get(U.requestId);U.error?k(new Error(U.error)):J(U),g.delete(U.requestId);break;case bO:let Ce=w[3];S||(u?ae.error?.(s,"No tables found for",u):ae.error?.(s,"Database name never received"));let de=S[Ce];de=I({table:Ce,database:u,attributes:U.attributes,schemaDefined:U.schemaDefined},de),rc[Q]={name:Ce,decoder:new et.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:U.typedStructs,structures:U.structures}),getEntry(Y){return de.primaryStore.getEntry(Y)},rootStore:de.primaryStore.rootStore};break;case Ok:nc=d?VH(U,d):new Map,YT=w[2],ae.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${YT}`);break;case Nk:let ye=Q;Gd[ye]=U;break;case Ck:nn()[Gk]=U,ae.trace?.(s,"received and broadcasting committed update",U),nn().buffer.notify();break;case Ik:T=U,p.send({type:"end_txn",localTime:T,remoteNodeIds:R});break;case eg:{let Y=w[1],{fileId:V,size:ue,finished:_e,error:me}=Y,Te=pe.get(V);ae.debug?.("Received blob",V,"has stream",!!Te,"connectedToBlob",!!Te?.connectedToBlob,"length",w[2].length,"finished",_e),Te||(Te=new NO.PassThrough,Te.expectedSize=ue,pe.set(V,Te)),Te.lastChunk=Date.now();let Pe=w[2];Dt(Pe.byteLength,"bytes-received",`${E}.${u}`,"replication","blob");try{_e?(me?(Te.on("error",()=>{}),Te.destroy(new Error("Blob error: "+me))):Te.end(Pe),Te.connectedToBlob&&pe.delete(V)):Te.write(Pe)}catch(Ve){ae.error?.(`Error receiving blob for ${Te.recordId} from ${E} and streaming to storage`,Ve),pe.delete(V)}break}case wk:{let Y=U,V;try{let ue=w[3],_e=KT[Q]||(KT[Q]=S[w[4]]);if(!_e)return ae.warn?.("Unknown table id trying to handle record request",Q);let me=_e.primaryStore.getBinaryFast(Symbol.for("structures")),Te=me?.length;if(Te>0&&Te!==De){De=Te;let Ve=(0,et.decode)(me);e.send((0,et.encode)([bO,{typedStructs:Ve.typed,structures:Ve.named},Q,_e.tableName]))}let Pe=_e.primaryStore.getBinaryFast(ue);if(Pe){let Ve=_e.primaryStore.decoder.decode(Pe,{valueAsBuffer:!0}),We=Ve.value;Ve[yc]&pn&&(We=Buffer.from(We),bf(()=>_e.primaryStore.decoder.decode(Pe),sc,_e.primaryStore.rootStore)),V=(0,et.encode)([XE,Y,{value:We,expiresAt:Ve.expiresAt,version:Ve.version,residencyId:Ve.residencyId,nodeId:Ve.nodeId,user:Ve.user}])}else V=(0,et.encode)([XE,Y])}catch(ue){V=(0,et.encode)([XE,Y,{error:ue.message}])}e.send(V);break}case XE:{let{resolve:Y,reject:V,tableId:ue,key:_e}=g.get(w[1]),me=w[2];if(me?.error)V(new Error(me.error));else if(me){let Te;dm(()=>{let Pe=rc[ue].decoder.decode(me.value);me.value=Pe,me.key=_e,Y(me)||Te&&setTimeout(()=>Te.forEach(cm),6e4).unref()},Pe=>{let Ve=Vd(Pe,_e);return Te||(Te=[]),Te.push(Ve),Ve})}else Y();g.delete(w[1]);break}case yk:{Pn=U;let Y,V,ue=!1;if(p){if(u!==p.databaseName&&!p.then){ae.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=f.get(u);if(ae.debug?.(s,"received subscription request for",u,"at",Pn),!p){let Ie;p=new Promise(Ht=>{ae.debug?.("Waiting for subscription to database "+u),Ie=Ht}),p.ready=Ie,ya.set(u,p)}if(r.name)V=sr().subscribe(r.name),V.then(async Ie=>{Y=Ie;for await(let Ht of Y){let Ot=Ht.value;if(!(Ot?.replicates===!0||Ot?.replicates?.receives||Ot?.subscriptions?.some(Rr=>(Rr.database||Rr.schema)===u&&Rr.publish!==!1))){ue=!0,e.send((0,et.encode)([xu])),sn(1008,`Unauthorized database subscription to ${u}`);return}}},Ie=>{ae.error?.(s,"Error subscribing to HDB nodes",Ie)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,et.encode)([xu])),sn(1008,`Unauthorized database subscription to ${u}`);return}if(Ir&&(ae.debug?.(s,"stopping previous subscription",u),Ir.emit("close")),Pn.length===0)return;let _e=Pn[0],me=a(Ie=>{if(Ie&&(_e.replicateByDefault?!_e.tables.includes(Ie.tableName):_e.tables.includes(Ie.tableName)))return{table:Ie}},"tableToTableEntry"),Te={txnTime:0},Pe,Ve,We=1/0,Ms,is=a((Ie,Ht)=>{if(Ie.type==="end_txn"){Te.txnTime&&(o[i]!==66&&ae.error?.("Invalid encoding of message"),K(9),K(ng),y(Ms=Ht),Sp()),i=c,Te.txnTime=0;return}let Ot=Ie.nodeId,Rr=Ie.tableId,At=Ve[Rr];if(!At&&(At=Ve[Rr]=me(p.tableById[Rr]),!At))return ae.debug?.("Not subscribed to table",Rr);let os=At.table,kt=os.primaryStore,vs=kt.encoder;(Ie.extendedType&Tm||!vs.typedStructs)&&(vs._mergeStructures(vs.getStructures()),vs.typedStructs&&(vs.lastTypedStructuresLength=vs.typedStructs.length));let Tp=Pe[Ot];if(!(Tp&&Tp.startTime<Ht&&(!Tp.endTime||Tp.endTime>Ht)))return rg&&ae.trace?.(s,"skipping replication update",Ie.recordId,"to:",E,"from:",Ot,"subscribed:",Pe),nP();rg&&ae.trace?.(s,"sending replication update",Ie.recordId,"to:",E,"from:",Ot,"subscribed:",Pe);let zT=Ie.version;Te.txnTime!==zT&&(Te.txnTime&&(rg&&ae.trace?.(s,"new txn time, sending queued txn",Te.txnTime),o[i]!==66&&ae.error?.("Invalid encoding of message"),Sp()),Te.txnTime=zT,i=c,y(zT));let ac=Ie.residencyId,jT=Kd(ac,os),Ap;if(jT&&!jT.includes(E)){let Us=Kd(Ie.previousResidencyId,os);if(Us&&!Us.includes(E)&&(Ie.type==="put"||Ie.type==="patch")||os.getResidencyById)return nP();let Wd=Ie.recordId;ae.trace?.(s,"sending invalidation",Wd,E,"from",Ot);let XT=0;ac&&(XT|=Nc),Ie.previousResidencyId&&(XT|=wc);let ZT,Rp=null;for(let sP in os.indices){if(!Rp){if(ZT=Ie.getValue(kt,!0),!ZT)break;Rp={}}Rp[sP]=ZT[sP]}Ap=bc(Ie.version,Rr,Wd,null,Ot,Ie.user,Ie.type==="put"||Ie.type==="patch"?"invalidate":Ie.type,vs.encode(Rp),XT,ac,Ie.previousResidencyId,Ie.expiresAt)}function nP(){return ae.trace?.(s,"skipping audit record",Ie.recordId),j||(j=setTimeout(()=>{j=null,(Ms||0)+Dk/2<We&&(rg&&ae.trace?.(s,"sending skipped sequence update",We),e.send((0,et.encode)([Ik,We])))},Dk).unref()),new Promise(setImmediate)}a(nP,"skipAuditRecord");let QT=vs.typedStructs,JT=vs.structures;if((QT?.length!=At.typed_length||JT?.length!=At.structure_length)&&(At.typed_length=QT?.length,At.structure_length=JT.length,ae.debug?.(s,"send table struct",At.typed_length,At.structure_length),At.sentName||(At.sentName=!0),e.send((0,et.encode)([bO,{typedStructs:QT,structures:JT,attributes:os.attributes,schemaDefined:os.schemaDefined},Rr,At.table.tableName]))),ac&&!Fd[ac]&&(e.send((0,et.encode)([Nk,jT,ac])),Fd[ac]=!0),Ap)K(Ap.length),m(Ap);else{let Us=Ie.encoded;Ie.extendedType&pn&&bf(()=>Ie.getValue(kt),sc,kt.rootStore);let Wd=Us[0]===66?8:0;K(Us.length-Wd),m(Us,Wd),ae.trace?.("wrote record",Ie.recordId,"length:",Us.length)}return e._socket.writableNeedDrain?new Promise(Us=>{ae.debug?.(`Waiting for remote node ${E} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Us)}):xt>Ep?new Promise(Us=>{dt=Us}):new Promise(setImmediate)},"sendAuditRecord"),Sp=a(()=>{c-i>8?(e.send(o.subarray(i,c)),ae.debug?.(s,"Sent message, size:",c-i),Dt(c-i,"bytes-sent",`${E}.${u}`,"replication","egress")):ae.debug?.(s,"skipping empty transaction")},"sendQueuedData");Ir=new DO.EventEmitter,Ir.once("close",()=>{ue=!0,Y?.end()});for(let{startTime:Ie}of Pn)Ie<We&&(We=Ie);(V||Promise.resolve()).then(async()=>{p=await p,d=p.auditStore,Ve=p.tableById.map(me),Pe=[];for(let{name:Ht,startTime:Ot,endTime:Rr}of Pn){let At=VE(Ht,d);ae.debug?.("subscription to",Ht,"using local id",At,"starting",Ot),Pe[At]={startTime:Ot,endTime:Rr}}Yd(u),wr||(wr=il(Ht=>{Ht.databaseName===u&&Yd(u)}),kd=K_(Ht=>{Ht===u&&(e.send((0,et.encode)([xu])),sn())}),e.on("close",()=>{wr?.remove(),kd?.remove()})),e.send((0,et.encode)([Ok,U_(p.auditStore),Pn.map(({name:Ht})=>Ht)]));let Ie=!0;do{isFinite(We)||(ae.warn?.("Invalid sequence id "+We),sn(1008,"Invalid sequence id"+We));let Ht;if(Ie&&!ue&&(Ie=!1,We===0)){let Ot=We,Rr=ig(d);for(let At in S){if(!me(At))continue;let os=S[At];ae.warn?.(`Fully copying ${At} table to ${E}`);for(let kt of os.primaryStore.getRange({snapshot:!1,versions:!0})){if(ue)return;if(kt.localTime>=We){ae.trace?.(s,"Copying record from",u,At,kt.key,kt.localTime),Ot=Math.max(kt.localTime,Ot),Ht=!0,nn()[$_]=1;let vs=bc(kt.version,os.tableId,kt.key,null,Rr,null,"put",bf(()=>os.primaryStore.encoder.encode(kt.value),sc),kt.metadataFlags&-256,kt.residencyId,null,kt.expiresAt);await is({recordId:kt.key,tableId:os.tableId,type:"put",getValue(){return kt.value},encoded:vs,version:kt.version,residencyId:kt.residencyId,nodeId:Rr,extendedType:kt.metadataFlags},kt.localTime)}}}Ht&&is({type:"end_txn"},We),nn()[$_]=0,We=Ot}for(let{key:Ot,value:Rr}of d.getRange({start:We||1,exclusiveStart:!0,snapshot:!1})){if(ue)return;let At=Ct(Rr);ae.debug?.("sending audit record",new Date(Ot)),nn()[$_]=Ot,We=Ot,await is(At,Ot),Ir.startTime=Ot,Ht=!0}Ht&&is({type:"end_txn"},We),nn()[$_]=0,await Kk(d)}while(!ue)}).catch(Ie=>{ae.error?.(s,"Error handling subscription to node",Ie),sn(1008,"Error handling subscription to node")});break}}return}N.position=8;let b=!0,C,x;do{nn();let w=N.readInt();if(w===9&&N.getUint8(N.position)==ng){N.position++,T=x=N.readFloat64(),h[IO]=T,h[CO]=Date.now(),h[PO]=qk,ae.trace?.("received remote sequence update",T,u);break}let H=N.position,U=Ct(A,H,H+w),Q=rc[U.tableId];Q||ae.error?.(`No table found with an id of ${U.tableId}`);let J;U.residencyId&&(J=Gd[U.residencyId],ae.trace?.(s,"received residency list",J,U.type,U.recordId));try{let k=U.recordId;dm(()=>{C={table:Q.name,id:k,type:U.type,nodeId:nc.get(U.nodeId),residencyList:J,timestamp:U.version,value:U.getValue(Q),user:U.user,beginTxn:b,expiresAt:U.expiresAt}},Ce=>Vd(Ce,k))}catch(k){throw k.message+="typed structures for current decoder"+JSON.stringify(Q.decoder.typedStructs),k}b=!1,ae.trace?.(s,"received replication message",U.type,"id",C.id,"version",new Date(U.version),"nodeId",C.nodeId),h[IO]=U.version,h[CO]=Date.now(),h[PO]=$k,p.send(C),N.position=H+w}while(N.position<A.byteLength);qd++,Dt(A.byteLength,"bytes-received",`${E}.${u}.${C?.table||"unknown_table"}`,"replication","ingest"),qd>WT&&!$d&&($d=!0,e.pause(),ae.debug?.(`Commit backlog causing replication back-pressure, requesting that ${E} pause replication`)),p.send({type:"end_txn",localTime:T,remoteNodeIds:R,async onCommit(){if(C){let w=Date.now()-C.timestamp;Dt(w,"replication-latency",E+"."+u+"."+C.table,C.type,"ingest")}qd--,$d&&($d=!1,e.resume(),ae.debug?.(`Replication resuming ${E}`)),Ae.length>0&&await Promise.all(Ae),ae.trace?.("All blobs finished"),!O&&x&&(ae.trace?.(s,"queuing confirmation of a commit at",x),setTimeout(()=>{e.send((0,et.encode)([Ck,O])),ae.trace?.(s,"sent confirmation of a commit at",O),O=null},cse)),O=x,ae.debug?.("last sequence committed",new Date(x),u)}})}catch(N){ae.error?.(s,"Error handling incoming replication message",N)}}),e.on("ping",Cn),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-q,t.isSubscriptionConnection&&Zc({name:E,database:u,url:t.url,latency:t.connection.latency})),q=null}),e.on("close",(A,N)=>{clearInterval(v),clearTimeout(F),clearInterval(te),Ir&&Ir.emit("close"),Wi&&Wi.end();for(let[b,{reject:C}]of g)C(new Error(`Connection closed ${N?.toString()} ${A}`));ae.debug?.(s,"closed",A,N?.toString())});function sn(A,N){e.isFinished=!0,e.close(A,N),t.connection?.emit("finished")}a(sn,"close");let Cr=new Set;async function sc(A){let N=lm(A);if(Cr.has(N)){ae.debug?.("Blob already being sent",N);return}Cr.add(N);try{let b;xt++;for await(let C of A.stream())b&&(ae.debug?.("Sending blob chunk",N,"length",b.length),e.send((0,et.encode)([eg,{fileId:N,size:A.size},b]))),b=C,e._socket.writableNeedDrain&&(ae.debug?.("draining",N),await new Promise(x=>e._socket.once("drain",x)),ae.debug?.("drained",N)),Dt(C.length,"bytes-sent",`${E}.${u}`,"replication","blob");ae.debug?.("Sending final blob chunk",N,"length",b.length),e.send((0,et.encode)([eg,{fileId:N,size:A.size,finished:!0},b]))}catch(b){ae.debug?.("Error sending blob",b),e.send((0,et.encode)([eg,{fileId:N,finished:!0,error:b.toString()},Buffer.alloc(0)]))}finally{Cr.delete(N),xt--,xt<Ep&&dt?.()}}a(sc,"sendBlobs");function Vd(A,N){let b=lm(A),C=pe.get(b);ae.debug?.("Received transaction for record",N,"with blob",b,"has stream",!!C,"ended",!!C?.writableEnded),C?C.writableEnded&&pe.delete(b):(C=new NO.PassThrough,pe.set(b,C)),C.connectedToBlob=!0,C.lastChunk=Date.now(),C.recordId=N,A.size===void 0&&C.expectedSize&&(A.size=C.expectedSize);let x=C.blob??createBlob(C,A);C.blob=x;let w=x.save({primaryStore:p.auditStore});return w&&(w.blobId=b,Ae.push(w),w.finally(()=>{ae.debug?.(`Finished receiving blob stream ${b}`),Ae.splice(Ae.indexOf(w),1)})),x}a(Vd,"receiveBlobs");function Ko(){if(_||(_=!0,t.connection?.on("subscriptions-updated",Ko)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;d||(d=p?.auditStore);try{for(let C of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let x of C.value.nodes||[])x.lastTxnTime>(A.get(x.id)??0)&&A.set(x.id,x.lastTxnTime)}catch(C){if(!C.message.includes("Can not re"))throw C}let N=t.connection?.nodeSubscriptions?.[0];R=[];let b=t.connection?.nodeSubscriptions?.map((C,x)=>{let w=[],{replicateByDefault:H}=C;if(C.subscriptions){for(let k of C.subscriptions)if(k.subscribe&&(k.schema||k.database)===u){let Ce=k.table;S?.[Ce]?.replicate!==!1&&w.push(Ce)}H=!1}else for(let k in S)(H?S[k].replicate===!1:S[k].replicate)&&w.push(k);let U=d&&VE(C.name,d),Q=p?.dbisDB?.get([Symbol.for("seq"),U])??1,J=Math.max(Q?.seqId??1,(typeof C.start_time=="string"?new Date(C.start_time).getTime():C.start_time)??1);if(ae.debug?.("Starting time recorded in db",C.name,U,u,Q?.seqId,"start time:",J,new Date(J)),N!==C){let k=d&&VE(N.name,d),Ce=p?.dbisDB?.get([Symbol.for("seq"),k])??1;for(let de of Ce?.nodes||[])de.name===C.name&&(J=de.seqId,ae.debug?.("Using sequence id from proxy node",N.name,J))}if(U===void 0?ae.warn("Starting subscription request from node",C,"but no node id found"):R.push(U),A.get(U)>J&&(J=A.get(U),ae.debug?.("Updating start time from more recent txn recorded",N.name,J)),J===1&&tg)try{new URL(tg).hostname===C.name&&E===C.name?(ae.warn?.(`Requesting full copy of database ${u} from ${tg}`),J=0):J=Date.now()-6e4}catch(k){ae.error?.("Error parsing leader URL",tg,k)}return ae.trace?.(s,"defining subscription request",C.name,u,new Date(J)),{name:C.name,replicateByDefault:H,tables:w,startTime:J,endTime:C.end_time}});if(b)if(ae.debug?.(s,"sending subscription request",b,p?.dbisDB?.path),clearTimeout(z),b.length>0)e.send((0,et.encode)([yk,b]));else{let C=a(()=>{let x=performance.now();z=setTimeout(()=>{ne<=x?sn(1008,"Connection has no subscriptions and is no longer used"):C()},se).unref()},"schedule_close");C()}}a(Ko,"sendSubscriptionRequestUpdate");function Kd(A,N){if(!A)return;let b=Bt[A];return b||(b=N.getResidencyRecord(A),Bt[A]=b),b}a(Kd,"getResidence");function Yo(A){return!(Ra&&Ra!="*"&&!Ra[A]&&!Ra.includes?.(A)&&!Ra.some?.(N=>N.name===A))}a(Yo,"checkDatabaseAccess");function Wo(A){if(p=p||f.get(A),!Yo(A))throw new Error(`Access to database "${A}" is not permitted`);p||ae.warn?.(`No database named "${A}" was declared and registered`),d=p?.auditStore,S||(S=Ze()?.[A]);let N=tt();if(N===E)throw N?new Error("Should not connect to self",N):new Error("Node name not defined");return gp(N,A),!0}a(Wo,"setDatabase");function gp(A,N){let b=Ze()?.[N],C=[];for(let x in b){let w=b[x];C.push({table:x,schemaDefined:w.schemaDefined,attributes:w.attributes.map(H=>({name:H.name,type:H.type,isPrimaryKey:H.isPrimaryKey}))})}ae.trace?.("Sending database info for node",A,"database name",N),e.send((0,et.encode)([bk,A,N,C]))}a(gp,"sendNodeDBName");function Yd(A){let N=Ze()?.[A],b=[];for(let C in N){if(Pn&&!Pn.some(w=>w.replicateByDefault?!w.tables.includes(C):w.tables.includes(C)))continue;let x=N[C];b.push({table:C,schemaDefined:x.schemaDefined,attributes:x.attributes.map(w=>({name:w.name,type:w.type,isPrimaryKey:w.isPrimaryKey}))})}e.send((0,et.encode)([Pk,b,A]))}a(Yd,"sendDBSchema"),te=setInterval(()=>{for(let[A,N]of pe)N.lastChunk+Re<Date.now()&&(ae.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${N.recordId??"unknown"} from ${E}`),pe.delete(A),N.end())},Re).unref();let ic=1,oc=[];return{end(){Wi&&Wi.end(),Ir&&Ir.emit("close")},getRecord(A){let N=ic++;return new Promise((b,C)=>{let x=[wk,N,A.table.tableId,A.id];oc[A.table.tableId]||(x.push(A.table.tableName),oc[A.table.tableId]=!0),e.send((0,et.encode)(x)),ne=performance.now(),g.set(N,{tableId:A.table.tableId,key:A.id,resolve(w){let{table:H,entry:U}=A;if(b(w),w)return H._recordRelocate(U,w)},reject:C})})},sendOperation(A){let N=ic++;return A.requestId=N,e.send((0,et.encode)([wO,A])),new Promise((b,C)=>{g.set(N,{resolve:b,reject:C})})}};function K(A){L(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 m(A,N=0,b=A.length){let C=b-N;L(C),A.copy(o,c,N,b),c+=C}function y(A){L(8),l.setFloat64(c,A),c+=8}function L(A){if(A+16>o.length-c){let N=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(N,0,i,c),c=c-i,i=0,o=N,l=new DataView(o.buffer,0,o.length)}}function I(A,N){let b=A.database??"data";if(b!=="data"&&!Ye[b]){ae.warn?.("Database not found",A.database);return}N||(N={});let C=N.schemaDefined,x=!1,w=A.schemaDefined,H=N.attributes||[];for(let U=0;U<A.attributes?.length;U++){let Q=A.attributes[U],J=H.find(k=>k.name===Q.name);(!J||J.type!==Q.type)&&(C?ae.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${Q.name}: ${Q.type}' from '${E}' does not match local attribute ${J?"'"+J.name+": "+J.type+"'":"which does not exist"}`):(x=!0,w||(Q.indexed=!0),J?H[H.indexOf(J)]=Q:H.push(Q)))}return x?(ae.debug?.("(Re)creating",A),_t({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:H,...N})):N}}var vk,et,Uk,xk,ae,DO,Bk,Hk,rl,kk,NO,Fk,yk,bk,Ok,xu,Nk,bO,wk,XE,wO,ZE,Ik,Ck,Pk,eg,Gk,IO,CO,$_,PO,qk,$k,ase,tg,LO,ya,rg,Dk,cse,Lk,OO,Mk,Bu,MO=be(()=>{Ue();so();cO();vO();ps();vk=M(ce());G();ru();et=require("msgpackr"),Uk=require("ws"),xk=require("worker_threads"),ae=M(mi());F_();DO=require("events"),Bk=M(Zs()),Hk=M(require("node:tls"));Xc();rl=M(require("node:process")),kk=require("node:net");Ci();fs();NO=require("node:stream"),Fk=M(require("minimist")),yk=129,bk=140,Ok=141,xu=142,Nk=130,bO=132,wk=133,XE=134,wO=136,ZE=137,Ik=143,Ck=144,Pk=145,eg=146,Gk=0,IO=1,CO=2,$_=3,PO=4,qk=0,$k=1,ase=(0,Fk.default)(rl.argv),tg=ase.HDB_LEADER_URL??rl.env.HDB_LEADER_URL,LO=new Map,ya=new Map,rg=!0,Dk=300,cse=2,Lk=3e4;a(sg,"createWebSocket");Mk=500,Bu=class extends DO.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??Qs(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=Mk;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await sg(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;ae.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${rl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ae[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=Mk,this.nodeSubscriptions&&Zc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=V_(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ae.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ae.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ae.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(this.nodeSubscriptions&&Mu({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();ae.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(V_,"replicateOverWS")});var Aa={};Be(Aa,{clearThisNodeName:()=>Ese,disableReplication:()=>fse,enabled_databases:()=>Ra,forEachReplicatedDatabase:()=>pa,getThisNodeId:()=>ig,getThisNodeName:()=>tt,getThisNodeUrl:()=>ma,hostnameToUrl:()=>ug,lastTimeInAuditStore:()=>x_,monitorNodeCAs:()=>Zk,replicateOperation:()=>Sse,replication_certificate_authorities:()=>nl,sendOperationToNode:()=>Y_,servers:()=>use,setReplicator:()=>tF,start:()=>dse,startOnMainThread:()=>dO,subscribeToNode:()=>k_,unsubscribeFromNode:()=>zE,urlToNodeName:()=>Qs});function dse(e){if(e.port||(e.port=Es.default.get(B.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=Es.default.get(B.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 s of H_(e))t.set(Qs(s.url),s);_se(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ke.ws(async(s,i,o,c)=>{if(i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,o);await o,s._socket.unref(),V_(s,e,i?.user),s.on("error",l=>{l.code!=="ECONNREFUSED"&&or.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Ke.http((s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!s.authorized&&s._nodeRequest.socket.authorizationError&&or.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let o=sr().primaryStore;if(s.authorized&&s.peerCertificate.subject){let c=s.peerCertificate.subject,l=c&&(o.get(c.CN)||t.get(c.CN));if(l)if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){or.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l;else or.warn(`No node found for certificate common name ${c.CN}, available nodes are ${Array.from(o.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=o.get(s.ip)||t.get(s.ip);c?s.user=c:or.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...o.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=a(()=>{let o=new Set(s.secureContexts.values());s.defaultContext&&o.add(s.defaultContext);for(let c of o)try{let l=Array.from(nl);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=lg.createSecureContext(u)}catch(l){or.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Es.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&i()}Zk(()=>{for(let s of n)s()})}function Zk(e){let t=0;Du(r=>{r?.ca&&(nl.add(r.ca),nl.size!==t&&(t=nl.size,e?.()))})}function fse(e=!0){Xk=e}function _se(e){Xk||(Ze(),Ra=e.databases,pa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||ya;for(let[s,i]of ag){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];tF(r,s,e),LO.get(s)?.forEach(i=>i(s))}}))}function tF(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 eF extends qr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||ya,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(or.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new vn,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 f;for(let h of c){if(h===Ke.hostname)continue;let _=pse(h,eF.subscription,e);_?.isConnected&&!u.has(_)&&(!f||_.latency<f.latency)&&(f=_)}if(!f)throw l||new Qk.ServerError("No connection to any other nodes are available",502);let d={requestId:lse++,table:t,entry:i,id:i.key};u.add(f);try{return await f.getRecord(d)}catch(h){if(f.isConnected)throw h;or.warn("Error in load from node",cg,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function hse(e,t,r,n,s){let i=ag.get(e);i||(i=new Map,ag.set(e,i));let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new Bu(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function pse(e,t,r){let n=Yk.get(e);n||(n=new Map,Yk.set(e,n));let s=n.get(r);if(s)return s;let i=sr().primaryStore.get(e);return i?.url&&(s=new Bu(i.url,t,r,e,i.authorization),n.set(e,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Y_(e,t,r){r||(r={}),r.serverName=e.name;let n=await sg(e.url,r),s=V_(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{or.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function k_(e){try{Jk.isMainThread&&or.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=ya.get(e.database);if(!t){let n;t=new Promise(s=>{or.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,ya.set(e.database,t)}let r=hse(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>B_(n,e.database)),e.replicateByDefault)}catch(t){or.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function zE({name:e,url:t,database:r}){or.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(sr().primaryStore.getRange({})));let n=ag.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function mse(){if(UO!==void 0)return UO;let e=Es.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||Es.default.get(B.TLS_CERTIFICATE);if(e)return UO=new zk.X509Certificate((0,jk.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function tt(){return cg||(cg=Es.default.get("replication_hostname")??Qs(Es.default.get("replication_url"))??mse()??Wk("operationsapi_network_secureport")??Wk("operationsapi_network_port")??"127.0.0.1")}function Ese(){cg=void 0}function Wk(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function og(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function ig(e){return U_(e)?.[tt()]}function ma(){let e=Es.default.get("replication_url");return e||ug(tt())}function ug(e){let t=og("replication_port");if(t)return`ws://${e}:${t}`;if(t=og("replication_secureport"),t)return`wss://${e}:${t}`;if(t=og("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=og("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Qs(e){if(e)return new URL(e).hostname}function pa(e,t){for(let n of Object.getOwnPropertyNames(Ye))r(n);return K_(n=>{r(n)}),il((n,s)=>{r(n.databaseName)});function r(n){let s=Ye[n];or.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):gse(n)&&t(s,n,!1)}a(r,"forDatabase")}function gse(e){let t=Ye[e];for(let r in t)if(t[r].replicate)return!0}function x_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Sse(e){let t={message:""};if(e.replicated){e.replicated=!1,or.trace?.("Replicating operation",e.operation,"to nodes",Ke.nodes.map(n=>n.name));let r=await Promise.allSettled(Ke.nodes.map(n=>Y_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ke.nodes[s]?.name,i})}return t}var Es,or,zk,jk,lg,Qk,Jk,Xk,lse,use,nl,Ra,ag,Yk,UO,cg,ps=be(()=>{Ue();na();Kl();MO();Dr();Es=M(ce()),or=M(X()),zk=require("crypto"),jk=require("fs");F_();Xc();G();cO();lg=M(require("node:tls")),Qk=M(he()),Jk=require("worker_threads"),lse=1,use=[],nl=Es.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(lg.rootCertificates):new Set;a(dse,"start");a(Zk,"monitorNodeCAs");a(fse,"disableReplication");a(_se,"assignReplicationSource");a(tF,"setReplicator");ag=new Map;a(hse,"getSubscriptionConnection");Yk=new Map;a(pse,"getRetrievalConnectionByName");a(Y_,"sendOperationToNode");a(k_,"subscribeToNode");a(zE,"unsubscribeFromNode");a(mse,"getCommonNameFromCert");a(tt,"getThisNodeName");a(Ese,"clearThisNodeName");Object.defineProperty(Ke,"hostname",{get(){return tt()}});a(Wk,"getHostFromListeningPort");a(og,"getPortFromListeningPort");a(ig,"getThisNodeId");Ke.replication={getThisNodeId:ig,exportIdMapping:U_};a(ma,"getThisNodeUrl");a(ug,"hostnameToUrl");a(Qs,"urlToNodeName");a(pa,"forEachReplicatedDatabase");a(gse,"hasExplicitlyReplicatedTable");a(x_,"lastTimeInAuditStore");a(Sse,"replicateOperation")});var pg=P((yIe,oF)=>{"use strict";var Hu=_H(),{validateBySchema:W_}=nt(),{common_validators:ku,schema_regex:xO}=Ri(),ar=require("joi"),Tse=X(),Ase=require("uuid").v4,_g=_o(),Fu=(G(),D($)),Rse=require("util"),ba=Fn(),{handleHDBError:So,hdb_errors:yse,ClientError:z_}=he(),{HDB_ERROR_MSGS:dg,HTTP_STATUS_CODES:To}=yse,{SchemaEventMsg:hg}=Ks(),rF=Er(),{getDatabases:bse}=(Ue(),D(at)),{transformReq:Gu}=oe(),{replicateOperation:nF}=(ps(),D(Aa)),fg=ar.string().min(1).max(ku.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+ku.schema_format.message}),Ose=ar.string().min(1).max(ku.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+ku.schema_format.message}).required(),Nse=ar.string().min(1).max(ku.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+ku.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();oF.exports={createSchema:wse,createSchemaStructure:sF,createTable:Ise,createTableStructure:iF,createAttribute:Mse,dropSchema:Cse,dropTable:Pse,dropAttribute:Dse,getBackup:vse};async function wse(e){let t=await sF(e);return _g.signalSchemaChange(new hg(process.pid,e.operation,e.schema)),t}a(wse,"createSchema");async function sF(e){let t=W_(e,ar.object({database:fg,schema:fg}));if(t)throw new z_(t.message);if(Gu(e),!await Hu.checkSchemaExists(e.schema))throw So(new Error,dg.SCHEMA_EXISTS_ERR(e.schema),To.BAD_REQUEST,Fu.LOG_LEVELS.ERROR,dg.SCHEMA_EXISTS_ERR(e.schema),!0);return await ba.createSchema(e),`database '${e.schema}' successfully created`}a(sF,"createSchemaStructure");async function Ise(e){return Gu(e),e.hash_attribute=e.primary_key??e.hash_attribute,await iF(e)}a(Ise,"createTable");async function iF(e){let t=W_(e,ar.object({database:fg,schema:fg,table:Ose,residence:ar.array().items(ar.string().min(1)).optional(),hash_attribute:Nse}));if(t)throw new z_(t.message);if(!await Hu.checkSchemaTableExists(e.schema,e.table))throw So(new Error,dg.TABLE_EXISTS_ERR(e.schema,e.table),To.BAD_REQUEST,Fu.LOG_LEVELS.ERROR,dg.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Ase(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ba.createTable(n,e);else throw So(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",To.BAD_REQUEST);else await ba.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(iF,"createTableStructure");async function Cse(e){let t=W_(e,ar.object({database:ar.string(),schema:ar.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new z_(t.message);Gu(e);let r=await Hu.checkSchemaExists(e.schema);if(r)throw So(new Error,r,To.NOT_FOUND,Fu.LOG_LEVELS.ERROR,r,!0);let n=await Hu.schema_describe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await ba.dropSchema(e),_g.signalSchemaChange(new hg(process.pid,e.operation,e.schema)),await rF.purgeSchemaTableStreams(e.schema,s);let i=await nF(e);return i.message=`successfully deleted '${e.schema}'`,i}a(Cse,"dropSchema");async function Pse(e){let t=W_(e,ar.object({database:ar.string(),schema:ar.string(),table:ar.string().required()}));if(t)throw new z_(t.message);Gu(e);let r=await Hu.checkSchemaTableExists(e.schema,e.table);if(r)throw So(new Error,r,To.NOT_FOUND,Fu.LOG_LEVELS.ERROR,r,!0);await ba.dropTable(e),await rF.purgeTableStream(e.schema,e.table);let n=await nF(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(Pse,"dropTable");async function Dse(e){let t=W_(e,ar.object({database:ar.string(),schema:ar.string(),table:ar.string().required(),attribute:ar.string().required()}));if(t)throw new z_(t.message);Gu(e);let r=await Hu.checkSchemaTableExists(e.schema,e.table);if(r)throw So(new Error,r,To.NOT_FOUND,Fu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw So(new Error,"You cannot drop a hash attribute",To.BAD_REQUEST,void 0,void 0,!0);if(Fu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw So(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,To.BAD_REQUEST,void 0,void 0,!0);try{return await ba.dropAttribute(e),Lse(e),_g.signalSchemaChange(new hg(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Tse.error(`Got an error deleting attribute ${Rse.inspect(e)}.`),n}}a(Dse,"dropAttribute");function Lse(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(Lse,"dropAttributeFromGlobal");async function Mse(e){Gu(e);let t=bse()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw So(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,To.BAD_REQUEST,void 0,void 0,!0);return await ba.createAttribute(e),_g.signalSchemaChange(new hg(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Mse,"createAttribute");function vse(e){return ba.getBackup(e)}a(vse,"getBackup")});var cF=P((OIe,aF)=>{"use strict";var{OPERATIONS_ENUM:Use}=(G(),D($)),BO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Use.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};aF.exports=BO});var HO=P((IIe,_F)=>{"use strict";var xse=Fn(),wIe=cF(),mg=oe(),Eg=(G(),D($)),Bse=ce(),{handleHDBError:lF,hdb_errors:Hse}=he(),{HDB_ERROR_MSGS:uF,HTTP_STATUS_CODES:dF}=Hse,kse=Object.values(Eg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),fF="To use this operation audit log must be enabled in harperdb-config.yaml";_F.exports=Fse;async function Fse(e){if(mg.isEmpty(e.schema))throw new Error(uF.SCHEMA_REQUIRED_ERR);if(mg.isEmpty(e.table))throw new Error(uF.TABLE_REQUIRED_ERR);if(!Bse.get(Eg.CONFIG_PARAMS.LOGGING_AUDITLOG))throw lF(new Error,fF,dF.BAD_REQUEST,Eg.LOG_LEVELS.ERROR,fF,!0);let t=mg.checkSchemaTableExist(e.schema,e.table);if(t)throw lF(new Error,t,dF.NOT_FOUND,Eg.LOG_LEVELS.ERROR,t,!0);if(!mg.isEmpty(e.search_type)&&kse.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await xse.readAuditLog(e)}a(Fse,"readAuditLog")});var pF=P((PIe,hF)=>{"use strict";var{OPERATIONS_ENUM:Gse}=(G(),D($)),kO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Gse.GET_BACKUP,this.schema=t,this.table=r}};hF.exports=kO});var gF=P((vIe,EF)=>{"use strict";var qse=Fn(),LIe=pF(),FO=oe(),$se=(G(),D($)),MIe=ce(),{handleHDBError:Vse,hdb_errors:Kse}=he(),{HDB_ERROR_MSGS:mF,HTTP_STATUS_CODES:Yse}=Kse;EF.exports=Wse;async function Wse(e){if(FO.isEmpty(e.schema))throw new Error(mF.SCHEMA_REQUIRED_ERR);if(FO.isEmpty(e.table))throw new Error(mF.TABLE_REQUIRED_ERR);let t=FO.checkSchemaTableExist(e.schema,e.table);if(t)throw Vse(new Error,t,Yse.NOT_FOUND,$se.LOG_LEVELS.ERROR,t,!0);return await qse.getBackup(read_audit_log_object)}a(Wse,"getBackup")});var RF=P((xIe,AF)=>{"use strict";var zse=ce(),Oa=require("joi"),jse=nt(),SF=require("moment"),Qse=require("fs-extra"),GO=require("path"),Jse=require("lodash"),j_=(G(),D($)),{LOG_LEVELS:ol}=(G(),D($)),Xse="YYYY-MM-DD hh:mm:ss",Zse=GO.resolve(__dirname,"../logs");AF.exports=function(e){return jse.validateBySchema(e,eie)};var eie=Oa.object({from:Oa.custom(TF),until:Oa.custom(TF),level:Oa.valid(ol.NOTIFY,ol.FATAL,ol.ERROR,ol.WARN,ol.INFO,ol.DEBUG,ol.TRACE),order:Oa.valid("asc","desc"),limit:Oa.number().min(1),start:Oa.number().min(0),log_name:Oa.custom(tie)});function TF(e,t){if(SF(e,SF.ISO_8601).format(Xse)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(TF,"validateDatetime");function tie(e,t){if(Jse.invert(j_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=zse.get(j_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?j_.LOG_NAMES.HDB:e,i=s===j_.LOG_NAMES.INSTALL?GO.join(Zse,j_.LOG_NAMES.INSTALL):GO.join(n,s);return Qse.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(tie,"validateReadLogPath")});var $O=P((HIe,bF)=>{"use strict";var gg=(G(),D($)),rie=X(),nie=ce(),sie=RF(),qO=require("path"),yF=require("fs-extra"),{once:iie}=require("events"),{handleHDBError:oie,hdb_errors:aie}=he(),{PACKAGE_ROOT:cie}=Et(),lie=qO.join(cie,"logs"),uie=1e3,die=200;bF.exports=fie;async function fie(e){let t=sie(e);if(t)throw oie(t,t.message,aie.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=nie.get(gg.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?gg.LOG_NAMES.HDB:e.log_name,s=n===gg.LOG_NAMES.INSTALL?qO.join(lie,gg.LOG_NAMES.INSTALL):qO.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,f=u?new Date(e.until):void 0,d=e.limit===void 0?uie:e.limit,h=e.order===void 0?void 0:e.order,_=e.start===void 0?0:e.start,p=_+d,S=0;h==="desc"&&!l&&!f&&(S=Math.max(yF.statSync(s).size-(p+5)*die,0));let g=yF.createReadStream(s,{start:S});g.on("error",F=>{rie.error(F)});let R=0,E=[],T="",O;g.on("data",F=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=T+F;let j=0,te;for(;(te=q.exec(F))&&!g.destroyed;){O&&(O.message=F.slice(j,te.index),v(O));let[se,z,ne]=te,le=ne.split("] ["),ie=le[0],Re=le[1];le.splice(0,2),O={timestamp:z,thread:ie,level:Re,tags:le,message:""},j=te.index+se.length}T=F.slice(j)}),g.on("end",F=>{g.destroyed||O&&(O.message=T.trim(),v(O))}),g.resume();function v(F){let q,j,te;switch(!0){case(i&&c&&u):q=new Date(F.timestamp),j=new Date(l),te=new Date(f),F.level===o&&q>=j&&q<=te&&R<_?R++:F.level===o&&q>=j&&q<=te&&(Na(F,h,E),R++,R===p&&g.destroy());break;case(i&&c):q=new Date(F.timestamp),j=new Date(l),F.level===o&&q>=j&&R<_?R++:F.level===o&&q>=j&&(Na(F,h,E),R++,R===p&&g.destroy());break;case(i&&u):q=new Date(F.timestamp),te=new Date(f),F.level===o&&q<=te&&R<_?R++:F.level===o&&q<=te&&(Na(F,h,E),R++,R===p&&g.destroy());break;case(c&&u):q=new Date(F.timestamp),j=new Date(l),te=new Date(f),q>=j&&q<=te&&R<_?R++:q>=j&&q<=te&&(Na(F,h,E),R++,R===p&&g.destroy());break;case i:F.level===o&&R<_?R++:F.level===o&&(Na(F,h,E),R++,R===p&&g.destroy());break;case c:q=new Date(F.timestamp),j=new Date(l),q>=j&&R<_?R++:q>=j&&R>=_&&(Na(F,h,E),R++,R===p&&g.destroy());break;case u:q=new Date(F.timestamp),te=new Date(f),q<=te&&R<_?R++:q<=te&&R>=_&&(Na(F,h,E),R++,R===p&&g.destroy());break;default:R<_?R++:(Na(F,h,E),R++,R===p&&g.destroy())}}return a(v,"onLogMessage"),await iie(g,"close"),E}a(fie,"readLog");function Na(e,t,r){t==="desc"?_ie(e,r):t==="asc"?hie(e,r):r.push(e)}a(Na,"pushLineToResult");function _ie(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(_ie,"insertDescending");function hie(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(hie,"insertAscending")});var Sg=P((VIe,IF)=>{"use strict";var VO=require("joi"),{string:qu,boolean:OF,date:pie}=VO.types(),mie=nt(),{validateSchemaExists:FIe,validateTableExists:GIe,validateSchemaName:qIe}=Ri(),Eie=(G(),D($)),gie=Pt(),NF=ce();NF.initSync();var $Ie=qu.invalid(NF.get(Eie.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(gie.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),wF={operation:qu.valid("add_node","update_node","set_node_replication"),node_name:qu.optional(),subscriptions:VO.array().items({table:qu.optional(),schema:qu.optional(),database:qu.optional(),subscribe:OF.required(),publish:OF.required().custom(Tie),start_time:pie.iso()})};function Sie(e){return mie.validateBySchema(e,VO.object(wF))}a(Sie,"addUpdateNodeValidator");function Tie(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(Tie,"checkForFalsy");IF.exports={addUpdateNodeValidator:Sie,validation_schema:wF}});var $u=P((YIe,CF)=>{"use strict";var KO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},YO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};CF.exports={Node:KO,NodeSubscription:YO}});var DF=P((zIe,PF)=>{"use strict";var Aie=(G(),D($)).OPERATIONS_ENUM,WO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Aie.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};PF.exports=WO});var Q_=P((QIe,LF)=>{"use strict";var zO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},jO=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)}};LF.exports={RemotePayloadObject:zO,RemotePayloadSubscription:jO}});var vF=P((XIe,MF)=>{"use strict";var QO=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}};MF.exports=QO});var xF=P((sCe,UF)=>{"use strict";var Rie=vF(),eCe=Ft(),tCe=ht(),yie=X(),{getSchemaPath:rCe,getTransactionAuditStorePath:nCe}=gt(),{getDatabases:bie}=(Ue(),D(at));UF.exports=Oie;async function Oie(e){let t=new Rie;try{let r=bie()[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){yie.warn(`unable to stat table dbi due to ${r}`)}return t}a(Oie,"lmdbGetTableSize")});var HF=P((oCe,BF)=>{"use strict";var JO=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}};BF.exports=JO});var Ku=P((fCe,qF)=>{"use strict";var Nie=require("fs-extra"),wie=require("path"),jr=require("systeminformation"),wa=X(),kF=Er(),cCe=Pt(),Vu=(G(),D($)),Iie=xF(),Cie=uo(),{getThreadInfo:FF}=st(),J_=ce();J_.initSync();var Pie=HF(),{openEnvironment:lCe}=ht(),{getSchemaPath:uCe}=gt(),{database:dCe,databases:XO}=(Ue(),D(at)),Tg;qF.exports={getHDBProcessInfo:rN,getNetworkInfo:sN,getDiskInfo:nN,getMemoryInfo:tN,getCPUInfo:eN,getTimeInfo:ZO,getSystemInformation:iN,systemInformation:Die,getTableSize:oN,getMetrics:aN};function ZO(){return jr.time()}a(ZO,"getTimeInfo");async function eN(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...f}=await jr.cpu();f.cpu_speed=await jr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:h,raw_currentload_irq:_,raw_currentload_nice:p,raw_currentload_system:S,raw_currentload_user:g,cpus:R,...E}=await jr.currentLoad();return E.cpus=[],R.forEach(T=>{let{raw_load:O,raw_load_idle:v,raw_load_irq:F,raw_load_nice:q,raw_load_system:j,raw_load_user:te,...se}=T;E.cpus.push(se)}),f.current_load=E,f}catch(e){return wa.error(`error in getCPUInfo: ${e}`),{}}}a(eN,"getCPUInfo");async function tN(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await jr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return wa.error(`error in getMemoryInfo: ${e}`),{}}}a(tN,"getMemoryInfo");async function rN(){let e={core:[],clustering:[]};try{let t=await jr.processes(),r;try{r=Number.parseInt(await Nie.readFile(wie.join(J_.get(Vu.CONFIG_PARAMS.ROOTPATH),Vu.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Vu.NODE_ERROR_CODES.ENOENT)wa.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return wa.error(`error in getHDBProcessInfo: ${t}`),e}}a(rN,"getHDBProcessInfo");async function nN(){let e={};try{if(!J_.get(Vu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await jr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await jr.fsStats();return e.read_write=u,e.size=await jr.fsSize(),e}catch(t){return wa.error(`error in getDiskInfo: ${t}`),e}}a(nN,"getDiskInfo");async function sN(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return J_.get(Vu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await jr.networkInterfaceDefault(),e.latency=await jr.inetChecksite("google.com"),(await jr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:f,carrier_changes:d,...h}=n;e.interfaces.push(h)}),(await jr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return wa.error(`error in getNetworkInfo: ${t}`),e}}a(sN,"getNetworkInfo");async function iN(){if(Tg!==void 0)return Tg;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await jr.osInfo();e=c;let l=await jr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,Tg=e,Tg}catch(t){return wa.error(`error in getSystemInformation: ${t}`),e}}a(iN,"getSystemInformation");async function oN(){let e=[],t=await Cie.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Iie(n));return e}a(oN,"getTableSize");async function aN(){let e={};for(let t in XO){let r=e[t]={},n=r.tables={};for(let s in XO[t])try{let i=XO[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,f,d]=l.trim().split(" ");return{pid:u,thread:f,txnid:d}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){wa.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(aN,"getMetrics");async function GF(){if(J_.get(Vu.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await kF.getNATSReferences(),t=await kF.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(GF,"getNatsStreamInfo");async function Die(e){let t=new Pie;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await iN(),t.time=ZO(),t.cpu=await eN(),t.memory=await tN(),t.disk=await nN(),t.network=await sN(),t.harperdb_processes=await rN(),t.table_size=await oN(),t.metrics=await aN(),t.threads=await FF(),t.replication=await GF(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await iN();break;case"time":t.time=ZO();break;case"cpu":t.cpu=await eN();break;case"memory":t.memory=await tN();break;case"disk":t.disk=await nN();break;case"network":t.network=await sN();break;case"harperdb_processes":t.harperdb_processes=await rN();break;case"table_size":t.table_size=await oN();break;case"database_metrics":case"metrics":t.metrics=await aN();break;case"threads":t.threads=await FF();break;case"replication":t.replication=await GF();break;default:break}return t}a(Die,"systemInformation")});var Ao=P((ECe,YF)=>{"use strict";var Lie=gn(),cN=oe(),Mie=require("util"),al=(G(),D($)),$F=ce();$F.initSync();var vie=Gb(),VF=Vr(),{Node:hCe,NodeSubscription:pCe}=$u(),Uie=_u(),xie=DF(),{RemotePayloadObject:Bie,RemotePayloadSubscription:Hie}=Q_(),{handleHDBError:kie,hdb_errors:Fie}=he(),{HTTP_STATUS_CODES:Gie,HDB_ERROR_MSGS:qie}=Fie,$ie=Ys(),Vie=Ku(),{packageJson:Kie}=Et(),{getDatabases:Yie}=(Ue(),D(at)),mCe=Mie.promisify(vie.authorize),Wie=VF.searchByHash,zie=VF.searchByValue;YF.exports={isEmpty:jie,getNodeRecord:Qie,upsertNodeRecord:Jie,buildNodePayloads:Xie,checkClusteringEnabled:Zie,getAllNodeRecords:eoe,getSystemInfo:toe,reverseSubscription:KF};function jie(e){return e==null}a(jie,"isEmpty");async function Qie(e){let t=new Uie(al.SYSTEM_SCHEMA_NAME,al.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Wie(t)}a(Qie,"getNodeRecord");async function Jie(e){let t=new xie(al.SYSTEM_SCHEMA_NAME,al.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Lie.upsert(t)}a(Jie,"upsertNodeRecord");function KF(e){if(cN.isEmpty(e.subscribe)||cN.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(KF,"reverseSubscription");function Xie(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,f=cN.getTableHashAttribute(l,u),{subscribe:d,publish:h}=KF(c),_=Yie()[l]?.[u],p=new Hie(l,u,f,h,d,c.start_time,_.schemaDefined?_.attributes:void 0);s.push(p)}return new Bie(r,t,s,n)}a(Xie,"buildNodePayloads");function Zie(){if(!$F.get(al.CONFIG_PARAMS.CLUSTERING_ENABLED))throw kie(new Error,qie.CLUSTERING_NOT_ENABLED,Gie.BAD_REQUEST,void 0,void 0,!0)}a(Zie,"checkClusteringEnabled");async function eoe(){let e=new $ie(al.SYSTEM_SCHEMA_NAME,al.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await zie(e))}a(eoe,"getAllNodeRecords");async function toe(){let e=await Vie.getSystemInformation();return{hdb_version:Kie.version,node_version:e.node_version,platform:e.platform}}a(toe,"getSystemInfo")});var lN=P((SCe,eG)=>{"use strict";var Ag=Er(),WF=oe(),zF=Pt(),jF=(G(),D($)),Rg=X(),QF=pg(),roe=l_(),{RemotePayloadObject:noe}=Q_(),{handleHDBError:JF,hdb_errors:soe}=he(),{HTTP_STATUS_CODES:XF}=soe,{NodeSubscription:ZF}=$u();eG.exports=ioe;async function ioe(e,t){let r;try{r=await Ag.request(`${t}.${zF.REQUEST_SUFFIX}`,new noe(jF.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Rg.trace("Response from remote describe all request:",r)}catch(o){Rg.error(`addNode received error from describe all request to remote node: ${o}`);let c=Ag.requestErrorHandler(o,"add_node",t);throw JF(new Error,c,XF.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===zF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw JF(new Error,o,XF.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===jF.SYSTEM_SCHEMA_NAME){await Ag.createLocalTableStream(l,c);let p=new ZF(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p);continue}let u=WF.doesSchemaExist(l),f=n[l]!==void 0,d=c?WF.doesTableExist(l,c):!0,h=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!f||!d&&!h){s.push(o);continue}if(!u&&f&&(Rg.trace(`addNode creating schema: ${l}`),await QF.createSchema({operation:"create_schema",schema:l})),!d&&h){Rg.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new roe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await QF.createTable(p)}await Ag.createLocalTableStream(l,c);let _=new ZF(l,c,o.publish,o.subscribe);_.start_time=o.start_time,i.push(_)}return{added:i,skipped:s}}a(ioe,"reviewSubscriptions")});var cl={};Be(cl,{addNodeBack:()=>uoe,removeNodeBack:()=>doe,setNode:()=>loe});async function loe(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=Qs(t)):t=ug(r);let n=(0,rG.validateBySchema)(e,coe);if(n)throw(0,Ro.handleHDBError)(n,n.message,aoe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Ro.ClientError("url or hostname is required for remove_node operation");let _=r,p=sr(),S=await p.get(_);if(!S)throw new Ro.ClientError(_+" does not exist");try{await Y_({url:S.url},{operation:Yt.REMOVE_NODE_BACK,name:S?.subscriptions?.length>0?tt():_},void 0)}catch(g){zn.warn(`Error removing node from target node ${_}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await p.delete(_),`Successfully removed '${_}' from cluster`}if(!t)throw new Ro.ClientError("url required for this operation");let s=ma();if(s==null)throw new Ro.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,gs.getReplicationCert)();let _=await(0,gs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,gs.createCsr)(),zn.info("Sending CSR to target node:",t)):_&&(c=_.certificate,zn.info("Sending CA named",_.name,"to target node",t))}let l={operation:Yt.ADD_NODE_BACK,hostname:(0,Ca.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Ca.get)(B.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Ca.get)(B.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(tG):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let _=tG(e);l.subscribe=_.subscribe,l.publish=_.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,f;try{u=await Y_({url:t},l,e)}catch(_){_.message=`Error returned from ${t}: `+_.message,zn.warn("Error adding node:",t,"to cluster:",_),f=_}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw f?(f.message+=" and connection was required to sign certificate",f):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(zn.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,gs.setCertTable)({name:ooe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,gs.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 d={url:t,ca:u?.usingCA};if(e.hostname&&(d.name=e.hostname),e.subscriptions?d.subscriptions=e.subscriptions:d.replicates=!0,e.start_time&&(d.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(d.authorization=e.authorization),e.revoked_certificates&&(d.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?d.shard=u.shard:e.shard!==void 0&&(d.shard=e.shard),d.replicates){let _={url:s,ca:c,replicates:!0,subscriptions:null};(0,Ca.get)(B.REPLICATION_SHARD)!==void 0&&(_.shard=(0,Ca.get)(B.REPLICATION_SHARD)),e.retain_authorization&&(_.authorization=e.authorization),e.start_time&&(_.start_time=e.start_time),await Eo(tt(),_)}await Eo(u?u.nodeName:d.name??Qs(t),d);let h;return e.operation==="update_node"?h=`Successfully updated '${t}'`:h=`Successfully added '${t}' to cluster`,f&&(h+=" but there was an error updating target node: "+f.message),h}async function uoe(e){zn.trace("addNodeBack received request:",e);let t=await(0,gs.signCertificate)(e),r;e.csr?(r=t.signingCA,zn.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,zn.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,gs.getReplicationCertAuth)();if(n.replicates){let i={url:ma(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Ca.get)(B.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Ca.get)(B.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Eo(tt(),i)}return await Eo(e.hostname,n),t.nodeName=tt(),t.usingCA=s?.certificate,zn.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function doe(e){zn.trace("removeNodeBack received request:",e),await sr().delete(e.name)}function tG(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var gs,rG,Ia,Ca,zn,Ro,ooe,aoe,coe,ll=be(()=>{gs=M(Zs()),rG=M(nt()),Ia=M(require("joi")),Ca=M(ce());G();F_();Xc();ps();zn=M(X()),Ro=M(he()),{pki:ooe}=require("node-forge"),{HTTP_STATUS_CODES:aoe}=Ro.hdb_errors,coe=Ia.default.object({hostname:Ia.default.string(),verify_tls:Ia.default.boolean(),replicates:Ia.default.boolean(),subscriptions:Ia.default.array(),revoked_certificates:Ia.default.array(),shard:Ia.default.number()});a(loe,"setNode");a(uoe,"addNodeBack");a(doe,"removeNodeBack");a(tG,"reverseSubscription")});var wg=P((ICe,sG)=>{"use strict";var{handleHDBError:yg,hdb_errors:foe}=he(),{HTTP_STATUS_CODES:bg}=foe,{addUpdateNodeValidator:_oe}=Sg(),Og=X(),Ng=(G(),D($)),nG=Pt(),hoe=oe(),X_=Er(),Z_=Ao(),uN=ce(),poe=lN(),{Node:moe,NodeSubscription:Eoe}=$u(),{broadcast:goe}=st(),{setNode:Soe}=(ll(),D(cl)),NCe=ce(),wCe=(G(),D($)),Toe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Aoe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Roe=uN.get(Ng.CONFIG_PARAMS.CLUSTERING_NODENAME);sG.exports=yoe;async function yoe(e,t=!1){if(Og.trace("addNode called with:",e),uN.get(Ng.CONFIG_PARAMS.REPLICATION_URL)||uN.get(Ng.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Soe(e);Z_.checkClusteringEnabled();let r=_oe(e);if(r)throw yg(r,r.message,bg.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Z_.getNodeRecord(n);if(!hoe.isEmptyOrZeroLength(d))throw yg(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,bg.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await poe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Toe,o;let c=Z_.buildNodePayloads(s,Roe,Ng.OPERATIONS_ENUM.ADD_NODE,await Z_.getSystemInfo()),l=[];for(let d=0,h=s.length;d<h;d++){let _=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new Eoe(_.schema,_.table,_.publish,_.subscribe))}Og.trace("addNode sending remote payload:",c);let u;try{u=await X_.request(`${n}.${nG.REQUEST_SUFFIX}`,c)}catch(d){Og.error(`addNode received error from request: ${d}`);for(let _=0,p=s.length;_<p;_++){let S=s[_];S.publish=!1,S.subscribe=!1,await X_.updateRemoteConsumer(S,n)}let h=X_.requestErrorHandler(d,"add_node",n);throw yg(new Error,h,bg.INTERNAL_SERVER_ERROR,"error",h)}if(u.status===nG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw yg(new Error,d,bg.INTERNAL_SERVER_ERROR,"error",d)}Og.trace(u);for(let d=0,h=s.length;d<h;d++){let _=s[d];await X_.updateRemoteConsumer(_,n),_.subscribe===!0&&await X_.updateConsumerIterator(_.schema,_.table,n,"start")}let f=new moe(n,l,u.system_info);return await Z_.upsertNodeRecord(f),goe({type:"nats_update"}),i.length>0?o.message=Aoe:o.message=`Successfully added '${n}' to manifest`,o}a(yoe,"addNode")});var hN=P((DCe,oG)=>{"use strict";var{handleHDBError:dN,hdb_errors:boe}=he(),{HTTP_STATUS_CODES:fN}=boe,{addUpdateNodeValidator:Ooe}=Sg(),eh=X(),Ig=(G(),D($)),iG=Pt(),PCe=oe(),th=Er(),rh=Ao(),_N=ce(),{cloneDeep:Noe}=require("lodash"),woe=lN(),{Node:Ioe,NodeSubscription:Coe}=$u(),{broadcast:Poe}=st(),{setNode:Doe}=(ll(),D(cl)),Loe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Moe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",voe=_N.get(Ig.CONFIG_PARAMS.CLUSTERING_NODENAME);oG.exports=Uoe;async function Uoe(e){if(eh.trace("updateNode called with:",e),_N.get(Ig.CONFIG_PARAMS.REPLICATION_URL)??_N.get(Ig.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Doe(e);rh.checkClusteringEnabled();let t=Ooe(e);if(t)throw dN(t,t.message,fN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await rh.getNodeRecord(r);s.length>0&&(n=Noe(s));let{added:i,skipped:o}=await woe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Loe,c;let l=rh.buildNodePayloads(i,voe,Ig.OPERATIONS_ENUM.UPDATE_NODE,await rh.getSystemInfo());for(let f=0,d=i.length;f<d;f++){let h=i[f];eh.trace(`updateNode updating work stream for node: ${r} subscription:`,h),i[f].start_time===void 0&&delete i[f].start_time}eh.trace("updateNode sending remote payload:",l);let u;try{u=await th.request(`${r}.${iG.REQUEST_SUFFIX}`,l)}catch(f){eh.error(`updateNode received error from request: ${f}`);let d=th.requestErrorHandler(f,"update_node",r);throw dN(new Error,d,fN.INTERNAL_SERVER_ERROR,"error",d)}if(u.status===iG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${r}: ${u.message}`;throw dN(new Error,f,fN.INTERNAL_SERVER_ERROR,"error",f)}eh.trace(u);for(let f=0,d=i.length;f<d;f++){let h=i[f];await th.updateRemoteConsumer(h,r),h.subscribe===!0?await th.updateConsumerIterator(h.schema,h.table,r,"start"):await th.updateConsumerIterator(h.schema,h.table,r,"stop")}return n||(n=[new Ioe(r,[],u.system_info)]),await xoe(n[0],i,u.system_info),o.length>0?c.message=Moe:c.message=`Successfully updated '${r}'`,c}a(Uoe,"updateNode");async function xoe(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 f=n.subscriptions[l];if(f.schema===o.schema&&f.table===o.table){f.publish=o.publish,f.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Coe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await rh.upsertNodeRecord(n),Poe({type:"nats_update"})}a(xoe,"updateNodeTable")});var dG=P((MCe,uG)=>{"use strict";var lG=require("joi"),{string:aG}=lG.types(),Boe=nt(),cG=(G(),D($)),Hoe=ce(),koe=Pt();uG.exports=Foe;function Foe(e){let t=aG.invalid(Hoe.get(cG.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(koe.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=lG.object({operation:aG.valid(cG.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Boe.validateBySchema(e,r)}a(Foe,"removeNodeValidator")});var Cg=P((UCe,mG)=>{"use strict";var{handleHDBError:fG,hdb_errors:Goe}=he(),{HTTP_STATUS_CODES:_G}=Goe,qoe=dG(),nh=X(),hG=Ao(),$oe=oe(),Yu=(G(),D($)),pG=Pt(),pN=Er(),mN=ce(),{RemotePayloadObject:Voe}=Q_(),{NodeSubscription:Koe}=$u(),Yoe=c_(),Woe=Uc(),{broadcast:zoe}=st(),{setNode:joe}=(ll(),D(cl)),Qoe=mN.get(Yu.CONFIG_PARAMS.CLUSTERING_NODENAME);mG.exports=Joe;async function Joe(e){if(nh.trace("removeNode called with:",e),mN.get(Yu.CONFIG_PARAMS.REPLICATION_URL)??mN.get(Yu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return joe(e);hG.checkClusteringEnabled();let t=qoe(e);if(t)throw fG(t,t.message,_G.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await hG.getNodeRecord(r);if($oe.isEmptyOrZeroLength(n))throw fG(new Error,`Node '${r}' was not found.`,_G.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Voe(Yu.OPERATIONS_ENUM.REMOVE_NODE,Qoe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let f=n.subscriptions[l];f.subscribe===!0&&await pN.updateConsumerIterator(f.schema,f.table,r,"stop");try{await pN.updateRemoteConsumer(new Koe(f.schema,f.table,!1,!1),r)}catch(d){nh.error(d)}}try{i=await pN.request(`${r}.${pG.REQUEST_SUFFIX}`,s),nh.trace("Remove node reply from remote node:",r,i)}catch(l){nh.error("removeNode received error from request:",l),o=!0}let c=new Yoe(Yu.SYSTEM_SCHEMA_NAME,Yu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Woe.deleteRecord(c),zoe({type:"nats_update"}),i?.status===pG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(nh.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(Joe,"removeNode")});var SG=P((BCe,gG)=>{"use strict";var EG=require("joi"),{string:Xoe,array:Zoe}=EG.types(),eae=nt(),tae=Sg();gG.exports=rae;function rae(e){let t=EG.object({operation:Xoe.valid("configure_cluster").required(),connections:Zoe.items(tae.validation_schema).required()});return eae.validateBySchema(e,t)}a(rae,"configureClusterValidator")});var EN=P((kCe,bG)=>{"use strict";var TG=(G(),D($)),Pg=X(),nae=oe(),sae=ce(),iae=Cg(),oae=wg(),aae=Ao(),cae=SG(),{handleHDBError:AG,hdb_errors:lae}=he(),{HTTP_STATUS_CODES:RG}=lae,uae="Configure cluster complete.",dae="Failed to configure the cluster. Check the logs for more details.",fae="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";bG.exports=_ae;async function _ae(e){Pg.trace("configure cluster called with:",e);let t=cae(e);if(t)throw AG(t,t.message,RG.BAD_REQUEST,void 0,void 0,!0);let r=await aae.getAllNodeRecords(),n=[];if(sae.get(TG.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let f=0,d=r.length;f<d;f++){let h=await yG(iae,{operation:TG.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name);n.push(h)}Pg.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let f=0;f<i;f++){let d=e.connections[f],h=await yG(oae,d,d.node_name);s.push(h)}Pg.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let f=0,d=u.length;f<d;f++){let h=u[f];h.status==="rejected"&&(Pg.error(h.node_name,h?.error?.message,h?.error?.stack),o.includes(h.node_name)||o.push(h.node_name)),(h?.result?.message?.includes?.("Successfully")||h?.result?.includes?.("Successfully"))&&(l=!0),!(typeof h.result=="string"&&h.result.includes("Successfully removed")||h.status==="rejected")&&c.push({node_name:h?.node_name,response:h?.result})}if(nae.isEmptyOrZeroLength(o))return{message:uae,connections:c};if(l)return{message:fae,failed_nodes:o,connections:c};throw AG(new Error,dae,RG.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(_ae,"configureCluster");async function yG(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(yG,"functionWrapper")});var IG=P((GCe,wG)=>{"use strict";var sh=require("joi"),hae=nt(),{validateSchemaExists:OG,validateTableExists:pae,validateSchemaName:NG}=Ri(),mae=sh.object({operation:sh.string().valid("purge_stream"),schema:sh.string().custom(OG).custom(NG).optional(),database:sh.string().custom(OG).custom(NG).optional(),table:sh.string().custom(pae).required()});function Eae(e){return hae.validateBySchema(e,mae)}a(Eae,"purgeStreamValidator");wG.exports=Eae});var gN=P(($Ce,CG)=>{"use strict";var{handleHDBError:gae,hdb_errors:Sae}=he(),{HTTP_STATUS_CODES:Tae}=Sae,Aae=IG(),Rae=Er(),yae=Ao();CG.exports=bae;async function bae(e){e.schema=e.schema??e.database;let t=Aae(e);if(t)throw gae(t,t.message,Tae.BAD_REQUEST,void 0,void 0,!0);yae.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Rae.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(bae,"purgeStream")});var AN=P((KCe,xG)=>{"use strict";var TN=Ao(),Oae=Er(),Lg=ce(),Wu=(G(),D($)),ul=Pt(),Nae=oe(),SN=X(),{RemotePayloadObject:wae}=Q_(),{ErrorCode:PG}=require("nats"),{parentPort:DG}=require("worker_threads"),{onMessageByType:Iae}=st(),{getThisNodeName:Cae}=(ps(),D(Aa)),{requestClusterStatus:Pae}=(F_(),D(ZH)),{getReplicationSharedStatus:Dae,getHDBNodeTable:Lae}=(Xc(),D(lO)),{CONFIRMATION_STATUS_POSITION:Mae,RECEIVED_VERSION_POSITION:vae,RECEIVED_TIME_POSITION:Uae,SENDING_TIME_POSITION:xae,RECEIVING_STATUS_POSITION:Bae,RECEIVING_STATUS_RECEIVING:Hae}=(MO(),D(Vk)),LG=Lg.get(Wu.CONFIG_PARAMS.CLUSTERING_ENABLED),MG=Lg.get(Wu.CONFIG_PARAMS.CLUSTERING_NODENAME);xG.exports={clusterStatus:kae,buildNodeStatus:UG};var vG;Iae("cluster-status",async e=>{vG(e)});async function kae(){if(Lg.get(Wu.CONFIG_PARAMS.REPLICATION_URL)||Lg.get(Wu.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(DG){DG.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{vG=i});for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let d of Object.values(databases[l]||{}))if(u=d.auditStore,u)break;if(!u)continue;let f=Dae(u,l,o);c.lastCommitConfirmed=Dg(f[Mae]),c.lastReceivedRemoteTime=Dg(f[vae]),c.lastReceivedLocalTime=Dg(f[Uae]),c.sendingMessage=Dg(f[xae]),c.lastReceivedStatus=f[Bae]===Hae?"Receiving":"Waiting"}}}else n=Pae();n.node_name=Cae();let s=Lae().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:MG,is_enabled:LG,connections:[]};if(!LG)return e;let t=await TN.getAllNodeRecords();if(Nae.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(UG(t[n],e.connections));return await Promise.allSettled(r),e}a(kae,"clusterStatus");function Dg(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(Dg,"asDate");async function UG(e,t){let r=e.name,n=new wae(Wu.OPERATIONS_ENUM.CLUSTER_STATUS,MG,void 0,await TN.getSystemInfo()),s,i,o=ul.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Oae.request(ul.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ul.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ul.CLUSTER_STATUS_STATUSES.CLOSED,SN.error(`Error getting node status from ${r} `,s))}catch(l){SN.warn(`Error getting node status from ${r}`,l),l.code===PG.NoResponders?o=ul.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===PG.Timeout?o=ul.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ul.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Fae(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Wu.PRE_4_0_0_VERSION&&await TN.upsertNodeRecord(l)}catch(l){SN.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(UG,"buildNodeStatus");function Fae(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(Fae,"NodeStatusObject")});var yN=P((WCe,BG)=>{"use strict";var{handleHDBError:Gae,hdb_errors:qae}=he(),{HTTP_STATUS_CODES:$ae}=qae,Vae=Er(),Kae=Ao(),RN=oe(),Mg=require("joi"),Yae=nt(),Wae=2e3,zae=Mg.object({timeout:Mg.number().min(1),connected_nodes:Mg.boolean(),routes:Mg.boolean()});BG.exports=jae;async function jae(e){Kae.checkClusteringEnabled();let t=Yae.validateBySchema(e,zae);if(t)throw Gae(t,t.message,$ae.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||RN.autoCastBoolean(n),o=s===void 0||RN.autoCastBoolean(s),c={nodes:[]},l=await Vae.getServerList(r??Wae),u={};if(i)for(let f=0,d=l.length;f<d;f++){let h=l[f].statsz;h&&(u[l[f].server.name]=h.routes)}for(let f=0,d=l.length;f<d;f++){if(l[f].statsz)continue;let h=l[f].server,_=l[f].data;if(h.name.endsWith("-hub")){let p={name:h.name.slice(0,-4),response_time:l[f].response_time};i&&(p.connected_nodes=[],u[h.name]&&u[h.name].forEach(S=>{p.connected_nodes.includes(S.name.slice(0,-4))||p.connected_nodes.push(S.name.slice(0,-4))})),o&&(p.routes=_.cluster?.urls?_.cluster?.urls.map(S=>({host:S.split(":")[0],port:RN.autoCast(S.split(":")[1])})):[]),c.nodes.push(p)}}return c}a(jae,"clusterNetwork")});var GG=P((jCe,FG)=>{"use strict";var bN=require("joi"),HG=nt(),{route_constraints:kG}=TA();FG.exports={setRoutesValidator:Qae,deleteRoutesValidator:Jae};function Qae(e){let t=bN.object({server:bN.valid("hub","leaf"),routes:kG.required()});return HG.validateBySchema(e,t)}a(Qae,"setRoutesValidator");function Jae(e){let t=bN.object({routes:kG.required()});return HG.validateBySchema(e,t)}a(Jae,"deleteRoutesValidator")});var vg=P((JCe,zG)=>{"use strict";var yo=wt(),ON=oe(),Ss=(G(),D($)),zu=ce(),qG=GG(),{handleHDBError:$G,hdb_errors:Xae}=he(),{HTTP_STATUS_CODES:VG}=Xae,KG="cluster routes successfully set",YG="cluster routes successfully deleted";zG.exports={setRoutes:ece,getRoutes:tce,deleteRoutes:rce};function Zae(e){let t=yo.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=ON.autoCast(l.port);let u=r.some(d=>d.host===l.host&&d.port===l.port),f=n.some(d=>d.host===l.host&&d.port===l.port);u||f?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?yo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):yo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:KG,set:i,skipped:s}}a(Zae,"setRoutesNats");function ece(e){let t=qG.setRoutesValidator(e);if(t)throw $G(t,t.message,VG.BAD_REQUEST,void 0,void 0,!0);if(zu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED))return Zae(e);let r=[],n=[],s=zu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{WG(s,i)?n.push(i):(s.push(i),r.push(i))}),yo.updateConfigValue(Ss.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:KG,set:r,skipped:n}}a(ece,"setRoutes");function WG(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(WG,"existsInArray");function tce(){if(zu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=yo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return zu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(tce,"getRoutes");function rce(e){let t=qG.deleteRoutesValidator(e);if(t)throw $G(t,t.message,VG.BAD_REQUEST,void 0,void 0,!0);if(zu.get(Ss.CONFIG_PARAMS.CLUSTERING_ENABLED))return nce(e);let r=[],n=[],s=zu.get(Ss.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{WG(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),yo.updateConfigValue(Ss.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:YG,deleted:r,skipped:n}}a(rce,"deleteRoutes");function nce(e){let t=yo.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 f=e.routes[l],d=!1;for(let h=0,_=r.length;h<_;h++){let p=r[h];if(f.host===p.host&&f.port===p.port){r.splice(h,1),d=!0,o=!0,s.push(f);break}}if(!d){let h=!0;for(let _=0,p=n.length;_<p;_++){let S=n[_];if(f.host===S.host&&f.port===S.port){n.splice(_,1),c=!0,h=!1,s.push(f);break}}h&&i.push(f)}}return o&&(r=ON.isEmptyOrZeroLength(r)?null:r,yo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=ON.isEmptyOrZeroLength(n)?null:n,yo.updateConfigValue(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:YG,deleted:s,skipped:i}}a(nce,"deleteRoutesNats")});var QG=P((ZCe,jG)=>{"use strict";var ih=require("alasql"),dl=require("recursive-iterator"),ei=X(),sce=oe(),oh=(G(),D($)),NN=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,oce(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=>oh.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=>!oh.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][oh.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=ice(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=>!oh.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let f=new ih.yy.Column({columnid:u});s.tableid&&(f.tableid=s.tableid),this.ast.columns.push(f),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function ice(e){return e.filter(t=>t[oh.PERMS_CRUD_ENUM.READ])}a(ice,"filterReadRestrictedAttrs");function oce(e,t,r,n,s){ace(e,t,r,n,s)}a(oce,"interpretAST");function ah(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(ah,"addSchemaTableToMap");function ace(e,t,r,n,s){if(!e){ei.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ih.yy.Insert?dce(e,t,r):e instanceof ih.yy.Select?cce(e,t,r,n,s):e instanceof ih.yy.Update?lce(e,t,r):e instanceof ih.yy.Delete?uce(e,t,r):ei.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(ace,"getRecordAttributesAST");function cce(e,t,r,n,s){if(!e){ei.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(sce.isEmptyOrZeroLength(i)){ei.error("No schema specified");return}e.from.forEach(c=>{ah(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ah(c.table,t,r,n,s)});let o=new dl(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{ei.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new dl(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let f=u.tableid?u.tableid:l;if(!t.get(i).has(f))if(r.has(f))f=r.get(f);else{ei.info(`table specified as ${f} not found.`);continue}t.get(i).get(f).indexOf(u.columnid)<0&&t.get(i).get(f).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new dl(c.on);for(let{node:u}of l)if(u&&u.columnid){let f=u.tableid,d=s.get(f);if(!t.get(d).has(f))if(r.has(f))f=r.get(f);else{ei.info(`table specified as ${f} not found.`);continue}t.get(d).get(f).indexOf(u.columnid)<0&&t.get(d).get(f).push(u.columnid)}}),e.order){let c=new dl(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,f=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(f).has(u))if(r.has(u))u=r.get(u);else{ei.info(`table specified as ${u} not found.`);return}t.get(f).get(u).indexOf(l.columnid)<0&&t.get(f).get(u).push(l.columnid)}}}a(cce,"getSelectAttributes");function lce(e,t,r){if(!e){ei.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new dl(e.columns),s=e.table.databaseid;ah(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wN(e.table.tableid,s,i.columnid,t,r)}a(lce,"getUpdateAttributes");function uce(e,t,r){if(!e){ei.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new dl(e.where),s=e.table.databaseid;ah(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wN(e.table.tableid,s,i.columnid,t,r)}a(uce,"getDeleteAttributes");function dce(e,t,r){if(!e){ei.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new dl(e.columns),s=e.into.databaseid;ah(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&wN(e.into.tableid,s,i.columnid,t,r)}a(dce,"getInsertAttributes");function wN(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(wN,"pushAttribute");jG.exports=NN});var XG=P((tPe,JG)=>{"use strict";var Ug=(G(),D($)),xg=class{static{a(this,"BaseLicense")}constructor(t=0,r=Ug.RAM_ALLOCATION_ENUM.DEFAULT,n=Ug.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},IN=class extends xg{static{a(this,"ExtendedLicense")}constructor(t=0,r=Ug.RAM_ALLOCATION_ENUM.DEFAULT,n=Ug.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};JG.exports={BaseLicense:xg,ExtendedLicense:IN}});var Ju=P((nPe,sq)=>{"use strict";var Qu=require("fs-extra"),Bg=(Fm(),D(km)),eq=require("crypto"),fce=require("moment"),_ce=require("uuid").v4,Qr=X(),PN=require("path"),hce=oe(),fl=(G(),D($)),{totalmem:ZG}=require("os"),pce=XG().ExtendedLicense,ju="invalid license key format",mce="061183",Ece="mofi25",gce="aes-256-cbc",Sce=16,Tce=32,tq=ce(),{resolvePath:rq}=wt();tq.initSync();var CN;sq.exports={validateLicense:nq,generateFingerPrint:Rce,licenseSearch:MN,getLicense:Oce,checkMemoryLimit:Nce};function DN(){return PN.join(tq.getHdbBasePath(),fl.LICENSE_KEY_DIR_NAME,fl.LICENSE_FILE_NAME)}a(DN,"getLicenseDirPath");function Ace(){let e=DN();return rq(PN.join(e,fl.LICENSE_FILE_NAME))}a(Ace,"getLicenseFilePath");function LN(){let e=DN();return rq(PN.join(e,fl.REG_KEY_FILE_NAME))}a(LN,"getFingerPrintFilePath");async function Rce(){let e=LN();try{return await Qu.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await yce();throw Qr.error(`Error writing fingerprint file to ${e}`),Qr.error(t),new Error("There was an error generating the fingerprint")}}a(Rce,"generateFingerPrint");async function yce(){let e=_ce(),t=Bg.hash(e,Bg.HASH_FUNCTION.MD5),r=LN();try{await Qu.mkdirp(DN()),await Qu.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Qr.error(`Error writing fingerprint file to ${r}`),Qr.error(n),new Error("There was an error generating the fingerprint")}return t}a(yce,"writeFingerprint");function nq(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:fl.RAM_ALLOCATION_ENUM.DEFAULT,version:fl.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Qr.error("empty license key passed to validate."),r;let n=LN(),s=!1;try{s=Qu.statSync(n)}catch(i){Qr.error(i)}if(s){let i;try{i=Qu.readFileSync(n,"utf8")}catch{Qr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Ece),c=o[1];c=Buffer.concat([Buffer.from(c)],Sce);let l=Buffer.concat([Buffer.from(i)],Tce),u=eq.createDecipheriv(gce,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let f=null;try{f=u.update(o[0],"hex","utf8"),f.trim(),f+=u.final("utf8")}catch{let _=bce(o[0],i);if(_)f=_;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ju),Qr.error(ju),new Error(ju)}let d;if(isNaN(f))try{d=JSON.parse(f),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(ju),Qr.error(ju),new Error(ju)}else r.exp_date=f;r.exp_date<fce().valueOf()&&(r.valid_date=!1),Bg.validate(o[1],`${mce}${i}${t}`,Bg.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Qr.error("Invalid licence"),r}a(nq,"validateLicense");function bce(e,t){try{let r=eq.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Qr.warn("Check old license failed")}}a(bce,"checkOldLicense");function MN(){let e=new pce,t=[];try{t=Qu.readFileSync(Ace(),"utf-8").split(`\r
24
+ `)}catch(r){r.code==="ENOENT"?Qr.debug("no license file found"):Qr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(hce.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=nq(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){Qr.error("There was an error parsing the license string."),Qr.error(s),e.ram_allocation=fl.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return CN=e,e}a(MN,"licenseSearch");async function Oce(){return CN||await MN(),CN}a(Oce,"getLicense");function Nce(){let e=MN().ram_allocation,t=process.constrainedMemory?.()||ZG();if(t=Math.round(Math.min(t,ZG())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(Nce,"checkMemoryLimit")});var xN=P((iPe,cq)=>{var Hg=Ju(),iq=require("chalk"),jn=X(),oq=require("prompt"),{promisify:wce}=require("util"),vN=(G(),D($)),Ice=require("fs-extra"),Cce=require("path"),Pce=oe(),{packageJson:Dce}=Et(),aq=ce();aq.initSync();var Lce=require("moment"),Mce=wce(oq.get),vce=Cce.join(aq.getHdbBasePath(),vN.LICENSE_KEY_DIR_NAME,vN.LICENSE_FILE_NAME,vN.LICENSE_FILE_NAME);cq.exports={getFingerprint:xce,setLicense:Uce,parseLicense:UN,register:Bce,getRegistrationInfo:kce};async function Uce(e){if(e&&e.key&&e.company){try{jn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await UN(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw jn.error(r),jn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Uce,"setLicense");async function xce(){let e={};try{e=await Hg.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw jn.error(r),jn.error(t),new Error(r)}return e}a(xce,"getFingerprint");async function UN(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");jn.info("Validating license input...");let r=Hg.validateLicense(e,t);if(jn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(jn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(jn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{jn.info("writing license to disk"),await Ice.writeFile(vce,JSON.stringify({license_key:e,company:t}))}catch(n){throw jn.error("Failed to write License"),n}return"Registration successful."}a(UN,"parseLicense");async function Bce(){let e=await Hce();return UN(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Bce,"register");async function Hce(){let e=await Hg.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:iq.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:iq.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{oq.start()}catch(n){jn.error(n)}let r;try{r=await Mce(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Hce,"promptForRegistration");async function kce(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Hg.getLicense()}catch(r){throw jn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Pce.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Dce.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Lce.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(kce,"getRegistrationInfo")});var uq=P((aPe,lq)=>{"use strict";var Fce=Pt(),BN=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d,h,_,p){this.port=t,o===null&&(o=void 0),this.server_name=r+Fce.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:f,port:d,routes:h,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:_},HDB:{users:p}},this.system_account="SYS"}};lq.exports=BN});var _q=P((lPe,fq)=>{"use strict";var dq=Pt(),HN=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d){this.port=t,d===null&&(d=void 0),this.server_name=r+dq.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+dq.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:f,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};fq.exports=HN});var pq=P((dPe,hq)=>{"use strict";var kN=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};hq.exports=kN});var Eq=P((_Pe,mq)=>{"use strict";var Gce=Pt(),FN=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Gce.SERVER_SUFFIX.ADMIN,this.password=r}};mq.exports=FN});var qg=P((pPe,Tq)=>{"use strict";var _l=require("path"),hl=require("fs-extra"),qce=uq(),$ce=_q(),Vce=pq(),Kce=Eq(),GN=Gn(),Zu=oe(),Rn=wt(),Fg=(G(),D($)),ch=Pt(),{CONFIG_PARAMS:Qt}=Fg,ed=X(),lh=ce(),gq=lo(),qN=Er(),Yce=Zs(),Xu="clustering",Wce=1e4,Sq=50;Tq.exports={generateNatsConfig:jce,removeNatsConfig:Qce,getHubConfigPath:zce};function zce(){let e=lh.get(Qt.ROOTPATH);return _l.join(e,Xu,ch.NATS_CONFIG_FILES.HUB_SERVER)}a(zce,"getHubConfigPath");async function jce(e=!1,t=void 0){let r=lh.get(Qt.ROOTPATH);hl.ensureDirSync(_l.join(r,"clustering","leaf")),lh.initSync();let n=Rn.getConfigFromFile(Qt.CLUSTERING_TLS_CERT_AUTH),s=Rn.getConfigFromFile(Qt.CLUSTERING_TLS_PRIVATEKEY),i=Rn.getConfigFromFile(Qt.CLUSTERING_TLS_CERTIFICATE);!await hl.exists(i)&&!await hl.exists(!n)&&await Yce.createNatsCerts();let o=_l.join(r,Xu,ch.PID_FILES.HUB),c=_l.join(r,Xu,ch.PID_FILES.LEAF),l=Rn.getConfigFromFile(Qt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=_l.join(r,Xu,ch.NATS_CONFIG_FILES.HUB_SERVER),f=_l.join(r,Xu,ch.NATS_CONFIG_FILES.LEAF_SERVER),d=Rn.getConfigFromFile(Qt.CLUSTERING_TLS_INSECURE),h=Rn.getConfigFromFile(Qt.CLUSTERING_TLS_VERIFY),_=Rn.getConfigFromFile(Qt.CLUSTERING_NODENAME),p=Rn.getConfigFromFile(Qt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await qN.checkNATSServerInstalled()||Gg("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await GN.listUsers(),g=Rn.getConfigFromFile(Qt.CLUSTERING_USER),R=await GN.getClusterUser();(Zu.isEmpty(R)||R.active!==!0)&&Gg(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await kg(Qt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await kg(Qt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await kg(Qt.CLUSTERING_HUBSERVER_NETWORK_PORT),await kg(Qt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let E=[],T=[];for(let[se,z]of S.entries())z.role?.role===Fg.ROLE_TYPES_ENUM.CLUSTER_USER&&z.active&&(E.push(new Kce(z.username,gq.decrypt(z.hash))),T.push(new Vce(z.username,gq.decrypt(z.hash))));let O=[],{hub_routes:v}=Rn.getClusteringRoutes();if(!Zu.isEmptyOrZeroLength(v))for(let se of v)O.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${se.host}:${se.port}`);let F=new qce(Rn.getConfigFromFile(Qt.CLUSTERING_HUBSERVER_NETWORK_PORT),_,o,i,s,n,d,h,p,Rn.getConfigFromFile(Qt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Rn.getConfigFromFile(Qt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),O,E,T);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Zu.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Fg.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await hl.writeJson(u,F),ed.trace(`Hub server config written to ${u}`));let q=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,j=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${p}`,te=new $ce(Rn.getConfigFromFile(Qt.CLUSTERING_LEAFSERVER_NETWORK_PORT),_,c,l,[q],[j],E,T,i,s,n,d);n==null&&delete te.tls.ca_file,(t===void 0||t===Fg.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await hl.writeJson(f,te),ed.trace(`Leaf server config written to ${f}`))}a(jce,"generateNatsConfig");async function kg(e){let t=lh.get(e);return Zu.isEmpty(t)&&Gg(`port undefined for '${e}'`),await Zu.isPortTaken(t)&&Gg(`'${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(kg,"isPortAvailable");function Gg(e){let t=`Error generating clustering config: ${e}`;ed.error(t),console.error(t),process.exit(1)}a(Gg,"generateNatsConfigError");async function Qce(e){let{port:t,config_file:r}=qN.getServerConfig(e),{username:n,decrypt_hash:s}=await GN.getClusterUser(),i=0,o=2e3;for(;i<Sq;){try{let f=await qN.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){ed.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=Sq)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&&ed.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Zu.async_set_timeout(u)}let c="0".repeat(Wce),l=_l.join(lh.get(Qt.ROOTPATH),Xu,r);await hl.writeFile(l,c),await hl.remove(l),ed.notify(e,"started.")}a(Qce,"removeNatsConfig")});var KN={};Be(KN,{compactOnStart:()=>Jce,copyDb:()=>Nq});async function Jce(){Pa.notify("Running compact on start"),console.log("Running compact on start");let e=(0,$N.get)(B.ROOTPATH),t=new Map,r=Ze();(0,VN.updateConfigValue)(B.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,$g.join)(e,"backup",n+".mdb"),o=(0,$g.join)(e,cc,n+"-copy.mdb"),c=0;try{c=await Aq(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Pa.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await Nq(n,o),console.log("Backing up",n,"to",i),await(0,pl.move)(s,i,{overwrite:!0})}try{td()}catch(n){Pa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,pl.move)(i,s,{overwrite:!0}),await(0,pl.remove)((0,$g.join)(e,cc,`${n}-copy.mdb-lock`));try{td()}catch(n){Pa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Pa.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,VN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,pl.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw td(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await Aq(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
25
25
  Total record count before compaction: ${i}, total after: ${c}.
26
- Database backup has not been removed and can be found here: ${s}`;Pa.error(l),console.error(l)}(0,$N.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,ml.remove)(s))}}async function Rq(e){let t=await(0,Nq.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function wq(e,t){console.log("copyDb start");let r=Ze()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,yq.open)(new bq.default(t)),c=o.openDB(Vg.INTERNAL_DBIS_NAME),l,u=0,f=s.useReadTransaction();try{for(let{key:h,value:_}of s.getRange({transaction:f})){let m=_.is_hash_attribute||_.isPrimaryKey,S,g;if(m&&(S=_.compression,g=Kg(),g?_.compression=g:delete _.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(h,_),!(m||_.indexed))continue;let R=new Oq.default(!m,m);R.encoding="binary",R.compression=S;let E=n.openDB(h,R);E.decoder=null,E.decoderCopies=!1,E.encoding="binary",R.compression=g;let T=o.openDB(h,R);T.encoder=null,console.log("copying",h,"from",e,"to",t),await d(E,T,m,f)}if(i){let h=n.openDB(Vg.AUDIT_STORE_NAME,dh);console.log("copying audit log for",e,"to",t),d(i,h,!1,f)}async function d(h,_,m,S){let g=0,R=0,E=1e7,T=null;for(;E-- >0;)try{for(let O of h.getKeys({start:T,transaction:S}))try{T=O;let{value:v,version:F}=h.getEntry(O,{transaction:S});l=_.put(O,v,m?F:void 0),g++,S.openTimer&&(S.openTimer=0),R+=(O?.length||10)+v.length,u++>5e3&&(await l,console.log("copied",g,"entries",R,"bytes"),u=0)}catch(v){console.error("Error copying record",typeof O=="symbol"?"symbol":O,"from",e,"to",t,v)}console.log("finish copying, copied",g,"entries",R,"bytes");return}catch{if(typeof T=="string"){if(T==="z")return console.error("Reached end of dbi",T,"for",e,"to",t);T=T.slice(0,-2)+"z"}else if(typeof T=="number")T++;else return console.error("Unknown key type",T,"for",e,"to",t)}}a(d,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{f.done(),o.close()}}var yq,$g,ml,$N,bq,Oq,Vg,Nq,VN,Pa,YN=be(()=>{Ue();yq=require("lmdb"),$g=require("path"),ml=require("fs-extra"),$N=M(ce()),bq=M(Uf()),Oq=M(vf()),Vg=M(Ft());G();so();Nq=M(uo()),VN=M(wt()),Pa=M(X());a(jce,"compactOnStart");a(Rq,"getTotalDBRecordCount");a(wq,"copyDb")});var rd=P((yPe,vq)=>{"use strict";var Jce=require("minimist"),{isMainThread:zN,parentPort:_h,threadId:TPe}=require("worker_threads"),it=(G(),D($)),Ui=X(),QN=oe(),Wg=qg(),Yg=Er(),APe=Pt(),Dq=wt(),ti=nd(),Iq=Vu(),{compactOnStart:Xce}=(YN(),D(KN)),Zce=lc(),{restartWorkers:zg,onMessageByType:ele}=st(),{handleHDBError:tle,hdb_errors:rle}=he(),{HTTP_STATUS_CODES:nle}=rle,hh=ce(),{sendOperationToNode:Cq,getThisNodeName:sle,monitorNodeCAs:ile}=(ms(),D(Aa)),{getHDBNodeTable:RPe}=(Xc(),D(lO));hh.initSync();var fh=`Restarting HarperDB. This may take up to ${it.RESTART_TIMEOUT_MS/1e3} seconds.`,ole="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",Pq="Clustering is not enabled so cannot be restarted",ale="Invalid service",td,Ts;vq.exports={restart:Lq,restartService:jN};zN&&ele(it.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await jN({service:e.workerType}):Lq({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function Lq(e){Ts=Object.keys(e).length===0,td=await ti.isServiceRegistered(it.PROCESS_DESCRIPTORS.HDB);let t=Jce(process.argv);if(t.service){await jN(t);return}if(Ts&&!td){console.error(ole);return}if(Ts&&console.log(fh),td){ti.enterPM2Mode(),Ui.notify(fh);let r=Zce(Object.keys(it.CONFIG_PARAM_MAP),!0);return QN.isEmptyOrZeroLength(Object.keys(r))||Dq.updateConfigValue(void 0,void 0,r,!0,!0),cle(),fh}return zN?(Ui.notify(fh),hh.get(it.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Xce(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{zg()},50)):_h.postMessage({type:it.ITC_EVENT_TYPES.RESTART}),fh}a(Lq,"restart");async function jN(e){let{service:t}=e;if(it.HDB_PROCESS_SERVICES[t]===void 0)throw tle(new Error,ale,nle.BAD_REQUEST,void 0,void 0,!0);if(ti.expectedRestartOfChildren(),td=await ti.isServiceRegistered(it.PROCESS_DESCRIPTORS.HDB),!zN){e.replicated&&ile(),_h.postMessage({type:it.ITC_EVENT_TYPES.RESTART,workerType:t}),_h.ref(),await new Promise(s=>{_h.on("message",i=>{i.type==="restart-complete"&&(s(),_h.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===sle())continue;let i;try{({job_id:i}=await Cq(s,e))}catch(o){n.push({node:s.name,message:o.message});continue}n.push(await new Promise((o,c)=>{let u=2400,f=setInterval(async()=>{if(u--<=0){clearInterval(f);let _=new Error("Timed out waiting for restart job to complete");_.replicated=n,c(_)}let h=(await Cq(s,{operation:"get_job",id:i})).results[0];if(h.status==="COMPLETE"&&(clearInterval(f),o({node:s.name,message:h.message})),h.status==="ERROR"){clearInterval(f);let _=new Error(h.message);_.replicated=n,c(_)}},250)}))}return{replicated:n}}return}let r;switch(t){case it.HDB_PROCESS_SERVICES.clustering:if(!hh.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Pq;break}Ts&&console.log("Restarting clustering"),Ui.notify("Restarting clustering"),await Mq();break;case it.HDB_PROCESS_SERVICES.clustering_config:case it.HDB_PROCESS_SERVICES["clustering config"]:if(!hh.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Pq;break}Ts&&console.log("Restarting clustering_config"),Ui.notify("Restarting clustering_config"),await ti.reloadClustering();break;case"custom_functions":case"custom functions":case it.HDB_PROCESS_SERVICES.harperdb:case it.HDB_PROCESS_SERVICES.http_workers:case it.HDB_PROCESS_SERVICES.http:if(Ts&&!td){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Ts&&console.log("Restarting http_workers"),Ui.notify("Restarting http_workers"),Ts?await ti.restart(it.PROCESS_DESCRIPTORS.HDB):await zg("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Ui.error(r),Ts&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(jN,"restartService");async function cle(){await Mq(),await ti.restart(it.PROCESS_DESCRIPTORS.HDB),await QN.async_set_timeout(2e3),hh.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await WN(),Ts&&(await Yg.closeConnection(),process.exit(0))}a(cle,"restartPM2Mode");async function Mq(){if(!Dq.getConfigFromFile(it.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await Iq.getHDBProcessInfo()).clustering.length===0)Ui.trace("Clustering not running, restart will start clustering services"),await Wg.generateNatsConfig(!0),await ti.startClusteringProcesses(),await ti.startClusteringThreads(),await WN(),Ts&&await Yg.closeConnection();else{await Wg.generateNatsConfig(!0),td?(Ui.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ti.restart(it.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ti.restart(it.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await Iq.getHDBProcessInfo()).clustering.forEach(s=>{Ui.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await QN.async_set_timeout(3e3),await WN(),await Yg.updateLocalStreams(),Ts&&await Yg.closeConnection(),Ui.trace("Restart clustering restarting ingest and reply service threads");let t=zg(it.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=zg(it.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(Mq,"restartClustering");async function WN(){await Wg.removeNatsConfig(it.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Wg.removeNatsConfig(it.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(WN,"removeNatsConfig")});var Kq=P((NPe,Vq)=>{"use strict";var OPe=require("lodash"),yn=(G(),D($)),{handleHDBError:Uq,hdb_errors:lle}=he(),{HDB_ERROR_MSGS:ule,HTTP_STATUS_CODES:dle}=lle,JN=X();Vq.exports={getRolePermissions:_le};var pl=Object.create(null),fle=a(e=>({key:e,perms:{}}),"perms_template_obj"),kq=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),Fq=a((e=!1,t=!1,r=!1,n=!1)=>({[yn.PERMS_CRUD_ENUM.READ]:e,[yn.PERMS_CRUD_ENUM.INSERT]:t,[yn.PERMS_CRUD_ENUM.UPDATE]:r,[yn.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),XN=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...Fq(t,r,n,s)}),"table_perms_template"),xq=a((e,t=Fq())=>({attribute_name:e,describe:$q(t),[mh]:t[mh],[ZN]:t[ZN],[ew]:t[ew]}),"attr_perms_template"),Bq=a((e,t=!1)=>({attribute_name:e,describe:t,[mh]:t}),"timestamp_attr_perms_template"),{READ:mh,INSERT:ZN,UPDATE:ew}=yn.PERMS_CRUD_ENUM,Gq=Object.values(yn.PERMS_CRUD_ENUM),qq=[mh,ZN,ew];function _le(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[yn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(pl[t]&&pl[t].key===n)return pl[t].perms;let s=hle(e,r);return pl[t]?pl[t].key=n:pl[t]=fle(n),pl[t].perms=s,s}catch(r){if(!e[yn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[yn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<yn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw JN.error(n),JN.debug(r),Uq(new Error,ule.OUTDATED_PERMS_TRANSLATION_ERROR,dle.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
27
- ${r.stack}`;throw JN.error(n),Uq(new Error)}}}a(_le,"getRolePermissions");function hle(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[yn.SYSTEM_SCHEMA_NAME]=n[yn.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]=mle(t[i]);return}r[i]=kq(),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=ple(c,l);r[i].describe||Gq.forEach(f=>{u[f]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=XN()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=XN()})}),r}a(hle,"translateRolePermissions");function mle(e){let t=kq(!0);return Object.keys(e).forEach(r=>{t.tables[r]=XN(!0,!0,!0,!0,!0)}),t}a(mle,"createStructureUserPermissions");function ple(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,f)=>{let{attribute_name:d}=f,h=f;return yn.TIME_STAMP_NAMES.includes(d)&&(h=Bq(d,f[mh])),u[d]=h,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=xq(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let f=i[u];f.describe=$q(f),s.attribute_permissions.push(f),c||Ele(f,l)}else if(u!==o){let f;yn.TIME_STAMP_NAMES.includes(u)?f=Bq(u):f=xq(u),s.attribute_permissions.push(f)}}),c||s.attribute_permissions.push(l),s.describe=Hq(s),s}else return e.describe=Hq(e),e}a(ple,"getTableAttrPerms");function Hq(e){return Gq.filter(t=>e[t]).length>0}a(Hq,"getSchemaTableDescribePerm");function $q(e){return qq.filter(t=>e[t]).length>0}a($q,"getAttributeDescribePerm");function Ele(e,t){qq.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Ele,"checkForHashPerms")});var ph={};Be(ph,{authentication:()=>Xq,bypassAuth:()=>Ole,login:()=>wle,logout:()=>Ile,start:()=>Nle});function Ole(){Jq=!0}async function Xq(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let _=e.isOperationsServer?Ale?Tle:[]:Sle?gle:[];if(_.includes(i)||_.includes("*")){if(e.method==="OPTIONS"){let m=Jr.get(B.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",S=new po([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",m],["Access-Control-Allow-Origin",i]]);return Qg&&S.set("Access-Control-Allow-Credentials","true"),{status:200,headers:S}}o.push("Access-Control-Allow-Origin",i),Qg&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Qg){i||(i=r.host);let _=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",m=s?.split(/;\s+/)||[];for(let S of m)if(S.startsWith(_)){let g=S.indexOf(";");l=S.slice(_.length,g===-1?S.length:g),u=await Yq.get(l);break}e.session=u||(u={})}let f=a((_,m,S)=>{let g=new sd.AuthAuditLog(_,m,zo.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=S,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),m===xs.SUCCESS?tw.notify(g):tw.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&tw.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let _=e.mtlsConfig.user;_!==null?((_===void 0||_==="Common Name"||_==="CN")&&(_=e.peerCertificate.subject.CN),e.user=await Ke.getUser(_,null,e),f(_,xs.SUCCESS,"mTLS")):(0,sd.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=El.get(n),!d){let _=n.indexOf(" "),m=n.slice(0,_),S=n.slice(_+1),g,R;try{switch(m){case"Basic":let E=atob(S),T=E.indexOf(":");g=E.slice(0,T),R=E.slice(T+1),d=g||R?await Ke.getUser(g,R,e):null;break;case"Bearer":try{d=await Fb(S)}catch(O){if(O.message==="invalid token")try{return await ME(S),c({status:-1})}catch{throw O}}break}}catch(E){return yle&&(El.get(S)||(El.set(S,S),f(g,xs.FAILURE,m))),c({status:401,body:oa({error:E.message},e)})}El.set(n,d),Rle&&f(d.username,xs.SUCCESS,m)}e.user=d}else u?.user?e.user=await Ke.getUser(u.user,null,e):(Jq&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,zq.getSuperUser)());Qg&&(e.session.update=function(_){let m=Jr.get(B.AUTHENTICATION_COOKIE_EXPIRES);if(!l){l=(0,Qq.v4)();let S=Jr.get(B.AUTHENTICATION_COOKIE_DOMAINS),g=m?new Date(Date.now()+(0,rw.convertToMS)(m)).toUTCString():ble,R=S?.find(O=>r.host?.endsWith(O)),T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${g}; ${R?"Domain="+R+"; ":""}HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",T):h?.headers?.set&&h.headers.set("Set-Cookie",T)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):h?.headers?.set&&(i&&h.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),h.headers.set("X-Hdb-Session","Secure"))),_.id=l,Yq.put(_,{expiresAt:m?Date.now()+(0,rw.convertToMS)(m):void 0})},e.login=async function(_,m){let S=e.user=await Ke.authenticateUser(_,m,e);e.session.update({user:S&&(S.getId?.()??S.username)})});let h=await t(e);return h&&(h.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&us.loginPath?(h.status=302,h.headers.set("Location",us.loginPath(e))):h.headers.set("WWW-Authenticate","Basic")),c(h))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let f=l.headers;f||(l.headers=f=new po);for(let d=0;d<u;){let h=o[d++];f.set(h,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function Nle({server:e,port:t,securePort:r}){e.http(Xq,t||r?{port:t,securePort:r}:{port:"all"}),Wq||(Wq=!0,setInterval(()=>{El=new Map},Jr.get(B.AUTHENTICATION_CACHETTL)).unref(),jq.user.addListener(()=>{El=new Map}))}async function wle(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 Ile(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var zq,Qq,Jr,sd,jq,rw,tw,gle,Sle,Tle,Ale,Yq,Qg,Jq,Rle,yle,ble,El,Wq,jg=be(()=>{zq=M(Gn());Dr();Jl();yu();Ue();Qq=require("uuid"),Jr=M(ce());G();sd=M(X()),jq=M(Xf());R_();rw=M(oe());eo();tw=(0,sd.loggerWithTag)("auth-event");Jr.initSync();gle=Jr.get(B.HTTP_CORSACCESSLIST),Sle=Jr.get(B.HTTP_CORS),Tle=Jr.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Ale=Jr.get(B.OPERATIONSAPI_NETWORK_CORS),Yq=_t({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Qg=Jr.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,Jq=process.env.AUTHENTICATION_AUTHORIZELOCAL??Jr.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Rle=Jr.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,yle=Jr.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ble="Tue, 01 Oct 8307 19:33:20 GMT",El=new Map;Ke.onInvalidatedUser(()=>{El=new Map});a(Ole,"bypassAuth");a(Xq,"authentication");a(Nle,"start");a(wle,"login");a(Ile,"logout")});var i$=P((xPe,s$)=>{"use strict";var Ne=require("joi"),Zq=require("fs-extra"),e$=require("path"),jn=nt(),t$=ce(),r$=(G(),D($)),n$=X(),{hdb_errors:Cle}=he(),{HDB_ERROR_MSGS:Xr}=Cle,bo=/^[a-zA-Z0-9-_]+$/,Ple=/^[a-zA-Z0-9-_]+$/;s$.exports={getDropCustomFunctionValidator:Lle,setCustomFunctionValidator:Mle,addComponentValidator:Ble,dropCustomFunctionProjectValidator:Hle,packageComponentValidator:kle,deployComponentValidator:Fle,setComponentFileValidator:vle,getComponentFileValidator:xle,dropComponentFileValidator:Ule,addSSHKeyValidator:Gle,updateSSHKeyValidator:qle,deleteSSHKeyValidator:$le,setSSHKnownHostsValidator:Vle};function Jg(e,t,r){try{let n=t$.get(r$.CONFIG_PARAMS.COMPONENTSROOT),s=e$.join(n,t);return Zq.existsSync(s)?e?t:r.message(Xr.PROJECT_EXISTS):e?r.message(Xr.NO_PROJECT):t}catch(n){return n$.error(n),r.message(Xr.VALIDATION_ERR)}}a(Jg,"checkProjectExists");function Eh(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Eh,"checkFilePath");function Dle(e,t,r,n){try{let s=t$.get(r$.CONFIG_PARAMS.COMPONENTSROOT),i=e$.join(s,e,t,r+".js");return Zq.existsSync(i)?r:n.message(Xr.NO_FILE)}catch(s){return n$.error(s),n.message(Xr.VALIDATION_ERR)}}a(Dle,"checkFileExists");function Lle(e){let t=Ne.object({project:Ne.string().pattern(bo).custom(Jg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(bo).custom(Dle.bind(null,e.project,e.type)).custom(Eh).required().messages({"string.pattern.base":Xr.BAD_FILE_NAME})});return jn.validateBySchema(e,t)}a(Lle,"getDropCustomFunctionValidator");function Mle(e){let t=Ne.object({project:Ne.string().pattern(bo).custom(Jg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(Eh).required(),function_content:Ne.string().required()});return jn.validateBySchema(e,t)}a(Mle,"setCustomFunctionValidator");function vle(e){let t=Ne.object({project:Ne.string().pattern(bo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Ne.string().custom(Eh).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return jn.validateBySchema(e,t)}a(vle,"setComponentFileValidator");function Ule(e){let t=Ne.object({project:Ne.string().pattern(bo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Ne.string().custom(Eh).optional()});return jn.validateBySchema(e,t)}a(Ule,"dropComponentFileValidator");function xle(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(Eh).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return jn.validateBySchema(e,t)}a(xle,"getComponentFileValidator");function Ble(e){let t=Ne.object({project:Ne.string().pattern(bo).custom(Jg.bind(null,!1)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return jn.validateBySchema(e,t)}a(Ble,"addComponentValidator");function Hle(e){let t=Ne.object({project:Ne.string().pattern(bo).custom(Jg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return jn.validateBySchema(e,t)}a(Hle,"dropCustomFunctionProjectValidator");function kle(e){let t=Ne.object({project:Ne.string().pattern(bo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean(),skip_symlinks:Ne.boolean()});return jn.validateBySchema(e,t)}a(kle,"packageComponentValidator");function Fle(e){let t=Ne.object({project:Ne.string().pattern(bo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),package:Ne.string().optional(),restart:Ne.alternatives().try(Ne.boolean(),Ne.string().valid("rolling")).optional()});return jn.validateBySchema(e,t)}a(Fle,"deployComponentValidator");function Gle(e){let t=Ne.object({name:Ne.string().pattern(Ple).required().messages({"string.pattern.base":Xr.BAD_SSH_KEY_NAME}),key:Ne.string().required(),host:Ne.string().required(),hostname:Ne.string().required(),known_hosts:Ne.string().optional()});return jn.validateBySchema(e,t)}a(Gle,"addSSHKeyValidator");function qle(e){let t=Ne.object({name:Ne.string().required(),key:Ne.string().required()});return jn.validateBySchema(e,t)}a(qle,"updateSSHKeyValidator");function $le(e){let t=Ne.object({name:Ne.string().required()});return jn.validateBySchema(e,t)}a($le,"deleteSSHKeyValidator");function Vle(e){let t=Ne.object({known_hosts:Ne.string().required()});return jn.validateBySchema(e,t)}a(Vle,"setSSHKnownHostsValidator")});var Th=P((HPe,u$)=>{"use strict";var Xg=require("joi"),Da=require("path"),id=require("fs-extra"),{exec:Kle,spawn:Yle}=require("child_process"),Wle=require("util"),zle=Wle.promisify(Kle),od=(G(),D($)),{PACKAGE_ROOT:Qle}=Et(),{handleHDBError:gh,hdb_errors:jle}=he(),{HTTP_STATUS_CODES:Sh}=jle,gl=ce(),Jle=nt(),La=X(),{once:Xle}=require("events");gl.initSync();var nw=gl.get(od.CONFIG_PARAMS.COMPONENTSROOT),o$="npm install --force --omit=dev --json",Zle=`${o$} --dry-run`,eue=gl.get(od.CONFIG_PARAMS.ROOTPATH),Zg=Da.join(eue,"ssh");u$.exports={installModules:sue,auditModules:iue,installAllRootModules:tue,uninstallRootModule:rue,linkHarperdb:nue,runCommand:ad};async function tue(e=!1,t=gl.get(od.CONFIG_PARAMS.ROOTPATH)){await eS();let r=!1,n=process.env;id.pathExistsSync(Zg)&&id.readdirSync(Zg).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+Da.join(Zg,"config")+" -o UserKnownHostsFile="+Da.join(Zg,"known_hosts"),...process.env},r=!0)});try{let s=gl.get(od.CONFIG_PARAMS.ROOTPATH),i=Da.join(s,"node_modules","harperdb");id.lstatSync(i).isSymbolicLink()&&id.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&La.error("Error removing symlink:",s)}await ad(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}a(tue,"installAllRootModules");async function rue(e){await ad(`npm uninstall ${e}`,gl.get(od.CONFIG_PARAMS.ROOTPATH))}a(rue,"uninstallRootModule");async function nue(){await eS(),await ad(`npm link ${Qle}`,gl.get(od.CONFIG_PARAMS.ROOTPATH))}a(nue,"linkHarperdb");async function ad(e,t=void 0,r=process.env){La.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=Yle(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();La.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();La.error({tagName:"npm_run_command:stderr"},l),i+=l});let[o]=await Xle(n,"close");if(o!==0)throw new Error(`Command \`${e}\` exited with code ${o}.${i===""?"":` Error: ${i}`}`);return s||void 0}a(ad,"runCommand");async function sue(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";La.warn(t,e.projects);let r=l$(e);if(r)throw gh(r,r.message,Sh.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?Zle:o$;await eS(),await c$(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let f=Da.join(nw,u),d,h=null;try{let{stdout:_,stderr:m}=await zle(i,{cwd:f});d=_?_.replace(`
28
- `,""):null,h=m?m.replace(`
29
- `,""):null}catch(_){_.stderr?o[u].npm_error=a$(_.stderr):o[u].npm_error=_.message;continue}try{o[u].npm_output=JSON.parse(d)}catch{o[u].npm_output=d}try{o[u].npm_error=JSON.parse(h)}catch{o[u].npm_error=h}}return La.info(`finished installModules with response ${o}`),o.warning=t,o}a(sue,"installModules");function a$(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
30
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(a$,"parseNPMStdErr");async function iue(e){La.info(`starting auditModules for request: ${e}`);let t=l$(e);if(t)throw gh(t,t.message,Sh.BAD_REQUEST);let{projects:r}=e;await eS(),await c$(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Da.join(nw,o);n[o]={npm_output:null,npm_error:null};try{let l=await ad("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=a$(l.stderr)}}return La.info(`finished auditModules with response ${n}`),n}a(iue,"auditModules");async function eS(){return await ad("npm -v"),!0}a(eS,"checkNPMInstalled");async function c$(e){if(!Array.isArray(e)||e.length===0)throw gh(new Error,"projects argument must be an array with at least 1 element",Sh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Da.join(nw,i.toString());if(!await id.pathExists(o)){t.push(i);continue}let l=Da.join(o,"package.json");await id.pathExists(l)||r.push(i)}if(t.length>0)throw gh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Sh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw gh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Sh.BAD_REQUEST,void 0,void 0,!0)}a(c$,"checkProjectPaths");function l$(e){let t=Xg.object({projects:Xg.array().min(1).items(Xg.string()).required(),dry_run:Xg.boolean().default(!1)});return Jle.validateBySchema(e,t)}a(l$,"modulesValidator")});var iw=P((FPe,p$)=>{"use strict";var As=require("fs-extra"),Rh=require("path"),Ah=X(),d$=oe(),{PACKAGE_ROOT:oue}=Et(),sw=(G(),D($)),m$=ce(),aue=wt();p$.exports=cue;async function cue(){let e=lue(),t=m$.get(sw.CONFIG_PARAMS.ROOTPATH),r=Rh.join(t,"package.json"),n={dependencies:{harperdb:"file:"+oue}},s=Rh.join(t,"node_modules");As.ensureDirSync(s);let i,o=!0,c=!1;try{i=As.readJsonSync(r)}catch(l){if(d$.isEmptyOrZeroLength(e))return;if(l.code!==sw.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!d$.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let f=_$(u);n.dependencies[l]=f+u}if(!o){Ah.notify("Installing components"),await h$(r,n,null),await f$(t,e);return}for(let{name:l,package:u}of e){let f=i.dependencies[l],d=_$(u);if(f===void 0||f!==d+u){c=!0;break}if(u.startsWith("file:"))try{if(As.statSync(new URL(u+"/package.json")).mtimeMs>As.statSync(r).mtimeMs){c=!0;break}}catch(h){Ah.info(`Error checking ${u}/package.json modification time`,h);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Ah.notify("Removing component",l),c=!0);c&&(Ah.notify("Updating components."),await h$(r,n,i),await f$(t,e))}a(cue,"installComponents");function f$(e,t){return Promise.all(t.map(({name:r})=>{let n=Rh.join(e,"node_modules",r),s=Rh.join(e,"components",r);if(As.existsSync(n)&&As.lstatSync(n).isDirectory())return As.move(n,s,{overwrite:!0}).then(()=>{As.symlink(s,n)})}))}a(f$,"moveModuleToComponents");function lue(){let e=aue.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(lue,"getComponentsConfig");function _$(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Rh.extname(e)||As.existsSync(e)?"file:":"github:"}a(_$,"getPkgPrefix");async function h$(e,t,r){Ah.trace("npm installing components package.json",t),As.writeFileSync(e,JSON.stringify(t,null," "));try{await Th().installAllRootModules(m$.get(sw.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?As.writeFileSync(e,JSON.stringify(r,null," ")):As.unlinkSync(e),n}}a(h$,"installPackages")});var T$={};Be(T$,{packageDirectory:()=>uue});function uue(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];g$.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,E$.join)("cache","webpack")):void 0}).pipe((0,S$.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var E$,g$,S$,A$=be(()=>{E$=require("path"),g$=M(require("tar-fs")),S$=require("node:zlib");a(uue,"packageDirectory")});var cw=P(O$=>{"use strict";var Oe=require("fs-extra"),ow=require("fast-glob"),we=require("path"),due=require("tar-fs"),fue=require("gunzip-maybe"),aw=require("normalize-path"),bn=i$(),Gt=X(),lt=(G(),D($)),Jt=ce(),tS=wt(),_ue=oe(),{PACKAGE_ROOT:hue}=Et(),{handleHDBError:qt,hdb_errors:mue}=he(),{basename:pue}=require("path"),Eue=iw(),y$=ce(),{Readable:gue}=require("stream"),{isMainThread:Sue}=require("worker_threads"),{HDB_ERROR_MSGS:Sl,HTTP_STATUS_CODES:$t}=mue,b$=st(),{replicateOperation:ri}=(ms(),D(Aa)),{packageDirectory:Tue}=(A$(),D(T$)),R$=Th(),Aue=we.join(hue,"application-template"),Rue=Jt.get(lt.CONFIG_PARAMS.ROOTPATH),Ma=we.join(Rue,"ssh"),Oo=we.join(Ma,"known_hosts");function yue(){Gt.trace("getting custom api status");let e={};try{e={port:Jt.get(lt.CONFIG_PARAMS.HTTP_PORT),directory:Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw qt(new Error,Sl.FUNCTION_STATUS,$t.INTERNAL_SERVER_ERROR,Gt.ERR,t)}return e}a(yue,"customFunctionsStatus");function bue(){Gt.trace("getting custom api endpoints");let e={},t=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT);try{ow.sync(aw(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:ow.sync(aw(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:ow.sync(aw(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw qt(new Error,Sl.GET_FUNCTIONS,$t.INTERNAL_SERVER_ERROR,Gt.ERR,r)}return e}a(bue,"getCustomFunctions");function Oue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=bn.getDropCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("getting custom api endpoint file content");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=we.join(r,n,s,i+".js");try{return Oe.readFileSync(o,{encoding:"utf8"})}catch(c){throw qt(new Error,Sl.GET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(Oue,"getCustomFunction");async function Nue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=bn.setCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("setting custom function file content");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Oe.outputFileSync(we.join(r,n,s,i+".js"),o);let c=await ri(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw qt(new Error,Sl.SET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(Nue,"setCustomFunction");async function wue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=bn.getDropCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("dropping custom function file");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Oe.unlinkSync(we.join(r,n,s,i+".js"));let o=await ri(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw qt(new Error,Sl.DROP_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,o)}}a(wue,"dropCustomFunction");async function Iue(e){e.project&&(e.project=we.parse(e.project).name);let t=bn.addComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("adding component");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=we.join(r,n);Oe.mkdirSync(s,{recursive:!0}),Oe.copySync(Aue,s);let i=await ri(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw qt(new Error,Sl.ADD_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,s)}}a(Iue,"addComponent");async function Cue(e){e.project&&(e.project=we.parse(e.project).name);let t=bn.dropCustomFunctionProjectValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("dropping custom function project");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Jt.get(lt.CONFIG_PARAMS.APPS);if(!_ue.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return tS.updateConfigValue(lt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=we.join(r,n);Oe.rmSync(i,{recursive:!0});let o=await ri(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw qt(new Error,Sl.DROP_FUNCTION_PROJECT,$t.INTERNAL_SERVER_ERROR,Gt.ERR,i)}}a(Cue,"dropCustomFunctionProject");async function Pue(e){e.project&&(e.project=we.parse(e.project).name);let t=bn.packageComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Gt.trace("packaging component",n);let s;try{s=await Oe.realpath(we.join(r,n))}catch(o){if(o.code!==lt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Oe.realpath(we.join(Jt.get(lt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===lt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await Tue(s,e)).toString("base64");return{project:n,payload:i}}a(Pue,"packageComponent");async function Due(e){e.project?e.project=we.parse(e.project).name:e.package&&(e.project=Lue(e.package));let t=bn.deployComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(Gt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=we.join(r,n),i="file:"+c,await Oe.emptyDir(c);let S=gue.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((E,T)=>{S.pipe(fue()).pipe(due.extract(c,{finish:E})).on("error",T)});let g=await Oe.readdir(c);g.length===1&&g[0]==="package"&&(await Oe.copy(we.join(c,"package"),c),await Oe.remove(we.join(c,"package")));let R=we.join(c,"node_modules");o?await R$.runCommand(o,c):Oe.existsSync(R)||await R$.installAllRootModules(!1,c)}else{await tS.addConfig(n,{package:i}),await Eue();let S=y$.get(lt.CONFIG_PARAMS.ROOTPATH);c=we.join(S,"node_modules",n)}if(Sue)return;let l=new Map;l.isWorker=!0;let u=(bh(),D(yh)),f;u.setErrorReporter(S=>f=S);let d=pue(c),h=u.component_errors.get(d);try{await u.loadComponent(c,l)}finally{u.component_errors.set(d,h)}if(f)throw f;Gt.info("Installed component");let _=e.restart==="rolling";e.restart=_?!1:e.restart;let m=await ri(e);if(e.restart===!0)b$.restartWorkers("http"),m.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(_){let g=await lw().executeJob({operation:"restart_service",service:"http",replicated:!0});m.restartJobId=g.job_id,m.message=`Successfully deployed: ${n}, restarting HarperDB`}else m.message=`Successfully deployed: ${n}`;return m}a(Due,"deployComponent");function Lue(e){if(e.startsWith("git+ssh://"))return we.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return we.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Oe.readFileSync(we.join(e,"package.json"),"utf8"));return we.basename(t)}catch{}return we.basename(e)}a(Lue,"getProjectNameFromPackage");async function Mue(){let e=a(async(s,i)=>{try{let o=await Oe.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=we.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let f={name:l,entries:[]};i.entries.push(f),await e(u,f)}else{let f=await Oe.stat(u),d={name:we.basename(l),mtime:f.mtime,size:f.size};i.entries.push(d)}}return i}catch(o){return Gt.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{name:Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT).split(we.sep).slice(-1).pop(),entries:[]}),n=(bh(),D(yh)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(Mue,"getComponents");async function vue(e){let t=bn.getComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let n=tS.getConfigObj()[e.project]||e.project==="harperdb"?we.join(y$.get(lt.CONFIG_PARAMS.ROOTPATH),"node_modules"):Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Oe.stat(we.join(n,e.project,e.file));return{message:await Oe.readFile(we.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===lt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${we.join(e.project,e.file)}'`):i}}a(vue,"getComponentFile");async function Uue(e){let t=bn.setComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=we.join(Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Oe.ensureFile(n),await Oe.outputFile(n,e.payload,r)):await Oe.ensureDir(n);let s=await ri(e);return s.message="Successfully set component: "+e.file,s}a(Uue,"setComponentFile");async function xue(e){let t=bn.dropComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?we.join(r,n):r,i=we.join(Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),s),o=we.join(Jt.get(lt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Oe.pathExists(o)&&await Oe.unlink(o),await Oe.pathExists(i)&&await Oe.remove(i);let c=we.join(Jt.get(lt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Oe.pathExists(c)){let u=JSON.parse(await Oe.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Oe.writeFile(c,JSON.stringify(u,null,2),"utf8")}tS.deleteConfigFromFile([r]);let l=await ri(e);return e.restart===!0?(b$.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(xue,"dropComponent");async function Bue(e){let t=bn.addSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Gt.trace("adding ssh key",r);let c=we.join(Ma,r+".key"),l=we.join(Ma,"config");if(await Oe.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Oe.outputFile(c,n),await Oe.chmod(c,"0600");let u=`#${r}
26
+ Database backup has not been removed and can be found here: ${s}`;Pa.error(l),console.error(l)}(0,$N.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,pl.remove)(s))}}async function Aq(e){let t=await(0,Oq.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function Nq(e,t){console.log("copyDb start");let r=Ze()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,Rq.open)(new yq.default(t)),c=o.openDB(Vg.INTERNAL_DBIS_NAME),l,u=0,f=s.useReadTransaction();try{for(let{key:h,value:_}of s.getRange({transaction:f})){let p=_.is_hash_attribute||_.isPrimaryKey,S,g;if(p&&(S=_.compression,g=Kg(),g?_.compression=g:delete _.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(h,_),!(p||_.indexed))continue;let R=new bq.default(!p,p);R.encoding="binary",R.compression=S;let E=n.openDB(h,R);E.decoder=null,E.decoderCopies=!1,E.encoding="binary",R.compression=g;let T=o.openDB(h,R);T.encoder=null,console.log("copying",h,"from",e,"to",t),await d(E,T,p,f)}if(i){let h=n.openDB(Vg.AUDIT_STORE_NAME,uh);console.log("copying audit log for",e,"to",t),d(i,h,!1,f)}async function d(h,_,p,S){let g=0,R=0,E=1e7,T=null;for(;E-- >0;)try{for(let O of h.getKeys({start:T,transaction:S}))try{T=O;let{value:v,version:F}=h.getEntry(O,{transaction:S});l=_.put(O,v,p?F:void 0),g++,S.openTimer&&(S.openTimer=0),R+=(O?.length||10)+v.length,u++>5e3&&(await l,console.log("copied",g,"entries",R,"bytes"),u=0)}catch(v){console.error("Error copying record",typeof O=="symbol"?"symbol":O,"from",e,"to",t,v)}console.log("finish copying, copied",g,"entries",R,"bytes");return}catch{if(typeof T=="string"){if(T==="z")return console.error("Reached end of dbi",T,"for",e,"to",t);T=T.slice(0,-2)+"z"}else if(typeof T=="number")T++;else return console.error("Unknown key type",T,"for",e,"to",t)}}a(d,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{f.done(),o.close()}}var Rq,$g,pl,$N,yq,bq,Vg,Oq,VN,Pa,YN=be(()=>{Ue();Rq=require("lmdb"),$g=require("path"),pl=require("fs-extra"),$N=M(ce()),yq=M(xf()),bq=M(Uf()),Vg=M(Ft());G();so();Oq=M(uo()),VN=M(wt()),Pa=M(X());a(Jce,"compactOnStart");a(Aq,"getTotalDBRecordCount");a(Nq,"copyDb")});var nd=P((bPe,Mq)=>{"use strict";var Xce=require("minimist"),{isMainThread:zN,parentPort:fh,threadId:APe}=require("worker_threads"),it=(G(),D($)),Ui=X(),jN=oe(),Wg=qg(),Yg=Er(),RPe=Pt(),Pq=wt(),ti=sd(),wq=Ku(),{compactOnStart:Zce}=(YN(),D(KN)),ele=lc(),{restartWorkers:zg,onMessageByType:tle}=st(),{handleHDBError:rle,hdb_errors:nle}=he(),{HTTP_STATUS_CODES:sle}=nle,_h=ce(),{sendOperationToNode:Iq,getThisNodeName:ile,monitorNodeCAs:ole}=(ps(),D(Aa)),{getHDBNodeTable:yPe}=(Xc(),D(lO));_h.initSync();var dh=`Restarting HarperDB. This may take up to ${it.RESTART_TIMEOUT_MS/1e3} seconds.`,ale="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",Cq="Clustering is not enabled so cannot be restarted",cle="Invalid service",rd,Ts;Mq.exports={restart:Dq,restartService:QN};zN&&tle(it.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await QN({service:e.workerType}):Dq({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function Dq(e){Ts=Object.keys(e).length===0,rd=await ti.isServiceRegistered(it.PROCESS_DESCRIPTORS.HDB);let t=Xce(process.argv);if(t.service){await QN(t);return}if(Ts&&!rd){console.error(ale);return}if(Ts&&console.log(dh),rd){ti.enterPM2Mode(),Ui.notify(dh);let r=ele(Object.keys(it.CONFIG_PARAM_MAP),!0);return jN.isEmptyOrZeroLength(Object.keys(r))||Pq.updateConfigValue(void 0,void 0,r,!0,!0),lle(),dh}return zN?(Ui.notify(dh),_h.get(it.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Zce(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{zg()},50)):fh.postMessage({type:it.ITC_EVENT_TYPES.RESTART}),dh}a(Dq,"restart");async function QN(e){let{service:t}=e;if(it.HDB_PROCESS_SERVICES[t]===void 0)throw rle(new Error,cle,sle.BAD_REQUEST,void 0,void 0,!0);if(ti.expectedRestartOfChildren(),rd=await ti.isServiceRegistered(it.PROCESS_DESCRIPTORS.HDB),!zN){e.replicated&&ole(),fh.postMessage({type:it.ITC_EVENT_TYPES.RESTART,workerType:t}),fh.ref(),await new Promise(s=>{fh.on("message",i=>{i.type==="restart-complete"&&(s(),fh.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===ile())continue;let i;try{({job_id:i}=await Iq(s,e))}catch(o){n.push({node:s.name,message:o.message});continue}n.push(await new Promise((o,c)=>{let u=2400,f=setInterval(async()=>{if(u--<=0){clearInterval(f);let _=new Error("Timed out waiting for restart job to complete");_.replicated=n,c(_)}let h=(await Iq(s,{operation:"get_job",id:i})).results[0];if(h.status==="COMPLETE"&&(clearInterval(f),o({node:s.name,message:h.message})),h.status==="ERROR"){clearInterval(f);let _=new Error(h.message);_.replicated=n,c(_)}},250)}))}return{replicated:n}}return}let r;switch(t){case it.HDB_PROCESS_SERVICES.clustering:if(!_h.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Cq;break}Ts&&console.log("Restarting clustering"),Ui.notify("Restarting clustering"),await Lq();break;case it.HDB_PROCESS_SERVICES.clustering_config:case it.HDB_PROCESS_SERVICES["clustering config"]:if(!_h.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Cq;break}Ts&&console.log("Restarting clustering_config"),Ui.notify("Restarting clustering_config"),await ti.reloadClustering();break;case"custom_functions":case"custom functions":case it.HDB_PROCESS_SERVICES.harperdb:case it.HDB_PROCESS_SERVICES.http_workers:case it.HDB_PROCESS_SERVICES.http:if(Ts&&!rd){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Ts&&console.log("Restarting http_workers"),Ui.notify("Restarting http_workers"),Ts?await ti.restart(it.PROCESS_DESCRIPTORS.HDB):await zg("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Ui.error(r),Ts&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(QN,"restartService");async function lle(){await Lq(),await ti.restart(it.PROCESS_DESCRIPTORS.HDB),await jN.async_set_timeout(2e3),_h.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await WN(),Ts&&(await Yg.closeConnection(),process.exit(0))}a(lle,"restartPM2Mode");async function Lq(){if(!Pq.getConfigFromFile(it.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await wq.getHDBProcessInfo()).clustering.length===0)Ui.trace("Clustering not running, restart will start clustering services"),await Wg.generateNatsConfig(!0),await ti.startClusteringProcesses(),await ti.startClusteringThreads(),await WN(),Ts&&await Yg.closeConnection();else{await Wg.generateNatsConfig(!0),rd?(Ui.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ti.restart(it.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ti.restart(it.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await wq.getHDBProcessInfo()).clustering.forEach(s=>{Ui.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await jN.async_set_timeout(3e3),await WN(),await Yg.updateLocalStreams(),Ts&&await Yg.closeConnection(),Ui.trace("Restart clustering restarting ingest and reply service threads");let t=zg(it.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=zg(it.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(Lq,"restartClustering");async function WN(){await Wg.removeNatsConfig(it.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Wg.removeNatsConfig(it.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(WN,"removeNatsConfig")});var Vq=P((wPe,$q)=>{"use strict";var NPe=require("lodash"),yn=(G(),D($)),{handleHDBError:vq,hdb_errors:ule}=he(),{HDB_ERROR_MSGS:dle,HTTP_STATUS_CODES:fle}=ule,JN=X();$q.exports={getRolePermissions:hle};var ml=Object.create(null),_le=a(e=>({key:e,perms:{}}),"perms_template_obj"),Hq=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),kq=a((e=!1,t=!1,r=!1,n=!1)=>({[yn.PERMS_CRUD_ENUM.READ]:e,[yn.PERMS_CRUD_ENUM.INSERT]:t,[yn.PERMS_CRUD_ENUM.UPDATE]:r,[yn.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),XN=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...kq(t,r,n,s)}),"table_perms_template"),Uq=a((e,t=kq())=>({attribute_name:e,describe:qq(t),[hh]:t[hh],[ZN]:t[ZN],[ew]:t[ew]}),"attr_perms_template"),xq=a((e,t=!1)=>({attribute_name:e,describe:t,[hh]:t}),"timestamp_attr_perms_template"),{READ:hh,INSERT:ZN,UPDATE:ew}=yn.PERMS_CRUD_ENUM,Fq=Object.values(yn.PERMS_CRUD_ENUM),Gq=[hh,ZN,ew];function hle(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[yn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(ml[t]&&ml[t].key===n)return ml[t].perms;let s=ple(e,r);return ml[t]?ml[t].key=n:ml[t]=_le(n),ml[t].perms=s,s}catch(r){if(!e[yn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[yn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<yn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw JN.error(n),JN.debug(r),vq(new Error,dle.OUTDATED_PERMS_TRANSLATION_ERROR,fle.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
27
+ ${r.stack}`;throw JN.error(n),vq(new Error)}}}a(hle,"getRolePermissions");function ple(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[yn.SYSTEM_SCHEMA_NAME]=n[yn.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]=mle(t[i]);return}r[i]=Hq(),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=Ele(c,l);r[i].describe||Fq.forEach(f=>{u[f]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=XN()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=XN()})}),r}a(ple,"translateRolePermissions");function mle(e){let t=Hq(!0);return Object.keys(e).forEach(r=>{t.tables[r]=XN(!0,!0,!0,!0,!0)}),t}a(mle,"createStructureUserPermissions");function Ele(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,f)=>{let{attribute_name:d}=f,h=f;return yn.TIME_STAMP_NAMES.includes(d)&&(h=xq(d,f[hh])),u[d]=h,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=Uq(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let f=i[u];f.describe=qq(f),s.attribute_permissions.push(f),c||gle(f,l)}else if(u!==o){let f;yn.TIME_STAMP_NAMES.includes(u)?f=xq(u):f=Uq(u),s.attribute_permissions.push(f)}}),c||s.attribute_permissions.push(l),s.describe=Bq(s),s}else return e.describe=Bq(e),e}a(Ele,"getTableAttrPerms");function Bq(e){return Fq.filter(t=>e[t]).length>0}a(Bq,"getSchemaTableDescribePerm");function qq(e){return Gq.filter(t=>e[t]).length>0}a(qq,"getAttributeDescribePerm");function gle(e,t){Gq.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(gle,"checkForHashPerms")});var ph={};Be(ph,{authentication:()=>Jq,bypassAuth:()=>Nle,login:()=>Ile,logout:()=>Cle,start:()=>wle});function Nle(){Qq=!0}async function Jq(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let _=e.isOperationsServer?Rle?Ale:[]:Tle?Sle:[];if(_.includes(i)||_.includes("*")){if(e.method==="OPTIONS"){let p=Jr.get(B.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",S=new mo([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return jg&&S.set("Access-Control-Allow-Credentials","true"),{status:200,headers:S}}o.push("Access-Control-Allow-Origin",i),jg&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(jg){i||(i=r.host);let _=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let S of p)if(S.startsWith(_)){let g=S.indexOf(";");l=S.slice(_.length,g===-1?S.length:g),u=await Kq.get(l);break}e.session=u||(u={})}let f=a((_,p,S)=>{let g=new id.AuthAuditLog(_,p,zo.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=S,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===xs.SUCCESS?tw.notify(g):tw.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&tw.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let _=e.mtlsConfig.user;_!==null?((_===void 0||_==="Common Name"||_==="CN")&&(_=e.peerCertificate.subject.CN),e.user=await Ke.getUser(_,null,e),f(_,xs.SUCCESS,"mTLS")):(0,id.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=El.get(n),!d){let _=n.indexOf(" "),p=n.slice(0,_),S=n.slice(_+1),g,R;try{switch(p){case"Basic":let E=atob(S),T=E.indexOf(":");g=E.slice(0,T),R=E.slice(T+1),d=g||R?await Ke.getUser(g,R,e):null;break;case"Bearer":try{d=await Fb(S)}catch(O){if(O.message==="invalid token")try{return await LE(S),c({status:-1})}catch{throw O}}break}}catch(E){return ble&&(El.get(S)||(El.set(S,S),f(g,xs.FAILURE,p))),c({status:401,body:oa({error:E.message},e)})}El.set(n,d),yle&&f(d.username,xs.SUCCESS,p)}e.user=d}else u?.user?e.user=await Ke.getUser(u.user,null,e):(Qq&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,Wq.getSuperUser)());jg&&(e.session.update=function(_){let p=Jr.get(B.AUTHENTICATION_COOKIE_EXPIRES);if(!l){l=(0,zq.v4)();let S=Jr.get(B.AUTHENTICATION_COOKIE_DOMAINS),g=p?new Date(Date.now()+(0,rw.convertToMS)(p)).toUTCString():Ole,R=S?.find(O=>r.host?.endsWith(O)),T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${g}; ${R?"Domain="+R+"; ":""}HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",T):h?.headers?.set&&h.headers.set("Set-Cookie",T)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):h?.headers?.set&&(i&&h.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),h.headers.set("X-Hdb-Session","Secure"))),_.id=l,Kq.put(_,{expiresAt:p?Date.now()+(0,rw.convertToMS)(p):void 0})},e.login=async function(_,p){let S=e.user=await Ke.authenticateUser(_,p,e);e.session.update({user:S&&(S.getId?.()??S.username)})});let h=await t(e);return h&&(h.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&us.loginPath?(h.status=302,h.headers.set("Location",us.loginPath(e))):h.headers.set("WWW-Authenticate","Basic")),c(h))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let f=l.headers;f||(l.headers=f=new mo);for(let d=0;d<u;){let h=o[d++];f.set(h,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function wle({server:e,port:t,securePort:r}){e.http(Jq,t||r?{port:t,securePort:r}:{port:"all"}),Yq||(Yq=!0,setInterval(()=>{El=new Map},Jr.get(B.AUTHENTICATION_CACHETTL)).unref(),jq.user.addListener(()=>{El=new Map}))}async function Ile(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 Cle(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Wq,zq,Jr,id,jq,rw,tw,Sle,Tle,Ale,Rle,Kq,jg,Qq,yle,ble,Ole,El,Yq,Qg=be(()=>{Wq=M(Gn());Dr();Jl();yu();Ue();zq=require("uuid"),Jr=M(ce());G();id=M(X()),jq=M(Zf());y_();rw=M(oe());eo();tw=(0,id.loggerWithTag)("auth-event");Jr.initSync();Sle=Jr.get(B.HTTP_CORSACCESSLIST),Tle=Jr.get(B.HTTP_CORS),Ale=Jr.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Rle=Jr.get(B.OPERATIONSAPI_NETWORK_CORS),Kq=_t({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),jg=Jr.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,Qq=process.env.AUTHENTICATION_AUTHORIZELOCAL??Jr.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,yle=Jr.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,ble=Jr.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Ole="Tue, 01 Oct 8307 19:33:20 GMT",El=new Map;Ke.onInvalidatedUser(()=>{El=new Map});a(Nle,"bypassAuth");a(Jq,"authentication");a(wle,"start");a(Ile,"login");a(Cle,"logout")});var s$=P((BPe,n$)=>{"use strict";var Ne=require("joi"),Xq=require("fs-extra"),Zq=require("path"),Qn=nt(),e$=ce(),t$=(G(),D($)),r$=X(),{hdb_errors:Ple}=he(),{HDB_ERROR_MSGS:Xr}=Ple,bo=/^[a-zA-Z0-9-_]+$/,Dle=/^[a-zA-Z0-9-_]+$/;n$.exports={getDropCustomFunctionValidator:Mle,setCustomFunctionValidator:vle,addComponentValidator:Hle,dropCustomFunctionProjectValidator:kle,packageComponentValidator:Fle,deployComponentValidator:Gle,setComponentFileValidator:Ule,getComponentFileValidator:Ble,dropComponentFileValidator:xle,addSSHKeyValidator:qle,updateSSHKeyValidator:$le,deleteSSHKeyValidator:Vle,setSSHKnownHostsValidator:Kle};function Jg(e,t,r){try{let n=e$.get(t$.CONFIG_PARAMS.COMPONENTSROOT),s=Zq.join(n,t);return Xq.existsSync(s)?e?t:r.message(Xr.PROJECT_EXISTS):e?r.message(Xr.NO_PROJECT):t}catch(n){return r$.error(n),r.message(Xr.VALIDATION_ERR)}}a(Jg,"checkProjectExists");function mh(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(mh,"checkFilePath");function Lle(e,t,r,n){try{let s=e$.get(t$.CONFIG_PARAMS.COMPONENTSROOT),i=Zq.join(s,e,t,r+".js");return Xq.existsSync(i)?r:n.message(Xr.NO_FILE)}catch(s){return r$.error(s),n.message(Xr.VALIDATION_ERR)}}a(Lle,"checkFileExists");function Mle(e){let t=Ne.object({project:Ne.string().pattern(bo).custom(Jg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(bo).custom(Lle.bind(null,e.project,e.type)).custom(mh).required().messages({"string.pattern.base":Xr.BAD_FILE_NAME})});return Qn.validateBySchema(e,t)}a(Mle,"getDropCustomFunctionValidator");function vle(e){let t=Ne.object({project:Ne.string().pattern(bo).custom(Jg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(mh).required(),function_content:Ne.string().required()});return Qn.validateBySchema(e,t)}a(vle,"setCustomFunctionValidator");function Ule(e){let t=Ne.object({project:Ne.string().pattern(bo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Ne.string().custom(mh).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Qn.validateBySchema(e,t)}a(Ule,"setComponentFileValidator");function xle(e){let t=Ne.object({project:Ne.string().pattern(bo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Ne.string().custom(mh).optional()});return Qn.validateBySchema(e,t)}a(xle,"dropComponentFileValidator");function Ble(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(mh).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Qn.validateBySchema(e,t)}a(Ble,"getComponentFileValidator");function Hle(e){let t=Ne.object({project:Ne.string().pattern(bo).custom(Jg.bind(null,!1)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return Qn.validateBySchema(e,t)}a(Hle,"addComponentValidator");function kle(e){let t=Ne.object({project:Ne.string().pattern(bo).custom(Jg.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return Qn.validateBySchema(e,t)}a(kle,"dropCustomFunctionProjectValidator");function Fle(e){let t=Ne.object({project:Ne.string().pattern(bo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean(),skip_symlinks:Ne.boolean()});return Qn.validateBySchema(e,t)}a(Fle,"packageComponentValidator");function Gle(e){let t=Ne.object({project:Ne.string().pattern(bo).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),package:Ne.string().optional(),restart:Ne.alternatives().try(Ne.boolean(),Ne.string().valid("rolling")).optional()});return Qn.validateBySchema(e,t)}a(Gle,"deployComponentValidator");function qle(e){let t=Ne.object({name:Ne.string().pattern(Dle).required().messages({"string.pattern.base":Xr.BAD_SSH_KEY_NAME}),key:Ne.string().required(),host:Ne.string().required(),hostname:Ne.string().required(),known_hosts:Ne.string().optional()});return Qn.validateBySchema(e,t)}a(qle,"addSSHKeyValidator");function $le(e){let t=Ne.object({name:Ne.string().required(),key:Ne.string().required()});return Qn.validateBySchema(e,t)}a($le,"updateSSHKeyValidator");function Vle(e){let t=Ne.object({name:Ne.string().required()});return Qn.validateBySchema(e,t)}a(Vle,"deleteSSHKeyValidator");function Kle(e){let t=Ne.object({known_hosts:Ne.string().required()});return Qn.validateBySchema(e,t)}a(Kle,"setSSHKnownHostsValidator")});var Sh=P((kPe,l$)=>{"use strict";var Xg=require("joi"),Da=require("path"),od=require("fs-extra"),{exec:Yle,spawn:Wle}=require("child_process"),zle=require("util"),jle=zle.promisify(Yle),ad=(G(),D($)),{PACKAGE_ROOT:Qle}=Et(),{handleHDBError:Eh,hdb_errors:Jle}=he(),{HTTP_STATUS_CODES:gh}=Jle,gl=ce(),Xle=nt(),La=X(),{once:Zle}=require("events");gl.initSync();var nw=gl.get(ad.CONFIG_PARAMS.COMPONENTSROOT),i$="npm install --force --omit=dev --json",eue=`${i$} --dry-run`,tue=gl.get(ad.CONFIG_PARAMS.ROOTPATH),Zg=Da.join(tue,"ssh");l$.exports={installModules:iue,auditModules:oue,installAllRootModules:rue,uninstallRootModule:nue,linkHarperdb:sue,runCommand:cd};async function rue(e=!1,t=gl.get(ad.CONFIG_PARAMS.ROOTPATH)){await eS();let r=!1,n=process.env;od.pathExistsSync(Zg)&&od.readdirSync(Zg).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+Da.join(Zg,"config")+" -o UserKnownHostsFile="+Da.join(Zg,"known_hosts"),...process.env},r=!0)});try{let s=gl.get(ad.CONFIG_PARAMS.ROOTPATH),i=Da.join(s,"node_modules","harperdb");od.lstatSync(i).isSymbolicLink()&&od.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&La.error("Error removing symlink:",s)}await cd(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}a(rue,"installAllRootModules");async function nue(e){await cd(`npm uninstall ${e}`,gl.get(ad.CONFIG_PARAMS.ROOTPATH))}a(nue,"uninstallRootModule");async function sue(){await eS(),await cd(`npm link ${Qle}`,gl.get(ad.CONFIG_PARAMS.ROOTPATH))}a(sue,"linkHarperdb");async function cd(e,t=void 0,r=process.env){La.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=Wle(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();La.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();La.error({tagName:"npm_run_command:stderr"},l),i+=l});let[o]=await Zle(n,"close");if(o!==0)throw new Error(`Command \`${e}\` exited with code ${o}.${i===""?"":` Error: ${i}`}`);return s||void 0}a(cd,"runCommand");async function iue(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";La.warn(t,e.projects);let r=c$(e);if(r)throw Eh(r,r.message,gh.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?eue:i$;await eS(),await a$(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let f=Da.join(nw,u),d,h=null;try{let{stdout:_,stderr:p}=await jle(i,{cwd:f});d=_?_.replace(`
28
+ `,""):null,h=p?p.replace(`
29
+ `,""):null}catch(_){_.stderr?o[u].npm_error=o$(_.stderr):o[u].npm_error=_.message;continue}try{o[u].npm_output=JSON.parse(d)}catch{o[u].npm_output=d}try{o[u].npm_error=JSON.parse(h)}catch{o[u].npm_error=h}}return La.info(`finished installModules with response ${o}`),o.warning=t,o}a(iue,"installModules");function o$(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
30
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(o$,"parseNPMStdErr");async function oue(e){La.info(`starting auditModules for request: ${e}`);let t=c$(e);if(t)throw Eh(t,t.message,gh.BAD_REQUEST);let{projects:r}=e;await eS(),await a$(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Da.join(nw,o);n[o]={npm_output:null,npm_error:null};try{let l=await cd("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=o$(l.stderr)}}return La.info(`finished auditModules with response ${n}`),n}a(oue,"auditModules");async function eS(){return await cd("npm -v"),!0}a(eS,"checkNPMInstalled");async function a$(e){if(!Array.isArray(e)||e.length===0)throw Eh(new Error,"projects argument must be an array with at least 1 element",gh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Da.join(nw,i.toString());if(!await od.pathExists(o)){t.push(i);continue}let l=Da.join(o,"package.json");await od.pathExists(l)||r.push(i)}if(t.length>0)throw Eh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,gh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Eh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,gh.BAD_REQUEST,void 0,void 0,!0)}a(a$,"checkProjectPaths");function c$(e){let t=Xg.object({projects:Xg.array().min(1).items(Xg.string()).required(),dry_run:Xg.boolean().default(!1)});return Xle.validateBySchema(e,t)}a(c$,"modulesValidator")});var iw=P((GPe,p$)=>{"use strict";var As=require("fs-extra"),Ah=require("path"),Th=X(),u$=oe(),{PACKAGE_ROOT:aue}=Et(),sw=(G(),D($)),h$=ce(),cue=wt();p$.exports=lue;async function lue(){let e=uue(),t=h$.get(sw.CONFIG_PARAMS.ROOTPATH),r=Ah.join(t,"package.json"),n={dependencies:{harperdb:"file:"+aue}},s=Ah.join(t,"node_modules");As.ensureDirSync(s);let i,o=!0,c=!1;try{i=As.readJsonSync(r)}catch(l){if(u$.isEmptyOrZeroLength(e))return;if(l.code!==sw.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!u$.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let f=f$(u);n.dependencies[l]=f+u}if(!o){Th.notify("Installing components"),await _$(r,n,null),await d$(t,e);return}for(let{name:l,package:u}of e){let f=i.dependencies[l],d=f$(u);if(f===void 0||f!==d+u){c=!0;break}if(u.startsWith("file:"))try{if(As.statSync(new URL(u+"/package.json")).mtimeMs>As.statSync(r).mtimeMs){c=!0;break}}catch(h){Th.info(`Error checking ${u}/package.json modification time`,h);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Th.notify("Removing component",l),c=!0);c&&(Th.notify("Updating components."),await _$(r,n,i),await d$(t,e))}a(lue,"installComponents");function d$(e,t){return Promise.all(t.map(({name:r})=>{let n=Ah.join(e,"node_modules",r),s=Ah.join(e,"components",r);if(As.existsSync(n)&&As.lstatSync(n).isDirectory())return As.move(n,s,{overwrite:!0}).then(()=>{As.symlink(s,n)})}))}a(d$,"moveModuleToComponents");function uue(){let e=cue.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(uue,"getComponentsConfig");function f$(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Ah.extname(e)||As.existsSync(e)?"file:":"github:"}a(f$,"getPkgPrefix");async function _$(e,t,r){Th.trace("npm installing components package.json",t),As.writeFileSync(e,JSON.stringify(t,null," "));try{await Sh().installAllRootModules(h$.get(sw.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?As.writeFileSync(e,JSON.stringify(r,null," ")):As.unlinkSync(e),n}}a(_$,"installPackages")});var S$={};Be(S$,{packageDirectory:()=>due});function due(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];E$.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,m$.join)("cache","webpack")):void 0}).pipe((0,g$.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var m$,E$,g$,T$=be(()=>{m$=require("path"),E$=M(require("tar-fs")),g$=require("node:zlib");a(due,"packageDirectory")});var cw=P(b$=>{"use strict";var Oe=require("fs-extra"),ow=require("fast-glob"),we=require("path"),fue=require("tar-fs"),_ue=require("gunzip-maybe"),aw=require("normalize-path"),bn=s$(),Gt=X(),lt=(G(),D($)),Jt=ce(),tS=wt(),hue=oe(),{PACKAGE_ROOT:pue}=Et(),{handleHDBError:qt,hdb_errors:mue}=he(),{basename:Eue}=require("path"),gue=iw(),R$=ce(),{Readable:Sue}=require("stream"),{isMainThread:Tue}=require("worker_threads"),{HDB_ERROR_MSGS:Sl,HTTP_STATUS_CODES:$t}=mue,y$=st(),{replicateOperation:ri}=(ps(),D(Aa)),{packageDirectory:Aue}=(T$(),D(S$)),A$=Sh(),Rue=we.join(pue,"application-template"),yue=Jt.get(lt.CONFIG_PARAMS.ROOTPATH),Ma=we.join(yue,"ssh"),Oo=we.join(Ma,"known_hosts");function bue(){Gt.trace("getting custom api status");let e={};try{e={port:Jt.get(lt.CONFIG_PARAMS.HTTP_PORT),directory:Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw qt(new Error,Sl.FUNCTION_STATUS,$t.INTERNAL_SERVER_ERROR,Gt.ERR,t)}return e}a(bue,"customFunctionsStatus");function Oue(){Gt.trace("getting custom api endpoints");let e={},t=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT);try{ow.sync(aw(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:ow.sync(aw(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:ow.sync(aw(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw qt(new Error,Sl.GET_FUNCTIONS,$t.INTERNAL_SERVER_ERROR,Gt.ERR,r)}return e}a(Oue,"getCustomFunctions");function Nue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=bn.getDropCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("getting custom api endpoint file content");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=we.join(r,n,s,i+".js");try{return Oe.readFileSync(o,{encoding:"utf8"})}catch(c){throw qt(new Error,Sl.GET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(Nue,"getCustomFunction");async function wue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=bn.setCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("setting custom function file content");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Oe.outputFileSync(we.join(r,n,s,i+".js"),o);let c=await ri(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw qt(new Error,Sl.SET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(wue,"setCustomFunction");async function Iue(e){e.project&&(e.project=we.parse(e.project).name),e.file&&(e.file=we.parse(e.file).name);let t=bn.getDropCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("dropping custom function file");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Oe.unlinkSync(we.join(r,n,s,i+".js"));let o=await ri(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw qt(new Error,Sl.DROP_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,o)}}a(Iue,"dropCustomFunction");async function Cue(e){e.project&&(e.project=we.parse(e.project).name);let t=bn.addComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("adding component");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=we.join(r,n);Oe.mkdirSync(s,{recursive:!0}),Oe.copySync(Rue,s);let i=await ri(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw qt(new Error,Sl.ADD_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,s)}}a(Cue,"addComponent");async function Pue(e){e.project&&(e.project=we.parse(e.project).name);let t=bn.dropCustomFunctionProjectValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("dropping custom function project");let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Jt.get(lt.CONFIG_PARAMS.APPS);if(!hue.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return tS.updateConfigValue(lt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=we.join(r,n);Oe.rmSync(i,{recursive:!0});let o=await ri(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw qt(new Error,Sl.DROP_FUNCTION_PROJECT,$t.INTERNAL_SERVER_ERROR,Gt.ERR,i)}}a(Pue,"dropCustomFunctionProject");async function Due(e){e.project&&(e.project=we.parse(e.project).name);let t=bn.packageComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Gt.trace("packaging component",n);let s;try{s=await Oe.realpath(we.join(r,n))}catch(o){if(o.code!==lt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Oe.realpath(we.join(Jt.get(lt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===lt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await Aue(s,e)).toString("base64");return{project:n,payload:i}}a(Due,"packageComponent");async function Lue(e){e.project?e.project=we.parse(e.project).name:e.package&&(e.project=Mue(e.package));let t=bn.deployComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(Gt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=we.join(r,n),i="file:"+c,await Oe.emptyDir(c);let S=Sue.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((E,T)=>{S.pipe(_ue()).pipe(fue.extract(c,{finish:E})).on("error",T)});let g=await Oe.readdir(c);g.length===1&&g[0]==="package"&&(await Oe.copy(we.join(c,"package"),c),await Oe.remove(we.join(c,"package")));let R=we.join(c,"node_modules");o?await A$.runCommand(o,c):Oe.existsSync(R)||await A$.installAllRootModules(!1,c)}else{await tS.addConfig(n,{package:i}),await gue();let S=R$.get(lt.CONFIG_PARAMS.ROOTPATH);c=we.join(S,"node_modules",n)}if(Tue)return;let l=new Map;l.isWorker=!0;let u=(yh(),D(Rh)),f;u.setErrorReporter(S=>f=S);let d=Eue(c),h=u.component_errors.get(d);try{await u.loadComponent(c,l)}finally{u.component_errors.set(d,h)}if(f)throw f;Gt.info("Installed component");let _=e.restart==="rolling";e.restart=_?!1:e.restart;let p=await ri(e);if(e.restart===!0)y$.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(_){let g=await lw().executeJob({operation:"restart_service",service:"http",replicated:!0});p.restartJobId=g.job_id,p.message=`Successfully deployed: ${n}, restarting HarperDB`}else p.message=`Successfully deployed: ${n}`;return p}a(Lue,"deployComponent");function Mue(e){if(e.startsWith("git+ssh://"))return we.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return we.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Oe.readFileSync(we.join(e,"package.json"),"utf8"));return we.basename(t)}catch{}return we.basename(e)}a(Mue,"getProjectNameFromPackage");async function vue(){let e=a(async(s,i)=>{try{let o=await Oe.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=we.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let f={name:l,entries:[]};i.entries.push(f),await e(u,f)}else{let f=await Oe.stat(u),d={name:we.basename(l),mtime:f.mtime,size:f.size};i.entries.push(d)}}return i}catch(o){return Gt.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),{name:Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT).split(we.sep).slice(-1).pop(),entries:[]}),n=(yh(),D(Rh)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(vue,"getComponents");async function Uue(e){let t=bn.getComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let n=tS.getConfigObj()[e.project]||e.project==="harperdb"?we.join(R$.get(lt.CONFIG_PARAMS.ROOTPATH),"node_modules"):Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Oe.stat(we.join(n,e.project,e.file));return{message:await Oe.readFile(we.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===lt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${we.join(e.project,e.file)}'`):i}}a(Uue,"getComponentFile");async function xue(e){let t=bn.setComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=we.join(Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Oe.ensureFile(n),await Oe.outputFile(n,e.payload,r)):await Oe.ensureDir(n);let s=await ri(e);return s.message="Successfully set component: "+e.file,s}a(xue,"setComponentFile");async function Bue(e){let t=bn.dropComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?we.join(r,n):r,i=we.join(Jt.get(lt.CONFIG_PARAMS.COMPONENTSROOT),s),o=we.join(Jt.get(lt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Oe.pathExists(o)&&await Oe.unlink(o),await Oe.pathExists(i)&&await Oe.remove(i);let c=we.join(Jt.get(lt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Oe.pathExists(c)){let u=JSON.parse(await Oe.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Oe.writeFile(c,JSON.stringify(u,null,2),"utf8")}tS.deleteConfigFromFile([r]);let l=await ri(e);return e.restart===!0?(y$.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(Bue,"dropComponent");async function Hue(e){let t=bn.addSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Gt.trace("adding ssh key",r);let c=we.join(Ma,r+".key"),l=we.join(Ma,"config");if(await Oe.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Oe.outputFile(c,n),await Oe.chmod(c,"0600");let u=`#${r}
31
31
  Host ${s}
32
32
  HostName ${i}
33
33
  User git
34
34
  IdentityFile ${c}
35
35
  IdentitiesOnly yes`;await Oe.pathExists(l)?await Oe.appendFile(l,`
36
36
  `+u):await Oe.outputFile(l,u);let f="";if(await Oe.pathExists(Oo)||(await Oe.writeFile(Oo,""),await Oe.chmod(Oo,"0600")),i=="github.com"&&!(await Oe.readFile(Oo,"utf8")).includes("github.com"))try{let S=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of S)Oe.appendFile(Oo,"github.com "+g+`
37
- `)}catch{f=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Oe.appendFile(Oo,o);let d=await ri(e);return d.message=`Added ssh key: ${r}${f}`,d}a(Bue,"addSSHKey");async function Hue(e){let t=bn.updateSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r,key:n}=e;Gt.trace("updating ssh key",r);let s=we.join(Ma,r+".key");if(!await Oe.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Oe.outputFile(s,n);let i=await ri(e);return i.message=`Updated ssh key: ${r}`,i}a(Hue,"updateSSHKey");async function kue(e){let t=bn.deleteSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r}=e;Gt.trace("deleting ssh key",r);let n=we.join(Ma,r+".key"),s=we.join(Ma,"config");if(!await Oe.pathExists(n))throw new Error("Key does not exist");let i=await Oe.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Oe.outputFile(s,i),Oe.removeSync(n);let c=await ri(e);return c.message=`Deleted ssh key: ${r}`,c}a(kue,"deleteSSHKey");async function Fue(e){let t=[];return await Oe.pathExists(Ma)&&(await Oe.readdir(Ma)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(Fue,"listSSHKeys");async function Gue(e){let t=bn.setSSHKnownHostsValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{known_hosts:r}=e;await Oe.outputFile(Oo,r);let n=await ri(e);return n.message="Known hosts successfully set",n}a(Gue,"setSSHKnownHosts");async function que(e){return await Oe.pathExists(Oo)?{known_hosts:await Oe.readFile(Oo,"utf8")}:{known_hosts:null}}a(que,"getSSHKnownHosts");Object.assign(O$,{customFunctionsStatus:yue,getCustomFunctions:bue,getCustomFunction:Oue,setCustomFunction:Nue,dropCustomFunction:wue,addComponent:Iue,dropCustomFunctionProject:Cue,packageComponent:Pue,deployComponent:Due,getComponents:Mue,getComponentFile:vue,setComponentFile:Uue,dropComponent:xue,addSSHKey:Bue,updateSSHKey:Hue,deleteSSHKey:kue,listSSHKeys:Fue,setSSHKnownHosts:Gue,getSSHKnownHosts:que})});var uw=P((KPe,w$)=>{"use strict";var Rs=require("joi"),N$=nt();w$.exports={readTransactionLogValidator:$ue,deleteTransactionLogsBeforeValidator:Vue};function $ue(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),from:Rs.date().timestamp(),to:Rs.date().timestamp(),limit:Rs.number().min(1)});return N$.validateBySchema(e,t)}a($ue,"readTransactionLogValidator");function Vue(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),timestamp:Rs.date().timestamp().required()});return N$.validateBySchema(e,t)}a(Vue,"deleteTransactionLogsBeforeValidator")});var sS=P((WPe,M$)=>{"use strict";var dw=(G(),D($)),Oh=Er(),I$=oe(),C$=ce(),P$=lo(),D$=X(),{handleHDBError:rS,hdb_errors:Kue}=he(),{HTTP_STATUS_CODES:nS}=Kue,{readTransactionLogValidator:Yue,deleteTransactionLogsBeforeValidator:Wue}=uw(),L$=Fn(),zue="Logs successfully deleted from transaction log.",Que="All logs successfully deleted from transaction log.";M$.exports={readTransactionLog:jue,deleteTransactionLogsBefore:Xue};async function jue(e){let t=Yue(e);if(t)throw rS(t,t.message,nS.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=I$.checkSchemaTableExist(e.database,e.table);if(r)throw rS(new Error,r,nS.NOT_FOUND,void 0,void 0,!0);return C$.get(dw.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Jue(e):(D$.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)),L$.readAuditLog(e))}a(jue,"readTransactionLog");async function*Jue(e){let t=P$.createNatsTableStreamName(e.database,e.table),r=await Oh.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===dw.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(Jue,"readTransactionLogNats");async function Xue(e){let t=Wue(e);if(t)throw rS(t,t.message,nS.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!C$.get(dw.CONFIG_PARAMS.CLUSTERING_ENABLED))return D$.info("Delete transaction logs called for Plexus"),L$.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=I$.checkSchemaTableExist(r,n);if(i)throw rS(new Error,i,nS.NOT_FOUND,void 0,void 0,!0);let o=P$.createNatsTableStreamName(r,n),{jsm:c}=await Oh.getNATSReferences(),l=await Oh.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let f=zue,d,h=new Date(l.state.last_ts).getTime();return s>h?(d=l.state.last_seq+1,f=Que):d=(await Oh.viewStream(o,parseInt(s),1))[0].nats_sequence,await Oh.purgeTableStream(r,n,{seq:d}),f}a(Xue,"deleteTransactionLogsBefore")});var U$=P((QPe,v$)=>{"use strict";var fw=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}};v$.exports=fw});var B$=P((JPe,x$)=>{"use strict";var _w=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};x$.exports=_w});var mw=P((ZPe,k$)=>{"use strict";var H$=U$(),Zue=B$(),{HDB_ERROR_MSGS:ede}=Dn(),hw=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=ede.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 H$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Zue(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 H$(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};k$.exports=hw});var cS=P((nDe,rV)=>{"use strict";var pw=gn(),iS=Vr(),ys=mg(),Ih=uo(),Ew=Uc(),tde=HO(),rde=SF(),Ch=Gn(),oS=h_(),gr=X(),nde=$O(),sde=wg(),ide=hN(),ode=Cg(),ade=EN(),cde=gN(),lde=AN(),ude=yN(),gw=vg(),No=oe(),dde=JG(),Sw=xN(),q$=rd(),Zr=(G(),D($)),$$=Kq(),fde=Vu(),V$=(yu(),D(w_)),K$=(jg(),D(ph)),Y$=wt(),cr=cw(),_de=require("alasql"),W$=sS(),z$=Th(),cd=Zs(),Q$=(ll(),D(cl)),j$=mw(),{handleHDBError:On,hdb_errors:J$}=he(),{addNodeBack:tDe,removeNodeBack:rDe}=(ll(),D(cl)),{HDB_ERROR_MSGS:Br,HTTP_STATUS_CODES:Nh}=J$,Z=new Map,X$="delete",va="insert",wo="read",Tl="update",wh="describe",F$=Ih.describeSchema.name,G$=Ih.describeTable.name,Z$={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},hde={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},mde="catchup",pde="handleGetJob",Ede="handleGetJobsByStartDate",aS={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},gde=[ys.createTable.name,ys.createAttribute.name,ys.dropTable.name,ys.dropAttribute.name],eV={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(pw.insert.name,new re(!1,[va]));Z.set(pw.update.name,new re(!1,[Tl]));Z.set(pw.upsert.name,new re(!1,[va,Tl]));Z.set(iS.searchByConditions.name,new re(!1,[wo]));Z.set(iS.searchByHash.name,new re(!1,[wo]));Z.set(iS.searchByValue.name,new re(!1,[wo]));Z.set(iS.search.name,new re(!1,[wo]));Z.set(ys.createSchema.name,new re(!0,[]));Z.set(ys.createTable.name,new re(!0,[]));Z.set(ys.createAttribute.name,new re(!1,[va]));Z.set(ys.dropSchema.name,new re(!0,[]));Z.set(ys.dropTable.name,new re(!0,[]));Z.set(ys.dropAttribute.name,new re(!0,[]));Z.set(Ih.describeSchema.name,new re(!1,[wo]));Z.set(Ih.describeTable.name,new re(!1,[wo]));Z.set(Ew.deleteRecord.name,new re(!1,[X$]));Z.set(Ch.addUser.name,new re(!0,[]));Z.set(Ch.alterUser.name,new re(!0,[]));Z.set(Ch.dropUser.name,new re(!0,[]));Z.set(Ch.listUsersExternal.name,new re(!0,[]));Z.set(oS.listRoles.name,new re(!0,[]));Z.set(oS.addRole.name,new re(!0,[]));Z.set(oS.alterRole.name,new re(!0,[]));Z.set(oS.dropRole.name,new re(!0,[]));Z.set(nde.name,new re(!0,[]));Z.set(sde.name,new re(!0,[]));Z.set(ide.name,new re(!0,[]));Z.set(ode.name,new re(!0,[]));Z.set(ade.name,new re(!0,[]));Z.set(cde.name,new re(!0,[]));Z.set(gw.setRoutes.name,new re(!0,[]));Z.set(gw.getRoutes.name,new re(!0,[]));Z.set(gw.deleteRoutes.name,new re(!0,[]));Z.set(Y$.setConfiguration.name,new re(!0,[]));Z.set(lde.clusterStatus.name,new re(!0,[]));Z.set(ude.name,new re(!0,[]));Z.set(Sw.getFingerprint.name,new re(!0,[]));Z.set(Sw.setLicense.name,new re(!0,[]));Z.set(Ew.deleteFilesBefore.name,new re(!0,[]));Z.set(Ew.deleteAuditLogsBefore.name,new re(!0,[]));Z.set(q$.restart.name,new re(!0,[]));Z.set(q$.restartService.name,new re(!0,[]));Z.set(tde.name,new re(!0,[]));Z.set(rde.name,new re(!0,[wo]));Z.set(fde.systemInformation.name,new re(!0,[]));Z.set(Y$.getConfiguration.name,new re(!0,[]));Z.set(W$.readTransactionLog.name,new re(!0,[]));Z.set(W$.deleteTransactionLogsBefore.name,new re(!0,[]));Z.set(z$.installModules.name,new re(!0,[]));Z.set(z$.auditModules.name,new re(!0,[]));Z.set(cd.createCsr.name,new re(!0,[]));Z.set(cd.signCertificate.name,new re(!0,[]));Z.set(cd.listCertificates.name,new re(!0,[]));Z.set(cd.addCertificate.name,new re(!0,[]));Z.set(cd.removeCertificate.name,new re(!0,[]));Z.set(cd.getKey.name,new re(!0,[]));Z.set(Q$.addNodeBack.name,new re(!0,[]));Z.set(Q$.removeNodeBack.name,new re(!0,[]));Z.set(V$.createTokens.name,new re(!1,[]));Z.set(V$.refreshOperationToken.name,new re(!1,[]));Z.set(K$.login.name,new re(!1,[]));Z.set(K$.logout.name,new re(!1,[]));Z.set(cr.customFunctionsStatus.name,new re(!0,[]));Z.set(cr.getCustomFunctions.name,new re(!0,[]));Z.set(cr.getComponents.name,new re(!0,[]));Z.set(cr.getComponentFile.name,new re(!0,[]));Z.set(cr.setComponentFile.name,new re(!0,[]));Z.set(cr.dropComponent.name,new re(!0,[]));Z.set(cr.getCustomFunction.name,new re(!0,[]));Z.set(cr.setCustomFunction.name,new re(!0,[]));Z.set(cr.dropCustomFunction.name,new re(!0,[]));Z.set(cr.addComponent.name,new re(!0,[]));Z.set(cr.dropCustomFunctionProject.name,new re(!0,[]));Z.set(cr.packageComponent.name,new re(!0,[]));Z.set(cr.deployComponent.name,new re(!0,[]));Z.set(cr.addSSHKey.name,new re(!0,[]));Z.set(cr.updateSSHKey.name,new re(!0,[]));Z.set(cr.deleteSSHKey.name,new re(!0,[]));Z.set(cr.listSSHKeys.name,new re(!0,[]));Z.set(cr.setSSHKnownHosts.name,new re(!0,[]));Z.set(cr.getSSHKnownHosts.name,new re(!0,[]));Z.set(Sw.getRegistrationInfo.name,new re(!1,[]));Z.set(Ch.userInfo.name,new re(!1,[]));Z.set(Ih.describeAll.name,new re(!1,[]));Z.set(pde,new re(!1,[]));Z.set(Ede,new re(!0,[]));Z.set(mde,new re(!0,[]));Z.set(aS.CSV_DATA_LOAD,new re(!1,[va,Tl]));Z.set(aS.CSV_URL_LOAD,new re(!1,[va,Tl]));Z.set(aS.CSV_FILE_LOAD,new re(!1,[va,Tl]));Z.set(aS.IMPORT_FROM_S3,new re(!1,[va,Tl]));Z.set(eV.EXPORT_TO_S3,new re(!0,[]));Z.set(eV.EXPORT_LOCAL,new re(!0,[]));Z.set(Zr.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[X$]));Z.set(Zr.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[wo]));Z.set(Zr.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[va]));Z.set(Zr.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[Tl]));rV.exports={verifyPerms:Tde,verifyPermsAst:Sde,verifyBulkLoadAttributePerms:Rde};function Sde(e,t,r){if(No.isEmptyOrZeroLength(e))throw gr.info("verify_perms_ast has an empty user parameter"),On(new Error);if(No.isEmptyOrZeroLength(t))throw gr.info("verify_perms_ast has an empty user parameter"),On(new Error);if(No.isEmptyOrZeroLength(r))throw gr.info("verify_perms_ast has a null operation parameter"),On(new Error);try{let n=new j$,s=new dde(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw gr.info("No schemas defined in verifyPermsAst(), will not continue."),On(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&Z$[r])throw On(new Error,Br.DROP_SYSTEM,Nh.FORBIDDEN);if(c&&!l)return null;let u=$$.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof _de.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let d=0;d<i.length;d++){let h=s.getTablesBySchemaName(i[d]);h&&o.set(i[d],h)}let f=tV(t,r,o,n);return f||(o.forEach((d,h)=>{for(let _=0;_<d.length;_++){let m=s.getAttributesBySchemaTableName(h,d[_]),S=Aw(t.role.permission,h,d[_]);Tw(m,S,r,d[_],h,n)}}),n.getPermsResponse())}catch(n){throw On(n)}}a(Sde,"verifyPermsAst");function Tde(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw gr.info("null required parameter in verifyPerms"),On(new Error,Br.DEFAULT_INVALID_REQUEST,Nh.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 j$;if(No.isEmptyOrZeroLength(e.hdb_user?.role)||No.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return gr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Br.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,f=o.has(Zr.SYSTEM_SCHEMA_NAME)||s===Zr.SYSTEM_SCHEMA_NAME;if(l&&f&&hde[e.operation]&&(i===Zr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(f&&Z$[r])throw On(new Error,Br.DROP_SYSTEM,Nh.FORBIDDEN);if(l&&!f||u===!0&&(r===ys.createSchema.name||r===ys.dropSchema.name))return null;if(gde.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 d=$$.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),(r===F$||r===G$)&&!d.super_user){if(s===Zr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Br.SCHEMA_PERM_ERROR(s));if(r===F$&&(!d[s]||!d[s][wh]))return c.handleInvalidItem(Br.SCHEMA_NOT_FOUND(s));if(r===G$&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][wh]))return c.handleInvalidItem(Br.TABLE_NOT_FOUND(s,i))}let h=tV(e.hdb_user,r,o,c,n);if(h)return h;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Zr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],g=d[s].tables[i];g[Zr.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(E=>E[Zr.PERMS_CRUD_ENUM.READ]).forEach(E=>{S.push(E.attribute_name)}):S=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=S)}let _=Ade(e),m=Aw(e.hdb_user?.role?.permission,s,i);return Tw(_,m,r,i,s,c,n),c.getPermsResponse()}a(Tde,"verifyPerms");function tV(e,t,r,n,s){if(No.arrayHasEmptyValues([e,t,r]))throw gr.info("hasPermissions has an invalid parameter"),On(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||Z.get(t).requires_su))return null;if(!Z.get(t))throw gr.info(`operation ${t} not found.`),On(new Error,Br.OP_NOT_FOUND(t),Nh.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return gr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Br.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][wh]===!1){n.addInvalidItem(Br.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Br.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let f of u){let d=o[l].tables[f];if(!d||d[wh]===!1)n.addInvalidItem(Br.TABLE_NOT_FOUND(l,f));else try{let h=[],_=Z.get(t).perms;!No.isEmpty(s)&&_.includes(s)&&(_=[s]);for(let m=0;m<_.length;m++){let S=_[m],g=d[S];(g==null||g===!1)&&(gr.info(`Required ${S} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),h.push(S))}h.length>0&&n.addUnauthorizedTable(l,f,h)}catch(h){let _=Br.UNKNOWN_OP_AUTH_ERROR(t,l,f);throw gr.error(_),gr.error(h),On(J$.CHECK_LOGS_WRAPPER(_))}}}return r.size<2?n.getPermsResponse():null}a(tV,"hasPermissions");function Tw(e,t,r,n,s,i,o){if(!e||!t)throw gr.info("no attributes specified in checkAttributePerms."),On(new Error);let c=Z.get(r).perms;if(!c||c==="")throw gr.info(`no permissions found for ${r} in checkAttributePerms().`),On(new Error);if(No.isEmptyOrZeroLength(t))return gr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let f of e){let d=t.get(f);if(d){if(d[wh]===!1){i.addInvalidItem(Br.ATTR_NOT_FOUND(s,n,f),s,n);continue}if(c)for(let h of c){if(Zr.TIME_STAMP_NAMES.includes(d.attribute_name)&&h!==wo)throw On(new Error,Br.SYSTEM_TIMESTAMP_PERMS_ERR,Nh.FORBIDDEN);d[h]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(h):l[d.attribute_name]=[h])}}else i.addInvalidItem(Br.ATTR_NOT_FOUND(s,n,f),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(Tw,"checkAttributePerms");function Ade(e){let t=new Set;try{if(e.action)return t;if(e.operation===Zr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){gr.info(r)}return t}a(Ade,"getRecordAttributes");function Aw(e,t,r){let n=new Map;if(No.isEmpty(e))return gr.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{gr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(Aw,"getAttributePermissions");function Rde(e,t,r,n,s,i,o){let c=new Set(i),l=Aw(e,n,s);Tw(c,l,t,s,n,o,r)}a(Rde,"verifyBulkLoadAttributePerms")});var uS=P((iDe,aV)=>{"use strict";aV.exports={evaluateSQL:Ude,processAST:oV,convertSQLToAST:iV,checkASTPermissions:sV};var yde=gn(),nV=require("util"),bde=nV.callbackify(yde.insert),Ode=Vr().search,Nde=oH().update,wde=nV.callbackify(Nde),Ide=cH().convertDelete,Ua=require("alasql"),Cde=cS(),lS=X(),Pde=Mp(),Dde=oe(),Ph=(G(),D($)),{hdb_errors:Lde,handleHDBError:Rw}=he(),{HTTP_STATUS_CODES:yw}=Lde;Pde(Ua);var Mde=403,vde="There was a problem performing this insert. Please check the logs and try again.",bw=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Ude(e,t){let r=e.parsed_sql_object;if(!r){r=iV(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ua.yy.Insert?n=s.into.databaseid:s instanceof Ua.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ua.yy.Update||s instanceof Ua.yy.Delete?n=s.table.databaseid:lS.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ua.yy.Select)&&Dde.isEmptyOrZeroLength(n))return t("No schema specified",null)}oV(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Ude,"evaluateSQL");function sV(e,t){let r;try{r=Cde.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(sV,"checkASTPermissions");function iV(e){let t=new bw;if(!e)throw Rw(new Error,"The 'sql' parameter is missing from the request body",yw.BAD_REQUEST);try{let r=e.trim(),n=Ua.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
38
- `);throw n[1]?Rw(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,yw.BAD_REQUEST):Rw(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",yw.BAD_REQUEST)}return t}a(iV,"convertSQLToAST");function oV(e,t,r){try{let n=xde;if(!e.bypass_auth&&!t.permissions_checked){let i=sV(e,t);if(i&&i.length>0)return r(Mde,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ph.VALID_SQL_OPS_ENUM.SELECT:n=Ode,s=t.ast.statements[0];break;case Ph.VALID_SQL_OPS_ENUM.INSERT:n=Bde;break;case Ph.VALID_SQL_OPS_ENUM.UPDATE:n=wde;break;case Ph.VALID_SQL_OPS_ENUM.DELETE:n=Ide;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(oV,"processAST");function xde(e,t){lS.info(e),t("unknown sql statement")}a(xde,"nullFunction");function Bde({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=Hde(i,e.values)}catch(o){return r(o)}bde(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){lS.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Bde,"convertInsert");function Hde(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]]=Ua.compile(`SELECT ${s.toString()} AS [${Ph.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw lS.error(r),new Error(vde)}}a(Hde,"createDataObjects")});var Pw=P((lDe,dV)=>{var hS=require("clone"),mS=nt(),kde=oe(),fS=(G(),D($)),aDe=X(),Ow=require("fs"),ww=require("joi"),{string:_S}=ww.types(),{hdb_errors:Fde,handleHDBError:dS}=he(),{HDB_ERROR_MSGS:cDe,HTTP_STATUS_CODES:Nw}=Fde,{common_validators:ld}=Ri(),cV=" is required",Gde=["insert","update","upsert"],Iw={database:{presence:!1,format:ld.schema_format,length:ld.schema_length},schema:{presence:!1,format:ld.schema_format,length:ld.schema_length},table:{presence:!0,format:ld.schema_format,length:ld.schema_length},action:{inclusion:{within:Gde,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},qde={schema:_S.required(),table:_S.required(),action:_S.valid("insert","update","upsert")},{AWS_ACCESS_KEY:$de,AWS_SECRET:Vde,AWS_BUCKET:Kde,AWS_FILE_KEY:Yde,REGION:Wde}=fS.S3_BUCKET_AUTH_KEYS,zde={s3:{presence:!0},[`s3.${$de}`]:{presence:!0,type:"String"},[`s3.${Vde}`]:{presence:!0,type:"String"},[`s3.${Kde}`]:{presence:!0,type:"String"},[`s3.${Yde}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Wde}`]:{presence:!0,type:"String"}},lV=hS(Iw);lV.data.presence={message:cV};var uV=hS(Iw);uV.file_path.presence={message:cV};var Qde=Object.assign(hS(Iw),zde),Cw=hS(qde);Cw.csv_url=_S.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Cw.passthrough_headers=ww.object();function jde(e){let t=mS.validateObject(e,lV);return pS(e,t)}a(jde,"dataObject");function Jde(e){let t=mS.validateBySchema(e,ww.object(Cw));return pS(e,t)}a(Jde,"urlObject");function Xde(e){let t=mS.validateObject(e,uV);return pS(e,t)}a(Xde,"fileObject");function Zde(e){let t=mS.validateObject(e,Qde);return pS(e,t)}a(Zde,"s3FileObject");function pS(e,t){if(!t){let r=kde.checkGlobalSchemaTable(e.schema,e.table);if(r)return dS(new Error,r,Nw.BAD_REQUEST);if(e.operation===fS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{Ow.accessSync(e.file_path,Ow.constants.R_OK|Ow.constants.F_OK)}catch(n){return n.code===fS.NODE_ERROR_CODES.ENOENT?dS(n,`No such file or directory ${n.path}`,Nw.BAD_REQUEST):n.code===fS.NODE_ERROR_CODES.EACCES?dS(n,`Permission denied ${n.path}`,Nw.BAD_REQUEST):dS(n)}}return t}a(pS,"postValidateChecks");dV.exports={dataObject:jde,urlObject:Jde,fileObject:Xde,s3FileObject:Zde}});var Dw=P((dDe,fV)=>{"use strict";var Dh=X(),ES=(G(),D($));async function efe(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===ES.OPERATIONS_ENUM.INSERT||t.operation===ES.OPERATIONS_ENUM.UPDATE||t.operation===ES.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===ES.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(efe,"callOperationFunctionAsAwait");fV.exports={callOperationFunctionAsAwait:efe}});var Lw=P((_De,hV)=>{"use strict";var{S3:tfe,GetObjectCommand:rfe}=require("@aws-sdk/client-s3");hV.exports={getFileStreamFromS3:nfe,getS3AuthObj:_V};async function nfe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await _V(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new rfe(r))).Body}a(nfe,"getFileStreamFromS3");function _V(e,t,r){return new tfe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(_V,"getS3AuthObj")});var pV=P((mDe,mV)=>{"use strict";var Mw=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}},vw=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};mV.exports={BulkLoadFileObject:Mw,BulkLoadDataObject:vw}});var gV=P((EDe,EV)=>{"use strict";var Uw=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};EV.exports=Uw});var Gw=P((yDe,UV)=>{"use strict";var gS=gn(),TS=Pw(),sfe=require("needle"),ni=(G(),D($)),SDe=Pt(),ud=oe(),{handleHDBError:Vt,hdb_errors:wV}=he(),{HTTP_STATUS_CODES:Hr,HDB_ERROR_MSGS:Sr,CHECK_LOGS_WRAPPER:Rl}=wV,dd=X(),xw=require("papaparse");ud.promisifyPapaParse();var si=require("fs-extra"),ife=require("path"),{chain:SV}=require("stream-chain"),TV=require("stream-json/streamers/StreamArray"),AV=require("stream-json/utils/Batch"),RV=require("stream-chain/utils/comp"),{finished:yV}=require("stream"),ofe=ce(),IV=Dw(),afe=Lw(),{BulkLoadFileObject:Hw,BulkLoadDataObject:cfe}=pV(),kw=mw(),{verifyBulkLoadAttributePerms:CV}=cS(),TDe=gV(),ADe=Er(),RDe=lo(),{databases:lfe}=(Ue(),D(at)),{coerceType:ufe}=(Ef(),D(qw)),bV="No records parsed from csv file.",Al=`${ofe.get("HDB_ROOT")}/tmp`,{schema_regex:dfe}=Ri(),OV=1024*1024*2,NV=5e3,ffe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};UV.exports={csvDataLoad:_fe,csvURLLoad:hfe,csvFileLoad:mfe,importFromS3:pfe};async function _fe(e,t){let r=TS.dataObject(e);if(r)throw Vt(r,r.message,Hr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=LV(e.schema,e.table),i=xw.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Bw.bind(null,s),dynamicTyping:!1}),o=new kw;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&CV(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 Vt(new Error,c,Hr.BAD_REQUEST,void 0,void 0,!0);let l=new cfe(e.action,e.schema,e.table,i.data);return n=await IV.callOperationFunctionAsAwait(MV,l,null),n.message===bV?bV:vV(n.records,n.number_written)}catch(s){throw yl(s)}}a(_fe,"csvDataLoad");async function hfe(e){let t=TS.urlObject(e);if(t)throw Vt(t,t.message,Hr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Al}/${r}`;try{await Efe(e,r)}catch(s){throw dd.error(Sr.DOWNLOAD_FILE_ERR(r)+" - "+s),Vt(s,Rl(Sr.DOWNLOAD_FILE_ERR(r)))}try{let s=new Hw(this.job_operation_function.name,e.action,e.schema,e.table,n,ni.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await Fw(s);return await SS(n),i}catch(s){throw await SS(n),yl(s)}}a(hfe,"csvURLLoad");async function mfe(e){let t=TS.fileObject(e);if(t)throw Vt(t,t.message,Hr.BAD_REQUEST,void 0,void 0,!0);let r=new Hw(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ni.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await Fw(r)}catch(n){throw yl(n)}}a(mfe,"csvFileLoad");async function pfe(e){let t=TS.s3FileObject(e);if(t)throw Vt(t,t.message,Hr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=ife.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Al}/${s}`;let i=new Hw(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await gfe(s,e);let o=await Fw(i);return await SS(r),o}catch(n){throw await SS(r),yl(n)}}a(pfe,"importFromS3");async function Efe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await sfe("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 Vt(n,s,n.statusCode,ni.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Tfe(r,e.csv_url),await Sfe(t,r.raw)}a(Efe,"downloadCSVFile");async function gfe(e,t){try{let r=`${Al}/${e}`;await si.mkdirp(Al),await si.writeFile(`${Al}/${e}`,"",{flag:"a+"});let n=await si.createWriteStream(r),s=await afe.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(){dd.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw dd.error(Sr.S3_DOWNLOAD_ERR+" - "+r),Vt(r,Rl(Sr.S3_DOWNLOAD_ERR))}}a(gfe,"downloadFileFromS3");async function Sfe(e,t){try{await si.mkdirp(Al),await si.writeFile(`${Al}/${e}`,t)}catch(r){throw dd.error(Sr.WRITE_TEMP_FILE_ERR),Vt(r,Rl(Sr.DEFAULT_BULK_LOAD_ERR))}}a(Sfe,"writeFileToTempFolder");async function SS(e){if(e)try{await si.access(e),await si.unlink(e)}catch{dd.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(SS,"deleteTempFile");function Tfe(e,t){if(e.statusCode!==wV.HTTP_STATUS_CODES.OK)throw Vt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Hr.BAD_REQUEST);if(!ffe[e.headers["content-type"]])throw Vt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Hr.BAD_REQUEST);if(!e.raw)throw Vt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Hr.BAD_REQUEST)}a(Tfe,"validateURLResponse");async function Fw(e){try{let t;switch(e.file_type){case ni.VALID_S3_FILE_TYPES.CSV:t=await Afe(e);break;case ni.VALID_S3_FILE_TYPES.JSON:t=await Rfe(e);break;default:throw Vt(new Error,Sr.DEFAULT_BULK_LOAD_ERR,Hr.BAD_REQUEST,ni.LOG_LEVELS.ERROR,Sr.INVALID_FILE_EXT_ERR(e))}return vV(t.records,t.number_written)}catch(t){throw yl(t)}}a(Fw,"fileLoad");async function PV(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 gS.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&CV(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Vt(c);r(l)}}a(PV,"validateChunk");async function DV(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ud.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!ud.isEmpty(c)&&!ud.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 IV.callOperationFunctionAsAwait(MV,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Vt(c,Rl(Sr.INSERT_CSV_ERR),Hr.INTERNAL_SERVER_ERROR,ni.LOG_LEVELS.ERROR,Sr.INSERT_CSV_ERR+" - "+c);r(l)}}a(DV,"insertChunk");async function Afe(e){let t={records:0,number_written:0},r=LV(e.schema,e.table);try{let n=new kw,s=si.createReadStream(e.file_path,{highWaterMark:OV});s.setEncoding("utf8"),await xw.parsePromise(s,PV.bind(null,e,n),Bw.bind(null,r));let i=n.getPermsResponse();if(i)throw Vt(new Error,i,Hr.BAD_REQUEST);return s=si.createReadStream(e.file_path,{highWaterMark:OV}),s.setEncoding("utf8"),await xw.parsePromise(s,DV.bind(null,e,t),Bw.bind(null,r)),s.destroy(),t}catch(n){throw Vt(n,Rl(Sr.PAPA_PARSE_ERR),Hr.INTERNAL_SERVER_ERROR,ni.LOG_LEVELS.ERROR,Sr.PAPA_PARSE_ERR+n)}}a(Afe,"callPapaParse");function LV(e,t){let r=lfe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>ufe(i,s));return n}a(LV,"createTransformMap");function Bw(e,t,r){let n=e.get(r);return n?n(t):ud.autoCast(t)}a(Bw,"typeFunction");async function Rfe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new kw,s=SV([si.createReadStream(e.file_path,{encoding:"utf-8"}),TV.withParser(),c=>c.value,new AV({batchSize:NV}),RV(async c=>{await PV(e,n,r,c)})]);await new Promise((c,l)=>{yV(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Vt(new Error,i,Hr.BAD_REQUEST);let o=SV([si.createReadStream(e.file_path,{encoding:"utf-8"}),TV.withParser(),c=>c.value,new AV({batchSize:NV}),RV(async c=>{await DV(e,t,r,c)})]);return await new Promise((c,l)=>{yV(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Vt(n,Rl(Sr.INSERT_JSON_ERR),Hr.INTERNAL_SERVER_ERROR,ni.LOG_LEVELS.ERROR,Sr.INSERT_JSON_ERR+n)}}a(Rfe,"insertJson");async function MV(e){let t={};try{e.data&&e.data.length>0&&yfe(e.data[0])?t=await bfe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",dd.info(t.message))}catch(r){throw yl(r)}return t}a(MV,"callBulkFileLoad");function yfe(e){let t=Object.keys(e);for(let r of t)if(!dfe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(yfe,"validateColumnNames");async function bfe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=gS.insert;break;case"update":i=gS.update;break;case"upsert":i=gS.upsert;break;default:throw Vt(new Error,Sr.INVALID_ACTION_PARAM_ERR(n),Hr.BAD_REQUEST,ni.LOG_LEVELS.ERROR,Sr.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 f=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][f])>=0&&e.splice(d,1)}let l=ud.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw yl(o)}}a(bfe,"bulkFileLoad");function vV(e,t){return`successfully loaded ${t} of ${e} records`}a(vV,"buildResponseMsg");function yl(e){return Vt(e,Rl(Sr.DEFAULT_BULK_LOAD_ERR),Hr.INTERNAL_SERVER_ERROR,ni.LOG_LEVELS.ERROR,Sr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(yl,"buildTopLevelErrMsg")});var Kw=P((ODe,$V)=>{"use strict";var Vw=Vr(),Ofe=Lw(),{AsyncParser:Nfe}=require("json2csv"),AS=require("stream"),Jn=oe(),$w=require("fs-extra"),wfe=require("path"),bs=X(),{promisify:HV}=require("util"),Lh=oe(),{handleHDBError:lr,hdb_errors:Ife}=he(),{HDB_ERROR_MSGS:Nn,HTTP_STATUS_CODES:ur}=Ife,{streamAsJSON:Cfe}=(VA(),D(hL)),{Upload:Pfe}=require("@aws-sdk/lib-storage"),{toCsvStream:Dfe}=(eo(),D(LL)),xV=["search_by_value","search_by_hash","sql","search_by_conditions"],BV=["json","csv"],kV="json",FV="csv",Lfe="Successfully exported JSON locally.",Mfe="Successfully exported CSV locally.",vfe=1e3,Ufe=Vw.searchByHash,xfe=Vw.searchByValue,Bfe=HV(AS.finished);$V.exports={export_to_s3:Gfe,export_local:Hfe};async function Hfe(e){bs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=GV(e);if(!Jn.isEmpty(t))throw bs.error(t),lr(new Error,t,ur.BAD_REQUEST,void 0,void 0,!0);if(Jn.isEmpty(e.path))throw bs.error(Nn.MISSING_VALUE("path")),lr(new Error,Nn.MISSING_VALUE("path"),ur.BAD_REQUEST,void 0,void 0,!0);let r=(Jn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(wfe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Jn.buildFolderPath(e.path,r);await kfe(e.path);let s=await qV(e);return await Ffe(n,e.format,s)}a(Hfe,"export_local");async function kfe(e){if(bs.trace("in confirmPath"),Jn.isEmptyOrZeroLength(e))throw lr(new Error,`Invalid path: ${e}`,ur.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await $w.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,bs.error(n),lr(new Error,n,ur.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw bs.error(r),lr(new Error,r,ur.BAD_REQUEST,void 0,void 0,!0)}return!0}a(kfe,"confirmPath");async function Ffe(e,t,r){if(bs.trace("in saveToLocal"),Lh.isEmptyOrZeroLength(e))throw lr(new Error,Nn.INVALID_VALUE("file_path"),ur.BAD_REQUEST,void 0,void 0,!0);if(Lh.isEmptyOrZeroLength(t))throw lr(new Error,Nn.INVALID_VALUE("Source format"),ur.BAD_REQUEST,void 0,void 0,!0);if(Lh.isEmpty(r))throw lr(new Error,Nn.NOT_FOUND("Data"),ur.BAD_REQUEST,void 0,void 0,!0);if(t===kV){let n=$w.createWriteStream(e);return Cfe(r).pipe(n),await Bfe(n),{message:Lfe,path:e}}else if(t===FV){let n=$w.createWriteStream(e),s=AS.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(f=>({label:f,value:f})));let c={objectMode:!0};return await new Nfe(i,c).fromInput(s).toOutput(n).promise(!1),{message:Mfe,path:e}}throw lr(new Error,Nn.INVALID_VALUE("format"),ur.BAD_REQUEST)}a(Ffe,"saveToLocal");async function Gfe(e){if(!e.s3||Object.keys(e.s3).length===0)throw lr(new Error,Nn.MISSING_VALUE("S3 object"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw lr(new Error,Nn.MISSING_VALUE("aws_access_key_id"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw lr(new Error,Nn.MISSING_VALUE("aws_secret_access_key"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.bucket))throw lr(new Error,Nn.MISSING_VALUE("bucket"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.key))throw lr(new Error,Nn.MISSING_VALUE("key"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.region))throw lr(new Error,Nn.MISSING_VALUE("region"),ur.BAD_REQUEST);let t=GV(e);if(!Jn.isEmpty(t))throw lr(new Error,t,ur.BAD_REQUEST);bs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await qV(e)}catch(l){throw bs.error(l),l}let n,s=await Ofe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new AS.PassThrough;if(e.format===FV){i=e.s3.key+".csv";let l=Dfe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===kV){i=e.s3.key+".json";let l=new AS.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let u=r.length,f="";for(let[d,h]of r.entries()){let _=d===u-1?JSON.stringify(h):JSON.stringify(h)+",";f+=_,d!==0&&d%vfe===0&&(l.push(f),f="")}f.length!==0&&l.push(f),l.push("]"),l.push(null)}else throw lr(new Error,Nn.INVALID_VALUE("format"),ur.BAD_REQUEST);return new Pfe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Gfe,"export_to_s3");function GV(e){if(bs.trace("in exportCoreValidation"),Jn.isEmpty(e.format))return"format missing";if(BV.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${BV.join(", ")}`;let t=e.search_operation.operation;if(Jn.isEmpty(t))return"search_operation.operation missing";if(xV.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${xV.join(", ")}`}a(GV,"exportCoreValidation");async function qV(e){bs.trace("in getRecords");let t,r;if(Lh.isEmpty(e.search_operation)||Lh.isEmptyOrZeroLength(e.search_operation.operation))throw lr(new Error,Nn.INVALID_VALUE("Search operation"),ur.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=xfe;break;case"search_by_hash":t=Ufe;break;case"search_by_conditions":t=Vw.searchByConditions;break;case"sql":{let n=uS();t=HV(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,bs.error(r),lr(new Error,r,ur.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(qV,"getRecords")});var KV=P((wDe,VV)=>{"use strict";var Yw=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};VV.exports=Yw});var zV=P((CDe,WV)=>{"use strict";var qfe=(G(),D($)),YV=require("moment"),$fe=require("uuid").v4,Ww=class{static{a(this,"JobObject")}constructor(){this.id=$fe(),this.type=void 0,this.start_datetime=YV().valueOf(),this.created_datetime=YV().valueOf(),this.end_datetime=void 0,this.status=qfe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};WV.exports=Ww});var zw=P((DDe,r1)=>{"use strict";var Vfe=require("uuid").v4,ZV=gn(),e1=Vr(),Kfe=Ys(),Yfe=_u(),Wfe=KV(),bt=(G(),D($)),zfe=zV(),Qfe=wE(),ii=X(),jfe=uf(),fd=oe(),{promisify:Jfe}=require("util"),bl=require("moment"),Xfe=uS(),RS=Pw(),QV=QR(),{deleteTransactionLogsBeforeValidator:Zfe}=uw(),{handleHDBError:jV,hdb_errors:e_e,ClientError:t_e}=he(),{HTTP_STATUS_CODES:JV}=e_e,XV=e1.searchByValue,r_e=e1.searchByHash,n_e=ZV.insert,s_e=Jfe(Xfe.evaluateSQL),i_e=ZV.update;r1.exports={addJob:c_e,updateJob:u_e,handleGetJob:o_e,handleGetJobsByStartDate:a_e,getJobById:t1};async function o_e(e){if(e.id===void 0)throw new t_e("'id' is required");let t=await t1(e.id);return fd.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(o_e,"handleGetJob");async function a_e(e){try{let t=await l_e(e);if(ii.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=bl(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=bl(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 ii.error(r),new Error(r)}}a(a_e,"handleGetJobsByStartDate");async function c_e(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||fd.isEmptyOrZeroLength(e.operation)){let f="job parameter is invalid";return ii.info(f),t.error=f,t}if(!bt.JOB_TYPE_ENUM[e.operation])return ii.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case bt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=RS.fileObject(e);break;case bt.OPERATIONS_ENUM.CSV_URL_LOAD:n=RS.urlObject(e);break;case bt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=RS.dataObject(e);break;case bt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=RS.s3FileObject(e);break;case bt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case bt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=QV(e,"date");break;case bt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=QV(e,"timestamp");break;case bt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Zfe(e);break;case bt.OPERATIONS_ENUM.RESTART_SERVICE:if(bt.HDB_PROCESS_SERVICES[e.service]===void 0)throw jV(new Error,"Invalid service",JV.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw jV(n,n.message,JV.BAD_REQUEST,void 0,void 0,!0);let s=new zfe;s.type=e.operation===bt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?bt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Kfe(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await XV(i))}catch(f){let d=`There was an error inserting a new job: ${f}`;return ii.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Vfe();try{o=await XV(i)}catch(f){let d=`There was an error inserting a new job: ${f}`;return ii.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ii.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new jfe(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await n_e(l)}catch(f){return ii.error(`There was an error inserting a job for job type: ${e.operation} -- ${f}`),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 f=`Created a job with type ${s.type} and id ${s.id}`;t.message=f,t.createdJob=s,t.success=!0,ii.trace(f)}return t}a(c_e,"addJob");async function l_e(e){let t=bl(e.from_date,bl.ISO_8601),r=bl(e.to_date,bl.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 Wfe(n,e.hdb_user);try{return await s_e(s)}catch(i){throw ii.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(l_e,"getJobsInDateRange");async function t1(e){if(fd.isEmptyOrZeroLength(e))return fd.errorizeMessage("Invalid job ID specified.");let t=new Yfe(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await r_e(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return ii.error(n),fd.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(t1,"getJobById");async function u_e(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(fd.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===bt.JOB_STATUS_ENUM.COMPLETE||e.status===bt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=bl().valueOf());let t=new Qfe(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await i_e(t),r}a(u_e,"updateJob")});var u1=P((MDe,l1)=>{"use strict";var n1=oe(),Tr=(G(),D($)),d_e=require("moment"),yS=Gw(),Mh=X(),s1=zw(),i1=Kw(),o1=Uc(),a1=st(),f_e=sS(),__e=rd(),{parentPort:h_e,isMainThread:c1}=require("worker_threads"),{onMessageByType:m_e}=st(),Qw=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function p_e(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(n1.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(n1.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Tr.JOB_TYPE_ENUM.csv_file_load:await xi(e,yS.csvFileLoad);break;case Tr.JOB_TYPE_ENUM.csv_url_load:await xi(e,yS.csvURLLoad);break;case Tr.JOB_TYPE_ENUM.csv_data_load:await xi(e,yS.csvDataLoad);break;case Tr.JOB_TYPE_ENUM.import_from_s3:await xi(e,yS.importFromS3);break;case Tr.JOB_TYPE_ENUM.empty_trash:break;case Tr.JOB_TYPE_ENUM.export_local:await xi(e,i1.export_local);break;case Tr.JOB_TYPE_ENUM.export_to_s3:await xi(e,i1.export_to_s3);break;case Tr.JOB_TYPE_ENUM.delete_files_before:case Tr.JOB_TYPE_ENUM.delete_records_before:await xi(e,o1.deleteFilesBefore);break;case Tr.JOB_TYPE_ENUM.delete_audit_logs_before:await xi(e,o1.deleteAuditLogsBefore);break;case Tr.JOB_TYPE_ENUM.delete_transaction_logs_before:await xi(e,f_e.deleteTransactionLogsBefore);break;case Tr.JOB_TYPE_ENUM.restart_service:return await xi(e,__e.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(p_e,"parseMessage");async function xi(e,t){try{e.job.status=Tr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=d_e().valueOf(),await s1.updateJob(e.job),await E_e(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Mh.error(`There was an error running ${t.name} job with id ${e.job.id}`),Mh.error(n),e.job.message=n,e.job.status=Tr.JOB_STATUS_ENUM.ERROR;try{await s1.updateJob(e.job)}catch(s){throw Mh.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(xi,"runJob");async function E_e(e){Mh.trace("launching job thread:",e),c1?a1.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Tr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):h_e.postMessage({type:Tr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(E_e,"launchJobThread");c1&&m_e(Tr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{a1.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Tr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){Mh.error(r)}});l1.exports={parseMessage:p_e,RunnerMessage:Qw}});var f1=P((UDe,d1)=>{"use strict";var jw=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};d1.exports=jw});var lw=P((HDe,rI)=>{"use strict";var IS=Vr(),Zw=uS(),bS=Gw(),Io=mg(),OS=uo(),Uh=Uc(),g_e=HO(),vh=Gn(),NS=h_(),Lt=cw(),wS=X(),S_e=$O(),T_e=wg(),_1=hN(),A_e=Cg(),R_e=EN(),y_e=gN(),b_e=AN(),O_e=yN(),Jw=vg(),h1=Kw(),N_e=cS(),eI=zw(),W=(G(),D($)),{hdb_errors:Bh,handleHDBError:xh}=he(),{HTTP_STATUS_CODES:m1}=Bh,Xw=xN(),p1=rd(),N1=require("util"),hd=gn(),w_e=$s(),I_e=Vu(),E1=u1(),g1=(yu(),D(w_)),S1=(jg(),D(ph)),T1=wt(),A1=sS(),R1=Th(),{setServerUtilities:C_e}=(Ef(),D(qw)),{CONTEXT:BDe}=(na(),D(xA)),{_assignPackageExport:P_e}=ui(),{transformReq:D_e}=oe(),{server:L_e}=(Dr(),D(ql)),en=wS.loggerWithTag("operation"),_d=Zs(),y1=(ll(),D(cl)),M_e=Dw(),b1=IS.searchByHash,v_e=IS.searchByValue,U_e=N1.promisify(IS.search),x_e=N1.promisify(Zw.evaluateSQL),B_e={[W.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[W.OPERATIONS_ENUM.CREATE_TABLE]:!0,[W.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[W.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[W.OPERATIONS_ENUM.DROP_TABLE]:!0,[W.OPERATIONS_ENUM.DROP_SCHEMA]:!0},ee=f1();async function w1(e,t){try{if(e.body.operation!=="read_log"&&(wS.log_level===W.LOG_LEVELS.INFO||wS.log_level===W.LOG_LEVELS.DEBUG||wS.log_level===W.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,payload:o,...c}=e.body;en.info(c)}}catch(n){en.error(n)}let r=await M_e.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return B_e[e.body.operation]&&w_e.setSchemaDataToGlobal(n=>{n&&en.error(n)}),r}a(w1,"processLocalTransaction");var O1=k_e();rI.exports={chooseOperation:I1,getOperationFunction:C1,operation:tI,processLocalTransaction:w1,executeJob:Os};C_e(rI.exports);L_e.operation=tI;function I1(e){let t;try{t=C1(e)}catch(s){throw en.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=Zw.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Zw.checkASTPermissions(e,i);if(o)throw en.error(`${m1.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),xh(new Error,o,Bh.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==W.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==W.OPERATIONS_ENUM.LOGIN&&e.operation!==W.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=N_e.verifyPerms(i,s);if(o)throw en.error(`${m1.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),xh(new Error,o,Bh.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw xh(s,"There was an error when trying to choose an operation path")}return r}a(I1,"chooseOperation");function C1(e){if(en.trace(`getOperationFunction with operation: ${e.operation}`),O1.has(e.operation))return O1.get(e.operation);throw xh(new Error,Bh.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Bh.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(C1,"getOperationFunction");P_e("operation",tI);function tI(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=I1(e);return w1({body:e},n)}a(tI,"operation");async function H_e(e){en.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[W.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case W.OPERATIONS_ENUM.INSERT:o=await hd.insert(i);break;case W.OPERATIONS_ENUM.UPDATE:o=await hd.update(i);break;case W.OPERATIONS_ENUM.UPSERT:o=await hd.upsert(i);break;case W.OPERATIONS_ENUM.DELETE:o=await Uh.deleteRecord(i);break;default:en.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){en.info("Invalid operation in transaction"),en.error(o)}}a(H_e,"catchup");async function Os(e){D_e(e);let t,r;try{r=await eI.addJob(e),t=r.createdJob,en.info("addJob result",r);let n=new E1.RunnerMessage(t,e);return{message:await E1.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw en.error(s),xh(n,s)}}a(Os,"executeJob");function k_e(){let e=new Map;return e.set(W.OPERATIONS_ENUM.INSERT,new ee(hd.insert)),e.set(W.OPERATIONS_ENUM.UPDATE,new ee(hd.update)),e.set(W.OPERATIONS_ENUM.UPSERT,new ee(hd.upsert)),e.set(W.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new ee(IS.searchByConditions)),e.set(W.OPERATIONS_ENUM.SEARCH_BY_HASH,new ee(b1)),e.set(W.OPERATIONS_ENUM.SEARCH_BY_ID,new ee(b1)),e.set(W.OPERATIONS_ENUM.SEARCH_BY_VALUE,new ee(v_e)),e.set(W.OPERATIONS_ENUM.SEARCH,new ee(U_e)),e.set(W.OPERATIONS_ENUM.SQL,new ee(x_e)),e.set(W.OPERATIONS_ENUM.CSV_DATA_LOAD,new ee(Os,bS.csvDataLoad)),e.set(W.OPERATIONS_ENUM.CSV_FILE_LOAD,new ee(Os,bS.csvFileLoad)),e.set(W.OPERATIONS_ENUM.CSV_URL_LOAD,new ee(Os,bS.csvURLLoad)),e.set(W.OPERATIONS_ENUM.IMPORT_FROM_S3,new ee(Os,bS.importFromS3)),e.set(W.OPERATIONS_ENUM.CREATE_SCHEMA,new ee(Io.createSchema)),e.set(W.OPERATIONS_ENUM.CREATE_DATABASE,new ee(Io.createSchema)),e.set(W.OPERATIONS_ENUM.CREATE_TABLE,new ee(Io.createTable)),e.set(W.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new ee(Io.createAttribute)),e.set(W.OPERATIONS_ENUM.DROP_SCHEMA,new ee(Io.dropSchema)),e.set(W.OPERATIONS_ENUM.DROP_DATABASE,new ee(Io.dropSchema)),e.set(W.OPERATIONS_ENUM.DROP_TABLE,new ee(Io.dropTable)),e.set(W.OPERATIONS_ENUM.DROP_ATTRIBUTE,new ee(Io.dropAttribute)),e.set(W.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new ee(OS.describeSchema)),e.set(W.OPERATIONS_ENUM.DESCRIBE_DATABASE,new ee(OS.describeSchema)),e.set(W.OPERATIONS_ENUM.DESCRIBE_TABLE,new ee(OS.describeTable)),e.set(W.OPERATIONS_ENUM.DESCRIBE_ALL,new ee(OS.describeAll)),e.set(W.OPERATIONS_ENUM.DELETE,new ee(Uh.deleteRecord)),e.set(W.OPERATIONS_ENUM.ADD_USER,new ee(vh.addUser)),e.set(W.OPERATIONS_ENUM.ALTER_USER,new ee(vh.alterUser)),e.set(W.OPERATIONS_ENUM.DROP_USER,new ee(vh.dropUser)),e.set(W.OPERATIONS_ENUM.LIST_USERS,new ee(vh.listUsersExternal)),e.set(W.OPERATIONS_ENUM.LIST_ROLES,new ee(NS.listRoles)),e.set(W.OPERATIONS_ENUM.ADD_ROLE,new ee(NS.addRole)),e.set(W.OPERATIONS_ENUM.ALTER_ROLE,new ee(NS.alterRole)),e.set(W.OPERATIONS_ENUM.DROP_ROLE,new ee(NS.dropRole)),e.set(W.OPERATIONS_ENUM.USER_INFO,new ee(vh.userInfo)),e.set(W.OPERATIONS_ENUM.READ_LOG,new ee(S_e)),e.set(W.OPERATIONS_ENUM.ADD_NODE,new ee(T_e)),e.set(W.OPERATIONS_ENUM.UPDATE_NODE,new ee(_1)),e.set(W.OPERATIONS_ENUM.SET_NODE_REPLICATION,new ee(_1)),e.set(W.OPERATIONS_ENUM.REMOVE_NODE,new ee(A_e)),e.set(W.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new ee(R_e)),e.set(W.OPERATIONS_ENUM.PURGE_STREAM,new ee(y_e)),e.set(W.OPERATIONS_ENUM.SET_CONFIGURATION,new ee(T1.setConfiguration)),e.set(W.OPERATIONS_ENUM.CLUSTER_STATUS,new ee(b_e.clusterStatus)),e.set(W.OPERATIONS_ENUM.CLUSTER_NETWORK,new ee(O_e)),e.set(W.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new ee(Jw.setRoutes)),e.set(W.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new ee(Jw.getRoutes)),e.set(W.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new ee(Jw.deleteRoutes)),e.set(W.OPERATIONS_ENUM.EXPORT_TO_S3,new ee(Os,h1.export_to_s3)),e.set(W.OPERATIONS_ENUM.CREATE_CSR,new ee(_d.createCsr)),e.set(W.OPERATIONS_ENUM.SIGN_CERTIFICATE,new ee(_d.signCertificate)),e.set(W.OPERATIONS_ENUM.LIST_CERTIFICATES,new ee(_d.listCertificates)),e.set(W.OPERATIONS_ENUM.ADD_CERTIFICATES,new ee(_d.addCertificate)),e.set(W.OPERATIONS_ENUM.REMOVE_CERTIFICATE,new ee(_d.removeCertificate)),e.set(W.OPERATIONS_ENUM.GET_KEY,new ee(_d.getKey)),e.set(W.OPERATIONS_ENUM.ADD_NODE_BACK,new ee(y1.addNodeBack)),e.set(W.OPERATIONS_ENUM.REMOVE_NODE_BACK,new ee(y1.removeNodeBack)),e.set(W.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new ee(Os,Uh.deleteFilesBefore)),e.set(W.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new ee(Os,Uh.deleteFilesBefore)),e.set(W.OPERATIONS_ENUM.EXPORT_LOCAL,new ee(Os,h1.export_local)),e.set(W.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new ee(eI.handleGetJobsByStartDate)),e.set(W.OPERATIONS_ENUM.GET_JOB,new ee(eI.handleGetJob)),e.set(W.OPERATIONS_ENUM.GET_FINGERPRINT,new ee(Xw.getFingerprint)),e.set(W.OPERATIONS_ENUM.SET_LICENSE,new ee(Xw.setLicense)),e.set(W.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new ee(Xw.getRegistrationInfo)),e.set(W.OPERATIONS_ENUM.RESTART,new ee(p1.restart)),e.set(W.OPERATIONS_ENUM.RESTART_SERVICE,new ee(Os,p1.restartService)),e.set(W.OPERATIONS_ENUM.CATCHUP,new ee(H_e)),e.set(W.OPERATIONS_ENUM.SYSTEM_INFORMATION,new ee(I_e.systemInformation)),e.set(W.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new ee(Os,Uh.deleteAuditLogsBefore)),e.set(W.OPERATIONS_ENUM.READ_AUDIT_LOG,new ee(g_e)),e.set(W.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new ee(g1.createTokens)),e.set(W.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new ee(g1.refreshOperationToken)),e.set(W.OPERATIONS_ENUM.LOGIN,new ee(S1.login)),e.set(W.OPERATIONS_ENUM.LOGOUT,new ee(S1.logout)),e.set(W.OPERATIONS_ENUM.GET_CONFIGURATION,new ee(T1.getConfiguration)),e.set(W.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new ee(Lt.customFunctionsStatus)),e.set(W.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new ee(Lt.getCustomFunctions)),e.set(W.OPERATIONS_ENUM.GET_COMPONENT_FILE,new ee(Lt.getComponentFile)),e.set(W.OPERATIONS_ENUM.GET_COMPONENTS,new ee(Lt.getComponents)),e.set(W.OPERATIONS_ENUM.SET_COMPONENT_FILE,new ee(Lt.setComponentFile)),e.set(W.OPERATIONS_ENUM.DROP_COMPONENT,new ee(Lt.dropComponent)),e.set(W.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new ee(Lt.getCustomFunction)),e.set(W.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new ee(Lt.setCustomFunction)),e.set(W.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new ee(Lt.dropCustomFunction)),e.set(W.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new ee(Lt.addComponent)),e.set(W.OPERATIONS_ENUM.ADD_COMPONENT,new ee(Lt.addComponent)),e.set(W.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new ee(Lt.dropCustomFunctionProject)),e.set(W.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new ee(Lt.packageComponent)),e.set(W.OPERATIONS_ENUM.PACKAGE_COMPONENT,new ee(Lt.packageComponent)),e.set(W.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new ee(Lt.deployComponent)),e.set(W.OPERATIONS_ENUM.DEPLOY_COMPONENT,new ee(Lt.deployComponent)),e.set(W.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new ee(A1.readTransactionLog)),e.set(W.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new ee(Os,A1.deleteTransactionLogsBefore)),e.set(W.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new ee(R1.installModules)),e.set(W.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new ee(R1.auditModules)),e.set(W.OPERATIONS_ENUM.GET_BACKUP,new ee(Io.getBackup)),e.set(W.OPERATIONS_ENUM.ADD_SSH_KEY,new ee(Lt.addSSHKey)),e.set(W.OPERATIONS_ENUM.UPDATE_SSH_KEY,new ee(Lt.updateSSHKey)),e.set(W.OPERATIONS_ENUM.DELETE_SSH_KEY,new ee(Lt.deleteSSHKey)),e.set(W.OPERATIONS_ENUM.LIST_SSH_KEYS,new ee(Lt.listSSHKeys)),e.set(W.OPERATIONS_ENUM.SET_SSH_KNOWN_HOSTS,new ee(Lt.setSSHKnownHosts)),e.set(W.OPERATIONS_ENUM.GET_SSH_KNOWN_HOSTS,new ee(Lt.getSSHKnownHosts)),e}a(k_e,"initializeOperationFunctionMap")});var DS=P((FDe,L1)=>{"use strict";var CS=(G(),D($)),F_e=oe(),Hh=X(),{handleHDBError:nI,hdb_errors:PS}=he(),{isMainThread:G_e}=require("worker_threads"),{Readable:q_e}=require("stream"),P1=require("os"),$_e=require("util"),V_e=Gb(),K_e=$_e.promisify(V_e.authorize),D1=lw(),{createGzip:Y_e,constants:W_e}=require("zlib"),z_e=[CS.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,CS.OPERATIONS_ENUM.LOGIN,CS.OPERATIONS_ENUM.LOGOUT];function Q_e(e){let t=`Found an uncaught exception with message: ${e.message}. ${P1.EOL}Stack: ${e.stack} ${P1.EOL}Terminating ${G_e?"HDB":"thread"}.`;console.error(t),Hh.fatal(t),process.exit(1)}a(Q_e,"handleServerUncaughtException");function j_e(e,t,r){if(Hh[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:PS.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(j_e,"serverErrorHandler");function J_e(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=nI(new Error,"Invalid JSON.",PS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(F_e.isEmpty(e.body.operation)){let n=nI(new Error,"Request body must include an 'operation' property.",PS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(J_e,"reqBodyValidationHandler");function X_e(e,t,r){let n;!z_e.includes(e.body.operation)||e.body.operation===CS.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?K_e(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{Hh.warn(i),Hh.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let o=typeof i=="string"?{error:i}:{error:i.message};r(nI(i,o,PS.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(X_e,"authHandler");async function Z_e(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=D1.chooseOperation(e.body);let s=await D1.processLocalTransaction(e,n);if(s instanceof q_e&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Y_e({level:W_e.Z_BEST_SPEED})))}return s}catch(s){throw Hh.error(s),s}}a(Z_e,"handlePostRequest");L1.exports={authHandler:X_e,handlePostRequest:Z_e,handleServerUncaughtException:Q_e,serverErrorHandler:j_e,reqBodyValidationHandler:J_e}});var x1=P((qDe,U1)=>{"use strict";var ehe=require("fastify-plugin"),{handlePostRequest:M1,authHandler:the,reqBodyValidationHandler:rhe}=DS();async function nhe(e){e.decorate("hdbCore",{preValidation:[rhe,the],request:a(t=>v1(M1(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>v1(M1(t,r,!0)),"requestWithoutAuthentication")})}a(nhe,"hdbCore");async function v1(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(v1,"convertAsyncIterators");U1.exports=ehe(nhe)});var H1=P((KDe,B1)=>{"use strict";var VDe=require("fs"),LS=ce();LS.initSync();var{CONFIG_PARAMS:sI}=(G(),D($)),she=1024*1024*1024;function ihe(e){let t=LS.get(sI.HTTP_TIMEOUT),r=LS.get(sI.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:she,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:LS.get(sI.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(ihe,"getServerOptions");B1.exports=ihe});var G1=P((WDe,F1)=>{"use strict";var iI=ce();iI.initSync();var{CONFIG_PARAMS:k1}=(G(),D($));function ohe(){let e=iI.get(k1.HTTP_CORSACCESSLIST),t=iI.get(k1.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(ohe,"getCORSOptions");F1.exports=ohe});var V1=P((QDe,$1)=>{"use strict";var q1=ce();q1.initSync();var ahe=(G(),D($));function che(){return q1.get(ahe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(che,"getHeaderTimeoutConfig");$1.exports=che});var aI={};Be(aI,{customFunctionsServer:()=>dhe,ready:()=>sK,start:()=>uhe});function uhe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Co||(Co=nK(t),Ke.http((await Co).server));let o=await Co,c=(0,oI.dirname)(s),l=(0,oI.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!K1.has(c)){K1.add(c);try{o.register(_he(c,l))}catch(u){if(u.message==="Root plugin has already booted")mt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:sK}}async function dhe(){try{mt.info("In Custom Functions Fastify server"+process.cwd()),mt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),mt.debug(`Custom Functions server process ${process.pid} starting up.`),await fhe();let e=J1.get(B.HTTP_SECUREPORT)>0,t;try{t=Co=await nK(e)}catch(r){throw mt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw mt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){mt.error(`Custom Functions ${process.pid} Error: ${e}`),mt.error(e),process.exit(1)}}async function fhe(){try{mt.info("Custom Functions starting configuration."),await X1.setUsersWithRolesCache(),mt.info("Custom Functions completed configuration.")}catch(e){mt.error(e)}}function _he(e,t){return async function(r){try{mt.info("Custom Functions starting buildRoutes"),mt.trace("Loading fastify routes folder "+e),(0,Y1.existsSync)(e)&&r.register(j1.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:mt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?mt.error(s.message):s&&mt.error(s),o()})}catch(n){mt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function nK(e){mt.info("Custom Functions starting buildServer.");let t=(0,Z1.default)(e),r=(0,W1.default)(t);r.server.headersTimeout=(0,tK.default)(),r.setErrorHandler(rK.serverErrorHandler);let n=(0,eK.default)();return n&&r.register(z1.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(Q1.default),await r.register(lhe),await r.after(),Nf(r),mt.info("Custom Functions completed buildServer."),r}function sK(){if(Co)return Co.then?Co.then(e=>e.ready()):Co.ready()}var oI,Y1,W1,z1,Q1,j1,J1,mt,lhe,X1,Z1,eK,tK,rK,Co,K1,iK=be(()=>{oI=require("path"),Y1=require("fs"),W1=M(require("fastify")),z1=M(require("@fastify/cors")),Q1=M(xb()),j1=M(require("@fastify/autoload")),J1=M(ce());G();mt=M(X()),lhe=M(x1()),X1=M(Gn()),Z1=M(H1()),eK=M(G1()),tK=M(V1()),rK=M(DS());eo();Dr();K1=new Set;a(uhe,"start");a(dhe,"customFunctionsServer");a(fhe,"setUp");a(_he,"buildRouteFolder");a(nK,"buildServer");a(sK,"ready")});var cI={};Be(cI,{start:()=>hhe});function hhe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,uK.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){aK||(aK=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=oK.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,cK.default)(s,(0,lK.realpathSync)(o))}}return i(s)},{runFirst:!0})),oK.set(r,n)}}}var cK,lK,uK,oK,aK,dK=be(()=>{cK=M(require("send")),lK=require("fs"),uK=M(require("serve-static")),oK=new Map;a(hhe,"start")});var lI={};Be(lI,{start:()=>mhe});function mhe({override:e}){return{handleFile:a((t,r,n)=>{MS.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,fK.parse)(t))){if(process.env[s]!==void 0)if(MS.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)MS.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var fK,MS,_K=be(()=>{fK=require("dotenv"),MS=M(X());a(mhe,"start")});var dI=P((nLe,hK)=>{"use strict";var kh=ce();kh.initSync();var md=require("fs-extra"),uI=require("path"),pd=(G(),D($)),phe=require("crypto"),Ehe=require("uuid").v4;hK.exports=ghe;function ghe(){if(kh.getHdbBasePath()!==void 0){let e=uI.join(kh.getHdbBasePath(),pd.LICENSE_KEY_DIR_NAME,pd.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=uI.join(kh.getHdbBasePath(),pd.LICENSE_KEY_DIR_NAME,pd.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=uI.join(kh.getHdbBasePath(),pd.LICENSE_KEY_DIR_NAME,pd.JWT_ENUM.JWT_PASSPHRASE_NAME);try{md.accessSync(r),md.accessSync(e),md.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=Ehe(),i=phe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});md.writeFileSync(r,s),md.writeFileSync(e,i.privateKey),md.writeFileSync(t,i.publicKey)}else throw n}}}a(ghe,"checkJWTTokenExist")});var pK=P((iLe,mK)=>{"use strict";var fI=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};mK.exports={HdbInfoInsertObject:fI}});var SK=P((aLe,gK)=>{"use strict";var EK=(G(),D($)),_I=class{static{a(this,"UpgradeObject")}constructor(t,r){this[EK.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[EK.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};gK.exports={UpgradeObject:_I}});var vS=P((lLe,AK)=>{"use strict";var Ns=require("prompt"),Ed=require("chalk"),TK=X(),oi=require("os"),hI=lc(),mI=["yes","y"];async function She(e){let t=`${oi.EOL}`+Ed.bold.green("Your current HarperDB version requires that we complete an update process.")+`${oi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${oi.EOL}${oi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${oi.EOL}`;Ns.override=hI(["CONFIRM_UPGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Ed.magenta(`${oi.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Ns.get([r])}catch(s){return TK.error("There was an error when prompting user about an upgrade."),TK.error(s),!1}return mI.includes(n.CONFIRM_UPGRADE)}a(She,"forceUpdatePrompt");async function The(e){let t=`${oi.EOL}`+Ed.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.${oi.EOL}`);Ns.override=hI(["CONFIRM_DOWNGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Ed.magenta(`${oi.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Ns.get([r]);return mI.includes(n.CONFIRM_DOWNGRADE)}a(The,"forceDowngradePrompt");async function Ahe(){let e=`${oi.EOL}`+Ed.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Ns.override=hI(["GENERATE_CERTS"]),Ns.start(),Ns.message=e;let t={properties:{GENERATE_CERTS:{description:Ed.magenta(`${oi.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Ns.get([t]);return mI.includes(r.GENERATE_CERTS)}a(Ahe,"upgradeCertsPrompt");AK.exports={forceUpdatePrompt:She,forceDowngradePrompt:The,upgradeCertsPrompt:Ahe}});var EI=P((dLe,RK)=>{"use strict";var pI=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};RK.exports=pI});var bK=P((ELe,yK)=>{"use strict";var Rhe=oe(),yhe=wt(),_Le=X(),hLe=require("path"),mLe=require("fs"),pLe=(G(),D($));yK.exports={getOldPropsValue:bhe};function bhe(e,t,r=!1){let n=t.getRaw(e);return Rhe.isNotEmptyAndHasValue(n)?n:r?yhe.getDefaultConfig(e):""}a(bhe,"getOldPropsValue")});var IK=P((SLe,wK)=>{"use strict";var xa=require("path"),Ba=require("fs-extra"),Ohe=require("properties-reader"),Nhe=EI(),dr=X(),{getOldPropsValue:pt}=bK(),{HDB_SETTINGS_NAMES:ge,CONFIG_PARAMS:Ol}=(G(),D($)),Nl=wt(),US=ce(),OK=oe(),Bi=(G(),D($)),gI=new Nhe("3.1.0"),NK=[];function whe(){let e=Ohe(US.get(ge.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),dr.info(t);let r=` ;Settings for the HarperDB process.
37
+ `)}catch{f=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Oe.appendFile(Oo,o);let d=await ri(e);return d.message=`Added ssh key: ${r}${f}`,d}a(Hue,"addSSHKey");async function kue(e){let t=bn.updateSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r,key:n}=e;Gt.trace("updating ssh key",r);let s=we.join(Ma,r+".key");if(!await Oe.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Oe.outputFile(s,n);let i=await ri(e);return i.message=`Updated ssh key: ${r}`,i}a(kue,"updateSSHKey");async function Fue(e){let t=bn.deleteSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r}=e;Gt.trace("deleting ssh key",r);let n=we.join(Ma,r+".key"),s=we.join(Ma,"config");if(!await Oe.pathExists(n))throw new Error("Key does not exist");let i=await Oe.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Oe.outputFile(s,i),Oe.removeSync(n);let c=await ri(e);return c.message=`Deleted ssh key: ${r}`,c}a(Fue,"deleteSSHKey");async function Gue(e){let t=[];return await Oe.pathExists(Ma)&&(await Oe.readdir(Ma)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(Gue,"listSSHKeys");async function que(e){let t=bn.setSSHKnownHostsValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{known_hosts:r}=e;await Oe.outputFile(Oo,r);let n=await ri(e);return n.message="Known hosts successfully set",n}a(que,"setSSHKnownHosts");async function $ue(e){return await Oe.pathExists(Oo)?{known_hosts:await Oe.readFile(Oo,"utf8")}:{known_hosts:null}}a($ue,"getSSHKnownHosts");Object.assign(b$,{customFunctionsStatus:bue,getCustomFunctions:Oue,getCustomFunction:Nue,setCustomFunction:wue,dropCustomFunction:Iue,addComponent:Cue,dropCustomFunctionProject:Pue,packageComponent:Due,deployComponent:Lue,getComponents:vue,getComponentFile:Uue,setComponentFile:xue,dropComponent:Bue,addSSHKey:Hue,updateSSHKey:kue,deleteSSHKey:Fue,listSSHKeys:Gue,setSSHKnownHosts:que,getSSHKnownHosts:$ue})});var uw=P((YPe,N$)=>{"use strict";var Rs=require("joi"),O$=nt();N$.exports={readTransactionLogValidator:Vue,deleteTransactionLogsBeforeValidator:Kue};function Vue(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),from:Rs.date().timestamp(),to:Rs.date().timestamp(),limit:Rs.number().min(1)});return O$.validateBySchema(e,t)}a(Vue,"readTransactionLogValidator");function Kue(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),timestamp:Rs.date().timestamp().required()});return O$.validateBySchema(e,t)}a(Kue,"deleteTransactionLogsBeforeValidator")});var sS=P((zPe,L$)=>{"use strict";var dw=(G(),D($)),bh=Er(),w$=oe(),I$=ce(),C$=lo(),P$=X(),{handleHDBError:rS,hdb_errors:Yue}=he(),{HTTP_STATUS_CODES:nS}=Yue,{readTransactionLogValidator:Wue,deleteTransactionLogsBeforeValidator:zue}=uw(),D$=Fn(),jue="Logs successfully deleted from transaction log.",Que="All logs successfully deleted from transaction log.";L$.exports={readTransactionLog:Jue,deleteTransactionLogsBefore:Zue};async function Jue(e){let t=Wue(e);if(t)throw rS(t,t.message,nS.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=w$.checkSchemaTableExist(e.database,e.table);if(r)throw rS(new Error,r,nS.NOT_FOUND,void 0,void 0,!0);return I$.get(dw.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Xue(e):(P$.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)),D$.readAuditLog(e))}a(Jue,"readTransactionLog");async function*Xue(e){let t=C$.createNatsTableStreamName(e.database,e.table),r=await bh.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===dw.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(Xue,"readTransactionLogNats");async function Zue(e){let t=zue(e);if(t)throw rS(t,t.message,nS.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!I$.get(dw.CONFIG_PARAMS.CLUSTERING_ENABLED))return P$.info("Delete transaction logs called for Plexus"),D$.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=w$.checkSchemaTableExist(r,n);if(i)throw rS(new Error,i,nS.NOT_FOUND,void 0,void 0,!0);let o=C$.createNatsTableStreamName(r,n),{jsm:c}=await bh.getNATSReferences(),l=await bh.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let f=jue,d,h=new Date(l.state.last_ts).getTime();return s>h?(d=l.state.last_seq+1,f=Que):d=(await bh.viewStream(o,parseInt(s),1))[0].nats_sequence,await bh.purgeTableStream(r,n,{seq:d}),f}a(Zue,"deleteTransactionLogsBefore")});var v$=P((QPe,M$)=>{"use strict";var fw=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};M$.exports=fw});var x$=P((XPe,U$)=>{"use strict";var _w=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};U$.exports=_w});var pw=P((eDe,H$)=>{"use strict";var B$=v$(),ede=x$(),{HDB_ERROR_MSGS:tde}=Dn(),hw=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=tde.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 B$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new ede(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 B$(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}};H$.exports=hw});var cS=P((sDe,tV)=>{"use strict";var mw=gn(),iS=Vr(),ys=pg(),wh=uo(),Ew=Uc(),rde=HO(),nde=gF(),Ih=Gn(),oS=p_(),gr=X(),sde=$O(),ide=wg(),ode=hN(),ade=Cg(),cde=EN(),lde=gN(),ude=AN(),dde=yN(),gw=vg(),No=oe(),fde=QG(),Sw=xN(),G$=nd(),Zr=(G(),D($)),q$=Vq(),_de=Ku(),$$=(yu(),D(I_)),V$=(Qg(),D(ph)),K$=wt(),cr=cw(),hde=require("alasql"),Y$=sS(),W$=Sh(),ld=Zs(),z$=(ll(),D(cl)),j$=pw(),{handleHDBError:On,hdb_errors:Q$}=he(),{addNodeBack:rDe,removeNodeBack:nDe}=(ll(),D(cl)),{HDB_ERROR_MSGS:Br,HTTP_STATUS_CODES:Oh}=Q$,Z=new Map,J$="delete",va="insert",wo="read",Tl="update",Nh="describe",k$=wh.describeSchema.name,F$=wh.describeTable.name,X$={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},pde={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},mde="catchup",Ede="handleGetJob",gde="handleGetJobsByStartDate",aS={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Sde=[ys.createTable.name,ys.createAttribute.name,ys.dropTable.name,ys.dropAttribute.name],Z$={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(mw.insert.name,new re(!1,[va]));Z.set(mw.update.name,new re(!1,[Tl]));Z.set(mw.upsert.name,new re(!1,[va,Tl]));Z.set(iS.searchByConditions.name,new re(!1,[wo]));Z.set(iS.searchByHash.name,new re(!1,[wo]));Z.set(iS.searchByValue.name,new re(!1,[wo]));Z.set(iS.search.name,new re(!1,[wo]));Z.set(ys.createSchema.name,new re(!0,[]));Z.set(ys.createTable.name,new re(!0,[]));Z.set(ys.createAttribute.name,new re(!1,[va]));Z.set(ys.dropSchema.name,new re(!0,[]));Z.set(ys.dropTable.name,new re(!0,[]));Z.set(ys.dropAttribute.name,new re(!0,[]));Z.set(wh.describeSchema.name,new re(!1,[wo]));Z.set(wh.describeTable.name,new re(!1,[wo]));Z.set(Ew.deleteRecord.name,new re(!1,[J$]));Z.set(Ih.addUser.name,new re(!0,[]));Z.set(Ih.alterUser.name,new re(!0,[]));Z.set(Ih.dropUser.name,new re(!0,[]));Z.set(Ih.listUsersExternal.name,new re(!0,[]));Z.set(oS.listRoles.name,new re(!0,[]));Z.set(oS.addRole.name,new re(!0,[]));Z.set(oS.alterRole.name,new re(!0,[]));Z.set(oS.dropRole.name,new re(!0,[]));Z.set(sde.name,new re(!0,[]));Z.set(ide.name,new re(!0,[]));Z.set(ode.name,new re(!0,[]));Z.set(ade.name,new re(!0,[]));Z.set(cde.name,new re(!0,[]));Z.set(lde.name,new re(!0,[]));Z.set(gw.setRoutes.name,new re(!0,[]));Z.set(gw.getRoutes.name,new re(!0,[]));Z.set(gw.deleteRoutes.name,new re(!0,[]));Z.set(K$.setConfiguration.name,new re(!0,[]));Z.set(ude.clusterStatus.name,new re(!0,[]));Z.set(dde.name,new re(!0,[]));Z.set(Sw.getFingerprint.name,new re(!0,[]));Z.set(Sw.setLicense.name,new re(!0,[]));Z.set(Ew.deleteFilesBefore.name,new re(!0,[]));Z.set(Ew.deleteAuditLogsBefore.name,new re(!0,[]));Z.set(G$.restart.name,new re(!0,[]));Z.set(G$.restartService.name,new re(!0,[]));Z.set(rde.name,new re(!0,[]));Z.set(nde.name,new re(!0,[wo]));Z.set(_de.systemInformation.name,new re(!0,[]));Z.set(K$.getConfiguration.name,new re(!0,[]));Z.set(Y$.readTransactionLog.name,new re(!0,[]));Z.set(Y$.deleteTransactionLogsBefore.name,new re(!0,[]));Z.set(W$.installModules.name,new re(!0,[]));Z.set(W$.auditModules.name,new re(!0,[]));Z.set(ld.createCsr.name,new re(!0,[]));Z.set(ld.signCertificate.name,new re(!0,[]));Z.set(ld.listCertificates.name,new re(!0,[]));Z.set(ld.addCertificate.name,new re(!0,[]));Z.set(ld.removeCertificate.name,new re(!0,[]));Z.set(ld.getKey.name,new re(!0,[]));Z.set(z$.addNodeBack.name,new re(!0,[]));Z.set(z$.removeNodeBack.name,new re(!0,[]));Z.set($$.createTokens.name,new re(!1,[]));Z.set($$.refreshOperationToken.name,new re(!1,[]));Z.set(V$.login.name,new re(!1,[]));Z.set(V$.logout.name,new re(!1,[]));Z.set(cr.customFunctionsStatus.name,new re(!0,[]));Z.set(cr.getCustomFunctions.name,new re(!0,[]));Z.set(cr.getComponents.name,new re(!0,[]));Z.set(cr.getComponentFile.name,new re(!0,[]));Z.set(cr.setComponentFile.name,new re(!0,[]));Z.set(cr.dropComponent.name,new re(!0,[]));Z.set(cr.getCustomFunction.name,new re(!0,[]));Z.set(cr.setCustomFunction.name,new re(!0,[]));Z.set(cr.dropCustomFunction.name,new re(!0,[]));Z.set(cr.addComponent.name,new re(!0,[]));Z.set(cr.dropCustomFunctionProject.name,new re(!0,[]));Z.set(cr.packageComponent.name,new re(!0,[]));Z.set(cr.deployComponent.name,new re(!0,[]));Z.set(cr.addSSHKey.name,new re(!0,[]));Z.set(cr.updateSSHKey.name,new re(!0,[]));Z.set(cr.deleteSSHKey.name,new re(!0,[]));Z.set(cr.listSSHKeys.name,new re(!0,[]));Z.set(cr.setSSHKnownHosts.name,new re(!0,[]));Z.set(cr.getSSHKnownHosts.name,new re(!0,[]));Z.set(Sw.getRegistrationInfo.name,new re(!1,[]));Z.set(Ih.userInfo.name,new re(!1,[]));Z.set(wh.describeAll.name,new re(!1,[]));Z.set(Ede,new re(!1,[]));Z.set(gde,new re(!0,[]));Z.set(mde,new re(!0,[]));Z.set(aS.CSV_DATA_LOAD,new re(!1,[va,Tl]));Z.set(aS.CSV_URL_LOAD,new re(!1,[va,Tl]));Z.set(aS.CSV_FILE_LOAD,new re(!1,[va,Tl]));Z.set(aS.IMPORT_FROM_S3,new re(!1,[va,Tl]));Z.set(Z$.EXPORT_TO_S3,new re(!0,[]));Z.set(Z$.EXPORT_LOCAL,new re(!0,[]));Z.set(Zr.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[J$]));Z.set(Zr.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[wo]));Z.set(Zr.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[va]));Z.set(Zr.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[Tl]));tV.exports={verifyPerms:Ade,verifyPermsAst:Tde,verifyBulkLoadAttributePerms:yde};function Tde(e,t,r){if(No.isEmptyOrZeroLength(e))throw gr.info("verify_perms_ast has an empty user parameter"),On(new Error);if(No.isEmptyOrZeroLength(t))throw gr.info("verify_perms_ast has an empty user parameter"),On(new Error);if(No.isEmptyOrZeroLength(r))throw gr.info("verify_perms_ast has a null operation parameter"),On(new Error);try{let n=new j$,s=new fde(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw gr.info("No schemas defined in verifyPermsAst(), will not continue."),On(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&X$[r])throw On(new Error,Br.DROP_SYSTEM,Oh.FORBIDDEN);if(c&&!l)return null;let u=q$.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof hde.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let d=0;d<i.length;d++){let h=s.getTablesBySchemaName(i[d]);h&&o.set(i[d],h)}let f=eV(t,r,o,n);return f||(o.forEach((d,h)=>{for(let _=0;_<d.length;_++){let p=s.getAttributesBySchemaTableName(h,d[_]),S=Aw(t.role.permission,h,d[_]);Tw(p,S,r,d[_],h,n)}}),n.getPermsResponse())}catch(n){throw On(n)}}a(Tde,"verifyPermsAst");function Ade(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw gr.info("null required parameter in verifyPerms"),On(new Error,Br.DEFAULT_INVALID_REQUEST,Oh.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 j$;if(No.isEmptyOrZeroLength(e.hdb_user?.role)||No.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return gr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Br.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,f=o.has(Zr.SYSTEM_SCHEMA_NAME)||s===Zr.SYSTEM_SCHEMA_NAME;if(l&&f&&pde[e.operation]&&(i===Zr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(f&&X$[r])throw On(new Error,Br.DROP_SYSTEM,Oh.FORBIDDEN);if(l&&!f||u===!0&&(r===ys.createSchema.name||r===ys.dropSchema.name))return null;if(Sde.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 d=q$.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),(r===k$||r===F$)&&!d.super_user){if(s===Zr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Br.SCHEMA_PERM_ERROR(s));if(r===k$&&(!d[s]||!d[s][Nh]))return c.handleInvalidItem(Br.SCHEMA_NOT_FOUND(s));if(r===F$&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][Nh]))return c.handleInvalidItem(Br.TABLE_NOT_FOUND(s,i))}let h=eV(e.hdb_user,r,o,c,n);if(h)return h;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Zr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],g=d[s].tables[i];g[Zr.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(E=>E[Zr.PERMS_CRUD_ENUM.READ]).forEach(E=>{S.push(E.attribute_name)}):S=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=S)}let _=Rde(e),p=Aw(e.hdb_user?.role?.permission,s,i);return Tw(_,p,r,i,s,c,n),c.getPermsResponse()}a(Ade,"verifyPerms");function eV(e,t,r,n,s){if(No.arrayHasEmptyValues([e,t,r]))throw gr.info("hasPermissions has an invalid parameter"),On(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||Z.get(t).requires_su))return null;if(!Z.get(t))throw gr.info(`operation ${t} not found.`),On(new Error,Br.OP_NOT_FOUND(t),Oh.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return gr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Br.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][Nh]===!1){n.addInvalidItem(Br.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Br.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let f of u){let d=o[l].tables[f];if(!d||d[Nh]===!1)n.addInvalidItem(Br.TABLE_NOT_FOUND(l,f));else try{let h=[],_=Z.get(t).perms;!No.isEmpty(s)&&_.includes(s)&&(_=[s]);for(let p=0;p<_.length;p++){let S=_[p],g=d[S];(g==null||g===!1)&&(gr.info(`Required ${S} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),h.push(S))}h.length>0&&n.addUnauthorizedTable(l,f,h)}catch(h){let _=Br.UNKNOWN_OP_AUTH_ERROR(t,l,f);throw gr.error(_),gr.error(h),On(Q$.CHECK_LOGS_WRAPPER(_))}}}return r.size<2?n.getPermsResponse():null}a(eV,"hasPermissions");function Tw(e,t,r,n,s,i,o){if(!e||!t)throw gr.info("no attributes specified in checkAttributePerms."),On(new Error);let c=Z.get(r).perms;if(!c||c==="")throw gr.info(`no permissions found for ${r} in checkAttributePerms().`),On(new Error);if(No.isEmptyOrZeroLength(t))return gr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let f of e){let d=t.get(f);if(d){if(d[Nh]===!1){i.addInvalidItem(Br.ATTR_NOT_FOUND(s,n,f),s,n);continue}if(c)for(let h of c){if(Zr.TIME_STAMP_NAMES.includes(d.attribute_name)&&h!==wo)throw On(new Error,Br.SYSTEM_TIMESTAMP_PERMS_ERR,Oh.FORBIDDEN);d[h]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(h):l[d.attribute_name]=[h])}}else i.addInvalidItem(Br.ATTR_NOT_FOUND(s,n,f),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(Tw,"checkAttributePerms");function Rde(e){let t=new Set;try{if(e.action)return t;if(e.operation===Zr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){gr.info(r)}return t}a(Rde,"getRecordAttributes");function Aw(e,t,r){let n=new Map;if(No.isEmpty(e))return gr.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{gr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(Aw,"getAttributePermissions");function yde(e,t,r,n,s,i,o){let c=new Set(i),l=Aw(e,n,s);Tw(c,l,t,s,n,o,r)}a(yde,"verifyBulkLoadAttributePerms")});var uS=P((oDe,oV)=>{"use strict";oV.exports={evaluateSQL:xde,processAST:iV,convertSQLToAST:sV,checkASTPermissions:nV};var bde=gn(),rV=require("util"),Ode=rV.callbackify(bde.insert),Nde=Vr().search,wde=oH().update,Ide=rV.callbackify(wde),Cde=cH().convertDelete,Ua=require("alasql"),Pde=cS(),lS=X(),Dde=Lm(),Lde=oe(),Ch=(G(),D($)),{hdb_errors:Mde,handleHDBError:Rw}=he(),{HTTP_STATUS_CODES:yw}=Mde;Dde(Ua);var vde=403,Ude="There was a problem performing this insert. Please check the logs and try again.",bw=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function xde(e,t){let r=e.parsed_sql_object;if(!r){r=sV(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ua.yy.Insert?n=s.into.databaseid:s instanceof Ua.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ua.yy.Update||s instanceof Ua.yy.Delete?n=s.table.databaseid:lS.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ua.yy.Select)&&Lde.isEmptyOrZeroLength(n))return t("No schema specified",null)}iV(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(xde,"evaluateSQL");function nV(e,t){let r;try{r=Pde.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(nV,"checkASTPermissions");function sV(e){let t=new bw;if(!e)throw Rw(new Error,"The 'sql' parameter is missing from the request body",yw.BAD_REQUEST);try{let r=e.trim(),n=Ua.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
38
+ `);throw n[1]?Rw(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,yw.BAD_REQUEST):Rw(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",yw.BAD_REQUEST)}return t}a(sV,"convertSQLToAST");function iV(e,t,r){try{let n=Bde;if(!e.bypass_auth&&!t.permissions_checked){let i=nV(e,t);if(i&&i.length>0)return r(vde,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ch.VALID_SQL_OPS_ENUM.SELECT:n=Nde,s=t.ast.statements[0];break;case Ch.VALID_SQL_OPS_ENUM.INSERT:n=Hde;break;case Ch.VALID_SQL_OPS_ENUM.UPDATE:n=Ide;break;case Ch.VALID_SQL_OPS_ENUM.DELETE:n=Cde;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(iV,"processAST");function Bde(e,t){lS.info(e),t("unknown sql statement")}a(Bde,"nullFunction");function Hde({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=kde(i,e.values)}catch(o){return r(o)}Ode(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){lS.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Hde,"convertInsert");function kde(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]]=Ua.compile(`SELECT ${s.toString()} AS [${Ch.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw lS.error(r),new Error(Ude)}}a(kde,"createDataObjects")});var Pw=P((uDe,uV)=>{var hS=require("clone"),pS=nt(),Fde=oe(),fS=(G(),D($)),cDe=X(),Ow=require("fs"),ww=require("joi"),{string:_S}=ww.types(),{hdb_errors:Gde,handleHDBError:dS}=he(),{HDB_ERROR_MSGS:lDe,HTTP_STATUS_CODES:Nw}=Gde,{common_validators:ud}=Ri(),aV=" is required",qde=["insert","update","upsert"],Iw={database:{presence:!1,format:ud.schema_format,length:ud.schema_length},schema:{presence:!1,format:ud.schema_format,length:ud.schema_length},table:{presence:!0,format:ud.schema_format,length:ud.schema_length},action:{inclusion:{within:qde,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},$de={schema:_S.required(),table:_S.required(),action:_S.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Vde,AWS_SECRET:Kde,AWS_BUCKET:Yde,AWS_FILE_KEY:Wde,REGION:zde}=fS.S3_BUCKET_AUTH_KEYS,jde={s3:{presence:!0},[`s3.${Vde}`]:{presence:!0,type:"String"},[`s3.${Kde}`]:{presence:!0,type:"String"},[`s3.${Yde}`]:{presence:!0,type:"String"},[`s3.${Wde}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${zde}`]:{presence:!0,type:"String"}},cV=hS(Iw);cV.data.presence={message:aV};var lV=hS(Iw);lV.file_path.presence={message:aV};var Qde=Object.assign(hS(Iw),jde),Cw=hS($de);Cw.csv_url=_S.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Cw.passthrough_headers=ww.object();function Jde(e){let t=pS.validateObject(e,cV);return mS(e,t)}a(Jde,"dataObject");function Xde(e){let t=pS.validateBySchema(e,ww.object(Cw));return mS(e,t)}a(Xde,"urlObject");function Zde(e){let t=pS.validateObject(e,lV);return mS(e,t)}a(Zde,"fileObject");function efe(e){let t=pS.validateObject(e,Qde);return mS(e,t)}a(efe,"s3FileObject");function mS(e,t){if(!t){let r=Fde.checkGlobalSchemaTable(e.schema,e.table);if(r)return dS(new Error,r,Nw.BAD_REQUEST);if(e.operation===fS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{Ow.accessSync(e.file_path,Ow.constants.R_OK|Ow.constants.F_OK)}catch(n){return n.code===fS.NODE_ERROR_CODES.ENOENT?dS(n,`No such file or directory ${n.path}`,Nw.BAD_REQUEST):n.code===fS.NODE_ERROR_CODES.EACCES?dS(n,`Permission denied ${n.path}`,Nw.BAD_REQUEST):dS(n)}}return t}a(mS,"postValidateChecks");uV.exports={dataObject:Jde,urlObject:Xde,fileObject:Zde,s3FileObject:efe}});var Dw=P((fDe,dV)=>{"use strict";var Ph=X(),ES=(G(),D($));async function tfe(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===ES.OPERATIONS_ENUM.INSERT||t.operation===ES.OPERATIONS_ENUM.UPDATE||t.operation===ES.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===ES.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Ph.info(i.message),i):i.http_resp_msg?(Ph.error(`Error calling operation: ${e.name}`),Ph.error(i.http_resp_msg),i):(Ph.error(`Error calling operation: ${e.name}`),Ph.error(i),i)}}a(tfe,"callOperationFunctionAsAwait");dV.exports={callOperationFunctionAsAwait:tfe}});var Lw=P((hDe,_V)=>{"use strict";var{S3:rfe,GetObjectCommand:nfe}=require("@aws-sdk/client-s3");_V.exports={getFileStreamFromS3:sfe,getS3AuthObj:fV};async function sfe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await fV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new nfe(r))).Body}a(sfe,"getFileStreamFromS3");function fV(e,t,r){return new rfe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(fV,"getS3AuthObj")});var pV=P((mDe,hV)=>{"use strict";var Mw=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}},vw=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};hV.exports={BulkLoadFileObject:Mw,BulkLoadDataObject:vw}});var EV=P((gDe,mV)=>{"use strict";var Uw=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};mV.exports=Uw});var Gw=P((bDe,vV)=>{"use strict";var gS=gn(),TS=Pw(),ife=require("needle"),ni=(G(),D($)),TDe=Pt(),dd=oe(),{handleHDBError:Vt,hdb_errors:NV}=he(),{HTTP_STATUS_CODES:Hr,HDB_ERROR_MSGS:Sr,CHECK_LOGS_WRAPPER:Rl}=NV,fd=X(),xw=require("papaparse");dd.promisifyPapaParse();var si=require("fs-extra"),ofe=require("path"),{chain:gV}=require("stream-chain"),SV=require("stream-json/streamers/StreamArray"),TV=require("stream-json/utils/Batch"),AV=require("stream-chain/utils/comp"),{finished:RV}=require("stream"),afe=ce(),wV=Dw(),cfe=Lw(),{BulkLoadFileObject:Hw,BulkLoadDataObject:lfe}=pV(),kw=pw(),{verifyBulkLoadAttributePerms:IV}=cS(),ADe=EV(),RDe=Er(),yDe=lo(),{databases:ufe}=(Ue(),D(at)),{coerceType:dfe}=(gf(),D(qw)),yV="No records parsed from csv file.",Al=`${afe.get("HDB_ROOT")}/tmp`,{schema_regex:ffe}=Ri(),bV=1024*1024*2,OV=5e3,_fe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};vV.exports={csvDataLoad:hfe,csvURLLoad:pfe,csvFileLoad:mfe,importFromS3:Efe};async function hfe(e,t){let r=TS.dataObject(e);if(r)throw Vt(r,r.message,Hr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=DV(e.schema,e.table),i=xw.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Bw.bind(null,s),dynamicTyping:!1}),o=new kw;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&IV(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 Vt(new Error,c,Hr.BAD_REQUEST,void 0,void 0,!0);let l=new lfe(e.action,e.schema,e.table,i.data);return n=await wV.callOperationFunctionAsAwait(LV,l,null),n.message===yV?yV:MV(n.records,n.number_written)}catch(s){throw yl(s)}}a(hfe,"csvDataLoad");async function pfe(e){let t=TS.urlObject(e);if(t)throw Vt(t,t.message,Hr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Al}/${r}`;try{await gfe(e,r)}catch(s){throw fd.error(Sr.DOWNLOAD_FILE_ERR(r)+" - "+s),Vt(s,Rl(Sr.DOWNLOAD_FILE_ERR(r)))}try{let s=new Hw(this.job_operation_function.name,e.action,e.schema,e.table,n,ni.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await Fw(s);return await SS(n),i}catch(s){throw await SS(n),yl(s)}}a(pfe,"csvURLLoad");async function mfe(e){let t=TS.fileObject(e);if(t)throw Vt(t,t.message,Hr.BAD_REQUEST,void 0,void 0,!0);let r=new Hw(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ni.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await Fw(r)}catch(n){throw yl(n)}}a(mfe,"csvFileLoad");async function Efe(e){let t=TS.s3FileObject(e);if(t)throw Vt(t,t.message,Hr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=ofe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Al}/${s}`;let i=new Hw(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Sfe(s,e);let o=await Fw(i);return await SS(r),o}catch(n){throw await SS(r),yl(n)}}a(Efe,"importFromS3");async function gfe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await ife("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 Vt(n,s,n.statusCode,ni.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Afe(r,e.csv_url),await Tfe(t,r.raw)}a(gfe,"downloadCSVFile");async function Sfe(e,t){try{let r=`${Al}/${e}`;await si.mkdirp(Al),await si.writeFile(`${Al}/${e}`,"",{flag:"a+"});let n=await si.createWriteStream(r),s=await cfe.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(){fd.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw fd.error(Sr.S3_DOWNLOAD_ERR+" - "+r),Vt(r,Rl(Sr.S3_DOWNLOAD_ERR))}}a(Sfe,"downloadFileFromS3");async function Tfe(e,t){try{await si.mkdirp(Al),await si.writeFile(`${Al}/${e}`,t)}catch(r){throw fd.error(Sr.WRITE_TEMP_FILE_ERR),Vt(r,Rl(Sr.DEFAULT_BULK_LOAD_ERR))}}a(Tfe,"writeFileToTempFolder");async function SS(e){if(e)try{await si.access(e),await si.unlink(e)}catch{fd.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(SS,"deleteTempFile");function Afe(e,t){if(e.statusCode!==NV.HTTP_STATUS_CODES.OK)throw Vt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Hr.BAD_REQUEST);if(!_fe[e.headers["content-type"]])throw Vt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Hr.BAD_REQUEST);if(!e.raw)throw Vt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Hr.BAD_REQUEST)}a(Afe,"validateURLResponse");async function Fw(e){try{let t;switch(e.file_type){case ni.VALID_S3_FILE_TYPES.CSV:t=await Rfe(e);break;case ni.VALID_S3_FILE_TYPES.JSON:t=await yfe(e);break;default:throw Vt(new Error,Sr.DEFAULT_BULK_LOAD_ERR,Hr.BAD_REQUEST,ni.LOG_LEVELS.ERROR,Sr.INVALID_FILE_EXT_ERR(e))}return MV(t.records,t.number_written)}catch(t){throw yl(t)}}a(Fw,"fileLoad");async function CV(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 gS.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&IV(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Vt(c);r(l)}}a(CV,"validateChunk");async function PV(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;dd.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!dd.isEmpty(c)&&!dd.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 wV.callOperationFunctionAsAwait(LV,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Vt(c,Rl(Sr.INSERT_CSV_ERR),Hr.INTERNAL_SERVER_ERROR,ni.LOG_LEVELS.ERROR,Sr.INSERT_CSV_ERR+" - "+c);r(l)}}a(PV,"insertChunk");async function Rfe(e){let t={records:0,number_written:0},r=DV(e.schema,e.table);try{let n=new kw,s=si.createReadStream(e.file_path,{highWaterMark:bV});s.setEncoding("utf8"),await xw.parsePromise(s,CV.bind(null,e,n),Bw.bind(null,r));let i=n.getPermsResponse();if(i)throw Vt(new Error,i,Hr.BAD_REQUEST);return s=si.createReadStream(e.file_path,{highWaterMark:bV}),s.setEncoding("utf8"),await xw.parsePromise(s,PV.bind(null,e,t),Bw.bind(null,r)),s.destroy(),t}catch(n){throw Vt(n,Rl(Sr.PAPA_PARSE_ERR),Hr.INTERNAL_SERVER_ERROR,ni.LOG_LEVELS.ERROR,Sr.PAPA_PARSE_ERR+n)}}a(Rfe,"callPapaParse");function DV(e,t){let r=ufe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>dfe(i,s));return n}a(DV,"createTransformMap");function Bw(e,t,r){let n=e.get(r);return n?n(t):dd.autoCast(t)}a(Bw,"typeFunction");async function yfe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new kw,s=gV([si.createReadStream(e.file_path,{encoding:"utf-8"}),SV.withParser(),c=>c.value,new TV({batchSize:OV}),AV(async c=>{await CV(e,n,r,c)})]);await new Promise((c,l)=>{RV(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Vt(new Error,i,Hr.BAD_REQUEST);let o=gV([si.createReadStream(e.file_path,{encoding:"utf-8"}),SV.withParser(),c=>c.value,new TV({batchSize:OV}),AV(async c=>{await PV(e,t,r,c)})]);return await new Promise((c,l)=>{RV(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Vt(n,Rl(Sr.INSERT_JSON_ERR),Hr.INTERNAL_SERVER_ERROR,ni.LOG_LEVELS.ERROR,Sr.INSERT_JSON_ERR+n)}}a(yfe,"insertJson");async function LV(e){let t={};try{e.data&&e.data.length>0&&bfe(e.data[0])?t=await Ofe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",fd.info(t.message))}catch(r){throw yl(r)}return t}a(LV,"callBulkFileLoad");function bfe(e){let t=Object.keys(e);for(let r of t)if(!ffe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(bfe,"validateColumnNames");async function Ofe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=gS.insert;break;case"update":i=gS.update;break;case"upsert":i=gS.upsert;break;default:throw Vt(new Error,Sr.INVALID_ACTION_PARAM_ERR(n),Hr.BAD_REQUEST,ni.LOG_LEVELS.ERROR,Sr.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 f=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][f])>=0&&e.splice(d,1)}let l=dd.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw yl(o)}}a(Ofe,"bulkFileLoad");function MV(e,t){return`successfully loaded ${t} of ${e} records`}a(MV,"buildResponseMsg");function yl(e){return Vt(e,Rl(Sr.DEFAULT_BULK_LOAD_ERR),Hr.INTERNAL_SERVER_ERROR,ni.LOG_LEVELS.ERROR,Sr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(yl,"buildTopLevelErrMsg")});var Kw=P((NDe,qV)=>{"use strict";var Vw=Vr(),Nfe=Lw(),{AsyncParser:wfe}=require("json2csv"),AS=require("stream"),Jn=oe(),$w=require("fs-extra"),Ife=require("path"),bs=X(),{promisify:BV}=require("util"),Dh=oe(),{handleHDBError:lr,hdb_errors:Cfe}=he(),{HDB_ERROR_MSGS:Nn,HTTP_STATUS_CODES:ur}=Cfe,{streamAsJSON:Pfe}=(VA(),D(hL)),{Upload:Dfe}=require("@aws-sdk/lib-storage"),{toCsvStream:Lfe}=(eo(),D(LL)),UV=["search_by_value","search_by_hash","sql","search_by_conditions"],xV=["json","csv"],HV="json",kV="csv",Mfe="Successfully exported JSON locally.",vfe="Successfully exported CSV locally.",Ufe=1e3,xfe=Vw.searchByHash,Bfe=Vw.searchByValue,Hfe=BV(AS.finished);qV.exports={export_to_s3:qfe,export_local:kfe};async function kfe(e){bs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=FV(e);if(!Jn.isEmpty(t))throw bs.error(t),lr(new Error,t,ur.BAD_REQUEST,void 0,void 0,!0);if(Jn.isEmpty(e.path))throw bs.error(Nn.MISSING_VALUE("path")),lr(new Error,Nn.MISSING_VALUE("path"),ur.BAD_REQUEST,void 0,void 0,!0);let r=(Jn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Ife.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Jn.buildFolderPath(e.path,r);await Ffe(e.path);let s=await GV(e);return await Gfe(n,e.format,s)}a(kfe,"export_local");async function Ffe(e){if(bs.trace("in confirmPath"),Jn.isEmptyOrZeroLength(e))throw lr(new Error,`Invalid path: ${e}`,ur.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await $w.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,bs.error(n),lr(new Error,n,ur.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw bs.error(r),lr(new Error,r,ur.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Ffe,"confirmPath");async function Gfe(e,t,r){if(bs.trace("in saveToLocal"),Dh.isEmptyOrZeroLength(e))throw lr(new Error,Nn.INVALID_VALUE("file_path"),ur.BAD_REQUEST,void 0,void 0,!0);if(Dh.isEmptyOrZeroLength(t))throw lr(new Error,Nn.INVALID_VALUE("Source format"),ur.BAD_REQUEST,void 0,void 0,!0);if(Dh.isEmpty(r))throw lr(new Error,Nn.NOT_FOUND("Data"),ur.BAD_REQUEST,void 0,void 0,!0);if(t===HV){let n=$w.createWriteStream(e);return Pfe(r).pipe(n),await Hfe(n),{message:Mfe,path:e}}else if(t===kV){let n=$w.createWriteStream(e),s=AS.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(f=>({label:f,value:f})));let c={objectMode:!0};return await new wfe(i,c).fromInput(s).toOutput(n).promise(!1),{message:vfe,path:e}}throw lr(new Error,Nn.INVALID_VALUE("format"),ur.BAD_REQUEST)}a(Gfe,"saveToLocal");async function qfe(e){if(!e.s3||Object.keys(e.s3).length===0)throw lr(new Error,Nn.MISSING_VALUE("S3 object"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw lr(new Error,Nn.MISSING_VALUE("aws_access_key_id"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw lr(new Error,Nn.MISSING_VALUE("aws_secret_access_key"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.bucket))throw lr(new Error,Nn.MISSING_VALUE("bucket"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.key))throw lr(new Error,Nn.MISSING_VALUE("key"),ur.BAD_REQUEST);if(Jn.isEmptyOrZeroLength(e.s3.region))throw lr(new Error,Nn.MISSING_VALUE("region"),ur.BAD_REQUEST);let t=FV(e);if(!Jn.isEmpty(t))throw lr(new Error,t,ur.BAD_REQUEST);bs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await GV(e)}catch(l){throw bs.error(l),l}let n,s=await Nfe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new AS.PassThrough;if(e.format===kV){i=e.s3.key+".csv";let l=Lfe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===HV){i=e.s3.key+".json";let l=new AS.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let u=r.length,f="";for(let[d,h]of r.entries()){let _=d===u-1?JSON.stringify(h):JSON.stringify(h)+",";f+=_,d!==0&&d%Ufe===0&&(l.push(f),f="")}f.length!==0&&l.push(f),l.push("]"),l.push(null)}else throw lr(new Error,Nn.INVALID_VALUE("format"),ur.BAD_REQUEST);return new Dfe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(qfe,"export_to_s3");function FV(e){if(bs.trace("in exportCoreValidation"),Jn.isEmpty(e.format))return"format missing";if(xV.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${xV.join(", ")}`;let t=e.search_operation.operation;if(Jn.isEmpty(t))return"search_operation.operation missing";if(UV.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${UV.join(", ")}`}a(FV,"exportCoreValidation");async function GV(e){bs.trace("in getRecords");let t,r;if(Dh.isEmpty(e.search_operation)||Dh.isEmptyOrZeroLength(e.search_operation.operation))throw lr(new Error,Nn.INVALID_VALUE("Search operation"),ur.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Bfe;break;case"search_by_hash":t=xfe;break;case"search_by_conditions":t=Vw.searchByConditions;break;case"sql":{let n=uS();t=BV(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,bs.error(r),lr(new Error,r,ur.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(GV,"getRecords")});var VV=P((IDe,$V)=>{"use strict";var Yw=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};$V.exports=Yw});var WV=P((PDe,YV)=>{"use strict";var $fe=(G(),D($)),KV=require("moment"),Vfe=require("uuid").v4,Ww=class{static{a(this,"JobObject")}constructor(){this.id=Vfe(),this.type=void 0,this.start_datetime=KV().valueOf(),this.created_datetime=KV().valueOf(),this.end_datetime=void 0,this.status=$fe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};YV.exports=Ww});var zw=P((LDe,t1)=>{"use strict";var Kfe=require("uuid").v4,XV=gn(),ZV=Vr(),Yfe=Ys(),Wfe=_u(),zfe=VV(),bt=(G(),D($)),jfe=WV(),Qfe=NE(),ii=X(),Jfe=df(),_d=oe(),{promisify:Xfe}=require("util"),bl=require("moment"),Zfe=uS(),RS=Pw(),zV=jR(),{deleteTransactionLogsBeforeValidator:e_e}=uw(),{handleHDBError:jV,hdb_errors:t_e,ClientError:r_e}=he(),{HTTP_STATUS_CODES:QV}=t_e,JV=ZV.searchByValue,n_e=ZV.searchByHash,s_e=XV.insert,i_e=Xfe(Zfe.evaluateSQL),o_e=XV.update;t1.exports={addJob:l_e,updateJob:d_e,handleGetJob:a_e,handleGetJobsByStartDate:c_e,getJobById:e1};async function a_e(e){if(e.id===void 0)throw new r_e("'id' is required");let t=await e1(e.id);return _d.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(a_e,"handleGetJob");async function c_e(e){try{let t=await u_e(e);if(ii.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=bl(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=bl(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 ii.error(r),new Error(r)}}a(c_e,"handleGetJobsByStartDate");async function l_e(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||_d.isEmptyOrZeroLength(e.operation)){let f="job parameter is invalid";return ii.info(f),t.error=f,t}if(!bt.JOB_TYPE_ENUM[e.operation])return ii.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case bt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=RS.fileObject(e);break;case bt.OPERATIONS_ENUM.CSV_URL_LOAD:n=RS.urlObject(e);break;case bt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=RS.dataObject(e);break;case bt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=RS.s3FileObject(e);break;case bt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case bt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=zV(e,"date");break;case bt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=zV(e,"timestamp");break;case bt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=e_e(e);break;case bt.OPERATIONS_ENUM.RESTART_SERVICE:if(bt.HDB_PROCESS_SERVICES[e.service]===void 0)throw jV(new Error,"Invalid service",QV.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw jV(n,n.message,QV.BAD_REQUEST,void 0,void 0,!0);let s=new jfe;s.type=e.operation===bt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?bt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Yfe(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await JV(i))}catch(f){let d=`There was an error inserting a new job: ${f}`;return ii.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Kfe();try{o=await JV(i)}catch(f){let d=`There was an error inserting a new job: ${f}`;return ii.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ii.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Jfe(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await s_e(l)}catch(f){return ii.error(`There was an error inserting a job for job type: ${e.operation} -- ${f}`),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 f=`Created a job with type ${s.type} and id ${s.id}`;t.message=f,t.createdJob=s,t.success=!0,ii.trace(f)}return t}a(l_e,"addJob");async function u_e(e){let t=bl(e.from_date,bl.ISO_8601),r=bl(e.to_date,bl.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 zfe(n,e.hdb_user);try{return await i_e(s)}catch(i){throw ii.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(u_e,"getJobsInDateRange");async function e1(e){if(_d.isEmptyOrZeroLength(e))return _d.errorizeMessage("Invalid job ID specified.");let t=new Wfe(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await n_e(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return ii.error(n),_d.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(e1,"getJobById");async function d_e(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(_d.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===bt.JOB_STATUS_ENUM.COMPLETE||e.status===bt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=bl().valueOf());let t=new Qfe(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await o_e(t),r}a(d_e,"updateJob")});var l1=P((vDe,c1)=>{"use strict";var r1=oe(),Tr=(G(),D($)),f_e=require("moment"),yS=Gw(),Lh=X(),n1=zw(),s1=Kw(),i1=Uc(),o1=st(),__e=sS(),h_e=nd(),{parentPort:p_e,isMainThread:a1}=require("worker_threads"),{onMessageByType:m_e}=st(),jw=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function E_e(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(r1.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(r1.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Tr.JOB_TYPE_ENUM.csv_file_load:await xi(e,yS.csvFileLoad);break;case Tr.JOB_TYPE_ENUM.csv_url_load:await xi(e,yS.csvURLLoad);break;case Tr.JOB_TYPE_ENUM.csv_data_load:await xi(e,yS.csvDataLoad);break;case Tr.JOB_TYPE_ENUM.import_from_s3:await xi(e,yS.importFromS3);break;case Tr.JOB_TYPE_ENUM.empty_trash:break;case Tr.JOB_TYPE_ENUM.export_local:await xi(e,s1.export_local);break;case Tr.JOB_TYPE_ENUM.export_to_s3:await xi(e,s1.export_to_s3);break;case Tr.JOB_TYPE_ENUM.delete_files_before:case Tr.JOB_TYPE_ENUM.delete_records_before:await xi(e,i1.deleteFilesBefore);break;case Tr.JOB_TYPE_ENUM.delete_audit_logs_before:await xi(e,i1.deleteAuditLogsBefore);break;case Tr.JOB_TYPE_ENUM.delete_transaction_logs_before:await xi(e,__e.deleteTransactionLogsBefore);break;case Tr.JOB_TYPE_ENUM.restart_service:return await xi(e,h_e.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(E_e,"parseMessage");async function xi(e,t){try{e.job.status=Tr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=f_e().valueOf(),await n1.updateJob(e.job),await g_e(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Lh.error(`There was an error running ${t.name} job with id ${e.job.id}`),Lh.error(n),e.job.message=n,e.job.status=Tr.JOB_STATUS_ENUM.ERROR;try{await n1.updateJob(e.job)}catch(s){throw Lh.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(xi,"runJob");async function g_e(e){Lh.trace("launching job thread:",e),a1?o1.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Tr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):p_e.postMessage({type:Tr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(g_e,"launchJobThread");a1&&m_e(Tr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{o1.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Tr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){Lh.error(r)}});c1.exports={parseMessage:E_e,RunnerMessage:jw}});var d1=P((xDe,u1)=>{"use strict";var Qw=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};u1.exports=Qw});var lw=P((kDe,rI)=>{"use strict";var IS=Vr(),Zw=uS(),bS=Gw(),Io=pg(),OS=uo(),vh=Uc(),S_e=HO(),Mh=Gn(),NS=p_(),Lt=cw(),wS=X(),T_e=$O(),A_e=wg(),f1=hN(),R_e=Cg(),y_e=EN(),b_e=gN(),O_e=AN(),N_e=yN(),Jw=vg(),_1=Kw(),w_e=cS(),eI=zw(),W=(G(),D($)),{hdb_errors:xh,handleHDBError:Uh}=he(),{HTTP_STATUS_CODES:h1}=xh,Xw=xN(),p1=nd(),O1=require("util"),pd=gn(),I_e=$s(),C_e=Ku(),m1=l1(),E1=(yu(),D(I_)),g1=(Qg(),D(ph)),S1=wt(),T1=sS(),A1=Sh(),{setServerUtilities:P_e}=(gf(),D(qw)),{CONTEXT:HDe}=(na(),D(xA)),{_assignPackageExport:D_e}=ui(),{transformReq:L_e}=oe(),{server:M_e}=(Dr(),D(ql)),en=wS.loggerWithTag("operation"),hd=Zs(),R1=(ll(),D(cl)),v_e=Dw(),y1=IS.searchByHash,U_e=IS.searchByValue,x_e=O1.promisify(IS.search),B_e=O1.promisify(Zw.evaluateSQL),H_e={[W.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[W.OPERATIONS_ENUM.CREATE_TABLE]:!0,[W.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[W.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[W.OPERATIONS_ENUM.DROP_TABLE]:!0,[W.OPERATIONS_ENUM.DROP_SCHEMA]:!0},ee=d1();async function N1(e,t){try{if(e.body.operation!=="read_log"&&(wS.log_level===W.LOG_LEVELS.INFO||wS.log_level===W.LOG_LEVELS.DEBUG||wS.log_level===W.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,payload:o,...c}=e.body;en.info(c)}}catch(n){en.error(n)}let r=await v_e.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return H_e[e.body.operation]&&I_e.setSchemaDataToGlobal(n=>{n&&en.error(n)}),r}a(N1,"processLocalTransaction");var b1=F_e();rI.exports={chooseOperation:w1,getOperationFunction:I1,operation:tI,processLocalTransaction:N1,executeJob:Os};P_e(rI.exports);M_e.operation=tI;function w1(e){let t;try{t=I1(e)}catch(s){throw en.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=Zw.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Zw.checkASTPermissions(e,i);if(o)throw en.error(`${h1.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),Uh(new Error,o,xh.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==W.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==W.OPERATIONS_ENUM.LOGIN&&e.operation!==W.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=w_e.verifyPerms(i,s);if(o)throw en.error(`${h1.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),Uh(new Error,o,xh.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Uh(s,"There was an error when trying to choose an operation path")}return r}a(w1,"chooseOperation");function I1(e){if(en.trace(`getOperationFunction with operation: ${e.operation}`),b1.has(e.operation))return b1.get(e.operation);throw Uh(new Error,xh.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),xh.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(I1,"getOperationFunction");D_e("operation",tI);function tI(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=w1(e);return N1({body:e},n)}a(tI,"operation");async function k_e(e){en.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[W.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case W.OPERATIONS_ENUM.INSERT:o=await pd.insert(i);break;case W.OPERATIONS_ENUM.UPDATE:o=await pd.update(i);break;case W.OPERATIONS_ENUM.UPSERT:o=await pd.upsert(i);break;case W.OPERATIONS_ENUM.DELETE:o=await vh.deleteRecord(i);break;default:en.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){en.info("Invalid operation in transaction"),en.error(o)}}a(k_e,"catchup");async function Os(e){L_e(e);let t,r;try{r=await eI.addJob(e),t=r.createdJob,en.info("addJob result",r);let n=new m1.RunnerMessage(t,e);return{message:await m1.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw en.error(s),Uh(n,s)}}a(Os,"executeJob");function F_e(){let e=new Map;return e.set(W.OPERATIONS_ENUM.INSERT,new ee(pd.insert)),e.set(W.OPERATIONS_ENUM.UPDATE,new ee(pd.update)),e.set(W.OPERATIONS_ENUM.UPSERT,new ee(pd.upsert)),e.set(W.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new ee(IS.searchByConditions)),e.set(W.OPERATIONS_ENUM.SEARCH_BY_HASH,new ee(y1)),e.set(W.OPERATIONS_ENUM.SEARCH_BY_ID,new ee(y1)),e.set(W.OPERATIONS_ENUM.SEARCH_BY_VALUE,new ee(U_e)),e.set(W.OPERATIONS_ENUM.SEARCH,new ee(x_e)),e.set(W.OPERATIONS_ENUM.SQL,new ee(B_e)),e.set(W.OPERATIONS_ENUM.CSV_DATA_LOAD,new ee(Os,bS.csvDataLoad)),e.set(W.OPERATIONS_ENUM.CSV_FILE_LOAD,new ee(Os,bS.csvFileLoad)),e.set(W.OPERATIONS_ENUM.CSV_URL_LOAD,new ee(Os,bS.csvURLLoad)),e.set(W.OPERATIONS_ENUM.IMPORT_FROM_S3,new ee(Os,bS.importFromS3)),e.set(W.OPERATIONS_ENUM.CREATE_SCHEMA,new ee(Io.createSchema)),e.set(W.OPERATIONS_ENUM.CREATE_DATABASE,new ee(Io.createSchema)),e.set(W.OPERATIONS_ENUM.CREATE_TABLE,new ee(Io.createTable)),e.set(W.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new ee(Io.createAttribute)),e.set(W.OPERATIONS_ENUM.DROP_SCHEMA,new ee(Io.dropSchema)),e.set(W.OPERATIONS_ENUM.DROP_DATABASE,new ee(Io.dropSchema)),e.set(W.OPERATIONS_ENUM.DROP_TABLE,new ee(Io.dropTable)),e.set(W.OPERATIONS_ENUM.DROP_ATTRIBUTE,new ee(Io.dropAttribute)),e.set(W.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new ee(OS.describeSchema)),e.set(W.OPERATIONS_ENUM.DESCRIBE_DATABASE,new ee(OS.describeSchema)),e.set(W.OPERATIONS_ENUM.DESCRIBE_TABLE,new ee(OS.describeTable)),e.set(W.OPERATIONS_ENUM.DESCRIBE_ALL,new ee(OS.describeAll)),e.set(W.OPERATIONS_ENUM.DELETE,new ee(vh.deleteRecord)),e.set(W.OPERATIONS_ENUM.ADD_USER,new ee(Mh.addUser)),e.set(W.OPERATIONS_ENUM.ALTER_USER,new ee(Mh.alterUser)),e.set(W.OPERATIONS_ENUM.DROP_USER,new ee(Mh.dropUser)),e.set(W.OPERATIONS_ENUM.LIST_USERS,new ee(Mh.listUsersExternal)),e.set(W.OPERATIONS_ENUM.LIST_ROLES,new ee(NS.listRoles)),e.set(W.OPERATIONS_ENUM.ADD_ROLE,new ee(NS.addRole)),e.set(W.OPERATIONS_ENUM.ALTER_ROLE,new ee(NS.alterRole)),e.set(W.OPERATIONS_ENUM.DROP_ROLE,new ee(NS.dropRole)),e.set(W.OPERATIONS_ENUM.USER_INFO,new ee(Mh.userInfo)),e.set(W.OPERATIONS_ENUM.READ_LOG,new ee(T_e)),e.set(W.OPERATIONS_ENUM.ADD_NODE,new ee(A_e)),e.set(W.OPERATIONS_ENUM.UPDATE_NODE,new ee(f1)),e.set(W.OPERATIONS_ENUM.SET_NODE_REPLICATION,new ee(f1)),e.set(W.OPERATIONS_ENUM.REMOVE_NODE,new ee(R_e)),e.set(W.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new ee(y_e)),e.set(W.OPERATIONS_ENUM.PURGE_STREAM,new ee(b_e)),e.set(W.OPERATIONS_ENUM.SET_CONFIGURATION,new ee(S1.setConfiguration)),e.set(W.OPERATIONS_ENUM.CLUSTER_STATUS,new ee(O_e.clusterStatus)),e.set(W.OPERATIONS_ENUM.CLUSTER_NETWORK,new ee(N_e)),e.set(W.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new ee(Jw.setRoutes)),e.set(W.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new ee(Jw.getRoutes)),e.set(W.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new ee(Jw.deleteRoutes)),e.set(W.OPERATIONS_ENUM.EXPORT_TO_S3,new ee(Os,_1.export_to_s3)),e.set(W.OPERATIONS_ENUM.CREATE_CSR,new ee(hd.createCsr)),e.set(W.OPERATIONS_ENUM.SIGN_CERTIFICATE,new ee(hd.signCertificate)),e.set(W.OPERATIONS_ENUM.LIST_CERTIFICATES,new ee(hd.listCertificates)),e.set(W.OPERATIONS_ENUM.ADD_CERTIFICATES,new ee(hd.addCertificate)),e.set(W.OPERATIONS_ENUM.REMOVE_CERTIFICATE,new ee(hd.removeCertificate)),e.set(W.OPERATIONS_ENUM.GET_KEY,new ee(hd.getKey)),e.set(W.OPERATIONS_ENUM.ADD_NODE_BACK,new ee(R1.addNodeBack)),e.set(W.OPERATIONS_ENUM.REMOVE_NODE_BACK,new ee(R1.removeNodeBack)),e.set(W.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new ee(Os,vh.deleteFilesBefore)),e.set(W.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new ee(Os,vh.deleteFilesBefore)),e.set(W.OPERATIONS_ENUM.EXPORT_LOCAL,new ee(Os,_1.export_local)),e.set(W.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new ee(eI.handleGetJobsByStartDate)),e.set(W.OPERATIONS_ENUM.GET_JOB,new ee(eI.handleGetJob)),e.set(W.OPERATIONS_ENUM.GET_FINGERPRINT,new ee(Xw.getFingerprint)),e.set(W.OPERATIONS_ENUM.SET_LICENSE,new ee(Xw.setLicense)),e.set(W.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new ee(Xw.getRegistrationInfo)),e.set(W.OPERATIONS_ENUM.RESTART,new ee(p1.restart)),e.set(W.OPERATIONS_ENUM.RESTART_SERVICE,new ee(Os,p1.restartService)),e.set(W.OPERATIONS_ENUM.CATCHUP,new ee(k_e)),e.set(W.OPERATIONS_ENUM.SYSTEM_INFORMATION,new ee(C_e.systemInformation)),e.set(W.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new ee(Os,vh.deleteAuditLogsBefore)),e.set(W.OPERATIONS_ENUM.READ_AUDIT_LOG,new ee(S_e)),e.set(W.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new ee(E1.createTokens)),e.set(W.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new ee(E1.refreshOperationToken)),e.set(W.OPERATIONS_ENUM.LOGIN,new ee(g1.login)),e.set(W.OPERATIONS_ENUM.LOGOUT,new ee(g1.logout)),e.set(W.OPERATIONS_ENUM.GET_CONFIGURATION,new ee(S1.getConfiguration)),e.set(W.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new ee(Lt.customFunctionsStatus)),e.set(W.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new ee(Lt.getCustomFunctions)),e.set(W.OPERATIONS_ENUM.GET_COMPONENT_FILE,new ee(Lt.getComponentFile)),e.set(W.OPERATIONS_ENUM.GET_COMPONENTS,new ee(Lt.getComponents)),e.set(W.OPERATIONS_ENUM.SET_COMPONENT_FILE,new ee(Lt.setComponentFile)),e.set(W.OPERATIONS_ENUM.DROP_COMPONENT,new ee(Lt.dropComponent)),e.set(W.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new ee(Lt.getCustomFunction)),e.set(W.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new ee(Lt.setCustomFunction)),e.set(W.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new ee(Lt.dropCustomFunction)),e.set(W.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new ee(Lt.addComponent)),e.set(W.OPERATIONS_ENUM.ADD_COMPONENT,new ee(Lt.addComponent)),e.set(W.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new ee(Lt.dropCustomFunctionProject)),e.set(W.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new ee(Lt.packageComponent)),e.set(W.OPERATIONS_ENUM.PACKAGE_COMPONENT,new ee(Lt.packageComponent)),e.set(W.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new ee(Lt.deployComponent)),e.set(W.OPERATIONS_ENUM.DEPLOY_COMPONENT,new ee(Lt.deployComponent)),e.set(W.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new ee(T1.readTransactionLog)),e.set(W.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new ee(Os,T1.deleteTransactionLogsBefore)),e.set(W.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new ee(A1.installModules)),e.set(W.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new ee(A1.auditModules)),e.set(W.OPERATIONS_ENUM.GET_BACKUP,new ee(Io.getBackup)),e.set(W.OPERATIONS_ENUM.ADD_SSH_KEY,new ee(Lt.addSSHKey)),e.set(W.OPERATIONS_ENUM.UPDATE_SSH_KEY,new ee(Lt.updateSSHKey)),e.set(W.OPERATIONS_ENUM.DELETE_SSH_KEY,new ee(Lt.deleteSSHKey)),e.set(W.OPERATIONS_ENUM.LIST_SSH_KEYS,new ee(Lt.listSSHKeys)),e.set(W.OPERATIONS_ENUM.SET_SSH_KNOWN_HOSTS,new ee(Lt.setSSHKnownHosts)),e.set(W.OPERATIONS_ENUM.GET_SSH_KNOWN_HOSTS,new ee(Lt.getSSHKnownHosts)),e}a(F_e,"initializeOperationFunctionMap")});var DS=P((GDe,D1)=>{"use strict";var CS=(G(),D($)),G_e=oe(),Bh=X(),{handleHDBError:nI,hdb_errors:PS}=he(),{isMainThread:q_e}=require("worker_threads"),{Readable:$_e}=require("stream"),C1=require("os"),V_e=require("util"),K_e=Gb(),Y_e=V_e.promisify(K_e.authorize),P1=lw(),{createGzip:W_e,constants:z_e}=require("zlib"),j_e=[CS.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,CS.OPERATIONS_ENUM.LOGIN,CS.OPERATIONS_ENUM.LOGOUT];function Q_e(e){let t=`Found an uncaught exception with message: ${e.message}. ${C1.EOL}Stack: ${e.stack} ${C1.EOL}Terminating ${q_e?"HDB":"thread"}.`;console.error(t),Bh.fatal(t),process.exit(1)}a(Q_e,"handleServerUncaughtException");function J_e(e,t,r){if(Bh[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:PS.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(J_e,"serverErrorHandler");function X_e(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=nI(new Error,"Invalid JSON.",PS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(G_e.isEmpty(e.body.operation)){let n=nI(new Error,"Request body must include an 'operation' property.",PS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(X_e,"reqBodyValidationHandler");function Z_e(e,t,r){let n;!j_e.includes(e.body.operation)||e.body.operation===CS.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?Y_e(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{Bh.warn(i),Bh.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let o=typeof i=="string"?{error:i}:{error:i.message};r(nI(i,o,PS.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(Z_e,"authHandler");async function ehe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=P1.chooseOperation(e.body);let s=await P1.processLocalTransaction(e,n);if(s instanceof $_e&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(W_e({level:z_e.Z_BEST_SPEED})))}return s}catch(s){throw Bh.error(s),s}}a(ehe,"handlePostRequest");D1.exports={authHandler:Z_e,handlePostRequest:ehe,handleServerUncaughtException:Q_e,serverErrorHandler:J_e,reqBodyValidationHandler:X_e}});var U1=P(($De,v1)=>{"use strict";var the=require("fastify-plugin"),{handlePostRequest:L1,authHandler:rhe,reqBodyValidationHandler:nhe}=DS();async function she(e){e.decorate("hdbCore",{preValidation:[nhe,rhe],request:a(t=>M1(L1(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>M1(L1(t,r,!0)),"requestWithoutAuthentication")})}a(she,"hdbCore");async function M1(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(M1,"convertAsyncIterators");v1.exports=the(she)});var B1=P((YDe,x1)=>{"use strict";var KDe=require("fs"),LS=ce();LS.initSync();var{CONFIG_PARAMS:sI}=(G(),D($)),ihe=1024*1024*1024;function ohe(e){let t=LS.get(sI.HTTP_TIMEOUT),r=LS.get(sI.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:ihe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:LS.get(sI.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(ohe,"getServerOptions");x1.exports=ohe});var F1=P((zDe,k1)=>{"use strict";var iI=ce();iI.initSync();var{CONFIG_PARAMS:H1}=(G(),D($));function ahe(){let e=iI.get(H1.HTTP_CORSACCESSLIST),t=iI.get(H1.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(ahe,"getCORSOptions");k1.exports=ahe});var $1=P((QDe,q1)=>{"use strict";var G1=ce();G1.initSync();var che=(G(),D($));function lhe(){return G1.get(che.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(lhe,"getHeaderTimeoutConfig");q1.exports=lhe});var aI={};Be(aI,{customFunctionsServer:()=>fhe,ready:()=>nK,start:()=>dhe});function dhe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Co||(Co=rK(t),Ke.http((await Co).server));let o=await Co,c=(0,oI.dirname)(s),l=(0,oI.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!V1.has(c)){V1.add(c);try{o.register(hhe(c,l))}catch(u){if(u.message==="Root plugin has already booted")pt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:nK}}async function fhe(){try{pt.info("In Custom Functions Fastify server"+process.cwd()),pt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),pt.debug(`Custom Functions server process ${process.pid} starting up.`),await _he();let e=Q1.get(B.HTTP_SECUREPORT)>0,t;try{t=Co=await rK(e)}catch(r){throw pt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw pt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){pt.error(`Custom Functions ${process.pid} Error: ${e}`),pt.error(e),process.exit(1)}}async function _he(){try{pt.info("Custom Functions starting configuration."),await J1.setUsersWithRolesCache(),pt.info("Custom Functions completed configuration.")}catch(e){pt.error(e)}}function hhe(e,t){return async function(r){try{pt.info("Custom Functions starting buildRoutes"),pt.trace("Loading fastify routes folder "+e),(0,K1.existsSync)(e)&&r.register(j1.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:pt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?pt.error(s.message):s&&pt.error(s),o()})}catch(n){pt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function rK(e){pt.info("Custom Functions starting buildServer.");let t=(0,X1.default)(e),r=(0,Y1.default)(t);r.server.headersTimeout=(0,eK.default)(),r.setErrorHandler(tK.serverErrorHandler);let n=(0,Z1.default)();return n&&r.register(W1.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(z1.default),await r.register(uhe),await r.after(),wf(r),pt.info("Custom Functions completed buildServer."),r}function nK(){if(Co)return Co.then?Co.then(e=>e.ready()):Co.ready()}var oI,K1,Y1,W1,z1,j1,Q1,pt,uhe,J1,X1,Z1,eK,tK,Co,V1,sK=be(()=>{oI=require("path"),K1=require("fs"),Y1=M(require("fastify")),W1=M(require("@fastify/cors")),z1=M(xb()),j1=M(require("@fastify/autoload")),Q1=M(ce());G();pt=M(X()),uhe=M(U1()),J1=M(Gn()),X1=M(B1()),Z1=M(F1()),eK=M($1()),tK=M(DS());eo();Dr();V1=new Set;a(dhe,"start");a(fhe,"customFunctionsServer");a(_he,"setUp");a(hhe,"buildRouteFolder");a(rK,"buildServer");a(nK,"ready")});var cI={};Be(cI,{start:()=>phe});function phe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,lK.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){oK||(oK=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=iK.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,aK.default)(s,(0,cK.realpathSync)(o))}}return i(s)},{runFirst:!0})),iK.set(r,n)}}}var aK,cK,lK,iK,oK,uK=be(()=>{aK=M(require("send")),cK=require("fs"),lK=M(require("serve-static")),iK=new Map;a(phe,"start")});var lI={};Be(lI,{start:()=>mhe});function mhe({override:e}){return{handleFile:a((t,r,n)=>{MS.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,dK.parse)(t))){if(process.env[s]!==void 0)if(MS.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)MS.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var dK,MS,fK=be(()=>{dK=require("dotenv"),MS=M(X());a(mhe,"start")});var dI=P((sLe,_K)=>{"use strict";var Hh=ce();Hh.initSync();var md=require("fs-extra"),uI=require("path"),Ed=(G(),D($)),Ehe=require("crypto"),ghe=require("uuid").v4;_K.exports=She;function She(){if(Hh.getHdbBasePath()!==void 0){let e=uI.join(Hh.getHdbBasePath(),Ed.LICENSE_KEY_DIR_NAME,Ed.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=uI.join(Hh.getHdbBasePath(),Ed.LICENSE_KEY_DIR_NAME,Ed.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=uI.join(Hh.getHdbBasePath(),Ed.LICENSE_KEY_DIR_NAME,Ed.JWT_ENUM.JWT_PASSPHRASE_NAME);try{md.accessSync(r),md.accessSync(e),md.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=ghe(),i=Ehe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});md.writeFileSync(r,s),md.writeFileSync(e,i.privateKey),md.writeFileSync(t,i.publicKey)}else throw n}}}a(She,"checkJWTTokenExist")});var pK=P((oLe,hK)=>{"use strict";var fI=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};hK.exports={HdbInfoInsertObject:fI}});var gK=P((cLe,EK)=>{"use strict";var mK=(G(),D($)),_I=class{static{a(this,"UpgradeObject")}constructor(t,r){this[mK.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[mK.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};EK.exports={UpgradeObject:_I}});var vS=P((uLe,TK)=>{"use strict";var Ns=require("prompt"),gd=require("chalk"),SK=X(),oi=require("os"),hI=lc(),pI=["yes","y"];async function The(e){let t=`${oi.EOL}`+gd.bold.green("Your current HarperDB version requires that we complete an update process.")+`${oi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${oi.EOL}${oi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${oi.EOL}`;Ns.override=hI(["CONFIRM_UPGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_UPGRADE:{description:gd.magenta(`${oi.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Ns.get([r])}catch(s){return SK.error("There was an error when prompting user about an upgrade."),SK.error(s),!1}return pI.includes(n.CONFIRM_UPGRADE)}a(The,"forceUpdatePrompt");async function Ahe(e){let t=`${oi.EOL}`+gd.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.${oi.EOL}`);Ns.override=hI(["CONFIRM_DOWNGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:gd.magenta(`${oi.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Ns.get([r]);return pI.includes(n.CONFIRM_DOWNGRADE)}a(Ahe,"forceDowngradePrompt");async function Rhe(){let e=`${oi.EOL}`+gd.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Ns.override=hI(["GENERATE_CERTS"]),Ns.start(),Ns.message=e;let t={properties:{GENERATE_CERTS:{description:gd.magenta(`${oi.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Ns.get([t]);return pI.includes(r.GENERATE_CERTS)}a(Rhe,"upgradeCertsPrompt");TK.exports={forceUpdatePrompt:The,forceDowngradePrompt:Ahe,upgradeCertsPrompt:Rhe}});var EI=P((fLe,AK)=>{"use strict";var mI=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};AK.exports=mI});var yK=P((gLe,RK)=>{"use strict";var yhe=oe(),bhe=wt(),hLe=X(),pLe=require("path"),mLe=require("fs"),ELe=(G(),D($));RK.exports={getOldPropsValue:Ohe};function Ohe(e,t,r=!1){let n=t.getRaw(e);return yhe.isNotEmptyAndHasValue(n)?n:r?bhe.getDefaultConfig(e):""}a(Ohe,"getOldPropsValue")});var wK=P((TLe,NK)=>{"use strict";var xa=require("path"),Ba=require("fs-extra"),Nhe=require("properties-reader"),whe=EI(),dr=X(),{getOldPropsValue:mt}=yK(),{HDB_SETTINGS_NAMES:ge,CONFIG_PARAMS:Ol}=(G(),D($)),Nl=wt(),US=ce(),bK=oe(),Bi=(G(),D($)),gI=new whe("3.1.0"),OK=[];function Ihe(){let e=Nhe(US.get(ge.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),dr.info(t);let r=` ;Settings for the HarperDB process.
39
39
 
40
40
  ;The directory selected during install where the database files reside.
41
- ${ge.HDB_ROOT_KEY} = ${pt(ge.HDB_ROOT_KEY,e)}
41
+ ${ge.HDB_ROOT_KEY} = ${mt(ge.HDB_ROOT_KEY,e)}
42
42
  ;The port the HarperDB REST interface will listen on.
43
- ${ge.SERVER_PORT_KEY} = ${pt(ge.SERVER_PORT_KEY,e)}
43
+ ${ge.SERVER_PORT_KEY} = ${mt(ge.SERVER_PORT_KEY,e)}
44
44
  ;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
45
- ${ge.HTTP_SECURE_ENABLED_KEY} = ${pt(ge.HTTP_SECURE_ENABLED_KEY,e)}
45
+ ${ge.HTTP_SECURE_ENABLED_KEY} = ${mt(ge.HTTP_SECURE_ENABLED_KEY,e)}
46
46
  ;The path to the SSL certificate used when running with HTTPS enabled.
47
- ${ge.CERT_KEY} = ${pt(ge.CERT_KEY,e)}
47
+ ${ge.CERT_KEY} = ${mt(ge.CERT_KEY,e)}
48
48
  ;The path to the SSL private key used when running with HTTPS enabled.
49
- ${ge.PRIVATE_KEY_KEY} = ${pt(ge.PRIVATE_KEY_KEY,e)}
49
+ ${ge.PRIVATE_KEY_KEY} = ${mt(ge.PRIVATE_KEY_KEY,e)}
50
50
  ;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
51
- ${ge.CORS_ENABLED_KEY} = ${pt(ge.CORS_ENABLED_KEY,e)}
51
+ ${ge.CORS_ENABLED_KEY} = ${mt(ge.CORS_ENABLED_KEY,e)}
52
52
  ;Allows for setting allowable domains with CORS. Comma separated list.
53
- ${ge.CORS_WHITELIST_KEY} = ${pt(ge.CORS_WHITELIST_KEY,e)}
53
+ ${ge.CORS_WHITELIST_KEY} = ${mt(ge.CORS_WHITELIST_KEY,e)}
54
54
  ;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
55
- ${ge.SERVER_TIMEOUT_KEY} = ${pt(ge.SERVER_TIMEOUT_KEY,e,!0)}
55
+ ${ge.SERVER_TIMEOUT_KEY} = ${mt(ge.SERVER_TIMEOUT_KEY,e,!0)}
56
56
  ;The number of milliseconds of inactivity a server needs to wait for additional incoming data, after it has finished writing the last response. Defaults to 5,000 ms (5 seconds).
57
- ${ge.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${pt(ge.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
57
+ ${ge.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${mt(ge.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
58
58
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
59
- ${ge.SERVER_HEADERS_TIMEOUT_KEY} = ${pt(ge.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
59
+ ${ge.SERVER_HEADERS_TIMEOUT_KEY} = ${mt(ge.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
60
60
  ;Define whether to log to file or not.
61
61
  ${ge.LOG_TO_FILE} = ${Nl.getDefaultConfig(Ol.LOGGING_FILE)}
62
62
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
63
63
  ${ge.LOG_TO_STDSTREAMS} = ${Nl.getDefaultConfig(Ol.LOGGING_STDSTREAMS)}
64
64
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
65
- ${ge.LOG_LEVEL_KEY} = ${pt(ge.LOG_LEVEL_KEY,e)}
65
+ ${ge.LOG_LEVEL_KEY} = ${mt(ge.LOG_LEVEL_KEY,e)}
66
66
  ;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
67
- ${ge.LOG_PATH_KEY} = ${pt(ge.LOG_PATH_KEY,e)}
67
+ ${ge.LOG_PATH_KEY} = ${mt(ge.LOG_PATH_KEY,e)}
68
68
  ;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
69
- ${ge.LOG_DAILY_ROTATE_KEY} = ${pt(ge.LOG_DAILY_ROTATE_KEY,e)}
69
+ ${ge.LOG_DAILY_ROTATE_KEY} = ${mt(ge.LOG_DAILY_ROTATE_KEY,e)}
70
70
  ;Set the number of daily log files to maintain when LOG_DAILY_ROTATE is enabled. If no integer value is set, no limit will be set for
71
71
  ;daily log files which may consume a large amount of storage depending on your log settings.
72
- ${ge.LOG_MAX_DAILY_FILES_KEY} = ${pt(ge.LOG_MAX_DAILY_FILES_KEY,e)}
72
+ ${ge.LOG_MAX_DAILY_FILES_KEY} = ${mt(ge.LOG_MAX_DAILY_FILES_KEY,e)}
73
73
  ;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
74
- ${ge.PROPS_ENV_KEY} = ${pt(ge.PROPS_ENV_KEY,e)}
74
+ ${ge.PROPS_ENV_KEY} = ${mt(ge.PROPS_ENV_KEY,e)}
75
75
  ;This allows self signed certificates to be used in clustering. This is a security risk
76
76
  ;as clustering will not validate the cert, so should only be used internally.
77
77
  ;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
78
- ${ge.ALLOW_SELF_SIGNED_SSL_CERTS} = ${pt(ge.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
78
+ ${ge.ALLOW_SELF_SIGNED_SSL_CERTS} = ${mt(ge.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
79
79
  ;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
80
- ${ge.MAX_HDB_PROCESSES} = ${pt(ge.MAX_HDB_PROCESSES,e)}
80
+ ${ge.MAX_HDB_PROCESSES} = ${mt(ge.MAX_HDB_PROCESSES,e)}
81
81
  ;Set to true to enable clustering. Requires a valid enterprise license.
82
- ${ge.CLUSTERING_ENABLED_KEY} = ${pt(ge.CLUSTERING_ENABLED_KEY,e,!0)}
82
+ ${ge.CLUSTERING_ENABLED_KEY} = ${mt(ge.CLUSTERING_ENABLED_KEY,e,!0)}
83
83
  ;The port that will be used for HarperDB clustering.
84
- ${ge.CLUSTERING_PORT_KEY} = ${pt(ge.CLUSTERING_PORT_KEY,e)}
84
+ ${ge.CLUSTERING_PORT_KEY} = ${mt(ge.CLUSTERING_PORT_KEY,e)}
85
85
  ;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
86
- ${ge.CLUSTERING_NODE_NAME_KEY} = ${pt(ge.CLUSTERING_NODE_NAME_KEY,e)}
86
+ ${ge.CLUSTERING_NODE_NAME_KEY} = ${mt(ge.CLUSTERING_NODE_NAME_KEY,e)}
87
87
  ;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
88
- ${ge.CLUSTERING_USER_KEY} = ${pt(ge.CLUSTERING_USER_KEY,e)}
88
+ ${ge.CLUSTERING_USER_KEY} = ${mt(ge.CLUSTERING_USER_KEY,e)}
89
89
  ;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
90
- ${ge.DISABLE_TRANSACTION_LOG_KEY} = ${pt(ge.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
90
+ ${ge.DISABLE_TRANSACTION_LOG_KEY} = ${mt(ge.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
91
91
  ;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
92
- ${ge.OPERATION_TOKEN_TIMEOUT_KEY} = ${pt(ge.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
92
+ ${ge.OPERATION_TOKEN_TIMEOUT_KEY} = ${mt(ge.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
93
93
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
94
- ${ge.REFRESH_TOKEN_TIMEOUT_KEY} = ${pt(ge.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
94
+ ${ge.REFRESH_TOKEN_TIMEOUT_KEY} = ${mt(ge.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
95
95
  ;The port the IPC server will run on.
96
96
  ${ge.IPC_SERVER_PORT} = ${Nl.getDefaultConfig(Ol.IPC_NETWORK_PORT)}
97
97
  ;Run HDB in the foreground.
@@ -101,14 +101,14 @@ ${ge.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Nl.getDefaultConfig(Ol.CUSTOMFUNCTIONS_EN
101
101
  ;The port used to access the custom functions server.
102
102
  ${ge.CUSTOM_FUNCTIONS_PORT_KEY} = ${Nl.getDefaultConfig(Ol.HTTP_PORT)}
103
103
  ;The path to the folder containing HarperDB custom function files.
104
- ${ge.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${xa.join(pt(ge.HDB_ROOT_KEY,e),"custom_functions")}
104
+ ${ge.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${xa.join(mt(ge.HDB_ROOT_KEY,e),"custom_functions")}
105
105
  ;Set the max number of processes HarperDB will start for the Custom Functions server
106
106
  ${ge.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Nl.getDefaultConfig(Ol.HTTP_THREADS)}
107
- `,n=US.get("settings_path"),s=xa.dirname(n),i=xa.join(s,"3_1_0_upgrade_settings.bak");try{dr.info(`Backing up old settings file to: ${i}`),Ba.copySync(n,i)}catch(c){throw dr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{dr.info("New settings file values for 3.1.0 upgrade:",r),dr.info(`Creating new/upgraded settings file at '${n}'`),Ba.writeFileSync(n,r),dr.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."),dr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),dr.error(c),Ba.copySync(i,n),c}US.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),dr.info(o),o}a(whe,"updateSettingsFile_3_1_0");function Ihe(){let e=xa.join(OK.getHomeDir(),Bi.HDB_HOME_DIR_NAME,Bi.LICENSE_KEY_DIR_NAME,Bi.LICENSE_FILE_NAME),t=xa.join(OK.getHomeDir(),Bi.HDB_HOME_DIR_NAME,Bi.LICENSE_KEY_DIR_NAME,Bi.REG_KEY_FILE_NAME),r=xa.join(US.getHdbBasePath(),Bi.LICENSE_KEY_DIR_NAME,Bi.LICENSE_FILE_NAME),n=xa.join(r,Bi.LICENSE_FILE_NAME),s=xa.join(r,Bi.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),dr.info(i);let o="Creating .license directory";console.log(o),dr.info(o),Ba.mkdirpSync(r);try{Ba.accessSync(e);try{let c="Moving licence file";console.log(c),dr.info(c),Ba.moveSync(e,n);let l="License file successfully moved.";console.log(l),dr.info(l)}catch{let l="moving license file failed";console.error(l),dr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),dr.warn(l)}try{Ba.accessSync(t);try{let c="Moving registration file";console.log(c),dr.info(c),Ba.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),dr.info(l)}catch{let l="moving registration file failed";console.error(l),dr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),dr.warn(l)}}a(Ihe,"moveLicenseFiles");gI.sync_functions.push(whe);gI.sync_functions.push(Ihe);NK.push(gI);wK.exports=NK});var MK=P((ALe,LK)=>{"use strict";var Xn=ht(),{insertRecords:Che}=Cc(),Phe=ln(),Ha=Ft(),Dhe=oe(),Po=X(),Lhe=oe(),Hi=require("fs-extra"),Do=require("path"),Mhe=require("cli-progress"),Fh=require("assert"),vhe=require("pino"),Uhe=ce();LK.exports=xhe;var xS,CK,BS,SI,tn,Gh=!1;async function xhe(e=!0){return xS=Uhe.getHdbBasePath(),CK=Do.join(xS,"schema"),BS=Do.join(xS,"4_0_0_upgrade_tmp"),SI=Do.join(xS,"transactions"),console.info("Reindexing upgrade started for schemas"),Po.notify("Reindexing upgrade started for schemas"),await PK(CK,!1,e),await Hi.pathExists(SI)&&(console.info(`
107
+ `,n=US.get("settings_path"),s=xa.dirname(n),i=xa.join(s,"3_1_0_upgrade_settings.bak");try{dr.info(`Backing up old settings file to: ${i}`),Ba.copySync(n,i)}catch(c){throw dr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{dr.info("New settings file values for 3.1.0 upgrade:",r),dr.info(`Creating new/upgraded settings file at '${n}'`),Ba.writeFileSync(n,r),dr.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."),dr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),dr.error(c),Ba.copySync(i,n),c}US.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),dr.info(o),o}a(Ihe,"updateSettingsFile_3_1_0");function Che(){let e=xa.join(bK.getHomeDir(),Bi.HDB_HOME_DIR_NAME,Bi.LICENSE_KEY_DIR_NAME,Bi.LICENSE_FILE_NAME),t=xa.join(bK.getHomeDir(),Bi.HDB_HOME_DIR_NAME,Bi.LICENSE_KEY_DIR_NAME,Bi.REG_KEY_FILE_NAME),r=xa.join(US.getHdbBasePath(),Bi.LICENSE_KEY_DIR_NAME,Bi.LICENSE_FILE_NAME),n=xa.join(r,Bi.LICENSE_FILE_NAME),s=xa.join(r,Bi.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),dr.info(i);let o="Creating .license directory";console.log(o),dr.info(o),Ba.mkdirpSync(r);try{Ba.accessSync(e);try{let c="Moving licence file";console.log(c),dr.info(c),Ba.moveSync(e,n);let l="License file successfully moved.";console.log(l),dr.info(l)}catch{let l="moving license file failed";console.error(l),dr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),dr.warn(l)}try{Ba.accessSync(t);try{let c="Moving registration file";console.log(c),dr.info(c),Ba.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),dr.info(l)}catch{let l="moving registration file failed";console.error(l),dr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),dr.warn(l)}}a(Che,"moveLicenseFiles");gI.sync_functions.push(Ihe);gI.sync_functions.push(Che);OK.push(gI);NK.exports=OK});var LK=P((RLe,DK)=>{"use strict";var Xn=ht(),{insertRecords:Phe}=Cc(),Dhe=ln(),Ha=Ft(),Lhe=oe(),Po=X(),Mhe=oe(),Hi=require("fs-extra"),Do=require("path"),vhe=require("cli-progress"),kh=require("assert"),Uhe=require("pino"),xhe=ce();DK.exports=Bhe;var xS,IK,BS,SI,tn,Fh=!1;async function Bhe(e=!0){return xS=xhe.getHdbBasePath(),IK=Do.join(xS,"schema"),BS=Do.join(xS,"4_0_0_upgrade_tmp"),SI=Do.join(xS,"transactions"),console.info("Reindexing upgrade started for schemas"),Po.notify("Reindexing upgrade started for schemas"),await CK(IK,!1,e),await Hi.pathExists(SI)&&(console.info(`
108
108
 
109
- Reindexing upgrade started for transaction logs`),Po.notify("Reindexing upgrade started for transaction logs"),await PK(SI,!0,e)),Po.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Gh?", but errors occurred":"")}a(xhe,"reindexUpgrade");async function PK(e,t,r){let n=await Hi.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Do.join(e,o.toString());if(o===".DS_Store")continue;let l=await Hi.readdir(c),u=l.length;for(let f=0;f<u;f++){let d=l[f];if(d!==".DS_Store"&&Hi.statSync(Do.join(c,d)).isDirectory())try{await Bhe(o,d,t),tn.info(`Reindexing started for ${o}.${d}`),Po.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await khe(o,d,c,t,r),tn.info(`Reindexing completed for ${o}.${d}`),Po.notify(`Reindexing completed for ${o}.${d}`)}catch(h){Gh=!0,h.schema_path=c,h.table_name=d,Po.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Po.error(h),tn.error(h),console.error(h)}}}if(!Gh)try{await Hi.rm(BS,{recursive:!0})}catch{}}a(PK,"processTables");async function Bhe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Do.join(BS,s);await Hi.ensureDir(BS),await Hi.writeFile(i,""),tn=vhe({level:"debug",formatters:{bindings(){}}},i)}a(Bhe,"initPinoLogger");var Hhe=20;async function khe(e,t,r,n,s){let i;try{i=await Xn.openEnvironment(r,t,n)}catch(E){if(E.message==="MDB_INVALID: File is not an LMDB file"){Po.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),tn.error(E);return}throw E}let o=qhe(i.dbis),c=Xn.openDBI(i,o),l=Object.keys(i.dbis),u=Xn.statDBI(i,o);tn.info(`Old environment stats: ${JSON.stringify(u)}`);let f=new Mhe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});f.start(u.entryCount,0,{});let d=await Xn.createEnvironment(r,t,!1);Xn.createDBI(d,o,!1,!0);let h=[];try{for(let E of c.getRange({start:!1}))E.value={...E.value},h.push(E),n||e==="system"&&(t==="hdb_schema"&&(E.key=E.key.toString(),E.value.name=E.value.name.toString()),t==="hdb_table"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.name=E.value.name.toString()),t==="hdb_attribute"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.table=E.value.table.toString(),E.value.attribute=E.value.attribute.toString())),h.length>Hhe&&await _();await _()}catch(E){throw Gh=!0,tn.error(E),E}async function _(){let E,T=h.map(({value:v})=>v);n?E=await Promise.all(T.map(v=>Fhe(d,v))):E=await Che(d,o,l.filter(v=>v!=="__blob__"),T,!1);for(let v=0,F=h.length;v<F;v++){let{key:q,value:Q}=h[v];tn.info(`Record hash value: ${q} hash: ${o}`);let te;n?te=E[v]:te=E.written_hashes.indexOf(q)>-1,Fh(te,!0),Ghe(d,o,Q[o],n),tn.info(`Insert success, written hashes: ${E.written_hashes}`),f.increment()}h=[],f.value/f.total*100%10===0&&Po.notify(`${e}.${t} ${f.value}/${f.total} records inserted`),tn.info(`${f.value}/${f.total} records inserted`)}a(_,"finishOutstanding"),f.stop();let m=Xn.statDBI(i,o),S=Xn.statDBI(d,o);if(tn.info(`Old stats entry count: ${m.entryCount}. New stats entry count: ${S.entryCount}`),Fh.deepStrictEqual(m.entryCount,S.entryCount),await Xn.closeEnvironment(i),await Xn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let E=Do.join(r,t),T=Do.join(E,"data.mdb"),O=Do.join(E,"lock.mdb");await Hi.unlink(T),await Hi.unlink(O),await Hi.rmdir(E),tn.info(`Deleted old environment files from schema folder: ${T}, ${O}`)}let g=await Xn.openEnvironment(r,t),R=Xn.statDBI(g,o);tn.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(R)}`),Fh.deepStrictEqual(R.entryCount,S.entryCount),await Xn.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}a(khe,"processTable");async function Fhe(e,t){Xn.initializeDBIs(e,Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ha.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),Lhe.isEmpty(t.user_name)||e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(Fhe,"insertTransaction");function Ghe(e,t,r,n){let i=e.dbis[t].get(r);Fh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ha.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&&!Dhe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,f=l.length;u<f;u++){let d=l[u];DK(e,c,d,r)}else DK(e,c,l,r)}a(Ghe,"validateIndices");function DK(e,t,r,n){try{let s=!1,i=Phe.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||tn.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),Fh.deepStrictEqual(s,!0)}catch(s){Gh=!0,tn.error(s),console.error(s)}}a(DK,"validateIndex");function qhe(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(qhe,"getHashDBI")});var HK=P((bLe,BK)=>{"use strict";var HS=require("path"),ka=require("fs-extra"),$he=EI(),wl=X(),vK=wt(),TI=ce(),ai=(G(),D($)),kS=oe(),Vhe=require("properties-reader"),Khe=Ys(),Yhe=wE(),Whe=Vr(),yLe=require("util"),zhe=Whe.searchByValue,Qhe=gn(),jhe=vg(),Jhe=Pt(),Xhe=MK(),UK=Zs(),Zhe=vS(),Vh=new $he("4.0.0"),xK=[],qh,$h;async function eme(){try{if(await Zhe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),qh){let t=kS.changeExtension(qh,".bak");await ka.move(qh,t)}if($h){let t=kS.changeExtension($h,".bak");await ka.move($h,t)}await UK.generateKeys()}else console.log("Using existing certificates."),UK.updateConfigCert(qh,$h,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(eme,"generateNewKeys");async function tme(){console.log("Updating HarperDB nodes."),wl.info("Updating HarperDB nodes.");let e=[];try{let t=new Khe(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await zhe(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Jhe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let f=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(f),f}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let f=0,d=c.subscriptions.length;f<d;f++){let h=c.subscriptions[f],_=h.channel.split(":");u.push({schema:_[0],table:_[1],publish:h.publish,subscribe:h.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(kS.isEmptyOrZeroLength(n))return;let s=new Yhe(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await Qhe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{jhe.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(tme,"updateNodes");async function rme(){let e=TI.get(ai.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(HS.join("config","settings.js"))){wl.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),wl.info(t);let r=HS.dirname(e),n=TI.get(ai.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=HS.join(n,"backup","4_0_0_upgrade_settings.bak"),i=HS.join(n,ai.HDB_CONFIG_FILE);try{wl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),ka.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{wl.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),wl.info("Updating env variables with new settings values");let d=vK.initOldConfig(e);qh=d[ai.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],$h=d[ai.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],vK.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=kS.getPropsFilePath();ka.accessSync(o,ka.constants.F_OK|ka.constants.R_OK);let l=Vhe(o).get(ai.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
110
- install_user = ${l}`;try{ka.writeFileSync(o,u)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{TI.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let f="New settings file for 4.0.0 upgrade successfully created.";try{ka.removeSync(r),console.log(f),wl.info(f)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(rme,"updateSettingsFile_4_0_0");Vh.async_functions.push(rme);Vh.async_functions.push(eme);Vh.async_functions.push(Xhe);Vh.async_functions.push(tme);xK.push(Vh);BK.exports=xK});var AI=P((NLe,qK)=>{"use strict";var Il=oe(),nme=(G(),D($)),kK=X(),{DATA_VERSION:sme,UPGRADE_VERSION:ime}=nme.UPGRADE_JSON_FIELD_NAMES_ENUM,FK=IK(),FS=HK(),Cl=new Map;FK&&FK.forEach(e=>{Cl.set(e.version,e)});FS&&FS.forEach(e=>{Cl.set(e.version,e)});FS&&FS.forEach(e=>{Cl.set(e.version,e)});function ome(){return[...Cl.keys()].sort(Il.compareVersions)}a(ome,"getSortedVersions");function GK(e){let t=e[sme],r=e[ime];return Il.isEmptyOrZeroLength(t)||Il.isEmptyOrZeroLength(r)?(kK.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),kK.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."),[]):[...Cl.keys()].sort(Il.compareVersions).filter(function(n){return Il.compareVersions(n,t)>0&&Il.compareVersions(n,r)<=0})}a(GK,"getVersionsForUpgrade");function ame(e){return GK(e).length>0}a(ame,"hasUpgradesRequired");function cme(e){return Il.isEmptyOrZeroLength(e)?null:Cl.has(e)?Cl.get(e):null}a(cme,"getDirectiveByVersion");qK.exports={getSortedVersions:ome,getDirectiveByVersion:cme,getVersionsForUpgrade:GK,hasUpgradesRequired:ame}});var qS=P((ILe,WK)=>{"use strict";var lme=require("util"),RI=require("chalk"),ume=require("os"),VK=gn(),dme=Vr(),Zn=(G(),D($)),KK=pK(),bI=ey(),{UpgradeObject:$K}=SK(),{forceDowngradePrompt:fme}=vS(),{packageJson:_me}=Et(),GS=X(),gd=oe(),OI=$s(),hme=(Ue(),D(at)),mme=AI(),pme=lme.promisify(OI.setSchemaDataToGlobal),Eme=dme.searchByValue,gme="info_id",Sme="2.9.9",Tme="3.0.0";async function Ame(e){let t=new KK.HdbInfoInsertObject(1,e,e),r=new bI.InsertObject(Zn.OPERATIONS_ENUM.INSERT,Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Zn.INFO_TABLE_HASH_ATTRIBUTE,[t]);return OI.setSchemaDataToGlobal(),VK.insert(r)}a(Ame,"insertHdbInstallInfo");async function yI(e){let t,r=await YK(),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 KK.HdbInfoInsertObject(i,e,e);let o=new bI.InsertObject(Zn.OPERATIONS_ENUM.INSERT,Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Zn.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await pme(),VK.insert(o)}a(yI,"insertHdbUpgradeInfo");async function YK(){let e=new bI.NoSQLSeachObject(Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,gme,Zn.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Eme(e))}catch(r){console.error(r)}return t}a(YK,"getAllHdbInfoRecords");async function Rme(){let e=await YK();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(Rme,"getLatestHdbInfoRecord");async function yme(){GS.info("Checking if HDB software has been updated");try{let e=_me.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await Rme(),r;if(gd.isEmpty(t))r=Sme;else if(r=t.data_version_num,gd.compareVersions(r.toString(),e.toString())>0){if(!gd.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(RI.yellow(`This instance's data was last run on version ${r}`)),console.error(RI.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.${ume.EOL}${Zn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");gd.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(RI.yellow(`This instance's data was last run on version ${r}`)),await fme(new $K(r,e))?await yI(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(OI.setSchemaDataToGlobal(),bme(r),e.toString()===r.toString())return;let n=new $K(r,e);if(mme.hasUpgradesRequired(n))return n;gd.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await yI(n.upgrade_version),GS.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw GS.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),GS.fatal(e),e}}a(yme,"getVersionUpdateInfo");function bme(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 ${Zn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in hme.databases.system))throw console.log(t),new Error(t);if(!gd.isEmpty(e)&&e<Tme)throw console.log(t),new Error(t)}a(bme,"checkIfInstallIsSupported");WK.exports={insertHdbInstallInfo:Ame,insertHdbUpgradeInfo:yI,getVersionUpdateInfo:yme}});var JK=P((PLe,jK)=>{"use strict";var $S=require("joi"),{boolean:Ome,string:NI,number:Nme}=$S.types(),zK=require("fs-extra"),Kh=(G(),D($)),QK=require("path"),wme=nt();jK.exports=Ime;function Ime(e){let t=NI.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=$S.object({[Kh.INSTALL_PROMPTS.ROOTPATH]:$S.custom(Cme),[Kh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:$S.alternatives([Nme.min(0),NI]).allow("null",null),[Kh.INSTALL_PROMPTS.TC_AGREEMENT]:NI.valid("yes","YES","Yes"),[Kh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Kh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Ome});return wme.validateBySchema(e,r)}a(Ime,"installValidator");function Cme(e,t){if(zK.existsSync(QK.join(e,"system/hdb_user/data.mdb"))||zK.existsSync(QK.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Cme,"validateRootAvailable")});var ZK=P((LLe,XK)=>{"use strict";var{mkdirpSync:Pme,copySync:Dme}=require("fs-extra"),Fa=require("path"),Yh=(G(),D($)),{PACKAGE_ROOT:Lme}=Et(),II=X(),Mme=Fn(),wI=oo(),vme=gt();XK.exports=Ume;async function Ume(e){II.trace("Mounting HarperDB"),Pl(e),Pl(Fa.join(e,"backup")),Pl(Fa.join(e,"keys")),Pl(Fa.join(e,"keys",Yh.LICENSE_FILE_NAME)),Pl(Fa.join(e,"log")),Pl(Fa.join(e,"database")),Pl(Fa.join(e,"components")),Dme(Fa.resolve(Lme,"./utility/install/README.md"),Fa.join(e,"README.md")),await xme()}a(Ume,"mountHdb");async function xme(){let e=c_(),t=Object.keys(wI);for(let r=0;r<t.length;r++){let n=t[r],s=wI[n].hash_attribute;try{vme.initSystemSchemaPaths(Yh.SYSTEM_SCHEMA_NAME,n);let i=new e(Yh.SYSTEM_SCHEMA_NAME,n,s);i.attributes=wI[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await Mme.createTable(n,i)}catch(i){throw II.error(`issue creating environment for ${Yh.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(xme,"createLMDBTables");function Pl(e){Pme(e,{mode:Yh.HDB_FILE_PERMISSIONS}),II.info(`Directory ${e} created`)}a(Pl,"makeDirectory")});var _Y=P((xLe,fY)=>{"use strict";var PI=require("os"),sY=require("inquirer"),Is=require("fs-extra"),Bme=require("properties-reader"),Ll=require("chalk"),Fi=require("path"),Hme=require("human-readable-ids").hri,kme=require("ora"),Fme=require("yaml"),fr=X(),Ga=ce(),Wh=oe(),KS=lc(),iY=qS(),{packageJson:oY}=Et(),fe=(G(),D($)),{CONFIG_PARAM_MAP:vLe,CONFIG_PARAMS:Mt}=fe,Gme=JK(),qme=ZK(),DI=wt(),$me=Gn(),Vme=h_(),Kme=dI(),Yme=$s(),Wme=require("util").promisify,zme=Wme(Yme.setSchemaDataToGlobal),eY=Zs(),Dl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Fr=a(e=>Ll.magenta.bold(e),"HDB_PROMPT_MSG"),Qme="https://harperdb.io/legal/end-user-license-agreement",qa=PI.EOL,Lo="",jme="yes",tY="Starting HarperDB install...",rY="HarperDB installation was successful.",nY="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Jme="An out of date version of HarperDB is already installed.",CI="It appears that HarperDB is already installed. Exiting install...",Xme="Aborting install",ULe=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])$/),Zme=new RegExp(/^[^\s.,*>]+$/),epe=PI.homedir(),tpe=Fi.join(epe,fe.HDB_ROOT_DIR_NAME),rpe="HDB_ADMIN",npe="CLUSTER_USER",spe="dev",ipe="localhost",VS={[Mt.HTTP_CORS]:!0,[Mt.HTTP_CORSACCESSLIST]:["*"],[Mt.HTTP_PORT]:9926,[Mt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Mt.THREADS_COUNT]:1,[Mt.THREADS_DEBUG]:!0,[Mt.LOGGING_STDSTREAMS]:!0,[Mt.LOGGING_LEVEL]:"info",[Mt.OPERATIONSAPI_NETWORK_PORT]:9925,[Mt.LOCALSTUDIO_ENABLED]:!0},kr={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:"},$a=KS([fe.INSTALL_PROMPTS.HDB_CONFIG]),ki,aY=!1,LI=!1,cY=!1;fY.exports={install:lY,updateConfigEnv:ppe,setIgnoreExisting:Epe};lY.createSuperUser=dY;async function lY(){console.log(Fr(qa+tY+qa)),fr.notify(tY);let e;$a[fe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=ope());let t=cpe();Object.assign(t,e),t[fe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[fe.INSTALL_PROMPTS.ROOTPATH]&&t[fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[fe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(cY=!0,t[fe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Gme(t);if(r)throw r.message;await lpe(),await upe(t);let n=await ape(t);ki=n[fe.INSTALL_PROMPTS.ROOTPATH],$a[fe.INSTALL_PROMPTS.HDB_CONFIG]&&Fi.dirname($a[fe.INSTALL_PROMPTS.HDB_CONFIG])===ki&&(aY=!0),!LI&&!$a[fe.INSTALL_PROMPTS.HDB_CONFIG]&&await Is.pathExists(Fi.join(ki,fe.HDB_CONFIG_FILE))&&(console.error(CI),process.exit());let s=kme({prefixText:Fr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Wh.isEmpty(ki))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ga.setHdbBasePath(ki),await qme(ki),await dpe(),await fpe(n),fr.initLogSettings(!0),await dY(n),await hpe(n),await eY.updateConfigCert(),await eY.generateCertsKeys(),await mpe(),Kme(),s.stop(),console.log(Fr(qa+rY+qa)),fr.notify(rY)}a(lY,"install");function ope(){let e=Fme.parseDocument(Is.readFileSync($a[fe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=DI.flattenConfig(e.toJSON());return t[fe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[fe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(ope,"getConfigFromFile");async function ape(e){fr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.ROOTPATH],kr.DESTINATION),name:fe.INSTALL_PROMPTS.ROOTPATH,prefix:Lo,default:tpe,validate:a(async s=>ws(s)?ws(s):await Is.pathExists(Fi.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:Fr(kr.DESTINATION)},{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],kr.HDB_USERNAME),name:fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Lo,default:rpe,validate:a(s=>ws(s)?ws(s):(t=s,!0),"validate"),message:Fr(kr.HDB_USERNAME)},{type:"password",when:Mo(e[fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],kr.HDB_PASS),name:fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Lo,validate:a(s=>ws(s)?ws(s):!0,"validate"),message:Fr(kr.HDB_PASS)},{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.DEFAULTS_MODE],kr.DEFAULTS_MODE),name:fe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Lo,default:spe,validate:a(s=>ws(s)?ws(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:Fr(kr.DEFAULTS_MODE)}];if(cY||r.push({type:"input",name:fe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],kr.REPLICATION_HOSTNAME),prefix:Lo,default:ipe,message:Fr(kr.REPLICATION_HOSTNAME)}),Wh.autoCastBoolean(e[fe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.CLUSTERING_NODENAME],kr.NODE_NAME),name:fe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Lo,default:Hme.random(),validate:a(i=>Zme.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:Fr(kr.NODE_NAME)},{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.CLUSTERING_USER],kr.CLUSTER_USERNAME),name:fe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Lo,default:npe,validate:a(i=>ws(i)?ws(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:Fr(kr.CLUSTER_USERNAME)},{type:"password",when:Mo(e[fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],kr.CLUSTER_PASS),name:fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Lo,validate:a(i=>ws(i)?ws(i):!0,"validate"),message:Fr(kr.CLUSTER_PASS)}];r.push(...s)}let n=await sY.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(ape,"installPrompts");function Mo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Fr(t)} ${Ll.gray("[hidden]")}`),fr.trace(`${Fr(t)} [hidden]`)):(console.log(`${Fr(t)} ${e}`),fr.trace(`${Fr(t)} ${e}`)),!1):!0}a(Mo,"displayCmdEnvVar");function ws(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(ws,"checkForEmptyValue");function cpe(){let e=Object.keys(fe.INSTALL_PROMPTS),t=KS(e),r=KS(Object.keys(fe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=fe.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(cpe,"checkForPromptOverride");async function lpe(){fr.trace("Checking for existing install.");let e=Wh.getPropsFilePath(),t=await Is.pathExists(e),r;if(t){fr.trace(`Install found an existing boot prop file at:${e}`);let n=Bme(e),s=DI.getConfigValue(fe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(fe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Is.pathExists(s)}if(!t&&Wh.noBootFile()&&(r=!0),r&&!LI){if(fr.trace(`Install found existing HDB config at:${e}`),await iY.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${oY.version}. Exiting install...`;console.log(qa+Ll.magenta.bold(Jme)),console.log(Ll.magenta.bold(s)),fr.error(s)}else console.log(qa+Ll.magenta.bold(CI)),fr.error(CI);process.exit(0)}}a(lpe,"checkForExistingInstall");async function upe(e){fr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Qme}${qa}and can be viewed by typing or copying and pasting the URL into your web browser.${qa}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Lo,transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:fe.INSTALL_PROMPTS.TC_AGREEMENT,message:Fr(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Ll.yellow("Please enter 'yes' or 'no'"),"validate")},n=await sY.prompt([r]);n[fe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[fe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==jme&&(console.log(Ll.yellow(nY)),fr.error(nY),process.exit(0))}a(upe,"termsAgreement");async function dpe(){let e=Fi.join(ki,fe.HDB_CONFIG_FILE),t;try{t=PI.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
111
- install_user = ${t}`,n=Wh.getHomeDir(),s=Fi.join(n,fe.HDB_HOME_DIR_NAME),i=Fi.join(s,fe.LICENSE_KEY_DIR_NAME);try{Is.mkdirpSync(s,{mode:fe.HDB_FILE_PERMISSIONS}),Is.mkdirpSync(i,{mode:fe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${fe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Fi.join(s,fe.BOOT_PROPS_FILE_NAME);try{await Is.writeFile(o,r)}catch(c){throw fr.error(`There was an error creating the boot file at path: ${o}`),c}Ga.setProperty(fe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ga.setProperty(fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ga.setProperty(Ga.BOOT_PROPS_FILE_PATH,o)}}a(dpe,"createBootPropertiesFile");async function fpe(e){fr.trace("Creating HarperDB config file");let t=KS(Object.keys(fe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[fe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in VS){if(r===Mt.HTTP_PORT&&t[Mt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??VS[r],t[Mt.HTTP_SECUREPORT]=null;continue}else if(r===Mt.HTTP_PORT)continue;if(r===Mt.OPERATIONSAPI_NETWORK_PORT&&t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??VS[r],t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Mt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=VS[r])}}else t[Mt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Mt.HTTP_PORT.toLowerCase()]&&(t[Mt.HTTP_SECUREPORT]=null);try{$a[fe.INSTALL_PROMPTS.HDB_CONFIG]||DI.createConfigFile(t),Ga.initSync()}catch(r){_pe(r)}}a(fpe,"createConfigFile");function _pe(e){fr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Xme);let t=Fi.resolve(Ga.get(Ga.BOOT_PROPS_FILE_PATH),"../");t&&Is.removeSync(t),ki&&(aY?Is.readdirSync(ki,{withFileTypes:!0}).forEach(n=>{let s=Fi.join(n.path,n.name);s!==$a[fe.INSTALL_PROMPTS.HDB_CONFIG]&&Is.removeSync(s)}):Is.removeSync(ki)),process.exit(1)}a(_pe,"rollbackInstall");async function uY(e,t){fr.trace("Creating admin user"),await zme();let r;try{r=await Vme.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 $me.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(uY,"createAdminUser");async function dY(e){fr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await uY(t,r),delete e[fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(dY,"createSuperUser");async function hpe(e){fr.trace("Creating Cluster user.");let t;e[fe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[fe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await uY({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[fe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(hpe,"createClusterUser");async function mpe(){let e=oY.version;if(e)await iY.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(mpe,"insertHdbVersionInfo");function ppe(e){$a[fe.INSTALL_PROMPTS.HDB_CONFIG]=e}a(ppe,"updateConfigEnv");function Epe(e){LI=e}a(Epe,"setIgnoreExisting")});var pY=P((HLe,mY)=>{"use strict";var MI=oe(),es=X(),hY=AI();mY.exports={processDirectives:gpe};async function gpe(e){console.log("Starting upgrade process...");let t=hY.getVersionsForUpgrade(e),r=Ape(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;es.notify(c),console.log(c);let l=[],u=[];try{l=Spe(o.sync_functions)}catch(f){throw es.error(`Error while running an upgrade script for ${o.version}`),f}try{u=await Tpe(o.async_functions)}catch(f){throw es.error(`Error while running an upgrade script for ${o.version}`),f}n.push(...l,...u)}return n}a(gpe,"processDirectives");function Spe(e){if(MI.isEmptyOrZeroLength(e))return es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return es.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(es.info(`Running function ${r.name}`),!(r instanceof Function)){es.info("Variable being processed is not a function");continue}let n=r();es.info(n),t.push(n)}return t}a(Spe,"runSyncFunctions");async function Tpe(e){if(MI.isEmptyOrZeroLength(e))return es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return es.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(es.info(`Running function ${s.name}`),!(s instanceof Function)){es.info("Variable being processed is not a function");continue}let i=await s();es.info(i),t.push(i)}return t}a(Tpe,"runAsyncFunctions");function Ape(e){if(MI.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=hY.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Ape,"getUpgradeDirectivesToInstall")});var yY=P((FLe,RY)=>{"use strict";var YS=ce();YS.initSync();var TY=require("chalk"),EY=require("fs-extra"),Uo=X(),vo=(G(),D($)),Rpe=pY(),vI=oe(),AY=qS(),ype=vS(),gY=mA(),bpe=$s(),{packageJson:SY}=Et(),Ope=require("util").promisify,Npe=Ope(bpe.setSchemaDataToGlobal),UI,{UPGRADE_VERSION:xI}=vo.UPGRADE_JSON_FIELD_NAMES_ENUM;RY.exports={upgrade:wpe};async function wpe(e){await Npe(),UI===void 0&&(UI=nd()),EY.existsSync(YS.get(YS.BOOT_PROPS_FILE_PATH))||(zh("The hdb_boot_properties file was not found. Please install HDB.",vo.LOG_LEVELS.ERROR),process.exit(1)),EY.existsSync(YS.get(vo.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(zh("The hdb settings file was not found. Please make sure HDB is installed.",vo.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await AY.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),zh(`This version of HarperDB is ${SY.version}`,vo.LOG_LEVELS.INFO);let r=t[xI]??SY.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${vo.HDB_SUPPORT_ADDRESS}`),Uo.notify("Missing new version field from upgrade info object"),process.exit(1)),await Ipe();let n,s=0;try{n=await ype.forceUpdatePrompt(t)}catch(i){Uo.error("There was an error when prompting user about upgrade."),Uo.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Uo.info(`Starting upgrade to version ${r}`),await Cpe(t),zh(`HarperDB was successfully upgraded to version ${t[xI]}`,vo.LOG_LEVELS.INFO)}a(wpe,"upgrade");async function Ipe(){let e=!1,t=await gY.findPs(vo.HDB_PROC_NAME);if(vI.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await gY.findPs("hdb_express");vI.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await UI.list();vI.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(TY.red(r)),Uo.error(r),process.exit(1)}}a(Ipe,"checkIfRunning");async function Cpe(e){try{await Rpe.processDirectives(e)}catch(t){throw zh("There was an error during the data upgrade. Please check the logs.",vo.LOG_LEVELS.ERROR),t}try{await AY.insertHdbUpgradeInfo(e[xI])}catch(t){Uo.error("Error updating the 'hdb_info' system table."),Uo.error(t)}}a(Cpe,"runUpgrade");function zh(e,t=void 0){t||(t=Uo.info),Uo[t](e),console.log(TY.magenta(e))}a(zh,"printToLogAndConsole")});var IY={};Be(IY,{onStorageReclamation:()=>Qh,runReclamationHandlers:()=>FI,setAvailableSpaceRatioGetter:()=>Dpe});function Qh(e,t,r){(r||(0,zS.getWorkerIndex)()===(0,zS.getWorkerCount)()-1)&&(WS.has(e)||WS.set(e,[]),WS.get(e).push({priority:0,handler:t}),kI||(kI=setTimeout(FI,OY).unref()))}async function FI(){for(let[e,t]of WS)try{let r=await wY(e),n=Ppe/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&&(HI.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){HI.default.error?.("Error running storage reclamation handlers",r)}kI=setTimeout(FI,OY).unref()}function Dpe(e){wY=e??NY}var BI,zS,HI,QS,bY,WS,Ppe,OY,kI,NY,wY,jS=be(()=>{BI=require("node:fs/promises"),zS=M(st()),HI=M(pi());G();QS=M(ce()),bY=M(oe());QS.default.initSync();WS=new Map,Ppe=QS.default.get(B.STORAGE_RECLAMATION_THRESHOLD)??.4,OY=(0,bY.convertToMS)(QS.default.get(B.STORAGE_RECLAMATION_INTERVAL))||36e5;a(Qh,"onStorageReclamation");NY=a(async e=>{if(BI.statfs){let t=await(0,BI.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"),wY=NY;a(FI,"runReclamationHandlers");a(Dpe,"setAvailableSpaceRatioGetter")});var MY=P((VLe,LY)=>{"use strict";var{promises:Sd,createReadStream:Lpe,createWriteStream:Mpe}=require("fs"),{createGzip:vpe}=require("zlib"),{promisify:Upe}=require("util"),{pipeline:xpe}=require("stream"),Bpe=Upe(xpe),qI=require("path"),Ka=ce();Ka.initSync();var Va=X(),{CONFIG_PARAMS:Td,ITC_EVENT_TYPES:Hpe}=(G(),D($)),{onMessageFromWorkers:kpe}=st(),{convertToMS:Fpe}=oe(),{onStorageReclamation:Gpe}=(jS(),D(IY)),qpe=6e4,$pe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Vpe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",GI,PY;LY.exports=DY;kpe(e=>{e.type===Hpe.RESTART&&(Ka.initSync(!0),clearInterval(PY),Ka.get(Td.LOGGING_ROTATION_ENABLED)&&DY())});async function DY(){try{let e=Va.getLogFilePath(),t=Ka.get(Td.LOGGING_ROTATION_MAXSIZE),r=Ka.get(Td.LOGGING_ROTATION_INTERVAL),n=Ka.get(Td.LOGGING_ROTATION_RETENTION),s=0;if(Gpe(e,l=>{s=l},!0),!t&&!r){Va.error($pe);return}let i=Ka.get(Td.LOGGING_ROTATION_PATH);if(!i){Va.error(Vpe);return}let o;if(t){let l=t.slice(-1),u=t.slice(0,-1);l==="G"?o=u*1e9:l==="M"?o=u*1e6:o=u*1e3}let c;if(r){let l=r.slice(-1),u=r.slice(0,-1);l==="D"?c=u*1440:l==="H"?c=u*60:c=u}GI=Date.now()/6e4,Va.trace("Log rotate enabled, maxSize:",t,"interval:",r),PY=setInterval(async()=>{if(o){let l;l=await Sd.stat(e),l.size>=o&&await CY(e,i)}if(c&&Date.now()/6e4-GI>=c&&(await CY(e,i),GI=Date.now()/6e4),n||s){let l=Fpe(n??"1M")/(1+s);s=0;let u=await Sd.readdir(i);for(let f of u)try{let d=await Sd.stat(qI.join(i,f));Date.now()-d.mtimeMs>l&&await Sd.unlink(qI.join(i,f))}catch(d){Va.error("Error trying to remove log",f,d)}}},qpe).unref()}catch(e){Va.error(e)}}a(DY,"logRotator");async function CY(e,t){let r=Ka.get(Td.LOGGING_ROTATION_COMPRESS),n=qI.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);await Sd.rename(e,n),r&&(e=n,n+=".gz",await Bpe(Lpe(e),vpe(),Mpe(n)),await Sd.unlink(e)),Va.closeLogFile(),Va.notify(`hdb.log rotated, old log moved to ${n}`)}a(CY,"moveLogFile")});var GY=P(FY=>{"use strict";var Se=ce();Se.initSync();rd();var Kt=(G(),D($)),{CONFIG_PARAMS:Le}=Kt,ts=X(),xo=require("fs-extra"),Bo=require("path"),Kpe=dI(),{install:Ype}=_Y(),$I=require("chalk"),{packageJson:Wpe,PACKAGE_ROOT:zpe}=Et(),Ho=oe(),VI=wt(),UY=lc(),vY=qg(),Qpe=yY(),jpe=MY(),{compactOnStart:Jpe}=(YN(),D(KN)),Xpe=require("minimist"),Zpe=Zs(),{startHTTPThreads:eEe}=(KI(),D(qY)),tEe=qS(),{isMainThread:rEe}=require("worker_threads"),YLe=oo(),WLe=uo(),zLe=qy(),QLe=c_(),JS=(G(),D($)),Gi,Ad,xY=!1,nEe="Upgrade complete. Starting HarperDB.",sEe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",iEe="HarperDB not found, starting install process.",oEe="There was an error during install, check install_log.log for more details. Exiting.",aEe="HarperDB successfully started.";function cEe(){if(!xY){let e=a(()=>{xo.removeSync(Bo.join(Se.get(Kt.CONFIG_PARAMS.ROOTPATH),Kt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(cEe,"addExitListeners");async function BY(e=!1,t=!1){if(console.log($I.magenta("Starting HarperDB...")),ts.suppressLogging?.(()=>{console.log($I.magenta(""+xo.readFileSync(Bo.join(zpe,"utility/install/ascii_logo.txt"))))}),await kY()===!1){console.log(iEe);try{await Ype()}catch(l){console.error(oEe,l),ts.error(l),process.exit(1)}}if(!e){let l=UY(Object.keys(Kt.CONFIG_PARAM_MAP),!0);!Ho.isEmpty(l)&&!Ho.isEmptyOrZeroLength(Object.keys(l))&&VI.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Ad?.service==="clustering";Ad?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=Bo.join(Se.get(Kt.CONFIG_PARAMS.ROOTPATH),Kt.HDB_PID_FILE),i=_Ee(s);i&&i!==1&&hEe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),Gi===void 0&&(Gi=nd()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Se.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await vY.generateNatsConfig(),await Gi.startClusteringProcesses(!0),process.exit()),cEe(),await xo.writeFile(Bo.join(Se.get(JS.CONFIG_PARAMS.ROOTPATH),JS.HDB_PID_FILE),`${process.pid}`),ts.info("HarperDB PID",process.pid);let o;try{let l=await tEe.getVersionUpdateInfo();l!==void 0&&(o=l[Kt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Qpe.upgrade(l),console.log(nEe))}catch(l){o?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${o}. Exiting HarperDB.`,l),ts.error(l)):(console.error(sEe,l),ts.error(l)),process.exit(1)}Kpe(),dEe(),await Zpe.reviewSelfSignedCert(),Ho.autoCastBoolean(Se.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&rEe&&await vY.generateNatsConfig(t)}a(BY,"initialize");async function lEe(e=!1){try{Ad=Xpe(process.argv),Ad.ROOTPATH&&VI.updateConfigObject("settings_path",Bo.join(Ad.ROOTPATH,Kt.HDB_CONFIG_FILE)),await BY(e,!0),Se.get(Kt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Jpe();let t=process.env.IS_SCRIPTED_SERVICE&&!Ad.service;Ho.autoCastBoolean(Se.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Gi.startClusteringProcesses(),await Gi.startClusteringThreads()),await eEe(process.env.DEV_MODE?1:Se.get(JS.CONFIG_PARAMS.THREADS_COUNT)??Se.get(JS.CONFIG_PARAMS.THREADS)),Se.get(Kt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await jpe(),t||HY()}catch(t){console.error(t),ts.error(t),process.exit(1)}}a(lEe,"main");function HY(){ts.suppressLogging(()=>{console.log($I.magenta(`HarperDB ${Wpe.version} successfully started`))}),ts.notify(aEe)}a(HY,"started");async function uEe(e=!0){xY=!e;try{Gi===void 0&&(Gi=nd()),Gi.enterPM2Mode(),await BY(),Ho.autoCastBoolean(Se.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Gi.startClusteringProcesses(),await Gi.startService(Kt.PROCESS_DESCRIPTORS.HDB),HY(),e&&process.exit(0)}catch(t){console.error(t),ts.error(t),process.exit(1)}}a(uEe,"launch");function dEe(){let e=Bo.join(Se.get(Kt.CONFIG_PARAMS.ROOTPATH),Kt.LICENSE_KEY_DIR_NAME,Kt.LICENSE_FILE_NAME),t=Bo.join(e,Kt.LICENSE_FILE_NAME),r=Bo.join(e,Kt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=UY(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ho.isEmpty(n)||Ho.isEmpty(s))return;xo.mkdirpSync(e),xo.writeFileSync(r,n),xo.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ts.error(s)}}a(dEe,"writeLicenseFromVars");Object.assign(FY,{launch:uEe,main:lEe,isHdbInstalled:kY,startupLog:fEe});async function kY(){try{await xo.stat(Ho.getPropsFilePath()),await xo.stat(Se.get(Kt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ho.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw ts.error(`Error checking for HDB install - ${e}`),e}return!0}a(kY,"isHdbInstalled");function fEe(e){let r=a(_=>_.padEnd(20),"pad"),n=`
109
+ Reindexing upgrade started for transaction logs`),Po.notify("Reindexing upgrade started for transaction logs"),await CK(SI,!0,e)),Po.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Fh?", but errors occurred":"")}a(Bhe,"reindexUpgrade");async function CK(e,t,r){let n=await Hi.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Do.join(e,o.toString());if(o===".DS_Store")continue;let l=await Hi.readdir(c),u=l.length;for(let f=0;f<u;f++){let d=l[f];if(d!==".DS_Store"&&Hi.statSync(Do.join(c,d)).isDirectory())try{await Hhe(o,d,t),tn.info(`Reindexing started for ${o}.${d}`),Po.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await Fhe(o,d,c,t,r),tn.info(`Reindexing completed for ${o}.${d}`),Po.notify(`Reindexing completed for ${o}.${d}`)}catch(h){Fh=!0,h.schema_path=c,h.table_name=d,Po.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Po.error(h),tn.error(h),console.error(h)}}}if(!Fh)try{await Hi.rm(BS,{recursive:!0})}catch{}}a(CK,"processTables");async function Hhe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Do.join(BS,s);await Hi.ensureDir(BS),await Hi.writeFile(i,""),tn=Uhe({level:"debug",formatters:{bindings(){}}},i)}a(Hhe,"initPinoLogger");var khe=20;async function Fhe(e,t,r,n,s){let i;try{i=await Xn.openEnvironment(r,t,n)}catch(E){if(E.message==="MDB_INVALID: File is not an LMDB file"){Po.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),tn.error(E);return}throw E}let o=$he(i.dbis),c=Xn.openDBI(i,o),l=Object.keys(i.dbis),u=Xn.statDBI(i,o);tn.info(`Old environment stats: ${JSON.stringify(u)}`);let f=new vhe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});f.start(u.entryCount,0,{});let d=await Xn.createEnvironment(r,t,!1);Xn.createDBI(d,o,!1,!0);let h=[];try{for(let E of c.getRange({start:!1}))E.value={...E.value},h.push(E),n||e==="system"&&(t==="hdb_schema"&&(E.key=E.key.toString(),E.value.name=E.value.name.toString()),t==="hdb_table"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.name=E.value.name.toString()),t==="hdb_attribute"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.table=E.value.table.toString(),E.value.attribute=E.value.attribute.toString())),h.length>khe&&await _();await _()}catch(E){throw Fh=!0,tn.error(E),E}async function _(){let E,T=h.map(({value:v})=>v);n?E=await Promise.all(T.map(v=>Ghe(d,v))):E=await Phe(d,o,l.filter(v=>v!=="__blob__"),T,!1);for(let v=0,F=h.length;v<F;v++){let{key:q,value:j}=h[v];tn.info(`Record hash value: ${q} hash: ${o}`);let te;n?te=E[v]:te=E.written_hashes.indexOf(q)>-1,kh(te,!0),qhe(d,o,j[o],n),tn.info(`Insert success, written hashes: ${E.written_hashes}`),f.increment()}h=[],f.value/f.total*100%10===0&&Po.notify(`${e}.${t} ${f.value}/${f.total} records inserted`),tn.info(`${f.value}/${f.total} records inserted`)}a(_,"finishOutstanding"),f.stop();let p=Xn.statDBI(i,o),S=Xn.statDBI(d,o);if(tn.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${S.entryCount}`),kh.deepStrictEqual(p.entryCount,S.entryCount),await Xn.closeEnvironment(i),await Xn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let E=Do.join(r,t),T=Do.join(E,"data.mdb"),O=Do.join(E,"lock.mdb");await Hi.unlink(T),await Hi.unlink(O),await Hi.rmdir(E),tn.info(`Deleted old environment files from schema folder: ${T}, ${O}`)}let g=await Xn.openEnvironment(r,t),R=Xn.statDBI(g,o);tn.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(R)}`),kh.deepStrictEqual(R.entryCount,S.entryCount),await Xn.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}a(Fhe,"processTable");async function Ghe(e,t){Xn.initializeDBIs(e,Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ha.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),Mhe.isEmpty(t.user_name)||e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(Ghe,"insertTransaction");function qhe(e,t,r,n){let i=e.dbis[t].get(r);kh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ha.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&&!Lhe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,f=l.length;u<f;u++){let d=l[u];PK(e,c,d,r)}else PK(e,c,l,r)}a(qhe,"validateIndices");function PK(e,t,r,n){try{let s=!1,i=Dhe.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||tn.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),kh.deepStrictEqual(s,!0)}catch(s){Fh=!0,tn.error(s),console.error(s)}}a(PK,"validateIndex");function $he(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($he,"getHashDBI")});var BK=P((OLe,xK)=>{"use strict";var HS=require("path"),ka=require("fs-extra"),Vhe=EI(),wl=X(),MK=wt(),TI=ce(),ai=(G(),D($)),kS=oe(),Khe=require("properties-reader"),Yhe=Ys(),Whe=NE(),zhe=Vr(),bLe=require("util"),jhe=zhe.searchByValue,Qhe=gn(),Jhe=vg(),Xhe=Pt(),Zhe=LK(),vK=Zs(),epe=vS(),$h=new Vhe("4.0.0"),UK=[],Gh,qh;async function tpe(){try{if(await epe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Gh){let t=kS.changeExtension(Gh,".bak");await ka.move(Gh,t)}if(qh){let t=kS.changeExtension(qh,".bak");await ka.move(qh,t)}await vK.generateKeys()}else console.log("Using existing certificates."),vK.updateConfigCert(Gh,qh,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(tpe,"generateNewKeys");async function rpe(){console.log("Updating HarperDB nodes."),wl.info("Updating HarperDB nodes.");let e=[];try{let t=new Yhe(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await jhe(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Xhe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let f=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(f),f}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let f=0,d=c.subscriptions.length;f<d;f++){let h=c.subscriptions[f],_=h.channel.split(":");u.push({schema:_[0],table:_[1],publish:h.publish,subscribe:h.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(kS.isEmptyOrZeroLength(n))return;let s=new Whe(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await Qhe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Jhe.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(rpe,"updateNodes");async function npe(){let e=TI.get(ai.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(HS.join("config","settings.js"))){wl.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),wl.info(t);let r=HS.dirname(e),n=TI.get(ai.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=HS.join(n,"backup","4_0_0_upgrade_settings.bak"),i=HS.join(n,ai.HDB_CONFIG_FILE);try{wl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),ka.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{wl.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),wl.info("Updating env variables with new settings values");let d=MK.initOldConfig(e);Gh=d[ai.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],qh=d[ai.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],MK.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=kS.getPropsFilePath();ka.accessSync(o,ka.constants.F_OK|ka.constants.R_OK);let l=Khe(o).get(ai.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
110
+ install_user = ${l}`;try{ka.writeFileSync(o,u)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{TI.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let f="New settings file for 4.0.0 upgrade successfully created.";try{ka.removeSync(r),console.log(f),wl.info(f)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(npe,"updateSettingsFile_4_0_0");$h.async_functions.push(npe);$h.async_functions.push(tpe);$h.async_functions.push(Zhe);$h.async_functions.push(rpe);UK.push($h);xK.exports=UK});var AI=P((wLe,GK)=>{"use strict";var Il=oe(),spe=(G(),D($)),HK=X(),{DATA_VERSION:ipe,UPGRADE_VERSION:ope}=spe.UPGRADE_JSON_FIELD_NAMES_ENUM,kK=wK(),FS=BK(),Cl=new Map;kK&&kK.forEach(e=>{Cl.set(e.version,e)});FS&&FS.forEach(e=>{Cl.set(e.version,e)});FS&&FS.forEach(e=>{Cl.set(e.version,e)});function ape(){return[...Cl.keys()].sort(Il.compareVersions)}a(ape,"getSortedVersions");function FK(e){let t=e[ipe],r=e[ope];return Il.isEmptyOrZeroLength(t)||Il.isEmptyOrZeroLength(r)?(HK.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),HK.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."),[]):[...Cl.keys()].sort(Il.compareVersions).filter(function(n){return Il.compareVersions(n,t)>0&&Il.compareVersions(n,r)<=0})}a(FK,"getVersionsForUpgrade");function cpe(e){return FK(e).length>0}a(cpe,"hasUpgradesRequired");function lpe(e){return Il.isEmptyOrZeroLength(e)?null:Cl.has(e)?Cl.get(e):null}a(lpe,"getDirectiveByVersion");GK.exports={getSortedVersions:ape,getDirectiveByVersion:lpe,getVersionsForUpgrade:FK,hasUpgradesRequired:cpe}});var qS=P((CLe,YK)=>{"use strict";var upe=require("util"),RI=require("chalk"),dpe=require("os"),$K=gn(),fpe=Vr(),Zn=(G(),D($)),VK=pK(),bI=ey(),{UpgradeObject:qK}=gK(),{forceDowngradePrompt:_pe}=vS(),{packageJson:hpe}=Et(),GS=X(),Sd=oe(),OI=$s(),ppe=(Ue(),D(at)),mpe=AI(),Epe=upe.promisify(OI.setSchemaDataToGlobal),gpe=fpe.searchByValue,Spe="info_id",Tpe="2.9.9",Ape="3.0.0";async function Rpe(e){let t=new VK.HdbInfoInsertObject(1,e,e),r=new bI.InsertObject(Zn.OPERATIONS_ENUM.INSERT,Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Zn.INFO_TABLE_HASH_ATTRIBUTE,[t]);return OI.setSchemaDataToGlobal(),$K.insert(r)}a(Rpe,"insertHdbInstallInfo");async function yI(e){let t,r=await KK(),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 VK.HdbInfoInsertObject(i,e,e);let o=new bI.InsertObject(Zn.OPERATIONS_ENUM.INSERT,Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Zn.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await Epe(),$K.insert(o)}a(yI,"insertHdbUpgradeInfo");async function KK(){let e=new bI.NoSQLSeachObject(Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Spe,Zn.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await gpe(e))}catch(r){console.error(r)}return t}a(KK,"getAllHdbInfoRecords");async function ype(){let e=await KK();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(ype,"getLatestHdbInfoRecord");async function bpe(){GS.info("Checking if HDB software has been updated");try{let e=hpe.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await ype(),r;if(Sd.isEmpty(t))r=Tpe;else if(r=t.data_version_num,Sd.compareVersions(r.toString(),e.toString())>0){if(!Sd.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(RI.yellow(`This instance's data was last run on version ${r}`)),console.error(RI.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.${dpe.EOL}${Zn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Sd.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(RI.yellow(`This instance's data was last run on version ${r}`)),await _pe(new qK(r,e))?await yI(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(OI.setSchemaDataToGlobal(),Ope(r),e.toString()===r.toString())return;let n=new qK(r,e);if(mpe.hasUpgradesRequired(n))return n;Sd.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await yI(n.upgrade_version),GS.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw GS.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),GS.fatal(e),e}}a(bpe,"getVersionUpdateInfo");function Ope(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 ${Zn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in ppe.databases.system))throw console.log(t),new Error(t);if(!Sd.isEmpty(e)&&e<Ape)throw console.log(t),new Error(t)}a(Ope,"checkIfInstallIsSupported");YK.exports={insertHdbInstallInfo:Rpe,insertHdbUpgradeInfo:yI,getVersionUpdateInfo:bpe}});var QK=P((DLe,jK)=>{"use strict";var $S=require("joi"),{boolean:Npe,string:NI,number:wpe}=$S.types(),WK=require("fs-extra"),Vh=(G(),D($)),zK=require("path"),Ipe=nt();jK.exports=Cpe;function Cpe(e){let t=NI.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=$S.object({[Vh.INSTALL_PROMPTS.ROOTPATH]:$S.custom(Ppe),[Vh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:$S.alternatives([wpe.min(0),NI]).allow("null",null),[Vh.INSTALL_PROMPTS.TC_AGREEMENT]:NI.valid("yes","YES","Yes"),[Vh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Vh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Npe});return Ipe.validateBySchema(e,r)}a(Cpe,"installValidator");function Ppe(e,t){if(WK.existsSync(zK.join(e,"system/hdb_user/data.mdb"))||WK.existsSync(zK.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Ppe,"validateRootAvailable")});var XK=P((MLe,JK)=>{"use strict";var{mkdirpSync:Dpe,copySync:Lpe}=require("fs-extra"),Fa=require("path"),Kh=(G(),D($)),{PACKAGE_ROOT:Mpe}=Et(),II=X(),vpe=Fn(),wI=oo(),Upe=gt();JK.exports=xpe;async function xpe(e){II.trace("Mounting HarperDB"),Pl(e),Pl(Fa.join(e,"backup")),Pl(Fa.join(e,"keys")),Pl(Fa.join(e,"keys",Kh.LICENSE_FILE_NAME)),Pl(Fa.join(e,"log")),Pl(Fa.join(e,"database")),Pl(Fa.join(e,"components")),Lpe(Fa.resolve(Mpe,"./utility/install/README.md"),Fa.join(e,"README.md")),await Bpe()}a(xpe,"mountHdb");async function Bpe(){let e=l_(),t=Object.keys(wI);for(let r=0;r<t.length;r++){let n=t[r],s=wI[n].hash_attribute;try{Upe.initSystemSchemaPaths(Kh.SYSTEM_SCHEMA_NAME,n);let i=new e(Kh.SYSTEM_SCHEMA_NAME,n,s);i.attributes=wI[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await vpe.createTable(n,i)}catch(i){throw II.error(`issue creating environment for ${Kh.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Bpe,"createLMDBTables");function Pl(e){Dpe(e,{mode:Kh.HDB_FILE_PERMISSIONS}),II.info(`Directory ${e} created`)}a(Pl,"makeDirectory")});var fY=P((BLe,dY)=>{"use strict";var PI=require("os"),nY=require("inquirer"),Is=require("fs-extra"),Hpe=require("properties-reader"),Ll=require("chalk"),Fi=require("path"),kpe=require("human-readable-ids").hri,Fpe=require("ora"),Gpe=require("yaml"),fr=X(),Ga=ce(),Yh=oe(),KS=lc(),sY=qS(),{packageJson:iY}=Et(),fe=(G(),D($)),{CONFIG_PARAM_MAP:ULe,CONFIG_PARAMS:Mt}=fe,qpe=QK(),$pe=XK(),DI=wt(),Vpe=Gn(),Kpe=p_(),Ype=dI(),Wpe=$s(),zpe=require("util").promisify,jpe=zpe(Wpe.setSchemaDataToGlobal),ZK=Zs(),Dl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Fr=a(e=>Ll.magenta.bold(e),"HDB_PROMPT_MSG"),Qpe="https://harperdb.io/legal/end-user-license-agreement",qa=PI.EOL,Lo="",Jpe="yes",eY="Starting HarperDB install...",tY="HarperDB installation was successful.",rY="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Xpe="An out of date version of HarperDB is already installed.",CI="It appears that HarperDB is already installed. Exiting install...",Zpe="Aborting install",xLe=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])$/),eme=new RegExp(/^[^\s.,*>]+$/),tme=PI.homedir(),rme=Fi.join(tme,fe.HDB_ROOT_DIR_NAME),nme="HDB_ADMIN",sme="CLUSTER_USER",ime="dev",ome="localhost",VS={[Mt.HTTP_CORS]:!0,[Mt.HTTP_CORSACCESSLIST]:["*"],[Mt.HTTP_PORT]:9926,[Mt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Mt.THREADS_COUNT]:1,[Mt.THREADS_DEBUG]:!0,[Mt.LOGGING_STDSTREAMS]:!0,[Mt.LOGGING_LEVEL]:"info",[Mt.OPERATIONSAPI_NETWORK_PORT]:9925,[Mt.LOCALSTUDIO_ENABLED]:!0},kr={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:"},$a=KS([fe.INSTALL_PROMPTS.HDB_CONFIG]),ki,oY=!1,LI=!1,aY=!1;dY.exports={install:cY,updateConfigEnv:Eme,setIgnoreExisting:gme};cY.createSuperUser=uY;async function cY(){console.log(Fr(qa+eY+qa)),fr.notify(eY);let e;$a[fe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=ame());let t=lme();Object.assign(t,e),t[fe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[fe.INSTALL_PROMPTS.ROOTPATH]&&t[fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[fe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(aY=!0,t[fe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=qpe(t);if(r)throw r.message;await ume(),await dme(t);let n=await cme(t);ki=n[fe.INSTALL_PROMPTS.ROOTPATH],$a[fe.INSTALL_PROMPTS.HDB_CONFIG]&&Fi.dirname($a[fe.INSTALL_PROMPTS.HDB_CONFIG])===ki&&(oY=!0),!LI&&!$a[fe.INSTALL_PROMPTS.HDB_CONFIG]&&await Is.pathExists(Fi.join(ki,fe.HDB_CONFIG_FILE))&&(console.error(CI),process.exit());let s=Fpe({prefixText:Fr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Yh.isEmpty(ki))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ga.setHdbBasePath(ki),await $pe(ki),await fme(),await _me(n),fr.initLogSettings(!0),await uY(n),await pme(n),await ZK.updateConfigCert(),await ZK.generateCertsKeys(),await mme(),Ype(),s.stop(),console.log(Fr(qa+tY+qa)),fr.notify(tY)}a(cY,"install");function ame(){let e=Gpe.parseDocument(Is.readFileSync($a[fe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=DI.flattenConfig(e.toJSON());return t[fe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[fe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(ame,"getConfigFromFile");async function cme(e){fr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.ROOTPATH],kr.DESTINATION),name:fe.INSTALL_PROMPTS.ROOTPATH,prefix:Lo,default:rme,validate:a(async s=>ws(s)?ws(s):await Is.pathExists(Fi.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:Fr(kr.DESTINATION)},{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],kr.HDB_USERNAME),name:fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Lo,default:nme,validate:a(s=>ws(s)?ws(s):(t=s,!0),"validate"),message:Fr(kr.HDB_USERNAME)},{type:"password",when:Mo(e[fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],kr.HDB_PASS),name:fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Lo,validate:a(s=>ws(s)?ws(s):!0,"validate"),message:Fr(kr.HDB_PASS)},{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.DEFAULTS_MODE],kr.DEFAULTS_MODE),name:fe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Lo,default:ime,validate:a(s=>ws(s)?ws(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:Fr(kr.DEFAULTS_MODE)}];if(aY||r.push({type:"input",name:fe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],kr.REPLICATION_HOSTNAME),prefix:Lo,default:ome,message:Fr(kr.REPLICATION_HOSTNAME)}),Yh.autoCastBoolean(e[fe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.CLUSTERING_NODENAME],kr.NODE_NAME),name:fe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Lo,default:kpe.random(),validate:a(i=>eme.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:Fr(kr.NODE_NAME)},{type:"input",transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.CLUSTERING_USER],kr.CLUSTER_USERNAME),name:fe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Lo,default:sme,validate:a(i=>ws(i)?ws(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:Fr(kr.CLUSTER_USERNAME)},{type:"password",when:Mo(e[fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],kr.CLUSTER_PASS),name:fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Lo,validate:a(i=>ws(i)?ws(i):!0,"validate"),message:Fr(kr.CLUSTER_PASS)}];r.push(...s)}let n=await nY.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(cme,"installPrompts");function Mo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Fr(t)} ${Ll.gray("[hidden]")}`),fr.trace(`${Fr(t)} [hidden]`)):(console.log(`${Fr(t)} ${e}`),fr.trace(`${Fr(t)} ${e}`)),!1):!0}a(Mo,"displayCmdEnvVar");function ws(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(ws,"checkForEmptyValue");function lme(){let e=Object.keys(fe.INSTALL_PROMPTS),t=KS(e),r=KS(Object.keys(fe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=fe.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(lme,"checkForPromptOverride");async function ume(){fr.trace("Checking for existing install.");let e=Yh.getPropsFilePath(),t=await Is.pathExists(e),r;if(t){fr.trace(`Install found an existing boot prop file at:${e}`);let n=Hpe(e),s=DI.getConfigValue(fe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(fe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Is.pathExists(s)}if(!t&&Yh.noBootFile()&&(r=!0),r&&!LI){if(fr.trace(`Install found existing HDB config at:${e}`),await sY.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${iY.version}. Exiting install...`;console.log(qa+Ll.magenta.bold(Xpe)),console.log(Ll.magenta.bold(s)),fr.error(s)}else console.log(qa+Ll.magenta.bold(CI)),fr.error(CI);process.exit(0)}}a(ume,"checkForExistingInstall");async function dme(e){fr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Qpe}${qa}and can be viewed by typing or copying and pasting the URL into your web browser.${qa}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Lo,transformer:Dl,when:Mo(e[fe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:fe.INSTALL_PROMPTS.TC_AGREEMENT,message:Fr(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Ll.yellow("Please enter 'yes' or 'no'"),"validate")},n=await nY.prompt([r]);n[fe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[fe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Jpe&&(console.log(Ll.yellow(rY)),fr.error(rY),process.exit(0))}a(dme,"termsAgreement");async function fme(){let e=Fi.join(ki,fe.HDB_CONFIG_FILE),t;try{t=PI.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
111
+ install_user = ${t}`,n=Yh.getHomeDir(),s=Fi.join(n,fe.HDB_HOME_DIR_NAME),i=Fi.join(s,fe.LICENSE_KEY_DIR_NAME);try{Is.mkdirpSync(s,{mode:fe.HDB_FILE_PERMISSIONS}),Is.mkdirpSync(i,{mode:fe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${fe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Fi.join(s,fe.BOOT_PROPS_FILE_NAME);try{await Is.writeFile(o,r)}catch(c){throw fr.error(`There was an error creating the boot file at path: ${o}`),c}Ga.setProperty(fe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ga.setProperty(fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ga.setProperty(Ga.BOOT_PROPS_FILE_PATH,o)}}a(fme,"createBootPropertiesFile");async function _me(e){fr.trace("Creating HarperDB config file");let t=KS(Object.keys(fe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[fe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in VS){if(r===Mt.HTTP_PORT&&t[Mt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??VS[r],t[Mt.HTTP_SECUREPORT]=null;continue}else if(r===Mt.HTTP_PORT)continue;if(r===Mt.OPERATIONSAPI_NETWORK_PORT&&t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??VS[r],t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Mt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=VS[r])}}else t[Mt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Mt.HTTP_PORT.toLowerCase()]&&(t[Mt.HTTP_SECUREPORT]=null);try{$a[fe.INSTALL_PROMPTS.HDB_CONFIG]||DI.createConfigFile(t),Ga.initSync()}catch(r){hme(r)}}a(_me,"createConfigFile");function hme(e){fr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Zpe);let t=Fi.resolve(Ga.get(Ga.BOOT_PROPS_FILE_PATH),"../");t&&Is.removeSync(t),ki&&(oY?Is.readdirSync(ki,{withFileTypes:!0}).forEach(n=>{let s=Fi.join(n.path,n.name);s!==$a[fe.INSTALL_PROMPTS.HDB_CONFIG]&&Is.removeSync(s)}):Is.removeSync(ki)),process.exit(1)}a(hme,"rollbackInstall");async function lY(e,t){fr.trace("Creating admin user"),await jpe();let r;try{r=await Kpe.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 Vpe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(lY,"createAdminUser");async function uY(e){fr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await lY(t,r),delete e[fe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[fe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(uY,"createSuperUser");async function pme(e){fr.trace("Creating Cluster user.");let t;e[fe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[fe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await lY({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[fe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[fe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(pme,"createClusterUser");async function mme(){let e=iY.version;if(e)await sY.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(mme,"insertHdbVersionInfo");function Eme(e){$a[fe.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Eme,"updateConfigEnv");function gme(e){LI=e}a(gme,"setIgnoreExisting")});var pY=P((kLe,hY)=>{"use strict";var MI=oe(),es=X(),_Y=AI();hY.exports={processDirectives:Sme};async function Sme(e){console.log("Starting upgrade process...");let t=_Y.getVersionsForUpgrade(e),r=Rme(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;es.notify(c),console.log(c);let l=[],u=[];try{l=Tme(o.sync_functions)}catch(f){throw es.error(`Error while running an upgrade script for ${o.version}`),f}try{u=await Ame(o.async_functions)}catch(f){throw es.error(`Error while running an upgrade script for ${o.version}`),f}n.push(...l,...u)}return n}a(Sme,"processDirectives");function Tme(e){if(MI.isEmptyOrZeroLength(e))return es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return es.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(es.info(`Running function ${r.name}`),!(r instanceof Function)){es.info("Variable being processed is not a function");continue}let n=r();es.info(n),t.push(n)}return t}a(Tme,"runSyncFunctions");async function Ame(e){if(MI.isEmptyOrZeroLength(e))return es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return es.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(es.info(`Running function ${s.name}`),!(s instanceof Function)){es.info("Variable being processed is not a function");continue}let i=await s();es.info(i),t.push(i)}return t}a(Ame,"runAsyncFunctions");function Rme(e){if(MI.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=_Y.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Rme,"getUpgradeDirectivesToInstall")});var RY=P((GLe,AY)=>{"use strict";var YS=ce();YS.initSync();var SY=require("chalk"),mY=require("fs-extra"),Uo=X(),vo=(G(),D($)),yme=pY(),vI=oe(),TY=qS(),bme=vS(),EY=pA(),Ome=$s(),{packageJson:gY}=Et(),Nme=require("util").promisify,wme=Nme(Ome.setSchemaDataToGlobal),UI,{UPGRADE_VERSION:xI}=vo.UPGRADE_JSON_FIELD_NAMES_ENUM;AY.exports={upgrade:Ime};async function Ime(e){await wme(),UI===void 0&&(UI=sd()),mY.existsSync(YS.get(YS.BOOT_PROPS_FILE_PATH))||(Wh("The hdb_boot_properties file was not found. Please install HDB.",vo.LOG_LEVELS.ERROR),process.exit(1)),mY.existsSync(YS.get(vo.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Wh("The hdb settings file was not found. Please make sure HDB is installed.",vo.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await TY.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Wh(`This version of HarperDB is ${gY.version}`,vo.LOG_LEVELS.INFO);let r=t[xI]??gY.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${vo.HDB_SUPPORT_ADDRESS}`),Uo.notify("Missing new version field from upgrade info object"),process.exit(1)),await Cme();let n,s=0;try{n=await bme.forceUpdatePrompt(t)}catch(i){Uo.error("There was an error when prompting user about upgrade."),Uo.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Uo.info(`Starting upgrade to version ${r}`),await Pme(t),Wh(`HarperDB was successfully upgraded to version ${t[xI]}`,vo.LOG_LEVELS.INFO)}a(Ime,"upgrade");async function Cme(){let e=!1,t=await EY.findPs(vo.HDB_PROC_NAME);if(vI.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await EY.findPs("hdb_express");vI.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await UI.list();vI.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(SY.red(r)),Uo.error(r),process.exit(1)}}a(Cme,"checkIfRunning");async function Pme(e){try{await yme.processDirectives(e)}catch(t){throw Wh("There was an error during the data upgrade. Please check the logs.",vo.LOG_LEVELS.ERROR),t}try{await TY.insertHdbUpgradeInfo(e[xI])}catch(t){Uo.error("Error updating the 'hdb_info' system table."),Uo.error(t)}}a(Pme,"runUpgrade");function Wh(e,t=void 0){t||(t=Uo.info),Uo[t](e),console.log(SY.magenta(e))}a(Wh,"printToLogAndConsole")});var wY={};Be(wY,{onStorageReclamation:()=>zh,runReclamationHandlers:()=>FI,setAvailableSpaceRatioGetter:()=>Lme});function zh(e,t,r){(r||(0,zS.getWorkerIndex)()===(0,zS.getWorkerCount)()-1)&&(WS.has(e)||WS.set(e,[]),WS.get(e).push({priority:0,handler:t}),kI||(kI=setTimeout(FI,bY).unref()))}async function FI(){for(let[e,t]of WS)try{let r=await NY(e),n=Dme/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&&(HI.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){HI.default.error?.("Error running storage reclamation handlers",r)}kI=setTimeout(FI,bY).unref()}function Lme(e){NY=e??OY}var BI,zS,HI,jS,yY,WS,Dme,bY,kI,OY,NY,QS=be(()=>{BI=require("node:fs/promises"),zS=M(st()),HI=M(mi());G();jS=M(ce()),yY=M(oe());jS.default.initSync();WS=new Map,Dme=jS.default.get(B.STORAGE_RECLAMATION_THRESHOLD)??.4,bY=(0,yY.convertToMS)(jS.default.get(B.STORAGE_RECLAMATION_INTERVAL))||36e5;a(zh,"onStorageReclamation");OY=a(async e=>{if(BI.statfs){let t=await(0,BI.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"),NY=OY;a(FI,"runReclamationHandlers");a(Lme,"setAvailableSpaceRatioGetter")});var LY=P((KLe,DY)=>{"use strict";var{promises:Td,createReadStream:Mme,createWriteStream:vme}=require("fs"),{createGzip:Ume}=require("zlib"),{promisify:xme}=require("util"),{pipeline:Bme}=require("stream"),Hme=xme(Bme),qI=require("path"),Ka=ce();Ka.initSync();var Va=X(),{CONFIG_PARAMS:Ad,ITC_EVENT_TYPES:kme}=(G(),D($)),{onMessageFromWorkers:Fme}=st(),{convertToMS:Gme}=oe(),{onStorageReclamation:qme}=(QS(),D(wY)),$me=6e4,Vme="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Kme="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",GI,CY;DY.exports=PY;Fme(e=>{e.type===kme.RESTART&&(Ka.initSync(!0),clearInterval(CY),Ka.get(Ad.LOGGING_ROTATION_ENABLED)&&PY())});async function PY(){try{let e=Va.getLogFilePath(),t=Ka.get(Ad.LOGGING_ROTATION_MAXSIZE),r=Ka.get(Ad.LOGGING_ROTATION_INTERVAL),n=Ka.get(Ad.LOGGING_ROTATION_RETENTION),s=0;if(qme(e,l=>{s=l},!0),!t&&!r){Va.error(Vme);return}let i=Ka.get(Ad.LOGGING_ROTATION_PATH);if(!i){Va.error(Kme);return}let o;if(t){let l=t.slice(-1),u=t.slice(0,-1);l==="G"?o=u*1e9:l==="M"?o=u*1e6:o=u*1e3}let c;if(r){let l=r.slice(-1),u=r.slice(0,-1);l==="D"?c=u*1440:l==="H"?c=u*60:c=u}GI=Date.now()/6e4,Va.trace("Log rotate enabled, maxSize:",t,"interval:",r),CY=setInterval(async()=>{if(o){let l;l=await Td.stat(e),l.size>=o&&await IY(e,i)}if(c&&Date.now()/6e4-GI>=c&&(await IY(e,i),GI=Date.now()/6e4),n||s){let l=Gme(n??"1M")/(1+s);s=0;let u=await Td.readdir(i);for(let f of u)try{let d=await Td.stat(qI.join(i,f));Date.now()-d.mtimeMs>l&&await Td.unlink(qI.join(i,f))}catch(d){Va.error("Error trying to remove log",f,d)}}},$me).unref()}catch(e){Va.error(e)}}a(PY,"logRotator");async function IY(e,t){let r=Ka.get(Ad.LOGGING_ROTATION_COMPRESS),n=qI.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);await Td.rename(e,n),r&&(e=n,n+=".gz",await Hme(Mme(e),Ume(),vme(n)),await Td.unlink(e)),Va.closeLogFile(),Va.notify(`hdb.log rotated, old log moved to ${n}`)}a(IY,"moveLogFile")});var FY=P(kY=>{"use strict";var Se=ce();Se.initSync();nd();var Kt=(G(),D($)),{CONFIG_PARAMS:Le}=Kt,ts=X(),xo=require("fs-extra"),Bo=require("path"),Yme=dI(),{install:Wme}=fY(),$I=require("chalk"),{packageJson:zme,PACKAGE_ROOT:jme}=Et(),Ho=oe(),VI=wt(),vY=lc(),MY=qg(),Qme=RY(),Jme=LY(),{compactOnStart:Xme}=(YN(),D(KN)),Zme=require("minimist"),eEe=Zs(),{startHTTPThreads:tEe}=(KI(),D(GY)),rEe=qS(),{isMainThread:nEe}=require("worker_threads"),WLe=oo(),zLe=uo(),jLe=qy(),QLe=l_(),JS=(G(),D($)),Gi,Rd,UY=!1,sEe="Upgrade complete. Starting HarperDB.",iEe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",oEe="HarperDB not found, starting install process.",aEe="There was an error during install, check install_log.log for more details. Exiting.",cEe="HarperDB successfully started.";function lEe(){if(!UY){let e=a(()=>{xo.removeSync(Bo.join(Se.get(Kt.CONFIG_PARAMS.ROOTPATH),Kt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(lEe,"addExitListeners");async function xY(e=!1,t=!1){if(console.log($I.magenta("Starting HarperDB...")),ts.suppressLogging?.(()=>{console.log($I.magenta(""+xo.readFileSync(Bo.join(jme,"utility/install/ascii_logo.txt"))))}),await HY()===!1){console.log(oEe);try{await Wme()}catch(l){console.error(aEe,l),ts.error(l),process.exit(1)}}if(!e){let l=vY(Object.keys(Kt.CONFIG_PARAM_MAP),!0);!Ho.isEmpty(l)&&!Ho.isEmptyOrZeroLength(Object.keys(l))&&VI.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Rd?.service==="clustering";Rd?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=Bo.join(Se.get(Kt.CONFIG_PARAMS.ROOTPATH),Kt.HDB_PID_FILE),i=hEe(s);i&&i!==1&&pEe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),Gi===void 0&&(Gi=sd()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Se.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await MY.generateNatsConfig(),await Gi.startClusteringProcesses(!0),process.exit()),lEe(),await xo.writeFile(Bo.join(Se.get(JS.CONFIG_PARAMS.ROOTPATH),JS.HDB_PID_FILE),`${process.pid}`),ts.info("HarperDB PID",process.pid);let o;try{let l=await rEe.getVersionUpdateInfo();l!==void 0&&(o=l[Kt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Qme.upgrade(l),console.log(sEe))}catch(l){o?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${o}. Exiting HarperDB.`,l),ts.error(l)):(console.error(iEe,l),ts.error(l)),process.exit(1)}Yme(),fEe(),await eEe.reviewSelfSignedCert(),Ho.autoCastBoolean(Se.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&nEe&&await MY.generateNatsConfig(t)}a(xY,"initialize");async function uEe(e=!1){try{Rd=Zme(process.argv),Rd.ROOTPATH&&VI.updateConfigObject("settings_path",Bo.join(Rd.ROOTPATH,Kt.HDB_CONFIG_FILE)),await xY(e,!0),Se.get(Kt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Xme();let t=process.env.IS_SCRIPTED_SERVICE&&!Rd.service;Ho.autoCastBoolean(Se.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Gi.startClusteringProcesses(),await Gi.startClusteringThreads()),await tEe(process.env.DEV_MODE?1:Se.get(JS.CONFIG_PARAMS.THREADS_COUNT)??Se.get(JS.CONFIG_PARAMS.THREADS)),Se.get(Kt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Jme(),t||BY()}catch(t){console.error(t),ts.error(t),process.exit(1)}}a(uEe,"main");function BY(){ts.suppressLogging(()=>{console.log($I.magenta(`HarperDB ${zme.version} successfully started`))}),ts.notify(cEe)}a(BY,"started");async function dEe(e=!0){UY=!e;try{Gi===void 0&&(Gi=sd()),Gi.enterPM2Mode(),await xY(),Ho.autoCastBoolean(Se.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Gi.startClusteringProcesses(),await Gi.startService(Kt.PROCESS_DESCRIPTORS.HDB),BY(),e&&process.exit(0)}catch(t){console.error(t),ts.error(t),process.exit(1)}}a(dEe,"launch");function fEe(){let e=Bo.join(Se.get(Kt.CONFIG_PARAMS.ROOTPATH),Kt.LICENSE_KEY_DIR_NAME,Kt.LICENSE_FILE_NAME),t=Bo.join(e,Kt.LICENSE_FILE_NAME),r=Bo.join(e,Kt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=vY(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ho.isEmpty(n)||Ho.isEmpty(s))return;xo.mkdirpSync(e),xo.writeFileSync(r,n),xo.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ts.error(s)}}a(fEe,"writeLicenseFromVars");Object.assign(kY,{launch:dEe,main:uEe,isHdbInstalled:HY,startupLog:_Ee});async function HY(){try{await xo.stat(Ho.getPropsFilePath()),await xo.stat(Se.get(Kt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ho.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw ts.error(`Error checking for HDB install - ${e}`),e}return!0}a(HY,"isHdbInstalled");function _Ee(e){let r=a(_=>_.padEnd(20),"pad"),n=`
112
112
  `;Se.get(Le.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${Se.get(Le.REPLICATION_HOSTNAME)}
113
113
  `),Se.get(Le.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${Se.get(Le.REPLICATION_URL)}
114
114
  `),n+=`${r("Worker Threads:")}${Se.get(Le.THREADS_COUNT)}
@@ -121,12 +121,12 @@ Reindexing upgrade started for transaction logs`),Po.notify("Reindexing upgrade
121
121
  `,n+=r("MQTT:"),n+=Se.get(Le.MQTT_NETWORK_PORT)?`TCP: ${Se.get(Le.MQTT_NETWORK_PORT)}, `:"",n+=Se.get(Le.MQTT_NETWORK_SECUREPORT)?`TLS: ${Se.get(Le.MQTT_NETWORK_SECUREPORT)}`:"",n+=Se.get(Le.MQTT_WEBSOCKET)&&Se.get(Le.HTTP_PORT)?`, WS: ${Se.get(Le.HTTP_PORT)}`:"",n+=Se.get(Le.MQTT_WEBSOCKET)&&Se.get(Le.HTTP_SECUREPORT)?`, WSS: ${Se.get(Le.HTTP_SECUREPORT)}
122
122
  `:`
123
123
  `;let i=Se.get(Le.REPLICATION_PORT)??Se.get(Le.OPERATIONSAPI_NETWORK_PORT),o=Se.get(Le.REPLICATION_SECUREPORT)??Se.get(Le.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=o?`WSS: ${o} `:"",n+=`${c.slice(0,-2)}
124
- `;let l=[],u=VI.getConfigObj();for(let _ in u)u[_].package&&l.push(_);let f={},d=`${r("REST:")}`;for(let[_,m]of e)for(let S of m){let g=S.name;g==="rest"&&(d+=`${S.protocol_name}: ${_}, `),l.includes(g)&&(f[g]?f[g]+=`${S.protocol_name}: ${_}, `:f[g]=`${S.protocol_name}: ${_}, `)}d.length>21&&(d=d.slice(0,-2),n+=`${d}
124
+ `;let l=[],u=VI.getConfigObj();for(let _ in u)u[_].package&&l.push(_);let f={},d=`${r("REST:")}`;for(let[_,p]of e)for(let S of p){let g=S.name;g==="rest"&&(d+=`${S.protocol_name}: ${_}, `),l.includes(g)&&(f[g]?f[g]+=`${S.protocol_name}: ${_}, `:f[g]=`${S.protocol_name}: ${_}, `)}d.length>21&&(d=d.slice(0,-2),n+=`${d}
125
125
  `);let h=Se.get(Le.HTTP_PORT)?`HTTP: ${Se.get(Le.HTTP_PORT)}, `:"";h+=Se.get(Le.HTTP_SECUREPORT)?`HTTPS: ${Se.get(Le.HTTP_SECUREPORT)}, `:"",h.length>21&&(h=h.slice(0,-2));for(let _ of l)f[_]?n+=`${r(_+": ")}${f[_].slice(0,-2)}
126
126
  `:n+=`${r(_+": ")}${h}
127
- `;console.log(n),Se.get(Le.LOGGING_STDSTREAMS)&&ts.logsAtLevel("info")&&ts.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(fEe,"startupLog");function _Ee(e){try{return Number.parseInt(xo.readFileSync(e,"utf8"),10)}catch{return null}}a(_Ee,"readPidFile");function hEe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(hEe,"isProcessRunning")});var tC=P(ko=>{"use strict";HA();var{isMainThread:YI,parentPort:Zh,threadId:ZS,workerData:mEe}=require("node:worker_threads"),{Socket:pEe,createServer:EEe}=require("node:net"),{createServer:gEe,IncomingMessage:SEe}=require("node:http"),{createServer:TEe}=require("node:https"),{createSecureServer:AEe}=require("node:http2"),{Blob:REe}=(fs(),D(_p)),{unlinkSync:jY,existsSync:yEe}=require("fs"),wn=X(),ot=ce(),Xt=(G(),D($)),{server:em}=(Dr(),D(ql)),{WebSocketServer:bEe}=require("ws"),{createServer:OEe}=require("node:tls"),{getTicketKeys:NEe,restartNumber:wEe,getWorkerIndex:Rd}=st(),{Headers:WI,appendHeader:IEe}=(R_(),D(CB)),{recordAction:jh,recordActionBinary:$Y}=(Ci(),D(A_)),{Request:JY,createReuseportFd:Xh}=(yE(),D(BB)),{checkMemoryLimit:CEe}=ju(),{createTLSSelector:XY}=Zs(),{resolvePath:ZY}=wt(),{startupLog:PEe}=GY(),{Readable:VY}=require("node:stream"),DEe=ui(),eW=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG);if(eW){let e;if(YI)e=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){wn.info("Could not close debugger",t)}});else{let t=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Rd()>=0&&(e=t+Rd())}if(e){let t=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){wn.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&YI)try{require("inspector").open(9229)}catch(e){wEe<=1&&wn.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:XLe,CONFIG_PARAMS:LEe}=Xt;ot.initSync();var MEe=ot.get(LEe.HTTP_SESSIONAFFINITY),qi={},zI=new Map;ko.registerServer=XI;ko.httpServer=eC;ko.deliverSocket=JI;ko.startServers=tW;ko.listenOnPorts=rW;ko.globals=DEe;ko.when_components_loaded=null;em.http=eC;em.request=UEe;em.socket=xEe;em.ws=BEe;em.upgrade=iW;var Jh={},XS={},eT={},QI=[];function tW(){return ko.when_components_loaded=sT().loadRootComponents(!0).then(()=>{Zh?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)JI(n,r,s);else if(t.requestId)vEe(t);else if(t.type===Xt.ITC_EVENT_TYPES.SHUTDOWN){wn.trace("received shutdown request",ZS);for(let i in qi){let o=qi[i],c;if(o.closeIdleConnections){let u=Object.getOwnPropertySymbols(o).find(h=>h.description.includes("connections")),f=0,d=setInterval(()=>{f++;let h=f>=100,_=o[u][h?"all":"idle"]();if(_.length===0){h&&clearInterval(d);return}f===1?wn.info(`Closing ${_.length} idle connections`):h&&wn.warn(`Forcefully closing ${_.length} active connections`);for(let m=0,S=_.length;m<S;m++){let g=_[m].socket;g._httpMessage&&!g._httpMessage.finished&&!h||(h?g.destroySoon():g.end(`HTTP/1.1 408 Request Timeout\r
127
+ `;console.log(n),Se.get(Le.LOGGING_STDSTREAMS)&&ts.logsAtLevel("info")&&ts.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(_Ee,"startupLog");function hEe(e){try{return Number.parseInt(xo.readFileSync(e,"utf8"),10)}catch{return null}}a(hEe,"readPidFile");function pEe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(pEe,"isProcessRunning")});var tC=P(ko=>{"use strict";HA();var{isMainThread:YI,parentPort:Xh,threadId:ZS,workerData:mEe}=require("node:worker_threads"),{Socket:EEe,createServer:gEe}=require("node:net"),{createServer:SEe,IncomingMessage:TEe}=require("node:http"),{createServer:AEe}=require("node:https"),{createSecureServer:REe}=require("node:http2"),{Blob:yEe}=(fs(),D(fm)),{unlinkSync:jY,existsSync:bEe}=require("fs"),wn=X(),ot=ce(),Xt=(G(),D($)),{server:Zh}=(Dr(),D(ql)),{WebSocketServer:OEe}=require("ws"),{createServer:NEe}=require("node:tls"),{getTicketKeys:wEe,restartNumber:IEe,getWorkerIndex:yd}=st(),{Headers:WI,appendHeader:CEe}=(y_(),D(CB)),{recordAction:jh,recordActionBinary:qY}=(Ci(),D(R_)),{Request:QY,createReuseportFd:Jh}=(RE(),D(BB)),{checkMemoryLimit:PEe}=Ju(),{createTLSSelector:JY}=Zs(),{resolvePath:XY}=wt(),{startupLog:DEe}=FY(),{Readable:$Y}=require("node:stream"),LEe=ui(),ZY=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG);if(ZY){let e;if(YI)e=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){wn.info("Could not close debugger",t)}});else{let t=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&yd()>=0&&(e=t+yd())}if(e){let t=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ot.get(Xt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){wn.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&YI)try{require("inspector").open(9229)}catch(e){IEe<=1&&wn.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:ZLe,CONFIG_PARAMS:MEe}=Xt;ot.initSync();var vEe=ot.get(MEe.HTTP_SESSIONAFFINITY),qi={},zI=new Map;ko.registerServer=XI;ko.httpServer=eC;ko.deliverSocket=JI;ko.startServers=eW;ko.listenOnPorts=tW;ko.globals=LEe;ko.when_components_loaded=null;Zh.http=eC;Zh.request=xEe;Zh.socket=BEe;Zh.ws=HEe;Zh.upgrade=sW;var Qh={},XS={},eT={},jI=[];function eW(){return ko.when_components_loaded=sT().loadRootComponents(!0).then(()=>{Xh?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)JI(n,r,s);else if(t.requestId)UEe(t);else if(t.type===Xt.ITC_EVENT_TYPES.SHUTDOWN){wn.trace("received shutdown request",ZS);for(let i in qi){let o=qi[i],c;if(o.closeIdleConnections){let u=Object.getOwnPropertySymbols(o).find(h=>h.description.includes("connections")),f=0,d=setInterval(()=>{f++;let h=f>=100,_=o[u][h?"all":"idle"]();if(_.length===0){h&&clearInterval(d);return}f===1?wn.info(`Closing ${_.length} idle connections`):h&&wn.warn(`Forcefully closing ${_.length} active connections`);for(let p=0,S=_.length;p<S;p++){let g=_[p].socket;g._httpMessage&&!g._httpMessage.finished&&!h||(h?g.destroySoon():g.end(`HTTP/1.1 408 Request Timeout\r
128
128
  Connection: close\r
129
129
  \r
130
- `))}},25).unref()}o.close?.(()=>{if(ot.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Rd()==0)try{jY(ZY(ot.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,ZS),o.cantCleanupProperly||wn.warn("Had to forcefully exit the thread",ZS),process.exit(0)},5e3).unref()})}if(eW||process.env.DEV_MODE)try{require("inspector").close()}catch(i){wn.info("Could not close debugger",i)}}}).ref();let e;Xh&&!MEe&&(e=rW()),Promise.resolve(e).then(()=>{if(Rd()===0)try{PEe(zI)}catch(t){console.error("Error displaying start-up log",t)}Zh?.postMessage({type:Xt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(tW,"startServers");function rW(){let e=[];for(let t in qi){let r=qi[t];if(t.includes?.("/")&&Rd()==0){yEe(t)&&jY(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),wn.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ot.get(Xt.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=Rd();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?Xh?n={fd:Xh(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:Xh?n={fd:Xh(+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}),wn.trace("Listening on port "+t,ZS)}).on("error",c)}))}return Promise.all(e)}a(rW,"listenOnPorts");!YI&&!mEe?.noServerStart&&tW();function JI(e,t,r){let n=e?.read?e:new pEe({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=qi[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=qi[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(wn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(JI,"deliverSocket");var KY=new Map;function vEe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=KY.get(s),r){case"connection":i=JI(void 0,t),KY.set(s,i),i.write=(c,l,u)=>(Zh.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Zh.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Zh.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(vEe,"proxyRequest");var{getComponentName:tT}=(bh(),D(yh));function XI(e,t,r=!0){t||(t=ot.get(Xt.CONFIG_PARAMS.HTTP_PORT));let n=qi[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",QY),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else qi[t]=e;e.on("unhandled",QY)}a(XI,"registerServer");function ZI(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=[],ot.get(Xt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:ot.get(Xt.CONFIG_PARAMS.HTTP_PORT),secure:ot.get(Xt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),ot.get(Xt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:ot.get(Xt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&ot.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:ZY(ot.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}a(ZI,"getPorts");function eC(e,t){let r=[];for(let{port:n,secure:s}of ZI(t))r.push(nW(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?QI[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,XI(e,n,!1)),eT[n]=nT(QI,n);return r}a(eC,"httpServer");function rT(e,t){let r=zI.get(e)??[];zI.set(e,[...r,t])}a(rT,"setPortServerMap");function nW(e,t,r,n){if(rT(e,{protocol_name:t?"HTTPS":"HTTP",name:tT()}),!XS[e]){let s=r?"operationsApi_network":"http",i=ot.get(s+"_keepAliveTimeout"),o=ot.get(s+"_timeout"),c=ot.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:ot.get(Xt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)},u=ot.get(s+"_mtls"),f=ot.get(s+"_mtls_required"),d;if(t){let m=ot.get("tls");d=ot.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!f,requestCert:!!(u||n),ticketKeys:NEe(),SNICallback:XY(r?"operations-api":"server",u),ciphers:m.ciphers??m[0]?.ciphers})}let h=CEe(),_=XS[e]=(t?d?AEe:TEe:gEe)(l,async(m,S)=>{try{let R=performance.now(),E=new JY(m,S);r&&(E.isOperationsServer=!0);let T=await eT[e](E);if(!T){if(E._nodeResponse.statusCode)return;T=sW(E)}if(T.headers?.set||(T.headers=new WI(T.headers)),h?T.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):T.headers?.set?.("Server","HarperDB"),T.status===-1){for(let ne of T.headers||[])S.setHeader(ne[0],ne[1]);return m.baseRequest=E,S.baseResponse=T,XS[e].emit("unhandled",m,S)}let O=T.status||200,v=performance.now(),F=v-R,q=T.body,Q,te=!1;if(!T.handlesHeaders){let ne=T.headers||new WI;q?q.length>=0?(typeof q=="string"?ne.set("Content-Length",Buffer.byteLength(q)):ne.set("Content-Length",q.length),Q=!0):q instanceof REe&&(q.size?ne.set("Content-Length",q.size):q.on&&(te=!0,q.on("size",ie=>{S.headersSent||S.setHeader("Content-Length",ie)})),q=q.stream()):(ne.set("Content-Length","0"),Q=!0);let le=`hdb;dur=${F.toFixed(2)}`;if(T.wasCacheMiss&&(le+=", miss"),IEe(ne,"Server-Timing",le,!0),!S.headersSent)if(te){if(S.statusCode=O,ne)if(ne[Symbol.iterator])for(let[ie,Re]of ne)S.setHeader(ie,Re);else for(let ie in ne)S.setHeader(ie,ne[ie])}else S.writeHead(O,ne&&(ne[Symbol.iterator]?Array.from(ne):ne));Q&&S.end(q)}let se=E.handlerPath,z=E.method;if(jh(F,"duration",se,z,T.wasCacheMiss==null?void 0:T.wasCacheMiss?"cache-miss":"cache-hit"),$Y(O<400,"success",se,z),$Y(1,"response_"+O,se,z),!Q)if(q instanceof ReadableStream&&(q=VY.fromWeb(q)),(q[Symbol.iterator]||q[Symbol.asyncIterator])&&(q=VY.from(q)),q?.pipe){q.pipe(S),q.destroy&&S.on("close",()=>{q.destroy()});let ne=0;q.on("data",le=>{ne+=le.length}),q.on("end",()=>{jh(performance.now()-v,"transfer",se,z),jh(ne,"bytes-sent",se,z)})}else q?.then?q.then(ne=>{S.end(ne)},g):S.end(q)}catch(R){g(R)}function g(R){let E=R.headers;S.writeHead(R.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),S.end(R.toString()),R.statusCode?R.statusCode===500?wn.warn(R):wn.info(R):wn.error(R)}a(g,"onError")});i>=0&&(_.keepAliveTimeout=i),c>=0&&(_.headersTimeout=c),t&&(_.ports||(_.ports=[]),_.ports.push(e),l.SNICallback.initialize(_),u&&(_.mtlsConfig=u),_.on("secureConnection",m=>{m._parent.startTime&&jh(performance.now()-m._parent.startTime,"tls-handshake",e),jh(m.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),XI(_,e)}return XS[e]}a(nW,"getHTTPServer");function nT(e,t){let r=sW;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"next_callback")}}return r}a(nT,"makeCallbackChain");function sW(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new WI}}a(sW,"unhandled");function UEe(e,t){eC(e,{requestOnly:!0,...t})}a(UEe,"onRequest");function xEe(e,t){let r;if(t.securePort){rT(t.securePort,{protocol_name:"TLS",name:tT()});let n=XY("server",t.mtls),s=ot.get("tls");r=OEe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:s.ciphers??s[0]?.ciphers,SNICallback:n},e),n.initialize(r),qi[t.securePort]=r}return t.port&&(rT(t.port,{protocol_name:"TCP",name:tT()}),r=EEe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),qi[t.port]=r),r}a(xEe,"onSocket");Object.defineProperty(SEe.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});var YY=[],jI={};function iW(e,t){for(let{port:r}of ZI(t))YY[t?.runFirst?"unshift":"push"]({listener:e,port:r}),jI[r]=nT(YY,r)}a(iW,"onUpgrade");var WY=[],zY={};function BEe(e,t){let r=[];for(let{port:n,secure:s}of ZI(t)){rT(n,{protocol_name:s?"WSS":"WS",name:tT()});let i=nW(n,s,t?.isOperationsServer,t?.mtls);Jh[n]||(Jh[n]=new bEe({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),Jh[n].on("connection",(o,c)=>{let l=new JY(c);l.isWebSocket=!0;let u=eT[n](l);zY[n](o,l,u)}),iW((o,c,l,u)=>o.__harperdb_request_upgraded?u(o,c,l):Jh[n].handleUpgrade(o,c,l,f=>{o.__harperdb_request_upgraded=!0,u(o,c,l),Jh[n].emit("connection",f,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{jI[n]&&jI[n](o,c,l)})),r.push(i),WY[t?.runFirst?"unshift":"push"]({listener:e,port:n}),zY[n]=nT(WY,n),eT[n]=nT(QI,n)}return r}a(BEe,"onWebSocket");function QY(e,t){t.writeHead(404),t.end(`Not found
131
- `)}a(QY,"defaultNotFound")});var qY={};Be(qY,{startHTTPThreads:()=>kEe,startSocketServer:()=>oC,updateWorkerIdleness:()=>hW});async function kEe(e=2,t){try{if(t)sC(0,1,!0);else{let{loadRootComponents:r}=sT();if(e===0)return(0,Cs.setMainIsWorker)(!0),await tC().startServers(),Promise.resolve([]);await r()}_W();for(let r=0;r<e;r++)sC(r,e);return Promise.all(fW)}finally{(0,Cs.threadsHaveStarted)()}}function _W(){let e=(0,lW.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),nC=setInterval(()=>{aT.notify(e)},HEe).unref())}function sC(e,t=1,r){if(rC++,(0,Cs.startWorker)("server/threads/threadServer.js",{name:lA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===oA.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});fW.push(s),await s,yd.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=oT.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=yd.indexOf(n);o>-1&&yd.splice(o,1)}if(a(i,"removeWorker"),bd){let o=bd;bd=[];for(let c of o)dW[c.localPort](null,c)}}}),r){let n=setInterval(()=>{iC?iC=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Cs.shutdownWorkers)(),rC=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function oC(e=0,t){if(typeof e=="string")try{(0,cT.existsSync)(e)&&(0,cT.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=FEe:r=GEe(t):r=aC;let n=(0,Od.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=dW[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),iC=!0,r(i,(o,c)=>{if(!o){if(oW){let u=i._socket||new Od.Socket({handle:i,writable:!0,readable:!0});oW.deliverSocket(u,e,c),u.resume()}else rC>0?(bd.length===0&&setTimeout(()=>{bd.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,bd.push(i)):(console.log("start up a dynamic thread to handle request"),sC(0));Dt(!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 Od.Socket({handle:i,writable:!0,readable:!0});VEe(u,o,e)}Dt(!0,"socket-routed")})},aT.info(`HarperDB ${uW.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 aC(e,t){let r,n=0;for(let s of yd){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=iT)return iT=i,t(r);n=i}iT=0,t(r)}function FEe(e,t){let r={};e.getpeername(r);let n=r.address,s=Nd.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);aC(e,o=>{Nd.set(n,{worker:o,lastUsed:i}),t(o)})}function GEe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Od.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=Nd.get(l),f=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=f,s(u.worker);aC(n,d=>{Nd.set(l,{worker:d,lastUsed:f}),s(d,o)})})}a(r,"findByHeaderAffinity")}function hW(){iT=0;for(let e of yd)e.expectedIdle=e.recentELU.idle+qEe,e.requests=1;yd.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function VEe(e,t,r){let n=$Ee++;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(),oT.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")),oT.delete(n)),s.event=="destroy"&&(e.destroy(),oT.delete(n))})}var Cs,Od,aT,cT,cW,lW,uW,yd,bd,dW,oW,rC,fW,nC,HEe,iC,iT,aW,Nd,qEe,oT,$Ee,KI=be(()=>{Cs=M(st()),Od=require("net");G();aT=M(X()),cT=require("fs");Ci();cW=require("worker_threads"),lW=M(ju()),uW=M(Et()),yd=[],bd=[],dW=[],rC=0,fW=[];cW.isMainThread&&(process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Cs.onMessageFromWorkers)(e=>{e.type===cA.RESTART&&nC&&(clearInterval(nC),_W())}));HEe=6e5;a(kEe,"startHTTPThreads");a(_W,"licenseWarning");a(sC,"startHTTPWorker");a(oC,"startSocketServer");iT=0;a(aC,"findMostIdleWorker");aW=36e5,Nd=new Map;a(FEe,"findByRemoteAddressAffinity");a(GEe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Nd)r.lastUsed+aW<e&&Nd.delete(t)},aW).unref();qEe=1e3;a(hW,"updateWorkerIdleness");(0,Cs.setMonitorListener)(hW);oT=new Map,$Ee=1;a(VEe,"proxySocket")});var CW=P((oMe,IW)=>{var pW=M(require("cluster")),Ya=M(ce());G();var $i=M(X()),EW=M(require("fastify")),gW=M(require("@fastify/cors")),SW=M(require("@fastify/compress")),TW=M(require("@fastify/static")),AW=M(xb()),RW=M(require("path")),yW=M(Et()),bW=M($s()),OW=M(oe()),NW=M(Gn()),wW=M(ju());Dr();var Wa=M(DS());eo();Ya.default.initSync();var KEe=6e4,YEe=1024*1024*1024,WEe="TRUE",{CONFIG_PARAMS:tm}=$,wd;IW.exports={hdbServer:mW,start:mW};async function mW(e){try{$i.default.debug("In Fastify server"+process.cwd()),$i.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),$i.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=pW.default.isMaster,await zEe();let t=e.securePort>0;wd=QEe(t),await wd.ready(),e||(e={}),e.isOperationsServer=!0;try{Ke.http(wd.server,e),wd.server.closeIdleConnections||await wd.listen({port:0,host:"::"})}catch(r){throw wd.close(),$i.default.error(r),$i.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),$i.default.fatal(t),process.exit(1)}}a(mW,"operationsServer");async function zEe(){$i.default.trace("Configuring HarperDB process."),bW.default.setSchemaDataToGlobal(),await NW.default.setUsersWithRolesCache(),await wW.default.getLicense()}a(zEe,"setUp");function QEe(e){$i.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=jEe(e),r=(0,EW.default)(t);r.server.headersTimeout=XEe(),r.setErrorHandler(Wa.serverErrorHandler);let n=JEe();n&&r.register(gW.default,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(AW.default),r.register(SW.default),r.register(TW.default,{root:RW.default.join(yW.PACKAGE_ROOT,"studio/build-local")}),Nf(r);let s=Ya.default.get(iA.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!OW.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Wa.reqBodyValidationHandler,Wa.authHandler],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),(0,Wa.handlePostRequest)(i,o)}),r.get("/health",()=>"HarperDB is running."),$i.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(QEe,"buildServer");function jEe(e){let t=Ya.default.get(tm.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ya.default.get(tm.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:YEe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(jEe,"getServerOptions");function JEe(){let e=Ya.default.get(tm.OPERATIONSAPI_NETWORK_CORS),t=Ya.default.get(tm.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===WEe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(JEe,"getCORSOpts");function XEe(){return Ya.default.get(tm.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??KEe}a(XEe,"getHeaderTimeoutConfig")});var _C={};Be(_C,{disableNATS:()=>ege,publishToStream:()=>dT,setNATSReplicator:()=>cC,setPublishToStream:()=>tge,setSubscription:()=>fC,start:()=>ZEe});function ZEe(){rm.default.get(B.CLUSTERING_ENABLED)&&nge()}function ege(e=!0){vW=e}function tge(e,t){dT=e,fC=t}function nge(){if(vW||process.env._DISABLE_NATS)return;let e=Ze(),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];cC(s,r,i)}}il((r,n)=>{cC(r.tableName,r.databaseName,r),n&&xW(r)}),!PW&&(PW=!0)}function cC(e,t,r){if(t==="system"&&sge.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 qr{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){xW(i)}static subscribe(){let i=new vn;return fC(t,e,i),i}static subscribeOnThisThread(i){return i<(rm.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??rge)}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 lT(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=UW;return i}a(n,"getNATSTransaction")}function xW(e){let t=rm.default.get(B.CLUSTERING_NODENAME);dT(`${uC.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,dC.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 DW,uC,dC,LW,MW,rm,uT,vW,dT,fC,rge,UW,PW,sge,lT,lC,BW=be(()=>{Ue();na();DW=M(Er()),uC=M(Pt()),dC=M(lo());Kl();LW=M(jb()),MW=M(ln()),rm=M(ce());G();uT=M(X());a(ZEe,"start");a(ege,"disableNATS");dT=DW.publishToStream,fC=LW.setSubscription;a(tge,"setPublishToStream");rge=2;a(nge,"assignReplicationSource");sge=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(cC,"setNATSReplicator");a(xW,"publishSchema");lT=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=rm.default.get(B.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let f of i){let d=f.table,h=f.operation=="put"?"upsert":f.operation;l||(uT.trace(`Sending transaction event ${h}`),u=l={operation:h,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,h!=="delete"&&h!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===h?(o.push(f.record),c.push(f.id)):u=u.next={operation:h,table:d,id:f.id,record:f.record},f.expiresAt&&(u.expiresAt=f.expiresAt)}l&&n.push(dT(`${uC.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,dC.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(f=>{throw uT.error("An error has occurred trying to replicate transaction",l,f),f.statusCode=504,f}))}return Promise.all(n)}},lC=class extends lT{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,MW.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};UW=new lC});async function qW({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await hC.get(e,{returnNonexistent:!0});i=new EC(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await hC.get(e);o&&o.delete()}i=new _T(e,t)}return n&&(n.id=e,n.user={username:t?.username},nm.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function mC(){return fT++,fT>65500&&(fT=1),fT}function pC(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=us.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return It(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var kW,za,FW,GW,HW,hC,nm,fT,_T,EC,$W=be(()=>{Ue();Jl();kW=M(ln()),za=M(X());hc();FW=M(st()),GW=M(tC());Dr();HW=100,hC=_t({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"}]}}]}),nm=_t({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,FW.getWorkerIndex)()===0&&(async()=>{await GW.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of nm.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ke.getUser(r.user.username));try{await pC(r,t,r)}catch{(0,za.warn)("Failed to publish will",t)}nm.delete(e.id)}})();a(qW,"getSession");fT=1;a(mC,"getNextMessageId");_T=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 f=this.subscriptions.find(R=>R.topic===s),d;f?(d=i>0,f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1)):d=i===2;let h={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,za.trace)("Resuming subscription from",s,"from",o);let _=us.getMatch(u,"mqtt");if(!_){let R=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw R.statusCode=404,R}if(h.url=_.relativeURL,h.url.indexOf("+")>-1||h.url.indexOf("#")>-1){let R=h.url.slice(1);if(R.indexOf("#")>-1&&R.indexOf("#")!==R.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(h.isCollection=!0,R.indexOf("+")===R.length-1)h.onlyChildren=!0,h.url="/"+R.slice(0,R.length-1);else{let E=R.split("/"),T;for(let F=0;F<E.length;F++)if(E[F].indexOf("+")>-1)if(E[F]==="+")T=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&T)throw new Error("Filters can not be combined");let O=!0;E[E.length-1]==="#"&&(E.length--,O=!1),T&&(n=a(F=>{let q=F.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(O&&q.length!==E.length)return!1;for(let Q=0;Q<E.length;Q++)if(E[Q]!=="+"&&E[Q]!==q[Q])return!1;return!0},"filter"));let v=E.indexOf("+");h.url="/"+(v>-1?E.slice(0,v):E).concat("").join("/")}}else h.isCollection=!1;let m=_.path,S=_.Resource,g=await It(h,async()=>{let R=this.createContext();R.topic=s,R.retainHandling=i,R.isCollection=h.isCollection;let E=await S.subscribe(h,R);if(!E)return;if(!E[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let T=(async()=>{for await(let O of E)try{let v;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,v=this.needsAcknowledge(O)):(O.acknowledge?.(),v=mC());let F=O.id;if(Array.isArray(F)&&(F=jl(F)),F==null&&(F=""),await this.listener(m+"/"+F,O.value,v,t)===!1)break;this.awaitingAcks?.size>HW?await new Promise(Q=>setTimeout(Q,this.awaitingAcks.size-HW)):await new Promise(setImmediate)}catch(v){(0,za.warn)(v)}})();return E});if(g)return g.topic=s,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=mC();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 pC(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();It(r,async()=>{try{if(!t){let n=await nm.get(this.sessionId);n?.doesExist()&&await pC(n,n.data,r)}}finally{await nm.delete(this.sessionId)}}).catch(n=>{(0,za.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(pC,"publish");EC=class extends _T{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=mC(),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,za.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,kW.getNextMonotonicTime)()),(0,za.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),hC.put(this.sessionRecord)}}});var SC={};Be(SC,{bypassAuth:()=>ige,start:()=>oge});function ige(){zW=!0}function oge({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new WW.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,f,d,h)=>{if(f.headers.get("sec-websocket-protocol")!=="mqtt")return h(u,f,d);o.events.emit("connection",u),_r.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:_,onClose:m}=KW(u,S=>{u.send(S)},f,Promise.resolve(d).then(()=>f?.user),o);u.on("message",_),u.on("close",m),u.on("error",S=>{_r.info?.("WebSocket error",S)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let f;if(o.events.emit("connection",u),_r.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let _=l.user;if(_!==null){(_===void 0||_==="Common Name"||_==="CN")&&(_=u.getPeerCertificate().subject.CN);try{f=await e.getUser(_,null,null),(0,Id.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&mT.notify?.({username:f?.username,status:xs.SUCCESS,type:zo.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(m){throw(0,Id.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&mT.error?.({username:_,status:xs.FAILURE,type:zo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),m}}else _r.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(_){o.events.emit("error",_,u),_r.error?.(_)}else if(l.required)return _r.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!f&&zW&&u.remoteAddress.includes("127.0.0.1")&&(f=await(0,YW.getSuperUser)(),_r.debug?.("Auto-authorizing local connection",f?.username));let{onMessage:d,onClose:h}=KW(u,_=>u.write(_),null,f,o);u.on("data",d),u.on("close",h),u.on("error",_=>{_r.info?.("Socket error",_)})},{port:t,securePort:s,mtls:l})),c}function KW(e,t,r,n,s){VW||(VW=!0,T_(d=>{hT>0&&d.push({metric:"mqtt-connections",connections:hT,byThread:!0})}));let i;hT++;let o,c={protocolVersion:4},l=(0,pT.parser)({protocolVersion:5});function u(d){l.parse(d)}a(u,"onMessage");function f(){hT--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Yn(!1,"connection","mqtt","disconnect"),_r.debug?.("MQTT connection was closed",e.remoteAddress))}return a(f,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n);let h=d.cmd;if(o)o.then&&await o;else if(h!=="connect"){_r.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let _=d.topic,m=_?.indexOf("/",1),S=m>0?_.slice(0,m):_;Dt(d.length,"bytes-received",S,R(d),"mqtt");try{switch(o?.receivedPacket?.(),h){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await Ke.getUser(d.username,d.password.toString(),r),(0,Id.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&mT.notify?.({username:n?.username,status:xs.SUCCESS,type:zo.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(se){return(0,Id.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&mT.error?.({username:d.username,status:xs.FAILURE,type:zo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,se),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let se=e.deserialize||(e.deserialize=no(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?se(d.will.payload):void 0,delete d.will.payload}o=qW({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(se){return _r.error?.(se),s.events.emit("auth-failed",d,e,se),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:se.code||5,returnCode:se.code||128})}s.events.emit("connected",o,e),Yn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let T=a(async(se,z,ne,le)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",se);let ie=se.indexOf("/",1),Re=ie>0?se.slice(0,ie):se;g({cmd:"publish",topic:se,payload:await E(z),messageId:ne||Math.floor(Math.random()*1e8),qos:le.qos},Re);let me=e._socket??e;return me.writableNeedDrain?new Promise(Ae=>me.once("drain",Ae)):!me.closed}catch(ie){return _r.error?.(ie),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(T),o.sessionWasPresent&&await o.resume();break;case"subscribe":let O=[];for(let se of d.subscriptions){let z;try{let ne=await o.addSubscription(se,se.qos>=1);z=ne?ne.qos||0:c.protocolVersion<5?128:143}catch(ne){s.events.emit("error",ne,e,se,o),ne.statusCode?ne.statusCode===500?_r.warn?.(ne):_r.info?.(ne):_r.error?.(ne),z=c.protocolVersion<5?128:ne.statusCode===403?135:ne.statusCode===404?143:128}O.push(z)}await o.committed,g({cmd:"suback",granted:O,messageId:d.messageId});break;case"unsubscribe":{let se=[];for(let z of d.unsubscriptions)se.push(o.removeSubscription(z)?0:17);g({cmd:"unsuback",granted:se,messageId:d.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let v=d.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=no(r?.headers.get?.("content-type"))),Q=(d.payload?.length||0)>0?F(d.payload):void 0,te;try{te=await o.publish(d,Q)}catch(se){s.events.emit("error",se,e,d,o),_r.warn?.(se),d.qos>0&&g({cmd:v,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&g({cmd:v,messageId:d.messageId,reasonCode:te===!1?144:0},d.topic);break;case"pubrec":g({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Yn(!0,"connection","mqtt","disconnect"),_r.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(T){s.events.emit("error",T,e,d,o),_r.error?.(T),g({cmd:"disconnect"})}function g(T,O){let v=(0,pT.generate)(T,c);t(v),Dt(v.length,"bytes-sent",O,R(T),"mqtt")}a(g,"sendPacket");function R(T){return T.qos>0?T.cmd+",qos="+T.qos:T.cmd}a(R,"packetMethodName");function E(T){return oa(T,r)}a(E,"serialize")}),l.on("error",d=>{_r.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:f}}var pT,YW,Id,gC,WW,mT,_r,zW,VW,hT,QW=be(()=>{pT=require("mqtt-packet");$W();YW=M(Gn());eo();Ci();Dr();Id=M(ce());G();gC=M(pi()),WW=require("events"),mT=(0,gC.loggerWithTag)("auth-event"),_r=(0,gC.loggerWithTag)("mqtt"),zW=(0,Id.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(ige,"bypassAuth");a(oge,"start");hT=0;a(KW,"onSocket")});var yh={};Be(yh,{component_errors:()=>Pd,getComponentName:()=>dge,loadComponent:()=>ST,loadComponentDirectories:()=>ez,setErrorReporter:()=>uge});function ez(e,t){t&&(AC=t),e&&(bC=e);let r=[];if((0,ut.existsSync)(TC)){let s=(0,ut.readdirSync)(TC,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Tt.join)(TC,o);r.push(ST(c,AC,tA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(ST(n,AC,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{ZW=!0})}function uge(e){sm=e}function fge(e,t){return new Promise((r,n)=>{let s=Ze().system.hdb_info;if(!s)return r();let i=setTimeout(()=>{s.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(s.primaryStore.attemptLock(e,0,()=>{clearTimeout(i),r()}))try{(0,ut.rmSync)(t,{recursive:!0,force:!0}),(0,ut.existsSync)((0,Tt.join)(e,"node_modules"))||(0,ut.mkdirSync)((0,Tt.join)(e,"node_modules")),(0,ut.symlinkSync)(wC.PACKAGE_ROOT,t,"dir"),r()}finally{s.primaryStore.unlock(e,0)}})}async function ST(e,t,r,n,s,i){let o=(0,ut.realpathSync)(e);if(ET.has(o))return ET.get(o);ET.set(o,!0),s&&(bC=s);try{let c;n&&(Pd=new Map);let l=(0,Tt.join)(e,"harperdb-config.yaml");(0,ut.existsSync)(l)?c=n?(0,TT.getConfigObj)():(0,RC.parseDocument)((0,ut.readFileSync)(l,"utf8")).toJSON():!n&&(0,ut.existsSync)(l=(0,Tt.join)(e,"config.yaml"))?c=(0,RC.parseDocument)((0,ut.readFileSync)(l,"utf8")).toJSON():c=OC;try{let d=(0,Tt.join)(e,"node_modules","harperdb");(n||((0,ut.existsSync)(d)||!e.startsWith((0,yC.getHdbBasePath)()))&&(!(0,ut.existsSync)(d)||(0,ut.realpathSync)(wC.PACKAGE_ROOT)!==(0,ut.realpathSync)(d)))&&await fge(e,d)}catch(d){Ml.default.error("Error symlinking harperdb module",d),d.code=="EPERM"&&process.platform==="win32"&&Ml.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=gT,f=n;for(let d in c){gT=d;let h=c[d];if(Pd.set(n?d:(0,Tt.basename)(e),!1),!h)continue;let _,m=h.package;try{if(m){let T=e,O;for(;!(0,ut.existsSync)(O=(0,Tt.join)(T,"node_modules",d));)if(T=(0,Tt.dirname)(T),T.length<(0,yC.getHdbBasePath)().length){O=null;break}if(O)_=await ST(O,t,r,!1),f=!0;else throw new Error(`Unable to find package ${d}:${m}`)}else _=lge[d];if(!_)continue;let S=a(T=>(T.origin=r,_t(T)),"ensureTable"),g=h.network||(h.port||h.securePort)&&h,R=g?.securePort||g?.https&&g.port,E=!g?.https&&g?.port;if(Cd.isMainThread&&(_=await _.startOnMainThread?.({server:Ke,ensureTable:S,port:E,securePort:R,resources:t,...h})||_,n&&g))for(let T of[E,R])try{if(+T&&!jW.includes(T)){let O=NC.get(B.HTTP_SESSIONAFFINITY);O&&Ml.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!RE)&&(jW.push(T),oC(T,O))}}catch(O){console.error("Error listening on socket",T,O,d)}if(t.isWorker&&(_=await _.start?.({server:Ke,ensureTable:S,port:E,securePort:R,resources:t,...h})||_),bC.set(_,!0),(_.handleFile||_.handleDirectory||_.setupFile||_.setupDirectory)&&h.files!=null){if(h.files.includes(".."))throw(0,XW.handleHDBError)("Can not reference parent directories");let T=(0,Tt.join)(e,h.files).replace(/\\/g,"/"),O=T.indexOf("/*");if(O>-1&&h.files!==OC[d]?.files&&!(0,ut.existsSync)(T.slice(0,O)))throw new Error(`The path '${T.slice(0,O)}' does not exist and cannot be used as the base of the resolved 'files' path value '${h.files}'`);let v=(0,Tt.basename)(e),F=h.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+v+F.slice(2):F==="."?"/"+v:"/"+v+"/"+F;let q,Q,te;if(h.root){let z=h.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",Q=(0,Tt.join)(e,z)}else(te=T.indexOf("/*"))>-1?(Q=T.slice(0,te+1),q=(0,Tt.relative)(e,Q)):h.files.indexOf("/")>-1&&(Q=T.slice(0,T.lastIndexOf("/")+1),q=(0,Tt.relative)(e,Q));let se=!1;if(Cd.isMainThread&&_.setupDirectory&&(se=await _.setupDirectory?.(F,Q,t)),t.isWorker&&_.handleDirectory&&(se=await _.handleDirectory?.(F,Q,t)),se){f=!0;continue}for(let z of await(0,JW.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:ne,dirent:le}=z;f=!0;let ie=(0,Tt.relative)(e,ne).replace(/\\/g,"/");if(q)if(ie.startsWith(q))ie=ie.slice(q.length+1);else throw new Error(`The root path '${h.root}' does not reference a valid part of the file path '${ie}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Re=F+(F.endsWith("/")?"":"/")+ie;try{if(le.isFile()){let me=await cge(ne);Cd.isMainThread&&await _.setupFile?.(me,Re,ne,t),t.isWorker&&await _.handleFile?.(me,Re,ne,t)}else Cd.isMainThread&&await _.setupDirectory?.(Re,ne,t),t.isWorker&&await _.handleDirectory?.(Re,ne,t)}catch(me){let Ae=`Could not load ${le.isFile()?"file":"directory"} '${ne}'${h.module?` using '${h.module}'`:""} for application '${e}' due to:
132
- `;me.message=`${Ae}${me.message}`,me.stack=`${Ae}${me.stack}`,sm?.(me),Ml.default.error(me),t.set(h.path||"/",new sa(me)),Pd.set(n?d:(0,Tt.basename)(e),me.message)}}}}catch(S){S.message=`Could not load component '${d}' for application '${(0,Tt.basename)(e)}' due to: ${S.message}`,sm?.(S),((0,im.getWorkerIndex)()===0?console:Ml.default).error(S),t.set(h.path||"/",new sa(S),null,!0),Pd.set(n?d:(0,Tt.basename)(e),S.message)}}if(gT=u,Cd.isMainThread&&!ZW&&i&&(0,im.watchDir)(e,async()=>ez()),c.extensionModule){let d=await EE((0,Tt.join)(e,c.extensionModule));return ET.set(o,d),d}if(!f&&t.isWorker){let d=`${e} did not load any modules, resources, or files, is this a valid component?`;sm?.(new Error(d)),((0,im.getWorkerIndex)()===0?console:Ml.default).error(d),Pd.set((0,Tt.basename)(e),d)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,sm?.(c),t.set("",new sa(c))}}var ut,Tt,Cd,RC,NC,wC,JW,im,Ml,XW,yC,age,TT,cge,TC,bC,ZW,AC,Pd,lge,OC,jW,ET,sm,gT,dge,bh=be(()=>{ut=require("fs"),Tt=require("path"),Cd=require("worker_threads"),RC=require("yaml"),NC=M(ce()),wC=M(Et());G();aL();qL();Xx();rB();nB();GB();iK();dK();_K();JW=M(require("fast-glob")),im=M(st()),Ml=M(X());gb();Dr();XW=M(he());Ue();KI();yC=M(ce()),age=M(CW());jg();BW();ms();QW();TT=M(wt());yE();BA();({readFile:cge}=ut.promises),TC=(0,TT.resolvePath)(NC.get(B.COMPONENTSROOT)),bC=new Map,Pd=new Map;a(ez,"loadComponentDirectories");lge={REST:OE,rest:OE,graphql:nR,graphqlSchema:GA,roles:Eb,jsResource:Tb,fastifyRoutes:aI,login:Rb,static:cI,operationsApi:age,customFunctions:{},http:{},clustering:_C,replication:Aa,authentication:ph,mqtt:SC,loadEnv:lI},OC={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(OC,"static",{value:{files:"web/**"}});jW=[],ET=new Map;a(uge,"setErrorReporter");dge=a(()=>gT,"getComponentName");a(fge,"symlinkHarperModule");a(ST,"loadComponent")});var sT=P((xMe,rz)=>{var{isMainThread:tz}=require("worker_threads"),{getTables:_ge,getDatabases:vMe,table:UMe}=(Ue(),D(at)),{loadComponentDirectories:hge,loadComponent:mge}=(bh(),D(yh)),{resetResources:pge}=(Jl(),D(nL)),Ege=iw(),gge=wt(),{dirname:Sge}=require("path"),{getConnection:Tge}=Er(),Age=ce(),{CONFIG_PARAMS:Rge}=(G(),D($)),{loadCertificates:yge}=Zs(),IC=new Map;async function bge(e=!1){!tz&&Age.get(Rge.CLUSTERING_ENABLED)&&Tge();try{tz&&await Ege()}catch(n){console.error(n)}let t=pge();_ge(),t.isWorker=e,await yge(),await mge(Sge(gge.getConfigFilePath()),t,"hdb",!0,IC),await hge(IC,t);let r=[];for(let[n]of IC)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(bge,"loadRootComponents");rz.exports.loadRootComponents=bge});var st=P((HMe,li)=>{"use strict";HA();var{Worker:Oge,MessageChannel:Nge,parentPort:Vi,isMainThread:MC,threadId:wge,workerData:Ki}=require("worker_threads"),{PACKAGE_ROOT:Ige}=Et(),{join:oz,isAbsolute:Cge,extname:Pge}=require("path"),{server:az}=(Dr(),D(ql)),{watch:Dge,readdir:Lge}=require("fs/promises"),{totalmem:nz}=require("os"),Dd=(G(),D($)),cz=ce(),ci=X(),{randomBytes:Mge}=require("crypto"),{_assignPackageExport:vge}=ui(),sz=1024*1024,Qa=[],Ps=[],Uge=50,vC=1e4,xge="restart",lz="request_thread_info",uz="resource_report",dz="thread_info",fz="added-port",Bge="ack",CC;vge("threads",Ps);li.exports={startWorker:PC,restartWorkers:xC,shutdownWorkers:qge,workers:Qa,setMonitorListener:jge,onMessageFromWorkers:$ge,onMessageByType:Sz,broadcast:Kge,broadcastWithAcknowledgement:Wge,setChildListenerByType:Gge,getWorkerIndex:_z,getWorkerCount:hz,getTicketKeys:pz,setMainIsWorker:kge,setTerminateTimeout:Hge,restartNumber:Ki?.restartNumber||1};Ps.onMessageByType=Sz;Ps.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ps.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};li.exports.whenThreadsStarted=new Promise(e=>{li.exports.threadsHaveStarted=e});var UC;function Hge(e){vC=e}a(Hge,"setTerminateTimeout");function _z(){return Ki?Ki.workerIndex:UC?0:void 0}a(_z,"getWorkerIndex");function hz(){return Ki?Ki.workerCount:UC?1:void 0}a(hz,"getWorkerCount");function kge(e){UC=e,li.exports.threadsHaveStarted()}a(kge,"setMainIsWorker");var mz=1,AT;function pz(){return AT||(AT=MC?Mge(48):Ki.ticketKeys,AT)}a(pz,"getTicketKeys");Object.defineProperty(az,"workerIndex",{get(){return _z()}});Object.defineProperty(az,"workerCount",{get(){return hz()}});var Ez={[lz](e,t){zge(t)},[uz](e,t){Qge(t,e)}};function PC(e,t={}){let r=process.constrainedMemory?.()||nz();r=Math.min(r,nz(),2e4*sz);let n=cz.get(Dd.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/sz/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Ps){let u=new Nge;u.existingPort=l,i.push(u),o.push(u.port2)}Pge(e)||(e+=".js");let c=new Oge(Cge(e)?e:oz(Ige,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:mz=t.threadCount,name:t.name,restartNumber:li.exports.restartNumber,ticketKeys:pz()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:fz,port:l,threadId:c.threadId},[l]);return yT(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>PC(e,t),c.on("error",l=>{ci.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Qa.splice(Qa.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Uge?(t.unexpectedRestarts=c.unexpectedRestarts+1,PC(e,t)):ci.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{Ez[l.type]?.(l,c)}),Qa.push(c),Xge(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(PC,"startWorker");var Fge=[Dd.THREAD_TYPES.HTTP];async function xC(e=null,t=Math.max(mz>3,1),r=!0){if(MC){try{process.chdir(process.cwd())}catch(o){ci.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=sT();await o()}li.exports.restartNumber++,t<1&&(t=t*Qa.length);let n=[],s=[];for(let o of Qa.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;ci.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:li.exports.restartNumber,type:Dd.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Fge.indexOf(o.name)>-1,l=new Promise(u=>{let f=setTimeout(()=>{ci.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},vC*2).unref();o.on("exit",()=>{clearTimeout(f),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),f=new Promise(d=>{let h=a(_=>{_.type===Dd.ITC_EVENT_TYPES.CHILD_STARTED&&(ci.trace("Worker has started",u.threadId),d(),s.splice(s.indexOf(f)),u.off("message",h))},"startListener");ci.trace("Waiting for worker to start",u.threadId),u.on("message",h)});s.push(f),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}=rd();r&&(e==="http"||!e)&&cz.get(Dd.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Vi.postMessage({type:xge,workerType:e})}a(xC,"restartWorkers");function Gge(e,t){Ez[e]=t}a(Gge,"setChildListenerByType");function qge(e){return xC(e,1/0,!1)}a(qge,"shutdownWorkers");var gz=[];function $ge(e){gz.push(e)}a($ge,"onMessageFromWorkers");var DC=new Map;function Sz(e,t){let r=DC.get(e);r||DC.set(e,r=[]),r.push(t)}a(Sz,"onMessageByType");var Vge=10;async function Kge(e,t){let r=0;for(let n of Ps)try{n.postMessage(e),r++>Vge&&(r=0,await new Promise(setImmediate))}catch(s){ci.error("Unable to send message to worker",s)}t&&Az(e,null)}a(Kge,"broadcast");var RT=new Map,Yge=1;function Wge(e){return new Promise(t=>{let r=0;for(let n of Ps)try{let s=Yge++,i=a(()=>{RT.delete(s),--r===0&&t(),n!==Vi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,RT.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of RT)o.port===n&&o()})),n.postMessage(e),r++}catch(s){ci.error("Unable to send message to worker",s)}r===0&&t()})}a(Wge,"broadcastWithAcknowledgement");function zge(e){e.postMessage({type:dz,workers:Tz()})}a(zge,"sendThreadInfo");function Tz(){let e=Date.now();return Qa.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(Tz,"getChildWorkerInfo");function Qge(e,t){e.resources=t,e.resources.updated=Date.now()}a(Qge,"recordResourceReport");var LC;function jge(e){LC=e}a(jge,"setMonitorListener");var Jge=1e3,iz=!1;function Xge(){iz||(iz=!0,setInterval(()=>{for(let e of Qa){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}LC&&LC()},Jge).unref())}a(Xge,"startMonitoring");var Zge=1e3;if(Vi&&Ki?.addPorts){yT(Vi);for(let e=0,t=Ki.addPorts.length;e<t;e++){let r=Ki.addPorts[e];r.threadId=Ki.addThreadIds[e],yT(r)}setInterval(()=>{let e=process.memoryUsage();Vi.postMessage({type:uz,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Zge).unref(),CC=a(()=>new Promise((e,t)=>{Vi.on("message",r),Vi.postMessage({type:lz});function r(n){n.type===dz&&(Vi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else CC=Tz;li.exports.getThreadInfo=CC;function yT(e,t){Ps.push(e),e.on("message",r=>{if(r.type===fz)r.port.threadId=r.threadId,yT(r.port);else if(r.type===Bge){let n=RT.get(r.id);n&&n()}else Az(r,e)}).on("close",()=>{Ps.splice(Ps.indexOf(e),1)}).on("exit",()=>{Ps.splice(Ps.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(yT,"addPort");function Az(e,t){for(let n of gz)n(e,t);let r=DC.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){ci.error(s)}}a(Az,"notifyMessageListeners");if(MC){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Lge(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(oz(s,o.name));try{for await(let{filename:o}of Dge(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await xC(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");li.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Vi.on("message",async e=>{let{type:t}=e;t===Dd.ITC_EVENT_TYPES.SHUTDOWN&&(li.exports.restartNumber=e.restartNumber,Vi.unref(),setTimeout(()=>{ci.warn("Thread did not voluntarily terminate",wge),process.exit(0)},vC).unref())})});var Ex={};Be(Ex,{ACTION_32_BIT:()=>Tp,ACTION_64_BIT:()=>nSe,AUDIT_STORE_OPTIONS:()=>dh,Decoder:()=>sl,HAS_BLOBS:()=>mn,HAS_CURRENT_RESIDENCY_ID:()=>Nc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Mf,HAS_ORIGINATING_OPERATION:()=>Lf,HAS_PREVIOUS_RESIDENCY_ID:()=>wc,REMOTE_SEQUENCE_UPDATE:()=>sg,createAuditEntry:()=>bc,getLastRemoved:()=>tSe,openAuditStore:()=>NT,readAuditEntry:()=>Ct,removeAuditEntry:()=>wT,setAuditRetention:()=>rSe,transactionKeyEncoder:()=>Pz});function NT(e){let t=e.auditStore=e.openDB(BC.AUDIT_STORE_NAME,{create:!1,...dh});t||(t=e.auditStore=e.openDB(BC.AUDIT_STORE_NAME,dh),yz(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,f){return r[l]=f,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=kC;Qh(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(f=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let d=0,h,_;try{for(let{key:m,value:S}of t.getRange({start:1,snapshot:!1,end:Date.now()-HC/(1+i*i)})){try{h=wT(t,m,S)}catch(g){Ld.warn("Error removing audit entry",g)}if(_=m,await new Promise(setImmediate),++d>=eSe){o=10;break}}await h}finally{d===0?o=Math.min(o<<1,HC/10):(yz(t,_),o>100&&(o=o>>1)),f(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,am.getWorkerIndex)()===(0,am.getWorkerCount)()-1&&c(),(0,am.getWorkerIndex)()===0&&!Rz)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(Rz=!0,Ld.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 wT(e,t,r){let n=sSe(r),s;if(n&mn){s=Ct(r);let i=e.tableStores[s.tableId],o=i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&Sc(()=>ia(s.getValue(i)),i.rootStore)}if((n&15)===FC){s=s||Ct(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 yz(e,t){GC[0]=t,e.put(Symbol.for("last-removed"),Dz)}function tSe(e){let t=e.get(Symbol.for("last-removed"));if(t)return Dz.set(t),GC[0]}function rSe(e,t=kC){HC=e,kC=t}function bc(e,t,r,n,s,i,o,c,l,u,f,d,h){let _=Lz[o];if(!_)throw new Error(`Invalid audit entry type ${o}`);let m=1;if(n&&(n>1?ja.setFloat64(0,n):Ds.set(_R),m=9),l){if(l&255)throw new Error("Illegal extended type");m+=3}R(s),R(t),g(r),ja.setFloat64(m,e),m+=8,l&Nc&&R(u),l&wc&&R(f),l&Mf&&(ja.setFloat64(m,d),m+=8),l&Lf&&R(Mz[h]),i?g(i):Ds[m++]=0,l?ja.setUint32(n?8:0,_|l|3221225472):Ds[n?8:0]=_;let S=Ds.subarray(0,m);if(c)return Buffer.concat([S,c]);return S;function g(E){let T=m;m+=1,m=(0,vl.writeKey)(E,Ds,m);let O=m-T-1;O>127?O>16383?(Ld.error("Key or username was too large for audit entry",E),m=T+1,Ds[T]=0):(Ds.copyWithin(T+2,T+1,m),ja.setUint16(T,O|32768),m++):Ds[T]=O}function R(E){E<128?Ds[m++]=E:E<16384?(ja.setUint16(m,E|32768),m+=2):E<1056964608?(ja.setUint32(m,E|3221225472),m+=4):(Ds[m]=255,ja.setUint32(m+1,E),m+=5)}}function sSe(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 sl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Ct(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new sl(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,f=n.position+=l,d=n.readFloat64(),h,_,m,S;if(i&Nc&&(h=n.readInt()),i&wc&&(_=n.readInt()),i&Mf&&(m=n.readFloat64()),i&Lf){let T=n.readInt();S=Mz[T]}l=n.readInt();let g=n.position,R=n.position+=l,E;return{type:Lz[i&7],tableId:c,nodeId:o,get recordId(){return(0,vl.readKey)(e,u,f)},getBinaryRecordId(){return e.subarray(u,f)},version:d,previousLocalTime:s,get user(){return R>g?(0,vl.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(T,O,v){if(i&bT||i&om&&!O)return E||(E=Sc(()=>T.decoder.decode(e.subarray(n.position,r)),T.rootStore)),E;if(i&om&&v)return rb(T.getEntry(this.recordId),v,T)},getBinaryValue(){return i&(bT|om)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:h,previousResidencyId:_,expiresAt:m,originatingOperation:S}}catch(n){return Ld.error("Reading audit entry error",n,e),{}}}var vl,OT,BC,am,Cz,Ld,Ds,ja,Pz,dh,HC,eSe,GC,Dz,kC,Rz,bT,om,bz,FC,Oz,Nz,wz,Iz,Tp,nSe,sg,Nc,wc,Lf,Mf,mn,Lz,Mz,sl,so=be(()=>{vl=require("ordered-binary"),OT=M(ce()),BC=M(Ft());G();am=M(st()),Cz=M(oe());ru();Ld=M(X());sE();fs();jS();(0,OT.initSync)();Ds=Buffer.alloc(2816),ja=new DataView(Ds.buffer,Ds.byteOffset,2816),Pz={writeKey(e,t,r){return e===Df?(t.set(Df,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,vl.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,vl.readKey)(e,t,r)}},dh={encoding:"binary",keyEncoder:Pz},HC=(0,Cz.convertToMS)((0,OT.get)(B.LOGGING_AUDITRETENTION))||86400*3,eSe=1e3,GC=new Float64Array(1),Dz=new Uint8Array(GC.buffer),kC=1e4,Rz=!1;a(NT,"openAuditStore");a(wT,"removeAuditEntry");a(yz,"updateLastRemoved");a(tSe,"getLastRemoved");a(rSe,"setAuditRetention");bT=16,om=32,bz=1,FC=2,Oz=3,Nz=4,wz=5,Iz=6,Tp=14,nSe=15,sg=11,Nc=512,wc=1024,Lf=2048,Mf=4096,mn=8192,Lz={put:bz|bT,[bz]:"put",delete:FC,[FC]:"delete",message:Oz|bT,[Oz]:"message",invalidate:Nz|om,[Nz]:"invalidate",patch:wz|om,[wz]:"patch",relocate:Iz,[Iz]:"relocate"},Mz={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(bc,"createAuditEntry");a(sSe,"readAction");a(Ct,"readAuditEntry");sl=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 VC(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Uz,iSe(e.primaryStore,e.auditStore)):(c=vz,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{xz(vz[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=jl(t);let f=new $C(r);f.startTime=n;let d=u.get(t);return d?d.push(f):(u.set(t,d=[f]),d.tables=u,d.key=t),f.subscriptions=d,f}function xz(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),Bz(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Ct(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=jl(c),u=0;do{let f=o.get(l);if(f){for(let h of f)if(!(u>0&&!(h.includeDescendants&&!(h.onlyChildren&&u>1)))){if(h.startTime>=n){(0,qC.info)("omitting",c,h.startTime,n);continue}try{let _;h.supportsTransactions&&h.txnInProgress!==i.version&&(_=!0,h.txnInProgress||(r?r.push(h):r=[h]),h.txnInProgress=i.version),h.listener(c,i,n,_)}catch(_){console.error(_),(0,qC.info)(_)}}}if(l==null)break;let d=l.lastIndexOf?.("/",l.length-2);d!==l.length-1&&u++,d>-1?l=l.slice(0,d+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 iSe(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=Uz[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{xz(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function Bz(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function Kk(e){return e.nextTransaction||(VC({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),Bz(e)),e.nextTransaction}var qC,vz,Uz,$C,vO=be(()=>{qC=M(X());Kl();Jl();so();vz=Object.create(null),Uz=Object.create(null);a(VC,"addSubscription");$C=class extends vn{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(xz,"notifyFromTransactionData");a(iSe,"listenToCommits");a(Bz,"nextTransaction");a(Kk,"whenNextTransaction")});var qw={};Be(qw,{EVICTED:()=>ra,INVALIDATED:()=>fn,coerceType:()=>PT,makeTable:()=>LT,setServerUtilities:()=>_Se});function LT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:f,sealed:d,splitSegments:h,replicate:_}=e,{expirationMS:m,evictionMS:S,audit:g,trackDeletes:R}=e;S??=0;let{attributes:E}=e;E||(E=[]);let T=pR(i,n,l),O,v,F={},q=Promise.resolve(),Q,te,se;for(let K of E)(K.assignCreatedTime||K.name==="__createdtime__")&&(Q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(te=K),K.expiresAt&&(se=K),K.isPrimaryKey&&(F=K);let z,ne=[],le=[],ie=1,Re=2,me={},Ae={},xt=864e5,dt=0,Cn,nn,wr,Hd=!1,rc,KT=new Map,YT=new Map,Bt,kd,Fd=xl.get(B.REPLICATION_DATABASES);if(Array.isArray(Fd)){for(let K of Fd)if(K.name===c&&K.replicateTo>=0){kd=K.replicateTo;break}}let WT=i.getRange({start:!1,end:!1}).constructor,gm=10,Gd=6;g&&Sm(),Qh(i.env.path,K=>{if(v)return Wo(K)});class De extends qr{#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=g;static databasePath=o;static databaseName=c;static attributes=E;static replicate=_;static sealed=d;static splitSegments=h??!0;static createdTimeProperty=Q;static updatedTimeProperty=te;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return m}static dbisDB=f;static schemaDefined=u;static sourcedFrom(p,y){if(y&&(this.sourceOptions=y,(y.expiration||y.eviction||y.scanInterval)&&this.setTTLExpiration(y)),y?.intermediateSource)p.intermediateSource=!0,this.sources.unshift(p);else{if(this.sources.some(b=>!b.intermediateSource)){if(this.sources.some(b=>b.name===p.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(p)}v=v||p.get&&(!p.get.reliesOnPrototype||p.prototype.get),O=O||p.load;let L=a(b=>{let C=this.sources;if(C=C.filter(x=>x.intermediateSource&&x[b]&&(!x[b].reliesOnPrototype||x.prototype[b])),C.length>0)if(C.length===1){let x=C[0];return(w,H,U)=>{if(w?.source!==x)return x[b](H,U,w)}}else return(x,w,H)=>{let U=[];for(let j of C){if(x?.source===j)break;U.push(j[b](w,H,x))}return Promise.all(U)}},"getApplyToIntermediateSource"),I=this.sources[this.sources.length-1];I.intermediateSource&&(I={});let A=a(b=>{if(I[b]&&(!I[b].reliesOnPrototype||I.prototype[b]))return(C,x,w)=>{if(!C?.source)return I[b](x,w,C)}},"getApplyToCanonicalSource");me={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish")},Ae={put:L("put"),patch:L("patch"),delete:L("delete"),publish:L("publish"),invalidate:L("invalidate")};let N=I.shouldRevalidateEvents;return(async()=>{let b=!1,C,x=a(async(w,H)=>{let U=w.value,j=w.table?Ye[c][w.table]:De;if(c===zd&&(w.table===Fl.ROLE_TABLE_NAME||w.table===Fl.USER_TABLE_NAME)&&(b=!0),w.id===void 0&&(w.id=U[j.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));w.source=p;let J={residencyId:oc(w.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:w.nodeId},k=await j.getResource(w.id,H,J);switch(w.finished&&await w.finished,w.type){case"put":return N?k._writeInvalidate(U,J):k._writeUpdate(U,!0,J);case"patch":return N?k._writeInvalidate(U,J):k._writeUpdate(U,!1,J);case"delete":return k._writeDelete(J);case"publish":case"message":return k._writePublish(U,J);case"invalidate":return k._writeInvalidate(U,J);case"relocate":return k._writeRelocate(J);default:xe.default.error?.("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=p.subscribe;w&&R==null&&(R=!0);let H={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},U=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Ul.getWorkerIndex)(),H):(0,Ul.getWorkerIndex)()===0,j=w&&U&&await p.subscribe?.(H);if(j){let J;for await(let k of j)try{if(!(k.type==="transaction"?k.writes[0]:k)){xe.default.error?.("Bad subscription event",k);continue}if(k.source=p,k.type==="end_txn"){if(J?.resolve(),k.localTime&&C!==k.localTime){if(k.remoteNodeIds?.length>0){let ye=[Symbol.for("seq"),k.remoteNodeIds[0]],Y=f.get(ye),V=Y?.nodes;V||(V=[]);for(let _e of k.remoteNodeIds.slice(1)){let pe=V.find(Te=>Te.id===_e);V=V.filter(Te=>Te.id!==_e||Te===pe),pe||(pe={id:_e,seqId:0},V.push(pe)),pe.seqId=Math.max(Y?.seqId??1,k.localTime),_e===J?.nodeId&&(pe.lastTxnTime=k.timestamp)}let ue=Math.max(Y?.seqId??1,k.localTime);xe.default.trace?.("Received txn",c,ue,new Date(ue),k.localTime,new Date(k.localTime),k.remoteNodeIds),f.put(ye,{seqId:ue,nodes:V})}C=k.localTime}k.onCommit&&J?.committed.then(k.onCommit);continue}if(J)if(k.beginTxn)J.resolve();else{J.write_promises.push(x(k,J));continue}!k.timestamp&&k.version&&(k.timestamp=k.version);let de=It(k,()=>{if(k.type==="transaction"){let ye=[];for(let Y of k.writes)try{ye.push(x(Y,k))}catch(V){throw V.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(k),V}return Promise.all(ye)}else if(k.type==="define_schema"){let ye=this.attributes.slice(0),Y;for(let V of k.attributes)ye.find(ue=>ue.name===V.name)||(ye.push(V),Y=!0);Y&&(_t({table:s,database:c,attributes:ye,origin:"cluster"}),lm.signalSchemaChange(new um.SchemaEventMsg(process.pid,Yt.CREATE_TABLE,c,s)))}else return k.beginTxn?(J=k,J.write_promises=[x(k,k)],new Promise(ye=>{J.resolve=()=>ye(Promise.all(J.write_promises))})):x(k,k)});J&&(J.committed=de),b&&de&&!de?.waitingForUserChange&&(de.then(()=>lm.signalUserChange(new um.UserEventMsg(process.pid))),de.waitingForUserChange=!0),k.onCommit&&(de?de.then(k.onCommit):k.onCommit())}catch(Ce){xe.default.error?.("error in subscription handler",Ce)}}}catch(w){xe.default.error?.(w)}})(),this}static get isCaching(){return v}static get shouldRevalidateEvents(){return this.prototype.get!==De.prototype.get}static getResource(p,y,L){let I=super.getResource(p,y,L);if(p!=null){Ir(p);try{if(I.getRecord?.())return I;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let A=!L?.async||i.cache?.get?.(p),N=Cr(y),b=N.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Pn(p,y,{transaction:b,ensureLoaded:L?.ensureLoaded},A,C=>{if(C?De._updateResource(I,C):I.#e=null,y.onlyIfCached&&y.noCacheStore){if(!I.doesExist())throw new Nr.ServerError("Entry is not cached",504)}else if(L?.ensureLoaded){let x=sn(p,C,y,I);if(x)return N?.disregardReadTxn(),I.#i=!0,YC(x,w=>(De._updateResource(I,w),I))}return I})}catch(A){throw A.message.includes("Unable to serialize object")&&(A.message+=": "+JSON.stringify(p)),A}}return I}static _updateResource(p,y){p.#r=y,p.#e=y?.value??null,p.#n=y?.version}ensureLoaded(){let p=sn(this.getId(),this.#r,this.getContext());if(p)return this.#i=!0,YC(p,y=>{this.#r=y,this.#e=y.value,this.#n=y.version})}static getNewId(){let p=F?.type;if(p==="String"||p==="ID")return super.getNewId();if(!Bt){let A=i.getEntry(Symbol.for("id_allocation")),N=A?.value,b;if(N&&N.nodeName===server.hostname&&(!mSe(i)||N.pid===process.pid)){let C=N.start,x=N.end;b=C;for(let w of i.getKeys({start:x,end:C,limit:1,reverse:!0}))b=w}else N=I(A?.version??null),b=N.start;Bt=new BigInt64Array([BigInt(b)+1n]),Bt=new BigInt64Array(i.getUserSharedBuffer("id",Bt.buffer)),Bt.maxSafeId=N.end}let y=Number(Atomics.add(Bt,0,1n)),L=p==="Int"?512:1048576;if(y+L>=Bt.maxSafeId){let A=a(N=>{Bt.maxSafeId=y+(p==="Int"?1023:4194303);let b=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,C=N?void 0:i.useReadTransaction(),x=Number(Bt[0]);for(let U of i.getKeys({start:x+1,end:b,limit:1,transaction:C}))b=U;C?.done();let{value:w,version:H}=i.getEntry(Symbol.for("id_allocation"));if(Bt.maxSafeId<b){if(w.end>Bt.maxSafeId-100)return;xe.default.info?.("New id allocation",y,Bt.maxSafeId,H),i.put(Symbol.for("id_allocation"),{start:w.start,end:Bt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),H)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Bt.maxSafeId}, but id of ${b} detected`);let U=I(H);U.alreadyUpdated||Atomics.store(Bt,0,BigInt(U.start+1)),Bt.maxSafeId=U.end}},"updateEnd");y+L===Bt.maxSafeId?setImmediate(A):y+100>=Bt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${p=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>A(!0)))}return y;function I(A){let N=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,b=N/4,C,x,w=!1,H,U;do{H=Math.floor(Math.random()*N),U={start:H,end:H+(p==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},C=0;for(let j of i.getKeys({start:H,limit:1,reverse:!0}))C=j;x=N;for(let j of i.getKeys({start:H+1,end:N,limit:1}))x=j;b*=.875,b<1e3&&!w&&(w=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${p==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,H,C,x,b))}while(!(b<x-H&&(b<H-C||C===0)));return i.transactionSync(()=>{let j=i.getEntry(Symbol.for("id_allocation"));return(j?.version??null)==A?(xe.default.info?.("Allocated new id range",U),i.put(Symbol.for("id_allocation"),U,Date.now()),U):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...j.value})})}}static setTTLExpiration(p){if(typeof p=="number")m=p*1e3,S||(S=0);else if(p&&typeof p=="object")m=p.expiration*1e3,S=(p.eviction||0)*1e3,xt=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(m<0)throw new Error("Expiration can not be negative");xt=xt||(m+S)/4,Wo()}static getResidencyRecord(p){return f.get([Symbol.for("residency_by_id"),p])}static setResidency(p){De.getResidency=p&&((y,L)=>{try{return p(y,L)}catch(I){throw I.message+=` in residency function for table ${s}`,I}})}static setResidencyById(p){De.getResidencyById=p&&(y=>{try{return p(y)}catch(L){throw L.message+=` in residency function for table ${s}`,L}})}static getResidency(p,y){if(De.getResidencyById)return De.getResidencyById(p[t]);let L=kd;if(y.replicateTo!=null){if(Array.isArray(y.replicateTo))return y.replicateTo.includes(server.hostname)?y.replicateTo:[server.hostname,...y.replicateTo];y.replicateTo>=0&&(L=y.replicateTo)}if(L>=0&&server.nodes){let I=[server.hostname];if(y.previousResidency)I.push(...y.previousResidency.slice(0,L));else{let A=server.nodes.map(C=>C.name),N=Math.floor(A.length*Math.random());I.push(...A.slice(N,N+L));let b=N+L-A.length;b>0&&I.push(...A.slice(0,b))}return I}}static enableAuditing(p=!0){g=p,p&&Sm(),De.audit=p}static coerceId(p){return p===""?null:PT(p,F)}static async dropTable(){delete Ye[c][s];for(let p of i.getRange({versions:!0,snapshot:!1,lazy:!0}))p.metadataFlags&mn&&p.value&&ia(p.value);if(c===o){for(let p of E)f.remove(De.tableName+"/"+p.name),r[p.name]?.drop();f.remove(De.tableName+"/"),i.drop(),await f.committed}else console.log("legacy dropTable"),await i.close(),await CT.default.remove(data_path),await CT.default.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));lm.signalSchemaChange(new um.SchemaEventMsg(process.pid,Yt.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this.isCollection)return this.search(p);if(this.getId()===null){if(p?.conditions||p?.size>0)return this.search(p);let y={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:E};return this.getContext()?.includeExpensiveRecordCountEstimates?De.getRecordCount().then(L=>(y.recordCount=L.recordCount,y.estimatedRecordRange=L.estimatedRange,y)):y}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(p,y){let L=nc(p);if(L?.read){if(L.isSuperUser)return!0;let I=L.attribute_permissions,A=y?.select;if(I?.length>0||Hd&&A){if(y||(y={}),A){let N=I?.length>0&&KC(I,"read");y.select=A.map(b=>{let C=b.name||b;if(!N||N[C]){let x=wr[C]?.definition?.tableClass;if(x){if(b.name||(b={name:b}),!x.prototype.allowRead.call(null,p,b))return!1;if(!b.select)return b.name}return b}}).filter(Boolean)}else y.select=I.filter(N=>N.read&&!wr[N.attribute_name]).map(N=>N.attribute_name);return y}else return!0}}allowUpdate(p,y){let L=nc(p);if(L?.update){let I=L.attribute_permissions;if(I?.length>0){let A=KC(I,"update");for(let N in y)if(!A[N])return!1;for(let N of I){let b=N.attribute_name;!N.update&&!(b in y)&&(y[b]=this.getProperty(b))}}return Yo(this.getContext())}}allowCreate(p,y){if(this.isCollection){let L=nc(p);if(L?.insert){let I=L.attribute_permissions;if(I?.length>0){let A=KC(I,"insert");for(let N in y)if(!A[N])return!1;return Yo(this.getContext())}else return Yo(this.getContext())}}else return this.allowUpdate(p,{})}allowDelete(p){return nc(p)?.delete&&Yo(this.getContext())}update(p,y){if(!Cr(this.getContext()))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let I;return typeof p=="object"&&p&&(y?(Object.isFrozen(p)&&(p={...p}),this.#e={},this.#t=p):(I=this.#t,I&&(p=Object.assign(I,p)),this.#t=p)),this._writeUpdate(this.#t,y),this}addTo(p,y){if(typeof y=="number"||typeof y=="bigint")this.#s===kz?this.set(p,(+this.getProperty(p)||0)+y):(this.#s||this.update(),this.set(p,new aE(y)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,y){if(typeof y=="number")return this.addTo(p,-y);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(p){this.#t=p}setRecord(p){this.#e=p}invalidate(){this._writeInvalidate()}_writeInvalidate(p,y){let L=this.getContext(),I=this.getId();Ir(I),Cr(this.getContext()).addWrite({key:I,store:i,invalidated:!0,entry:this.#r,before:me.invalidate?.bind(this,L,I),beforeIntermediate:Ae.invalidate?.bind(this,L,I),commit:a((N,b)=>{if(!(Ko(N,b,y?.nodeId)<=0)){p??=null;for(let C in r)p||(p={}),p[C]===void 0&&(p[C]=this.getProperty(C));xe.default.trace?.(`Invalidating entry id: ${I}, timestamp: ${new Date(N).toISOString()}`),T(I,p,this.#r,N,fn,g,{user:L?.user,residencyId:y?.residencyId,nodeId:y?.nodeId},"invalidate")}},"commit")})}_writeRelocate(p){let y=this.getContext(),L=this.getId();Ir(L),Cr(this.getContext()).addWrite({key:L,store:i,invalidated:!0,entry:this.#r,before:me.relocate?.bind(this,y,L),beforeIntermediate:Ae.relocate?.bind(this,y,L),commit:a((A,N)=>{if(Ko(A,N,p?.nodeId)<=0)return;let b=De.getResidencyRecord(p.residencyId),C=0,x=null,w=N?.value;if(b&&!b.includes(server.hostname)){for(let H in r)x||(x={}),x[H]=w[H];C=fn}else x=w;xe.default.trace?.(`Relocating entry id: ${L}, timestamp: ${new Date(A).toISOString()}`),T(L,x,this.#r,A,C,g,{user:y.user,residencyId:p.residencyId,nodeId:p.nodeId,expiresAt:p.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(p,y){let L={previousResidency:this.getResidencyRecord(p.residencyId),isRelocation:!0},I=ic(this.getResidency(y.value,L)),A;if(I){if(!I.includes(server.hostname))return!1;A=oc(I)}let N=0;xe.default.debug?.("Performing a relocate of an entry",p.key,y.value,I);let b=T(p.key,y.value,p,p.version,N,!0,{residencyId:A,expiresAt:y.expiresAt},"relocate",!1,null);return!0}static evict(p,y,L){let I=this.Source,A;if(!((v||g)&&(!y||(A=i.getEntry(p),!A||!y)||A.version!==L))){if(v){if(i.hasLock(p,A.version))return;let N;for(let b in r)N||(N={}),N[b]=y[b];if(N)return T(p,N,A,L,ra,null,null,null,!0)}if(i.ifVersion(p,L,()=>{Wi(p,y,null)}),g)return T(p,null,A,L,ra,null,null,null,!0);Oc(i,A??i.getEntry(p),L)}}lock(){throw new Error("Not yet implemented")}static operation(p,y){return p.table||=s,p.schema||=c,Wz.operation(p,y)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,y,L){let I=this.getContext(),A=Cr(I),N=this.getId();Ir(N);let b=this.#r;this.#s=y?kz:uSe;let C={key:N,store:i,entry:b,nodeName:I?.nodeName,validate:a(x=>{p||(p=this.#t),y||p&&iE(this.#t===p?this:p)?I?.source||(A.checkOverloaded(),this.validate(p,!y),te&&(p[te.name]=te.type==="Date"?new Date(x):te.type==="String"?new Date(x).toISOString():x),y&&(t&&p[t]!==N&&(p[t]=N),Q&&(b?.value?p[Q.name]=b?.value[Q.name]:p[Q.name]=Q.type==="Date"?new Date(x):Q.type==="String"?new Date(x).toISOString():x),p=qc(p))):A.removeWrite(C)},"validate"),before:y?me.put?()=>me.put(I,N,p):null:me.patch?()=>me.patch(I,N,p):me.put?()=>me.put(I,N,qc(this)):null,beforeIntermediate:y?Ae.put?()=>Ae.put(I,N,p):null:Ae.patch?()=>Ae.patch(I,N,p):Ae.put?()=>Ae.put(I,N,qc(this)):null,commit:a((x,w,H)=>{if(H){if(I&&w?.version>(I.lastModified||0)&&(I.lastModified=w.version),this.#r=w,w?.value&&w.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");y||(this.#e=w?.value??null)}this.#t=void 0,this.#n=x;let U=w?.value,j=p;this.#s=0;let J=!1,k=Ko(x,w,L?.nodeId),Ce;if(k<=0)if(g){let ue=w.localTime,_e=w.version;xe.default.trace?.("Applying CRDT update to record with id: ",N,"applying later update:",_e);let pe=[];for(;ue>x||_e>=x&&ue>0;){let Te=l.get(ue);if(!Te)break;let Pe=Ct(Te);if(_e=Pe.version,_e>=x){if(_e===x){if(k=Ko(x,{version:_e,localTime:ue},L?.nodeId),k===0)return;if(k>0)continue}if(Pe.type==="patch")pe.push(Pe),Ce=p;else if(Pe.type==="put"||Pe.type==="delete")return}ue=Pe.previousLocalTime}pe.sort((Te,Pe)=>Te.version-Pe.version);for(let Te of pe){let Pe=Te.getValue(i);if(j=nE(j,Pe,y),xe.default.debug?.("Rebuilding update with future patch:",j),!j)return}}else{if(y)return;j=nE(j,U,y),xe.default.debug?.("Rebuilding update without audit:",j)}let de;if(y?de=j:(this.#e=U,de=qc(this,j)),this.#e=de,de&&de.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let ye;if(L?.residencyId!=null)ye=L.residencyId;else{b?.residencyId&&(I.previousResidency=De.getResidencyRecord(b.residencyId));let ue=ic(De.getResidency(de,I));if(ue&&!ue.includes(server.hostname))if(Ce??=de,J=!0,De.getResidencyById)de=void 0;else{de=null;for(let _e in r)de||(de={}),de[_e]=Ce[_e]}ye=oc(ue)}y||(Ce=p);let Y=I?.expiresAt??(m?m+Date.now():-1);xe.default.trace?.(`Saving record with id: ${N}, timestamp: ${new Date(x).toISOString()}${Y?", expires at: "+new Date(Y).toISOString():""}${w?", replaces entry from: "+new Date(w.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(de).slice(0,100)}catch{return""}})()),Wi(N,U,de);let V=y?"put":"patch";T(N,de,w,x,J?fn:0,g,{omitLocalRecord:J,user:I?.user,residencyId:ye,expiresAt:Y,nodeId:L?.nodeId,originatingOperation:I?.originatingOperation},V,!1,Ce),I.expiresAt&&Wo()},"commit")};A.addWrite(C)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this.isCollection){for await(let y of this.search(p))(await De.getResource(y[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this.#e?this._writeDelete(p):!1}_writeDelete(p){let y=Cr(this.getContext()),L=this.getId();Ir(L);let I=this.getContext();return y.addWrite({key:L,store:i,entry:this.#r,nodeName:I?.nodeName,before:me.delete?.bind(this,I,L),beforeIntermediate:Ae.delete?.bind(this,I,L),commit:a((A,N,b)=>{let C=N?.value;b&&(I&&N?.version>(I.lastModified||0)&&(I.lastModified=N.version),De._updateResource(this,N)),!(Ko(A,N,p?.nodeId)<=0)&&(Wi(this.getId(),C),xe.default.trace?.(`Deleting record with id: ${L}, txn timestamp: ${new Date(A).toISOString()}`),g||R?(T(L,null,this.#r,A,0,g,{user:I?.user,nodeId:p?.nodeId},"delete"),g||Wo()):Oc(i,N))},"commit")}),!0}search(p){let y=this.getContext(),L=Cr(y);if(!p)throw new Error("No query provided");let I=p.conditions;I?I.length===void 0&&(I=I[Symbol.iterator]?Array.from(I):[I]):I=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this.getId()&&(I=[{attribute:null,comparator:Array.isArray(this.getId())?"prefix":"starts_with",value:this.getId()}].concat(I));let A,N={};function b(V,ue){let _e;switch(ue){case"and":case void 0:if(V.length<1)throw new Error('An "and" operator requires at least one condition');_e=!0;break;case"or":if(V.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ue)}for(let pe of V){if(pe.conditions){pe.conditions=b(pe.conditions,pe.operator);continue}let Te=pe[0]??pe.attribute,Pe=Te==null?F:mi(E,Te);if(Pe)(Pe.type||LA[pe.comparator])&&(pe[1]===void 0?pe.value=x(pe.value,Pe):pe[1]=x(pe[1],Pe));else if(Te!=null)throw(0,Nr.handleHDBError)(new Error,`${Te} is not a defined attribute`,404);if(pe.chainedConditions)if(pe.chainedConditions.length===1&&(!pe.operator||pe.operator=="and")){let Ve=pe.chainedConditions[0],We,Ms;if(Ve.comparator==="gt"||Ve.comparator==="greater_than"||Ve.comparator==="ge"||Ve.comparator==="greater_than_equal"?(We=pe,Ms=Ve):(We=Ve,Ms=pe),We.comparator!=="lt"&&We.comparator!=="less_than"&&We.comparator!=="le"&&We.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let is=Ms.comparator==="ge"||Ms.comparator==="greater_than_equal",Tm=We.comparator==="le"||We.comparator==="less_than_equal";pe.comparator=(is?"ge":"gt")+(Tm?"le":"lt"),pe.value=[Ms.value,We.value]}else throw new Error("Multiple chained conditions are not currently supported")}return V}a(b,"prepareConditions");function C(V,ue){if(p.enforceExecutionOrder)return V;for(let _e of V)_e.conditions&&(_e.conditions=C(_e.conditions,_e.operator));return V.length>1&&ue!=="or"?(0,Kz.sortBy)(V,jm(De)):V}a(C,"orderConditions");function x(V,ue){return Array.isArray(V)?V.map(_e=>PT(_e,ue)):PT(V,ue)}a(x,"coerceTypedValues");let w=p.operator;(I.length>0||w)&&(I=b(I,w));let H=typeof p.sort=="object"&&p.sort,U;if(H&&w!=="or"){let V=H.attribute;if(V==null)throw new Nr.ClientError("Sort requires an attribute");if(A=I.find(ue=>Ql(ue.attribute)===Ql(V)),!A){let ue=mi(E,V);if(!ue)throw(0,Nr.handleHDBError)(new Error,`${Array.isArray(V)?V.join("."):V} is not a defined attribute`,404);if(ue.indexed)A={attribute:V,comparator:"sort"},I.push(A);else if(I.length===0&&!p.allowFullScan)throw(0,Nr.handleHDBError)(new Error,`${Array.isArray(V)?V.join("."):V} is not indexed and not combined with any other conditions`,404)}A&&(A.descending=!!H.descending)}I=C(I,w),H&&(A&&I[0]===A?H.next&&(U={dbOrderedAttribute:H.attribute,attribute:H.next.attribute,descending:H.next.descending,next:H.next.next}):(A&&I.splice(I.indexOf(A),1),U=H));let j=p.select;if(I.length===0&&(I=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:I,operator:w,postOrdering:U,selectApplied:!!j};let J=L.useReadTxn(),k=MA(I,w,De,J,p,y,(V,ue)=>$d(V,j,y,J,ue),N),Ce=p.ensureLoaded!==!1;U||(k=Y(k));let de=De.transformEntryForSelect(j,y,J,N,Ce,!0),ye=De.transformToOrderedSelect(k,j,U,J,y,de);function Y(V){return p.offset||p.limit!==void 0?V.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):V}return a(Y,"applyOffset"),U&&(ye=Y(ye)),ye.onDone=()=>{ye.onDone=null,L.doneReadTxn()},ye.selectApplied=!0,ye.getColumns=()=>{if(j){let V=[];for(let ue of j)ue==="*"?V.push(...E.map(_e=>_e.name)):V.push(ue.name||ue);return V}return E.filter(V=>!V.computed&&!V.relationship).map(V=>V.name)},ye}static transformToOrderedSelect(p,y,L,I,A,N){let b=new WT;if(L){p=$d(p,y,I,A,null);let C;b.iterate=function(){let w,H=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),U,j=L.dbOrderedAttribute,J,k,Ce=!0;function de(Y){let V=Y.next&&de(Y.next),ue=Y.descending;return(_e,pe)=>{let Te=sc(_e,Y.attribute,I),Pe=sc(pe,Y.attribute,I),Ve=ue?(0,Bl.compareKeys)(Pe,Te):(0,Bl.compareKeys)(Te,Pe);return Ve===0?V?.(_e,pe)||0:Ve}}a(de,"createComparator");let ye=de(L);return{async next(){let Y;if(w)if(Y=w.next(),Y.done){if(U)return b.onDone&&b.onDone(),Y}else return{value:await N.call(this,Y.value)};C=[],J&&C.push(J);do if(Y=await H.next(),Y.done){if(U=!0,C.length)break;return b.onDone&&b.onDone(),Y}else{let V=Y.value;if(V?.then&&(V=await V),j){let ue=sc(V,j,I);if(Ce)Ce=!1,k=ue;else if(ue!==k){k=ue,J=V;break}}C.push(V)}while(!0);return L.isGrouped,C.sort(ye),w=C[Symbol.iterator](),Y=w.next(),Y.done?(b.onDone&&b.onDone(),Y):{value:await N.call(this,Y.value)}},return(){b.onDone&&b.onDone(),H.return()},throw(){b.onDone&&b.onDone(),H.throw()}}};let x=a(w=>{if(typeof y=="object"&&Array.isArray(w.attribute))for(let H=0;H<y.length;H++){let U=y[H],j;if(U.name===w.attribute[0]){for(j=U.sort||(U.sort={});j.next;)j=j.next;j.attribute=w.attribute.slice(1),j.descending=w.descending}else U===w.attribute[0]&&(y[H]=j={name:U,sort:{attribute:w.attribute.slice(1),descending:w.descending}})}w.next&&x(w.next)},"applySortingOnSelect");x(L)}else b.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),b=b.map(function(C){try{let x=N.call(this,C);return typeof x?.catch=="function"?x.catch(w=>{throw w.partialObject={[t]:C.key},w}):x}catch(x){throw x.partialObject={[t]:C.key},x}});return b}static transformEntryForSelect(p,y,L,I,A,N){if(p&&(p===t||p?.length===1&&p[0]===t&&Array.isArray(p))){let w=a(H=>(y?.transaction?.stale&&(y.transaction.stale=!1),H?.key??H),"transform");return p===t?w:p.asArray?H=>[w(H)]:H=>({[t]:w(H)})}let b;A&&v&&!(typeof p=="string"?[p]:p)?.every(w=>{let H;return typeof w=="object"?H=w.name:H=w,r[H]||H===t})&&(b=!0);let C,x=a(function(w){let H;if(y?.transaction?.stale&&(y.transaction.stale=!1),w!=null){if(H=w.value||w.deref?.()?.value,!H&&(w.key===void 0||w.deref)||w.metadataFlags&fn){if(w.metadataFlags&fn&&y.replicateFrom===!1&&N&&w.residencyId)return Xa.SKIP;if(w=Pn(w.key??w,y,{transaction:L,lazy:p?.length<4,ensureLoaded:A},this?.isSync,U=>U),w?.then)return w.then(x.bind(this));H=w?.value}if(b&&w?.metadataFlags&(fn|ra)||w?.expiresAt!=null&&w?.expiresAt<Date.now()){if(y.onlyIfCached&&y.noCacheStore)return{[t]:w.key,message:"This entry has expired"};let U=sn(w.key??w,w,y);if(U?.then)return U.then(x)}}if(H==null)return N?Xa.SKIP:H;if(p&&!(p[0]==="*"&&p.length===1)){let U,j=a((k,Ce)=>{let de;typeof k=="object"?de=k.name:de=k;let ye=wr?.[de],Y;if(ye){let V=I?.[de];if(V)if(V.hasMappings){let _e=ye.from?H[ye.from]:Ql(w.key);Y=V.get(_e),Y||(Y=[])}else Y=V.fromRecord?.(H);else Y=ye(H,y,w);let ue=a(_e=>{if(_e&&typeof _e=="object"){let pe=ye.definition?.tableClass||De;C||(C={});let Te=C[de]||(C[de]=pe.transformEntryForSelect(de===k?null:k.select||(Array.isArray(k)?k:null),y,L,V,A));if(Array.isArray(_e)){let Pe=[],Ve=pe.transformToOrderedSelect(_e,k.select,typeof k.sort=="object"&&k.sort,y,L,Te)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),We=a(is=>{for(;!is.done;){if(is?.then)return is.then(We);Pe.push(is.value),is=Ve.next()}Ce(Pe,de)},"nextValue"),Ms=We(Ve.next());Ms&&(U||(U=[]),U.push(Ms));return}else if(_e=Te.call(this,_e),_e?.then){U||(U=[]),U.push(_e.then(Pe=>Ce(Pe,de)));return}}Ce(_e,de)},"handleResolvedValue");Y?.then?(U||(U=[]),U.push(Y.then(ue))):ue(Y);return}else Y=H[de],Y&&typeof Y=="object"&&de!==k&&(Y=De.transformEntryForSelect(k.select||k,y,L,null)({value:Y}));Ce(Y,de)},"selectAttribute"),J;if(typeof p=="string")j(p,k=>{J=k});else if(Array.isArray(p))if(p.asArray)J=[],p.forEach((k,Ce)=>{k==="*"?p[Ce]=H:j(k,de=>J[Ce]=de)});else{J={};let k=p.forceNulls;for(let Ce of p)if(Ce==="*")for(let de in H)J[de]=H[de];else j(Ce,(de,ye)=>{de===void 0&&k&&(de=null),J[ye]=de})}else throw new Nr.ClientError("Invalid select"+p);return U?Promise.all(U).then(()=>J):J}return H},"transform");return x}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||_t({table:s,database:c,schemaDefined:u,attributes:E,audit:!0}),p||(p={});let y=!p.rawEvents,L=[],I=this,A=VC(De,this.getId()??null,function(b,C,x,w){try{let H=C.getValue?.(i,y),U=C.type;if(!H&&U==="patch"&&y){let J=i.getEntry(b);J?.version===C.version?H=J.value:H=C.getValue?.(i,!0,x),U="put"}let j={id:b,localTime:x,value:H,version:C.version,type:U,beginTxn:w};L?L.push(j):this.send(j)}catch(H){xe.default.error?.(H)}},p.startTime||0,p),N=(async()=>{this.isCollection&&(A.includeDescendants=!0,p.onlyChildren&&(A.onlyChildren=!0)),p.supportsTransactions&&(A.supportsTransactions=!0);let b=this.getId(),C=p.previousCount;C>1e3&&(C=1e3);let x=p.startTime;if(this.isCollection){if(x){if(C)throw new Nr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:w,value:H}of l.getRange({start:x,exclusiveStart:!0,snapshot:!1})){let U=Ct(H);if(U.tableId!==n)continue;let j=U.recordId;if(b==null||$z(b,j)){let J=U.getValue(i,y,w);if(A.send({id:j,localTime:w,value:J,version:U.version,type:U.type}),A.queue?.length>Gz&&await A.waitForDrain()===!1)return}A.startTime=w}}else if(C){let w=[];for(let{key:H,value:U}of l.getRange({start:"z",end:!1,reverse:!0}))try{let j=Ct(U);if(j.tableId!==n)continue;let J=j.recordId;if(b==null||$z(b,J)){let k=j.getValue(i,y,H);if(w.push({id:J,localTime:H,value:k,version:j.version,type:j.type}),--C<=0)break}}catch(j){xe.default.error("Error getting history entry",H,j)}for(let H=w.length;H>0;)A.send(w[--H]);w[0]&&(A.startTime=w[0].localTime)}else if(!p.omitCurrent){for(let{key:w,value:H,version:U,localTime:j}of i.getRange({start:b??!1,end:b==null?void 0:[b,Bl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(H&&(A.send({id:w,localTime:j,value:H,version:U,type:"put"}),A.queue?.length>Gz&&await A.waitForDrain()===!1))return}}else{C&&!x&&(x=0);let w=this.#r?.localTime;if(w===mR&&(i.cache?.delete(b),this.#r=i.getEntry(b),xe.default.trace?.("re-retrieved record",w,this.#r?.localTime),w=this.#r?.localTime),xe.default.trace?.("Subscription from",x,"from",b,w),x<w){let H=[],U=w;do{let j=l.get(U);if(j){p.omitCurrent=!0;let J=Ct(j),k=J.getValue(i,y,U);y&&(J.type="put"),H.push({id:b,value:k,localTime:U,...J}),U=J.previousLocalTime}else break;C&&C--}while(U>x&&C!==0);for(let j=H.length;j>0;)A.send(H[--j]);A.startTime=w}!p.omitCurrent&&this.doesExist()&&A.send({id:b,localTime:w,value:this.#e,version:this.#n,type:"put"})}for(let w of L)A.send(w);L=null})();return p.listener&&A.on("data",p.listener),A}static subscribeOnThisThread(p,y){return p===0||y?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(p,y){this._writePublish(p,y)}_writePublish(p,y){let L=Cr(this.getContext()),I=this.getId()||null;I!=null&&Ir(I);let A=this.getContext();L.addWrite({key:I,store:i,entry:this.#r,nodeName:A?.nodeName,validate:a(()=>{A?.source||(L.checkOverloaded(),this.validate(p))},"validate"),before:me.publish?.bind(this,A,I,p),beforeIntermediate:Ae.publish?.bind(this,A,I,p),commit:a((N,b,C)=>{b===void 0&&R&&!g&&Wo(),xe.default.trace?.(`Publishing message to id: ${I}, timestamp: ${new Date(N).toISOString()}`),T(I,b?.value??null,b,b?.version||N,0,!0,{user:A?.user,residencyId:y?.residencyId,expiresAt:A?.expiresAt,nodeId:y?.nodeId},"message",!1,p)},"commit")})}validate(p,y){let L,I=a((A,N,b)=>{if(N.type&&A!=null)if(y&&A.__op__&&(A=A.value),N.properties){typeof A!="object"&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be an object${N.type?" ("+N.type+")":""}`);let C=N.properties;for(let x=0,w=C.length;x<w;x++){let H=C[x],U=I(A[H.name],H,b+"."+H.name);U&&(A[H.name]=U)}if(N.sealed&&A!=null&&typeof A=="object")for(let x in A)C.find(w=>w.name===x)||(L||(L=[])).push(`Property ${x} is not allowed within object in property ${b}`)}else switch(N.type){case"Int":(typeof A!="number"||A>>0!==A)&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(C=>typeof C=="string")||(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a string`);break;case"Boolean":typeof A!="boolean"&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a Date`)}break;case"BigInt":if(typeof A!="bigint"){if(typeof A=="string"||typeof A=="number")return BigInt(A);(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a bigint`)}break;case"Bytes":if(!(A instanceof Uint8Array)){if(typeof A=="string")return Buffer.from(A);(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(A instanceof gi)){if(typeof A=="string"&&(A=Buffer.from(A)),A instanceof Buffer)return createBlob(A,{type:"text/plain"});(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a Blob`)}break;case"array":if(Array.isArray(A)){if(N.elements)for(let C=0,x=A.length;C<x;C++){let w=A[C],H=I(w,N.elements,b+"[*]");H&&(A[C]=H)}}else(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be an Array`);break}N.nullable===!1&&A==null&&(L||(L=[])).push(`Property ${b} is required (and not does not allow null values)`)},"validateValue");for(let A=0,N=E.length;A<N;A++){let b=E[A];if(!(b.relationship||b.computed)&&(!y||b.name in p)){let C=I(p[b.name],b,b.name);C&&(p[b.name]=C)}}if(d)for(let A in p)E.find(N=>N.name===A)||(L||(L=[])).push(`Property ${A} is not allowed`);if(L)throw new Nr.ClientError(L.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return v?!!this.#i:void 0}static async addAttributes(p){let y=E.slice(0);for(let L of p){if(!L.name)throw new Nr.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new Nr.ClientError("Attribute names cannot include backticks or forward slashes");(0,Yz.validateAttribute)(L.name),y.push(L)}return _t({table:s,database:c,schemaDefined:u,attributes:y}),De.indexingOperation}static async removeAttributes(p){let y=E.filter(L=>!p.includes(L.name));return _t({table:s,database:c,schemaDefined:u,attributes:y}),De.indexingOperation}static getSize(){let p=i.getStats();return(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getAuditSize(){let p=l?.getStats();return p&&(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getStorageStats(){let p=i.env.path,y=CT.default.statfsSync?.(p)??{};return{available:y.bavail*y.bsize,free:y.bfree*y.bsize,size:y.blocks*y.bsize}}static async getRecordCount(p){let y=i.getStats().entryCount,L=1e3/2,I=performance.now(),A=Math.floor(y/2),N=p?.exactCount,b=0,C=0,x;for(let{value:w}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(w!=null&&b++,C++,await Ja(),!N&&C<A&&performance.now()-I>L){x=C;break}if(x){let w=b;b=0;for(let{value:Y}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:x,snapshot:!1}))Y!=null&&b++,await Ja();let H=x*2,U=(b+w)/H,j=Math.pow((b-w+1)/x/2,2)+U*(1-U)/H,J=Math.max(Math.sqrt(j)*y,1),k=Math.round(U*y),Ce=Math.max(k-1.96*J,b+w),de=Math.min(k+1.96*J,y),ye=Math.pow(10,Math.round(Math.log10(J)));return ye>k&&(ye=ye/10),b=Math.round(k/ye)*ye,{recordCount:b,estimatedRange:[Math.round(Ce),Math.round(de)]}}return{recordCount:b}}static updatedAttributes(){wr=this.propertyResolvers={$id:a((p,y,L)=>({value:L.key}),"$id"),$updatedtime:a((p,y,L)=>L.version,"$updatedtime"),$record:a((p,y,L)=>L?{value:p}:p,"$record")};for(let p of this.attributes){p.isPrimaryKey&&(F=p),p.resolve=null;let y=p.relationship,L=p.computed;if(y)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),L&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Hd=!0,y.to)p.elements?.definition?(wr[p.name]=p.resolve=(I,A,N)=>{let b=I[y.from?y.from:t],C=p.elements.definition.tableClass;return N?zl({attribute:y.to,value:b},Cr(A).getReadTxn(),!1,C,!1).asArray:C.search([{attribute:y.to,value:b}],A).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,y.from&&(p.resolve.from=y.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(y.from){let I=p.definition||p.elements?.definition;I?(wr[p.name]=p.resolve=(A,N,b)=>{let C=A[y.from];if(C!==void 0){if(p.elements){let x,w=C?.map(H=>{let U=b?I.tableClass.primaryStore.getEntry(H,{transaction:Cr(N).getReadTxn()}):I.tableClass.get(H,N);return U?.then&&(x=!0),U});return y.filterMissing?x?Promise.all(w).then(H=>H.filter(Vz)):w.filter(Vz):x?Promise.all(w):w}return b?I.tableClass.primaryStore.getEntry(C,{transaction:Cr(N).getReadTxn()}):I.tableClass.get(C,N)}},p.set=(A,N)=>{if(Array.isArray(N)){let b=N.map(C=>C.getId?.()||C[I.tableClass.primaryKey]);A[y.from]=b}else{let b=N.getId?.()||N[I.tableClass.primaryKey];A[y.from]=b}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=y.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`);else L&&(typeof L.from=="function"&&this.setComputedAttribute(p.name,L.from),wr[p.name]=p.resolve=(I,A,N)=>{let b=typeof L.from=="string"?I[L.from]:I,C=this.userResolvers[p.name];if(C)return C(b,A,N);xe.default.warn(`Computed attribute "${p.name}" does not have a function assigned to it. Please use setComputedAttribute('${p.name}', resolver) to assign a resolver function.`),this.userResolvers[p.name]=()=>{}})}cE(this,this)}static setComputedAttribute(p,y){let L=mi(E,p);if(!L){console.error(`The attribute "${p}" does not exist in the table "${s}"`);return}if(!L.computed){console.error(`The attribute "${p}" is not defined as computed in the table "${s}"`);return}this.userResolvers[p]=y}static async deleteHistory(p=0,y=!1){let L;for(let{key:I,value:A}of l.getRange({start:0,end:p}))await Ja(),Ct(A).tableId===n&&(L=wT(l,I,A));if(y)for(let I of i.getRange({start:0,versions:!0})){let{key:A,value:N,localTime:b}=I;await Ja(),N===null&&b<p&&(L=Oc(i,I))}await L}static async*getHistory(p=0,y=1/0){for(let{key:L,value:I}of l.getRange({start:p||1,end:y})){await Ja();let A=Ct(I);A.tableId===n&&(yield{id:A.recordId,localTime:L,version:A.version,type:A.type,value:A.getValue(i,!0,L),user:A.user,operation:A.originatingOperation})}}static async getHistoryOfRecord(p){let y=[];if(p==null)throw new Error("An id is required");let L=i.getEntry(p);if(!L)return y;let I=L.localTime;if(!I)throw new Error("The entry does not have a local audit time");let A=0;do{await Ja();let N=l.get(I);if(N){let b=Ct(N);y.push({id:b.recordId,localTime:I,version:b.version,type:b.type,value:b.getValue(i,!0,I),user:b.user}),I=b.previousLocalTime}else break}while(A<1e3&&I);return y.reverse()}static cleanup(){z?.remove()}}De.updatedAttributes();let qd=De.prototype;return m&&De.setTTLExpiration(m/1e3),se&&Kd(),De;function Wi(K,p,y){let L;for(let I in r){let A=r[I],N=A.isIndexing,b=wr[I],C=y&&(b?b(y):y[I]),x=p&&(b?b(p):p[I]);if(C===x&&!N)continue;L=!0;let w=A.indexNulls,H=(0,cm.getIndexedValues)(C,w),U=(0,cm.getIndexedValues)(x,w);if(U?.length>0){let j=new Set(U);if(H=H?H.filter(J=>{if(j.has(J))j.delete(J);else return!0}):[],U=Array.from(j),(U.length>0||H.length>0)&&Hz){let J=U.concat(H).map(k=>({key:k,value:K}));A.prefetch(J,qz)}for(let J=0,k=U.length;J<k;J++)A.remove(U[J],K)}else H?.length>0&&Hz&&A.prefetch(H.map(j=>({key:j,value:K})),qz);if(H)for(let j=0,J=H.length;j<J;j++)A.put(H[j],K)}return L}a(Wi,"updateIndices");function Ir(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Fz)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,Bl.writeKey)(K,dSe,0)>Fz)throw new Error("Primary key size is too large: "+K.length);return!0}a(Ir,"checkValidId");function Pn(K,p,y,L,I){if(De.getResidencyById&&y.ensureLoaded&&p?.replicateFrom!==!1){let N=ic(De.getResidencyById(K));if(N&&!N.includes(server.hostname)&&O)return O({key:K,residency:N}).then(I)}let A=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),y.transaction?.isDone)return I(null,K);let N=i.getEntry(K,y);return N?.residencyId&&N.metadataFlags&fn&&O&&y.ensureLoaded&&p?.replicateFrom!==!1?O(N).then(b=>I(b,K),b=>(xe.default.error?.("Error loading remote record",K,N,y,b),I(null,K))):(N&&p&&(N?.version>(p.lastModified||0)&&(p.lastModified=N.version),N?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=N.localTime)),I(N,K))},"whenPrefetched");return L?A():ie>0?(ie--,A()):new Promise((N,b)=>{ie===0?(ie--,i.prefetch([K],()=>{C(),x()})):(ne.push(K),le.push(x),ne.length>Gd&&(ie--,C()));function C(){if(ne.length>0){let w=le;i.prefetch(ne,()=>{ie===-1?C():ie++;for(let H of w)H()}),ne=[],le=[],Re>2&&Re--}else ie=Re,Re<gm&&Re++}a(C,"prefetch");function x(){try{N(A())}catch(w){b(w)}}a(x,"load")})}a(Pn,"loadLocalRecord");function nc(K){if(!K?.role)return;let p=K.role.permission;if(p.super_user)return fSe;let y=p[c],L,I=y?.tables;if(I)return I[s];if(c==="data"&&(L=p[s])&&!L.tables)return L}a(nc,"getTablePermissions");function sn(K,p,y,L){if(v){let I=!1;if(y.noCache?I=!0:(p?(!p.value||p.metadataFlags&(fn|ra)||p.expiresAt!=null&&p.expiresAt<Date.now())&&(I=!0):I=!0,Yn(!I,"cache-hit",s)),I){let A=Vd(K,p,y).then(N=>(N?.value&&N?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),y&&(N?.version>(y.lastModified||0)&&(y.lastModified=N.version),y.lastRefreshed=Date.now()),N));if(y?.onlyIfCached||p?.value&&L?.allowStaleWhileRevalidate?.(p,K)){if(A.catch(N=>xe.default.warn?.(N)),y?.onlyIfCached&&!L.doesExist())throw new Nr.ServerError("Entry is not cached",504);return}else return A}}else if(p?.value&&p.expiresAt!=null&&p.expiresAt<Date.now())return De.evict(p.key,p.value,p.version),p.value=null,{then(I){return I(p)}}}a(sn,"ensureLoadedFromSource");function Cr(K){let p=K?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let y=p.next;if(!y)return p=p.next=new _c,p.lmdbDb=i,p;p=y}while(!0)}else return new Wm}a(Cr,"txnForContext");function sc(K,p,y){if(!K)return;let L=K.value||i.getEntry(K.key)?.value;if(typeof p=="object"){let A=wr,N=L;for(let b=0,C=p.length;b<C;b++){let x=p[b],w=A?.[x];N=w&&N?w(N,y,!0)?.value:N?.[x],A=w?.definition?.tableClass?.propertyResolvers}return N}let I=wr[p];return I?I(L,y):L[p]}a(sc,"getAttributeValue");function $d(K,p,y,L,I){let A=I?.length,N={transaction:L,lazy:A>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},b;function C(x,w){let H=x?.value;if(!H)return Xa.SKIP;for(let U=0;U<A;U++)if(!b?.includes(U)&&!I[U](H,x))return Xa.SKIP;return w!==void 0&&(x.key=w),x}if(a(C,"processEntry"),A>0||!K.hasEntries){let x=K.map(w=>{if(b=null,typeof w=="object"&&w?.key!==void 0)return A>0?C(w):w;if(w==null)return Xa.SKIP;for(let H=0;H<A;H++){let j=I[H].idFilter;if(j){if(!j(w))return Xa.SKIP;b||(b=[]),b.push(H)}}return Pn(w,y,N,!1,C)});return Array.isArray(K)&&(x=x.filter(w=>w!==Xa.SKIP)),x.hasEntries=!0,x}return K}a($d,"transformToEntries");function Ko(K,p,y=server.replication?.getThisNodeId(l)){if(K<=p?.version){if(p?.version===K&&y!==void 0){let L=server.replication?.exportIdMapping(l),I=p.localTime,A=I&&l.get(I);if(A){let N,b,C=Ct(A);for(let x in L)L[x]===y&&(N=x),L[x]===C.nodeId&&(b=x);if(N>b)return 1;if(N===b)return 0}}return-1}return 1}a(Ko,"precedesExistingVersion");async function Vd(K,p,y){let L=p?.metadataFlags,I=p?.version,A,N;if(!i.attemptLock(K,I,()=>{clearTimeout(N);let w=i.getEntry(K);!w||!w.value||w.metadataFlags&(fn|ra)?A(Vd(K,i.getEntry(K),y)):A(w)}))return new Promise(w=>{A=w,N=setTimeout(()=>{i.unlock(K,I)},lSe)});let b=p?.value,C={requestContext:y,replacingRecord:b,replacingEntry:p,replacingVersion:I,noCacheStore:!1,source:null,resourceCache:y?.resourceCache},x=y?.responseHeaders;return new Promise((w,H)=>{let U;YC(It(C,async j=>{let J=performance.now(),k,Ce,de;try{for(let ue of De.sources)if(ue.get&&(!ue.get.reliesOnPrototype||ue.prototype.get)){if(ue.available?.(p)===!1)continue;if(C.source=ue,k=await ue.get(K,C),k)break}de=L&fn;let Y=C.lastModified||de&&I;Ce=de||Y>I||!b,Y||(Y=(0,cm.getNextMonotonicTime)());let V=performance.now()-J;if(Dt(V,"cache-resolution",s,null,"success"),x&&AE(x,"Server-Timing",`cache-resolve;dur=${V.toFixed(2)}`,!0),j.timestamp=Y,m&&C.expiresAt==null&&(C.expiresAt=Date.now()+m),k){if(typeof k!="object")throw new Error("Only objects can be cached and stored in tables");if(k.status>0&&k.headers)if(k.status>=300)if(k.status===304)k=b,Y=I;else throw new Nr.ServerError(k.body||"Error from source",k.status);else k=k.body;typeof k.toJSON=="function"&&(k=k.toJSON()),t&&k[t]!==K&&(k[t]=K)}U=!0,w({key:K,version:Y,value:k})}catch(Y){Y.message+=` while resolving record ${K} for ${s}`,b&&((Y.code==="ECONNRESET"||Y.code==="ECONNREFUSED"||Y.code==="EAI_AGAIN")&&!y?.mustRevalidate||y?.staleIfError&&(Y.statusCode===500||Y.statusCode===502||Y.statusCode===503||Y.statusCode===504))?(w({key:K,version:I,value:b}),xe.default.trace?.(Y.message,"(returned stale record)")):H(Y);let V=performance.now()-J;Dt(V,"cache-resolution",s,null,"fail"),x&&AE(x,"Server-Timing",`cache-resolve;dur=${V.toFixed(2)}`,!0),C.transaction.abort();return}if(y?.noCacheStore||C.noCacheStore){C.transaction.abort();return}Cr(C).addWrite({key:K,store:i,entry:p,nodeName:"source",commit:a((Y,V)=>{if(V?.version!==I)return;let ue=Wi(K,b,k);if(k){Ae.put?.(C,K,k),V&&(y.previousResidency=De.getResidencyRecord(V.residencyId));let _e,pe=!1,Te,Pe=ic(De.getResidency(k,y));if(Pe){if(!Pe.includes(server.hostname))if(_e=k,pe=!0,De.getResidencyById)k=void 0;else{k=null;for(let Ve in r)k||(k={}),k[Ve]=_e[Ve]}Te=oc(Pe)}xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(Y).toISOString()}`),T(K,k,V,Y,pe?fn:0,g&&(Ce||pe)||null,{user:C?.user,expiresAt:C.expiresAt,residencyId:Te},"put",!!de,_e)}else V&&(Ae.delete?.(C,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(Y).toISOString()}`),g||R?T(K,null,V,Y,0,g&&Ce||null,{user:C?.user},"delete",!!de):Oc(i,V,I))},"commit")})}),()=>{i.unlock(K,I)},j=>{i.unlock(K,I),U&&xe.default.error?.("Error committing cache update",j)})})}a(Vd,"getFromSource");function Yo(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new Nr.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new Nr.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Yo,"checkContextPermissions");function Wo(K){let p=!1;if(K&&(K-dt>1&&(p=!0),dt=K),!(xt===Cn&&!p)&&(Cn=xt,(0,Ul.getWorkerIndex)()===(0,Ul.getWorkerCount)()-1))return nn&&clearTimeout(nn),xt?new Promise(y=>{let L=new Date;L.setMonth(0),L.setDate(1),L.setHours(0),L.setMinutes(0),L.setSeconds(0);let I=xt/(1+dt),A=p?Date.now():Math.ceil((Date.now()-L.getTime())/I)*I+L.getTime(),N=a(b=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(b)}`),nn=setTimeout(()=>q=q.then(async()=>{if(N(Math.max(b+xt,Date.now())),i.rootStore.status!=="open"){clearTimeout(nn);return}let C=50,x=new Array(C),w=0,H=Math.pow(dt,8)*(xl.get(B.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),U=S/Math.pow(Math.max(dt,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${H}, adjusted eviction ${U}ms`);function j(J,k,Ce,de){let ye=J+U-Date.now();if(ye<0)return!0;if(dt){let Y=i.lastSize;return Ce&mn&&Zl(de,V=>{V.size&&(Y+=V.size)}),xe.default.trace?.(`shouldEvict adjusted ${ye} ${Y}, ${ye*(J-k)/Y} < ${H}`),ye*(J-k)/Y<H}return!1}a(j,"shouldEvict");try{let J=0;for(let k of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ce,value:de,version:ye,expiresAt:Y,metadataFlags:V}=k,ue;de===null&&!g&&ye+cSe<Date.now()?ue=Oc(i,k,ye):Y!=null&&j(Y,ye,V,de)&&(ue=De.evict(Ce,de,ye),J++),ue&&(await x[w],x[w]=ue.catch(_e=>{xe.default.error?.("Cleanup error",_e)}),++w>=C&&(w=0)),await Ja()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${J} entries`)}catch(J){xe.default.warn?.(`Error in cleanup scan for ${s}:`,J)}y(void 0),dt=0}),Math.min(b-Date.now(),2147483647)).unref()},"startNextTimer");N(A)}):void 0}a(Wo,"scheduleCleanup");function Sm(){z=l?.addDeleteRemovalCallback(n,i,(K,p)=>{i.remove(K,p)})}a(Sm,"addDeleteRemoval");function Kd(){(0,Ul.getWorkerIndex)()===0&&setInterval(async()=>{if(!rc){rc=!0;try{let K=se.name,p=r[K];if(!p)throw new Error(`expiresAt attribute ${se} must be indexed`);for(let y of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let L of p.getValues(y)){let I=i.getEntry(L);I?.value?I.value[K]<Date.now()&&De.evict(L,I.value,I.version):i.ifVersion(L,I?.version,()=>p.remove(y,L))}await Ja()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{rc=!1}}},aSe).unref()}a(Kd,"runRecordExpirationEviction");function ic(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 p=server.shards?.get?.(K);if(p)return xe.default.trace?.(`Shard ${K} mapped to ${p.map(y=>y.name).join(", ")}`),p.map(y=>y.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(ic,"residencyFromFunction");function oc(K){if(K){let p=K.join(","),y=f.get([Symbol.for("residency_by_set"),p]);return y||(f.put([Symbol.for("residency_by_set"),p],y=Math.floor(Math.random()*2147418112)+65535),f.put([Symbol.for("residency_by_id"),y],K),y)}}a(oc,"getResidencyId")}function KC(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 qz(){}function _Se(e){Wz=e}function PT(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 IT(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return IT(+e);case"Float":return e==="null"?null:IT(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;hSe.test(e)||(e+="Z");let n=new Date(e);return IT(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,DT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function IT(e){if(isNaN(e))throw new SyntaxError;return e}function $z(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 YC(e,t,r){return e?.then?e.then(t,r):t(e)}function Vz(e){return e!=null}function Ls(e){try{return JSON.stringify(e)}catch{return e}}function mSe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Xa,cm,Kz,Yz,xl,Nr,lm,um,xe,Bl,Ul,DT,CT,oSe,Wz,aSe,cSe,Hz,lSe,kz,uSe,fn,ra,dSe,Fz,Gz,fSe,mve,hSe,Ja,Ef=be(()=>{G();Xa=require("lmdb"),cm=M(ln()),Kz=require("lodash"),Yz=M(df());na();zm();xl=M(ce());vO();Nr=M(he()),lm=M(_o()),um=M(Ks());Ue();pf();xe=M(pi());ib();hc();Bl=require("ordered-binary"),Ul=M(st());so();DT=M(oe());ru();Ci();sE();R_();CT=M(require("node:fs"));fs();jS();oSe=new Uint8Array(9);oSe[8]=192;aSe=6e4,cSe=864e5;xl.initSync();Hz=xl.get(B.STORAGE_PREFETCHWRITES),lSe=1e4,kz=1,uSe=2,fn=1,ra=8,dSe=Buffer.allocUnsafeSlow(8192),Fz=1978,Gz=100,fSe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},mve=(0,DT.convertToMS)(xl.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(LT,"makeTable");a(KC,"attributesAsObject");a(qz,"noop");a(_Se,"setServerUtilities");hSe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(PT,"coerceType");a(IT,"rejectNaN");a($z,"isDescendantId");Ja=a(()=>new Promise(setImmediate),"rest");a(YC,"when");a(Vz,"exists");a(Ls,"stringify");a(mSe,"hasOtherProcesses")});var at={};Be(at,{database:()=>mu,database_envs:()=>Fo,databases:()=>Ye,dropDatabase:()=>ub,dropTableMeta:()=>TSe,getDatabases:()=>Ze,getDefaultCompression:()=>Kg,getTables:()=>pSe,onRemovedDB:()=>K_,onUpdatedTable:()=>il,readMetaDb:()=>dm,resetDatabases:()=>ed,table:()=>_t,tables:()=>Kn});function pSe(){return xT||Ze(),Kn||{}}function Ze(){if(xT)return Ye;xT=!0,Ud=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,vt.join)((0,Zt.getHdbBasePath)(),cc),t=(0,Zt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(B.STORAGE_PATH)||e&&((0,rs.existsSync)(e)?e:(0,vt.join)((0,Zt.getHdbBasePath)(),Nm)),!e)return;if((0,rs.existsSync)(e))for(let n of(0,rs.readdirSync)(e,{withFileTypes:!0})){let s=(0,vt.basename)(n.name,".mdb");n.isFile()&&(0,vt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&dm((0,vt.join)(e,n.name),null,s)}if((0,rs.existsSync)((0,vd.getBaseSchemaPath)())){for(let n of(0,rs.readdirSync)((0,vd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,vt.join)((0,vd.getBaseSchemaPath)(),n.name),i=(0,vt.join)((0,vd.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,rs.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,vt.extname)(o.name).toLowerCase()===".mdb"){let c=(0,vt.join)(i,o.name);dm((0,vt.join)(s,o.name),(0,vt.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,rs.existsSync)(i))for(let c of(0,rs.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,vt.extname)(c.name).toLowerCase()===".mdb"&&dm((0,vt.join)(i,c.name),(0,vt.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,vt.join)(l.path,(0,vt.basename)(c+".mdb"));(0,rs.existsSync)(u)&&dm(u,c,n,null,!0)}}for(let n in Ye){let s=Ud.get(n);if(s){let i=Ye[n];n.includes("delete")&&Ut.trace(`defined tables ${Array.from(s.keys())}`);for(let o in i)s.has(o)||(Ut.trace(`delete table class ${o}`),delete i[o])}else if(delete Ye[n],n==="data"){for(let i in Kn)delete Kn[i];delete Kn[BT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if(Ye.system)for(let n of r)Ye.system[n]&&(Ye.system[n].replicate=!1);return Ud=null,Ye}function ed(){xT=!1;for(let[,e]of Fo)e.needsDeletion=!0;Ze();for(let[e,t]of Fo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Fo.delete(e),delete Ye[t.databaseName],_m.forEach(r=>r(t.databaseName)));return Ye}function dm(e,t,r=QC,n,s){let i=new WC.default(e,!1);try{let o=Fo.get(e);o?o.needsDeletion=!1:(o=(0,xd.open)(i),Fo.set(e,o));let c=new Hl.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(MT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,rs.existsSync)(n)&&(i.path=n,u=(0,xd.open)(i),u.isLegacy=!0):u=NT(o));let f=Jz(r),d=f[BT],h=new Map;for(let{key:_,value:m}of l.getRange({start:!1})){let[S,g]=_.toString().split("/");g===""?g=m.name:g||(g=S,S=t,m.name||(m.name=g,m.indexed=!m.is_hash_attribute)),d?.add(S);let R=h.get(S);R||h.set(S,R={attributes:[]}),(g==null||m.is_hash_attribute)&&(R.primary=m),g!=null&&R.attributes.push(m),Object.defineProperty(m,"key",{value:_,configurable:!0})}for(let[_,m]of h){let{attributes:S,primary:g}=m;if(!g){for(let ie of S)if(ie.is_hash_attribute||ie.isPrimaryKey){g=ie;break}if(!g){Ut.warn(`Unable to find a primary key attribute on table ${_}, with attributes: ${JSON.stringify(S)}`);continue}}let R=f[_],E={},T=[],O,v,F=typeof g.audit=="boolean"?g.audit:(0,Zt.get)(B.LOGGING_AUDITLOG),q=g.trackDeletes,Q=g.expiration,te=g.eviction,se=g.sealed,z=g.splitSegments,ne=g.replicate;if(R)E=R.indices,T=R.attributes,R.schemaVersion++;else{O=g.tableId,O?O>=(l.get(Md)||0)&&(l.putSync(Md,O+1),Ut.info(`Updating next table id (it was out of sync) to ${O+1} for ${_}`)):(g.tableId=O=l.get(Md),O||(O=1),Ut.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(Md,O+1),l.putSync(g.key,g));let ie=new Hl.default(!g.is_hash_attribute,g.is_hash_attribute);if(ie.compression=g.compression,ie.compression){let Re=(0,Zt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||jz;ie.compression.threshold=Re}v=Rp(o.openDB(g.key,ie),o),o.databaseName=r,v.tableId=O}let le;for(let ie of S){ie.attribute=ie.name;try{if(!ie.is_hash_attribute&&(ie.indexed||ie.attribute&&!ie.name)){if(!E[ie.name]){let me=new Hl.default(!ie.is_hash_attribute,ie.is_hash_attribute);E[ie.name]=o.openDB(ie.key,me),E[ie.name].indexNulls=ie.indexNulls}let Re=T.find(me=>me.name===ie.name);Re?T.splice(T.indexOf(Re),1,ie):T.push(ie),le=!0}}catch(Re){Ut.error("Error trying to update attribute",ie,T,E,Re)}}for(let ie of T)if(!S.find(me=>me.name===ie.name)){if(ie.is_hash_attribute){Ut.error("Unable to remove existing primary key attribute",ie);continue}ie.indexed&&(T.splice(T.indexOf(ie),1),le=!0)}if(R)le&&(R.schemaVersion++,R.updatedAttributes());else{R=Xz(f,_,LT({primaryStore:v,auditStore:u,audit:F,sealed:se,splitSegments:z,replicate:ne,expirationMS:Q&&Q*1e3,evictionMS:te&&te*1e3,trackDeletes:q,tableName:_,tableId:O,primaryKey:g.name,databasePath:s?r+"/"+_:r,databaseName:r,indices:E,attributes:S,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let ie of fm)ie(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Jz(e){let t=Ye[e];if(t||(e==="data"?t=Ye[e]=Kn:e==="system"?Object.defineProperty(Ye,"system",{value:t=Object.create(null),configurable:!0}):t=Ye[e]=Object.create(null)),Ud&&!Ud.has(e)){let r=new Set;t[BT]=r,Ud.set(e,r)}return t}function Xz(e,t,r){return e[t]=r,r}function mu({database:e,table:t}){e||(e=QC),Ze();let r=Jz(e),n=(0,vt.join)((0,Zt.getHdbBasePath)(),cc),s=(0,Zt.get)(B.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)(B.STORAGE_PATH)||((0,rs.existsSync)(n)?n:(0,vt.join)((0,Zt.getHdbBasePath)(),Nm));let o=(0,vt.join)(n,(i?t:e)+".mdb"),c=Fo.get(o);if(!c||c.status==="closed"){let l=new WC.default(o,!1);c=(0,xd.open)(l),Fo.set(o,c)}return c.auditStore||(c.auditStore=NT(c)),c}async function ub(e){if(!Ye[e])throw new Error("Schema does not exist");let t=Ye[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Fo.delete(r.path),r.status==="open"&&(await r.close(),await hm.remove(r.path));if(r||(r=mu({database:e,table:null}),r.status==="open"&&(await r.close(),await hm.remove(r.path))),e==="data"){for(let n in Kn)delete Kn[n];delete Kn[BT]}delete Ye[e],_m.forEach(n=>n(e)),await QA(r)}function _t(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,schemaDefined:h,origin:_}=e;r||(r=QC);let m=mu({database:r,table:t}),S=Ye[r];Ut.trace(`Defining ${t} in ${r}`);let g=S?.[t];if(m.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,E,T;h==null&&(h=!0);let O=new Hl.default(!1);for(let z of o)z.attribute&&!z.name?(z.name=z.attribute,z.indexed=!0):z.attribute=z.name,z.expiresAt&&(z.indexed=!0);let v,F;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let z=m.auditStore;E=o.find(Re=>Re.isPrimaryKey)||{},R=E.name,E.is_hash_attribute=E.isPrimaryKey=!0,E.schemaDefined=h,E.compression=Kg(),d&&(E.trackDeletes=!0),c=E.audit=typeof c=="boolean"?c:(0,Zt.get)(B.LOGGING_AUDITLOG),n&&(E.expiration=n),s&&(E.eviction=s),u??=!1,E.splitSegments=u,typeof l=="boolean"&&(E.sealed=l),typeof f=="boolean"&&(E.replicate=f),_&&(E.origins?E.origins.includes(_)||E.origins.push(_):E.origins=[_]),Ut.trace(`${t} table loading, opening primary store`);let ne=new Hl.default(!1,!0);ne.compression=E.compression;let le=t+"/";if(T=m.dbisDb=m.openDB(MT.INTERNAL_DBIS_NAME,O),se(),T.get(le))return F&&F(),ed(),_t(e);let ie=Rp(m.openDB(le,ne),m);m.databaseName=r,ie.tableId=T.get(Md),Ut.trace(`Assigning new table id ${ie.tableId} for ${t}`),ie.tableId||(ie.tableId=1),T.put(Md,ie.tableId+1),E.tableId=ie.tableId,g=Xz(S,t,LT({primaryStore:ie,auditStore:z,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:ie.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:h,dbisDB:T})),g.schemaVersion=1,v=!0,T.put(le,E)}let q=g.indices;T=T||(m.dbisDb=m.openDB(MT.INTERNAL_DBIS_NAME,O)),g.dbisDB=T;let Q=[];for(let{key:z,value:ne}of T.getRange({start:!0})){let[le,ie]=z.toString().split("/");if(ie===""&&(ie=ne.name),ie){if(le!==t)continue}else continue;let Re=o.find(Ae=>Ae.name===ie),me=!Re?.indexed&&ne.indexed&&!ne.isPrimaryKey;if((!Re||me)&&(se(),v=!0,Re||T.remove(z),me)){let Ae=g.indices[le];Ae&&Q.push(Ae)}}let te=[];try{for(let z of o||[]){if((z.relationship||z.computed)&&(v=!0,z.relationship))continue;let ne=t+"/"+(z.name||"");Object.defineProperty(z,"key",{value:ne,configurable:!0});let le=T.get(ne);if(z.isPrimaryKey){if(le=le||T.get(ne=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||f!==void 0&&f!==g.replicate||(+n||void 0)!==(+le.expiration||void 0)||(+s||void 0)!==(+le.eviction||void 0)||z.type!==le.type){let Re={...le};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),f!==void 0&&(Re.replicate=f),z.type&&(Re.type=z.type),v=!0,se(),T.put(ne,Re)}continue}le?.attribute&&!le.name&&(le.indexed=!0);let ie=!le||le.type!==z.type||le.indexed!==z.indexed||le.nullable!==z.nullable||le.version!==z.version||JSON.stringify(le.properties)!==JSON.stringify(z.properties)||JSON.stringify(le.elements)!==JSON.stringify(z.elements);if(z.indexed){let Re=new Hl.default(!0,!1),me=m.openDB(ne,Re);(ie||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<mm.workerData?.restartNumber)&&(v=!0,se(),le=T.get(ne),(ie||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<mm.workerData?.restartNumber)&&(v=!0,z.indexNulls===void 0&&(z.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(z.lastIndexedKey=le?.lastIndexedKey??void 0,z.indexingPID=process.pid,me.isIndexing=!0,Object.defineProperty(z,"dbi",{value:me}),te.push(z))),T.put(ne,z)),le?.indexNulls&&z.indexNulls===void 0&&(z.indexNulls=!0),me.indexNulls=z.indexNulls,q[z.name]=me}else ie&&(v=!0,se(),T.put(ne,z))}}finally{F&&F()}if(v&&(g.schemaVersion++,g.updatedAttributes()),Ut.trace(`${t} table loading, running index`),te.length>0||Q.length>0?g.indexingOperation=SSe(g,te,Q):v&&vT.signalSchemaChange(new UT.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=_,v)for(let z of fm)z(g,_!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Ut.trace(`${t} table loaded`),g;function se(){F||m.transactionSync(()=>({then(z){F=z}}))}a(se,"startTxn")}async function SSe(e,t,r){try{Ut.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await vT.signalSchemaChange(new UT.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 d of t)(0,xd.compareKeys)(d.lastIndexedKey,u)<0&&(u=d.lastIndexedKey),d.lastIndexedKey==null&&d.dbi.clearAsync();let f=0;for(let{key:d,value:h,version:_}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(h){if(f++,s=e.primaryStore.ifVersion(d,_,()=>{for(let m=0;m<l;m++){let S=t[m],g=S.name;try{let R=S.resolve,E=h&&(R?R(h):h[g]),T=(0,zz.getIndexedValues)(E);if(T)for(let O=0,v=T.length;O<v;O++)S.dbi.put(T[O],d)}catch(R){o[g]||(o[g]=!0,Ut.error(`Error indexing attribute ${g}`,R))}}}),s.then(()=>f--,m=>{f--,Ut.error(m)}),mm.workerData&&mm.workerData.restartNumber!==Qz.restartNumber&&(i=!0),++c%100===0||i){for(let m of t)m.lastIndexedKey=d,e.dbisDB.put(m.key,m);if(i)return}f>ESe?await s:f>gSe&&await new Promise(m=>setImmediate(m))}for(let d of t)delete d.lastIndexedKey,delete d.indexingPID,d.dbi.isIndexing=!1,s=e.dbisDB.put(d.key,d)}await s,await vT.signalSchemaChange(new UT.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Ut.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Ut.error("Error in indexing",n)}}function TSe({table:e,database:t}){let r=mu({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 il(e){return fm.push(e),{remove(){let t=fm.indexOf(e);t>-1&&fm.splice(t,1)}}}function K_(e){return _m.push(e),{remove(){let t=_m.indexOf(e);t>-1&&_m.splice(t,1)}}}function Kg(){let e=(0,Zt.get)(B.STORAGE_COMPRESSION),t=(0,Zt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Zt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||jz,n={startingOffset:32};return t&&(n.dictionary=hm.readFileSync(t)),r&&(n.threshold=r),e&&n}var Zt,MT,xd,vt,rs,vd,Hl,WC,hm,zC,zz,vT,UT,mm,Ut,Qz,QC,BT,jz,Kn,Ye,Md,fm,_m,xT,Fo,Ud,ESe,gSe,Ue=be(()=>{Zt=M(ce()),MT=M(Ft()),xd=require("lmdb"),vt=require("path"),rs=require("fs"),vd=M(gt());Ef();Hl=M(vf()),WC=M(Uf());G();hm=M(require("fs-extra")),zC=M(ui()),zz=M(ln()),vT=M(_o()),UT=M(Ks()),mm=require("worker_threads"),Ut=M(X()),Qz=M(st());so();ru();fs();QC="data",BT=Symbol("defined-tables"),jz=((0,Zt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Zt.initSync)();Kn=Object.create(null),Ye=Object.create(null);(0,zC._assignPackageExport)("databases",Ye);(0,zC._assignPackageExport)("tables",Kn);Md=Symbol.for("next-table-id"),fm=[],_m=[],Fo=new Map;a(pSe,"getTables");a(Ze,"getDatabases");a(ed,"resetDatabases");a(dm,"readMetaDb");a(Jz,"ensureDB");a(Xz,"setTable");a(mu,"database");a(ub,"dropDatabase");a(_t,"table");ESe=1e3,gSe=10;a(SSe,"runIndexing");a(TSe,"dropTableMeta");a(il,"onUpdatedTable");a(K_,"onRemovedDB");a(Kg,"getDefaultCompression")});var oe=P((Nve,fQ)=>{"use strict";var Za=require("path"),nQ=require("fs-extra"),In=X(),Zz=require("fs-extra"),HT=require("os"),ASe=require("net"),RSe=require("recursive-iterator"),Ar=(G(),D($)),{PACKAGE_ROOT:ySe}=Et(),bSe=mA(),eQ=require("papaparse"),kT=require("moment"),{inspect:OSe}=require("util"),tQ=require("is-number"),Ove=require("lodash"),NSe=require("minimist"),wSe=require("https"),ISe=require("http"),{hdb_errors:FT}=he(),CSe=/^((\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)))$/,sQ=require("util").promisify(setTimeout),PSe=100,DSe=5,LSe="",MSe=4,rQ={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};fQ.exports={isEmpty:ns,isEmptyOrZeroLength:Yi,arrayHasEmptyValues:xSe,arrayHasEmptyOrZeroLengthValues:BSe,buildFolderPath:HSe,isBoolean:iQ,errorizeMessage:vSe,stripFileExtension:FSe,autoCast:GSe,autoCastJSON:oQ,autoCastJSONDeep:JC,removeDir:qSe,compareVersions:$Se,isCompatibleDataVersion:VSe,escapeRawValue:KSe,unescapeValue:YSe,stringifyProps:WSe,timeoutPromise:QSe,isClusterOperation:JSe,getClusterUser:ZSe,checkGlobalSchemaTable:XSe,getHomeDir:cQ,getPropsFilePath:zSe,promisifyPapaParse:eTe,removeBOM:lQ,createEventPromise:tTe,checkProcessRunning:rTe,checkSchemaTableExist:nTe,checkSchemaExists:uQ,checkTableExists:dQ,getStartOfTomorrowInSeconds:sTe,getLimitKey:iTe,isObject:kSe,isNotEmptyAndHasValue:USe,autoCasterIsNumberCheck:aQ,backtickASTSchemaItems:oTe,isPortTaken:jSe,createForkArgs:aTe,autoCastBoolean:cTe,async_set_timeout:sQ,getTableHashAttribute:lTe,doesSchemaExist:uTe,doesTableExist:dTe,stringifyObj:fTe,ms_to_time:_Te,changeExtension:hTe,getEnvCliRootPath:XC,noBootFile:mTe,httpRequest:pTe,transformReq:ETe,convertToMS:gTe,PACKAGE_ROOT:ySe};function vSe(e){return e instanceof Error?e:new Error(e)}a(vSe,"errorizeMessage");function ns(e){return e==null}a(ns,"isEmpty");function USe(e){return!ns(e)&&(e||e===0||e===""||iQ(e))}a(USe,"isNotEmptyAndHasValue");function Yi(e){return ns(e)||e.length===0||e.size===0}a(Yi,"isEmptyOrZeroLength");function xSe(e){if(ns(e))return!0;for(let t=0;t<e.length;t++)if(ns(e[t]))return!0;return!1}a(xSe,"arrayHasEmptyValues");function BSe(e){if(Yi(e))return!0;for(let t=0;t<e.length;t++)if(Yi(e[t]))return!0;return!1}a(BSe,"arrayHasEmptyOrZeroLengthValues");function HSe(...e){try{return e.join(Za.sep)}catch{console.error(e)}}a(HSe,"buildFolderPath");function iQ(e){return ns(e)?!1:e===!0||e===!1}a(iQ,"isBoolean");function kSe(e){return ns(e)?!1:typeof e=="object"}a(kSe,"isObject");function FSe(e){return Yi(e)?LSe:e.slice(0,-MSe)}a(FSe,"stripFileExtension");function GSe(e){return ns(e)||e===""||typeof e!="string"?e:rQ[e]!==void 0?rQ[e]:aQ(e)===!0?Number(e):CSe.test(e)?new Date(e):e}a(GSe,"autoCast");function oQ(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(oQ,"autoCastJSON");function JC(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=JC(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=JC(r);n!==r&&(e[t]=n)}return e}else return oQ(e)}a(JC,"autoCastJSONDeep");function aQ(e){if(e.startsWith("0.")&&tQ(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&tQ(e))}a(aQ,"autoCasterIsNumberCheck");async function qSe(e){if(Yi(e))throw new Error(`Directory path: ${e} does not exist`);try{await Zz.emptyDir(e),await Zz.remove(e)}catch(t){throw In.error(`Error removing files in ${e} -- ${t}`),t}}a(qSe,"removeDir");function $Se(e,t){if(Yi(e)){In.info("Invalid current version sent as parameter.");return}if(Yi(t)){In.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a($Se,"compareVersions");function VSe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(VSe,"isCompatibleDataVersion");function KSe(e){if(ns(e))return e;let t=String(e);return t==="."?Ar.UNICODE_PERIOD:t===".."?Ar.UNICODE_PERIOD+Ar.UNICODE_PERIOD:t.replace(Ar.FORWARD_SLASH_REGEX,Ar.UNICODE_FORWARD_SLASH)}a(KSe,"escapeRawValue");function YSe(e){if(ns(e))return e;let t=String(e);return t===Ar.UNICODE_PERIOD?".":t===Ar.UNICODE_PERIOD+Ar.UNICODE_PERIOD?"..":String(e).replace(Ar.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(YSe,"unescapeValue");function WSe(e,t){if(ns(e))return In.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+HT.EOL}!Yi(n)&&n[0]===";"?r+=" "+n+s+HT.EOL:Yi(n)||(r+=n+"="+s+HT.EOL)}catch{In.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(WSe,"stringifyProps");function cQ(){let e;try{e=HT.homedir()}catch{e=process.env.HOME}return e}a(cQ,"getHomeDir");function zSe(){let e=Za.join(cQ(),Ar.HDB_HOME_DIR_NAME,Ar.BOOT_PROPS_FILE_NAME);return nQ.existsSync(e)||(e=Za.join(__dirname,"../","hdb_boot_properties.file")),e}a(zSe,"getPropsFilePath");function QSe(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(QSe,"timeoutPromise");async function jSe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=ASe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(jSe,"isPortTaken");function JSe(e){try{return Ar.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){In.error(`Error checking operation against cluster ops ${t}`)}return!1}a(JSe,"isClusterOperation");function XSe(e,t){let r=(Ue(),D(at)).getDatabases();if(!r[e])return FT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return FT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(XSe,"checkGlobalSchemaTable");function ZSe(e,t){if(ns(t)){In.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ns(e)||Yi(e)){In.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){In.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){In.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(ZSe,"getClusterUser");function eTe(){eQ.parsePromise=function(e,t,r){return new Promise(function(n,s){eQ.parse(e,{header:!0,transformHeader:lQ,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(eTe,"promisifyPapaParse");function lQ(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(lQ,"removeBOM");function tTe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;In.info(`Got cluster status event response: ${OSe(s)}`);try{i.cancel()}catch{In.error("Error trying to cancel timeout.")}n(s)})})}a(tTe,"createEventPromise");async function rTe(e){let t=!0,r=0;do await sQ(PSe*r++),(await bSe.findPs(e)).length>0&&(t=!1);while(t&&r<DSe);if(t)throw new Error(`process ${e} was not started`)}a(rTe,"checkProcessRunning");function nTe(e,t){let r=uQ(e);if(r)return r;let n=dQ(e,t);if(n)return n}a(nTe,"checkSchemaTableExist");function uQ(e){let{getDatabases:t}=(Ue(),D(at));if(!t()[e])return FT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(uQ,"checkSchemaExists");function dQ(e,t){let{getDatabases:r}=(Ue(),D(at));if(!r()[e][t])return FT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(dQ,"checkTableExists");function sTe(){let e=kT().utc().add(1,"d").startOf("d").unix(),t=kT().utc().unix();return e-t}a(sTe,"getStartOfTomorrowInSeconds");function iTe(){return kT().utc().format("DD-MM-YYYY")}a(iTe,"getLimitKey");function oTe(e){try{let t=new RSe(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){In.error("Got an error back ticking items."),In.error(t)}}a(oTe,"backtickASTSchemaItems");function aTe(e){return[e]}a(aTe,"createForkArgs");function cTe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(cTe,"autoCastBoolean");function lTe(e,t){let{getDatabases:r}=(Ue(),D(at)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(lTe,"getTableHashAttribute");function uTe(e){let{getDatabases:t}=(Ue(),D(at));return t()[e]!==void 0}a(uTe,"doesSchemaExist");function dTe(e,t){let{getDatabases:r}=(Ue(),D(at));return r()[e]?.[t]!==void 0}a(dTe,"doesTableExist");function fTe(e){try{return JSON.stringify(e)}catch{return e}}a(fTe,"stringifyObj");function _Te(e){let t=kT.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(_Te,"ms_to_time");function hTe(e,t){let r=Za.basename(e,Za.extname(e));return Za.join(Za.dirname(e),r+t)}a(hTe,"changeExtension");function XC(){if(process.env[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=NSe(process.argv);if(e[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(XC,"getEnvCliRootPath");var jC;function mTe(){if(jC)return jC;let e=XC();if(XC()&&nQ.pathExistsSync(Za.join(e,Ar.HDB_CONFIG_FILE)))return jC=!0,!0}a(mTe,"noBootFile");function pTe(e,t){let r;return e.protocol==="http:"?r=ISe:r=wSe,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(pTe,"httpRequest");function ETe(e){if(!e.schema&&!e.database){e.schema=Ar.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(ETe,"transformReq");function gTe(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(gTe,"convertToMS")});var gQ=P((Ive,EQ)=>{"use strict";var ss=ce(),STe=ju(),qe=(G(),D($)),pm=Pt(),Go=require("path"),{PACKAGE_ROOT:qT}=Et(),_Q=ce(),GT=oe(),Bd="/dev/null",TTe=Go.join(qT,"launchServiceScripts"),hQ=Go.join(qT,"utility/scripts"),ATe=Go.join(hQ,qe.HDB_RESTART_SCRIPT),mQ=Go.resolve(qT,"dependencies",`${process.platform}-${process.arch}`,pm.NATS_BINARY_NAME);function pQ(){let t=STe.licenseSearch().ram_allocation||qe.RAM_ALLOCATION_ENUM.DEFAULT,r=qe.MEM_SETTING_KEY+t,n={[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return GT.noBootFile()&&(n[qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=GT.getEnvCliRootPath()),{name:qe.PROCESS_DESCRIPTORS.HDB,script:qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:qT}}a(pQ,"generateMainServerConfig");var RTe=9930;function yTe(){ss.initSync(!0);let e=ss.get(qe.CONFIG_PARAMS.ROOTPATH),t=Go.join(e,"clustering",pm.NATS_CONFIG_FILES.HUB_SERVER),r=Go.join(ss.get(qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),qe.LOG_NAMES.HDB),n=_Q.get(qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=pm.LOG_LEVEL_FLAGS[ss.get(qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==RTe?"-"+n:""),script:mQ,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ss.get(qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Bd,i.error_file=Bd),i}a(yTe,"generateNatsHubServerConfig");var bTe=9940;function OTe(){ss.initSync(!0);let e=ss.get(qe.CONFIG_PARAMS.ROOTPATH),t=Go.join(e,"clustering",pm.NATS_CONFIG_FILES.LEAF_SERVER),r=Go.join(ss.get(qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),qe.LOG_NAMES.HDB),n=_Q.get(qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=pm.LOG_LEVEL_FLAGS[ss.get(qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==bTe?"-"+n:""),script:mQ,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ss.get(qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Bd,i.error_file=Bd),i}a(OTe,"generateNatsLeafServerConfig");function NTe(){ss.initSync();let e=Go.join(ss.get(qe.CONFIG_PARAMS.LOGGING_ROOT),qe.LOG_NAMES.HDB),t={name:qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:TTe,autorestart:!1};return ss.get(qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Bd,t.error_file=Bd),t}a(NTe,"generateClusteringUpgradeV4ServiceConfig");function wTe(){let e={[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.RESTART_HDB};return GT.noBootFile()&&(e[qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=GT.getEnvCliRootPath()),{...{name:qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:hQ},script:ATe}}a(wTe,"generateRestart");function ITe(){return{apps:[pQ()]}}a(ITe,"generateAllServiceConfigs");EQ.exports={generateAllServiceConfigs:ITe,generateMainServerConfig:pQ,generateRestart:wTe,generateNatsHubServerConfig:yTe,generateNatsLeafServerConfig:OTe,generateClusteringUpgradeV4ServiceConfig:NTe}});var nd=P((Dve,LQ)=>{"use strict";var rt=(G(),D($)),CTe=oe(),$o=qg(),$T=Er(),qo=Pt(),ec=gQ(),VT=ce(),kl=X(),PTe=Ao(),{startWorker:SQ,onMessageFromWorkers:DTe}=st(),LTe=Vu(),Pve=require("util"),MTe=require("child_process"),vTe=require("fs"),{execFile:UTe}=MTe,je;LQ.exports={enterPM2Mode:xTe,start:tc,stop:ZC,reload:AQ,restart:RQ,list:eP,describe:OQ,connect:Vo,kill:GTe,startAllServices:qTe,startService:tP,getUniqueServicesList:NQ,restartAllServices:$Te,isServiceRegistered:wQ,reloadStopStart:IQ,restartHdb:bQ,deleteProcess:kTe,startClusteringProcesses:PQ,startClusteringThreads:DQ,isHdbRestartRunning:FTe,isClusteringRunning:KTe,stopClustering:VTe,reloadClustering:YTe,expectedRestartOfChildren:yQ};var Em=!1;DTe(e=>{e.type==="restart"&&VT.initSync(!0)});function xTe(){Em=!0}a(xTe,"enterPM2Mode");function Vo(){return je||(je=require("pm2")),new Promise((e,t)=>{je.connect((r,n)=>{r&&t(r),e(n)})})}a(Vo,"connect");var rn,BTe=10,TQ;function tc(e,t=!1){if(Em)return HTe(e);let r=UTe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=rn.indexOf(r);o>-1&&rn.splice(o,1),!TQ&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<BTe&&(vTe.existsSync($o.getHubConfigPath())?tc(e):(await $o.generateNatsConfig(!0),tc(e),await new Promise(c=>setTimeout(c,3e3)),await $o.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await $o.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=VT.get(rt.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,f;for(;l=c.exec(i);){if(l.index&&qo.LOG_LEVEL_HIERARCHY[o]>=qo.LOG_LEVEL_HIERARCHY[f||"info"]){let _=f===qo.LOG_LEVELS.ERR||f===qo.LOG_LEVELS.WRN?kl.OUTPUTS.STDERR:kl.OUTPUTS.STDOUT;kl.logCustomLevel(f||"info",_,n,i.slice(u,l.index).trim())}let[d,h]=l;u=l.index+d.length,f=qo.LOG_LEVELS[h]}if(qo.LOG_LEVEL_HIERARCHY[o]>=qo.LOG_LEVEL_HIERARCHY[f||"info"]){let d=f===qo.LOG_LEVELS.ERR||f===qo.LOG_LEVELS.WRN?kl.OUTPUTS.STDERR:kl.OUTPUTS.STDOUT;kl.logCustomLevel(f||"info",d,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!rn&&(rn=[],!t)){let i=a(()=>{TQ=!0,rn&&(rn.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}rn.push(r)}a(tc,"start");function HTe(e){return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}je.start(e,(n,s)=>{n&&(je.disconnect(),r(n)),je.disconnect(),t(s)})})}a(HTe,"startWithPM2");function ZC(e){if(!Em){for(let t of rn||[])t.name===e&&(rn.splice(rn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}je.stop(e,async(n,s)=>{n&&(je.disconnect(),r(n)),je.delete(e,(i,o)=>{i&&(je.disconnect(),r(n)),je.disconnect(),t(o)})})})}a(ZC,"stop");function AQ(e){return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}je.reload(e,(n,s)=>{n&&(je.disconnect(),r(n)),je.disconnect(),t(s)})})}a(AQ,"reload");function RQ(e){if(!Em){yQ();for(let t of rn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}je.restart(e,(n,s)=>{je.disconnect(),t(s)})})}a(RQ,"restart");function yQ(){for(let e of rn||[])e.config&&(e.config.restarts=0)}a(yQ,"expectedRestartOfChildren");function kTe(e){return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}je.delete(e,(n,s)=>{n&&(je.disconnect(),r(n)),je.disconnect(),t(s)})})}a(kTe,"deleteProcess");async function bQ(){await tc(ec.generateRestart())}a(bQ,"restartHdb");async function FTe(){let e=await eP();for(let t in e)if(e[t].name===rt.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(FTe,"isHdbRestartRunning");function eP(){return new Promise(async(e,t)=>{try{await Vo()}catch(r){t(r)}je.list((r,n)=>{r&&(je.disconnect(),t(r)),je.disconnect(),e(n)})})}a(eP,"list");function OQ(e){return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}je.describe(e,(n,s)=>{n&&(je.disconnect(),r(n)),je.disconnect(),t(s)})})}a(OQ,"describe");function GTe(){if(!Em){for(let e of rn||[])e.kill();rn=[];return}return new Promise(async(e,t)=>{try{await Vo()}catch(r){t(r)}je.killDaemon((r,n)=>{r&&(je.disconnect(),t(r)),je.disconnect(),e(n)})})}a(GTe,"kill");async function qTe(){try{await PQ(),await DQ(),await tc(ec.generateAllServiceConfigs())}catch(e){throw je?.disconnect(),e}}a(qTe,"startAllServices");async function tP(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case rt.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ec.generateMainServerConfig();break;case rt.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ec.generateNatsIngestServiceConfig();break;case rt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ec.generateNatsReplyServiceConfig();break;case rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ec.generateNatsHubServerConfig(),await tc(r,t),await $o.removeNatsConfig(e);return;case rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ec.generateNatsLeafServerConfig(),await tc(r,t),await $o.removeNatsConfig(e);return;case rt.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ec.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await tc(r)}catch(r){throw je?.disconnect(),r}}a(tP,"startService");async function NQ(){try{let e=await eP(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw je?.disconnect(),e}}a(NQ,"getUniqueServicesList");async function $Te(e=[]){try{let t=!1,r=await NQ();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===rt.PROCESS_DESCRIPTORS.HDB?t=!0:await RQ(o))}t&&await IQ(rt.PROCESS_DESCRIPTORS.HDB)}catch(t){throw je?.disconnect(),t}}a($Te,"restartAllServices");async function wQ(e){if(rn?.find(r=>r.name===e))return!0;let t=await LTe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(wQ,"isServiceRegistered");async function IQ(e){let t=VT.get(rt.CONFIG_PARAMS.THREADS_COUNT)??VT.get(rt.CONFIG_PARAMS.THREADS),r=await OQ(e),n=CTe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await ZC(e),await tP(e)):e===rt.PROCESS_DESCRIPTORS.HDB?await bQ():await AQ(e)}a(IQ,"reloadStopStart");var CQ;async function PQ(e=!1){for(let t in rt.CLUSTERING_PROCESSES){let r=rt.CLUSTERING_PROCESSES[t];await tP(r,e)}}a(PQ,"startClusteringProcesses");async function DQ(){CQ=SQ(rt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:rt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await $T.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await $T.updateLocalStreams();let e=await PTe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===rt.PRE_4_0_0_VERSION){kl.info("Starting clustering upgrade 4.0.0 process"),SQ(rt.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(DQ,"startClusteringThreads");async function VTe(){for(let e in rt.CLUSTERING_PROCESSES)if(e!==rt.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===rt.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await CQ.terminate();else{let t=rt.CLUSTERING_PROCESSES[e];await ZC(t)}}a(VTe,"stopClustering");async function KTe(){for(let e in rt.CLUSTERING_PROCESSES){let t=rt.CLUSTERING_PROCESSES[e];if(await wQ(t)===!1)return!1}return!0}a(KTe,"isClusteringRunning");async function YTe(){await $o.generateNatsConfig(!0),await $T.reloadNATSHub(),await $T.reloadNATSLeaf(),await $o.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await $o.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(YTe,"reloadClustering")});var rP=nd(),MQ=(G(),D($));a(async function(){try{let t=await rP.describe(MQ.PROCESS_DESCRIPTORS.HDB);for(let r of t)await rP.reload(r.pm_id);await rP.deleteProcess(MQ.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
130
+ `))}},25).unref()}o.close?.(()=>{if(ot.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&yd()==0)try{jY(XY(ot.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,ZS),o.cantCleanupProperly||wn.warn("Had to forcefully exit the thread",ZS),process.exit(0)},5e3).unref()})}if(ZY||process.env.DEV_MODE)try{require("inspector").close()}catch(i){wn.info("Could not close debugger",i)}}}).ref();let e;Jh&&!vEe&&(e=tW()),Promise.resolve(e).then(()=>{if(yd()===0)try{DEe(zI)}catch(t){console.error("Error displaying start-up log",t)}Xh?.postMessage({type:Xt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(eW,"startServers");function tW(){let e=[];for(let t in qi){let r=qi[t];if(t.includes?.("/")&&yd()==0){bEe(t)&&jY(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),wn.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ot.get(Xt.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=yd();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?Jh?n={fd:Jh(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:Jh?n={fd:Jh(+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}),wn.trace("Listening on port "+t,ZS)}).on("error",c)}))}return Promise.all(e)}a(tW,"listenOnPorts");!YI&&!mEe?.noServerStart&&eW();function JI(e,t,r){let n=e?.read?e:new EEe({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=qi[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=qi[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(wn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(JI,"deliverSocket");var VY=new Map;function UEe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=VY.get(s),r){case"connection":i=JI(void 0,t),VY.set(s,i),i.write=(c,l,u)=>(Xh.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Xh.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Xh.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(UEe,"proxyRequest");var{getComponentName:tT}=(yh(),D(Rh));function XI(e,t,r=!0){t||(t=ot.get(Xt.CONFIG_PARAMS.HTTP_PORT));let n=qi[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",zY),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else qi[t]=e;e.on("unhandled",zY)}a(XI,"registerServer");function ZI(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=[],ot.get(Xt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:ot.get(Xt.CONFIG_PARAMS.HTTP_PORT),secure:ot.get(Xt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),ot.get(Xt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:ot.get(Xt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&ot.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:XY(ot.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}a(ZI,"getPorts");function eC(e,t){let r=[];for(let{port:n,secure:s}of ZI(t))r.push(rW(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?jI[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,XI(e,n,!1)),eT[n]=nT(jI,n);return r}a(eC,"httpServer");function rT(e,t){let r=zI.get(e)??[];zI.set(e,[...r,t])}a(rT,"setPortServerMap");function rW(e,t,r,n){if(rT(e,{protocol_name:t?"HTTPS":"HTTP",name:tT()}),!XS[e]){let s=r?"operationsApi_network":"http",i=ot.get(s+"_keepAliveTimeout"),o=ot.get(s+"_timeout"),c=ot.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:ot.get(Xt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)},u=ot.get(s+"_mtls"),f=ot.get(s+"_mtls_required"),d;if(t){let p=ot.get("tls");d=ot.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!f,requestCert:!!(u||n),ticketKeys:wEe(),SNICallback:JY(r?"operations-api":"server",u),ciphers:p.ciphers??p[0]?.ciphers})}let h=PEe(),_=XS[e]=(t?d?REe:AEe:SEe)(l,async(p,S)=>{try{let R=performance.now(),E=new QY(p,S);r&&(E.isOperationsServer=!0);let T=await eT[e](E);if(!T){if(E._nodeResponse.statusCode)return;T=nW(E)}if(T.headers?.set||(T.headers=new WI(T.headers)),h?T.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):T.headers?.set?.("Server","HarperDB"),T.status===-1){for(let ne of T.headers||[])S.setHeader(ne[0],ne[1]);return p.baseRequest=E,S.baseResponse=T,XS[e].emit("unhandled",p,S)}let O=T.status||200,v=performance.now(),F=v-R,q=T.body,j,te=!1;if(!T.handlesHeaders){let ne=T.headers||new WI;q?q.length>=0?(typeof q=="string"?ne.set("Content-Length",Buffer.byteLength(q)):ne.set("Content-Length",q.length),j=!0):q instanceof yEe&&(q.size?ne.set("Content-Length",q.size):q.on&&(te=!0,q.on("size",ie=>{S.headersSent||S.setHeader("Content-Length",ie)})),q=q.stream()):(ne.set("Content-Length","0"),j=!0);let le=`hdb;dur=${F.toFixed(2)}`;if(T.wasCacheMiss&&(le+=", miss"),CEe(ne,"Server-Timing",le,!0),!S.headersSent)if(te){if(S.statusCode=O,ne)if(ne[Symbol.iterator])for(let[ie,Re]of ne)S.setHeader(ie,Re);else for(let ie in ne)S.setHeader(ie,ne[ie])}else S.writeHead(O,ne&&(ne[Symbol.iterator]?Array.from(ne):ne));j&&S.end(q)}let se=E.handlerPath,z=E.method;if(jh(F,"duration",se,z,T.wasCacheMiss==null?void 0:T.wasCacheMiss?"cache-miss":"cache-hit"),qY(O<400,"success",se,z),qY(1,"response_"+O,se,z),!j)if(q instanceof ReadableStream&&(q=$Y.fromWeb(q)),(q[Symbol.iterator]||q[Symbol.asyncIterator])&&(q=$Y.from(q)),q?.pipe){q.pipe(S),q.destroy&&S.on("close",()=>{q.destroy()});let ne=0;q.on("data",le=>{ne+=le.length}),q.on("end",()=>{jh(performance.now()-v,"transfer",se,z),jh(ne,"bytes-sent",se,z)})}else q?.then?q.then(ne=>{S.end(ne)},g):S.end(q)}catch(R){g(R)}function g(R){let E=R.headers;S.writeHead(R.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),S.end(R.toString()),R.statusCode?R.statusCode===500?wn.warn(R):wn.info(R):wn.error(R)}a(g,"onError")});i>=0&&(_.keepAliveTimeout=i),c>=0&&(_.headersTimeout=c),t&&(_.ports||(_.ports=[]),_.ports.push(e),l.SNICallback.initialize(_),u&&(_.mtlsConfig=u),_.on("secureConnection",p=>{p._parent.startTime&&jh(performance.now()-p._parent.startTime,"tls-handshake",e),jh(p.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),XI(_,e)}return XS[e]}a(rW,"getHTTPServer");function nT(e,t){let r=nW;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"next_callback")}}return r}a(nT,"makeCallbackChain");function nW(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new WI}}a(nW,"unhandled");function xEe(e,t){eC(e,{requestOnly:!0,...t})}a(xEe,"onRequest");function BEe(e,t){let r;if(t.securePort){rT(t.securePort,{protocol_name:"TLS",name:tT()});let n=JY("server",t.mtls),s=ot.get("tls");r=NEe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:s.ciphers??s[0]?.ciphers,SNICallback:n},e),n.initialize(r),qi[t.securePort]=r}return t.port&&(rT(t.port,{protocol_name:"TCP",name:tT()}),r=gEe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),qi[t.port]=r),r}a(BEe,"onSocket");Object.defineProperty(TEe.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});var KY=[],QI={};function sW(e,t){for(let{port:r}of ZI(t))KY[t?.runFirst?"unshift":"push"]({listener:e,port:r}),QI[r]=nT(KY,r)}a(sW,"onUpgrade");var YY=[],WY={};function HEe(e,t){let r=[];for(let{port:n,secure:s}of ZI(t)){rT(n,{protocol_name:s?"WSS":"WS",name:tT()});let i=rW(n,s,t?.isOperationsServer,t?.mtls);Qh[n]||(Qh[n]=new OEe({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),Qh[n].on("connection",(o,c)=>{let l=new QY(c);l.isWebSocket=!0;let u=eT[n](l);WY[n](o,l,u)}),sW((o,c,l,u)=>o.__harperdb_request_upgraded?u(o,c,l):Qh[n].handleUpgrade(o,c,l,f=>{o.__harperdb_request_upgraded=!0,u(o,c,l),Qh[n].emit("connection",f,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{QI[n]&&QI[n](o,c,l)})),r.push(i),YY[t?.runFirst?"unshift":"push"]({listener:e,port:n}),WY[n]=nT(YY,n),eT[n]=nT(jI,n)}return r}a(HEe,"onWebSocket");function zY(e,t){t.writeHead(404),t.end(`Not found
131
+ `)}a(zY,"defaultNotFound")});var GY={};Be(GY,{startHTTPThreads:()=>FEe,startSocketServer:()=>oC,updateWorkerIdleness:()=>_W});async function FEe(e=2,t){try{if(t)sC(0,1,!0);else{let{loadRootComponents:r}=sT();if(e===0)return(0,Cs.setMainIsWorker)(!0),await tC().startServers(),Promise.resolve([]);await r()}fW();for(let r=0;r<e;r++)sC(r,e);return Promise.all(dW)}finally{(0,Cs.threadsHaveStarted)()}}function fW(){let e=(0,cW.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),nC=setInterval(()=>{aT.notify(e)},kEe).unref())}function sC(e,t=1,r){if(rC++,(0,Cs.startWorker)("server/threads/threadServer.js",{name:lA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===oA.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});dW.push(s),await s,bd.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=oT.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=bd.indexOf(n);o>-1&&bd.splice(o,1)}if(a(i,"removeWorker"),Od){let o=Od;Od=[];for(let c of o)uW[c.localPort](null,c)}}}),r){let n=setInterval(()=>{iC?iC=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Cs.shutdownWorkers)(),rC=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function oC(e=0,t){if(typeof e=="string")try{(0,cT.existsSync)(e)&&(0,cT.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=GEe:r=qEe(t):r=aC;let n=(0,Nd.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=uW[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),iC=!0,r(i,(o,c)=>{if(!o){if(iW){let u=i._socket||new Nd.Socket({handle:i,writable:!0,readable:!0});iW.deliverSocket(u,e,c),u.resume()}else rC>0?(Od.length===0&&setTimeout(()=>{Od.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,Od.push(i)):(console.log("start up a dynamic thread to handle request"),sC(0));Dt(!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 Nd.Socket({handle:i,writable:!0,readable:!0});KEe(u,o,e)}Dt(!0,"socket-routed")})},aT.info(`HarperDB ${lW.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 aC(e,t){let r,n=0;for(let s of bd){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=iT)return iT=i,t(r);n=i}iT=0,t(r)}function GEe(e,t){let r={};e.getpeername(r);let n=r.address,s=wd.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);aC(e,o=>{wd.set(n,{worker:o,lastUsed:i}),t(o)})}function qEe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Nd.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=wd.get(l),f=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=f,s(u.worker);aC(n,d=>{wd.set(l,{worker:d,lastUsed:f}),s(d,o)})})}a(r,"findByHeaderAffinity")}function _W(){iT=0;for(let e of bd)e.expectedIdle=e.recentELU.idle+$Ee,e.requests=1;bd.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function KEe(e,t,r){let n=VEe++;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(),oT.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")),oT.delete(n)),s.event=="destroy"&&(e.destroy(),oT.delete(n))})}var Cs,Nd,aT,cT,aW,cW,lW,bd,Od,uW,iW,rC,dW,nC,kEe,iC,iT,oW,wd,$Ee,oT,VEe,KI=be(()=>{Cs=M(st()),Nd=require("net");G();aT=M(X()),cT=require("fs");Ci();aW=require("worker_threads"),cW=M(Ju()),lW=M(Et()),bd=[],Od=[],uW=[],rC=0,dW=[];aW.isMainThread&&(process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Cs.onMessageFromWorkers)(e=>{e.type===cA.RESTART&&nC&&(clearInterval(nC),fW())}));kEe=6e5;a(FEe,"startHTTPThreads");a(fW,"licenseWarning");a(sC,"startHTTPWorker");a(oC,"startSocketServer");iT=0;a(aC,"findMostIdleWorker");oW=36e5,wd=new Map;a(GEe,"findByRemoteAddressAffinity");a(qEe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of wd)r.lastUsed+oW<e&&wd.delete(t)},oW).unref();$Ee=1e3;a(_W,"updateWorkerIdleness");(0,Cs.setMonitorListener)(_W);oT=new Map,VEe=1;a(KEe,"proxySocket")});var IW=P((aMe,wW)=>{var pW=M(require("cluster")),Ya=M(ce());G();var $i=M(X()),mW=M(require("fastify")),EW=M(require("@fastify/cors")),gW=M(require("@fastify/compress")),SW=M(require("@fastify/static")),TW=M(xb()),AW=M(require("path")),RW=M(Et()),yW=M($s()),bW=M(oe()),OW=M(Gn()),NW=M(Ju());Dr();var Wa=M(DS());eo();Ya.default.initSync();var YEe=6e4,WEe=1024*1024*1024,zEe="TRUE",{CONFIG_PARAMS:ep}=$,Id;wW.exports={hdbServer:hW,start:hW};async function hW(e){try{$i.default.debug("In Fastify server"+process.cwd()),$i.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),$i.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=pW.default.isMaster,await jEe();let t=e.securePort>0;Id=QEe(t),await Id.ready(),e||(e={}),e.isOperationsServer=!0;try{Ke.http(Id.server,e),Id.server.closeIdleConnections||await Id.listen({port:0,host:"::"})}catch(r){throw Id.close(),$i.default.error(r),$i.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),$i.default.fatal(t),process.exit(1)}}a(hW,"operationsServer");async function jEe(){$i.default.trace("Configuring HarperDB process."),yW.default.setSchemaDataToGlobal(),await OW.default.setUsersWithRolesCache(),await NW.default.getLicense()}a(jEe,"setUp");function QEe(e){$i.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=JEe(e),r=(0,mW.default)(t);r.server.headersTimeout=ZEe(),r.setErrorHandler(Wa.serverErrorHandler);let n=XEe();n&&r.register(EW.default,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(TW.default),r.register(gW.default),r.register(SW.default,{root:AW.default.join(RW.PACKAGE_ROOT,"studio/build-local")}),wf(r);let s=Ya.default.get(iA.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!bW.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Wa.reqBodyValidationHandler,Wa.authHandler],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),(0,Wa.handlePostRequest)(i,o)}),r.get("/health",()=>"HarperDB is running."),$i.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(QEe,"buildServer");function JEe(e){let t=Ya.default.get(ep.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ya.default.get(ep.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:WEe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(JEe,"getServerOptions");function XEe(){let e=Ya.default.get(ep.OPERATIONSAPI_NETWORK_CORS),t=Ya.default.get(ep.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===zEe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(XEe,"getCORSOpts");function ZEe(){return Ya.default.get(ep.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??YEe}a(ZEe,"getHeaderTimeoutConfig")});var _C={};Be(_C,{disableNATS:()=>tge,publishToStream:()=>dT,setNATSReplicator:()=>cC,setPublishToStream:()=>rge,setSubscription:()=>fC,start:()=>ege});function ege(){tp.default.get(B.CLUSTERING_ENABLED)&&sge()}function tge(e=!0){MW=e}function rge(e,t){dT=e,fC=t}function sge(){if(MW||process.env._DISABLE_NATS)return;let e=Ze(),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];cC(s,r,i)}}il((r,n)=>{cC(r.tableName,r.databaseName,r),n&&UW(r)}),!CW&&(CW=!0)}function cC(e,t,r){if(t==="system"&&ige.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 qr{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){UW(i)}static subscribe(){let i=new vn;return fC(t,e,i),i}static subscribeOnThisThread(i){return i<(tp.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??nge)}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 lT(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=vW;return i}a(n,"getNATSTransaction")}function UW(e){let t=tp.default.get(B.CLUSTERING_NODENAME);dT(`${uC.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,dC.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 PW,uC,dC,DW,LW,tp,uT,MW,dT,fC,nge,vW,CW,ige,lT,lC,xW=be(()=>{Ue();na();PW=M(Er()),uC=M(Pt()),dC=M(lo());Kl();DW=M(Qb()),LW=M(ln()),tp=M(ce());G();uT=M(X());a(ege,"start");a(tge,"disableNATS");dT=PW.publishToStream,fC=DW.setSubscription;a(rge,"setPublishToStream");nge=2;a(sge,"assignReplicationSource");ige=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(cC,"setNATSReplicator");a(UW,"publishSchema");lT=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=tp.default.get(B.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let f of i){let d=f.table,h=f.operation=="put"?"upsert":f.operation;l||(uT.trace(`Sending transaction event ${h}`),u=l={operation:h,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,h!=="delete"&&h!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===h?(o.push(f.record),c.push(f.id)):u=u.next={operation:h,table:d,id:f.id,record:f.record},f.expiresAt&&(u.expiresAt=f.expiresAt)}l&&n.push(dT(`${uC.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,dC.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(f=>{throw uT.error("An error has occurred trying to replicate transaction",l,f),f.statusCode=504,f}))}return Promise.all(n)}},lC=class extends lT{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,LW.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};vW=new lC});async function GW({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await hC.get(e,{returnNonexistent:!0});i=new EC(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await hC.get(e);o&&o.delete()}i=new _T(e,t)}return n&&(n.id=e,n.user={username:t?.username},rp.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function pC(){return fT++,fT>65500&&(fT=1),fT}function mC(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=us.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return It(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var HW,za,kW,FW,BW,hC,rp,fT,_T,EC,qW=be(()=>{Ue();Jl();HW=M(ln()),za=M(X());hc();kW=M(st()),FW=M(tC());Dr();BW=100,hC=_t({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"}]}}]}),rp=_t({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,kW.getWorkerIndex)()===0&&(async()=>{await FW.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of rp.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ke.getUser(r.user.username));try{await mC(r,t,r)}catch{(0,za.warn)("Failed to publish will",t)}rp.delete(e.id)}})();a(GW,"getSession");fT=1;a(pC,"getNextMessageId");_T=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 f=this.subscriptions.find(R=>R.topic===s),d;f?(d=i>0,f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1)):d=i===2;let h={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,za.trace)("Resuming subscription from",s,"from",o);let _=us.getMatch(u,"mqtt");if(!_){let R=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw R.statusCode=404,R}if(h.url=_.relativeURL,h.url.indexOf("+")>-1||h.url.indexOf("#")>-1){let R=h.url.slice(1);if(R.indexOf("#")>-1&&R.indexOf("#")!==R.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(h.isCollection=!0,R.indexOf("+")===R.length-1)h.onlyChildren=!0,h.url="/"+R.slice(0,R.length-1);else{let E=R.split("/"),T;for(let F=0;F<E.length;F++)if(E[F].indexOf("+")>-1)if(E[F]==="+")T=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&T)throw new Error("Filters can not be combined");let O=!0;E[E.length-1]==="#"&&(E.length--,O=!1),T&&(n=a(F=>{let q=F.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(O&&q.length!==E.length)return!1;for(let j=0;j<E.length;j++)if(E[j]!=="+"&&E[j]!==q[j])return!1;return!0},"filter"));let v=E.indexOf("+");h.url="/"+(v>-1?E.slice(0,v):E).concat("").join("/")}}else h.isCollection=!1;let p=_.path,S=_.Resource,g=await It(h,async()=>{let R=this.createContext();R.topic=s,R.retainHandling=i,R.isCollection=h.isCollection;let E=await S.subscribe(h,R);if(!E)return;if(!E[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let T=(async()=>{for await(let O of E)try{let v;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,v=this.needsAcknowledge(O)):(O.acknowledge?.(),v=pC());let F=O.id;if(Array.isArray(F)&&(F=Ql(F)),F==null&&(F=""),await this.listener(p+"/"+F,O.value,v,t)===!1)break;this.awaitingAcks?.size>BW?await new Promise(j=>setTimeout(j,this.awaitingAcks.size-BW)):await new Promise(setImmediate)}catch(v){(0,za.warn)(v)}})();return E});if(g)return g.topic=s,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=pC();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 mC(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();It(r,async()=>{try{if(!t){let n=await rp.get(this.sessionId);n?.doesExist()&&await mC(n,n.data,r)}}finally{await rp.delete(this.sessionId)}}).catch(n=>{(0,za.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(mC,"publish");EC=class extends _T{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=pC(),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,za.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,HW.getNextMonotonicTime)()),(0,za.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),hC.put(this.sessionRecord)}}});var SC={};Be(SC,{bypassAuth:()=>oge,start:()=>age});function oge(){WW=!0}function age({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new YW.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,f,d,h)=>{if(f.headers.get("sec-websocket-protocol")!=="mqtt")return h(u,f,d);o.events.emit("connection",u),_r.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:_,onClose:p}=VW(u,S=>{u.send(S)},f,Promise.resolve(d).then(()=>f?.user),o);u.on("message",_),u.on("close",p),u.on("error",S=>{_r.info?.("WebSocket error",S)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let f;if(o.events.emit("connection",u),_r.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let _=l.user;if(_!==null){(_===void 0||_==="Common Name"||_==="CN")&&(_=u.getPeerCertificate().subject.CN);try{f=await e.getUser(_,null,null),(0,Cd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&pT.notify?.({username:f?.username,status:xs.SUCCESS,type:zo.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(p){throw(0,Cd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&pT.error?.({username:_,status:xs.FAILURE,type:zo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),p}}else _r.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(_){o.events.emit("error",_,u),_r.error?.(_)}else if(l.required)return _r.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!f&&WW&&u.remoteAddress.includes("127.0.0.1")&&(f=await(0,KW.getSuperUser)(),_r.debug?.("Auto-authorizing local connection",f?.username));let{onMessage:d,onClose:h}=VW(u,_=>u.write(_),null,f,o);u.on("data",d),u.on("close",h),u.on("error",_=>{_r.info?.("Socket error",_)})},{port:t,securePort:s,mtls:l})),c}function VW(e,t,r,n,s){$W||($W=!0,A_(d=>{hT>0&&d.push({metric:"mqtt-connections",connections:hT,byThread:!0})}));let i;hT++;let o,c={protocolVersion:4},l=(0,mT.parser)({protocolVersion:5});function u(d){l.parse(d)}a(u,"onMessage");function f(){hT--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Yn(!1,"connection","mqtt","disconnect"),_r.debug?.("MQTT connection was closed",e.remoteAddress))}return a(f,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n);let h=d.cmd;if(o)o.then&&await o;else if(h!=="connect"){_r.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let _=d.topic,p=_?.indexOf("/",1),S=p>0?_.slice(0,p):_;Dt(d.length,"bytes-received",S,R(d),"mqtt");try{switch(o?.receivedPacket?.(),h){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await Ke.getUser(d.username,d.password.toString(),r),(0,Cd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&pT.notify?.({username:n?.username,status:xs.SUCCESS,type:zo.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(se){return(0,Cd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&pT.error?.({username:d.username,status:xs.FAILURE,type:zo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,se),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let se=e.deserialize||(e.deserialize=no(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?se(d.will.payload):void 0,delete d.will.payload}o=GW({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(se){return _r.error?.(se),s.events.emit("auth-failed",d,e,se),Yn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:se.code||5,returnCode:se.code||128})}s.events.emit("connected",o,e),Yn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let T=a(async(se,z,ne,le)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",se);let ie=se.indexOf("/",1),Re=ie>0?se.slice(0,ie):se;g({cmd:"publish",topic:se,payload:await E(z),messageId:ne||Math.floor(Math.random()*1e8),qos:le.qos},Re);let pe=e._socket??e;return pe.writableNeedDrain?new Promise(Ae=>pe.once("drain",Ae)):!pe.closed}catch(ie){return _r.error?.(ie),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(T),o.sessionWasPresent&&await o.resume();break;case"subscribe":let O=[];for(let se of d.subscriptions){let z;try{let ne=await o.addSubscription(se,se.qos>=1);z=ne?ne.qos||0:c.protocolVersion<5?128:143}catch(ne){s.events.emit("error",ne,e,se,o),ne.statusCode?ne.statusCode===500?_r.warn?.(ne):_r.info?.(ne):_r.error?.(ne),z=c.protocolVersion<5?128:ne.statusCode===403?135:ne.statusCode===404?143:128}O.push(z)}await o.committed,g({cmd:"suback",granted:O,messageId:d.messageId});break;case"unsubscribe":{let se=[];for(let z of d.unsubscriptions)se.push(o.removeSubscription(z)?0:17);g({cmd:"unsuback",granted:se,messageId:d.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let v=d.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=no(r?.headers.get?.("content-type"))),j=(d.payload?.length||0)>0?F(d.payload):void 0,te;try{te=await o.publish(d,j)}catch(se){s.events.emit("error",se,e,d,o),_r.warn?.(se),d.qos>0&&g({cmd:v,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&g({cmd:v,messageId:d.messageId,reasonCode:te===!1?144:0},d.topic);break;case"pubrec":g({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Yn(!0,"connection","mqtt","disconnect"),_r.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(T){s.events.emit("error",T,e,d,o),_r.error?.(T),g({cmd:"disconnect"})}function g(T,O){let v=(0,mT.generate)(T,c);t(v),Dt(v.length,"bytes-sent",O,R(T),"mqtt")}a(g,"sendPacket");function R(T){return T.qos>0?T.cmd+",qos="+T.qos:T.cmd}a(R,"packetMethodName");function E(T){return oa(T,r)}a(E,"serialize")}),l.on("error",d=>{_r.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:f}}var mT,KW,Cd,gC,YW,pT,_r,WW,$W,hT,zW=be(()=>{mT=require("mqtt-packet");qW();KW=M(Gn());eo();Ci();Dr();Cd=M(ce());G();gC=M(mi()),YW=require("events"),pT=(0,gC.loggerWithTag)("auth-event"),_r=(0,gC.loggerWithTag)("mqtt"),WW=(0,Cd.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(oge,"bypassAuth");a(age,"start");hT=0;a(VW,"onSocket")});var Rh={};Be(Rh,{component_errors:()=>Dd,getComponentName:()=>fge,loadComponent:()=>ST,loadComponentDirectories:()=>ZW,setErrorReporter:()=>dge});function ZW(e,t){t&&(AC=t),e&&(bC=e);let r=[];if((0,ut.existsSync)(TC)){let s=(0,ut.readdirSync)(TC,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Tt.join)(TC,o);r.push(ST(c,AC,tA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(ST(n,AC,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{XW=!0})}function dge(e){np=e}function _ge(e,t){return new Promise((r,n)=>{let s=Ze().system.hdb_info;if(!s)return r();let i=setTimeout(()=>{s.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(s.primaryStore.attemptLock(e,0,()=>{clearTimeout(i),r()}))try{(0,ut.rmSync)(t,{recursive:!0,force:!0}),(0,ut.existsSync)((0,Tt.join)(e,"node_modules"))||(0,ut.mkdirSync)((0,Tt.join)(e,"node_modules")),(0,ut.symlinkSync)(wC.PACKAGE_ROOT,t,"dir"),r()}finally{s.primaryStore.unlock(e,0)}})}async function ST(e,t,r,n,s,i){let o=(0,ut.realpathSync)(e);if(ET.has(o))return ET.get(o);ET.set(o,!0),s&&(bC=s);try{let c;n&&(Dd=new Map);let l=(0,Tt.join)(e,"harperdb-config.yaml");(0,ut.existsSync)(l)?c=n?(0,TT.getConfigObj)():(0,RC.parseDocument)((0,ut.readFileSync)(l,"utf8")).toJSON():!n&&(0,ut.existsSync)(l=(0,Tt.join)(e,"config.yaml"))?c=(0,RC.parseDocument)((0,ut.readFileSync)(l,"utf8")).toJSON():c=OC;try{let d=(0,Tt.join)(e,"node_modules","harperdb");(n||((0,ut.existsSync)(d)||!e.startsWith((0,yC.getHdbBasePath)()))&&(!(0,ut.existsSync)(d)||(0,ut.realpathSync)(wC.PACKAGE_ROOT)!==(0,ut.realpathSync)(d)))&&await _ge(e,d)}catch(d){Ml.default.error("Error symlinking harperdb module",d),d.code=="EPERM"&&process.platform==="win32"&&Ml.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=gT,f=n;for(let d in c){gT=d;let h=c[d];if(Dd.set(n?d:(0,Tt.basename)(e),!1),!h)continue;let _,p=h.package;try{if(p){let T=e,O;for(;!(0,ut.existsSync)(O=(0,Tt.join)(T,"node_modules",d));)if(T=(0,Tt.dirname)(T),T.length<(0,yC.getHdbBasePath)().length){O=null;break}if(O)_=await ST(O,t,r,!1),f=!0;else throw new Error(`Unable to find package ${d}:${p}`)}else _=uge[d];if(!_)continue;let S=a(T=>(T.origin=r,_t(T)),"ensureTable"),g=h.network||(h.port||h.securePort)&&h,R=g?.securePort||g?.https&&g.port,E=!g?.https&&g?.port;if(Pd.isMainThread&&(_=await _.startOnMainThread?.({server:Ke,ensureTable:S,port:E,securePort:R,resources:t,...h})||_,n&&g))for(let T of[E,R])try{if(+T&&!jW.includes(T)){let O=NC.get(B.HTTP_SESSIONAFFINITY);O&&Ml.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!AE)&&(jW.push(T),oC(T,O))}}catch(O){console.error("Error listening on socket",T,O,d)}if(t.isWorker&&(_=await _.start?.({server:Ke,ensureTable:S,port:E,securePort:R,resources:t,...h})||_),bC.set(_,!0),(_.handleFile||_.handleDirectory||_.setupFile||_.setupDirectory)&&h.files!=null){if(h.files.includes(".."))throw(0,JW.handleHDBError)("Can not reference parent directories");let T=(0,Tt.join)(e,h.files).replace(/\\/g,"/"),O=T.indexOf("/*");if(O>-1&&h.files!==OC[d]?.files&&!(0,ut.existsSync)(T.slice(0,O)))throw new Error(`The path '${T.slice(0,O)}' does not exist and cannot be used as the base of the resolved 'files' path value '${h.files}'`);let v=(0,Tt.basename)(e),F=h.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+v+F.slice(2):F==="."?"/"+v:"/"+v+"/"+F;let q,j,te;if(h.root){let z=h.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",j=(0,Tt.join)(e,z)}else(te=T.indexOf("/*"))>-1?(j=T.slice(0,te+1),q=(0,Tt.relative)(e,j)):h.files.indexOf("/")>-1&&(j=T.slice(0,T.lastIndexOf("/")+1),q=(0,Tt.relative)(e,j));let se=!1;if(Pd.isMainThread&&_.setupDirectory&&(se=await _.setupDirectory?.(F,j,t)),t.isWorker&&_.handleDirectory&&(se=await _.handleDirectory?.(F,j,t)),se){f=!0;continue}for(let z of await(0,QW.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:ne,dirent:le}=z;f=!0;let ie=(0,Tt.relative)(e,ne).replace(/\\/g,"/");if(q)if(ie.startsWith(q))ie=ie.slice(q.length+1);else throw new Error(`The root path '${h.root}' does not reference a valid part of the file path '${ie}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Re=F+(F.endsWith("/")?"":"/")+ie;try{if(le.isFile()){let pe=await lge(ne);Pd.isMainThread&&await _.setupFile?.(pe,Re,ne,t),t.isWorker&&await _.handleFile?.(pe,Re,ne,t)}else Pd.isMainThread&&await _.setupDirectory?.(Re,ne,t),t.isWorker&&await _.handleDirectory?.(Re,ne,t)}catch(pe){let Ae=`Could not load ${le.isFile()?"file":"directory"} '${ne}'${h.module?` using '${h.module}'`:""} for application '${e}' due to:
132
+ `;pe.message=`${Ae}${pe.message}`,pe.stack=`${Ae}${pe.stack}`,np?.(pe),Ml.default.error(pe),t.set(h.path||"/",new sa(pe)),Dd.set(n?d:(0,Tt.basename)(e),pe.message)}}}}catch(S){S.message=`Could not load component '${d}' for application '${(0,Tt.basename)(e)}' due to: ${S.message}`,np?.(S),((0,sp.getWorkerIndex)()===0?console:Ml.default).error(S),t.set(h.path||"/",new sa(S),null,!0),Dd.set(n?d:(0,Tt.basename)(e),S.message)}}if(gT=u,Pd.isMainThread&&!XW&&i&&(0,sp.watchDir)(e,async()=>ZW()),c.extensionModule){let d=await mE((0,Tt.join)(e,c.extensionModule));return ET.set(o,d),d}if(!f&&t.isWorker){let d=`${e} did not load any modules, resources, or files, is this a valid component?`;np?.(new Error(d)),((0,sp.getWorkerIndex)()===0?console:Ml.default).error(d),Dd.set((0,Tt.basename)(e),d)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,np?.(c),t.set("",new sa(c))}}var ut,Tt,Pd,RC,NC,wC,QW,sp,Ml,JW,yC,cge,TT,lge,TC,bC,XW,AC,Dd,uge,OC,jW,ET,np,gT,fge,yh=be(()=>{ut=require("fs"),Tt=require("path"),Pd=require("worker_threads"),RC=require("yaml"),NC=M(ce()),wC=M(Et());G();aL();qL();Xx();rB();nB();GB();sK();uK();fK();QW=M(require("fast-glob")),sp=M(st()),Ml=M(X());gb();Dr();JW=M(he());Ue();KI();yC=M(ce()),cge=M(IW());Qg();xW();ps();zW();TT=M(wt());RE();BA();({readFile:lge}=ut.promises),TC=(0,TT.resolvePath)(NC.get(B.COMPONENTSROOT)),bC=new Map,Dd=new Map;a(ZW,"loadComponentDirectories");uge={REST:bE,rest:bE,graphql:nR,graphqlSchema:GA,roles:Eb,jsResource:Tb,fastifyRoutes:aI,login:Rb,static:cI,operationsApi:cge,customFunctions:{},http:{},clustering:_C,replication:Aa,authentication:ph,mqtt:SC,loadEnv:lI},OC={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(OC,"static",{value:{files:"web/**"}});jW=[],ET=new Map;a(dge,"setErrorReporter");fge=a(()=>gT,"getComponentName");a(_ge,"symlinkHarperModule");a(ST,"loadComponent")});var sT=P((BMe,tz)=>{var{isMainThread:ez}=require("worker_threads"),{getTables:hge,getDatabases:UMe,table:xMe}=(Ue(),D(at)),{loadComponentDirectories:pge,loadComponent:mge}=(yh(),D(Rh)),{resetResources:Ege}=(Jl(),D(nL)),gge=iw(),Sge=wt(),{dirname:Tge}=require("path"),{getConnection:Age}=Er(),Rge=ce(),{CONFIG_PARAMS:yge}=(G(),D($)),{loadCertificates:bge}=Zs(),IC=new Map;async function Oge(e=!1){!ez&&Rge.get(yge.CLUSTERING_ENABLED)&&Age();try{ez&&await gge()}catch(n){console.error(n)}let t=Ege();hge(),t.isWorker=e,await bge(),await mge(Tge(Sge.getConfigFilePath()),t,"hdb",!0,IC),await pge(IC,t);let r=[];for(let[n]of IC)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Oge,"loadRootComponents");tz.exports.loadRootComponents=Oge});var st=P((kMe,li)=>{"use strict";HA();var{Worker:Nge,MessageChannel:wge,parentPort:Vi,isMainThread:MC,threadId:Ige,workerData:Ki}=require("worker_threads"),{PACKAGE_ROOT:Cge}=Et(),{join:iz,isAbsolute:Pge,extname:Dge}=require("path"),{server:oz}=(Dr(),D(ql)),{watch:Lge,readdir:Mge}=require("fs/promises"),{totalmem:rz}=require("os"),Ld=(G(),D($)),az=ce(),ci=X(),{randomBytes:vge}=require("crypto"),{_assignPackageExport:Uge}=ui(),nz=1024*1024,ja=[],Ps=[],xge=50,vC=1e4,Bge="restart",cz="request_thread_info",lz="resource_report",uz="thread_info",dz="added-port",Hge="ack",CC;Uge("threads",Ps);li.exports={startWorker:PC,restartWorkers:xC,shutdownWorkers:$ge,workers:ja,setMonitorListener:Jge,onMessageFromWorkers:Vge,onMessageByType:gz,broadcast:Yge,broadcastWithAcknowledgement:zge,setChildListenerByType:qge,getWorkerIndex:fz,getWorkerCount:_z,getTicketKeys:pz,setMainIsWorker:Fge,setTerminateTimeout:kge,restartNumber:Ki?.restartNumber||1};Ps.onMessageByType=gz;Ps.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ps.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};li.exports.whenThreadsStarted=new Promise(e=>{li.exports.threadsHaveStarted=e});var UC;function kge(e){vC=e}a(kge,"setTerminateTimeout");function fz(){return Ki?Ki.workerIndex:UC?0:void 0}a(fz,"getWorkerIndex");function _z(){return Ki?Ki.workerCount:UC?1:void 0}a(_z,"getWorkerCount");function Fge(e){UC=e,li.exports.threadsHaveStarted()}a(Fge,"setMainIsWorker");var hz=1,AT;function pz(){return AT||(AT=MC?vge(48):Ki.ticketKeys,AT)}a(pz,"getTicketKeys");Object.defineProperty(oz,"workerIndex",{get(){return fz()}});Object.defineProperty(oz,"workerCount",{get(){return _z()}});var mz={[cz](e,t){jge(t)},[lz](e,t){Qge(t,e)}};function PC(e,t={}){let r=process.constrainedMemory?.()||rz();r=Math.min(r,rz(),2e4*nz);let n=az.get(Ld.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/nz/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Ps){let u=new wge;u.existingPort=l,i.push(u),o.push(u.port2)}Dge(e)||(e+=".js");let c=new Nge(Pge(e)?e:iz(Cge,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:hz=t.threadCount,name:t.name,restartNumber:li.exports.restartNumber,ticketKeys:pz()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:dz,port:l,threadId:c.threadId},[l]);return yT(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>PC(e,t),c.on("error",l=>{ci.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{ja.splice(ja.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<xge?(t.unexpectedRestarts=c.unexpectedRestarts+1,PC(e,t)):ci.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{mz[l.type]?.(l,c)}),ja.push(c),Zge(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(PC,"startWorker");var Gge=[Ld.THREAD_TYPES.HTTP];async function xC(e=null,t=Math.max(hz>3,1),r=!0){if(MC){try{process.chdir(process.cwd())}catch(o){ci.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=sT();await o()}li.exports.restartNumber++,t<1&&(t=t*ja.length);let n=[],s=[];for(let o of ja.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;ci.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:li.exports.restartNumber,type:Ld.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Gge.indexOf(o.name)>-1,l=new Promise(u=>{let f=setTimeout(()=>{ci.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},vC*2).unref();o.on("exit",()=>{clearTimeout(f),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),f=new Promise(d=>{let h=a(_=>{_.type===Ld.ITC_EVENT_TYPES.CHILD_STARTED&&(ci.trace("Worker has started",u.threadId),d(),s.splice(s.indexOf(f)),u.off("message",h))},"startListener");ci.trace("Waiting for worker to start",u.threadId),u.on("message",h)});s.push(f),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}=nd();r&&(e==="http"||!e)&&az.get(Ld.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Vi.postMessage({type:Bge,workerType:e})}a(xC,"restartWorkers");function qge(e,t){mz[e]=t}a(qge,"setChildListenerByType");function $ge(e){return xC(e,1/0,!1)}a($ge,"shutdownWorkers");var Ez=[];function Vge(e){Ez.push(e)}a(Vge,"onMessageFromWorkers");var DC=new Map;function gz(e,t){let r=DC.get(e);r||DC.set(e,r=[]),r.push(t)}a(gz,"onMessageByType");var Kge=10;async function Yge(e,t){let r=0;for(let n of Ps)try{n.postMessage(e),r++>Kge&&(r=0,await new Promise(setImmediate))}catch(s){ci.error("Unable to send message to worker",s)}t&&Tz(e,null)}a(Yge,"broadcast");var RT=new Map,Wge=1;function zge(e){return new Promise(t=>{let r=0;for(let n of Ps)try{let s=Wge++,i=a(()=>{RT.delete(s),--r===0&&t(),n!==Vi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,RT.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of RT)o.port===n&&o()})),n.postMessage(e),r++}catch(s){ci.error("Unable to send message to worker",s)}r===0&&t()})}a(zge,"broadcastWithAcknowledgement");function jge(e){e.postMessage({type:uz,workers:Sz()})}a(jge,"sendThreadInfo");function Sz(){let e=Date.now();return ja.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(Sz,"getChildWorkerInfo");function Qge(e,t){e.resources=t,e.resources.updated=Date.now()}a(Qge,"recordResourceReport");var LC;function Jge(e){LC=e}a(Jge,"setMonitorListener");var Xge=1e3,sz=!1;function Zge(){sz||(sz=!0,setInterval(()=>{for(let e of ja){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}LC&&LC()},Xge).unref())}a(Zge,"startMonitoring");var eSe=1e3;if(Vi&&Ki?.addPorts){yT(Vi);for(let e=0,t=Ki.addPorts.length;e<t;e++){let r=Ki.addPorts[e];r.threadId=Ki.addThreadIds[e],yT(r)}setInterval(()=>{let e=process.memoryUsage();Vi.postMessage({type:lz,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},eSe).unref(),CC=a(()=>new Promise((e,t)=>{Vi.on("message",r),Vi.postMessage({type:cz});function r(n){n.type===uz&&(Vi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else CC=Sz;li.exports.getThreadInfo=CC;function yT(e,t){Ps.push(e),e.on("message",r=>{if(r.type===dz)r.port.threadId=r.threadId,yT(r.port);else if(r.type===Hge){let n=RT.get(r.id);n&&n()}else Tz(r,e)}).on("close",()=>{Ps.splice(Ps.indexOf(e),1)}).on("exit",()=>{Ps.splice(Ps.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(yT,"addPort");function Tz(e,t){for(let n of Ez)n(e,t);let r=DC.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){ci.error(s)}}a(Tz,"notifyMessageListeners");if(MC){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Mge(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(iz(s,o.name));try{for await(let{filename:o}of Lge(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await xC(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");li.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Vi.on("message",async e=>{let{type:t}=e;t===Ld.ITC_EVENT_TYPES.SHUTDOWN&&(li.exports.restartNumber=e.restartNumber,Vi.unref(),setTimeout(()=>{ci.warn("Thread did not voluntarily terminate",Ige),process.exit(0)},vC).unref())})});var Ex={};Be(Ex,{ACTION_32_BIT:()=>Sm,ACTION_64_BIT:()=>sSe,AUDIT_STORE_OPTIONS:()=>uh,Decoder:()=>sl,HAS_BLOBS:()=>pn,HAS_CURRENT_RESIDENCY_ID:()=>Nc,HAS_EXPIRATION_EXTENDED_TYPE:()=>vf,HAS_ORIGINATING_OPERATION:()=>Mf,HAS_PREVIOUS_RESIDENCY_ID:()=>wc,REMOTE_SEQUENCE_UPDATE:()=>ng,createAuditEntry:()=>bc,getLastRemoved:()=>rSe,openAuditStore:()=>NT,readAuditEntry:()=>Ct,removeAuditEntry:()=>wT,setAuditRetention:()=>nSe,transactionKeyEncoder:()=>Cz});function NT(e){let t=e.auditStore=e.openDB(BC.AUDIT_STORE_NAME,{create:!1,...uh});t||(t=e.auditStore=e.openDB(BC.AUDIT_STORE_NAME,uh),Rz(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,f){return r[l]=f,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=kC;zh(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(f=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let d=0,h,_;try{for(let{key:p,value:S}of t.getRange({start:1,snapshot:!1,end:Date.now()-HC/(1+i*i)})){try{h=wT(t,p,S)}catch(g){Md.warn("Error removing audit entry",g)}if(_=p,await new Promise(setImmediate),++d>=tSe){o=10;break}}await h}finally{d===0?o=Math.min(o<<1,HC/10):(Rz(t,_),o>100&&(o=o>>1)),f(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,op.getWorkerIndex)()===(0,op.getWorkerCount)()-1&&c(),(0,op.getWorkerIndex)()===0&&!Az)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(Az=!0,Md.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 wT(e,t,r){let n=iSe(r),s;if(n&pn){s=Ct(r);let i=e.tableStores[s.tableId],o=i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&Sc(()=>ia(s.getValue(i)),i.rootStore)}if((n&15)===FC){s=s||Ct(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 Rz(e,t){GC[0]=t,e.put(Symbol.for("last-removed"),Pz)}function rSe(e){let t=e.get(Symbol.for("last-removed"));if(t)return Pz.set(t),GC[0]}function nSe(e,t=kC){HC=e,kC=t}function bc(e,t,r,n,s,i,o,c,l,u,f,d,h){let _=Dz[o];if(!_)throw new Error(`Invalid audit entry type ${o}`);let p=1;if(n&&(n>1?Qa.setFloat64(0,n):Ds.set(_R),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}R(s),R(t),g(r),Qa.setFloat64(p,e),p+=8,l&Nc&&R(u),l&wc&&R(f),l&vf&&(Qa.setFloat64(p,d),p+=8),l&Mf&&R(Lz[h]),i?g(i):Ds[p++]=0,l?Qa.setUint32(n?8:0,_|l|3221225472):Ds[n?8:0]=_;let S=Ds.subarray(0,p);if(c)return Buffer.concat([S,c]);return S;function g(E){let T=p;p+=1,p=(0,vl.writeKey)(E,Ds,p);let O=p-T-1;O>127?O>16383?(Md.error("Key or username was too large for audit entry",E),p=T+1,Ds[T]=0):(Ds.copyWithin(T+2,T+1,p),Qa.setUint16(T,O|32768),p++):Ds[T]=O}function R(E){E<128?Ds[p++]=E:E<16384?(Qa.setUint16(p,E|32768),p+=2):E<1056964608?(Qa.setUint32(p,E|3221225472),p+=4):(Ds[p]=255,Qa.setUint32(p+1,E),p+=5)}}function iSe(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 sl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Ct(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new sl(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,f=n.position+=l,d=n.readFloat64(),h,_,p,S;if(i&Nc&&(h=n.readInt()),i&wc&&(_=n.readInt()),i&vf&&(p=n.readFloat64()),i&Mf){let T=n.readInt();S=Lz[T]}l=n.readInt();let g=n.position,R=n.position+=l,E;return{type:Dz[i&7],tableId:c,nodeId:o,get recordId(){return(0,vl.readKey)(e,u,f)},getBinaryRecordId(){return e.subarray(u,f)},version:d,previousLocalTime:s,get user(){return R>g?(0,vl.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(T,O,v){if(i&bT||i&ip&&!O)return E||(E=Sc(()=>T.decoder.decode(e.subarray(n.position,r)),T.rootStore)),E;if(i&ip&&v)return rb(T.getEntry(this.recordId),v,T)},getBinaryValue(){return i&(bT|ip)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:h,previousResidencyId:_,expiresAt:p,originatingOperation:S}}catch(n){return Md.error("Reading audit entry error",n,e),{}}}var vl,OT,BC,op,Iz,Md,Ds,Qa,Cz,uh,HC,tSe,GC,Pz,kC,Az,bT,ip,yz,FC,bz,Oz,Nz,wz,Sm,sSe,ng,Nc,wc,Mf,vf,pn,Dz,Lz,sl,so=be(()=>{vl=require("ordered-binary"),OT=M(ce()),BC=M(Ft());G();op=M(st()),Iz=M(oe());ru();Md=M(X());nE();fs();QS();(0,OT.initSync)();Ds=Buffer.alloc(2816),Qa=new DataView(Ds.buffer,Ds.byteOffset,2816),Cz={writeKey(e,t,r){return e===Lf?(t.set(Lf,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,vl.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,vl.readKey)(e,t,r)}},uh={encoding:"binary",keyEncoder:Cz},HC=(0,Iz.convertToMS)((0,OT.get)(B.LOGGING_AUDITRETENTION))||86400*3,tSe=1e3,GC=new Float64Array(1),Pz=new Uint8Array(GC.buffer),kC=1e4,Az=!1;a(NT,"openAuditStore");a(wT,"removeAuditEntry");a(Rz,"updateLastRemoved");a(rSe,"getLastRemoved");a(nSe,"setAuditRetention");bT=16,ip=32,yz=1,FC=2,bz=3,Oz=4,Nz=5,wz=6,Sm=14,sSe=15,ng=11,Nc=512,wc=1024,Mf=2048,vf=4096,pn=8192,Dz={put:yz|bT,[yz]:"put",delete:FC,[FC]:"delete",message:bz|bT,[bz]:"message",invalidate:Oz|ip,[Oz]:"invalidate",patch:Nz|ip,[Nz]:"patch",relocate:wz,[wz]:"relocate"},Lz={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(bc,"createAuditEntry");a(iSe,"readAction");a(Ct,"readAuditEntry");sl=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 VC(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=vz,oSe(e.primaryStore,e.auditStore)):(c=Mz,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{Uz(Mz[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=Ql(t);let f=new $C(r);f.startTime=n;let d=u.get(t);return d?d.push(f):(u.set(t,d=[f]),d.tables=u,d.key=t),f.subscriptions=d,f}function Uz(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),xz(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Ct(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=Ql(c),u=0;do{let f=o.get(l);if(f){for(let h of f)if(!(u>0&&!(h.includeDescendants&&!(h.onlyChildren&&u>1)))){if(h.startTime>=n){(0,qC.info)("omitting",c,h.startTime,n);continue}try{let _;h.supportsTransactions&&h.txnInProgress!==i.version&&(_=!0,h.txnInProgress||(r?r.push(h):r=[h]),h.txnInProgress=i.version),h.listener(c,i,n,_)}catch(_){console.error(_),(0,qC.info)(_)}}}if(l==null)break;let d=l.lastIndexOf?.("/",l.length-2);d!==l.length-1&&u++,d>-1?l=l.slice(0,d+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 oSe(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=vz[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{Uz(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function xz(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function Kk(e){return e.nextTransaction||(VC({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),xz(e)),e.nextTransaction}var qC,Mz,vz,$C,vO=be(()=>{qC=M(X());Kl();Jl();so();Mz=Object.create(null),vz=Object.create(null);a(VC,"addSubscription");$C=class extends vn{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(Uz,"notifyFromTransactionData");a(oSe,"listenToCommits");a(xz,"nextTransaction");a(Kk,"whenNextTransaction")});var qw={};Be(qw,{EVICTED:()=>ra,INVALIDATED:()=>fn,coerceType:()=>PT,makeTable:()=>LT,setServerUtilities:()=>hSe});function LT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:f,sealed:d,splitSegments:h,replicate:_}=e,{expirationMS:p,evictionMS:S,audit:g,trackDeletes:R}=e;S??=0;let{attributes:E}=e;E||(E=[]);let T=mR(i,n,l),O,v,F={},q=Promise.resolve(),j,te,se;for(let K of E)(K.assignCreatedTime||K.name==="__createdtime__")&&(j=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(te=K),K.expiresAt&&(se=K),K.isPrimaryKey&&(F=K);let z,ne=[],le=[],ie=1,Re=2,pe={},Ae={},xt=864e5,dt=0,Cn,nn,wr,kd=!1,rc,KT=new Map,YT=new Map,Bt,Fd,Gd=xl.get(B.REPLICATION_DATABASES);if(Array.isArray(Gd)){for(let K of Gd)if(K.name===c&&K.replicateTo>=0){Fd=K.replicateTo;break}}let WT=i.getRange({start:!1,end:!1}).constructor,Ep=10,qd=6;g&&gp(),zh(i.env.path,K=>{if(v)return Wo(K)});class De extends qr{#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=g;static databasePath=o;static databaseName=c;static attributes=E;static replicate=_;static sealed=d;static splitSegments=h??!0;static createdTimeProperty=j;static updatedTimeProperty=te;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return p}static dbisDB=f;static schemaDefined=u;static sourcedFrom(m,y){if(y&&(this.sourceOptions=y,(y.expiration||y.eviction||y.scanInterval)&&this.setTTLExpiration(y)),y?.intermediateSource)m.intermediateSource=!0,this.sources.unshift(m);else{if(this.sources.some(b=>!b.intermediateSource)){if(this.sources.some(b=>b.name===m.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(m)}v=v||m.get&&(!m.get.reliesOnPrototype||m.prototype.get),O=O||m.load;let L=a(b=>{let C=this.sources;if(C=C.filter(x=>x.intermediateSource&&x[b]&&(!x[b].reliesOnPrototype||x.prototype[b])),C.length>0)if(C.length===1){let x=C[0];return(w,H,U)=>{if(w?.source!==x)return x[b](H,U,w)}}else return(x,w,H)=>{let U=[];for(let Q of C){if(x?.source===Q)break;U.push(Q[b](w,H,x))}return Promise.all(U)}},"getApplyToIntermediateSource"),I=this.sources[this.sources.length-1];I.intermediateSource&&(I={});let A=a(b=>{if(I[b]&&(!I[b].reliesOnPrototype||I.prototype[b]))return(C,x,w)=>{if(!C?.source)return I[b](x,w,C)}},"getApplyToCanonicalSource");pe={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish")},Ae={put:L("put"),patch:L("patch"),delete:L("delete"),publish:L("publish"),invalidate:L("invalidate")};let N=I.shouldRevalidateEvents;return(async()=>{let b=!1,C,x=a(async(w,H)=>{let U=w.value,Q=w.table?Ye[c][w.table]:De;if(c===jd&&(w.table===Fl.ROLE_TABLE_NAME||w.table===Fl.USER_TABLE_NAME)&&(b=!0),w.id===void 0&&(w.id=U[Q.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));w.source=m;let J={residencyId:oc(w.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:w.nodeId},k=await Q.getResource(w.id,H,J);switch(w.finished&&await w.finished,w.type){case"put":return N?k._writeInvalidate(U,J):k._writeUpdate(U,!0,J);case"patch":return N?k._writeInvalidate(U,J):k._writeUpdate(U,!1,J);case"delete":return k._writeDelete(J);case"publish":case"message":return k._writePublish(U,J);case"invalidate":return k._writeInvalidate(U,J);case"relocate":return k._writeRelocate(J);default:xe.default.error?.("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=m.subscribe;w&&R==null&&(R=!0);let H={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},U=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Ul.getWorkerIndex)(),H):(0,Ul.getWorkerIndex)()===0,Q=w&&U&&await m.subscribe?.(H);if(Q){let J;for await(let k of Q)try{if(!(k.type==="transaction"?k.writes[0]:k)){xe.default.error?.("Bad subscription event",k);continue}if(k.source=m,k.type==="end_txn"){if(J?.resolve(),k.localTime&&C!==k.localTime){if(k.remoteNodeIds?.length>0){let ye=[Symbol.for("seq"),k.remoteNodeIds[0]],Y=f.get(ye),V=Y?.nodes;V||(V=[]);for(let _e of k.remoteNodeIds.slice(1)){let me=V.find(Te=>Te.id===_e);V=V.filter(Te=>Te.id!==_e||Te===me),me||(me={id:_e,seqId:0},V.push(me)),me.seqId=Math.max(Y?.seqId??1,k.localTime),_e===J?.nodeId&&(me.lastTxnTime=k.timestamp)}let ue=Math.max(Y?.seqId??1,k.localTime);xe.default.trace?.("Received txn",c,ue,new Date(ue),k.localTime,new Date(k.localTime),k.remoteNodeIds),f.put(ye,{seqId:ue,nodes:V})}C=k.localTime}k.onCommit&&J?.committed.then(k.onCommit);continue}if(J)if(k.beginTxn)J.resolve();else{J.write_promises.push(x(k,J));continue}!k.timestamp&&k.version&&(k.timestamp=k.version);let de=It(k,()=>{if(k.type==="transaction"){let ye=[];for(let Y of k.writes)try{ye.push(x(Y,k))}catch(V){throw V.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(k),V}return Promise.all(ye)}else if(k.type==="define_schema"){let ye=this.attributes.slice(0),Y;for(let V of k.attributes)ye.find(ue=>ue.name===V.name)||(ye.push(V),Y=!0);Y&&(_t({table:s,database:c,attributes:ye,origin:"cluster"}),cp.signalSchemaChange(new lp.SchemaEventMsg(process.pid,Yt.CREATE_TABLE,c,s)))}else return k.beginTxn?(J=k,J.write_promises=[x(k,k)],new Promise(ye=>{J.resolve=()=>ye(Promise.all(J.write_promises))})):x(k,k)});J&&(J.committed=de),b&&de&&!de?.waitingForUserChange&&(de.then(()=>cp.signalUserChange(new lp.UserEventMsg(process.pid))),de.waitingForUserChange=!0),k.onCommit&&(de?de.then(k.onCommit):k.onCommit())}catch(Ce){xe.default.error?.("error in subscription handler",Ce)}}}catch(w){xe.default.error?.(w)}})(),this}static get isCaching(){return v}static get shouldRevalidateEvents(){return this.prototype.get!==De.prototype.get}static getResource(m,y,L){let I=super.getResource(m,y,L);if(m!=null){Ir(m);try{if(I.getRecord?.())return I;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let A=!L?.async||i.cache?.get?.(m),N=Cr(y),b=N.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Pn(m,y,{transaction:b,ensureLoaded:L?.ensureLoaded},A,C=>{if(C?De._updateResource(I,C):I.#e=null,y.onlyIfCached&&y.noCacheStore){if(!I.doesExist())throw new Nr.ServerError("Entry is not cached",504)}else if(L?.ensureLoaded){let x=sn(m,C,y,I);if(x)return N?.disregardReadTxn(),I.#i=!0,YC(x,w=>(De._updateResource(I,w),I))}return I})}catch(A){throw A.message.includes("Unable to serialize object")&&(A.message+=": "+JSON.stringify(m)),A}}return I}static _updateResource(m,y){m.#r=y,m.#e=y?.value??null,m.#n=y?.version}ensureLoaded(){let m=sn(this.getId(),this.#r,this.getContext());if(m)return this.#i=!0,YC(m,y=>{this.#r=y,this.#e=y.value,this.#n=y.version})}static getNewId(){let m=F?.type;if(m==="String"||m==="ID")return super.getNewId();if(!Bt){let A=i.getEntry(Symbol.for("id_allocation")),N=A?.value,b;if(N&&N.nodeName===server.hostname&&(!mSe(i)||N.pid===process.pid)){let C=N.start,x=N.end;b=C;for(let w of i.getKeys({start:x,end:C,limit:1,reverse:!0}))b=w}else N=I(A?.version??null),b=N.start;Bt=new BigInt64Array([BigInt(b)+1n]),Bt=new BigInt64Array(i.getUserSharedBuffer("id",Bt.buffer)),Bt.maxSafeId=N.end}let y=Number(Atomics.add(Bt,0,1n)),L=m==="Int"?512:1048576;if(y+L>=Bt.maxSafeId){let A=a(N=>{Bt.maxSafeId=y+(m==="Int"?1023:4194303);let b=(m==="Int"?Math.pow(2,31):Math.pow(2,49))-1,C=N?void 0:i.useReadTransaction(),x=Number(Bt[0]);for(let U of i.getKeys({start:x+1,end:b,limit:1,transaction:C}))b=U;C?.done();let{value:w,version:H}=i.getEntry(Symbol.for("id_allocation"));if(Bt.maxSafeId<b){if(w.end>Bt.maxSafeId-100)return;xe.default.info?.("New id allocation",y,Bt.maxSafeId,H),i.put(Symbol.for("id_allocation"),{start:w.start,end:Bt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),H)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Bt.maxSafeId}, but id of ${b} detected`);let U=I(H);U.alreadyUpdated||Atomics.store(Bt,0,BigInt(U.start+1)),Bt.maxSafeId=U.end}},"updateEnd");y+L===Bt.maxSafeId?setImmediate(A):y+100>=Bt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${m=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>A(!0)))}return y;function I(A){let N=(m==="Int"?Math.pow(2,31):Math.pow(2,49))-1,b=N/4,C,x,w=!1,H,U;do{H=Math.floor(Math.random()*N),U={start:H,end:H+(m==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},C=0;for(let Q of i.getKeys({start:H,limit:1,reverse:!0}))C=Q;x=N;for(let Q of i.getKeys({start:H+1,end:N,limit:1}))x=Q;b*=.875,b<1e3&&!w&&(w=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${m==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,H,C,x,b))}while(!(b<x-H&&(b<H-C||C===0)));return i.transactionSync(()=>{let Q=i.getEntry(Symbol.for("id_allocation"));return(Q?.version??null)==A?(xe.default.info?.("Allocated new id range",U),i.put(Symbol.for("id_allocation"),U,Date.now()),U):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...Q.value})})}}static setTTLExpiration(m){if(typeof m=="number")p=m*1e3,S||(S=0);else if(m&&typeof m=="object")p=m.expiration*1e3,S=(m.eviction||0)*1e3,xt=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");xt=xt||(p+S)/4,Wo()}static getResidencyRecord(m){return f.get([Symbol.for("residency_by_id"),m])}static setResidency(m){De.getResidency=m&&((y,L)=>{try{return m(y,L)}catch(I){throw I.message+=` in residency function for table ${s}`,I}})}static setResidencyById(m){De.getResidencyById=m&&(y=>{try{return m(y)}catch(L){throw L.message+=` in residency function for table ${s}`,L}})}static getResidency(m,y){if(De.getResidencyById)return De.getResidencyById(m[t]);let L=Fd;if(y.replicateTo!=null){if(Array.isArray(y.replicateTo))return y.replicateTo.includes(server.hostname)?y.replicateTo:[server.hostname,...y.replicateTo];y.replicateTo>=0&&(L=y.replicateTo)}if(L>=0&&server.nodes){let I=[server.hostname];if(y.previousResidency)I.push(...y.previousResidency.slice(0,L));else{let A=server.nodes.map(C=>C.name),N=Math.floor(A.length*Math.random());I.push(...A.slice(N,N+L));let b=N+L-A.length;b>0&&I.push(...A.slice(0,b))}return I}}static enableAuditing(m=!0){g=m,m&&gp(),De.audit=m}static coerceId(m){return m===""?null:PT(m,F)}static async dropTable(){delete Ye[c][s];for(let m of i.getRange({versions:!0,snapshot:!1,lazy:!0}))m.metadataFlags&pn&&m.value&&ia(m.value);if(c===o){for(let m of E)f.remove(De.tableName+"/"+m.name),r[m.name]?.drop();f.remove(De.tableName+"/"),i.drop(),await f.committed}else console.log("legacy dropTable"),await i.close(),await CT.default.remove(data_path),await CT.default.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));cp.signalSchemaChange(new lp.SchemaEventMsg(process.pid,Yt.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this.isCollection)return this.search(m);if(this.getId()===null){if(m?.conditions||m?.size>0)return this.search(m);let y={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:E};return this.getContext()?.includeExpensiveRecordCountEstimates?De.getRecordCount().then(L=>(y.recordCount=L.recordCount,y.estimatedRecordRange=L.estimatedRange,y)):y}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(m,y){let L=nc(m);if(L?.read){if(L.isSuperUser)return!0;let I=L.attribute_permissions,A=y?.select;if(I?.length>0||kd&&A){if(y||(y={}),A){let N=I?.length>0&&KC(I,"read");y.select=A.map(b=>{let C=b.name||b;if(!N||N[C]){let x=wr[C]?.definition?.tableClass;if(x){if(b.name||(b={name:b}),!x.prototype.allowRead.call(null,m,b))return!1;if(!b.select)return b.name}return b}}).filter(Boolean)}else y.select=I.filter(N=>N.read&&!wr[N.attribute_name]).map(N=>N.attribute_name);return y}else return!0}}allowUpdate(m,y){let L=nc(m);if(L?.update){let I=L.attribute_permissions;if(I?.length>0){let A=KC(I,"update");for(let N in y)if(!A[N])return!1;for(let N of I){let b=N.attribute_name;!N.update&&!(b in y)&&(y[b]=this.getProperty(b))}}return Yo(this.getContext())}}allowCreate(m,y){if(this.isCollection){let L=nc(m);if(L?.insert){let I=L.attribute_permissions;if(I?.length>0){let A=KC(I,"insert");for(let N in y)if(!A[N])return!1;return Yo(this.getContext())}else return Yo(this.getContext())}}else return this.allowUpdate(m,{})}allowDelete(m){return nc(m)?.delete&&Yo(this.getContext())}update(m,y){if(!Cr(this.getContext()))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let I;return typeof m=="object"&&m&&(y?(Object.isFrozen(m)&&(m={...m}),this.#e={},this.#t=m):(I=this.#t,I&&(m=Object.assign(I,m)),this.#t=m)),this._writeUpdate(this.#t,y),this}addTo(m,y){if(typeof y=="number"||typeof y=="bigint")this.#s===Hz?this.set(m,(+this.getProperty(m)||0)+y):(this.#s||this.update(),this.set(m,new oE(y)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,y){if(typeof y=="number")return this.addTo(m,-y);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(m){this.#t=m}setRecord(m){this.#e=m}invalidate(){this._writeInvalidate()}_writeInvalidate(m,y){let L=this.getContext(),I=this.getId();Ir(I),Cr(this.getContext()).addWrite({key:I,store:i,invalidated:!0,entry:this.#r,before:pe.invalidate?.bind(this,L,I),beforeIntermediate:Ae.invalidate?.bind(this,L,I),commit:a((N,b)=>{if(!(Ko(N,b,y?.nodeId)<=0)){m??=null;for(let C in r)m||(m={}),m[C]===void 0&&(m[C]=this.getProperty(C));xe.default.trace?.(`Invalidating entry id: ${I}, timestamp: ${new Date(N).toISOString()}`),T(I,m,this.#r,N,fn,g,{user:L?.user,residencyId:y?.residencyId,nodeId:y?.nodeId},"invalidate")}},"commit")})}_writeRelocate(m){let y=this.getContext(),L=this.getId();Ir(L),Cr(this.getContext()).addWrite({key:L,store:i,invalidated:!0,entry:this.#r,before:pe.relocate?.bind(this,y,L),beforeIntermediate:Ae.relocate?.bind(this,y,L),commit:a((A,N)=>{if(Ko(A,N,m?.nodeId)<=0)return;let b=De.getResidencyRecord(m.residencyId),C=0,x=null,w=N?.value;if(b&&!b.includes(server.hostname)){for(let H in r)x||(x={}),x[H]=w[H];C=fn}else x=w;xe.default.trace?.(`Relocating entry id: ${L}, timestamp: ${new Date(A).toISOString()}`),T(L,x,this.#r,A,C,g,{user:y.user,residencyId:m.residencyId,nodeId:m.nodeId,expiresAt:m.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(m,y){let L={previousResidency:this.getResidencyRecord(m.residencyId),isRelocation:!0},I=ic(this.getResidency(y.value,L)),A;if(I){if(!I.includes(server.hostname))return!1;A=oc(I)}let N=0;xe.default.debug?.("Performing a relocate of an entry",m.key,y.value,I);let b=T(m.key,y.value,m,m.version,N,!0,{residencyId:A,expiresAt:y.expiresAt},"relocate",!1,null);return!0}static evict(m,y,L){let I=this.Source,A;if(!((v||g)&&(!y||(A=i.getEntry(m),!A||!y)||A.version!==L))){if(v){if(i.hasLock(m,A.version))return;let N;for(let b in r)N||(N={}),N[b]=y[b];if(N)return T(m,N,A,L,ra,null,null,null,!0)}if(i.ifVersion(m,L,()=>{Wi(m,y,null)}),g)return T(m,null,A,L,ra,null,null,null,!0);Oc(i,A??i.getEntry(m),L)}}lock(){throw new Error("Not yet implemented")}static operation(m,y){return m.table||=s,m.schema||=c,Yz.operation(m,y)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,y,L){let I=this.getContext(),A=Cr(I),N=this.getId();Ir(N);let b=this.#r;this.#s=y?Hz:dSe;let C={key:N,store:i,entry:b,nodeName:I?.nodeName,validate:a(x=>{m||(m=this.#t),y||m&&sE(this.#t===m?this:m)?I?.source||(A.checkOverloaded(),this.validate(m,!y),te&&(m[te.name]=te.type==="Date"?new Date(x):te.type==="String"?new Date(x).toISOString():x),y&&(t&&m[t]!==N&&(m[t]=N),j&&(b?.value?m[j.name]=b?.value[j.name]:m[j.name]=j.type==="Date"?new Date(x):j.type==="String"?new Date(x).toISOString():x),m=qc(m))):A.removeWrite(C)},"validate"),before:y?pe.put?()=>pe.put(I,N,m):null:pe.patch?()=>pe.patch(I,N,m):pe.put?()=>pe.put(I,N,qc(this)):null,beforeIntermediate:y?Ae.put?()=>Ae.put(I,N,m):null:Ae.patch?()=>Ae.patch(I,N,m):Ae.put?()=>Ae.put(I,N,qc(this)):null,commit:a((x,w,H)=>{if(H){if(I&&w?.version>(I.lastModified||0)&&(I.lastModified=w.version),this.#r=w,w?.value&&w.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");y||(this.#e=w?.value??null)}this.#t=void 0,this.#n=x;let U=w?.value,Q=m;this.#s=0;let J=!1,k=Ko(x,w,L?.nodeId),Ce;if(k<=0)if(g){let ue=w.localTime,_e=w.version;xe.default.trace?.("Applying CRDT update to record with id: ",N,"applying later update:",_e);let me=[];for(;ue>x||_e>=x&&ue>0;){let Te=l.get(ue);if(!Te)break;let Pe=Ct(Te);if(_e=Pe.version,_e>=x){if(_e===x){if(k=Ko(x,{version:_e,localTime:ue},L?.nodeId),k===0)return;if(k>0)continue}if(Pe.type==="patch")me.push(Pe),Ce=m;else if(Pe.type==="put"||Pe.type==="delete")return}ue=Pe.previousLocalTime}me.sort((Te,Pe)=>Te.version-Pe.version);for(let Te of me){let Pe=Te.getValue(i);if(Q=rE(Q,Pe,y),xe.default.debug?.("Rebuilding update with future patch:",Q),!Q)return}}else{if(y)return;Q=rE(Q,U,y),xe.default.debug?.("Rebuilding update without audit:",Q)}let de;if(y?de=Q:(this.#e=U,de=qc(this,Q)),this.#e=de,de&&de.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let ye;if(L?.residencyId!=null)ye=L.residencyId;else{b?.residencyId&&(I.previousResidency=De.getResidencyRecord(b.residencyId));let ue=ic(De.getResidency(de,I));if(ue&&!ue.includes(server.hostname))if(Ce??=de,J=!0,De.getResidencyById)de=void 0;else{de=null;for(let _e in r)de||(de={}),de[_e]=Ce[_e]}ye=oc(ue)}y||(Ce=m);let Y=I?.expiresAt??(p?p+Date.now():-1);xe.default.trace?.(`Saving record with id: ${N}, timestamp: ${new Date(x).toISOString()}${Y?", expires at: "+new Date(Y).toISOString():""}${w?", replaces entry from: "+new Date(w.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(de).slice(0,100)}catch{return""}})()),Wi(N,U,de);let V=y?"put":"patch";T(N,de,w,x,J?fn:0,g,{omitLocalRecord:J,user:I?.user,residencyId:ye,expiresAt:Y,nodeId:L?.nodeId,originatingOperation:I?.originatingOperation},V,!1,Ce),I.expiresAt&&Wo()},"commit")};A.addWrite(C)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this.isCollection){for await(let y of this.search(m))(await De.getResource(y[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this.#e?this._writeDelete(m):!1}_writeDelete(m){let y=Cr(this.getContext()),L=this.getId();Ir(L);let I=this.getContext();return y.addWrite({key:L,store:i,entry:this.#r,nodeName:I?.nodeName,before:pe.delete?.bind(this,I,L),beforeIntermediate:Ae.delete?.bind(this,I,L),commit:a((A,N,b)=>{let C=N?.value;b&&(I&&N?.version>(I.lastModified||0)&&(I.lastModified=N.version),De._updateResource(this,N)),!(Ko(A,N,m?.nodeId)<=0)&&(Wi(this.getId(),C),xe.default.trace?.(`Deleting record with id: ${L}, txn timestamp: ${new Date(A).toISOString()}`),g||R?(T(L,null,this.#r,A,0,g,{user:I?.user,nodeId:m?.nodeId},"delete"),g||Wo()):Oc(i,N))},"commit")}),!0}search(m){let y=this.getContext(),L=Cr(y);if(!m)throw new Error("No query provided");let I=m.conditions;I?I.length===void 0&&(I=I[Symbol.iterator]?Array.from(I):[I]):I=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this.getId()&&(I=[{attribute:null,comparator:Array.isArray(this.getId())?"prefix":"starts_with",value:this.getId()}].concat(I));let A,N={};function b(V,ue){let _e;switch(ue){case"and":case void 0:if(V.length<1)throw new Error('An "and" operator requires at least one condition');_e=!0;break;case"or":if(V.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ue)}for(let me of V){if(me.conditions){me.conditions=b(me.conditions,me.operator);continue}let Te=me[0]??me.attribute,Pe=Te==null?F:pi(E,Te);if(Pe)(Pe.type||LA[me.comparator])&&(me[1]===void 0?me.value=x(me.value,Pe):me[1]=x(me[1],Pe));else if(Te!=null)throw(0,Nr.handleHDBError)(new Error,`${Te} is not a defined attribute`,404);if(me.chainedConditions)if(me.chainedConditions.length===1&&(!me.operator||me.operator=="and")){let Ve=me.chainedConditions[0],We,Ms;if(Ve.comparator==="gt"||Ve.comparator==="greater_than"||Ve.comparator==="ge"||Ve.comparator==="greater_than_equal"?(We=me,Ms=Ve):(We=Ve,Ms=me),We.comparator!=="lt"&&We.comparator!=="less_than"&&We.comparator!=="le"&&We.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let is=Ms.comparator==="ge"||Ms.comparator==="greater_than_equal",Sp=We.comparator==="le"||We.comparator==="less_than_equal";me.comparator=(is?"ge":"gt")+(Sp?"le":"lt"),me.value=[Ms.value,We.value]}else throw new Error("Multiple chained conditions are not currently supported")}return V}a(b,"prepareConditions");function C(V,ue){if(m.enforceExecutionOrder)return V;for(let _e of V)_e.conditions&&(_e.conditions=C(_e.conditions,_e.operator));return V.length>1&&ue!=="or"?(0,Vz.sortBy)(V,jp(De)):V}a(C,"orderConditions");function x(V,ue){return Array.isArray(V)?V.map(_e=>PT(_e,ue)):PT(V,ue)}a(x,"coerceTypedValues");let w=m.operator;(I.length>0||w)&&(I=b(I,w));let H=typeof m.sort=="object"&&m.sort,U;if(H&&w!=="or"){let V=H.attribute;if(V==null)throw new Nr.ClientError("Sort requires an attribute");if(A=I.find(ue=>jl(ue.attribute)===jl(V)),!A){let ue=pi(E,V);if(!ue)throw(0,Nr.handleHDBError)(new Error,`${Array.isArray(V)?V.join("."):V} is not a defined attribute`,404);if(ue.indexed)A={attribute:V,comparator:"sort"},I.push(A);else if(I.length===0&&!m.allowFullScan)throw(0,Nr.handleHDBError)(new Error,`${Array.isArray(V)?V.join("."):V} is not indexed and not combined with any other conditions`,404)}A&&(A.descending=!!H.descending)}I=C(I,w),H&&(A&&I[0]===A?H.next&&(U={dbOrderedAttribute:H.attribute,attribute:H.next.attribute,descending:H.next.descending,next:H.next.next}):(A&&I.splice(I.indexOf(A),1),U=H));let Q=m.select;if(I.length===0&&(I=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:I,operator:w,postOrdering:U,selectApplied:!!Q};let J=L.useReadTxn(),k=MA(I,w,De,J,m,y,(V,ue)=>Vd(V,Q,y,J,ue),N),Ce=m.ensureLoaded!==!1;U||(k=Y(k));let de=De.transformEntryForSelect(Q,y,J,N,Ce,!0),ye=De.transformToOrderedSelect(k,Q,U,J,y,de);function Y(V){return m.offset||m.limit!==void 0?V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):V}return a(Y,"applyOffset"),U&&(ye=Y(ye)),ye.onDone=()=>{ye.onDone=null,L.doneReadTxn()},ye.selectApplied=!0,ye.getColumns=()=>{if(Q){let V=[];for(let ue of Q)ue==="*"?V.push(...E.map(_e=>_e.name)):V.push(ue.name||ue);return V}return E.filter(V=>!V.computed&&!V.relationship).map(V=>V.name)},ye}static transformToOrderedSelect(m,y,L,I,A,N){let b=new WT;if(L){m=Vd(m,y,I,A,null);let C;b.iterate=function(){let w,H=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),U,Q=L.dbOrderedAttribute,J,k,Ce=!0;function de(Y){let V=Y.next&&de(Y.next),ue=Y.descending;return(_e,me)=>{let Te=sc(_e,Y.attribute,I),Pe=sc(me,Y.attribute,I),Ve=ue?(0,Bl.compareKeys)(Pe,Te):(0,Bl.compareKeys)(Te,Pe);return Ve===0?V?.(_e,me)||0:Ve}}a(de,"createComparator");let ye=de(L);return{async next(){let Y;if(w)if(Y=w.next(),Y.done){if(U)return b.onDone&&b.onDone(),Y}else return{value:await N.call(this,Y.value)};C=[],J&&C.push(J);do if(Y=await H.next(),Y.done){if(U=!0,C.length)break;return b.onDone&&b.onDone(),Y}else{let V=Y.value;if(V?.then&&(V=await V),Q){let ue=sc(V,Q,I);if(Ce)Ce=!1,k=ue;else if(ue!==k){k=ue,J=V;break}}C.push(V)}while(!0);return L.isGrouped,C.sort(ye),w=C[Symbol.iterator](),Y=w.next(),Y.done?(b.onDone&&b.onDone(),Y):{value:await N.call(this,Y.value)}},return(){b.onDone&&b.onDone(),H.return()},throw(){b.onDone&&b.onDone(),H.throw()}}};let x=a(w=>{if(typeof y=="object"&&Array.isArray(w.attribute))for(let H=0;H<y.length;H++){let U=y[H],Q;if(U.name===w.attribute[0]){for(Q=U.sort||(U.sort={});Q.next;)Q=Q.next;Q.attribute=w.attribute.slice(1),Q.descending=w.descending}else U===w.attribute[0]&&(y[H]=Q={name:U,sort:{attribute:w.attribute.slice(1),descending:w.descending}})}w.next&&x(w.next)},"applySortingOnSelect");x(L)}else b.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),b=b.map(function(C){try{let x=N.call(this,C);return typeof x?.catch=="function"?x.catch(w=>{throw w.partialObject={[t]:C.key},w}):x}catch(x){throw x.partialObject={[t]:C.key},x}});return b}static transformEntryForSelect(m,y,L,I,A,N){if(m&&(m===t||m?.length===1&&m[0]===t&&Array.isArray(m))){let w=a(H=>(y?.transaction?.stale&&(y.transaction.stale=!1),H?.key??H),"transform");return m===t?w:m.asArray?H=>[w(H)]:H=>({[t]:w(H)})}let b;A&&v&&!(typeof m=="string"?[m]:m)?.every(w=>{let H;return typeof w=="object"?H=w.name:H=w,r[H]||H===t})&&(b=!0);let C,x=a(function(w){let H;if(y?.transaction?.stale&&(y.transaction.stale=!1),w!=null){if(H=w.value||w.deref?.()?.value,!H&&(w.key===void 0||w.deref)||w.metadataFlags&fn){if(w.metadataFlags&fn&&y.replicateFrom===!1&&N&&w.residencyId)return Xa.SKIP;if(w=Pn(w.key??w,y,{transaction:L,lazy:m?.length<4,ensureLoaded:A},this?.isSync,U=>U),w?.then)return w.then(x.bind(this));H=w?.value}if(b&&w?.metadataFlags&(fn|ra)||w?.expiresAt!=null&&w?.expiresAt<Date.now()){if(y.onlyIfCached&&y.noCacheStore)return{[t]:w.key,message:"This entry has expired"};let U=sn(w.key??w,w,y);if(U?.then)return U.then(x)}}if(H==null)return N?Xa.SKIP:H;if(m&&!(m[0]==="*"&&m.length===1)){let U,Q=a((k,Ce)=>{let de;typeof k=="object"?de=k.name:de=k;let ye=wr?.[de],Y;if(ye){let V=I?.[de];if(V)if(V.hasMappings){let _e=ye.from?H[ye.from]:jl(w.key);Y=V.get(_e),Y||(Y=[])}else Y=V.fromRecord?.(H);else Y=ye(H,y,w);let ue=a(_e=>{if(_e&&typeof _e=="object"){let me=ye.definition?.tableClass||De;C||(C={});let Te=C[de]||(C[de]=me.transformEntryForSelect(de===k?null:k.select||(Array.isArray(k)?k:null),y,L,V,A));if(Array.isArray(_e)){let Pe=[],Ve=me.transformToOrderedSelect(_e,k.select,typeof k.sort=="object"&&k.sort,y,L,Te)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),We=a(is=>{for(;!is.done;){if(is?.then)return is.then(We);Pe.push(is.value),is=Ve.next()}Ce(Pe,de)},"nextValue"),Ms=We(Ve.next());Ms&&(U||(U=[]),U.push(Ms));return}else if(_e=Te.call(this,_e),_e?.then){U||(U=[]),U.push(_e.then(Pe=>Ce(Pe,de)));return}}Ce(_e,de)},"handleResolvedValue");Y?.then?(U||(U=[]),U.push(Y.then(ue))):ue(Y);return}else Y=H[de],Y&&typeof Y=="object"&&de!==k&&(Y=De.transformEntryForSelect(k.select||k,y,L,null)({value:Y}));Ce(Y,de)},"selectAttribute"),J;if(typeof m=="string")Q(m,k=>{J=k});else if(Array.isArray(m))if(m.asArray)J=[],m.forEach((k,Ce)=>{k==="*"?m[Ce]=H:Q(k,de=>J[Ce]=de)});else{J={};let k=m.forceNulls;for(let Ce of m)if(Ce==="*")for(let de in H)J[de]=H[de];else Q(Ce,(de,ye)=>{de===void 0&&k&&(de=null),J[ye]=de})}else throw new Nr.ClientError("Invalid select"+m);return U?Promise.all(U).then(()=>J):J}return H},"transform");return x}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||_t({table:s,database:c,schemaDefined:u,attributes:E,audit:!0}),m||(m={});let y=!m.rawEvents,L=[],I=this,A=VC(De,this.getId()??null,function(b,C,x,w){try{let H=C.getValue?.(i,y),U=C.type;if(!H&&U==="patch"&&y){let J=i.getEntry(b);J?.version===C.version?H=J.value:H=C.getValue?.(i,!0,x),U="put"}let Q={id:b,localTime:x,value:H,version:C.version,type:U,beginTxn:w};L?L.push(Q):this.send(Q)}catch(H){xe.default.error?.(H)}},m.startTime||0,m),N=(async()=>{this.isCollection&&(A.includeDescendants=!0,m.onlyChildren&&(A.onlyChildren=!0)),m.supportsTransactions&&(A.supportsTransactions=!0);let b=this.getId(),C=m.previousCount;C>1e3&&(C=1e3);let x=m.startTime;if(this.isCollection){if(x){if(C)throw new Nr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:w,value:H}of l.getRange({start:x,exclusiveStart:!0,snapshot:!1})){let U=Ct(H);if(U.tableId!==n)continue;let Q=U.recordId;if(b==null||qz(b,Q)){let J=U.getValue(i,y,w);if(A.send({id:Q,localTime:w,value:J,version:U.version,type:U.type}),A.queue?.length>Fz&&await A.waitForDrain()===!1)return}A.startTime=w}}else if(C){let w=[];for(let{key:H,value:U}of l.getRange({start:"z",end:!1,reverse:!0}))try{let Q=Ct(U);if(Q.tableId!==n)continue;let J=Q.recordId;if(b==null||qz(b,J)){let k=Q.getValue(i,y,H);if(w.push({id:J,localTime:H,value:k,version:Q.version,type:Q.type}),--C<=0)break}}catch(Q){xe.default.error("Error getting history entry",H,Q)}for(let H=w.length;H>0;)A.send(w[--H]);w[0]&&(A.startTime=w[0].localTime)}else if(!m.omitCurrent){for(let{key:w,value:H,version:U,localTime:Q}of i.getRange({start:b??!1,end:b==null?void 0:[b,Bl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(H&&(A.send({id:w,localTime:Q,value:H,version:U,type:"put"}),A.queue?.length>Fz&&await A.waitForDrain()===!1))return}}else{C&&!x&&(x=0);let w=this.#r?.localTime;if(w===pR&&(i.cache?.delete(b),this.#r=i.getEntry(b),xe.default.trace?.("re-retrieved record",w,this.#r?.localTime),w=this.#r?.localTime),xe.default.trace?.("Subscription from",x,"from",b,w),x<w){let H=[],U=w;do{let Q=l.get(U);if(Q){m.omitCurrent=!0;let J=Ct(Q),k=J.getValue(i,y,U);y&&(J.type="put"),H.push({id:b,value:k,localTime:U,...J}),U=J.previousLocalTime}else break;C&&C--}while(U>x&&C!==0);for(let Q=H.length;Q>0;)A.send(H[--Q]);A.startTime=w}!m.omitCurrent&&this.doesExist()&&A.send({id:b,localTime:w,value:this.#e,version:this.#n,type:"put"})}for(let w of L)A.send(w);L=null})();return m.listener&&A.on("data",m.listener),A}static subscribeOnThisThread(m,y){return m===0||y?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(m,y){this._writePublish(m,y)}_writePublish(m,y){let L=Cr(this.getContext()),I=this.getId()||null;I!=null&&Ir(I);let A=this.getContext();L.addWrite({key:I,store:i,entry:this.#r,nodeName:A?.nodeName,validate:a(()=>{A?.source||(L.checkOverloaded(),this.validate(m))},"validate"),before:pe.publish?.bind(this,A,I,m),beforeIntermediate:Ae.publish?.bind(this,A,I,m),commit:a((N,b,C)=>{b===void 0&&R&&!g&&Wo(),xe.default.trace?.(`Publishing message to id: ${I}, timestamp: ${new Date(N).toISOString()}`),T(I,b?.value??null,b,b?.version||N,0,!0,{user:A?.user,residencyId:y?.residencyId,expiresAt:A?.expiresAt,nodeId:y?.nodeId},"message",!1,m)},"commit")})}validate(m,y){let L,I=a((A,N,b)=>{if(N.type&&A!=null)if(y&&A.__op__&&(A=A.value),N.properties){typeof A!="object"&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be an object${N.type?" ("+N.type+")":""}`);let C=N.properties;for(let x=0,w=C.length;x<w;x++){let H=C[x],U=I(A[H.name],H,b+"."+H.name);U&&(A[H.name]=U)}if(N.sealed&&A!=null&&typeof A=="object")for(let x in A)C.find(w=>w.name===x)||(L||(L=[])).push(`Property ${x} is not allowed within object in property ${b}`)}else switch(N.type){case"Int":(typeof A!="number"||A>>0!==A)&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(C=>typeof C=="string")||(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a string`);break;case"Boolean":typeof A!="boolean"&&(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a Date`)}break;case"BigInt":if(typeof A!="bigint"){if(typeof A=="string"||typeof A=="number")return BigInt(A);(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a bigint`)}break;case"Bytes":if(!(A instanceof Uint8Array)){if(typeof A=="string")return Buffer.from(A);(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(A instanceof gi)){if(typeof A=="string"&&(A=Buffer.from(A)),A instanceof Buffer)return createBlob(A,{type:"text/plain"});(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be a Blob`)}break;case"array":if(Array.isArray(A)){if(N.elements)for(let C=0,x=A.length;C<x;C++){let w=A[C],H=I(w,N.elements,b+"[*]");H&&(A[C]=H)}}else(L||(L=[])).push(`Value ${Ls(A)} in property ${b} must be an Array`);break}N.nullable===!1&&A==null&&(L||(L=[])).push(`Property ${b} is required (and not does not allow null values)`)},"validateValue");for(let A=0,N=E.length;A<N;A++){let b=E[A];if(!(b.relationship||b.computed)&&(!y||b.name in m)){let C=I(m[b.name],b,b.name);C&&(m[b.name]=C)}}if(d)for(let A in m)E.find(N=>N.name===A)||(L||(L=[])).push(`Property ${A} is not allowed`);if(L)throw new Nr.ClientError(L.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return v?!!this.#i:void 0}static async addAttributes(m){let y=E.slice(0);for(let L of m){if(!L.name)throw new Nr.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new Nr.ClientError("Attribute names cannot include backticks or forward slashes");(0,Kz.validateAttribute)(L.name),y.push(L)}return _t({table:s,database:c,schemaDefined:u,attributes:y}),De.indexingOperation}static async removeAttributes(m){let y=E.filter(L=>!m.includes(L.name));return _t({table:s,database:c,schemaDefined:u,attributes:y}),De.indexingOperation}static getSize(){let m=i.getStats();return(m.treeBranchPageCount+m.treeLeafPageCount+m.overflowPages)*m.pageSize}static getAuditSize(){let m=l?.getStats();return m&&(m.treeBranchPageCount+m.treeLeafPageCount+m.overflowPages)*m.pageSize}static getStorageStats(){let m=i.env.path,y=CT.default.statfsSync?.(m)??{};return{available:y.bavail*y.bsize,free:y.bfree*y.bsize,size:y.blocks*y.bsize}}static async getRecordCount(m){let y=i.getStats().entryCount,L=1e3/2,I=performance.now(),A=Math.floor(y/2),N=m?.exactCount,b=0,C=0,x;for(let{value:w}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(w!=null&&b++,C++,await Ja(),!N&&C<A&&performance.now()-I>L){x=C;break}if(x){let w=b;b=0;for(let{value:Y}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:x,snapshot:!1}))Y!=null&&b++,await Ja();let H=x*2,U=(b+w)/H,Q=Math.pow((b-w+1)/x/2,2)+U*(1-U)/H,J=Math.max(Math.sqrt(Q)*y,1),k=Math.round(U*y),Ce=Math.max(k-1.96*J,b+w),de=Math.min(k+1.96*J,y),ye=Math.pow(10,Math.round(Math.log10(J)));return ye>k&&(ye=ye/10),b=Math.round(k/ye)*ye,{recordCount:b,estimatedRange:[Math.round(Ce),Math.round(de)]}}return{recordCount:b}}static updatedAttributes(){wr=this.propertyResolvers={$id:a((m,y,L)=>({value:L.key}),"$id"),$updatedtime:a((m,y,L)=>L.version,"$updatedtime"),$record:a((m,y,L)=>L?{value:m}:m,"$record")};for(let m of this.attributes){m.isPrimaryKey&&(F=m),m.resolve=null;let y=m.relationship,L=m.computed;if(y)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),L&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),kd=!0,y.to)m.elements?.definition?(wr[m.name]=m.resolve=(I,A,N)=>{let b=I[y.from?y.from:t],C=m.elements.definition.tableClass;return N?zl({attribute:y.to,value:b},Cr(A).getReadTxn(),!1,C,!1).asArray:C.search([{attribute:y.to,value:b}],A).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,y.from&&(m.resolve.from=y.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(y.from){let I=m.definition||m.elements?.definition;I?(wr[m.name]=m.resolve=(A,N,b)=>{let C=A[y.from];if(C!==void 0){if(m.elements){let x,w=C?.map(H=>{let U=b?I.tableClass.primaryStore.getEntry(H,{transaction:Cr(N).getReadTxn()}):I.tableClass.get(H,N);return U?.then&&(x=!0),U});return y.filterMissing?x?Promise.all(w).then(H=>H.filter($z)):w.filter($z):x?Promise.all(w):w}return b?I.tableClass.primaryStore.getEntry(C,{transaction:Cr(N).getReadTxn()}):I.tableClass.get(C,N)}},m.set=(A,N)=>{if(Array.isArray(N)){let b=N.map(C=>C.getId?.()||C[I.tableClass.primaryKey]);A[y.from]=b}else{let b=N.getId?.()||N[I.tableClass.primaryKey];A[y.from]=b}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=y.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`);else L&&(typeof L.from=="function"&&this.setComputedAttribute(m.name,L.from),wr[m.name]=m.resolve=(I,A,N)=>{let b=typeof L.from=="string"?I[L.from]:I,C=this.userResolvers[m.name];if(C)return C(b,A,N);xe.default.warn(`Computed attribute "${m.name}" does not have a function assigned to it. Please use setComputedAttribute('${m.name}', resolver) to assign a resolver function.`),this.userResolvers[m.name]=()=>{}})}aE(this,this)}static setComputedAttribute(m,y){let L=pi(E,m);if(!L){console.error(`The attribute "${m}" does not exist in the table "${s}"`);return}if(!L.computed){console.error(`The attribute "${m}" is not defined as computed in the table "${s}"`);return}this.userResolvers[m]=y}static async deleteHistory(m=0,y=!1){let L;for(let{key:I,value:A}of l.getRange({start:0,end:m}))await Ja(),Ct(A).tableId===n&&(L=wT(l,I,A));if(y)for(let I of i.getRange({start:0,versions:!0})){let{key:A,value:N,localTime:b}=I;await Ja(),N===null&&b<m&&(L=Oc(i,I))}await L}static async*getHistory(m=0,y=1/0){for(let{key:L,value:I}of l.getRange({start:m||1,end:y})){await Ja();let A=Ct(I);A.tableId===n&&(yield{id:A.recordId,localTime:L,version:A.version,type:A.type,value:A.getValue(i,!0,L),user:A.user,operation:A.originatingOperation})}}static async getHistoryOfRecord(m){let y=[];if(m==null)throw new Error("An id is required");let L=i.getEntry(m);if(!L)return y;let I=L.localTime;if(!I)throw new Error("The entry does not have a local audit time");let A=0;do{await Ja();let N=l.get(I);if(N){let b=Ct(N);y.push({id:b.recordId,localTime:I,version:b.version,type:b.type,value:b.getValue(i,!0,I),user:b.user}),I=b.previousLocalTime}else break}while(A<1e3&&I);return y.reverse()}static cleanup(){z?.remove()}}De.updatedAttributes();let $d=De.prototype;return p&&De.setTTLExpiration(p/1e3),se&&Yd(),De;function Wi(K,m,y){let L;for(let I in r){let A=r[I],N=A.isIndexing,b=wr[I],C=y&&(b?b(y):y[I]),x=m&&(b?b(m):m[I]);if(C===x&&!N)continue;L=!0;let w=A.indexNulls,H=(0,ap.getIndexedValues)(C,w),U=(0,ap.getIndexedValues)(x,w);if(U?.length>0){let Q=new Set(U);if(H=H?H.filter(J=>{if(Q.has(J))Q.delete(J);else return!0}):[],U=Array.from(Q),(U.length>0||H.length>0)&&Bz){let J=U.concat(H).map(k=>({key:k,value:K}));A.prefetch(J,Gz)}for(let J=0,k=U.length;J<k;J++)A.remove(U[J],K)}else H?.length>0&&Bz&&A.prefetch(H.map(Q=>({key:Q,value:K})),Gz);if(H)for(let Q=0,J=H.length;Q<J;Q++)A.put(H[Q],K)}return L}a(Wi,"updateIndices");function Ir(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>kz)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,Bl.writeKey)(K,fSe,0)>kz)throw new Error("Primary key size is too large: "+K.length);return!0}a(Ir,"checkValidId");function Pn(K,m,y,L,I){if(De.getResidencyById&&y.ensureLoaded&&m?.replicateFrom!==!1){let N=ic(De.getResidencyById(K));if(N&&!N.includes(server.hostname)&&O)return O({key:K,residency:N}).then(I)}let A=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),y.transaction?.isDone)return I(null,K);let N=i.getEntry(K,y);return N?.residencyId&&N.metadataFlags&fn&&O&&y.ensureLoaded&&m?.replicateFrom!==!1?O(N).then(b=>I(b,K),b=>(xe.default.error?.("Error loading remote record",K,N,y,b),I(null,K))):(N&&m&&(N?.version>(m.lastModified||0)&&(m.lastModified=N.version),N?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=N.localTime)),I(N,K))},"whenPrefetched");return L?A():ie>0?(ie--,A()):new Promise((N,b)=>{ie===0?(ie--,i.prefetch([K],()=>{C(),x()})):(ne.push(K),le.push(x),ne.length>qd&&(ie--,C()));function C(){if(ne.length>0){let w=le;i.prefetch(ne,()=>{ie===-1?C():ie++;for(let H of w)H()}),ne=[],le=[],Re>2&&Re--}else ie=Re,Re<Ep&&Re++}a(C,"prefetch");function x(){try{N(A())}catch(w){b(w)}}a(x,"load")})}a(Pn,"loadLocalRecord");function nc(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return _Se;let y=m[c],L,I=y?.tables;if(I)return I[s];if(c==="data"&&(L=m[s])&&!L.tables)return L}a(nc,"getTablePermissions");function sn(K,m,y,L){if(v){let I=!1;if(y.noCache?I=!0:(m?(!m.value||m.metadataFlags&(fn|ra)||m.expiresAt!=null&&m.expiresAt<Date.now())&&(I=!0):I=!0,Yn(!I,"cache-hit",s)),I){let A=Kd(K,m,y).then(N=>(N?.value&&N?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),y&&(N?.version>(y.lastModified||0)&&(y.lastModified=N.version),y.lastRefreshed=Date.now()),N));if(y?.onlyIfCached||m?.value&&L?.allowStaleWhileRevalidate?.(m,K)){if(A.catch(N=>xe.default.warn?.(N)),y?.onlyIfCached&&!L.doesExist())throw new Nr.ServerError("Entry is not cached",504);return}else return A}}else if(m?.value&&m.expiresAt!=null&&m.expiresAt<Date.now())return De.evict(m.key,m.value,m.version),m.value=null,{then(I){return I(m)}}}a(sn,"ensureLoadedFromSource");function Cr(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let y=m.next;if(!y)return m=m.next=new _c,m.lmdbDb=i,m;m=y}while(!0)}else return new Yp}a(Cr,"txnForContext");function sc(K,m,y){if(!K)return;let L=K.value||i.getEntry(K.key)?.value;if(typeof m=="object"){let A=wr,N=L;for(let b=0,C=m.length;b<C;b++){let x=m[b],w=A?.[x];N=w&&N?w(N,y,!0)?.value:N?.[x],A=w?.definition?.tableClass?.propertyResolvers}return N}let I=wr[m];return I?I(L,y):L[m]}a(sc,"getAttributeValue");function Vd(K,m,y,L,I){let A=I?.length,N={transaction:L,lazy:A>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},b;function C(x,w){let H=x?.value;if(!H)return Xa.SKIP;for(let U=0;U<A;U++)if(!b?.includes(U)&&!I[U](H,x))return Xa.SKIP;return w!==void 0&&(x.key=w),x}if(a(C,"processEntry"),A>0||!K.hasEntries){let x=K.map(w=>{if(b=null,typeof w=="object"&&w?.key!==void 0)return A>0?C(w):w;if(w==null)return Xa.SKIP;for(let H=0;H<A;H++){let Q=I[H].idFilter;if(Q){if(!Q(w))return Xa.SKIP;b||(b=[]),b.push(H)}}return Pn(w,y,N,!1,C)});return Array.isArray(K)&&(x=x.filter(w=>w!==Xa.SKIP)),x.hasEntries=!0,x}return K}a(Vd,"transformToEntries");function Ko(K,m,y=server.replication?.getThisNodeId(l)){if(K<=m?.version){if(m?.version===K&&y!==void 0){let L=server.replication?.exportIdMapping(l),I=m.localTime,A=I&&l.get(I);if(A){let N,b,C=Ct(A);for(let x in L)L[x]===y&&(N=x),L[x]===C.nodeId&&(b=x);if(N>b)return 1;if(N===b)return 0}}return-1}return 1}a(Ko,"precedesExistingVersion");async function Kd(K,m,y){let L=m?.metadataFlags,I=m?.version,A,N;if(!i.attemptLock(K,I,()=>{clearTimeout(N);let w=i.getEntry(K);!w||!w.value||w.metadataFlags&(fn|ra)?A(Kd(K,i.getEntry(K),y)):A(w)}))return new Promise(w=>{A=w,N=setTimeout(()=>{i.unlock(K,I)},uSe)});let b=m?.value,C={requestContext:y,replacingRecord:b,replacingEntry:m,replacingVersion:I,noCacheStore:!1,source:null,resourceCache:y?.resourceCache},x=y?.responseHeaders;return new Promise((w,H)=>{let U;YC(It(C,async Q=>{let J=performance.now(),k,Ce,de;try{for(let ue of De.sources)if(ue.get&&(!ue.get.reliesOnPrototype||ue.prototype.get)){if(ue.available?.(m)===!1)continue;if(C.source=ue,k=await ue.get(K,C),k)break}de=L&fn;let Y=C.lastModified||de&&I;Ce=de||Y>I||!b,Y||(Y=(0,ap.getNextMonotonicTime)());let V=performance.now()-J;if(Dt(V,"cache-resolution",s,null,"success"),x&&TE(x,"Server-Timing",`cache-resolve;dur=${V.toFixed(2)}`,!0),Q.timestamp=Y,p&&C.expiresAt==null&&(C.expiresAt=Date.now()+p),k){if(typeof k!="object")throw new Error("Only objects can be cached and stored in tables");if(k.status>0&&k.headers)if(k.status>=300)if(k.status===304)k=b,Y=I;else throw new Nr.ServerError(k.body||"Error from source",k.status);else k=k.body;typeof k.toJSON=="function"&&(k=k.toJSON()),t&&k[t]!==K&&(k[t]=K)}U=!0,w({key:K,version:Y,value:k})}catch(Y){Y.message+=` while resolving record ${K} for ${s}`,b&&((Y.code==="ECONNRESET"||Y.code==="ECONNREFUSED"||Y.code==="EAI_AGAIN")&&!y?.mustRevalidate||y?.staleIfError&&(Y.statusCode===500||Y.statusCode===502||Y.statusCode===503||Y.statusCode===504))?(w({key:K,version:I,value:b}),xe.default.trace?.(Y.message,"(returned stale record)")):H(Y);let V=performance.now()-J;Dt(V,"cache-resolution",s,null,"fail"),x&&TE(x,"Server-Timing",`cache-resolve;dur=${V.toFixed(2)}`,!0),C.transaction.abort();return}if(y?.noCacheStore||C.noCacheStore){C.transaction.abort();return}Cr(C).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:a((Y,V)=>{if(V?.version!==I)return;let ue=Wi(K,b,k);if(k){Ae.put?.(C,K,k),V&&(y.previousResidency=De.getResidencyRecord(V.residencyId));let _e,me=!1,Te,Pe=ic(De.getResidency(k,y));if(Pe){if(!Pe.includes(server.hostname))if(_e=k,me=!0,De.getResidencyById)k=void 0;else{k=null;for(let Ve in r)k||(k={}),k[Ve]=_e[Ve]}Te=oc(Pe)}xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(Y).toISOString()}`),T(K,k,V,Y,me?fn:0,g&&(Ce||me)||null,{user:C?.user,expiresAt:C.expiresAt,residencyId:Te},"put",!!de,_e)}else V&&(Ae.delete?.(C,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(Y).toISOString()}`),g||R?T(K,null,V,Y,0,g&&Ce||null,{user:C?.user},"delete",!!de):Oc(i,V,I))},"commit")})}),()=>{i.unlock(K,I)},Q=>{i.unlock(K,I),U&&xe.default.error?.("Error committing cache update",Q)})})}a(Kd,"getFromSource");function Yo(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new Nr.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new Nr.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Yo,"checkContextPermissions");function Wo(K){let m=!1;if(K&&(K-dt>1&&(m=!0),dt=K),!(xt===Cn&&!m)&&(Cn=xt,(0,Ul.getWorkerIndex)()===(0,Ul.getWorkerCount)()-1))return nn&&clearTimeout(nn),xt?new Promise(y=>{let L=new Date;L.setMonth(0),L.setDate(1),L.setHours(0),L.setMinutes(0),L.setSeconds(0);let I=xt/(1+dt),A=m?Date.now():Math.ceil((Date.now()-L.getTime())/I)*I+L.getTime(),N=a(b=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(b)}`),nn=setTimeout(()=>q=q.then(async()=>{if(N(Math.max(b+xt,Date.now())),i.rootStore.status!=="open"){clearTimeout(nn);return}let C=50,x=new Array(C),w=0,H=Math.pow(dt,8)*(xl.get(B.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),U=S/Math.pow(Math.max(dt,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${H}, adjusted eviction ${U}ms`);function Q(J,k,Ce,de){let ye=J+U-Date.now();if(ye<0)return!0;if(dt){let Y=i.lastSize;return Ce&pn&&Zl(de,V=>{V.size&&(Y+=V.size)}),xe.default.trace?.(`shouldEvict adjusted ${ye} ${Y}, ${ye*(J-k)/Y} < ${H}`),ye*(J-k)/Y<H}return!1}a(Q,"shouldEvict");try{let J=0;for(let k of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ce,value:de,version:ye,expiresAt:Y,metadataFlags:V}=k,ue;de===null&&!g&&ye+lSe<Date.now()?ue=Oc(i,k,ye):Y!=null&&Q(Y,ye,V,de)&&(ue=De.evict(Ce,de,ye),J++),ue&&(await x[w],x[w]=ue.catch(_e=>{xe.default.error?.("Cleanup error",_e)}),++w>=C&&(w=0)),await Ja()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${J} entries`)}catch(J){xe.default.warn?.(`Error in cleanup scan for ${s}:`,J)}y(void 0),dt=0}),Math.min(b-Date.now(),2147483647)).unref()},"startNextTimer");N(A)}):void 0}a(Wo,"scheduleCleanup");function gp(){z=l?.addDeleteRemovalCallback(n,i,(K,m)=>{i.remove(K,m)})}a(gp,"addDeleteRemoval");function Yd(){(0,Ul.getWorkerIndex)()===0&&setInterval(async()=>{if(!rc){rc=!0;try{let K=se.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${se} must be indexed`);for(let y of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let L of m.getValues(y)){let I=i.getEntry(L);I?.value?I.value[K]<Date.now()&&De.evict(L,I.value,I.version):i.ifVersion(L,I?.version,()=>m.remove(y,L))}await Ja()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{rc=!1}}},cSe).unref()}a(Yd,"runRecordExpirationEviction");function ic(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 m=server.shards?.get?.(K);if(m)return xe.default.trace?.(`Shard ${K} mapped to ${m.map(y=>y.name).join(", ")}`),m.map(y=>y.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(ic,"residencyFromFunction");function oc(K){if(K){let m=K.join(","),y=f.get([Symbol.for("residency_by_set"),m]);return y||(f.put([Symbol.for("residency_by_set"),m],y=Math.floor(Math.random()*2147418112)+65535),f.put([Symbol.for("residency_by_id"),y],K),y)}}a(oc,"getResidencyId")}function KC(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 Gz(){}function hSe(e){Yz=e}function PT(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 IT(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return IT(+e);case"Float":return e==="null"?null:IT(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;pSe.test(e)||(e+="Z");let n=new Date(e);return IT(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,DT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function IT(e){if(isNaN(e))throw new SyntaxError;return e}function qz(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 YC(e,t,r){return e?.then?e.then(t,r):t(e)}function $z(e){return e!=null}function Ls(e){try{return JSON.stringify(e)}catch{return e}}function mSe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Xa,ap,Vz,Kz,xl,Nr,cp,lp,xe,Bl,Ul,DT,CT,aSe,Yz,cSe,lSe,Bz,uSe,Hz,dSe,fn,ra,fSe,kz,Fz,_Se,mve,pSe,Ja,gf=be(()=>{G();Xa=require("lmdb"),ap=M(ln()),Vz=require("lodash"),Kz=M(ff());na();Wp();xl=M(ce());vO();Nr=M(he()),cp=M(_o()),lp=M(Ks());Ue();Ef();xe=M(mi());ib();hc();Bl=require("ordered-binary"),Ul=M(st());so();DT=M(oe());ru();Ci();nE();y_();CT=M(require("node:fs"));fs();QS();aSe=new Uint8Array(9);aSe[8]=192;cSe=6e4,lSe=864e5;xl.initSync();Bz=xl.get(B.STORAGE_PREFETCHWRITES),uSe=1e4,Hz=1,dSe=2,fn=1,ra=8,fSe=Buffer.allocUnsafeSlow(8192),kz=1978,Fz=100,_Se={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},mve=(0,DT.convertToMS)(xl.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(LT,"makeTable");a(KC,"attributesAsObject");a(Gz,"noop");a(hSe,"setServerUtilities");pSe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(PT,"coerceType");a(IT,"rejectNaN");a(qz,"isDescendantId");Ja=a(()=>new Promise(setImmediate),"rest");a(YC,"when");a($z,"exists");a(Ls,"stringify");a(mSe,"hasOtherProcesses")});var at={};Be(at,{database:()=>pu,database_envs:()=>Fo,databases:()=>Ye,dropDatabase:()=>ub,dropTableMeta:()=>ASe,getDatabases:()=>Ze,getDefaultCompression:()=>Kg,getTables:()=>ESe,onRemovedDB:()=>K_,onUpdatedTable:()=>il,readMetaDb:()=>up,resetDatabases:()=>td,table:()=>_t,tables:()=>Kn});function ESe(){return xT||Ze(),Kn||{}}function Ze(){if(xT)return Ye;xT=!0,xd=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,vt.join)((0,Zt.getHdbBasePath)(),cc),t=(0,Zt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(B.STORAGE_PATH)||e&&((0,rs.existsSync)(e)?e:(0,vt.join)((0,Zt.getHdbBasePath)(),Op)),!e)return;if((0,rs.existsSync)(e))for(let n of(0,rs.readdirSync)(e,{withFileTypes:!0})){let s=(0,vt.basename)(n.name,".mdb");n.isFile()&&(0,vt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&up((0,vt.join)(e,n.name),null,s)}if((0,rs.existsSync)((0,Ud.getBaseSchemaPath)())){for(let n of(0,rs.readdirSync)((0,Ud.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,vt.join)((0,Ud.getBaseSchemaPath)(),n.name),i=(0,vt.join)((0,Ud.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,rs.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,vt.extname)(o.name).toLowerCase()===".mdb"){let c=(0,vt.join)(i,o.name);up((0,vt.join)(s,o.name),(0,vt.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,rs.existsSync)(i))for(let c of(0,rs.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,vt.extname)(c.name).toLowerCase()===".mdb"&&up((0,vt.join)(i,c.name),(0,vt.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,vt.join)(l.path,(0,vt.basename)(c+".mdb"));(0,rs.existsSync)(u)&&up(u,c,n,null,!0)}}for(let n in Ye){let s=xd.get(n);if(s){let i=Ye[n];n.includes("delete")&&Ut.trace(`defined tables ${Array.from(s.keys())}`);for(let o in i)s.has(o)||(Ut.trace(`delete table class ${o}`),delete i[o])}else if(delete Ye[n],n==="data"){for(let i in Kn)delete Kn[i];delete Kn[BT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if(Ye.system)for(let n of r)Ye.system[n]&&(Ye.system[n].replicate=!1);return xd=null,Ye}function td(){xT=!1;for(let[,e]of Fo)e.needsDeletion=!0;Ze();for(let[e,t]of Fo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Fo.delete(e),delete Ye[t.databaseName],fp.forEach(r=>r(t.databaseName)));return Ye}function up(e,t,r=jC,n,s){let i=new WC.default(e,!1);try{let o=Fo.get(e);o?o.needsDeletion=!1:(o=(0,Bd.open)(i),Fo.set(e,o));let c=new Hl.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(MT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,rs.existsSync)(n)&&(i.path=n,u=(0,Bd.open)(i),u.isLegacy=!0):u=NT(o));let f=Qz(r),d=f[BT],h=new Map;for(let{key:_,value:p}of l.getRange({start:!1})){let[S,g]=_.toString().split("/");g===""?g=p.name:g||(g=S,S=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),d?.add(S);let R=h.get(S);R||h.set(S,R={attributes:[]}),(g==null||p.is_hash_attribute)&&(R.primary=p),g!=null&&R.attributes.push(p),Object.defineProperty(p,"key",{value:_,configurable:!0})}for(let[_,p]of h){let{attributes:S,primary:g}=p;if(!g){for(let ie of S)if(ie.is_hash_attribute||ie.isPrimaryKey){g=ie;break}if(!g){Ut.warn(`Unable to find a primary key attribute on table ${_}, with attributes: ${JSON.stringify(S)}`);continue}}let R=f[_],E={},T=[],O,v,F=typeof g.audit=="boolean"?g.audit:(0,Zt.get)(B.LOGGING_AUDITLOG),q=g.trackDeletes,j=g.expiration,te=g.eviction,se=g.sealed,z=g.splitSegments,ne=g.replicate;if(R)E=R.indices,T=R.attributes,R.schemaVersion++;else{O=g.tableId,O?O>=(l.get(vd)||0)&&(l.putSync(vd,O+1),Ut.info(`Updating next table id (it was out of sync) to ${O+1} for ${_}`)):(g.tableId=O=l.get(vd),O||(O=1),Ut.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(vd,O+1),l.putSync(g.key,g));let ie=new Hl.default(!g.is_hash_attribute,g.is_hash_attribute);if(ie.compression=g.compression,ie.compression){let Re=(0,Zt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||jz;ie.compression.threshold=Re}v=Am(o.openDB(g.key,ie),o),o.databaseName=r,v.tableId=O}let le;for(let ie of S){ie.attribute=ie.name;try{if(!ie.is_hash_attribute&&(ie.indexed||ie.attribute&&!ie.name)){if(!E[ie.name]){let pe=new Hl.default(!ie.is_hash_attribute,ie.is_hash_attribute);E[ie.name]=o.openDB(ie.key,pe),E[ie.name].indexNulls=ie.indexNulls}let Re=T.find(pe=>pe.name===ie.name);Re?T.splice(T.indexOf(Re),1,ie):T.push(ie),le=!0}}catch(Re){Ut.error("Error trying to update attribute",ie,T,E,Re)}}for(let ie of T)if(!S.find(pe=>pe.name===ie.name)){if(ie.is_hash_attribute){Ut.error("Unable to remove existing primary key attribute",ie);continue}ie.indexed&&(T.splice(T.indexOf(ie),1),le=!0)}if(R)le&&(R.schemaVersion++,R.updatedAttributes());else{R=Jz(f,_,LT({primaryStore:v,auditStore:u,audit:F,sealed:se,splitSegments:z,replicate:ne,expirationMS:j&&j*1e3,evictionMS:te&&te*1e3,trackDeletes:q,tableName:_,tableId:O,primaryKey:g.name,databasePath:s?r+"/"+_:r,databaseName:r,indices:E,attributes:S,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let ie of dp)ie(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Qz(e){let t=Ye[e];if(t||(e==="data"?t=Ye[e]=Kn:e==="system"?Object.defineProperty(Ye,"system",{value:t=Object.create(null),configurable:!0}):t=Ye[e]=Object.create(null)),xd&&!xd.has(e)){let r=new Set;t[BT]=r,xd.set(e,r)}return t}function Jz(e,t,r){return e[t]=r,r}function pu({database:e,table:t}){e||(e=jC),Ze();let r=Qz(e),n=(0,vt.join)((0,Zt.getHdbBasePath)(),cc),s=(0,Zt.get)(B.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)(B.STORAGE_PATH)||((0,rs.existsSync)(n)?n:(0,vt.join)((0,Zt.getHdbBasePath)(),Op));let o=(0,vt.join)(n,(i?t:e)+".mdb"),c=Fo.get(o);if(!c||c.status==="closed"){let l=new WC.default(o,!1);c=(0,Bd.open)(l),Fo.set(o,c)}return c.auditStore||(c.auditStore=NT(c)),c}async function ub(e){if(!Ye[e])throw new Error("Schema does not exist");let t=Ye[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Fo.delete(r.path),r.status==="open"&&(await r.close(),await _p.remove(r.path));if(r||(r=pu({database:e,table:null}),r.status==="open"&&(await r.close(),await _p.remove(r.path))),e==="data"){for(let n in Kn)delete Kn[n];delete Kn[BT]}delete Ye[e],fp.forEach(n=>n(e)),await jA(r)}function _t(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,schemaDefined:h,origin:_}=e;r||(r=jC);let p=pu({database:r,table:t}),S=Ye[r];Ut.trace(`Defining ${t} in ${r}`);let g=S?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,E,T;h==null&&(h=!0);let O=new Hl.default(!1);for(let z of o)z.attribute&&!z.name?(z.name=z.attribute,z.indexed=!0):z.attribute=z.name,z.expiresAt&&(z.indexed=!0);let v,F;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let z=p.auditStore;E=o.find(Re=>Re.isPrimaryKey)||{},R=E.name,E.is_hash_attribute=E.isPrimaryKey=!0,E.schemaDefined=h,E.compression=Kg(),d&&(E.trackDeletes=!0),c=E.audit=typeof c=="boolean"?c:(0,Zt.get)(B.LOGGING_AUDITLOG),n&&(E.expiration=n),s&&(E.eviction=s),u??=!1,E.splitSegments=u,typeof l=="boolean"&&(E.sealed=l),typeof f=="boolean"&&(E.replicate=f),_&&(E.origins?E.origins.includes(_)||E.origins.push(_):E.origins=[_]),Ut.trace(`${t} table loading, opening primary store`);let ne=new Hl.default(!1,!0);ne.compression=E.compression;let le=t+"/";if(T=p.dbisDb=p.openDB(MT.INTERNAL_DBIS_NAME,O),se(),T.get(le))return F&&F(),td(),_t(e);let ie=Am(p.openDB(le,ne),p);p.databaseName=r,ie.tableId=T.get(vd),Ut.trace(`Assigning new table id ${ie.tableId} for ${t}`),ie.tableId||(ie.tableId=1),T.put(vd,ie.tableId+1),E.tableId=ie.tableId,g=Jz(S,t,LT({primaryStore:ie,auditStore:z,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:ie.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:h,dbisDB:T})),g.schemaVersion=1,v=!0,T.put(le,E)}let q=g.indices;T=T||(p.dbisDb=p.openDB(MT.INTERNAL_DBIS_NAME,O)),g.dbisDB=T;let j=[];for(let{key:z,value:ne}of T.getRange({start:!0})){let[le,ie]=z.toString().split("/");if(ie===""&&(ie=ne.name),ie){if(le!==t)continue}else continue;let Re=o.find(Ae=>Ae.name===ie),pe=!Re?.indexed&&ne.indexed&&!ne.isPrimaryKey;if((!Re||pe)&&(se(),v=!0,Re||T.remove(z),pe)){let Ae=g.indices[le];Ae&&j.push(Ae)}}let te=[];try{for(let z of o||[]){if((z.relationship||z.computed)&&(v=!0,z.relationship))continue;let ne=t+"/"+(z.name||"");Object.defineProperty(z,"key",{value:ne,configurable:!0});let le=T.get(ne);if(z.isPrimaryKey){if(le=le||T.get(ne=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||f!==void 0&&f!==g.replicate||(+n||void 0)!==(+le.expiration||void 0)||(+s||void 0)!==(+le.eviction||void 0)||z.type!==le.type){let Re={...le};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),f!==void 0&&(Re.replicate=f),z.type&&(Re.type=z.type),v=!0,se(),T.put(ne,Re)}continue}le?.attribute&&!le.name&&(le.indexed=!0);let ie=!le||le.type!==z.type||le.indexed!==z.indexed||le.nullable!==z.nullable||le.version!==z.version||JSON.stringify(le.properties)!==JSON.stringify(z.properties)||JSON.stringify(le.elements)!==JSON.stringify(z.elements);if(z.indexed){let Re=new Hl.default(!0,!1),pe=p.openDB(ne,Re);(ie||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<hp.workerData?.restartNumber)&&(v=!0,se(),le=T.get(ne),(ie||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<hp.workerData?.restartNumber)&&(v=!0,z.indexNulls===void 0&&(z.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(z.lastIndexedKey=le?.lastIndexedKey??void 0,z.indexingPID=process.pid,pe.isIndexing=!0,Object.defineProperty(z,"dbi",{value:pe}),te.push(z))),T.put(ne,z)),le?.indexNulls&&z.indexNulls===void 0&&(z.indexNulls=!0),pe.indexNulls=z.indexNulls,q[z.name]=pe}else ie&&(v=!0,se(),T.put(ne,z))}}finally{F&&F()}if(v&&(g.schemaVersion++,g.updatedAttributes()),Ut.trace(`${t} table loading, running index`),te.length>0||j.length>0?g.indexingOperation=TSe(g,te,j):v&&vT.signalSchemaChange(new UT.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=_,v)for(let z of dp)z(g,_!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Ut.trace(`${t} table loaded`),g;function se(){F||p.transactionSync(()=>({then(z){F=z}}))}a(se,"startTxn")}async function TSe(e,t,r){try{Ut.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await vT.signalSchemaChange(new UT.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 d of t)(0,Bd.compareKeys)(d.lastIndexedKey,u)<0&&(u=d.lastIndexedKey),d.lastIndexedKey==null&&d.dbi.clearAsync();let f=0;for(let{key:d,value:h,version:_}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(h){if(f++,s=e.primaryStore.ifVersion(d,_,()=>{for(let p=0;p<l;p++){let S=t[p],g=S.name;try{let R=S.resolve,E=h&&(R?R(h):h[g]),T=(0,Wz.getIndexedValues)(E);if(T)for(let O=0,v=T.length;O<v;O++)S.dbi.put(T[O],d)}catch(R){o[g]||(o[g]=!0,Ut.error(`Error indexing attribute ${g}`,R))}}}),s.then(()=>f--,p=>{f--,Ut.error(p)}),hp.workerData&&hp.workerData.restartNumber!==zz.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=d,e.dbisDB.put(p.key,p);if(i)return}f>gSe?await s:f>SSe&&await new Promise(p=>setImmediate(p))}for(let d of t)delete d.lastIndexedKey,delete d.indexingPID,d.dbi.isIndexing=!1,s=e.dbisDB.put(d.key,d)}await s,await vT.signalSchemaChange(new UT.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Ut.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Ut.error("Error in indexing",n)}}function ASe({table:e,database:t}){let r=pu({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 il(e){return dp.push(e),{remove(){let t=dp.indexOf(e);t>-1&&dp.splice(t,1)}}}function K_(e){return fp.push(e),{remove(){let t=fp.indexOf(e);t>-1&&fp.splice(t,1)}}}function Kg(){let e=(0,Zt.get)(B.STORAGE_COMPRESSION),t=(0,Zt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Zt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||jz,n={startingOffset:32};return t&&(n.dictionary=_p.readFileSync(t)),r&&(n.threshold=r),e&&n}var Zt,MT,Bd,vt,rs,Ud,Hl,WC,_p,zC,Wz,vT,UT,hp,Ut,zz,jC,BT,jz,Kn,Ye,vd,dp,fp,xT,Fo,xd,gSe,SSe,Ue=be(()=>{Zt=M(ce()),MT=M(Ft()),Bd=require("lmdb"),vt=require("path"),rs=require("fs"),Ud=M(gt());gf();Hl=M(Uf()),WC=M(xf());G();_p=M(require("fs-extra")),zC=M(ui()),Wz=M(ln()),vT=M(_o()),UT=M(Ks()),hp=require("worker_threads"),Ut=M(X()),zz=M(st());so();ru();fs();jC="data",BT=Symbol("defined-tables"),jz=((0,Zt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Zt.initSync)();Kn=Object.create(null),Ye=Object.create(null);(0,zC._assignPackageExport)("databases",Ye);(0,zC._assignPackageExport)("tables",Kn);vd=Symbol.for("next-table-id"),dp=[],fp=[],Fo=new Map;a(ESe,"getTables");a(Ze,"getDatabases");a(td,"resetDatabases");a(up,"readMetaDb");a(Qz,"ensureDB");a(Jz,"setTable");a(pu,"database");a(ub,"dropDatabase");a(_t,"table");gSe=1e3,SSe=10;a(TSe,"runIndexing");a(ASe,"dropTableMeta");a(il,"onUpdatedTable");a(K_,"onRemovedDB");a(Kg,"getDefaultCompression")});var oe=P((wve,dj)=>{"use strict";var Za=require("path"),rj=require("fs-extra"),In=X(),Xz=require("fs-extra"),HT=require("os"),RSe=require("net"),ySe=require("recursive-iterator"),Ar=(G(),D($)),{PACKAGE_ROOT:bSe}=Et(),OSe=pA(),Zz=require("papaparse"),kT=require("moment"),{inspect:NSe}=require("util"),ej=require("is-number"),Nve=require("lodash"),wSe=require("minimist"),ISe=require("https"),CSe=require("http"),{hdb_errors:FT}=he(),PSe=/^((\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)))$/,nj=require("util").promisify(setTimeout),DSe=100,LSe=5,MSe="",vSe=4,tj={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};dj.exports={isEmpty:ns,isEmptyOrZeroLength:Yi,arrayHasEmptyValues:BSe,arrayHasEmptyOrZeroLengthValues:HSe,buildFolderPath:kSe,isBoolean:sj,errorizeMessage:USe,stripFileExtension:GSe,autoCast:qSe,autoCastJSON:ij,autoCastJSONDeep:JC,removeDir:$Se,compareVersions:VSe,isCompatibleDataVersion:KSe,escapeRawValue:YSe,unescapeValue:WSe,stringifyProps:zSe,timeoutPromise:QSe,isClusterOperation:XSe,getClusterUser:eTe,checkGlobalSchemaTable:ZSe,getHomeDir:aj,getPropsFilePath:jSe,promisifyPapaParse:tTe,removeBOM:cj,createEventPromise:rTe,checkProcessRunning:nTe,checkSchemaTableExist:sTe,checkSchemaExists:lj,checkTableExists:uj,getStartOfTomorrowInSeconds:iTe,getLimitKey:oTe,isObject:FSe,isNotEmptyAndHasValue:xSe,autoCasterIsNumberCheck:oj,backtickASTSchemaItems:aTe,isPortTaken:JSe,createForkArgs:cTe,autoCastBoolean:lTe,async_set_timeout:nj,getTableHashAttribute:uTe,doesSchemaExist:dTe,doesTableExist:fTe,stringifyObj:_Te,ms_to_time:hTe,changeExtension:pTe,getEnvCliRootPath:XC,noBootFile:mTe,httpRequest:ETe,transformReq:gTe,convertToMS:STe,PACKAGE_ROOT:bSe};function USe(e){return e instanceof Error?e:new Error(e)}a(USe,"errorizeMessage");function ns(e){return e==null}a(ns,"isEmpty");function xSe(e){return!ns(e)&&(e||e===0||e===""||sj(e))}a(xSe,"isNotEmptyAndHasValue");function Yi(e){return ns(e)||e.length===0||e.size===0}a(Yi,"isEmptyOrZeroLength");function BSe(e){if(ns(e))return!0;for(let t=0;t<e.length;t++)if(ns(e[t]))return!0;return!1}a(BSe,"arrayHasEmptyValues");function HSe(e){if(Yi(e))return!0;for(let t=0;t<e.length;t++)if(Yi(e[t]))return!0;return!1}a(HSe,"arrayHasEmptyOrZeroLengthValues");function kSe(...e){try{return e.join(Za.sep)}catch{console.error(e)}}a(kSe,"buildFolderPath");function sj(e){return ns(e)?!1:e===!0||e===!1}a(sj,"isBoolean");function FSe(e){return ns(e)?!1:typeof e=="object"}a(FSe,"isObject");function GSe(e){return Yi(e)?MSe:e.slice(0,-vSe)}a(GSe,"stripFileExtension");function qSe(e){return ns(e)||e===""||typeof e!="string"?e:tj[e]!==void 0?tj[e]:oj(e)===!0?Number(e):PSe.test(e)?new Date(e):e}a(qSe,"autoCast");function ij(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(ij,"autoCastJSON");function JC(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=JC(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=JC(r);n!==r&&(e[t]=n)}return e}else return ij(e)}a(JC,"autoCastJSONDeep");function oj(e){if(e.startsWith("0.")&&ej(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&ej(e))}a(oj,"autoCasterIsNumberCheck");async function $Se(e){if(Yi(e))throw new Error(`Directory path: ${e} does not exist`);try{await Xz.emptyDir(e),await Xz.remove(e)}catch(t){throw In.error(`Error removing files in ${e} -- ${t}`),t}}a($Se,"removeDir");function VSe(e,t){if(Yi(e)){In.info("Invalid current version sent as parameter.");return}if(Yi(t)){In.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(VSe,"compareVersions");function KSe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(KSe,"isCompatibleDataVersion");function YSe(e){if(ns(e))return e;let t=String(e);return t==="."?Ar.UNICODE_PERIOD:t===".."?Ar.UNICODE_PERIOD+Ar.UNICODE_PERIOD:t.replace(Ar.FORWARD_SLASH_REGEX,Ar.UNICODE_FORWARD_SLASH)}a(YSe,"escapeRawValue");function WSe(e){if(ns(e))return e;let t=String(e);return t===Ar.UNICODE_PERIOD?".":t===Ar.UNICODE_PERIOD+Ar.UNICODE_PERIOD?"..":String(e).replace(Ar.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(WSe,"unescapeValue");function zSe(e,t){if(ns(e))return In.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+HT.EOL}!Yi(n)&&n[0]===";"?r+=" "+n+s+HT.EOL:Yi(n)||(r+=n+"="+s+HT.EOL)}catch{In.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(zSe,"stringifyProps");function aj(){let e;try{e=HT.homedir()}catch{e=process.env.HOME}return e}a(aj,"getHomeDir");function jSe(){let e=Za.join(aj(),Ar.HDB_HOME_DIR_NAME,Ar.BOOT_PROPS_FILE_NAME);return rj.existsSync(e)||(e=Za.join(__dirname,"../","hdb_boot_properties.file")),e}a(jSe,"getPropsFilePath");function QSe(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(QSe,"timeoutPromise");async function JSe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=RSe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(JSe,"isPortTaken");function XSe(e){try{return Ar.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){In.error(`Error checking operation against cluster ops ${t}`)}return!1}a(XSe,"isClusterOperation");function ZSe(e,t){let r=(Ue(),D(at)).getDatabases();if(!r[e])return FT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return FT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(ZSe,"checkGlobalSchemaTable");function eTe(e,t){if(ns(t)){In.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ns(e)||Yi(e)){In.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){In.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){In.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(eTe,"getClusterUser");function tTe(){Zz.parsePromise=function(e,t,r){return new Promise(function(n,s){Zz.parse(e,{header:!0,transformHeader:cj,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(tTe,"promisifyPapaParse");function cj(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(cj,"removeBOM");function rTe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;In.info(`Got cluster status event response: ${NSe(s)}`);try{i.cancel()}catch{In.error("Error trying to cancel timeout.")}n(s)})})}a(rTe,"createEventPromise");async function nTe(e){let t=!0,r=0;do await nj(DSe*r++),(await OSe.findPs(e)).length>0&&(t=!1);while(t&&r<LSe);if(t)throw new Error(`process ${e} was not started`)}a(nTe,"checkProcessRunning");function sTe(e,t){let r=lj(e);if(r)return r;let n=uj(e,t);if(n)return n}a(sTe,"checkSchemaTableExist");function lj(e){let{getDatabases:t}=(Ue(),D(at));if(!t()[e])return FT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(lj,"checkSchemaExists");function uj(e,t){let{getDatabases:r}=(Ue(),D(at));if(!r()[e][t])return FT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(uj,"checkTableExists");function iTe(){let e=kT().utc().add(1,"d").startOf("d").unix(),t=kT().utc().unix();return e-t}a(iTe,"getStartOfTomorrowInSeconds");function oTe(){return kT().utc().format("DD-MM-YYYY")}a(oTe,"getLimitKey");function aTe(e){try{let t=new ySe(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){In.error("Got an error back ticking items."),In.error(t)}}a(aTe,"backtickASTSchemaItems");function cTe(e){return[e]}a(cTe,"createForkArgs");function lTe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(lTe,"autoCastBoolean");function uTe(e,t){let{getDatabases:r}=(Ue(),D(at)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(uTe,"getTableHashAttribute");function dTe(e){let{getDatabases:t}=(Ue(),D(at));return t()[e]!==void 0}a(dTe,"doesSchemaExist");function fTe(e,t){let{getDatabases:r}=(Ue(),D(at));return r()[e]?.[t]!==void 0}a(fTe,"doesTableExist");function _Te(e){try{return JSON.stringify(e)}catch{return e}}a(_Te,"stringifyObj");function hTe(e){let t=kT.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(hTe,"ms_to_time");function pTe(e,t){let r=Za.basename(e,Za.extname(e));return Za.join(Za.dirname(e),r+t)}a(pTe,"changeExtension");function XC(){if(process.env[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=wSe(process.argv);if(e[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(XC,"getEnvCliRootPath");var QC;function mTe(){if(QC)return QC;let e=XC();if(XC()&&rj.pathExistsSync(Za.join(e,Ar.HDB_CONFIG_FILE)))return QC=!0,!0}a(mTe,"noBootFile");function ETe(e,t){let r;return e.protocol==="http:"?r=CSe:r=ISe,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(ETe,"httpRequest");function gTe(e){if(!e.schema&&!e.database){e.schema=Ar.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(gTe,"transformReq");function STe(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(STe,"convertToMS")});var Ej=P((Cve,mj)=>{"use strict";var ss=ce(),TTe=Ju(),qe=(G(),D($)),pp=Pt(),Go=require("path"),{PACKAGE_ROOT:qT}=Et(),fj=ce(),GT=oe(),Hd="/dev/null",ATe=Go.join(qT,"launchServiceScripts"),_j=Go.join(qT,"utility/scripts"),RTe=Go.join(_j,qe.HDB_RESTART_SCRIPT),hj=Go.resolve(qT,"dependencies",`${process.platform}-${process.arch}`,pp.NATS_BINARY_NAME);function pj(){let t=TTe.licenseSearch().ram_allocation||qe.RAM_ALLOCATION_ENUM.DEFAULT,r=qe.MEM_SETTING_KEY+t,n={[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return GT.noBootFile()&&(n[qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=GT.getEnvCliRootPath()),{name:qe.PROCESS_DESCRIPTORS.HDB,script:qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:qT}}a(pj,"generateMainServerConfig");var yTe=9930;function bTe(){ss.initSync(!0);let e=ss.get(qe.CONFIG_PARAMS.ROOTPATH),t=Go.join(e,"clustering",pp.NATS_CONFIG_FILES.HUB_SERVER),r=Go.join(ss.get(qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),qe.LOG_NAMES.HDB),n=fj.get(qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=pp.LOG_LEVEL_FLAGS[ss.get(qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==yTe?"-"+n:""),script:hj,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ss.get(qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Hd,i.error_file=Hd),i}a(bTe,"generateNatsHubServerConfig");var OTe=9940;function NTe(){ss.initSync(!0);let e=ss.get(qe.CONFIG_PARAMS.ROOTPATH),t=Go.join(e,"clustering",pp.NATS_CONFIG_FILES.LEAF_SERVER),r=Go.join(ss.get(qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),qe.LOG_NAMES.HDB),n=fj.get(qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=pp.LOG_LEVEL_FLAGS[ss.get(qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==OTe?"-"+n:""),script:hj,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ss.get(qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Hd,i.error_file=Hd),i}a(NTe,"generateNatsLeafServerConfig");function wTe(){ss.initSync();let e=Go.join(ss.get(qe.CONFIG_PARAMS.LOGGING_ROOT),qe.LOG_NAMES.HDB),t={name:qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:ATe,autorestart:!1};return ss.get(qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Hd,t.error_file=Hd),t}a(wTe,"generateClusteringUpgradeV4ServiceConfig");function ITe(){let e={[qe.PROCESS_NAME_ENV_PROP]:qe.PROCESS_DESCRIPTORS.RESTART_HDB};return GT.noBootFile()&&(e[qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=GT.getEnvCliRootPath()),{...{name:qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:_j},script:RTe}}a(ITe,"generateRestart");function CTe(){return{apps:[pj()]}}a(CTe,"generateAllServiceConfigs");mj.exports={generateAllServiceConfigs:CTe,generateMainServerConfig:pj,generateRestart:ITe,generateNatsHubServerConfig:bTe,generateNatsLeafServerConfig:NTe,generateClusteringUpgradeV4ServiceConfig:wTe}});var sd=P((Lve,Dj)=>{"use strict";var rt=(G(),D($)),PTe=oe(),$o=qg(),$T=Er(),qo=Pt(),ec=Ej(),VT=ce(),kl=X(),DTe=Ao(),{startWorker:gj,onMessageFromWorkers:LTe}=st(),MTe=Ku(),Dve=require("util"),vTe=require("child_process"),UTe=require("fs"),{execFile:xTe}=vTe,Qe;Dj.exports={enterPM2Mode:BTe,start:tc,stop:ZC,reload:Tj,restart:Aj,list:eP,describe:bj,connect:Vo,kill:qTe,startAllServices:$Te,startService:tP,getUniqueServicesList:Oj,restartAllServices:VTe,isServiceRegistered:Nj,reloadStopStart:wj,restartHdb:yj,deleteProcess:FTe,startClusteringProcesses:Cj,startClusteringThreads:Pj,isHdbRestartRunning:GTe,isClusteringRunning:YTe,stopClustering:KTe,reloadClustering:WTe,expectedRestartOfChildren:Rj};var mp=!1;LTe(e=>{e.type==="restart"&&VT.initSync(!0)});function BTe(){mp=!0}a(BTe,"enterPM2Mode");function Vo(){return Qe||(Qe=require("pm2")),new Promise((e,t)=>{Qe.connect((r,n)=>{r&&t(r),e(n)})})}a(Vo,"connect");var rn,HTe=10,Sj;function tc(e,t=!1){if(mp)return kTe(e);let r=xTe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=rn.indexOf(r);o>-1&&rn.splice(o,1),!Sj&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<HTe&&(UTe.existsSync($o.getHubConfigPath())?tc(e):(await $o.generateNatsConfig(!0),tc(e),await new Promise(c=>setTimeout(c,3e3)),await $o.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await $o.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=VT.get(rt.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,f;for(;l=c.exec(i);){if(l.index&&qo.LOG_LEVEL_HIERARCHY[o]>=qo.LOG_LEVEL_HIERARCHY[f||"info"]){let _=f===qo.LOG_LEVELS.ERR||f===qo.LOG_LEVELS.WRN?kl.OUTPUTS.STDERR:kl.OUTPUTS.STDOUT;kl.logCustomLevel(f||"info",_,n,i.slice(u,l.index).trim())}let[d,h]=l;u=l.index+d.length,f=qo.LOG_LEVELS[h]}if(qo.LOG_LEVEL_HIERARCHY[o]>=qo.LOG_LEVEL_HIERARCHY[f||"info"]){let d=f===qo.LOG_LEVELS.ERR||f===qo.LOG_LEVELS.WRN?kl.OUTPUTS.STDERR:kl.OUTPUTS.STDOUT;kl.logCustomLevel(f||"info",d,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!rn&&(rn=[],!t)){let i=a(()=>{Sj=!0,rn&&(rn.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}rn.push(r)}a(tc,"start");function kTe(e){return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}Qe.start(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(kTe,"startWithPM2");function ZC(e){if(!mp){for(let t of rn||[])t.name===e&&(rn.splice(rn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}Qe.stop(e,async(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.delete(e,(i,o)=>{i&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(o)})})})}a(ZC,"stop");function Tj(e){return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}Qe.reload(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(Tj,"reload");function Aj(e){if(!mp){Rj();for(let t of rn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}Qe.restart(e,(n,s)=>{Qe.disconnect(),t(s)})})}a(Aj,"restart");function Rj(){for(let e of rn||[])e.config&&(e.config.restarts=0)}a(Rj,"expectedRestartOfChildren");function FTe(e){return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}Qe.delete(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(FTe,"deleteProcess");async function yj(){await tc(ec.generateRestart())}a(yj,"restartHdb");async function GTe(){let e=await eP();for(let t in e)if(e[t].name===rt.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(GTe,"isHdbRestartRunning");function eP(){return new Promise(async(e,t)=>{try{await Vo()}catch(r){t(r)}Qe.list((r,n)=>{r&&(Qe.disconnect(),t(r)),Qe.disconnect(),e(n)})})}a(eP,"list");function bj(e){return new Promise(async(t,r)=>{try{await Vo()}catch(n){r(n)}Qe.describe(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(bj,"describe");function qTe(){if(!mp){for(let e of rn||[])e.kill();rn=[];return}return new Promise(async(e,t)=>{try{await Vo()}catch(r){t(r)}Qe.killDaemon((r,n)=>{r&&(Qe.disconnect(),t(r)),Qe.disconnect(),e(n)})})}a(qTe,"kill");async function $Te(){try{await Cj(),await Pj(),await tc(ec.generateAllServiceConfigs())}catch(e){throw Qe?.disconnect(),e}}a($Te,"startAllServices");async function tP(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case rt.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ec.generateMainServerConfig();break;case rt.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ec.generateNatsIngestServiceConfig();break;case rt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ec.generateNatsReplyServiceConfig();break;case rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ec.generateNatsHubServerConfig(),await tc(r,t),await $o.removeNatsConfig(e);return;case rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ec.generateNatsLeafServerConfig(),await tc(r,t),await $o.removeNatsConfig(e);return;case rt.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ec.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await tc(r)}catch(r){throw Qe?.disconnect(),r}}a(tP,"startService");async function Oj(){try{let e=await eP(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Qe?.disconnect(),e}}a(Oj,"getUniqueServicesList");async function VTe(e=[]){try{let t=!1,r=await Oj();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===rt.PROCESS_DESCRIPTORS.HDB?t=!0:await Aj(o))}t&&await wj(rt.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Qe?.disconnect(),t}}a(VTe,"restartAllServices");async function Nj(e){if(rn?.find(r=>r.name===e))return!0;let t=await MTe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Nj,"isServiceRegistered");async function wj(e){let t=VT.get(rt.CONFIG_PARAMS.THREADS_COUNT)??VT.get(rt.CONFIG_PARAMS.THREADS),r=await bj(e),n=PTe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await ZC(e),await tP(e)):e===rt.PROCESS_DESCRIPTORS.HDB?await yj():await Tj(e)}a(wj,"reloadStopStart");var Ij;async function Cj(e=!1){for(let t in rt.CLUSTERING_PROCESSES){let r=rt.CLUSTERING_PROCESSES[t];await tP(r,e)}}a(Cj,"startClusteringProcesses");async function Pj(){Ij=gj(rt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:rt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await $T.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await $T.updateLocalStreams();let e=await DTe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===rt.PRE_4_0_0_VERSION){kl.info("Starting clustering upgrade 4.0.0 process"),gj(rt.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(Pj,"startClusteringThreads");async function KTe(){for(let e in rt.CLUSTERING_PROCESSES)if(e!==rt.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===rt.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await Ij.terminate();else{let t=rt.CLUSTERING_PROCESSES[e];await ZC(t)}}a(KTe,"stopClustering");async function YTe(){for(let e in rt.CLUSTERING_PROCESSES){let t=rt.CLUSTERING_PROCESSES[e];if(await Nj(t)===!1)return!1}return!0}a(YTe,"isClusteringRunning");async function WTe(){await $o.generateNatsConfig(!0),await $T.reloadNATSHub(),await $T.reloadNATSLeaf(),await $o.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await $o.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(WTe,"reloadClustering")});var rP=sd(),Lj=(G(),D($));a(async function(){try{let t=await rP.describe(Lj.PROCESS_DESCRIPTORS.HDB);for(let r of t)await rP.reload(r.pm_id);await rP.deleteProcess(Lj.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();