harperdb 4.7.0-alpha.3 → 4.7.0-alpha.4
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.
- package/README.md +1 -1
- package/bin/harperdb.js +27 -27
- package/bin/lite.js +25 -25
- package/json/systemSchema.json +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +26 -26
- package/launchServiceScripts/launchNatsReplyService.js +25 -25
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +26 -26
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/resources/usageLicensing.d.ts +5 -2
- package/server/jobs/jobProcess.js +25 -25
- package/server/threads/threadServer.js +24 -24
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.eedb02ca.js → main.f4d40c30.js} +2 -2
- package/utility/scripts/restartHdb.js +25 -25
- /package/studio/build-local/static/js/{main.eedb02ca.js.LICENSE.txt → main.f4d40c30.js.LICENSE.txt} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var TX=Object.create;var rm=Object.defineProperty;var yX=Object.getOwnPropertyDescriptor;var RX=Object.getOwnPropertyNames;var AX=Object.getPrototypeOf,bX=Object.prototype.hasOwnProperty;var o=(e,t)=>rm(e,"name",{value:t,configurable:!0});var ie=(e,t)=>()=>(e&&(t=e(e=0)),t);var v=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var r in t)rm(e,r,{get:t[r],enumerable:!0})},ZM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of RX(t))!bX.call(e,s)&&s!==r&&rm(e,s,{get:()=>t[s],enumerable:!(n=yX(t,s))||n.enumerable});return e};var I=(e,t,r)=>(r=e!=null?TX(AX(e)):{},ZM(t||!e||!e.__esModule?rm(r,"default",{value:e,enumerable:!0}):r,e)),M=e=>ZM(rm({},"__esModule",{value:!0}),e);var yt=v((LNe,rv)=>{var{join:IX,dirname:ev}=require("node:path"),{existsSync:wX,readFileSync:NX}=require("node:fs");function CX(){let t=__dirname,r,n=0;for(;!wX(r=IX(t,"package.json"));)if(t===(t=ev(t))||n++>10)throw new Error("Could not find package root");return r}o(CX,"findPackageJson");var tv=CX(),OX=JSON.parse(NX(tv,"utf8")),PX=ev(tv);rv.exports={packageJson:OX,PACKAGE_ROOT:PX}});var W={};be(W,{AUTH_AUDIT_STATUS:()=>ci,AUTH_AUDIT_TYPES:()=>Na,BOOT_PROPS_FILE_NAME:()=>e6,BOOT_PROP_PARAMS:()=>iv,CLUSTERING_FLAG:()=>AA,CLUSTERING_PROCESSES:()=>HX,CLUSTER_MESSAGE_TYPE_ENUM:()=>RA,CLUSTER_OPERATIONS:()=>E6,CONFIG_PARAMS:()=>x,CONFIG_PARAM_MAP:()=>ov,DATABASES_DIR_NAME:()=>qc,DATABASES_PARAM_CONFIG:()=>T6,DEFAULT_DATABASE_NAME:()=>qX,ESCAPED_FORWARD_SLASH_REGEX:()=>JX,FORWARD_SLASH_REGEX:()=>jX,FUNC_VAL:()=>L6,GEO_CONVERSION_ENUM:()=>g6,HDB_COMPONENT_CONFIG_FILE:()=>MX,HDB_CONFIG_FILE:()=>LX,HDB_DEFAULT_CONFIG_FILE:()=>DX,HDB_FILE_PERMISSIONS:()=>r6,HDB_HOME_DIR_NAME:()=>ZX,HDB_PID_FILE:()=>GX,HDB_PROCESS_SERVICES:()=>kX,HDB_PROC_NAME:()=>vX,HDB_RESTART_SCRIPT:()=>UX,HDB_ROOT_DIR_NAME:()=>gA,HDB_SETTINGS_NAMES:()=>im,HDB_SUPPORT_ADDRESS:()=>sv,INFO_TABLE_HASH_ATTRIBUTE:()=>c6,INSERT_MAX_CHARACTER_SIZE:()=>o6,INSTALL_PROMPTS:()=>i6,ITC_EVENT_TYPES:()=>bu,JOB_STATUS_ENUM:()=>f6,JOB_TYPE_ENUM:()=>y6,JWT_ENUM:()=>om,LAUNCH_SERVICE_SCRIPTS:()=>VX,LEGACY_CONFIG_PARAMS:()=>S6,LEGACY_DATABASES_DIR_NAME:()=>ZE,LICENSE_FILE_NAME:()=>d6,LICENSE_KEY_DIR_NAME:()=>yA,LICENSE_VALUES:()=>R6,LOG_LEVELS:()=>nm,LOG_NAMES:()=>$X,MEM_SETTING_KEY:()=>XX,METADATA_PROPERTY:()=>I6,NODE_ERROR_CODES:()=>b6,OPERATIONS_ENUM:()=>$,PERMS_CRUD_ENUM:()=>O6,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>C6,PRE_4_0_0_VERSION:()=>D6,PROCESS_DESCRIPTORS:()=>FX,PROCESS_NAME_ENV_PROP:()=>s6,RAM_ALLOCATION_ENUM:()=>A6,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>t_,REG_KEY_FILE_NAME:()=>u6,RESTART_TIMEOUT_MS:()=>t6,ROLE_TYPES_ENUM:()=>KX,S3_BUCKET_AUTH_KEYS:()=>p6,SEARCH_NOT_FOUND_MESSAGE:()=>WX,SEARCH_WILDCARDS:()=>P6,SERVICE_ACTIONS_ENUM:()=>_6,SUPPORT_HELP_MSG:()=>YX,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>l6,SYSTEM_SCHEMA_NAME:()=>sm,SYSTEM_TABLE_NAMES:()=>Au,THREAD_TYPES:()=>IA,TIME_STAMP_NAMES:()=>N6,TIME_STAMP_NAMES_ENUM:()=>w6,TRANSACTIONS_DIR_NAME:()=>n6,UNICODE_FORWARD_SLASH:()=>QX,UNICODE_PERIOD:()=>zX,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>a6,VALID_S3_FILE_TYPES:()=>m6,VALID_SQL_OPS_ENUM:()=>h6,VALUE_SEARCH_COMPARATORS:()=>e_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>bA});var JE,XE,LX,DX,gA,MX,vX,UX,nv,_A,SA,TA,xX,BX,FX,kX,HX,GX,qX,$X,nm,VX,KX,sv,YX,WX,zX,jX,QX,JX,XX,sm,ZX,yA,e6,t6,r6,qc,ZE,n6,s6,iv,i6,o6,a6,Au,c6,l6,u6,d6,f6,$,m6,p6,h6,E6,_6,g6,im,S6,x,ov,T6,y6,RA,R6,A6,b6,I6,AA,av,cv,w6,N6,C6,e_,bA,O6,P6,L6,t_,om,bu,IA,D6,ci,Na,q=ie(()=>{JE=require("node:path"),XE=I(yt()),LX="harperdb-config.yaml",DX="defaultConfig.yaml",gA="hdb",MX="config.yaml",vX="harperdb.js",UX="restartHdb.js",nv="HarperDB",_A="Custom Functions",SA="Clustering Hub",TA="Clustering Leaf",xX="Clustering Ingest Service",BX="Clustering Reply Service",FX={HDB:nv,CLUSTERING_HUB:SA,CLUSTERING_LEAF:TA,CLUSTERING_INGEST_SERVICE:xX,CLUSTERING_REPLY_SERVICE:BX,CUSTOM_FUNCTIONS:_A,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"},kX={harperdb:nv,"clustering hub":SA,"clustering leaf":TA,"custom functions":_A,custom_functions:_A,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},HX={CLUSTERING_HUB_PROC_DESCRIPTOR:SA,CLUSTERING_LEAF_PROC_DESCRIPTOR:TA},GX="hdb.pid",qX="data",$X={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},nm={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},VX={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,JE.join)(XE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,JE.join)(XE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,JE.join)(XE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},KX={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},sv="support@harperdb.io",YX=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${sv}`,WX="None of the specified records were found.",zX="U+002E",jX=/\//g,QX="U+002F",JX=/U\+002F/g,XX="--max-old-space-size=",sm="system",ZX=".harperdb",yA="keys",e6="hdb_boot_properties.file",t6=6e4,r6=448,qc="database",ZE="schema",n6="transactions",s6="PROCESS_NAME",iv={SETTINGS_PATH_KEY:"settings_path"},i6={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"},o6=250,a6={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Au={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"},c6="info_id",l6={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"},u6="060493.ks",d6=".license",f6={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},$={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},m6={CSV:".csv",JSON:".json"},p6={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},h6={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},E6={[$.INSERT]:$.INSERT,[$.UPDATE]:$.UPDATE,[$.UPSERT]:$.UPSERT,[$.DELETE]:$.DELETE},_6={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"},g6={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},im={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"},S6={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},x={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_TIMEOUT:"http_mtls_certificateVerification_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CACHETTL:"http_mtls_certificateVerification_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},ov={settings_path:iv.SETTINGS_PATH_KEY,hdb_root_key:x.ROOTPATH,hdb_root:x.ROOTPATH,rootpath:x.ROOTPATH,server_port_key:x.OPERATIONSAPI_NETWORK_PORT,server_port:x.OPERATIONSAPI_NETWORK_PORT,cert_key:x.TLS_CERTIFICATE,certificate:x.TLS_CERTIFICATE,private_key_key:x.TLS_PRIVATEKEY,private_key:x.TLS_PRIVATEKEY,http_secure_enabled_key:x.OPERATIONSAPI_NETWORK_HTTPS,https_on:x.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:x.OPERATIONSAPI_NETWORK_CORS,cors_on:x.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:x.LOGGING_LEVEL,log_level:x.LOGGING_LEVEL,log_path_key:x.LOGGING_ROOT,log_path:x.LOGGING_ROOT,clustering_node_name_key:x.CLUSTERING_NODENAME,node_name:x.CLUSTERING_NODENAME,clustering_enabled_key:x.CLUSTERING_ENABLED,clustering:x.CLUSTERING_ENABLED,max_http_threads:x.THREADS_COUNT,max_hdb_processes:x.THREADS_COUNT,server_timeout_key:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:x.LOGGING_AUDITLOG,disable_transaction_log:x.LOGGING_AUDITLOG,operation_token_timeout_key:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:x.HTTP_PORT,custom_functions_port:x.HTTP_PORT,custom_functions_directory_key:x.COMPONENTSROOT,custom_functions_directory:x.COMPONENTSROOT,max_custom_function_processes:x.THREADS_COUNT,logging_console:x.LOGGING_CONSOLE,log_to_file:x.LOGGING_FILE,log_to_stdstreams:x.LOGGING_STDSTREAMS,local_studio_on:x.LOCALSTUDIO_ENABLED,clustering_port:x.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:x.CLUSTERING_USER,customfunctions_network_port:x.HTTP_PORT,customfunctions_tls_certificate:x.TLS_CERTIFICATE,customfunctions_network_cors:x.HTTP_CORS,customfunctions_network_corsaccesslist:x.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:x.HTTP_HEADERSTIMEOUT,customfunctions_network_https:x.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:x.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:x.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:x.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:x.HTTP_TIMEOUT,customfunctions_tls:x.TLS,http_threads:x.THREADS_COUNT,threads:x.THREADS_COUNT,threads_count:x.THREADS_COUNT,customfunctions_processes:x.THREADS_COUNT,customfunctions_root:x.COMPONENTSROOT,operationsapi_root:x.ROOTPATH};for(let e in x){let t=x[e];ov[t.toLowerCase()]=t}T6={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},y6={csv_file_load:"csv_file_load",csv_data_load:$.CSV_DATA_LOAD,csv_url_load:$.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"},RA={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"},R6={VERSION_DEFAULT:"2.2.0"},A6={DEVELOPMENT:8192,DEFAULT:512},b6={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},I6=Symbol("metadata"),AA="__clustering__",av="__createdtime__",cv="__updatedtime__",w6={CREATED_TIME:av,UPDATED_TIME:cv},N6=[av,cv],C6=15984864e5,e_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},bA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},O6={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},P6=["*","%"],L6="func_val",t_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},om={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},bu={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},IA={HTTP:"http"},D6="3.x.x",ci={SUCCESS:"success",FAILURE:"failure"},Na={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var $c=v((MNe,dv)=>{"use strict";var lv=require("minimist");dv.exports=M6;function M6(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=uv(process.env),n=uv(lv(process.argv))):(r=process.env,n=lv(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(M6,"assignCMDENVVariables");function uv(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(uv,"objKeysToLowerCase")});var li=v(zn=>{"use strict";global.Resource=zn.Resource=void 0;global.tables=zn.tables={};global.databases=zn.databases={};global.getUser=zn.getUser=void 0;global.authenticateUser=zn.authenticateUser=void 0;global.server=zn.server={};global.contentTypes=zn.contentTypes=null;global.threads=zn.threads=[];global.logger={};global.RequestTarget=zn.RequestTarget=void 0;global.operation=zn.operation=void 0;zn._assignPackageExport=(e,t)=>{global[e]=zn[e]=t}});var wA=v(an=>{"use strict";var v6={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
1
|
+
"use strict";var TX=Object.create;var rm=Object.defineProperty;var yX=Object.getOwnPropertyDescriptor;var RX=Object.getOwnPropertyNames;var AX=Object.getPrototypeOf,bX=Object.prototype.hasOwnProperty;var o=(e,t)=>rm(e,"name",{value:t,configurable:!0});var ie=(e,t)=>()=>(e&&(t=e(e=0)),t);var v=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var r in t)rm(e,r,{get:t[r],enumerable:!0})},ZM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of RX(t))!bX.call(e,s)&&s!==r&&rm(e,s,{get:()=>t[s],enumerable:!(n=yX(t,s))||n.enumerable});return e};var I=(e,t,r)=>(r=e!=null?TX(AX(e)):{},ZM(t||!e||!e.__esModule?rm(r,"default",{value:e,enumerable:!0}):r,e)),M=e=>ZM(rm({},"__esModule",{value:!0}),e);var yt=v((LNe,rv)=>{var{join:IX,dirname:ev}=require("node:path"),{existsSync:wX,readFileSync:NX}=require("node:fs");function CX(){let t=__dirname,r,n=0;for(;!wX(r=IX(t,"package.json"));)if(t===(t=ev(t))||n++>10)throw new Error("Could not find package root");return r}o(CX,"findPackageJson");var tv=CX(),OX=JSON.parse(NX(tv,"utf8")),PX=ev(tv);rv.exports={packageJson:OX,PACKAGE_ROOT:PX}});var W={};be(W,{AUTH_AUDIT_STATUS:()=>ci,AUTH_AUDIT_TYPES:()=>Na,BOOT_PROPS_FILE_NAME:()=>e6,BOOT_PROP_PARAMS:()=>iv,CLUSTERING_FLAG:()=>AA,CLUSTERING_PROCESSES:()=>HX,CLUSTER_MESSAGE_TYPE_ENUM:()=>RA,CLUSTER_OPERATIONS:()=>E6,CONFIG_PARAMS:()=>x,CONFIG_PARAM_MAP:()=>ov,DATABASES_DIR_NAME:()=>qc,DATABASES_PARAM_CONFIG:()=>T6,DEFAULT_DATABASE_NAME:()=>qX,ESCAPED_FORWARD_SLASH_REGEX:()=>JX,FORWARD_SLASH_REGEX:()=>jX,FUNC_VAL:()=>L6,GEO_CONVERSION_ENUM:()=>g6,HDB_COMPONENT_CONFIG_FILE:()=>MX,HDB_CONFIG_FILE:()=>LX,HDB_DEFAULT_CONFIG_FILE:()=>DX,HDB_FILE_PERMISSIONS:()=>r6,HDB_HOME_DIR_NAME:()=>ZX,HDB_PID_FILE:()=>GX,HDB_PROCESS_SERVICES:()=>kX,HDB_PROC_NAME:()=>vX,HDB_RESTART_SCRIPT:()=>UX,HDB_ROOT_DIR_NAME:()=>gA,HDB_SETTINGS_NAMES:()=>im,HDB_SUPPORT_ADDRESS:()=>sv,INFO_TABLE_HASH_ATTRIBUTE:()=>c6,INSERT_MAX_CHARACTER_SIZE:()=>o6,INSTALL_PROMPTS:()=>i6,ITC_EVENT_TYPES:()=>bu,JOB_STATUS_ENUM:()=>f6,JOB_TYPE_ENUM:()=>y6,JWT_ENUM:()=>om,LAUNCH_SERVICE_SCRIPTS:()=>VX,LEGACY_CONFIG_PARAMS:()=>S6,LEGACY_DATABASES_DIR_NAME:()=>ZE,LICENSE_FILE_NAME:()=>d6,LICENSE_KEY_DIR_NAME:()=>yA,LICENSE_VALUES:()=>R6,LOG_LEVELS:()=>nm,LOG_NAMES:()=>$X,MEM_SETTING_KEY:()=>XX,METADATA_PROPERTY:()=>I6,NODE_ERROR_CODES:()=>b6,OPERATIONS_ENUM:()=>$,PERMS_CRUD_ENUM:()=>O6,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>C6,PRE_4_0_0_VERSION:()=>D6,PROCESS_DESCRIPTORS:()=>FX,PROCESS_NAME_ENV_PROP:()=>s6,RAM_ALLOCATION_ENUM:()=>A6,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>t_,REG_KEY_FILE_NAME:()=>u6,RESTART_TIMEOUT_MS:()=>t6,ROLE_TYPES_ENUM:()=>KX,S3_BUCKET_AUTH_KEYS:()=>p6,SEARCH_NOT_FOUND_MESSAGE:()=>WX,SEARCH_WILDCARDS:()=>P6,SERVICE_ACTIONS_ENUM:()=>_6,SUPPORT_HELP_MSG:()=>YX,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>l6,SYSTEM_SCHEMA_NAME:()=>sm,SYSTEM_TABLE_NAMES:()=>Au,THREAD_TYPES:()=>IA,TIME_STAMP_NAMES:()=>N6,TIME_STAMP_NAMES_ENUM:()=>w6,TRANSACTIONS_DIR_NAME:()=>n6,UNICODE_FORWARD_SLASH:()=>QX,UNICODE_PERIOD:()=>zX,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>a6,VALID_S3_FILE_TYPES:()=>m6,VALID_SQL_OPS_ENUM:()=>h6,VALUE_SEARCH_COMPARATORS:()=>e_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>bA});var JE,XE,LX,DX,gA,MX,vX,UX,nv,_A,SA,TA,xX,BX,FX,kX,HX,GX,qX,$X,nm,VX,KX,sv,YX,WX,zX,jX,QX,JX,XX,sm,ZX,yA,e6,t6,r6,qc,ZE,n6,s6,iv,i6,o6,a6,Au,c6,l6,u6,d6,f6,$,m6,p6,h6,E6,_6,g6,im,S6,x,ov,T6,y6,RA,R6,A6,b6,I6,AA,av,cv,w6,N6,C6,e_,bA,O6,P6,L6,t_,om,bu,IA,D6,ci,Na,q=ie(()=>{JE=require("node:path"),XE=I(yt()),LX="harperdb-config.yaml",DX="defaultConfig.yaml",gA="hdb",MX="config.yaml",vX="harperdb.js",UX="restartHdb.js",nv="HarperDB",_A="Custom Functions",SA="Clustering Hub",TA="Clustering Leaf",xX="Clustering Ingest Service",BX="Clustering Reply Service",FX={HDB:nv,CLUSTERING_HUB:SA,CLUSTERING_LEAF:TA,CLUSTERING_INGEST_SERVICE:xX,CLUSTERING_REPLY_SERVICE:BX,CUSTOM_FUNCTIONS:_A,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"},kX={harperdb:nv,"clustering hub":SA,"clustering leaf":TA,"custom functions":_A,custom_functions:_A,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},HX={CLUSTERING_HUB_PROC_DESCRIPTOR:SA,CLUSTERING_LEAF_PROC_DESCRIPTOR:TA},GX="hdb.pid",qX="data",$X={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},nm={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},VX={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,JE.join)(XE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,JE.join)(XE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,JE.join)(XE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},KX={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},sv="support@harperdb.io",YX=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${sv}`,WX="None of the specified records were found.",zX="U+002E",jX=/\//g,QX="U+002F",JX=/U\+002F/g,XX="--max-old-space-size=",sm="system",ZX=".harperdb",yA="keys",e6="hdb_boot_properties.file",t6=6e4,r6=448,qc="database",ZE="schema",n6="transactions",s6="PROCESS_NAME",iv={SETTINGS_PATH_KEY:"settings_path"},i6={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"},o6=250,a6={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Au={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"},c6="info_id",l6={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"},u6="060493.ks",d6=".license",f6={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},$={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},m6={CSV:".csv",JSON:".json"},p6={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},h6={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},E6={[$.INSERT]:$.INSERT,[$.UPDATE]:$.UPDATE,[$.UPSERT]:$.UPSERT,[$.DELETE]:$.DELETE},_6={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"},g6={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},im={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"},S6={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},x={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_TIMEOUT:"http_mtls_certificateVerification_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CACHETTL:"http_mtls_certificateVerification_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},ov={settings_path:iv.SETTINGS_PATH_KEY,hdb_root_key:x.ROOTPATH,hdb_root:x.ROOTPATH,rootpath:x.ROOTPATH,server_port_key:x.OPERATIONSAPI_NETWORK_PORT,server_port:x.OPERATIONSAPI_NETWORK_PORT,cert_key:x.TLS_CERTIFICATE,certificate:x.TLS_CERTIFICATE,private_key_key:x.TLS_PRIVATEKEY,private_key:x.TLS_PRIVATEKEY,http_secure_enabled_key:x.OPERATIONSAPI_NETWORK_HTTPS,https_on:x.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:x.OPERATIONSAPI_NETWORK_CORS,cors_on:x.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:x.LOGGING_LEVEL,log_level:x.LOGGING_LEVEL,log_path_key:x.LOGGING_ROOT,log_path:x.LOGGING_ROOT,clustering_node_name_key:x.CLUSTERING_NODENAME,node_name:x.CLUSTERING_NODENAME,clustering_enabled_key:x.CLUSTERING_ENABLED,clustering:x.CLUSTERING_ENABLED,max_http_threads:x.THREADS_COUNT,max_hdb_processes:x.THREADS_COUNT,server_timeout_key:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:x.LOGGING_AUDITLOG,disable_transaction_log:x.LOGGING_AUDITLOG,operation_token_timeout_key:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:x.HTTP_PORT,custom_functions_port:x.HTTP_PORT,custom_functions_directory_key:x.COMPONENTSROOT,custom_functions_directory:x.COMPONENTSROOT,max_custom_function_processes:x.THREADS_COUNT,logging_console:x.LOGGING_CONSOLE,log_to_file:x.LOGGING_FILE,log_to_stdstreams:x.LOGGING_STDSTREAMS,local_studio_on:x.LOCALSTUDIO_ENABLED,clustering_port:x.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:x.CLUSTERING_USER,customfunctions_network_port:x.HTTP_PORT,customfunctions_tls_certificate:x.TLS_CERTIFICATE,customfunctions_network_cors:x.HTTP_CORS,customfunctions_network_corsaccesslist:x.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:x.HTTP_HEADERSTIMEOUT,customfunctions_network_https:x.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:x.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:x.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:x.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:x.HTTP_TIMEOUT,customfunctions_tls:x.TLS,http_threads:x.THREADS_COUNT,threads:x.THREADS_COUNT,threads_count:x.THREADS_COUNT,customfunctions_processes:x.THREADS_COUNT,customfunctions_root:x.COMPONENTSROOT,operationsapi_root:x.ROOTPATH};for(let e in x){let t=x[e];ov[t.toLowerCase()]=t}T6={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},y6={csv_file_load:"csv_file_load",csv_data_load:$.CSV_DATA_LOAD,csv_url_load:$.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"},RA={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"},R6={VERSION_DEFAULT:"2.2.0"},A6={DEVELOPMENT:8192,DEFAULT:512},b6={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},I6=Symbol("metadata"),AA="__clustering__",av="__createdtime__",cv="__updatedtime__",w6={CREATED_TIME:av,UPDATED_TIME:cv},N6=[av,cv],C6=15984864e5,e_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},bA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},O6={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},P6=["*","%"],L6="func_val",t_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},om={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},bu={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},IA={HTTP:"http"},D6="3.x.x",ci={SUCCESS:"success",FAILURE:"failure"},Na={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var $c=v((MNe,dv)=>{"use strict";var lv=require("minimist");dv.exports=M6;function M6(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=uv(process.env),n=uv(lv(process.argv))):(r=process.env,n=lv(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(M6,"assignCMDENVVariables");function uv(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(uv,"objKeysToLowerCase")});var li=v(jn=>{"use strict";global.Resource=jn.Resource=void 0;global.tables=jn.tables={};global.databases=jn.databases={};global.getUser=jn.getUser=void 0;global.authenticateUser=jn.authenticateUser=void 0;global.server=jn.server={};global.contentTypes=jn.contentTypes=null;global.threads=jn.threads=[];global.logger={};global.RequestTarget=jn.RequestTarget=void 0;global.operation=jn.operation=void 0;jn._assignPackageExport=(e,t)=>{global[e]=jn[e]=t}});var wA=v(an=>{"use strict";var v6={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
2
2
|
`),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
3
|
-
`)},U6="certificate.pem",x6="privateKey.pem",B6="caCertificate.pem",F6="natsCertificate.pem",k6="natsCaCertificate.pem",wt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},H6={tls_certificate:wt.SERVER,tlsCertificateAuthority:wt.CA,customFunctions_tls_certificate:wt.SERVER,customFunctionsTlsCertificateAuthority:wt.CA,operationsApi_tls_certificate:wt["OPERATIONS-API"],operationsApiTlsCertificateAuthority:wt["OPERATIONS-CA"]},G6={[wt.SERVER]:2,[wt.DEFAULT]:1},q6={[wt["OPERATIONS-API"]]:3,[wt.SERVER]:2,[wt.DEFAULT]:1},$6={[wt["OPERATIONS-API"]]:3,[wt.SERVER]:2,[wt.DEFAULT]:1},V6={[wt["OPERATIONS-CA"]]:3,[wt.CA]:2,[wt["DEFAULT-CA"]]:1},K6={[wt["OPERATIONS-CA"]]:3,[wt.CA]:2,[wt["DEFAULT-CA"]]:1},Y6={[wt.CA]:2,[wt["DEFAULT-CA"]]:1};an.CERTIFICATE_PEM_NAME=U6;an.PRIVATEKEY_PEM_NAME=x6;an.CA_PEM_NAME=B6;an.CERT_NAME=wt;an.CERT_CONFIG_NAME_MAP=H6;an.CERT_PREFERENCE_APP=G6;an.CERT_PREFERENCE_OPS=q6;an.CERT_PREFERENCE_REP=$6;an.CA_CERT_PREFERENCE_REP=V6;an.CA_CERT_PREFERENCE_OPS=K6;an.CA_CERT_PREFERENCE_APP=Y6;an.CERTIFICATE_VALUES=v6;an.NATS_CERTIFICATE_PEM_NAME=F6;an.NATS_CA_PEM_NAME=k6});var ft=v((BNe,fv)=>{"use strict";var wn=require("validate.js");wn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||wn.validators.type.checks[t](e)?null:` must be a '${t}' value`};wn.validators.type.checks={Object:o(function(e){return wn.isObject(e)&&!wn.isArray(e)},"Object"),Array:wn.isArray,Integer:wn.isInteger,Number:wn.isNumber,String:wn.isString,Date:wn.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};wn.validators.hasValidFileExt=function(e,t){return wn.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};fv.exports={validateObject:W6,validateObjectAsync:z6,validateBySchema:j6};function W6(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=wn(e,t,{format:"flat"});return r?new Error(r):null}o(W6,"validateObject");async function z6(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await wn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(z6,"validateObjectAsync");function j6(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(j6,"validateBySchema")});var CA=v((HNe,gv)=>{"use strict";var Ev=require("fs-extra"),_e=require("joi"),Q6=require("os"),{boolean:Ve,string:_t,number:lr,array:Ca}=_e.types(),{totalmem:mv}=require("os"),Vc=require("path"),J6=Q(),NA=ce(),kNe=wA(),pv=(q(),M(W)),X6=ft(),hv="log",Z6="components",e5="Invalid logging.rotation.maxSize unit. Available units are G, M or K",t5="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",r5="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",n5="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",s5="rootPath config parameter is undefined",Nn=_e.alternatives([lr.min(0),_t]).optional().empty(null),r_=_e.alternatives([Ca.items(_t,{host:_t.required(),port:Nn},{hostname:_t.required(),port:Nn}).empty(null),Ca.items(_t)]),Fi,_v=!1;gv.exports={configValidator:i5,routesValidator:d5,routeConstraints:r_};function i5(e,t=!1){if(_v=t,Fi=e.rootPath,NA.isEmpty(Fi))throw s5;let r=Ve.optional(),n=lr.min(0).max(1e3).empty(null).default(u5),s=_t.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(am),i=_t.optional().empty(null),a=_t.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=_e.string().empty(null).default(am),l=_e.custom(a5).empty(null).default(am),u=e.clustering?.enabled,d=_e.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=_e.object({enabled:r,hubServer:_e.object({cluster:_e.object({name:_e.required().empty(null),network:_e.object({port:Nn,routes:r_}).required()}).required(),leafNodes:_e.object({network:_e.object({port:Nn}).required()}).required(),network:_e.object({port:Nn}).required()}).required(),leafServer:_e.object({network:_e.object({port:Nn,routes:r_}).required(),streams:_e.object({maxAge:lr.min(120).allow(null).optional(),maxBytes:lr.min(1).allow(null).optional(),maxMsgs:lr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:_e.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ve.optional(),databaseLevel:Ve.optional(),tls:_e.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ve.required(),verify:Ve.optional()}),user:_t.optional().empty(null)}).optional():f=_e.object({enabled:r,tls:_e.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ve.optional()})}).optional(),_e.object({authentication:_e.alternatives(_e.object({authorizeLocal:Ve,cacheTTL:lr.required(),cookie:_e.object({domains:Ca.items(_t).optional(),expires:_t.optional()}),enableSessions:Ve,hashFunction:_t.valid("md5","sha256","argon2id").optional().empty(null)}),Ve).optional(),analytics:_e.object({aggregatePeriod:lr,replicate:Ve.optional()}),replication:_e.object({hostname:_e.alternatives(_t,lr).optional().empty(null),url:_t.optional().empty(null),port:Nn,securePort:Nn,routes:Ca.optional().empty(null),databases:_e.alternatives(_t,Ca),enableRootCAs:Ve.optional(),copyTablesToCatchUp:Ve.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:_e.object({enabled:r}).required(),logging:_e.object({auditAuthEvents:_e.object({logFailed:Ve,logSuccessful:Ve}),file:Ve.required(),level:_e.valid("notify","fatal","error","warn","info","debug","trace"),rotation:_e.object({enabled:Ve.optional(),compress:Ve.optional(),interval:_t.custom(l5).optional().empty(null),maxSize:_t.custom(c5).optional().empty(null),path:_t.optional().empty(null).default(am)}).required(),root:s,stdStreams:Ve.required(),auditLog:Ve.required()}).required(),operationsApi:_e.object({network:_e.object({cors:Ve.optional(),corsAccessList:Ca.optional(),headersTimeout:lr.min(1).optional(),keepAliveTimeout:lr.min(1).optional(),port:Nn,domainSocket:_e.optional().empty("hdb/operations-server").default(am),securePort:Nn,timeout:lr.min(1).optional()}).optional(),tls:_e.alternatives([_e.array().items(d),d])}).required(),rootPath:_t.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:_e.object({network:_e.object({port:Nn,securePort:Nn,mtls:_e.alternatives([Ve.optional(),_e.object({user:_t.optional(),certificateAuthority:i,required:Ve.optional()})])}).required(),webSocket:Ve.optional(),requireAuthentication:Ve.optional()}),http:_e.object({compressionThreshold:lr.optional(),cors:Ve.optional(),corsAccessList:Ca.optional(),headersTimeout:lr.min(1).optional(),port:Nn,securePort:Nn,maxHeaderSize:lr.optional(),mtls:_e.alternatives([Ve.optional(),_e.object({user:_t.optional(),certificateAuthority:i,required:Ve.optional()})]),threadRange:_e.alternatives([Ca.optional(),_t.optional()])}).required(),threads:_e.alternatives(n.optional(),_e.object({count:n.optional(),debug:_e.alternatives(Ve.optional(),_e.object({startingPort:lr.min(1).optional(),host:_t.optional(),waitForDebugger:Ve.optional()})),maxHeapMemory:lr.min(0).optional()})),storage:_e.object({writeAsync:Ve.required(),overlappingSync:Ve.optional(),caching:Ve.optional(),compression:_e.alternatives([Ve.optional(),_e.object({dictionary:_t.optional(),threshold:lr.optional()})]),compactOnStart:Ve.optional(),compactOnStartKeepBackup:Ve.optional(),noReadAhead:Ve.optional(),path:l,prefetchWrites:Ve.optional(),maxFreeSpaceToLoad:lr.optional(),maxFreeSpaceToRetain:lr.optional()}).required(),ignoreScripts:Ve.optional(),tls:_e.alternatives([_e.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(i5,"configValidator");function o5(e){return _v||Ev.existsSync(e)?null:`Specified path ${e} does not exist.`}o(o5,"doesPathExist");function a5(e,t){_e.assert(e,_t.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=o5(e);if(r)return t.message(r)}o(a5,"validatePath");function c5(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(e5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(r5):e}o(c5,"validateRotationMaxSize");function l5(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(t5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(n5):e}o(l5,"validateRotationInterval");function u5(e,t){let r=t.state.path.join("."),n=Q6.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||mv();return i=Math.round(Math.min(i,mv())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),J6.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(u5,"setDefaultThreads");function am(e,t){let r=t.state.path.join(".");if(!NA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(NA.isEmpty(Fi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Vc.join(Fi,Z6);case"logging.root":return Vc.join(Fi,hv);case"clustering.leafServer.streams.path":return Vc.join(Fi,"clustering","leaf");case"storage.path":let n=Vc.join(Fi,pv.LEGACY_DATABASES_DIR_NAME);return Ev.existsSync(n)?n:Vc.join(Fi,pv.DATABASES_DIR_NAME);case"logging.rotation.path":return Vc.join(Fi,hv);case"operationsApi.network.domainSocket":return r==null?null:Vc.join(Fi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(am,"setDefaultRoot");function d5(e){let t=_e.object({routes:r_});return X6.validateBySchema({routes:e},t)}o(d5,"routesValidator")});var Vt=v((qNe,Tv)=>{"use strict";var f5="__dbis__",m5="__txns__",p5="__environment_name__",h5="__dbi_defintion__",E5={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"},_5=["__createdtime__","__updatedtime__"],g5="\uFFFF",Sv={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},S5=Object.values(Sv);Tv.exports={AUDIT_STORE_NAME:m5,INTERNAL_DBIS_NAME:f5,DBI_DEFINITION_NAME:h5,SEARCH_TYPES:E5,TIMESTAMP_NAMES:_5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:p5,TRANSACTIONS_DBI_NAMES_ENUM:Sv,TRANSACTIONS_DBIS:S5,OVERFLOW_MARKER:g5}});var Yr=v(($Ne,Ov)=>{"use strict";var yv=(q(),M(W)),Rv=Vt(),Av={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},bv=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Iv={500:bv("There was an error processing your request."),400:"Invalid request"},T5=Iv[Av.INTERNAL_SERVER_ERROR],y5={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},R5={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},A5={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},b5={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"value is required",SEARCH_VALUE_TOO_LARGE:"value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${Rv.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Rv.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"},I5={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${yv.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 ${yv.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"},wv={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"},w5={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},N5={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},C5={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},O5={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},P5={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},Nv={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},Cv={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},L5={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"},D5={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},M5={...wv,...A5,...y5,...w5,...N5,...C5,...O5,...P5,...I5,...Nv,...Cv,...L5,...D5,...R5};Ov.exports={CHECK_LOGS_WRAPPER:bv,HDB_ERROR_MSGS:M5,DEFAULT_ERROR_MSGS:Iv,DEFAULT_ERROR_RESP:T5,HTTP_STATUS_CODES:Av,LMDB_ERRORS_ENUM:b5,AUTHENTICATION_ERROR_MSGS:wv,VALIDATION_ERROR_MSGS:Nv,ITC_ERRORS:Cv}});var Ee=v((KNe,Dv)=>{"use strict";var Iu=Yr(),v5=Q(),U5=(q(),M(W)),n_=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Pv),this.statusCode=n||Iu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Iu.DEFAULT_ERROR_MSGS[n]?Iu.DEFAULT_ERROR_MSGS[n]:Iu.DEFAULT_ERROR_MSGS[Iu.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&&v5[s](i)}},OA=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},PA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Pv(e,t,r,n=U5.LOG_LEVELS.ERROR,s=null,i=!1){if(Lv(e))return e;let a=new n_(e,t,r,n,s);return i&&delete a.stack,a}o(Pv,"handleHDBError");function wu(e){this.message=e}o(wu,"Violation");wu.prototype=Object.create(Error.prototype);wu.prototype.constructor=wu;wu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var LA=class extends wu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function Lv(e){return e.__proto__.constructor.name===n_.name}o(Lv,"isHDBError");Dv.exports={isHDBError:Lv,handleHDBError:Pv,ClientError:OA,ServerError:PA,AccessViolation:LA,Violation:wu,hdbErrors:Iu}});var cm={};be(cm,{server:()=>Ue});var Mv,Ue,Ur=ie(()=>{Mv=I(li()),Ue={};(0,Mv._assignPackageExport)("server",Ue)});var Rt=v(rr=>{"use strict";var Cs=(q(),M(W)),wr=ce(),ur=Q(),{configValidator:x5,routesValidator:vv}=CA(),cn=require("fs-extra"),xv=require("yaml"),Qn=require("path"),B5=require("is-number"),Bv=require("properties-reader"),F5=require("lodash"),{handleHDBError:k5}=Ee(),{HTTP_STATUS_CODES:H5,HDB_ERROR_MSGS:Nu}=Yr(),{server:G5}=(Ur(),M(cm)),{PACKAGE_ROOT:Fv}=yt(),{DATABASES_PARAM_CONFIG:lm,CONFIG_PARAMS:jn,CONFIG_PARAM_MAP:ui}=Cs,q5="Unable to get config value because config is uninitialized",$5="Config successfully initialized",V5="Error backing up config file",K5="Empty parameter sent to getConfigValue",kv=Qn.join(Fv,"config","yaml",Cs.HDB_DEFAULT_CONFIG_FILE),Y5=Qn.join(Fv,"config","yaml","defaultNatsConfig.yaml"),W5="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Uv={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"},s_,xt,i_;rr.createConfigFile=z5;rr.getDefaultConfig=j5;rr.getConfigValue=Gv;rr.initConfig=o_;rr.flattenConfig=Cu;rr.updateConfigValue=qv;rr.updateConfigObject=J5;rr.getConfiguration=e8;rr.setConfiguration=t8;rr.readConfigFile=UA;rr.getClusteringRoutes=r8;rr.initOldConfig=$v;rr.getConfigFromFile=n8;rr.getConfigFilePath=Kc;rr.addConfig=s8;rr.deleteConfigFromFile=i8;rr.getConfigObj=o8;rr.resolvePath=DA;rr.getFlatConfigObj=a8;function DA(e){if(e?.startsWith("~/"))return Qn.join(wr.getHomeDir(),e.slice(1));let t=le();try{return Qn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(DA,"resolvePath");function z5(e,t=!1){let r=Oa(kv);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=xv.parseDocument(cn.readFileSync(Y5,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}s_=Cu(r.toJSON());let n;for(let c in e){let l=ui[c.toLowerCase()];if(l===jn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=MA(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(f){ur.error(f)}}}n&&Hv(r,n),vA(r,t);let s=r.toJSON();xt=Cu(s);let i=r.getIn(["rootPath"]),a=Qn.join(i,Cs.HDB_CONFIG_FILE);if(cn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);cn.writeFileSync(a,String(r)),ur.trace(`Config file written to ${a}`)}o(z5,"createConfigFile");function Hv(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!wr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(lm.TABLES))for(let i in n[s][lm.TABLES])for(let a in n[s][lm.TABLES][i]){let c=n[s][lm.TABLES][i][a],l=[jn.DATABASES,s,lm.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[jn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){ur.error("Error parsing schemas CLI/env config arguments",n)}}o(Hv,"setSchemasConfig");function j5(e){if(s_===void 0){let r=Oa(kv);s_=Cu(r.toJSON())}let t=ui[e.toLowerCase()];if(t!==void 0)return s_[t.toLowerCase()]}o(j5,"getDefaultConfig");function Gv(e){if(e==null){ur.info(K5);return}if(xt===void 0){ur.trace(q5);return}let t=ui[e.toLowerCase()];if(t!==void 0)return xt[t.toLowerCase()]}o(Gv,"getConfigValue");function Kc(e=wr.getPropsFilePath()){let t=wr.getEnvCliRootPath();if(t)return DA(Qn.join(t,Cs.HDB_CONFIG_FILE));let r=Bv(e);return DA(r.get(Cs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Kc,"getConfigFilePath");function o_(e=!1){if(xt===void 0||e){let t;if(!wr.noBootFile()){t=wr.getPropsFilePath();try{cn.accessSync(t,cn.constants.F_OK|cn.constants.R_OK)}catch(i){throw ur.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Kc(t),n;if(r.includes("config/settings.js"))try{$v(r);return}catch(i){if(i.code!==Cs.NODE_ERROR_CODES.ENOENT)throw i}try{n=Oa(r)}catch(i){if(i.code===Cs.NODE_ERROR_CODES.ENOENT){ur.trace(`HarperDB config file not found at ${r}.
|
|
4
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw ur.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Q5(n,r),vA(n);let s=n.toJSON();if(G5.config=s,xt=Cu(s),xt.logging_rotation_rotate)for(let i in Uv)xt[i]&&ur.error(`Config ${Uv[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);ur.trace($5)}}o(o_,"initConfig");function Q5(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Qn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Qn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(ur.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);cn.writeFileSync(t,String(e))}}o(Q5,"checkForUpdatedConfig");function vA(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 Nu.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 Nu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=x5(r,t);if(n.error)throw Nu.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}o(vA,"validateConfig");function J5(e,t){xt===void 0&&(xt={});let r=ui[e.toLowerCase()];if(r===void 0){ur.trace(`Unable to update config object because config param '${e}' does not exist`);return}xt[r.toLowerCase()]=t}o(J5,"updateConfigObject");function qv(e,t,r=void 0,n=!1,s=!1,i=!1){xt===void 0&&o_();let a=Gv(ui.hdb_root),c=Qn.join(a,Cs.HDB_CONFIG_FILE),l=Oa(c),u;if(r&&xt){let m=!1;for(let p in r)if(r[p]!=xt[p.toLowerCase()]){m=!0;break}if(!m){ur.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===jn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=ui[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=MA(m,t);l.setIn([...p],h)}else for(let m in r){let p=ui[m.toLowerCase()];if(p===jn.HTTP_SECUREPORT&&r[m]===xt[jn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===jn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===xt[jn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===jn.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=Cs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=MA(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(A){ur.error(A)}}}u&&Hv(l,u),vA(l);let d=l.getIn(["rootPath"]),f=Qn.join(d,Cs.HDB_CONFIG_FILE);if(n===!0&&X5(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);cn.writeFileSync(f,String(l)),s&&(xt=Cu(l.toJSON())),ur.trace(`Config parameter: ${e} updated with value: ${t}`)}o(qv,"updateConfigValue");function X5(e,t){try{let r=Qn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Cs.HDB_CONFIG_FILE}.bak`);cn.copySync(e,r),ur.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){ur.error(V5),ur.error(r)}}o(X5,"backupConfigFile");var Z5=["databases"];function Cu(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}),i_=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])&&!Z5.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!jn[l.toUpperCase()]&&ui[l]&&(s[ui[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(Cu,"flattenConfig");function MA(e,t){if(e===jn.CLUSTERING_NODENAME||e===jn.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(B5(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||wr.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 wr.autoCast(t)}o(MA,"castConfigValue");function e8(){let e=wr.getPropsFilePath(),t=Kc(e);return Oa(t).toJSON()}o(e8,"getConfiguration");async function t8(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return qv(void 0,void 0,s,!0),W5}catch(i){throw typeof i=="string"||i instanceof String?k5(i,i,H5.BAD_REQUEST,void 0,void 0,!0):i}}o(t8,"setConfiguration");function UA(){let e=wr.getPropsFilePath();try{cn.accessSync(e,cn.constants.F_OK|cn.constants.R_OK)}catch(n){if(!wr.noBootFile())throw ur.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Kc(e);return Oa(t).toJSON()}o(UA,"readConfigFile");function Oa(e){return xv.parseDocument(cn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Oa,"parseYamlDoc");function r8(){let e=UA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=wr.isEmptyOrZeroLength(t)?[]:t;let r=vv(t);if(r)throw Nu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=wr.isEmptyOrZeroLength(n)?[]:n;let s=vv(n);if(s)throw Nu.CONFIG_VALIDATION(s.message);if(!wr.isEmptyOrZeroLength(n)&&!wr.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!wr.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Nu.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(r8,"getClusteringRoutes");function $v(e){let t=Bv(e);xt={};for(let r in ui){let n=t.get(r.toUpperCase());if(wr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ui[r].toLowerCase();s===jn.LOGGING_ROOT?xt[s]=Qn.dirname(n):xt[s]=n}return xt}o($v,"initOldConfig");function n8(e){let t=UA();return F5.get(t,e.replaceAll("_","."))}o(n8,"getConfigFromFile");async function s8(e,t){let r=Oa(Kc());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 cn.writeFile(Kc(),String(r))}o(s8,"addConfig");function i8(e){let t=Kc(wr.getPropsFilePath()),r=Oa(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Qn.join(n,Cs.HDB_CONFIG_FILE);cn.writeFileSync(s,String(r))}o(i8,"deleteConfigFromFile");function o8(){return i_||(o_(),i_)}o(o8,"getConfigObj");function a8(){return xt||o_(),xt}o(a8,"getFlatConfigObj")});var le=v((zv,jv)=>{"use strict";var xA=require("fs-extra"),Yc=require("path"),Vv=require("os"),c8=require("properties-reader"),dm=Q(),um=ce(),Fe=(q(),M(W)),a_=Rt(),l8="Error initializing environment manager",c_="BOOT_PROPS_FILE_PATH",Kv=!1,u8={[Fe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},bo={};Object.assign(zv,jv.exports={BOOT_PROPS_FILE_PATH:c_,getHdbBasePath:d8,setHdbBasePath:f8,get:Yv,initSync:p8,setProperty:Ze,initTestEnvironment:E8,setCloneVar:h8});function d8(){return bo[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(d8,"getHdbBasePath");function f8(e){bo[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(f8,"setHdbBasePath");function Yv(e){let t=a_.getConfigValue(e);return t===void 0?bo[e]:t}o(Yv,"get");function Ze(e,t){u8[e]&&(bo[e]=t),a_.updateConfigObject(e,t)}o(Ze,"setProperty");function m8(){let e;try{e=um.getPropsFilePath(),xA.accessSync(e,xA.constants.F_OK|xA.constants.R_OK),Kv=!0;let t=c8(e);return bo[Fe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Fe.HDB_SETTINGS_NAMES.INSTALL_USER),bo[Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),bo[c_]=e,!0}catch{return dm.trace(`Environment manager found no properties file at ${e}`),!1}}o(m8,"doesPropFileExist");function p8(e=!1){try{((Kv||m8()||um.noBootFile())&&!Wv||e)&&(a_.initConfig(e),bo[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=a_.getConfigValue(Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){dm.error(l8),dm.error(t),console.error(t),process.exit(1)}}o(p8,"initSync");var Wv=!1;function h8(e){Wv=e}o(h8,"setCloneVar");function E8(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=Yc.join(__dirname,"../../","unitTests");bo[c_]=Yc.join(l,"hdb_boot_properties.file"),Ze(Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Yc.join(l,"settings.test")),Ze(Fe.HDB_SETTINGS_NAMES.INSTALL_USER,Vv.userInfo()?Vv.userInfo().username:void 0),Ze(Fe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ze(Fe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Yc.join(l,"envDir","log")),Ze(Fe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ze(Fe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ze(Fe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ze(Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Yc.join(l,"envDir")),Ze(Fe.CONFIG_PARAMS.STORAGE_PATH,Yc.join(l,"envDir")),s&&(Ze(Fe.CONFIG_PARAMS.HTTP_SECUREPORT,Yv(Fe.CONFIG_PARAMS.HTTP_PORT)),Ze(Fe.CONFIG_PARAMS.HTTP_PORT,null)),Ze(Fe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ze(Fe.CONFIG_PARAMS.HTTP_PORT,9926),Ze(Fe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ze(Fe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ze(Fe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,um.isEmpty(i)?!1:i),Ze(Fe.CONFIG_PARAMS.HTTP_CORS,um.isEmpty(i)?!1:i),Ze(Fe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ze(Fe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ze(Fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ze(Fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ze(Fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Yc.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ze(Fe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,um.isEmpty(c)?!1:c),a&&(Ze("CORS_ACCESSLIST",a),Ze(Fe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(Ze(Fe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ze(Fe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ze(Fe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ze(Fe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ze(Fe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ze(Fe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${c_}. Please check your boot props and settings files`;dm.fatal(r),dm.error(t)}}o(E8,"initTestEnvironment")});var BA=v((QNe,Qv)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=yt(),p=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],h="ts-build";if(u){let A=!1,S=!1;if(S=s(n(m,h))){let T=new Set;e.sync(p.map(w=>`${w}/**/*.ts`),{cwd:m}).forEach(w=>{let L=0,k=0;try{T.add(w),L=i(n(m,w)).mtimeMs-5e3,k=i(n(m,h,w.replace(/.ts$/,".js"))).mtimeMs}catch{}L>k&&(A=!0)}),e.sync(p.map(w=>`${w}/**/*.js`),{cwd:n(m,h)}).forEach(w=>{if(!T.has(w.replace(/.js$/,".ts")))try{l(n(m,h,w))}catch{}})}else A=!0;if(A){console.log("Compiling TypeScript...");let T=d("npx",["tsc"],{cwd:m});if(T.stdout?.length&&console.log(T.stdout.toString()),T.stderr?.length&&console.log(T.stderr.toString()),S){let w=n(t(),"harperdb-tsc.pid"),L=!1;if(s(w))try{process.kill(+a(w,"utf8"),0),L=!0}catch{}if(!L){console.log("Starting background TypeScript compilation...");let k=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});k.on("error",te=>{console.error("Error trying to compile TypeScript",te)}),k.pid&&c(w,String(k.pid),"utf-8"),k.unref()}}}}let E=Qv.constructor,g=E._findPath;E._findPath=function(A,S,T){if(A.startsWith(".")&&!T&&S.length===1&&S[0].startsWith(m)&&!S[0].includes("node_modules")){let w=r(m,S[0]),L;w.startsWith(h)?L=n(m,r(h,w)):L=n(m,h,w),(A.endsWith(".js")||A.endsWith(".ts"))&&(A=A.slice(0,-3));let k=n(L,A),te=k+".js";if(s(te))return te;if(k.includes(".")&&s(k))return k}return g(A,S,T)}}});var At=v((JNe,nU)=>{"use strict";var Em=(q(),M(W)),_8=ce(),Cn=le(),_m=require("path"),g8=require("minimist"),Jv=require("fs-extra"),Xv=require("lodash");Cn.initSync();var{CONFIG_PARAMS:Pa,DATABASES_PARAM_CONFIG:fm,SYSTEM_SCHEMA_NAME:l_}=Em,mm,pm,hm;function Zv(){if(mm!==void 0)return mm;if(Cn.getHdbBasePath()!==void 0)return mm=Cn.get(Pa.STORAGE_PATH)||_m.join(Cn.getHdbBasePath(),Em.DATABASES_DIR_NAME),mm}o(Zv,"getBaseSchemaPath");function eU(){if(pm!==void 0)return pm;if(Cn.getHdbBasePath()!==void 0)return pm=rU(l_),pm}o(eU,"getSystemSchemaPath");function tU(){if(hm!==void 0)return hm;if(Cn.getHdbBasePath()!==void 0)return hm=Cn.get(Em.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||_m.join(Cn.getHdbBasePath(),Em.TRANSACTIONS_DIR_NAME),hm}o(tU,"getTransactionAuditStoreBasePath");function S8(e,t){let r=Cn.get(Pa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||_m.join(tU(),e.toString())}o(S8,"getTransactionAuditStorePath");function rU(e,t){e=e.toString(),t=t&&t.toString();let r=Cn.get(Em.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||_m.join(Zv(),e)}o(rU,"getSchemaPath");function T8(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,g8(process.argv));let n=r[Pa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!_8.isObject(n))throw a;i=n}for(let a of i){let c=a[l_];if(!c)continue;let l=Cn.get(Pa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[fm.PATH];if(u)return Xv.set(l,[l_,fm.TABLES,t,fm.PATH],u),Cn.setProperty(Pa.DATABASES,l),u;let d=c?.[fm.PATH];if(d)return Xv.set(l,[l_,fm.PATH],d),Cn.setProperty(Pa.DATABASES,l),d}}let s=r[Pa.STORAGE_PATH.toUpperCase()];if(s){if(!Jv.pathExistsSync(s))throw new Error(s+" does not exist");let i=_m.join(s,e);return Jv.mkdirsSync(i),Cn.setProperty(Pa.STORAGE_PATH,s),i}return eU()}o(T8,"initSystemSchemaPaths");function y8(){mm=void 0,pm=void 0,hm=void 0}o(y8,"resetPaths");nU.exports={getBaseSchemaPath:Zv,getSystemSchemaPath:eU,getTransactionAuditStorePath:S8,getTransactionAuditStoreBasePath:tU,getSchemaPath:rU,initSystemSchemaPaths:T8,resetPaths:y8}});var On=v((tCe,cU)=>{"use strict";var R8=Yr().LMDB_ERRORS_ENUM,ZNe=require("lmdb"),A8=Vt(),eCe=require("buffer").Buffer,{OVERFLOW_MARKER:sU,MAX_SEARCH_KEY_LENGTH:u_}=A8,iU=["number","string","symbol","boolean","bigint"];function b8(e){if(e=e?.primaryStore||e,!e)throw new Error(R8.ENV_REQUIRED)}o(b8,"validateEnv");function I8(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(I8,"stringifyData");function w8(e){return e instanceof Date?e.valueOf():e}o(w8,"convertKeyValueToWrite");function N8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(iU.includes(typeof e))return e.length>u_?[e.slice(0,u_)+sU]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(iU.includes(typeof i))i.length>u_?r.push(i.slice(0,u_)+sU):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}o(N8,"getIndexedValues");var d_=0,oU=0;function aU(){oU=Date.now()-performance.now()}o(aU,"adjustStartTime");aU();var C8=6e4;setInterval(aU,C8).unref();function O8(){let e=performance.now()+oU;return e>d_?(d_=e,e):(d_+=488e-6,d_)}o(O8,"getNextMonotonicTime");cU.exports={validateEnv:b8,stringifyData:I8,convertKeyValueToWrite:w8,getNextMonotonicTime:O8,getIndexedValues:N8}});var gm=v((nCe,lU)=>{"use strict";var P8=(q(),M(W)).OPERATIONS_ENUM,FA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=P8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};lU.exports=FA});var Sm=v((oCe,mU)=>{"use strict";var iCe=gm(),f_=(q(),M(W)),kA=ce(),uU=Q(),L8=require("uuid"),{handleHDBError:m_,hdbErrors:D8}=Ee(),{HDB_ERROR_MSGS:p_,HTTP_STATUS_CODES:h_}=D8;mU.exports=dU;function dU(e,t,r){for(let s=0;s<t.length;s++)fU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];M8(i,r,e.operation)}}o(dU,"processRows");dU.validateAttribute=fU;function fU(e){if(Buffer.byteLength(String(e))>f_.INSERT_MAX_CHARACTER_SIZE)throw m_(new Error,p_.ATTR_NAME_LENGTH_ERR(e),h_.BAD_REQUEST,void 0,void 0,!0);if(kA.isEmptyOrZeroLength(e)||kA.isEmpty(e.trim()))throw m_(new Error,p_.ATTR_NAME_NULLISH_ERR,h_.BAD_REQUEST,void 0,void 0,!0)}o(fU,"validateAttribute");function M8(e,t,r){if(!e.hasOwnProperty(t)||kA.isEmptyOrZeroLength(e[t])){if(r===f_.OPERATIONS_ENUM.INSERT||r===f_.OPERATIONS_ENUM.UPSERT){e[t]=L8.v4();return}throw uU.error("Update transaction aborted due to record with no hash value:",e),m_(new Error,p_.RECORD_MISSING_HASH_ERR,h_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>f_.INSERT_MAX_CHARACTER_SIZE)throw uU.error(e),m_(new Error,p_.HASH_VAL_LENGTH_ERR,h_.BAD_REQUEST,void 0,void 0,!0)}o(M8,"validateHash")});function TU(e){GA=e}function B8(){x8=setInterval(function(){for(let e of HA)if(e.stale){let t=e.getContext()?.url;_U.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},U8).unref()}var qA,EU,_U,gU,SU,pU,HA,v8,Io,Tm,hU,GA,wo,E_,U8,x8,ym=ie(()=>{qA=I(On()),EU=I(Ee()),_U=I(Q()),gU=I(le());q();SU=I(ce()),pU=100,HA=new Set,v8=(0,SU.convertToMS)(gU.get(x.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Io={CLOSED:0,OPEN:1,LINGERING:2};o(TU,"replicationConfirmation");wo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Io.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Io.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),HA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(HA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Tm&&!this.overloadChecked&&performance.now()-hU>v8)throw new EU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Io.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Io.LINGERING){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,qA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let A=g[p===0?"before":"beforeIntermediate"];if(A){let S=A();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Io.LINGERING:Io.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<pU>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return Tm||(Tm=s,hU=performance.now(),Tm.then(()=>{Tm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];GA&&p&&i.push(GA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+pU/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let f=this.next?.commit(t);if(f?.then)return f?.then(m=>({txnTime:r,next:m}));d.next=f}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=Io.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},E_=class extends wo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,qA.getNextMonotonicTime)())}getReadTxn(){}},U8=3e4;o(B8,"startMonitoringTxns");B8()});var yU,Jn,$A,Ou=ie(()=>{yU=require("events"),Jn=class extends yU.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new $A;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)}},$A=class{static{o(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Io.OPEN&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new wo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var RU,La=ie(()=>{RU=I(li());ym();o(bt,"transaction");(0,RU._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var KA={};be(KA,{add:()=>__,applyReverse:()=>AU,getRecordAtTime:()=>VA,rebuildUpdateBefore:()=>g_});function __(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 g_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,__(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function AU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=F8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=bU}}function VA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Bt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":AU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===bU&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Bt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var F8,bU,S_=ie(()=>{No();o(__,"add");__.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)};F8={add:__};o(g_,"rebuildUpdateBefore");o(AU,"applyReverse");bU={};o(VA,"getRecordAtTime")});var Os=v(y_=>{var T_=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])T_.logsAtLevel(e)&&(y_[e]=T_[e]);y_.loggerWithTag=e=>T_.loggerWithTag(e,!0);y_.setLogLevel=T_.setLogLevel});var LU={};be(LU,{parse:()=>zA,streamAsJSON:()=>Am,stringify:()=>Wc});function Am(e){return new YA({value:e})}function IU(e){return console.error(e),JSON.stringify(Rm(e))}function wU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Wc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===OU)return PU(e);if(t.resolution)return t.resolution.then(()=>Wc(e));throw t}}function PU(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+=PU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Wc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function zA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),G8.test(e)?k8.parse(e):JSON.parse(e)):null}var NU,WA,CU,k8,H8,OU,Rm,YA,G8,jA=ie(()=>{NU=require("stream"),WA=I(Q()),CU=I(require("json-bigint-fixes")),k8=(0,CU.default)({useNativeBigInt:!0}),H8=1e4,OU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw OU};({errorToString:Rm}=WA);o(Am,"streamAsJSON");YA=class extends NU.Readable{static{o(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>(WA.warn("Error serializing in stream",c),a={done:!1,value:{error:Rm(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:Rm(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),IU)}catch(s){yield IU(s)}else yield Wc(t)}else yield Wc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);wU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Rm(t)),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>H8?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 wU(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(Rm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(IU,"handleError");o(wU,"when");o(Wc,"stringify");o(PU,"jsStringify");G8=/[[,:]\s*-?\d{16,}/;o(zA,"parse")});var GU={};be(GU,{asyncSerialization:()=>eb,contentTypes:()=>ZA,findBestSerializer:()=>A_,getDeserializer:()=>Lo,hasAsyncSerialization:()=>tb,registerContentHandlers:()=>wm,serialize:()=>Nm,serializeMessage:()=>Po,toCsvStream:()=>R_});function q8(e){try{return e?.[0]===123?XA(e):e}catch{return e}}function wm(e){e.register($8,{serializers:[{regex:/^application\/json$/,serializer:Am},{regex:/^application\/cbor$/,serializer:o(function(t){return new zc.EncoderStream(Im).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?jc.Readable.from((0,ki.encodeIter)(t,Im)):(0,ki.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),R_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,ki.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,zc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function A_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=ln.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,a=m)}}if(!n){if(r)throw new vU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(ln.keys()).join(", "),406);n=ln.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function Nm(e,t,r){let n=MU&&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 Ps)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=A_(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}),JA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,Oo.createBrotliCompress)({params:{[Oo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Oo.constants.BROTLI_MODE_TEXT:Oo.constants.BROTLI_MODE_GENERIC,[Oo.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>MU?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,Oo.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function Po(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Co=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=A_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=bm(e);return Co?.length>0?(Co.length===1?Co[0]:Promise.all(Co)).then(()=>Po(e,t,!0)):n}finally{Co=void 0}}function eb(e){if(Co)Co.push(e);else throw new Error("Unable to serialize asynchronously")}function tb(){return!!Co}function V8(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 Y8(e){return K8.includes(e)}function W8(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Lo(e="",t=!1){let r=W8(e),n=r.type&&ln.get(r.type)?.deserialize||z8(r);return t?s=>V8(s).then(n):n}function z8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!Y8(e.parameters.charset)&&JA.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 XA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function j8(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 R_(e,t){let r=jc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new BU.Transform(n,s);return r.pipe(i)}var ki,zc,Oo,vU,jc,UU,QA,xU,JA,BU,FU,kU,bm,XA,Im,ln,ZA,DU,HU,$8,MU,Co,K8,Do=ie(()=>{jA();ki=require("msgpackr"),zc=require("cbor-x"),Oo=require("zlib"),vU=I(Ee()),jc=I(require("stream"));Ur();UU=I(li()),QA=I(le());q();xU=I(require("yaml")),JA=I(Os());Ls();BU=require("json2csv"),FU=I(require("fastify-plugin")),kU=QA.default.get(x.SERIALIZATION_BIGINT)!==!1,bm=kU?Wc:JSON.stringify,XA=kU?zA:JSON.parse,Im={useRecords:!1,useToJSON:!0},ln=new Map,ZA=ln;Ue.contentTypes=ZA;(0,UU._assignPackageExport)("contentTypes",ZA);ln.set("application/json",{serializeStream:Am,serialize:bm,deserialize(e){return XA(e)},q:.8});DU=new zc.Encoder(Im);ln.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new zc.EncoderStream(Im).end(e)},serialize:DU.encode,deserialize:DU.decode,q:1});ln.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?jc.Readable.from((0,ki.encodeIter)(e,Im)):(0,ki.pack)(e)},serialize:ki.pack,deserialize:ki.unpack,q:.9});ln.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),R_(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]),R_(e,e?.getColumns?.())},q:.1});ln.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return jc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});ln.set("text/yaml",{serialize(e){return xU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});ln.set("text/event-stream",{serializeStream:o(function(e){return jc.Readable.from(j8(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
3
|
+
`)},U6="certificate.pem",x6="privateKey.pem",B6="caCertificate.pem",F6="natsCertificate.pem",k6="natsCaCertificate.pem",wt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},H6={tls_certificate:wt.SERVER,tlsCertificateAuthority:wt.CA,customFunctions_tls_certificate:wt.SERVER,customFunctionsTlsCertificateAuthority:wt.CA,operationsApi_tls_certificate:wt["OPERATIONS-API"],operationsApiTlsCertificateAuthority:wt["OPERATIONS-CA"]},G6={[wt.SERVER]:2,[wt.DEFAULT]:1},q6={[wt["OPERATIONS-API"]]:3,[wt.SERVER]:2,[wt.DEFAULT]:1},$6={[wt["OPERATIONS-API"]]:3,[wt.SERVER]:2,[wt.DEFAULT]:1},V6={[wt["OPERATIONS-CA"]]:3,[wt.CA]:2,[wt["DEFAULT-CA"]]:1},K6={[wt["OPERATIONS-CA"]]:3,[wt.CA]:2,[wt["DEFAULT-CA"]]:1},Y6={[wt.CA]:2,[wt["DEFAULT-CA"]]:1};an.CERTIFICATE_PEM_NAME=U6;an.PRIVATEKEY_PEM_NAME=x6;an.CA_PEM_NAME=B6;an.CERT_NAME=wt;an.CERT_CONFIG_NAME_MAP=H6;an.CERT_PREFERENCE_APP=G6;an.CERT_PREFERENCE_OPS=q6;an.CERT_PREFERENCE_REP=$6;an.CA_CERT_PREFERENCE_REP=V6;an.CA_CERT_PREFERENCE_OPS=K6;an.CA_CERT_PREFERENCE_APP=Y6;an.CERTIFICATE_VALUES=v6;an.NATS_CERTIFICATE_PEM_NAME=F6;an.NATS_CA_PEM_NAME=k6});var ft=v((BNe,fv)=>{"use strict";var Nn=require("validate.js");Nn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Nn.validators.type.checks[t](e)?null:` must be a '${t}' value`};Nn.validators.type.checks={Object:o(function(e){return Nn.isObject(e)&&!Nn.isArray(e)},"Object"),Array:Nn.isArray,Integer:Nn.isInteger,Number:Nn.isNumber,String:Nn.isString,Date:Nn.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};Nn.validators.hasValidFileExt=function(e,t){return Nn.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};fv.exports={validateObject:W6,validateObjectAsync:z6,validateBySchema:j6};function W6(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Nn(e,t,{format:"flat"});return r?new Error(r):null}o(W6,"validateObject");async function z6(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Nn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(z6,"validateObjectAsync");function j6(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(j6,"validateBySchema")});var CA=v((HNe,gv)=>{"use strict";var Ev=require("fs-extra"),_e=require("joi"),Q6=require("os"),{boolean:Ve,string:_t,number:lr,array:Ca}=_e.types(),{totalmem:mv}=require("os"),Vc=require("path"),J6=Q(),NA=ce(),kNe=wA(),pv=(q(),M(W)),X6=ft(),hv="log",Z6="components",e5="Invalid logging.rotation.maxSize unit. Available units are G, M or K",t5="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",r5="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",n5="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",s5="rootPath config parameter is undefined",Cn=_e.alternatives([lr.min(0),_t]).optional().empty(null),r_=_e.alternatives([Ca.items(_t,{host:_t.required(),port:Cn},{hostname:_t.required(),port:Cn}).empty(null),Ca.items(_t)]),Fi,_v=!1;gv.exports={configValidator:i5,routesValidator:d5,routeConstraints:r_};function i5(e,t=!1){if(_v=t,Fi=e.rootPath,NA.isEmpty(Fi))throw s5;let r=Ve.optional(),n=lr.min(0).max(1e3).empty(null).default(u5),s=_t.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(am),i=_t.optional().empty(null),a=_t.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=_e.string().empty(null).default(am),l=_e.custom(a5).empty(null).default(am),u=e.clustering?.enabled,d=_e.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=_e.object({enabled:r,hubServer:_e.object({cluster:_e.object({name:_e.required().empty(null),network:_e.object({port:Cn,routes:r_}).required()}).required(),leafNodes:_e.object({network:_e.object({port:Cn}).required()}).required(),network:_e.object({port:Cn}).required()}).required(),leafServer:_e.object({network:_e.object({port:Cn,routes:r_}).required(),streams:_e.object({maxAge:lr.min(120).allow(null).optional(),maxBytes:lr.min(1).allow(null).optional(),maxMsgs:lr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:_e.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ve.optional(),databaseLevel:Ve.optional(),tls:_e.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ve.required(),verify:Ve.optional()}),user:_t.optional().empty(null)}).optional():f=_e.object({enabled:r,tls:_e.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ve.optional()})}).optional(),_e.object({authentication:_e.alternatives(_e.object({authorizeLocal:Ve,cacheTTL:lr.required(),cookie:_e.object({domains:Ca.items(_t).optional(),expires:_t.optional()}),enableSessions:Ve,hashFunction:_t.valid("md5","sha256","argon2id").optional().empty(null)}),Ve).optional(),analytics:_e.object({aggregatePeriod:lr,replicate:Ve.optional()}),replication:_e.object({hostname:_e.alternatives(_t,lr).optional().empty(null),url:_t.optional().empty(null),port:Cn,securePort:Cn,routes:Ca.optional().empty(null),databases:_e.alternatives(_t,Ca),enableRootCAs:Ve.optional(),copyTablesToCatchUp:Ve.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:_e.object({enabled:r}).required(),logging:_e.object({auditAuthEvents:_e.object({logFailed:Ve,logSuccessful:Ve}),file:Ve.required(),level:_e.valid("notify","fatal","error","warn","info","debug","trace"),rotation:_e.object({enabled:Ve.optional(),compress:Ve.optional(),interval:_t.custom(l5).optional().empty(null),maxSize:_t.custom(c5).optional().empty(null),path:_t.optional().empty(null).default(am)}).required(),root:s,stdStreams:Ve.required(),auditLog:Ve.required()}).required(),operationsApi:_e.object({network:_e.object({cors:Ve.optional(),corsAccessList:Ca.optional(),headersTimeout:lr.min(1).optional(),keepAliveTimeout:lr.min(1).optional(),port:Cn,domainSocket:_e.optional().empty("hdb/operations-server").default(am),securePort:Cn,timeout:lr.min(1).optional()}).optional(),tls:_e.alternatives([_e.array().items(d),d])}).required(),rootPath:_t.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:_e.object({network:_e.object({port:Cn,securePort:Cn,mtls:_e.alternatives([Ve.optional(),_e.object({user:_t.optional(),certificateAuthority:i,required:Ve.optional()})])}).required(),webSocket:Ve.optional(),requireAuthentication:Ve.optional()}),http:_e.object({compressionThreshold:lr.optional(),cors:Ve.optional(),corsAccessList:Ca.optional(),headersTimeout:lr.min(1).optional(),port:Cn,securePort:Cn,maxHeaderSize:lr.optional(),mtls:_e.alternatives([Ve.optional(),_e.object({user:_t.optional(),certificateAuthority:i,required:Ve.optional()})]),threadRange:_e.alternatives([Ca.optional(),_t.optional()])}).required(),threads:_e.alternatives(n.optional(),_e.object({count:n.optional(),debug:_e.alternatives(Ve.optional(),_e.object({startingPort:lr.min(1).optional(),host:_t.optional(),waitForDebugger:Ve.optional()})),maxHeapMemory:lr.min(0).optional()})),storage:_e.object({writeAsync:Ve.required(),overlappingSync:Ve.optional(),caching:Ve.optional(),compression:_e.alternatives([Ve.optional(),_e.object({dictionary:_t.optional(),threshold:lr.optional()})]),compactOnStart:Ve.optional(),compactOnStartKeepBackup:Ve.optional(),noReadAhead:Ve.optional(),path:l,prefetchWrites:Ve.optional(),maxFreeSpaceToLoad:lr.optional(),maxFreeSpaceToRetain:lr.optional()}).required(),ignoreScripts:Ve.optional(),tls:_e.alternatives([_e.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(i5,"configValidator");function o5(e){return _v||Ev.existsSync(e)?null:`Specified path ${e} does not exist.`}o(o5,"doesPathExist");function a5(e,t){_e.assert(e,_t.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=o5(e);if(r)return t.message(r)}o(a5,"validatePath");function c5(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(e5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(r5):e}o(c5,"validateRotationMaxSize");function l5(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(t5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(n5):e}o(l5,"validateRotationInterval");function u5(e,t){let r=t.state.path.join("."),n=Q6.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||mv();return i=Math.round(Math.min(i,mv())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),J6.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(u5,"setDefaultThreads");function am(e,t){let r=t.state.path.join(".");if(!NA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(NA.isEmpty(Fi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Vc.join(Fi,Z6);case"logging.root":return Vc.join(Fi,hv);case"clustering.leafServer.streams.path":return Vc.join(Fi,"clustering","leaf");case"storage.path":let n=Vc.join(Fi,pv.LEGACY_DATABASES_DIR_NAME);return Ev.existsSync(n)?n:Vc.join(Fi,pv.DATABASES_DIR_NAME);case"logging.rotation.path":return Vc.join(Fi,hv);case"operationsApi.network.domainSocket":return r==null?null:Vc.join(Fi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(am,"setDefaultRoot");function d5(e){let t=_e.object({routes:r_});return X6.validateBySchema({routes:e},t)}o(d5,"routesValidator")});var Vt=v((qNe,Tv)=>{"use strict";var f5="__dbis__",m5="__txns__",p5="__environment_name__",h5="__dbi_defintion__",E5={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"},_5=["__createdtime__","__updatedtime__"],g5="\uFFFF",Sv={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},S5=Object.values(Sv);Tv.exports={AUDIT_STORE_NAME:m5,INTERNAL_DBIS_NAME:f5,DBI_DEFINITION_NAME:h5,SEARCH_TYPES:E5,TIMESTAMP_NAMES:_5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:p5,TRANSACTIONS_DBI_NAMES_ENUM:Sv,TRANSACTIONS_DBIS:S5,OVERFLOW_MARKER:g5}});var Yr=v(($Ne,Ov)=>{"use strict";var yv=(q(),M(W)),Rv=Vt(),Av={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},bv=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Iv={500:bv("There was an error processing your request."),400:"Invalid request"},T5=Iv[Av.INTERNAL_SERVER_ERROR],y5={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},R5={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},A5={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},b5={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"value is required",SEARCH_VALUE_TOO_LARGE:"value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${Rv.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Rv.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"},I5={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${yv.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 ${yv.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"},wv={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"},w5={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},N5={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},C5={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},O5={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},P5={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},Nv={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},Cv={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},L5={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"},D5={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},M5={...wv,...A5,...y5,...w5,...N5,...C5,...O5,...P5,...I5,...Nv,...Cv,...L5,...D5,...R5};Ov.exports={CHECK_LOGS_WRAPPER:bv,HDB_ERROR_MSGS:M5,DEFAULT_ERROR_MSGS:Iv,DEFAULT_ERROR_RESP:T5,HTTP_STATUS_CODES:Av,LMDB_ERRORS_ENUM:b5,AUTHENTICATION_ERROR_MSGS:wv,VALIDATION_ERROR_MSGS:Nv,ITC_ERRORS:Cv}});var Ee=v((KNe,Dv)=>{"use strict";var Iu=Yr(),v5=Q(),U5=(q(),M(W)),n_=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Pv),this.statusCode=n||Iu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Iu.DEFAULT_ERROR_MSGS[n]?Iu.DEFAULT_ERROR_MSGS[n]:Iu.DEFAULT_ERROR_MSGS[Iu.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&&v5[s](i)}},OA=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},PA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Pv(e,t,r,n=U5.LOG_LEVELS.ERROR,s=null,i=!1){if(Lv(e))return e;let a=new n_(e,t,r,n,s);return i&&delete a.stack,a}o(Pv,"handleHDBError");function wu(e){this.message=e}o(wu,"Violation");wu.prototype=Object.create(Error.prototype);wu.prototype.constructor=wu;wu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var LA=class extends wu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function Lv(e){return e.__proto__.constructor.name===n_.name}o(Lv,"isHDBError");Dv.exports={isHDBError:Lv,handleHDBError:Pv,ClientError:OA,ServerError:PA,AccessViolation:LA,Violation:wu,hdbErrors:Iu}});var cm={};be(cm,{server:()=>Ue});var Mv,Ue,Ur=ie(()=>{Mv=I(li()),Ue={};(0,Mv._assignPackageExport)("server",Ue)});var Rt=v(rr=>{"use strict";var Cs=(q(),M(W)),wr=ce(),ur=Q(),{configValidator:x5,routesValidator:vv}=CA(),cn=require("fs-extra"),xv=require("yaml"),Jn=require("path"),B5=require("is-number"),Bv=require("properties-reader"),F5=require("lodash"),{handleHDBError:k5}=Ee(),{HTTP_STATUS_CODES:H5,HDB_ERROR_MSGS:Nu}=Yr(),{server:G5}=(Ur(),M(cm)),{PACKAGE_ROOT:Fv}=yt(),{DATABASES_PARAM_CONFIG:lm,CONFIG_PARAMS:Qn,CONFIG_PARAM_MAP:ui}=Cs,q5="Unable to get config value because config is uninitialized",$5="Config successfully initialized",V5="Error backing up config file",K5="Empty parameter sent to getConfigValue",kv=Jn.join(Fv,"config","yaml",Cs.HDB_DEFAULT_CONFIG_FILE),Y5=Jn.join(Fv,"config","yaml","defaultNatsConfig.yaml"),W5="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Uv={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"},s_,xt,i_;rr.createConfigFile=z5;rr.getDefaultConfig=j5;rr.getConfigValue=Gv;rr.initConfig=o_;rr.flattenConfig=Cu;rr.updateConfigValue=qv;rr.updateConfigObject=J5;rr.getConfiguration=e8;rr.setConfiguration=t8;rr.readConfigFile=UA;rr.getClusteringRoutes=r8;rr.initOldConfig=$v;rr.getConfigFromFile=n8;rr.getConfigFilePath=Kc;rr.addConfig=s8;rr.deleteConfigFromFile=i8;rr.getConfigObj=o8;rr.resolvePath=DA;rr.getFlatConfigObj=a8;function DA(e){if(e?.startsWith("~/"))return Jn.join(wr.getHomeDir(),e.slice(1));let t=le();try{return Jn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(DA,"resolvePath");function z5(e,t=!1){let r=Oa(kv);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=xv.parseDocument(cn.readFileSync(Y5,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}s_=Cu(r.toJSON());let n;for(let c in e){let l=ui[c.toLowerCase()];if(l===Qn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=MA(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(f){ur.error(f)}}}n&&Hv(r,n),vA(r,t);let s=r.toJSON();xt=Cu(s);let i=r.getIn(["rootPath"]),a=Jn.join(i,Cs.HDB_CONFIG_FILE);if(cn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);cn.writeFileSync(a,String(r)),ur.trace(`Config file written to ${a}`)}o(z5,"createConfigFile");function Hv(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!wr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(lm.TABLES))for(let i in n[s][lm.TABLES])for(let a in n[s][lm.TABLES][i]){let c=n[s][lm.TABLES][i][a],l=[Qn.DATABASES,s,lm.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[Qn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){ur.error("Error parsing schemas CLI/env config arguments",n)}}o(Hv,"setSchemasConfig");function j5(e){if(s_===void 0){let r=Oa(kv);s_=Cu(r.toJSON())}let t=ui[e.toLowerCase()];if(t!==void 0)return s_[t.toLowerCase()]}o(j5,"getDefaultConfig");function Gv(e){if(e==null){ur.info(K5);return}if(xt===void 0){ur.trace(q5);return}let t=ui[e.toLowerCase()];if(t!==void 0)return xt[t.toLowerCase()]}o(Gv,"getConfigValue");function Kc(e=wr.getPropsFilePath()){let t=wr.getEnvCliRootPath();if(t)return DA(Jn.join(t,Cs.HDB_CONFIG_FILE));let r=Bv(e);return DA(r.get(Cs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Kc,"getConfigFilePath");function o_(e=!1){if(xt===void 0||e){let t;if(!wr.noBootFile()){t=wr.getPropsFilePath();try{cn.accessSync(t,cn.constants.F_OK|cn.constants.R_OK)}catch(i){throw ur.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Kc(t),n;if(r.includes("config/settings.js"))try{$v(r);return}catch(i){if(i.code!==Cs.NODE_ERROR_CODES.ENOENT)throw i}try{n=Oa(r)}catch(i){if(i.code===Cs.NODE_ERROR_CODES.ENOENT){ur.trace(`HarperDB config file not found at ${r}.
|
|
4
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw ur.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Q5(n,r),vA(n);let s=n.toJSON();if(G5.config=s,xt=Cu(s),xt.logging_rotation_rotate)for(let i in Uv)xt[i]&&ur.error(`Config ${Uv[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);ur.trace($5)}}o(o_,"initConfig");function Q5(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Jn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Jn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(ur.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);cn.writeFileSync(t,String(e))}}o(Q5,"checkForUpdatedConfig");function vA(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 Nu.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 Nu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=x5(r,t);if(n.error)throw Nu.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}o(vA,"validateConfig");function J5(e,t){xt===void 0&&(xt={});let r=ui[e.toLowerCase()];if(r===void 0){ur.trace(`Unable to update config object because config param '${e}' does not exist`);return}xt[r.toLowerCase()]=t}o(J5,"updateConfigObject");function qv(e,t,r=void 0,n=!1,s=!1,i=!1){xt===void 0&&o_();let a=Gv(ui.hdb_root),c=Jn.join(a,Cs.HDB_CONFIG_FILE),l=Oa(c),u;if(r&&xt){let m=!1;for(let p in r)if(r[p]!=xt[p.toLowerCase()]){m=!0;break}if(!m){ur.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Qn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=ui[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=MA(m,t);l.setIn([...p],h)}else for(let m in r){let p=ui[m.toLowerCase()];if(p===Qn.HTTP_SECUREPORT&&r[m]===xt[Qn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===Qn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===xt[Qn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===Qn.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=Cs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=MA(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(A){ur.error(A)}}}u&&Hv(l,u),vA(l);let d=l.getIn(["rootPath"]),f=Jn.join(d,Cs.HDB_CONFIG_FILE);if(n===!0&&X5(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);cn.writeFileSync(f,String(l)),s&&(xt=Cu(l.toJSON())),ur.trace(`Config parameter: ${e} updated with value: ${t}`)}o(qv,"updateConfigValue");function X5(e,t){try{let r=Jn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Cs.HDB_CONFIG_FILE}.bak`);cn.copySync(e,r),ur.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){ur.error(V5),ur.error(r)}}o(X5,"backupConfigFile");var Z5=["databases"];function Cu(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}),i_=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])&&!Z5.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Qn[l.toUpperCase()]&&ui[l]&&(s[ui[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(Cu,"flattenConfig");function MA(e,t){if(e===Qn.CLUSTERING_NODENAME||e===Qn.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(B5(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||wr.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 wr.autoCast(t)}o(MA,"castConfigValue");function e8(){let e=wr.getPropsFilePath(),t=Kc(e);return Oa(t).toJSON()}o(e8,"getConfiguration");async function t8(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return qv(void 0,void 0,s,!0),W5}catch(i){throw typeof i=="string"||i instanceof String?k5(i,i,H5.BAD_REQUEST,void 0,void 0,!0):i}}o(t8,"setConfiguration");function UA(){let e=wr.getPropsFilePath();try{cn.accessSync(e,cn.constants.F_OK|cn.constants.R_OK)}catch(n){if(!wr.noBootFile())throw ur.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Kc(e);return Oa(t).toJSON()}o(UA,"readConfigFile");function Oa(e){return xv.parseDocument(cn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Oa,"parseYamlDoc");function r8(){let e=UA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=wr.isEmptyOrZeroLength(t)?[]:t;let r=vv(t);if(r)throw Nu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=wr.isEmptyOrZeroLength(n)?[]:n;let s=vv(n);if(s)throw Nu.CONFIG_VALIDATION(s.message);if(!wr.isEmptyOrZeroLength(n)&&!wr.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!wr.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Nu.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(r8,"getClusteringRoutes");function $v(e){let t=Bv(e);xt={};for(let r in ui){let n=t.get(r.toUpperCase());if(wr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ui[r].toLowerCase();s===Qn.LOGGING_ROOT?xt[s]=Jn.dirname(n):xt[s]=n}return xt}o($v,"initOldConfig");function n8(e){let t=UA();return F5.get(t,e.replaceAll("_","."))}o(n8,"getConfigFromFile");async function s8(e,t){let r=Oa(Kc());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 cn.writeFile(Kc(),String(r))}o(s8,"addConfig");function i8(e){let t=Kc(wr.getPropsFilePath()),r=Oa(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Jn.join(n,Cs.HDB_CONFIG_FILE);cn.writeFileSync(s,String(r))}o(i8,"deleteConfigFromFile");function o8(){return i_||(o_(),i_)}o(o8,"getConfigObj");function a8(){return xt||o_(),xt}o(a8,"getFlatConfigObj")});var le=v((zv,jv)=>{"use strict";var xA=require("fs-extra"),Yc=require("path"),Vv=require("os"),c8=require("properties-reader"),dm=Q(),um=ce(),Fe=(q(),M(W)),a_=Rt(),l8="Error initializing environment manager",c_="BOOT_PROPS_FILE_PATH",Kv=!1,u8={[Fe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},bo={};Object.assign(zv,jv.exports={BOOT_PROPS_FILE_PATH:c_,getHdbBasePath:d8,setHdbBasePath:f8,get:Yv,initSync:p8,setProperty:Ze,initTestEnvironment:E8,setCloneVar:h8});function d8(){return bo[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(d8,"getHdbBasePath");function f8(e){bo[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(f8,"setHdbBasePath");function Yv(e){let t=a_.getConfigValue(e);return t===void 0?bo[e]:t}o(Yv,"get");function Ze(e,t){u8[e]&&(bo[e]=t),a_.updateConfigObject(e,t)}o(Ze,"setProperty");function m8(){let e;try{e=um.getPropsFilePath(),xA.accessSync(e,xA.constants.F_OK|xA.constants.R_OK),Kv=!0;let t=c8(e);return bo[Fe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Fe.HDB_SETTINGS_NAMES.INSTALL_USER),bo[Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),bo[c_]=e,!0}catch{return dm.trace(`Environment manager found no properties file at ${e}`),!1}}o(m8,"doesPropFileExist");function p8(e=!1){try{((Kv||m8()||um.noBootFile())&&!Wv||e)&&(a_.initConfig(e),bo[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=a_.getConfigValue(Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){dm.error(l8),dm.error(t),console.error(t),process.exit(1)}}o(p8,"initSync");var Wv=!1;function h8(e){Wv=e}o(h8,"setCloneVar");function E8(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=Yc.join(__dirname,"../../","unitTests");bo[c_]=Yc.join(l,"hdb_boot_properties.file"),Ze(Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Yc.join(l,"settings.test")),Ze(Fe.HDB_SETTINGS_NAMES.INSTALL_USER,Vv.userInfo()?Vv.userInfo().username:void 0),Ze(Fe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ze(Fe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Yc.join(l,"envDir","log")),Ze(Fe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ze(Fe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ze(Fe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ze(Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Yc.join(l,"envDir")),Ze(Fe.CONFIG_PARAMS.STORAGE_PATH,Yc.join(l,"envDir")),s&&(Ze(Fe.CONFIG_PARAMS.HTTP_SECUREPORT,Yv(Fe.CONFIG_PARAMS.HTTP_PORT)),Ze(Fe.CONFIG_PARAMS.HTTP_PORT,null)),Ze(Fe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ze(Fe.CONFIG_PARAMS.HTTP_PORT,9926),Ze(Fe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ze(Fe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ze(Fe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,um.isEmpty(i)?!1:i),Ze(Fe.CONFIG_PARAMS.HTTP_CORS,um.isEmpty(i)?!1:i),Ze(Fe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ze(Fe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ze(Fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ze(Fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ze(Fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Yc.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ze(Fe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,um.isEmpty(c)?!1:c),a&&(Ze("CORS_ACCESSLIST",a),Ze(Fe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(Ze(Fe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ze(Fe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ze(Fe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ze(Fe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ze(Fe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ze(Fe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${c_}. Please check your boot props and settings files`;dm.fatal(r),dm.error(t)}}o(E8,"initTestEnvironment")});var BA=v((QNe,Qv)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=yt(),p=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],h="ts-build";if(u){let A=!1,S=!1;if(S=s(n(m,h))){let T=new Set;e.sync(p.map(w=>`${w}/**/*.ts`),{cwd:m}).forEach(w=>{let L=0,k=0;try{T.add(w),L=i(n(m,w)).mtimeMs-5e3,k=i(n(m,h,w.replace(/.ts$/,".js"))).mtimeMs}catch{}L>k&&(A=!0)}),e.sync(p.map(w=>`${w}/**/*.js`),{cwd:n(m,h)}).forEach(w=>{if(!T.has(w.replace(/.js$/,".ts")))try{l(n(m,h,w))}catch{}})}else A=!0;if(A){console.log("Compiling TypeScript...");let T=d("npx",["tsc"],{cwd:m});if(T.stdout?.length&&console.log(T.stdout.toString()),T.stderr?.length&&console.log(T.stderr.toString()),S){let w=n(t(),"harperdb-tsc.pid"),L=!1;if(s(w))try{process.kill(+a(w,"utf8"),0),L=!0}catch{}if(!L){console.log("Starting background TypeScript compilation...");let k=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});k.on("error",te=>{console.error("Error trying to compile TypeScript",te)}),k.pid&&c(w,String(k.pid),"utf-8"),k.unref()}}}}let E=Qv.constructor,g=E._findPath;E._findPath=function(A,S,T){if(A.startsWith(".")&&!T&&S.length===1&&S[0].startsWith(m)&&!S[0].includes("node_modules")){let w=r(m,S[0]),L;w.startsWith(h)?L=n(m,r(h,w)):L=n(m,h,w),(A.endsWith(".js")||A.endsWith(".ts"))&&(A=A.slice(0,-3));let k=n(L,A),te=k+".js";if(s(te))return te;if(k.includes(".")&&s(k))return k}return g(A,S,T)}}});var At=v((JNe,nU)=>{"use strict";var Em=(q(),M(W)),_8=ce(),On=le(),_m=require("path"),g8=require("minimist"),Jv=require("fs-extra"),Xv=require("lodash");On.initSync();var{CONFIG_PARAMS:Pa,DATABASES_PARAM_CONFIG:fm,SYSTEM_SCHEMA_NAME:l_}=Em,mm,pm,hm;function Zv(){if(mm!==void 0)return mm;if(On.getHdbBasePath()!==void 0)return mm=On.get(Pa.STORAGE_PATH)||_m.join(On.getHdbBasePath(),Em.DATABASES_DIR_NAME),mm}o(Zv,"getBaseSchemaPath");function eU(){if(pm!==void 0)return pm;if(On.getHdbBasePath()!==void 0)return pm=rU(l_),pm}o(eU,"getSystemSchemaPath");function tU(){if(hm!==void 0)return hm;if(On.getHdbBasePath()!==void 0)return hm=On.get(Em.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||_m.join(On.getHdbBasePath(),Em.TRANSACTIONS_DIR_NAME),hm}o(tU,"getTransactionAuditStoreBasePath");function S8(e,t){let r=On.get(Pa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||_m.join(tU(),e.toString())}o(S8,"getTransactionAuditStorePath");function rU(e,t){e=e.toString(),t=t&&t.toString();let r=On.get(Em.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||_m.join(Zv(),e)}o(rU,"getSchemaPath");function T8(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,g8(process.argv));let n=r[Pa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!_8.isObject(n))throw a;i=n}for(let a of i){let c=a[l_];if(!c)continue;let l=On.get(Pa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[fm.PATH];if(u)return Xv.set(l,[l_,fm.TABLES,t,fm.PATH],u),On.setProperty(Pa.DATABASES,l),u;let d=c?.[fm.PATH];if(d)return Xv.set(l,[l_,fm.PATH],d),On.setProperty(Pa.DATABASES,l),d}}let s=r[Pa.STORAGE_PATH.toUpperCase()];if(s){if(!Jv.pathExistsSync(s))throw new Error(s+" does not exist");let i=_m.join(s,e);return Jv.mkdirsSync(i),On.setProperty(Pa.STORAGE_PATH,s),i}return eU()}o(T8,"initSystemSchemaPaths");function y8(){mm=void 0,pm=void 0,hm=void 0}o(y8,"resetPaths");nU.exports={getBaseSchemaPath:Zv,getSystemSchemaPath:eU,getTransactionAuditStorePath:S8,getTransactionAuditStoreBasePath:tU,getSchemaPath:rU,initSystemSchemaPaths:T8,resetPaths:y8}});var Pn=v((tCe,cU)=>{"use strict";var R8=Yr().LMDB_ERRORS_ENUM,ZNe=require("lmdb"),A8=Vt(),eCe=require("buffer").Buffer,{OVERFLOW_MARKER:sU,MAX_SEARCH_KEY_LENGTH:u_}=A8,iU=["number","string","symbol","boolean","bigint"];function b8(e){if(e=e?.primaryStore||e,!e)throw new Error(R8.ENV_REQUIRED)}o(b8,"validateEnv");function I8(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(I8,"stringifyData");function w8(e){return e instanceof Date?e.valueOf():e}o(w8,"convertKeyValueToWrite");function N8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(iU.includes(typeof e))return e.length>u_?[e.slice(0,u_)+sU]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(iU.includes(typeof i))i.length>u_?r.push(i.slice(0,u_)+sU):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}o(N8,"getIndexedValues");var d_=0,oU=0;function aU(){oU=Date.now()-performance.now()}o(aU,"adjustStartTime");aU();var C8=6e4;setInterval(aU,C8).unref();function O8(){let e=performance.now()+oU;return e>d_?(d_=e,e):(d_+=488e-6,d_)}o(O8,"getNextMonotonicTime");cU.exports={validateEnv:b8,stringifyData:I8,convertKeyValueToWrite:w8,getNextMonotonicTime:O8,getIndexedValues:N8}});var gm=v((nCe,lU)=>{"use strict";var P8=(q(),M(W)).OPERATIONS_ENUM,FA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=P8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};lU.exports=FA});var Sm=v((oCe,mU)=>{"use strict";var iCe=gm(),f_=(q(),M(W)),kA=ce(),uU=Q(),L8=require("uuid"),{handleHDBError:m_,hdbErrors:D8}=Ee(),{HDB_ERROR_MSGS:p_,HTTP_STATUS_CODES:h_}=D8;mU.exports=dU;function dU(e,t,r){for(let s=0;s<t.length;s++)fU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];M8(i,r,e.operation)}}o(dU,"processRows");dU.validateAttribute=fU;function fU(e){if(Buffer.byteLength(String(e))>f_.INSERT_MAX_CHARACTER_SIZE)throw m_(new Error,p_.ATTR_NAME_LENGTH_ERR(e),h_.BAD_REQUEST,void 0,void 0,!0);if(kA.isEmptyOrZeroLength(e)||kA.isEmpty(e.trim()))throw m_(new Error,p_.ATTR_NAME_NULLISH_ERR,h_.BAD_REQUEST,void 0,void 0,!0)}o(fU,"validateAttribute");function M8(e,t,r){if(!e.hasOwnProperty(t)||kA.isEmptyOrZeroLength(e[t])){if(r===f_.OPERATIONS_ENUM.INSERT||r===f_.OPERATIONS_ENUM.UPSERT){e[t]=L8.v4();return}throw uU.error("Update transaction aborted due to record with no hash value:",e),m_(new Error,p_.RECORD_MISSING_HASH_ERR,h_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>f_.INSERT_MAX_CHARACTER_SIZE)throw uU.error(e),m_(new Error,p_.HASH_VAL_LENGTH_ERR,h_.BAD_REQUEST,void 0,void 0,!0)}o(M8,"validateHash")});function TU(e){GA=e}function B8(){x8=setInterval(function(){for(let e of HA)if(e.stale){let t=e.getContext()?.url;_U.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},U8).unref()}var qA,EU,_U,gU,SU,pU,HA,v8,Io,Tm,hU,GA,wo,E_,U8,x8,ym=ie(()=>{qA=I(Pn()),EU=I(Ee()),_U=I(Q()),gU=I(le());q();SU=I(ce()),pU=100,HA=new Set,v8=(0,SU.convertToMS)(gU.get(x.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Io={CLOSED:0,OPEN:1,LINGERING:2};o(TU,"replicationConfirmation");wo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Io.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Io.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),HA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(HA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Tm&&!this.overloadChecked&&performance.now()-hU>v8)throw new EU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Io.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Io.LINGERING){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,qA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let A=g[p===0?"before":"beforeIntermediate"];if(A){let S=A();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Io.LINGERING:Io.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<pU>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return Tm||(Tm=s,hU=performance.now(),Tm.then(()=>{Tm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];GA&&p&&i.push(GA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+pU/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let f=this.next?.commit(t);if(f?.then)return f?.then(m=>({txnTime:r,next:m}));d.next=f}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=Io.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},E_=class extends wo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,qA.getNextMonotonicTime)())}getReadTxn(){}},U8=3e4;o(B8,"startMonitoringTxns");B8()});var yU,Xn,$A,Ou=ie(()=>{yU=require("events"),Xn=class extends yU.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new $A;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)}},$A=class{static{o(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Io.OPEN&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new wo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var RU,La=ie(()=>{RU=I(li());ym();o(bt,"transaction");(0,RU._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var KA={};be(KA,{add:()=>__,applyReverse:()=>AU,getRecordAtTime:()=>VA,rebuildUpdateBefore:()=>g_});function __(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 g_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,__(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function AU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=F8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=bU}}function VA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Bt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":AU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===bU&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Bt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var F8,bU,S_=ie(()=>{No();o(__,"add");__.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)};F8={add:__};o(g_,"rebuildUpdateBefore");o(AU,"applyReverse");bU={};o(VA,"getRecordAtTime")});var Os=v(y_=>{var T_=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])T_.logsAtLevel(e)&&(y_[e]=T_[e]);y_.loggerWithTag=e=>T_.loggerWithTag(e,!0);y_.setLogLevel=T_.setLogLevel});var LU={};be(LU,{parse:()=>zA,streamAsJSON:()=>Am,stringify:()=>Wc});function Am(e){return new YA({value:e})}function IU(e){return console.error(e),JSON.stringify(Rm(e))}function wU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Wc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===OU)return PU(e);if(t.resolution)return t.resolution.then(()=>Wc(e));throw t}}function PU(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+=PU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Wc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function zA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),G8.test(e)?k8.parse(e):JSON.parse(e)):null}var NU,WA,CU,k8,H8,OU,Rm,YA,G8,jA=ie(()=>{NU=require("stream"),WA=I(Q()),CU=I(require("json-bigint-fixes")),k8=(0,CU.default)({useNativeBigInt:!0}),H8=1e4,OU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw OU};({errorToString:Rm}=WA);o(Am,"streamAsJSON");YA=class extends NU.Readable{static{o(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>(WA.warn("Error serializing in stream",c),a={done:!1,value:{error:Rm(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:Rm(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),IU)}catch(s){yield IU(s)}else yield Wc(t)}else yield Wc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);wU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Rm(t)),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>H8?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 wU(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(Rm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(IU,"handleError");o(wU,"when");o(Wc,"stringify");o(PU,"jsStringify");G8=/[[,:]\s*-?\d{16,}/;o(zA,"parse")});var GU={};be(GU,{asyncSerialization:()=>eb,contentTypes:()=>ZA,findBestSerializer:()=>A_,getDeserializer:()=>Lo,hasAsyncSerialization:()=>tb,registerContentHandlers:()=>wm,serialize:()=>Nm,serializeMessage:()=>Po,toCsvStream:()=>R_});function q8(e){try{return e?.[0]===123?XA(e):e}catch{return e}}function wm(e){e.register($8,{serializers:[{regex:/^application\/json$/,serializer:Am},{regex:/^application\/cbor$/,serializer:o(function(t){return new zc.EncoderStream(Im).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?jc.Readable.from((0,ki.encodeIter)(t,Im)):(0,ki.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),R_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,ki.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,zc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function A_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=ln.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,a=m)}}if(!n){if(r)throw new vU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(ln.keys()).join(", "),406);n=ln.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function Nm(e,t,r){let n=MU&&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 Ps)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=A_(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}),JA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,Oo.createBrotliCompress)({params:{[Oo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Oo.constants.BROTLI_MODE_TEXT:Oo.constants.BROTLI_MODE_GENERIC,[Oo.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>MU?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,Oo.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function Po(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Co=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=A_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=bm(e);return Co?.length>0?(Co.length===1?Co[0]:Promise.all(Co)).then(()=>Po(e,t,!0)):n}finally{Co=void 0}}function eb(e){if(Co)Co.push(e);else throw new Error("Unable to serialize asynchronously")}function tb(){return!!Co}function V8(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 Y8(e){return K8.includes(e)}function W8(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Lo(e="",t=!1){let r=W8(e),n=r.type&&ln.get(r.type)?.deserialize||z8(r);return t?s=>V8(s).then(n):n}function z8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!Y8(e.parameters.charset)&&JA.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 XA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function j8(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 R_(e,t){let r=jc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new BU.Transform(n,s);return r.pipe(i)}var ki,zc,Oo,vU,jc,UU,QA,xU,JA,BU,FU,kU,bm,XA,Im,ln,ZA,DU,HU,$8,MU,Co,K8,Do=ie(()=>{jA();ki=require("msgpackr"),zc=require("cbor-x"),Oo=require("zlib"),vU=I(Ee()),jc=I(require("stream"));Ur();UU=I(li()),QA=I(le());q();xU=I(require("yaml")),JA=I(Os());Ls();BU=require("json2csv"),FU=I(require("fastify-plugin")),kU=QA.default.get(x.SERIALIZATION_BIGINT)!==!1,bm=kU?Wc:JSON.stringify,XA=kU?zA:JSON.parse,Im={useRecords:!1,useToJSON:!0},ln=new Map,ZA=ln;Ue.contentTypes=ZA;(0,UU._assignPackageExport)("contentTypes",ZA);ln.set("application/json",{serializeStream:Am,serialize:bm,deserialize(e){return XA(e)},q:.8});DU=new zc.Encoder(Im);ln.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new zc.EncoderStream(Im).end(e)},serialize:DU.encode,deserialize:DU.decode,q:1});ln.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?jc.Readable.from((0,ki.encodeIter)(e,Im)):(0,ki.pack)(e)},serialize:ki.pack,deserialize:ki.unpack,q:.9});ln.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),R_(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]),R_(e,e?.getColumns?.())},q:.1});ln.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return jc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});ln.set("text/yaml",{serialize(e){return xU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});ln.set("text/event-stream",{serializeStream:o(function(e){return jc.Readable.from(j8(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
5
5
|
`),e.data){let r=e.data;typeof r=="object"&&(r=bm(r)),t+="data: "+r+`
|
|
6
6
|
`}return e.id&&(t+="id: "+e.id+`
|
|
7
7
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -10,34 +10,34 @@
|
|
|
10
10
|
|
|
11
11
|
`:`data: ${e}
|
|
12
12
|
|
|
13
|
-
`},"serialize"),compressible:!1,q:.8});ln.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()}});HU={type:"application/json",serializeStream:Am,serialize:bm,deserialize:q8,q:.5};ln.set("*/*",HU);ln.set("",HU);o(q8,"tryJSONParse");o(wm,"registerContentHandlers");$8=(0,FU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=A_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(A_,"findBestSerializer");MU=QA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);o(Nm,"serialize");o(Po,"serializeMessage");o(eb,"asyncSerialization");o(tb,"hasAsyncSerialization");o(V8,"streamToBuffer");K8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(Y8,"isBufferEncoding");o(W8,"parseContentType");o(Lo,"getDeserializer");o(z8,"deserializerUnknownType");o(j8,"transformIterable");o(R_,"toCsvStream")});var ab={};be(ab,{Blob:()=>Ps,blobsWereEncoded:()=>Qc,databasePaths:()=>nb,decodeBlobsWithWrites:()=>D_,decodeFromDatabase:()=>Jc,decodeWithBlobCallback:()=>Dm,deleteBlob:()=>O_,deleteBlobsInObject:()=>Da,deleteRootBlobPathsForDB:()=>ob,encodeBlobsAsBuffers:()=>iZ,encodeBlobsWithFilePath:()=>L_,findBlobsInObject:()=>Lu,getFileId:()=>P_,getFilePathForBlob:()=>QU,getRootBlobPathsForDB:()=>Lm,setDeletionDelay:()=>Z8});function WU(){}function O_(e){let t=QU(e);t&&setTimeout(()=>{(0,rt.unlink)(t,r=>{r&&Mo.default.debug?.("Error trying to remove blob file",r)})},zU)}function Z8(e){zU=e}function jU(e){let t=Pn.get(e);if(!t)t={storageIndex:0,fileId:null,store:Ln},Pn.set(e,t);else{if(t.fileId)return t;t.store=Ln}return tZ(t),t.source?rb(e,t.source,t):t.contentBuffer?eZ(e,t):rb(e,Om.Readable.from(e.stream()),t),t}function rb(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,rt.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.write(Buffer.concat([h(BigInt(g.length)+0xff000000000000n),g])),E(t.errored);return}let m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;a?(m||f.write(J8),p=(0,N_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(Q8),t.pipe(f)),t.on("error",E);function h(g){let A=BigInt(g),S=new Uint8Array(Nr),T=new DataView(S.buffer);return A|=BigInt(a?ib:YU)<<48n,T.setBigInt64(0,A),S}o(h,"createHeader");function E(g){i.unlock(d,0);let A=f.fd;g?(A&&(0,rt.close)(A),u(g)):c?(0,rt.fdatasync)(A,S=>{S&&u(S),l(),(0,rt.close)(A)}):(l(),(0,rt.close)(A))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-Nr;e.size=g,(0,rt.write)(f.fd,h(g),0,Nr,0,E)}})}),e}function P_(e){return Pn.get(e)?.fileId}function QU(e){let t=Pn.get(e);return t?.fileId&&Pm(t)}function Lm(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=nb.get(e);if(!t){if(!e.databaseName)return Mo.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,C_.get)(x.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Uo.join)(n,e.databaseName)):t=[(0,Uo.join)((0,C_.getHdbBasePath)(),"blobs",e.databaseName)],nb.set(e,t)}return t}async function ob(e){let t=Lm(e);t&&await Promise.all(t.map(r=>JU(r)))}async function JU(e){if((0,rt.existsSync)(e)){for(let t of await(0,Ds.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await JU((0,Uo.join)(e,t.name));else try{await(0,Ds.unlink)((0,Uo.join)(e,t.name))}catch(r){Mo.default.warn?.("Error deleting file",r)}try{await(0,Ds.rmdir)(e)}catch(t){Mo.default.warn?.("Error deleting directory",t)}}}function Pm({storageIndex:e,fileId:t,store:r}){let n=Lm(r);return(0,Uo.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 eZ(e,t){let r=t.contentBuffer,n=r.length;if(!(n<KU))return e.size=n,rb(e,Om.Readable.from([r]),t)}function tZ(e){let t=Lm(e.store),r=rZ(),n=t?.length>1?nZ(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Pm(e),a=(0,Uo.dirname)(i);(0,rt.existsSync)(a)||(0,sb.ensureDirSync)(a),e.filePath=i}function rZ(){let e=VU.get(Ln);if(!e){let t=0,r=Lm(Ln);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,rt.existsSync)(n))for(let c of(0,rt.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>a&&(a=l)}s+=a,n=(0,Uo.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Ln.getUserSharedBuffer("blob-file-id",e.buffer)),VU.set(Ln,e)}return Number(Atomics.add(e,0,1n))}function nZ(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(w_);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,sZ(e)),e.frequencyTable[t%w_]}async function sZ(e){if(!Ds.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,Ds.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,sb.ensureDirSync)(s),a=await(0,Ds.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(w_),n=t.map(s=>1/s);for(let s=0;s<w_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function L_(e,t,r){Pu=t,Ln=r,Qc=!1;try{return e()}finally{Pu=void 0,Ln=void 0}}function iZ(e){Wr=[];let t;try{t=e()}catch(n){throw Wr=void 0,n}let r=Wr.length<2?Wr[0]:Promise.all(Wr);return Wr=void 0,r?r.then(()=>e()):t}function D_(e,t){try{Wr=[],vo=t,e()}catch(n){throw vo=void 0,Wr=void 0,n}vo=void 0;let r=Wr.length<2?Wr[0]:Promise.all(Wr);return Wr=void 0,r}function Dm(e,t,r){Ln=r;try{return vo=t,e()}finally{vo=void 0}}function Jc(e,t){return Ln=t,e()}function Da(e){Lu(e,t=>{O_(t)})}function Lu(e,t){if(e instanceof Ps)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Lu(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Lu(e[r],t)}}function aZ(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var Hi,Ds,rt,N_,Om,sb,C_,Uo,Mo,KU,Nr,YU,ib,qU,Q8,J8,$U,Pn,vo,Ps,Pu,Wr,Ln,Qc,Cm,b_,X8,I_,zU,nb,VU,w_,oZ,Ls=ie(()=>{Hi=require("msgpackr"),Ds=require("node:fs/promises"),rt=require("node:fs"),N_=require("node:zlib"),Om=require("node:stream"),sb=require("fs-extra"),C_=I(le());q();Uo=require("path"),Mo=I(Os());Do();KU=8192,Nr=8,YU=0,ib=1,qU=255,Q8=new Uint8Array([0,YU,255,255,255,255,255,255]),J8=new Uint8Array([0,ib,255,255,255,255,255,255]),$U=0xffffffffffff,Pn=new WeakMap,Ps=global.Blob||aZ(),Qc=!1,Cm=new Uint8Array(8),b_=new DataView(Cm.buffer),X8=6e4;o(WU,"InstanceOfBlobWithNoConstructor");WU.prototype=Ps.prototype;I_=class e extends WU{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Pn.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):(tb()&&eb(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Pn.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=Pm(t),a,c=o(async()=>{let l,u=Nr;try{if(l=await(0,Ds.readFile)(i),l.length>=Nr){l.copy(Cm,0,0,Nr);let f=b_.getBigUint64(0);if(Number(f>>48n)===qU)throw new Error("Error in blob: "+buffer.subarray(Nr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<$U&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(a=!0,h(c()))))return a=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===ib?new Promise((f,m)=>{(0,N_.deflate)(l.subarray(Nr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Nr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Pn.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=Pm(t),a,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=o((A,S)=>{(0,rt.open)(i,"r",(T,w)=>{if(T){if(T.code==="ENOENT"&&f!==!1&&(Mo.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(A,S)},20).unref();S(T),p.#e?.forEach(L=>L(T))}else a=w,A(w)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,A=100;return new Promise(o(function S(T,w){function L(te){(0,rt.close)(a),clearTimeout(d),u&&u.close(),w(te),p.#e?.forEach(F=>F(te))}o(L,"onError");let k=Buffer.allocUnsafe(262144);(0,rt.read)(a,k,0,k.length,c,(te,F,V)=>{if(l+=F,te)return L(te);if(c===0){if(F<Nr){A-- >0&&f!==!1?(h(),Mo.default.debug?.("File was empty, waiting for data to be written",i,A),setTimeout(()=>S(T,w),20).unref()):(Mo.default.debug?.("File was empty, throwing error",i,A),w(new Error(`Blob ${t.fileId} was empty`)));return}V.copy(Cm,0,0,Nr);let X=b_.getBigUint64(0);if(Number(X>>48n)===qU)return L(new Error("Error in blob: "+V.subarray(Nr)));if(g=Number(X&0xffffffffffffn),g<$U&&p.size!==g&&(p.size=g,p.#t))for(let Y of p.#t)Y(g);V=V.subarray(Nr,F),l-=Nr}else if(F===0){let X=Buffer.allocUnsafe(8);return(0,rt.read)(a,X,0,Nr,0,Y=>{if(Y)return L(Y);if(Cm.set(X),g=Number(b_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{L(new Error(`File read timed out reading from ${i}`))},X8).unref():(u=(0,rt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(T,w))}),S(T,w)):m?L(new Error("Blob is incomplete")):(m=!0,S(T,w));return}(0,rt.close)(a),E.close(),T()})}else V=V.subarray(0,F);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=F,S(T,w);s&&l>=s&&(l>s&&(V=V.subarray(0,s-c)),l=g=s),n&&n>c&&(V=V.subarray(n-c))}c+=F;try{E.enqueue(V)}catch(X){return Mo.default.debug?.("Error enqueuing chunk",X),T()}l===g&&((0,rt.close)(a),E.close()),T()})},"readMore"))},"pull"),cancel(){(0,rt.close)(a),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=Pn.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};Pn.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Pn.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(Ln=t?.primaryStore?.rootStore,!Ln)throw new Error("No target table specified");return jU(this).saving??Promise.resolve()}},zU=500;o(O_,"deleteBlob");o(Z8,"setDeletionDelay");global.createBlob=function(e,t){let r=new I_(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Pn.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Om.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Om.Readable.from(e);else throw new Error("Invalid source type");return r};o(jU,"saveBlob");o(rb,"writeBlobWithStream");o(P_,"getFileId");o(QU,"getFilePathForBlob");nb=new Map;o(Lm,"getRootBlobPathsForDB");o(ob,"deleteRootBlobPathsForDB");o(JU,"rimrafSteadily");o(Pm,"getFilePath");o(eZ,"writeBlobWithBuffer");o(tZ,"generateFilePath");VU=new Map;o(rZ,"getNextFileId");w_=128;o(nZ,"getNextStorageIndex");o(sZ,"createFrequencyTableForStoragePaths");o(L_,"encodeBlobsWithFilePath");o(iZ,"encodeBlobsAsBuffers");o(D_,"decodeBlobsWithWrites");o(Dm,"decodeWithBlobCallback");o(Jc,"decodeFromDatabase");o(Da,"deleteBlobsInObject");o(Lu,"findBlobsInObject");oZ=new Hi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Hi.addExtension)({Class:Ps,type:11,unpack:o(function(e){let t=oZ.unpack(e),r=new I_;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Pn.set(r,{storageIndex:t[1],fileId:t[2],store:Ln}),vo)return vo(r)??r;if(!Ln)throw new Error("No store specified, cannot load blob from storage")}else Pn.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=Pn.get(e);if(Pu!==void 0&&(Qc=!0,t?.recordId!==void 0&&t.recordId!==Pu))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<KU)return r.size=t.contentBuffer.length,(0,Hi.pack)([r,t.contentBuffer])}if(Pu!==void 0){if(t=jU(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Pu,(0,Hi.pack)([r,t.storageIndex,t.fileId])}if(t){if(vo)return vo(e),(0,Hi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,rt.readFileSync)(Pm(t));if(n.length>=Nr&&(n.copy(Cm,0,0,Nr),Number(b_.getBigUint64(0)&0xffffffffffffn)===n.length-Nr))return Buffer.concat([(0,Hi.pack)([r]),n]);if(Wr)Wr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Wr)return Wr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Hi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(aZ,"polyfillBlob")});var rx={};be(rx,{onStorageReclamation:()=>Mm,runReclamationHandlers:()=>db,setAvailableSpaceRatioGetter:()=>lZ});function Mm(e,t,r){(r||(0,v_.getWorkerIndex)()===(0,v_.getWorkerCount)()-1)&&(M_.has(e)||M_.set(e,[]),M_.get(e).push({priority:0,handler:t}),ub||(ub=setTimeout(db,ZU).unref()))}async function db(){for(let[e,t]of M_)try{let r=await tx(e),n=cZ/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(lb.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){lb.default.error?.("Error running storage reclamation handlers",r)}ub=setTimeout(db,ZU).unref()}function lZ(e){tx=e??ex}var cb,v_,lb,U_,XU,M_,cZ,ZU,ub,ex,tx,x_=ie(()=>{cb=require("node:fs/promises"),v_=I(nt()),lb=I(Os());q();U_=I(le()),XU=I(ce());U_.default.initSync();M_=new Map,cZ=U_.default.get(x.STORAGE_RECLAMATION_THRESHOLD)??.4,ZU=(0,XU.convertToMS)(U_.default.get(x.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Mm,"onStorageReclamation");ex=o(async e=>{if(cb.statfs){let t=await(0,cb.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"),tx=ex;o(db,"runReclamationHandlers");o(lZ,"setAvailableSpaceRatioGetter")});var hx={};be(hx,{ACTION_32_BIT:()=>G_,ACTION_64_BIT:()=>mZ,AUDIT_STORE_OPTIONS:()=>xm,Decoder:()=>Zc,HAS_BLOBS:()=>Dn,HAS_CURRENT_RESIDENCY_ID:()=>el,HAS_EXPIRATION_EXTENDED_TYPE:()=>km,HAS_ORIGINATING_OPERATION:()=>Fm,HAS_PREVIOUS_RESIDENCY_ID:()=>tl,REMOTE_SEQUENCE_UPDATE:()=>q_,createAuditEntry:()=>rl,getLastRemoved:()=>dZ,openAuditStore:()=>k_,readAuditEntry:()=>Bt,removeAuditEntry:()=>H_,setAuditRetention:()=>fZ,transactionKeyEncoder:()=>dx});function k_(e){let t=e.auditStore=e.openDB(fb.AUDIT_STORE_NAME,{create:!1,...xm});t||(t=e.auditStore=e.openDB(fb.AUDIT_STORE_NAME,xm),sx(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=pb;Mm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-mb/(1+i*i)})){try{m=H_(t,h,E)}catch(g){Du.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=uZ){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,mb/10):(sx(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Um.getWorkerIndex)()===(0,Um.getWorkerCount)()-1&&c(),(0,Um.getWorkerIndex)()===0&&!nx)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(nx=!0,Du.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 H_(e,t,r){let n=pZ(r),s;if(n&Dn){s=Bt(r);let i=e.tableStores[s.tableId],a=i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Jc(()=>Da(s.getValue(i)),i.rootStore)}if((n&15)===hb){s=s||Bt(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 sx(e,t){Eb[0]=t,e.put(Symbol.for("last-removed"),fx)}function dZ(e){let t=e.get(Symbol.for("last-removed"));if(t)return fx.set(t),Eb[0]}function fZ(e,t=pb){mb=e,pb=t}function rl(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=mx[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Ma.setFloat64(0,n):Ms.set(_b),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}A(s),A(t),g(r),Ma.setFloat64(h,e),h+=8,l&el&&A(u),l&tl&&A(d),l&km&&(Ma.setFloat64(h,f),h+=8),l&Fm&&A(px[m]),i?g(i):Ms[h++]=0,l?Ma.setUint32(n?8:0,p|l|3221225472):Ms[n?8:0]=p;let E=Ms.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let T=h;h+=1,h=(0,Xc.writeKey)(S,Ms,h);let w=h-T-1;w>127?w>16383?(Du.error("Key or username was too large for audit entry",S),h=T+1,Ms[T]=0):(Ms.copyWithin(T+2,T+1,h),Ma.setUint16(T,w|32768),h++):Ms[T]=w}function A(S){S<128?Ms[h++]=S:S<16384?(Ma.setUint16(h,S|32768),h+=2):S<1056964608?(Ma.setUint32(h,S|3221225472),h+=4):(Ms[h]=255,Ma.setUint32(h+1,S),h+=5)}}function pZ(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 Zc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Bt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Zc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&el&&(m=n.readInt()),i&tl&&(p=n.readInt()),i&km&&(h=n.readFloat64()),i&Fm){let T=n.readInt();E=px[T]}l=n.readInt();let g=n.position,A=n.position+=l,S;return{type:mx[i&7],tableId:c,nodeId:a,get recordId(){return(0,Xc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return A>g?(0,Xc.readKey)(e,g,A):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(T,w,L){if(i&B_||i&vm&&!w)return S||(S=Jc(()=>T.decoder.decode(e.subarray(n.position,r)),T.rootStore)),S;if(i&vm&&L)return VA(T.getEntry(this.recordId),L,T)},getBinaryValue(){return i&(B_|vm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Du.error("Reading audit entry error",n,e),{}}}var Xc,F_,fb,Um,ux,Du,Ms,Ma,dx,xm,mb,uZ,Eb,fx,pb,nx,B_,vm,ix,hb,ox,ax,cx,lx,G_,mZ,q_,el,tl,Fm,km,Dn,mx,px,Zc,No=ie(()=>{Xc=require("ordered-binary"),F_=I(le()),fb=I(Vt());q();Um=I(nt()),ux=I(ce());nl();Du=I(Q());S_();Ls();x_();(0,F_.initSync)();Ms=Buffer.alloc(2816),Ma=new DataView(Ms.buffer,Ms.byteOffset,2816),dx={writeKey(e,t,r){return e===Bm?(t.set(Bm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Xc.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,Xc.readKey)(e,t,r)}},xm={encoding:"binary",keyEncoder:dx},mb=(0,ux.convertToMS)((0,F_.get)(x.LOGGING_AUDITRETENTION))||86400*3,uZ=1e3,Eb=new Float64Array(1),fx=new Uint8Array(Eb.buffer),pb=1e4,nx=!1;o(k_,"openAuditStore");o(H_,"removeAuditEntry");o(sx,"updateLastRemoved");o(dZ,"getLastRemoved");o(fZ,"setAuditRetention");B_=16,vm=32,ix=1,hb=2,ox=3,ax=4,cx=5,lx=6,G_=14,mZ=15,q_=11,el=512,tl=1024,Fm=2048,km=4096,Dn=8192,mx={put:ix|B_,[ix]:"put",delete:hb,[hb]:"delete",message:ox|B_,[ox]:"message",invalidate:ax|vm,[ax]:"invalidate",patch:cx|vm,[cx]:"patch",relocate:lx,[lx]:"relocate"},px={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(rl,"createAuditEntry");o(pZ,"readAction");o(Bt,"readAuditEntry");Zc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function $_(){return gb||(gb=Je({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),gb}function EZ(e){return e=e.replace(hZ,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function _Z(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function Tb(e){let t=Ex.default.createHash("shake128",{outputLength:4}),r;return(0,_x.isIPv6)(e)?r=EZ(e):r=e.toLowerCase(),_Z(Uint8Array.from(t.update(r).digest()))}var Ex,_x,Sb,gb,hZ,yb=ie(()=>{Pe();Ex=I(require("crypto")),_x=require("node:net"),Sb=new Map;o($_,"getAnalyticsHostnameTable");hZ=/(\d{1,3}\.){3}\d{1,3}$/;o(EZ,"normalizeIPv6");o(_Z,"nodeHashToNumber");o(Tb,"stableNodeId")});var xo,Rb=ie(()=>{xo={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var Y_={};be(Y_,{addAnalyticsListener:()=>$m,analyticsDelay:()=>wb,calculateCPUUtilization:()=>Ux,diffResourceUsage:()=>xx,onAnalyticsAggregate:()=>Ob,recordAction:()=>Xe,recordActionBinary:()=>jr,recordHostname:()=>Nb,setAnalyticsEnabled:()=>TZ});function TZ(e){Px=e,clearTimeout(Gm),Gm=null}function yZ(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 RZ(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},K_.set(e,a)}function Xe(e,t,r,n,s){if(!Px)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=K_.get(i);a?yZ(e,a):RZ(i,e,t,r,n,s),Gm||AZ()}function jr(e,t,r,n,s){Xe(!!e,t,r,n,s)}function $m(e){Dx.push(e)}function AZ(){Ab||=performance.now(),Gm=setTimeout(async()=>{Gm=null;let e=performance.now()-Ab;Ab=0;let t=[],r={time:Date.now(),period:e,threadId:sl.threadId,metrics:t};for(let[s,i]of K_){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of vx){let m=Math.floor(c*f),p=a[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await Bx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:sl.threadId,byThread:!0,...n});for(let s of Dx)s(t);K_=new Map,sl.parentPort?sl.parentPort.postMessage({type:Lx,report:r}):Hx({report:r})},wb).unref()}async function Nb(){let e=Ue.hostname;zr.trace?.("recordHostname server.hostname:",e);let t=Tb(e);zr.trace?.("recordHostname nodeId:",t);let r=$_();if(!await r.get(t)){let s={id:t,hostname:e};zr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Mu(e,t){let r=Ue.hostname,n=Sb.get(r);n?zr.trace?.("storeMetric cached nodeId:",n):(n=Tb(r),zr.trace?.("storeMetric new nodeId:",n),Sb.set(r,n));let s={id:[(0,Ib.getNextMonotonicTime)(),n],...t};zr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Ux(e,t){let r=e.userCPUTime+e.systemCPUTime;return zr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function xx(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function bZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:xo.TABLE_SIZE,database:t,table:s,size:c};zr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),Mu(e,l),n+=c}return n}function gx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=Ox.statSync(s.primaryStore.env.path).size,c=bZ(e,r,n),l=a-c,u={metric:xo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};Mu(e,u),zr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){zr.warn?.("Error getting DB size metrics",s)}}function Sx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:xo.STORAGE_VOLUME,database:r,...i};Mu(e,a),zr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){zr.warn?.("Error getting DB volume metrics",s)}}async function IZ(e,t=6e4){let r=Cb(),n=Fx(),s=new Promise(T=>{let w=performance.now();setImmediate(()=>{let L=performance.now();L-w>5e3&&zr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(L-w)+"ms"),w=performance.now()}),n.primaryStore.prefetch([1],()=>{let L=performance.now();L-w>5e3&&zr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(L-w)+"ms"),T(L-w)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:T,value:w}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!w)continue;if(a){if(T>a+t)break}else a=T;d=T;let{metrics:L,threadId:k}=w;for(let te of L||[]){let{path:F,method:V,type:X,metric:Y,count:de,total:ne,distribution:ae,threads:ye,...Ae}=te;de||(de=1);let He=Y+(F?"-"+F:"");V!==void 0&&(He+="-"+V),X!==void 0&&(He+="-"+X);let Ge=c.get(He);if(Ge){if(Ge.threads){let er=Ge.threads[k];if(er)Ge=er;else{Ge.threads[k]={...Ae};continue}}Ge.count||(Ge.count=1);let Ar=Ge.count;for(let er in Ae){let Gt=Ae[er];typeof Gt=="number"&&(Ge[er]=(Ge[er]*Ar+Gt*de)/(Ar+de))}Ge.count+=de,ne>=0&&(Ge.total+=ne,Ge.ratio=Ge.total/Ge.count)}else Ge={period:t,...te},delete Ge.distribution,c.set(He,Ge),Ge.byThread&&(Ge.threads=[],Ge.threads[k]={...Ae},u.push(Ge));if(ae){ae=ae.map(er=>typeof er=="number"?{value:er,count:1}:er);let Ar=l.get(He);Ar?Ar.push(...ae):l.set(He,ae)}}await Bx()}for(let T of u){let{path:w,method:L,type:k,metric:te,count:F,total:V,distribution:X,threads:Y,...de}=T;Y=Y.filter(ne=>ne);for(let ne in de){if(typeof T[ne]!="number")continue;let ae=0;for(let ye of Y){let Ae=ye[ne];typeof Ae=="number"&&(ae+=Ae)}T[ne]=ae}T.count=Y.length,delete T.threads,delete T.byThread}for(let[T,w]of l){let L=c.get(T);w.sort((er,Gt)=>er.value>Gt.value?1:-1);let k=L.count-1,te=[],F=0,V=0,X;for(let er of vx){let Gt=k*er;for(;F<Gt;)X=w[V++],F+=X.count,V===1&&F--;let tr=w[V>1?V-2:0];X||(X=w[0]),te.push(X.value-(X.value-tr.value)*(F-Gt)/X.count)}let[Y,de,ne,ae,ye,Ae,He,Ge,Ar]=te;Object.assign(L,{p1:Y,p10:de,p25:ne,median:ae,p75:ye,p90:Ae,p95:He,p99:Ge,p999:Ar})}let f;for(let[,T]of c)T.time=d,Mu(n,T),f=!0;if(f)for(let T of Mx)T(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let T={metric:xo.MAIN_THREAD_UTILIZATION,idle:p-Tx,active:h-yx,taskQueueLatency:await s,time:m,...process.memoryUsage()};Mu(n,T)}Tx=p,yx=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,zr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=xx(V_,E);zr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=V_.time?m-V_.time:t,g.cpuUtilization=Ux(g,g.period);let A={metric:xo.RESOURCE_USAGE,...g};Mu(n,A),V_=E;let S=ct();gx(n,S),gx(n,{system:S.system}),Sx(n,S),Sx(n,{system:S.system})}async function Rx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Cb(){return Ax||(Ax=Je({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Fx(){return bx||(bx=Je({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function CZ(){kx=!0;let e=(0,qm.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await IZ(wb,e),await Rx(Cb(),wZ),await Rx(Fx(),NZ)},Math.min(e/2,2147483647)).unref()}function Hx(e,t){let r=e.report;r.threadId=t?.threadId||sl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Ix+=n.mean*n.count);r.totalBytesProcessed=Ix,t&&(r.metrics.push({metric:xo.UTILIZATION,...t.performance.eventLoopUtilization(wx.get(t))}),wx.set(t,t.performance.eventLoopUtilization())),r.id=(0,Ib.getNextMonotonicTime)(),Cb().primaryStore.put(r.id,r),kx||CZ(),OZ&&(Gx=LZ(r))}async function LZ(e){if(await Gx,!va){let r=(0,Hm.dirname)(gZ());try{va=await(0,bb.open)((0,Hm.join)(r,"analytics.log"),"r+")}catch{va=await(0,bb.open)((0,Hm.join)(r,"analytics.log"),"w+")}}let t=(await va.stat()).size;if(t>PZ){let r=Buffer.alloc(t);await va.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await va.write(r,{position:0}),await va.truncate(r.length),t=r.length}await va.write(JSON.stringify(e)+`
|
|
14
|
-
`,t)}function Ob(e){e&&Mx.push(e)}var sl,Nx,Cx,Hm,bb,Ib,qm,Ox,gZ,SZ,zr,K_,Px,Gm,Ab,wb,Lx,Dx,Mx,vx,Tx,yx,V_,Bx,wZ,NZ,Ax,bx,kx,Ix,wx,OZ,Gx,va,PZ,vs=ie(()=>{sl=require("worker_threads"),Nx=I(nt());Pe();Cx=I(Q()),Hm=require("path"),bb=require("fs/promises"),Ib=I(On()),qm=I(le());q();Ur();Ox=I(require("node:fs"));yb();Rb();({getLogFilePath:gZ,forComponent:SZ}=Cx.default),zr=SZ("analytics").conditional;(0,qm.initSync)();K_=new Map,Px=(0,qm.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;o(TZ,"setAnalyticsEnabled");o(yZ,"recordExistingAction");o(RZ,"recordNewAction");o(Xe,"recordAction");Ue.recordAnalytics=Xe;o(jr,"recordActionBinary");Ab=0,wb=1e3,Lx="analytics-report",Dx=[],Mx=[];o($m,"addAnalyticsListener");vx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(AZ,"sendAnalytics");o(Nb,"recordHostname");o(Mu,"storeMetric");o(Ux,"calculateCPUUtilization");o(xx,"diffResourceUsage");o(bZ,"storeTableSizeMetrics");o(gx,"storeDBSizeMetrics");o(Sx,"storeVolumeMetrics");o(IZ,"aggregation");Tx=0,yx=0,V_={userCPUTime:0,systemCPUTime:0},Bx=o(()=>new Promise(setImmediate),"rest");o(Rx,"cleanup");wZ=36e5,NZ=31536e6;o(Cb,"getRawAnalyticsTable");o(Fx,"getAnalyticsTable");(0,Nx.setChildListenerByType)(Lx,Hx);o(CZ,"startScheduledTasks");Ix=0,wx=new Map,OZ=!1;o(Hx,"recordAnalytics");PZ=1e6;o(LZ,"logAnalytics");o(Ob,"onAnalyticsAggregate")});var Yx={};be(Yx,{ENTRY:()=>MZ,HAS_EXPIRATION:()=>j_,HAS_RESIDENCY_ID:()=>Ub,HAS_STRUCTURE_UPDATE:()=>Q_,LAST_TIMESTAMP_PLACEHOLDER:()=>Bm,LOCAL_TIMESTAMP:()=>DZ,METADATA:()=>xu,NEW_TIMESTAMP_PLACEHOLDER:()=>$x,NO_TIMESTAMP:()=>Pb,PENDING_LOCAL_TIME:()=>xb,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>_b,RecordEncoder:()=>vb,TIMESTAMP_ASSIGN_LAST:()=>UZ,TIMESTAMP_ASSIGN_NEW:()=>Vx,TIMESTAMP_ASSIGN_PREVIOUS:()=>Kx,TIMESTAMP_PLACEHOLDER:()=>W_,TIMESTAMP_RECORD_PREVIOUS:()=>Lb,entryMap:()=>Ua,handleLocalTimeForGets:()=>J_,lastMetadata:()=>lt,recordUpdater:()=>Bb,removeEntry:()=>ol});function FZ(){return Km[0]=Km[0]^64,vZ.getFloat64(0)}function J_(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,lt=null;let l=r.call(this,a,c);return l&&(lt&&(l.metadataFlags=lt[xu],l.localTime=lt.localTime,l.residencyId=lt.residencyId,l.size=lt.size,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l.value&&Ua.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){lt=null;let l=n.call(this,a,c);return lt&&l&&(Ua.set(l,lt),lt=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(lt&&(l.metadataFlags=lt[xu],l.localTime=lt.localTime,l.residencyId=lt.residencyId,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,il.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<il.length;u++){let d=il[u].deref();(!d||d.isDone||d.isCommitted)&&il.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function Bb(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Uu=i?.localTime?Lb|Kx:Pb:Uu=l?i?.localTime?Lb|16384:Vx|16384:Pb;let p=u?.expiresAt;if(p>=0&&(c|=j_),Vm=c,Db=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Uu>0},E,g=0;try{let A=i?.residencyId,S=u?.residencyId;S&&(Mb=S,Vm|=Ub,g|=el),A!==S&&(g|=tl,A||(A=0)),c&j_&&(g|=km),u?.originatingOperation&&(g|=Fm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Dn&&(r.getBinaryFast(i.localTime)||Da(i.value));let T;if(s!==void 0&&(T=L_(()=>e.put(n,s,h),n,e.rootStore),Qc&&(g|=Dn)),l){let w=u?.user?.username;if(m&&(L_(()=>e.encoder.encode(m),n,e.rootStore),Qc&&(g|=Dn)),e.encoder.hasStructureUpdate&&(g|=Q_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let L=i?.localTime,k=r.get(L);if(k){let te=Bt(k).previousLocalTime;return T=r.put(L,rl(a,t,n,te,u?.nodeId??server.replication.getThisNodeId(r)??0,w,d,vu,g,S,A,p),{ifVersion:E}),T}}T=r.put(s===void 0?$x:Bm,rl(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,w,d,vu,g,S,A,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&xZ.has(d)&&Xe(vu?.length??1,"db-write",u.tableToTrack,null),T}catch(A){throw A.message+=" id: "+n+" options: "+h,A}}}function ol(e,t,r){if(t)return t.value&&t.metadataFlags&Dn&&!e.auditStore.getBinaryFast(t.localTime)&&Da(t.value),e.remove(t.key,r)}var qx,z_,W_,Bm,_b,$x,DZ,xu,MZ,Km,vZ,Pb,Vx,UZ,Kx,Lb,j_,Ub,xb,Q_,xZ,Ua,BZ,vu,Uu,Vm,Db,Mb,lt,vb,il,nl=ie(()=>{qx=require("msgpackr");No();z_=I(Q());Ls();Ls();vs();W_=new Uint8Array([1,1,1,1,4,64,0,0]),Bm=new Uint8Array([1,1,1,1,1,0,0,0]),_b=new Uint8Array([1,1,1,1,3,64,0,0]),$x=new Uint8Array([1,1,1,1,0,64,0,0]),DZ=Symbol("local-timestamp"),xu=Symbol("metadata"),MZ=Symbol("entry"),Km=new Uint8Array(8),vZ=new DataView(Km.buffer,0,8),Pb=0,Vx=0,UZ=1,Kx=3,Lb=4,j_=16,Ub=32,xb=1,Q_=256,xZ=new Set(["put","patch","delete","message","publish"]),Ua=new WeakMap,Uu=0,Vm=-1,Db=-1,Mb=0,lt=null,vb=class extends qx.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Ua.get(this)?.version}getExpiresAt(){return Ua.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Uu||Vm>=0){let c=0,l=Uu;l&&(c+=8,Uu=0);let u=Vm,d=Db,f=Mb;u>=0&&(c+=4,Vm=-1,d>=0&&(c+=8,Db=-1),f&&(c+=4,Mb=0));let m=BZ=n.call(this,i,a|2048|c);vu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(W_[4]=l,W_[5]=l>>8,m.set(W_,p),p+=8),Qc&&(u|=Dn),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|G_<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return vu=n.call(this,i,a),vu};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){lt=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Km,0,c),c+=8;else for(let m=0;m<8;m++)Km[m]=t[c++];l=FZ(),i=t[c]}let u,d;i<32&&(i===G_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&j_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&Ub&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Jc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return lt={localTime:l,[xu]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Jc(()=>super.decode(t,r),this.rootStore)}catch(c){return z_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(FZ,"getTimestamp");o(J_,"handleLocalTimeForGets");il=[];setInterval(()=>{for(let e=0;e<il.length;e++){let t=il[e].deref();!t||t.isDone||t.isCommitted?il.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(z_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):z_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(Bb,"recordUpdater");o(ol,"removeEntry")});function Hb(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?Hb(f.conditions,f.operator,r,n,s,i,a,c):Hu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",T=d(h.conditions,!S,p);return S?(w,L)=>T.some(k=>k(w,L)):(w,L)=>T.every(k=>k(w,L))}let g=(h.attribute||h[0])===r.primaryKey,A=Wm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=WZ(r.primaryStore,h.estimated_count,p)),A}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Hu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new Qr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let T=c[0],w=qi(n.attributes,T);if(w.relationship){if(c.length<2)throw new Qr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let L=w.definition?.tableClass||w.elements?.definition?.tableClass,k=new Map,te=Hu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,L,s,k);if(w.relationship.to){i[c[0]]=k;let F=!!qi(L.attributes,w.relationship.to)?.elements;te=$Z(te,w,L.primaryStore,F,k)}if(w.relationship.from){let F=o(V=>(V?.key!==void 0&&(V=V.key),Hu({attribute:w.relationship.from,value:V},t,r,n,s,k)),"searchEntry");w.elements?(i[c[0]]=k,te=VZ(te,w,L.primaryStore,k,F)):te=te.flatMap(F)}return te}else if(c.length===1)c=c[0];else throw new Qr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(Gb[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=Gi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new Qr.ClientError(`Unknown query comparator "${u}"`)}let A;if(typeof m=="string"&&m.length>Us.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Us.MAX_SEARCH_KEY_LENGTH)+Us.OVERFLOW_MARKER,E=!1,A=Wm(e,n,null,i,d)),typeof p=="string"&&p.length>Us.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Us.MAX_SEARCH_KEY_LENGTH)+Us.OVERFLOW_MARKER,h=!0,A=A??Wm(e,n,null,i,d)),r){let T=m;m=p,p=T,T=!E,E=!h,h=T}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new Qr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new Qr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new Qr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new Qr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(A=A??Wm(e,n,null,i,d),!A)throw new Qr.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let T=f.getRange(S).map(A?function({key:w,value:L}){return this?.isSync?L&&A(L)?w:xa.SKIP:new Promise((k,te)=>setImmediate(()=>{try{k(L&&A(L)?w:xa.SKIP)}catch(F){te(F)}}))}:w=>w.value==null&&!(w.metadataFlags&(Mn|Ba))?xa.SKIP:(a?._freezeRecords&&Object.freeze(w.value),w));return T.hasEntries=!0,T}else return f?f.customIndex?f.customIndex.search(e,a).map(T=>{if(typeof T=="object"&&T){let{key:w,...L}=T,k=n.primaryStore.getEntry(w);return a?._freezeRecords&&Object.freeze(k?.value),{...L,...k}}return T}):f.getRange(S).map(A?function({key:T,value:w}){let L;return typeof T=="string"&&T.length>Us.MAX_SEARCH_KEY_LENGTH?L=n.primaryStore.get(w):L={[c]:T},this.isSync?A(L)?w:xa.SKIP:new Promise((k,te)=>setImmediate(()=>{try{k(A(L)?w:xa.SKIP)}catch(F){te(F)}}))}:({value:T})=>T):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:T,value:w}){return this.isSync?w&&A(w)?T:xa.SKIP:new Promise((L,k)=>setImmediate(()=>{try{L(w&&A(w)?T:xa.SKIP)}catch(te){k(te)}}))})}function qi(e,t){if(Array.isArray(t))if(t.length>1){let r=qi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?qi(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 $Z(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function VZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function Wm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=qi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=Wm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,A=o((T,w)=>{let L,k;return E?E.returnDirect?(L=E(T,r,w),k=lt):(k=E(T,r,w,!0),Array.isArray(k)?(L=k.map(te=>te.value),k=null):L=k?.value):L=T[d],{subObject:L,subEntry:k}},"getSubObject"),S=o((T,w)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let V of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:V};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let F=g(T);return g.idFilter&&(S.idFilter=g.idFilter),F}let{subObject:L,subEntry:k}=A(T,w);return L?Array.isArray(L)?(!n?.[d]&&n&&(n[d]={fromRecord(F){let V=A(F).subObject;return Array.isArray(V)?V.filter(h).map(X=>X[m.primaryKey]):V}}),L.some(h)):h(L,k):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),Gb[a]||a){case Us.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Gi.compareKeys)(d,l[0])>=0&&(0,Gi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Gi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Gi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Gi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Gi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Gi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new Qr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&Z_(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function A(S){let T=S[d],w;if(typeof T!="object"||!T||p?w=f(T):Array.isArray(T)?w=T.some(f):T instanceof Date&&(w=f(T.getTime())),m&&(g++,!w&&!A.idFilter&&++E/g*i>h)){let L=Hu(e,r.transaction.getReadTxn(),!1,t),k;A.to?k=L.flatMap(F=>t.primaryStore.get(F)[A.to]):k=L.map(Gu);let te=new Set(k);A.idFilter=F=>te.has(Gu(F)),A.idFilter.idSet=te}return w}return o(A,"recordFilter"),s&&(A.idFilter=f),A}o(u,"attributeComparator")}function Z_(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/Bo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Gb[n]||n,n===Us.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=qi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=Z_(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Bo(e.indices[i.relationship.from])/(Bo(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Bo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=GZ*Bo(e.primaryStore)+1;else if(n==="between")r.estimated_count=HZ*Bo(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=Bo(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=kZ*Bo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function eg(e,t){if(e)if(Fo=e,Bu.lastIndex=0,KZ.test(e))try{if(t&&(t.conditions=[]),di=t??new ku,Ym(di,""),xr!==Fo.length&&Kt("Unable to parse query, unexpected end of query"),di.parseErrorMessage&&(di.parseError=new Fb(t.parseErrorMessage),!t))throw di.parseError;return di}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${xr} in '${Fo}'`,di.parseErrorMessage&&(r.message+=", "+di.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Kt(e){let t=`${e} at position ${xr}`;di.parseErrorMessage=di.parseErrorMessage?di.parseErrorMessage+", "+t:t}function Ym(e,t){let r=Bu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Fo);){xr=r.lastIndex;let[,d,f]=n;a?(d&&Kt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Kt(`invalid FIQL operator ${d}`),l=Wx):(l=decodeURIComponent,i="equals",d||Kt("attribute must be specified before equality comparator"),s=Fu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=qZ[f],l=kb[i]?Wx:decodeURIComponent,d||Kt(`attribute must be specified before comparator ${f}`),s=Fu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Kt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Kt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Kt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&zx(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else X_(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Kt("conditions/comparisons are not allowed in a property list"):e.push(Fu(d)),s=void 0;break;case"(":Bu.lastIndex=xr;let p=Ym(d?[]:new ku,")");switch(d){case"":X_(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Kt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Kt("group by is not implemented yet");case"sort":e.sort=jx(p);break;default:Kt(`unknown query function call ${d}`)}Fo[xr]===","?r.lastIndex=++xr:a=!0,s=null;break;case"{":e.conditions&&Kt("property sets are not allowed in a queries"),d||Kt("property sets must have a defined parent property name"),Bu.lastIndex=xr,m=Ym([],"}"),m.name=d,e.push(m),Fo[xr]===","?r.lastIndex=++xr:a=!0;break;case"[":if(Bu.lastIndex=xr,d?(m=Ym(new ku,"]"),m.name=d):m=Ym(e.conditions?new ku:[],"]"),e.conditions)if(X_(e,u),Fo[xr]==="="){l=decodeURIComponent,i="equals",s=Fu(d),r.lastIndex=++xr;break}else e.conditions.push(m),s=null;else e.push(m);Fo[xr]===","?r.lastIndex=++xr:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&zx(h,d),X_(e,u),e.conditions.push(h)}else d&&Kt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Fu(d));return e}else Kt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Kt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?YZ:Bu,r.lastIndex=xr),xr===Fo.length)return e}t&&Kt(`expected '${t}', but encountered end of string`)}function X_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Kt("Can not mix operators within a condition grouping"):e.operator=t)}function Fu(e){return e.indexOf(".")>-1?e.split(".").map(Fu):decodeURIComponent(e)}function Wx(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new Qr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function zx(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Qr.ClientError("wildcard can only be used at the end of a string")}function jx(e){let t=Qx(e[0]);return e.length>1&&(t.next=jx(e.slice(1))),t}function Qx(e){if(Array.isArray(e)){let t=Qx(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}}Kt(`Unknown sort type ${e}`)}function Gu(e){return Array.isArray(e)?e.join("\0"):e}function Bo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function WZ(e,t,r){return t*r/Bo(e)}var Qr,Us,Gi,xa,kZ,HZ,GZ,qZ,kb,Gb,Fb,KZ,Bu,YZ,xr,di,Fo,ku,tg=ie(()=>{Qr=I(Ee()),Us=I(Vt()),Gi=require("ordered-binary"),xa=require("lmdb");rg();nl();kZ=.3,HZ=.1,GZ=.05,qZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},kb={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(Hb,"executeConditions");o(Hu,"searchByIndex");o(qi,"findAttribute");o($Z,"joinTo");o(VZ,"joinFrom");Gb={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(Wm,"filterByType");o(Z_,"estimateCondition");Fb=class extends Qr.Violation{static{o(this,"SyntaxViolation")}},KZ=/[()[\]|!<>.]|(=\w*=)/,Bu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,YZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(eg,"parseQuery");o(Kt,"recordError");o(Ym,"parseBlock");o(X_,"assignOperator");o(Fu,"decodeProperty");o(Wx,"typedDecoding");o(zx,"wildcardDecoding");o(jx,"toSortObject");o(Qx,"toSortEntry");ku=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Gu,"flattenKey");o(Bo,"estimatedEntryCount");o(WZ,"intersectionEstimate")});var Jx,fi,ng=ie(()=>{Jx=I(li()),fi=class extends URLSearchParams{static{o(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,Jx._assignPackageExport)("Resource",Resource)});var r0={};be(r0,{MultiPartId:()=>sg,Resource:()=>Br,contextStorage:()=>$u,snakeCase:()=>jZ,transformForSelect:()=>ig});function jZ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Xx(e,t){if(al=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(al=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new sg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){al=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return al=!0,null;e[e.length-1]==="/"&&(al=!0)}return t.coerceId(decodeURIComponent(e))}function vn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof wo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new qu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new fi,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new fi,l.id=c,c==null&&(u=!0);l||(l=new fi,l.id=c),u&&(l.isCollection=!0);let f;a||(a=$u.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=o(E=>$u.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return bt(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(A=>{if(!A)throw new qu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new qu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function Xn(e,t){let r=new qu.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 qb(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function ig(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):qb(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(qb(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(qb(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=ig(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var Zx,e0,qu,t0,$u,zZ,Br,al,sg,Fa=ie(()=>{Zx=require("crypto");ym();Ou();e0=I(li()),qu=I(Ee());La();tg();t0=require("async_hooks");ng();$u=new t0.AsyncLocalStorage,zZ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Br=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=vn(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=ig(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=vn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Xn(t,"put")},{hasContent:!0,type:"update"});static patch=vn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Xn(t,"patch")},{hasContent:!0,type:"update"});static delete=vn(function(t,r,n,s){return t.delete?t.delete(r):Xn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Zx.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=$u.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),bt(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Xn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=vn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Xn(t,"delete")},{hasContent:!1,type:"update"});static post=vn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=vn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=vn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Xn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=vn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Xn(t,"subscribe")},{type:"read"});static publish=vn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):Xn(t,"publish")},{hasContent:!0,type:"create"});static search=vn(function(t,r,n){let s=t.search?t.search(r):Xn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=ig(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=vn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Xn(t,"search")},{hasContent:!0,type:"read"});static copy=vn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Xn(t,"copy")},{hasContent:!0,type:"create"});static move=vn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Xn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Xn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return eg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&zZ[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:Xx(t,this),isCollection:al}}let i=Xx(t,this);return al?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Jn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Jn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,e0._assignPackageExport)("Resource",Br);o(jZ,"snakeCase");o(Xx,"pathToId");sg=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(vn,"transactional");o(Xn,"missingMethod");o(qb,"selectFromObject");o(ig,"transformForSelect")});var cl,$b=ie(()=>{cl=class{static{o(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Vb={};be(Vb,{Resources:()=>Vu,keyArrayToString:()=>Ku,resetResources:()=>QZ,resources:()=>xs});function QZ(){return xs=new Vu,Ue.resources=xs,xs}function Ku(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var n0,s0,Vu,xs,ka=ie(()=>{La();$b();n0=I(Q()),s0=I(Ee());Ur();Vu=class extends Map{static{o(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new s0.ServerError(`Conflicting paths for ${t}`);n0.default.error(c),i.Resource=new cl(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return bt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(QZ,"resetResources");o(Ku,"keyArrayToString")});function Wb(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=o0,JZ(e.primaryStore,e.auditStore)):(c=i0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{a0(i0[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=Ku(t);let d=new Yb(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function a0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),c0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Bt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Ku(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,Kb.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,Kb.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function JZ(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=o0[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{a0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function c0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function l0(e){return e.nextTransaction||(Wb({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),c0(e)),e.nextTransaction}var Kb,i0,o0,Yb,zb=ie(()=>{Kb=I(Q());Ou();ka();No();i0=Object.create(null),o0=Object.create(null);o(Wb,"addSubscription");Yb=class extends Jn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(a0,"notifyFromTransactionData");o(JZ,"listenToCommits");o(c0,"nextTransaction");o(l0,"whenNextTransaction")});var d0=v((AOe,u0)=>{"use strict";var jb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};u0.exports=jb});var m0=v((IOe,f0)=>{"use strict";var Qb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};f0.exports=Qb});var zm=v(h0=>{"use strict";var p0=le(),XZ=(q(),M(W)),{RecordEncoder:ZZ}=(nl(),M(Yx));p0.initSync();var e9=p0.get(XZ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Jb=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=e9&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:ZZ})}};h0.OpenDBIObject=Jb});var jm=v((OOe,E0)=>{"use strict";var Zn=le(),Bs=(q(),M(W));Zn.initSync();var og=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Zn.get(Bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zn.get(Bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zn.get(Bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Zn.get(Bs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Zn.get(Bs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Zn.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Zn.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Zn.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Zn.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Zn.get(Bs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Zn.get(Bs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Zn.get(Bs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};E0.exports=og;og.MAX_DBS=1e4});var gt=v((LOe,w0)=>{"use strict";var Zb=require("lmdb"),mi=require("fs-extra"),es=require("path"),ag=On(),S0=Q(),Un=Yr().LMDB_ERRORS_ENUM,cg=m0(),{OpenDBIObject:eI}=zm(),T0=jm(),Ha=Vt(),_0=(q(),M(W)),{table:t9,resetDatabases:r9}=(Pe(),M(pt)),g0=le(),pi=Ha.INTERNAL_DBIS_NAME,y0=Ha.DBI_DEFINITION_NAME,n9="data.mdb",s9="lock.mdb",Qm=".mdb",i9="-lock",Xb=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Fs(t,r),this.key_type=this.dbi[Ha.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ha.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Zb.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function lg(e,t){if(e===void 0)throw new Error(Un.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Un.ENV_NAME_REQUIRED)}o(lg,"pathEnvNameValidation");async function tI(e,t,r=!0){try{await mi.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Un.INVALID_BASE_PATH):n}try{let n=es.join(e,t+Qm);return await mi.access(n,mi.constants.R_OK|mi.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await mi.access(es.join(e,t,n9),mi.constants.R_OK|mi.constants.F_OK),es.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Un.INVALID_ENVIRONMENT)}else throw new Error(Un.INVALID_ENVIRONMENT);throw n}}o(tI,"validateEnvironmentPath");function ug(e,t){if(ag.validateEnv(e),t===void 0)throw new Error(Un.DBI_NAME_REQUIRED)}o(ug,"validateEnvDBIName");async function o9(e,t,r=!1,n=!1){lg(e,t);let s=es.basename(e);t=t.toString();let i=g0.get(_0.CONFIG_PARAMS.DATABASES);i||g0.setProperty(_0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await tI(e,t,n),R0(e,t,r)}catch(a){if(a.message===Un.INVALID_ENVIRONMENT){let c=es.join(e,t);await mi.mkdirp(n?c:e);let l=new T0(n?c:c+Qm,!1),u=Zb.open(l);u.dbis=Object.create(null);let d=new eI(!1);u.openDB(pi,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=rI(e,t,r);return u[Ha.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(o9,"createEnvironment");async function a9(e,t,r,n=!0){lg(e,t),t=t.toString();let s=es.join(e,t);return t9({table:t,database:es.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(a9,"copyEnvironment");async function R0(e,t,r=!1){lg(e,t),t=t.toString();let n=rI(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 tI(e,t),i=es.join(e,t+Qm),a=s!=i,c=new T0(s,a),l=Zb.open(c);l.dbis=Object.create(null);let u=b0(l);for(let d=0;d<u.length;d++)Fs(l,u[d]);return l[Ha.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(R0,"openEnvironment");async function c9(e,t,r=!1){lg(e,t),t=t.toString();let n=es.join(e,t+Qm),s=await tI(e,t);if(global.lmdb_map!==void 0){let i=rI(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await A0(a),delete global.lmdb_map[i]}}await mi.remove(s),await mi.remove(s===n?s+i9:es.join(es.dirname(s),s9))}o(c9,"deleteEnvironment");async function A0(e){ag.validateEnv(e);let t=e[Ha.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(A0,"closeEnvironment");function rI(e,t,r=!1){let s=`${es.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(rI,"getCachedEnvironmentName");function l9(e){ag.validateEnv(e);let t=Object.create(null),r=Fs(e,pi);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==pi)try{t[n]=Object.assign(new cg,s)}catch{S0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(l9,"listDBIDefinitions");function b0(e){ag.validateEnv(e);let t=[],r=Fs(e,pi);for(let{key:n}of r.getRange({start:!1}))n!==pi&&t.push(n);return t}o(b0,"listDBIs");function u9(e,t){let n=Fs(e,pi).getEntry(t),s=new cg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{S0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(u9,"getDBIDefinition");function I0(e,t,r,n=!r){if(ug(e,t),t=t.toString(),t===pi)throw new Error(Un.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fs(e,t)}catch(s){if(s.message===Un.DBI_DOES_NOT_EXIST){let i=new eI(r,n===!0),a=e.openDB(t,i),c=new cg(r===!0,n);return a[y0]=c,Fs(e,pi).putSync(t,c),e.dbis[t]=a,a}throw s}}o(I0,"createDBI");function Fs(e,t){if(ug(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==pi?r=u9(e,t):r=new cg,r===void 0)throw new Error(Un.DBI_DOES_NOT_EXIST);let n;try{let s=new eI(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(Un.DBI_DOES_NOT_EXIST):s}return n[y0]=r,e.dbis[t]=n,n}o(Fs,"openDBI");function d9(e,t){ug(e,t),t=t.toString();let r=Fs(e,t),n=r.getStats();return r[Ha.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(d9,"statDBI");async function f9(e,t){try{let r=es.join(e,t+Qm);return(await mi.stat(r)).size}catch{throw new Error(Un.INVALID_ENVIRONMENT)}}o(f9,"environmentDataSize");function m9(e,t){if(ug(e,t),t=t.toString(),t===pi)throw new Error(Un.CANNOT_DROP_INTERNAL_DBIS_NAME);Fs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Fs(e,pi).removeSync(t)}o(m9,"dropDBI");function p9(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Fs(e,i)}catch(a){if(a.message===Un.DBI_DOES_NOT_EXIST)I0(e,i,i!==t,i===t),n=!0;else throw a}}n&&r9()}o(p9,"initializeDBIs");w0.exports={openDBI:Fs,openEnvironment:R0,createEnvironment:o9,listDBIs:b0,listDBIDefinitions:l9,createDBI:I0,dropDBI:m9,statDBI:d9,deleteEnvironment:c9,initializeDBIs:p9,TransactionCursor:Xb,environmentDataSize:f9,copyEnvironment:a9,closeEnvironment:A0}});var O0=v((MOe,C0)=>{"use strict";var nI=gt(),h9=Q(),N0=Yr().LMDB_ERRORS_ENUM;C0.exports=E9;async function E9(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await nI.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==N0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await nI.closeEnvironment(global.lmdb_map[n]),await nI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==N0.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){h9.error(t)}}o(E9,"cleanLMDBMap")});var Vi=v((UOe,L0)=>{"use strict";var P0=ce(),_9=(q(),M(W)),Yu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,$i=require("joi"),Ga={schema_format:{pattern:Yu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},g9=$i.alternatives($i.string().min(1).max(Ga.schema_length.maximum).pattern(Yu).messages({"string.pattern.base":"{:#label} "+Ga.schema_format.message}),$i.number(),$i.array()).required(),S9=$i.alternatives($i.string().min(1).max(Ga.schema_length.maximum).pattern(Yu).messages({"string.pattern.base":"{:#label} "+Ga.schema_format.message}),$i.number()),T9=$i.alternatives($i.string().min(1).max(Ga.schema_length.maximum).pattern(Yu).messages({"string.pattern.base":"{:#label} "+Ga.schema_format.message}),$i.number()).required();function y9(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Ga.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Yu.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(y9,"checkValidTable");function R9(e,t){return P0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(R9,"validateSchemaExists");function A9(e,t){let r=t.state.ancestors[0].schema;return P0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(A9,"validateTableExists");function b9(e,t){return e.toLowerCase()===_9.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(b9,"validateSchemaName");L0.exports={commonValidators:Ga,schemaRegex:Yu,hdbSchemaTable:g9,validateSchemaExists:R9,validateTableExists:A9,validateSchemaName:b9,checkValidTable:y9,hdbDatabase:S9,hdbTable:T9}});var iI=v((BOe,M0)=>{var{hdbTable:I9,hdbDatabase:D0}=Vi(),w9=ft(),sI=require("joi"),N9={undefined:"undefined",null:"null"},C9=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||N9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),O9=sI.object({database:D0,schema:D0,table:I9,records:sI.array().items(sI.object().custom(C9)).required()});M0.exports=function(e){return w9.validateBySchema(e,O9)}});var U0=v((kOe,v0)=>{"use strict";var oI=class{static{o(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};v0.exports=oI});var B0=v((GOe,x0)=>{"use strict";var aI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};x0.exports=aI});var k0=v(($Oe,F0)=>{"use strict";var cI=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};F0.exports=cI});var G0=v((KOe,H0)=>{"use strict";var lI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};H0.exports=lI});var ul=v((QOe,V0)=>{"use strict";var P9=gt(),L9=B0(),D9=k0(),M9=G0(),Ki=On(),Jm=Yr().LMDB_ERRORS_ENUM,v9=Vt(),ko=(q(),M(W)),U9=ce(),x9=require("uuid"),WOe=require("lmdb"),{handleHDBError:B9,hdbErrors:F9}=Ee(),{OVERFLOW_MARKER:zOe,MAX_SEARCH_KEY_LENGTH:jOe}=v9,q0=le();q0.initSync();var dg=q0.get(ko.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),uI=ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ll=ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function k9(e,t,r,n,s=Ki.getNextMonotonicTime()){pI(e,t,r,n),dI(e,t,r);let i=new L9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];$0(u,!0,s);let d=H9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return fI(a,c,n,i,s)}o(k9,"insertRecords");function H9(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][ko.FUNC_VAL],n[a]=c)}let l=Ki.getIndexedValues(c),u=e.dbis[a];if(l){dg&&u.prefetch(l.map(d=>({key:d,value:s})),fg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}dg&&e.dbis[t].prefetch([s],fg),e.dbis[t].put(s,n,n[ll])})}o(H9,"insertRecord");function G9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(G9,"removeSkippedRecords");function $0(e,t,r){let n=r>0;(n||!Number.isInteger(e[ll]))&&(e[ll]=r||(r=Ki.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[uI]))&&(e[uI]=r||Ki.getNextMonotonicTime()):delete e[uI]}o($0,"setTimestamps");function dI(e,t,r){r.indexOf(ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),P9.initializeDBIs(e,t,r)}o(dI,"initializeTransaction");async function q9(e,t,r,n,s=Ki.getNextMonotonicTime()){pI(e,t,r,n),dI(e,t,r);let i=new D9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=mI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return fI(c,l,n,i,s,a)}o(q9,"updateRecords");async function $9(e,t,r,n,s=Ki.getNextMonotonicTime()){try{pI(e,t,r,n)}catch(l){throw B9(l,l.message,F9.HTTP_STATUS_CODES.BAD_REQUEST)}dI(e,t,r);let i=new M9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;U9.isEmpty(u[t])?(d=x9.v4(),u[t]=d):d=u[t];let f=mI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return fI(a,c,n,i,s)}o($9,"upsertRecords");async function fI(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ki.getNextMonotonicTime(),G9(r,i),n}o(fI,"finalizeWrite");function mI(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if($0(r,!d,a),Number.isInteger(r[ll])&&u[ll]>r[ll])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let A=u[h];if(typeof E=="function"){let T=E([[u]]);Array.isArray(T)&&(E=T[0][ko.FUNC_VAL],r[h]=E)}if(E===A)continue;let S=Ki.getIndexedValues(A);if(S){dg&&g.prefetch(S.map(T=>({key:T,value:n})),fg);for(let T=0,w=S.length;T<w;T++)g.remove(S[T],n)}if(S=Ki.getIndexedValues(E),S){dg&&g.prefetch(S.map(T=>({key:T,value:n})),fg);for(let T=0,w=S.length;T<w;T++)g.put(S[T],n)}}let p={...u,...r};c.put(n,p,p[ll])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:mI(e,t,r,n,s,i,a))}o(mI,"updateUpsertRecord");function V9(e,t,r){if(Ki.validateEnv(e),t===void 0)throw new Error(Jm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Jm.WRITE_ATTRIBUTES_REQUIRED):new Error(Jm.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(V9,"validateBasic");function pI(e,t,r,n){if(V9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Jm.RECORDS_REQUIRED):new Error(Jm.RECORDS_MUST_BE_ARRAY)}o(pI,"validateWrite");function fg(){}o(fg,"noop");V0.exports={insertRecords:k9,updateRecords:q9,upsertRecords:$9}});var Yi=v((XOe,K9)=>{K9.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:{primaryKey:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Y0=v((ZOe,K0)=>{"use strict";var Y9=require("uuid"),hI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||Y9.v4(),this.schema_table=`${this.schema}.${this.table}`}};K0.exports=hI});var mg=v((tPe,W0)=>{"use strict";var W9=Y0(),EI=class extends W9{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};W0.exports=EI});var j0=v((nPe,z0)=>{"use strict";z0.exports=j9;var z9="inserted";function j9(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===z9?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(j9,"returnObject")});var pg=v((oPe,J0)=>{"use strict";var Q9=(q(),M(W)),_I=gt(),J9=ul(),{getSystemSchemaPath:X9,getSchemaPath:Z9}=At(),iPe=Yi(),{validateBySchema:e7}=ft(),Xm=require("joi"),t7=mg(),r7=j0(),{handleHDBError:n7,hdbErrors:s7,ClientError:i7}=Ee(),Q0=ce(),{HTTP_STATUS_CODES:o7}=s7,a7="inserted";J0.exports=c7;async function c7(e){let t=e7(e,Xm.object({database:Xm.string(),schema:Xm.string(),table:Xm.string().required(),attribute:Xm.string().required()}));if(t)throw new i7(t.message);let r=!e.skip_table_check&&Q0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw n7(new Error,r,o7.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Q0.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 t7(e.schema,e.table,e.attribute,e.id);try{let i=await _I.openEnvironment(Z9(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);_I.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await _I.openEnvironment(X9(),Q9.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await J9.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return r7(a7,c,{records:[s]},l)}catch(i){throw i}}o(c7,"lmdbCreateAttribute")});var Zm=v((lPe,Z0)=>{"use strict";var Ho=ce(),X0=Q(),cPe=iI(),{getDatabases:l7}=(Pe(),M(pt)),{ClientError:dl}=Ee();Z0.exports=u7;function u7(e){if(Ho.isEmpty(e))throw new dl("invalid update parameters defined.");if(Ho.isEmptyOrZeroLength(e.schema))throw new dl("invalid schema specified.");if(Ho.isEmptyOrZeroLength(e.table))throw new dl("invalid table specified.");if(!Array.isArray(e.records))throw new dl("records must be an array");let t=l7()[e.schema]?.[e.table];if(Ho.isEmpty(t))throw new dl(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Ho.isEmptyOrZeroLength(a[r]))throw X0.error("a valid hash attribute must be provided with update record:",a),new dl("a valid hash attribute must be provided with update record, check log for more info");if(!Ho.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw X0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new dl(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Ho.isEmpty(a[r])&&a[r]!==""&&n.has(Ho.autoCast(a[r]))&&(a.skip=!0),n.add(Ho.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(u7,"insertUpdateValidate")});var hg=v((dPe,tB)=>{"use strict";var eB=ce(),d7=(q(),M(W)),f7=Q(),m7=pg(),p7=mg(),h7=Go(),{SchemaEventMsg:E7}=ts(),_7="already exists in";tB.exports=g7;async function g7(e,t,r){if(eB.isEmptyOrZeroLength(r))return r;let n=[];eB.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 S7(e,t.schema,t.name,i)})),s}o(g7,"lmdbCheckForNewAttributes");async function S7(e,t,r,n){let s=new p7(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await T7(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(_7))f7.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(S7,"createNewAttribute");async function T7(e){let t;return t=await m7(e),h7.signalSchemaChange(new E7(process.pid,d7.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(T7,"createAttribute")});var Wu=v((mPe,rB)=>{"use strict";var gI=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};rB.exports=gI});var sB=v((hPe,nB)=>{"use strict";var y7=Wu(),R7=(q(),M(W)).OPERATIONS_ENUM,SI=class extends y7{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(R7.INSERT,r,n,s,i),this.records=t}};nB.exports=SI});var oB=v((_Pe,iB)=>{"use strict";var A7=Wu(),b7=(q(),M(W)).OPERATIONS_ENUM,TI=class extends A7{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(b7.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};iB.exports=TI});var cB=v((SPe,aB)=>{"use strict";var I7=Wu(),w7=(q(),M(W)).OPERATIONS_ENUM,yI=class extends I7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(w7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};aB.exports=yI});var uB=v((yPe,lB)=>{"use strict";var N7=Wu(),C7=(q(),M(W)).OPERATIONS_ENUM,RI=class extends N7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(C7.DELETE,n,s,t,i),this.original_records=r}};lB.exports=RI});var ep=v((bPe,pB)=>{"use strict";var APe=require("path"),dB=gt(),O7=sB(),P7=oB(),L7=cB(),D7=uB(),zu=Vt(),fB=ce(),{CONFIG_PARAMS:M7}=(q(),M(W)),mB=le();mB.initSync();var Eg=(q(),M(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:v7}=At();pB.exports=U7;async function U7(e,t){if(mB.get(M7.LOGGING_AUDITLOG)===!1)return;let r=v7(e.schema,e.table),n=await dB.openEnvironment(r,e.table,!0),s=x7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){dB.initializeDBIs(n,zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),fB.isEmpty(s.user_name)||n.dbis[zu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[zu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(U7,"writeTransaction");function x7(e,t){let r=fB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Eg.INSERT)return new O7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.UPDATE)return new P7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.UPSERT)return new L7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.DELETE)return new D7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(x7,"createTransactionObject")});var AI=v((NPe,hB)=>{"use strict";var B7=Zm(),wPe=gm(),tp=(q(),M(W)),F7=Sm(),k7=ul().insertRecords,H7=gt(),G7=Q(),q7=hg(),{getSchemaPath:$7}=At(),V7=ep();hB.exports=K7;async function K7(e){try{let{schemaTable:t,attributes:r}=B7(e);F7(e,r,t.hash_attribute),e.schema!==tp.SYSTEM_SCHEMA_NAME&&(r.includes(tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await q7(e.hdb_auth_header,t,r),s=$7(e.schema,e.table),i=await H7.openEnvironment(s,e.table),a=await k7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await V7(e,a)}catch(c){G7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(K7,"lmdbCreateRecords")});var gB=v((OPe,_B)=>{"use strict";var EB=(q(),M(W)),Y7=AI(),W7=gm(),z7=require("fs-extra"),{getSchemaPath:j7}=At();_B.exports=Q7;async function Q7(e){let t=[{name:e.schema,createddate:Date.now()}],r=new W7(EB.SYSTEM_SCHEMA_NAME,EB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Y7(r),await z7.mkdirp(j7(e.schema))}o(Q7,"lmdbCreateSchema")});var TB=v((LPe,SB)=>{"use strict";var bI=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};SB.exports=bI});var bB=v((xPe,AB)=>{"use strict";var yB=gt(),II=On(),wI=Yr().LMDB_ERRORS_ENUM,J7=Vt(),RB=Q(),MPe=ce(),X7=require("lmdb"),Z7=TB(),eee=(q(),M(W)),{OVERFLOW_MARKER:vPe,MAX_SEARCH_KEY_LENGTH:UPe}=J7,tee=eee.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ree(e,t,r,n){if(II.validateEnv(e),t===void 0)throw new Error(wI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(wI.IDS_REQUIRED):new Error(wI.IDS_MUST_BE_ITERABLE);try{let s=yB.listDBIs(e);yB.initializeDBIs(e,t,s);let i=new Z7,a,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{a=r[m];let h=e.dbis[t].get(a);if(!h||n&&h[tee]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,X7.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let A=s[g];if(!h.hasOwnProperty(A)||A===t)continue;let S=e.dbis[A],T=h[A];if(T!=null)try{let w=II.getIndexedValues(T);if(w)for(let L=0,k=w.length;L<k;L++)S.remove(w[L],a)}catch{RB.warn(`cannot delete from attribute: ${A}, ${T}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){RB.warn(h),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=II.getNextMonotonicTime(),i}catch(s){throw s}}o(ree,"deleteRecords");AB.exports={deleteRecords:ree}});var rp=v((FPe,wB)=>{"use strict";var ju=ce(),nee=bB(),see=gt(),{getSchemaPath:iee}=At(),oee=ep(),aee=Q();wB.exports=cee;async function cee(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(ju.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(ju.isEmptyOrZeroLength(e.hash_values)&&!ju.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];ju.isEmpty(l)||e.hash_values.push(l)}}if(ju.isEmptyOrZeroLength(e.hash_values))return IB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(ju.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=iee(e.schema,e.table),i=await see.openEnvironment(s,e.table),a=await nee.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await oee(e,a)}catch(c){aee.error(`unable to write transaction due to ${c.message}`)}return IB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(cee,"lmdbDeleteRecords");function IB(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(IB,"createDeleteResponse")});var CI=v((GPe,NB)=>{"use strict";var lee=(q(),M(W)),HPe=On();function NI(e,t){let r=Object.create(null);if(t.length===1&&lee.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(NI,"parseRow");function uee(e,t,r,n){let s=NI(r,e);n.push(s)}o(uee,"searchAll");function dee(e,t,r,n){let s=NI(r,e);n[t]=s}o(dee,"searchAllToMap");function fee(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(fee,"iterateDBI");function fl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(fl,"pushResults");function mee(e,t,r,n,s,i){t.toString().endsWith(e)&&fl(t,r,n,s,i)}o(mee,"endsWith");function pee(e,t,r,n,s,i){t.toString().includes(e)&&fl(t,r,n,s,i)}o(pee,"contains");function hee(e,t,r,n,s,i){t>e&&fl(t,r,n,s,i)}o(hee,"greaterThanCompare");function Eee(e,t,r,n,s,i){t>=e&&fl(t,r,n,s,i)}o(Eee,"greaterThanEqualCompare");function _ee(e,t,r,n,s,i){t<e&&fl(t,r,n,s,i)}o(_ee,"lessThanCompare");function gee(e,t,r,n,s,i){t<=e&&fl(t,r,n,s,i)}o(gee,"lessThanEqualCompare");NB.exports={parseRow:NI,searchAll:uee,searchAllToMap:dee,iterateDBI:fee,endsWith:mee,contains:pee,greaterThanCompare:hee,greaterThanEqualCompare:Eee,lessThanCompare:_ee,lessThanEqualCompare:gee,pushResults:fl}});var Qu=v((YPe,vB)=>{"use strict";var qa=gt(),$Pe=Q(),rs=On(),_g=Vt(),nr=Yr().LMDB_ERRORS_ENUM,VPe=ce(),See=(q(),M(W)),gg=CI(),{parseRow:Tee}=gg,KPe=require("lmdb"),{OVERFLOW_MARKER:CB,MAX_SEARCH_KEY_LENGTH:yee}=_g;function OB(e,t,r,n=!1,s=void 0,i=void 0){return ml(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(OB,"iterateFullIndex");function np(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ml(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(T=>({value:T}))):f.getRange(S)})}o(np,"iterateRangeBetween");function ml(e,t,r,n){let s=e.database||e,i=qa.openDBI(s,r);i[_g.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&qa.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(ml,"setupTransaction");function PB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(CB)){if(!s)if(r)s=qa.openDBI(e,r);else{let l=qa.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=qa.openDBI(e,l[u]),!s[_g.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(PB,"getOverflowCheck");function Ree(e,t,r,n=!1,s=void 0,i=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return ml(e,t,t,(a,c,l)=>(Sg(r),r=sp(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Tee(u.value,r))))}o(Ree,"searchAll");function Aee(e,t,r,n=!1,s=void 0,i=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);Sg(r),r=sp(e.database||e,r);let a=new Map;for(let{key:c,value:l}of OB(e,t,t,n,s,i))a.set(c,gg.parseRow(l,r));return a}o(Aee,"searchAllToMap");function bee(e,t,r=!1,n=void 0,s=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=OB(e,void 0,t,r,n,s),c=a.transaction,l=PB(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(bee,"iterateDBI");function Iee(e,t){if(rs.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return qa.statDBI(e,t).entryCount}o(Iee,"countAll");function wee(e,t,r,n,s=!1,i=void 0,a=void 0){return $a(e,r,n),ml(e,t,r,(c,l,u,d)=>(n=rs.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(wee,"equals");function Nee(e,t,r){return $a(e,t,r),qa.openDBI(e,t).getValuesCount(r)}o(Nee,"count");function Cee(e,t,r,n,s=!1,i=void 0,a=void 0){return $a(e,r,n),ml(e,null,r,(c,l)=>{n=rs.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(Cee,"startsWith");function Oee(e,t,r,n,s=!1,i=void 0,a=void 0){return LB(e,t,r,n,s,i,a,!0)}o(Oee,"endsWith");function LB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return $a(e,r,n),ml(e,null,r,(l,u,d,f)=>{let m=PB(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(CB)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[_g.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(LB,"contains");function Pee(e,t,r,n,s=!1,i=void 0,a=void 0){$a(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),np(e,t,r,n,l,s,i,a,!0,!1)}o(Pee,"greaterThan");function Lee(e,t,r,n,s=!1,i=void 0,a=void 0){$a(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),np(e,t,r,n,l,s,i,a,!1,!1)}o(Lee,"greaterThanEqual");function Dee(e,t,r,n,s=!1,i=void 0,a=void 0){$a(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),np(e,t,r,l,n,s,i,a,!1,!0)}o(Dee,"lessThan");function Mee(e,t,r,n,s=!1,i=void 0,a=void 0){$a(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),np(e,t,r,l,n,s,i,a,!1,!1)}o(Mee,"lessThanEqual");function vee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(rs.validateEnv(e),r===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(nr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(nr.END_VALUE_REQUIRED);if(n=rs.convertKeyValueToWrite(n),s=rs.convertKeyValueToWrite(s),n>s)throw new Error(nr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return np(e,t,r,n,s,i,a,c)}o(vee,"between");function Uee(e,t,r,n){rs.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(Sg(r),r=sp(s,r),n===void 0)throw new Error(nr.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=gg.parseRow(c,r)),a}o(Uee,"searchByHash");function xee(e,t,r){rs.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(nr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(xee,"checkHashExists");function Bee(e,t,r,n,s=[]){return MB(e,t,r,n,s),DB(e,t,r,n,s).map(i=>i[1])}o(Bee,"batchSearchByHash");function Fee(e,t,r,n,s=[]){MB(e,t,r,n,s);let i=new Map;for(let[a,c]of DB(e,t,r,n,s))i.set(a,c);return i}o(Fee,"batchSearchByHashToMap");function DB(e,t,r,n,s=[]){return ml(e,t,t,(i,a,c)=>{r=sp(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,gg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(DB,"batchHashSearch");function MB(e,t,r,n,s){if(rs.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(Sg(r),n==null)throw new Error(nr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(nr.IDS_MUST_BE_ITERABLE)}o(MB,"initializeBatchSearchByHash");function Sg(e){if(!Array.isArray(e))throw e===void 0?new Error(nr.FETCH_ATTRIBUTES_REQUIRED):new Error(nr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(Sg,"validateFetchAttributes");function $a(e,t,r){if(rs.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(nr.SEARCH_VALUE_REQUIRED);if(r?.length>yee)throw new Error(nr.SEARCH_VALUE_TOO_LARGE)}o($a,"validateComparisonFunctions");function sp(e,t){return t.length===1&&See.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=qa.listDBIs(e)),t}o(sp,"setGetWholeRowAttributes");vB.exports={searchAll:Ree,searchAllToMap:Aee,count:Nee,countAll:Iee,equals:wee,startsWith:Cee,endsWith:Oee,contains:LB,searchByHash:Uee,setGetWholeRowAttributes:sp,batchSearchByHash:Bee,batchSearchByHashToMap:Fee,checkHashExists:xee,iterateDBI:bee,greaterThan:Pee,greaterThanEqual:Lee,lessThan:Dee,lessThanEqual:Mee,between:vee}});var Ju=v((zPe,kB)=>{var UB=require("lodash"),xB=ft(),Ke=require("joi"),kee=ce(),{hdbSchemaTable:ip,checkValidTable:BB,hdbTable:FB,hdbDatabase:Tg}=Vi(),{handleHDBError:Hee,hdbErrors:Gee}=Ee(),{getDatabases:qee}=(Pe(),M(pt)),{HTTP_STATUS_CODES:$ee}=Gee,Vee=Ke.object({database:Tg,schema:Tg,table:FB,attribute:ip,value:Ke.any().required(),get_attributes:Ke.array().min(1).items(Ke.alternatives(ip,Ke.object())).optional(),desc:Ke.bool(),limit:Ke.number().integer().min(1),offset:Ke.number().integer().min(0)}),Kee=Ke.object({database:Tg,schema:Tg,table:FB,operator:Ke.string().valid("and","or").default("and").lowercase(),offset:Ke.number().integer().min(0),limit:Ke.number().integer().min(1),get_attributes:Ke.array().min(1).items(Ke.alternatives(ip,Ke.object())).optional(),sort:Ke.object({attribute:Ke.alternatives(ip,Ke.array().min(1)),descending:Ke.bool().optional()}).optional(),conditions:Ke.array().min(1).items(Ke.alternatives(Ke.object({operator:Ke.string().valid("and","or").default("and").lowercase(),conditions:Ke.array()}),Ke.object({attribute:Ke.alternatives(ip,Ke.array().min(1)),comparator:Ke.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Ke.when("comparator",{switch:[{is:"equals",then:Ke.any()},{is:"between",then:Ke.array().items(Ke.alternatives([Ke.string(),Ke.number()])).length(2)}],otherwise:Ke.alternatives(Ke.string(),Ke.number())}).required()}))).required()});kB.exports=function(e,t){let r=null;switch(t){case"value":r=xB.validateBySchema(e,Vee);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(BB("database",e.schema)),i(BB("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=xB.validateBySchema(e,Kee);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=kee.checkGlobalSchemaTable(e.schema,e.table);if(s)return Hee(new Error,s,$ee.NOT_FOUND);let a=qee()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=o(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=UB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!UB.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var OI=v((QPe,HB)=>{"use strict";var Yee=gt(),Wee=Ju(),{getSchemaPath:zee}=At();HB.exports=jee;function jee(e){let t=Wee(e,"hashes");if(t)throw t;let r=zee(e.schema,e.table);return Yee.openEnvironment(r,e.table)}o(jee,"initialize")});var PI=v((XPe,GB)=>{"use strict";var Qee=Qu(),Jee=OI();GB.exports=Xee;async function Xee(e){let t=await Jee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Qee.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(Xee,"lmdbGetDataByHash")});var Xu=v((eLe,qB)=>{"use strict";var LI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};qB.exports=LI});var VB=v((nLe,$B)=>{"use strict";var rLe=Xu(),Zee=Qu(),ete=OI();$B.exports=tte;async function tte(e){let t=await ete(e),r=global.hdb_schema[e.schema][e.table];return Zee.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(tte,"lmdbSearchByHash")});var hi=v((iLe,KB)=>{"use strict";var DI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};KB.exports=DI});var yg=v((aLe,JB)=>{"use strict";var un=Qu(),rte=gt(),nte=ce(),Ye=Vt(),pl=(q(),M(W)),ste=Yi(),YB=Yr().LMDB_ERRORS_ENUM,{getSchemaPath:ite}=At(),qo=pl.SEARCH_WILDCARDS;async function ote(e,t,r){let n;e.schema===pl.SYSTEM_SCHEMA_NAME?n=ste[e.table]:n=global.hdb_schema[e.schema][e.table];let s=QB(e,n.hash_attribute,r,t);return zB(e,s,n.hash_attribute,r)}o(ote,"prepSearch");async function zB(e,t,r,n){let s=ite(e.schema,e.table),i=await rte.openEnvironment(s,e.table),a=jB(i,e,t,r),c=a.transaction||i;if([Ye.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ye.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ye.SEARCH_TYPES.SEARCH_ALL,Ye.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(ate(e,r)===!1){let d=e.attribute;if(d===r)return n?WB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?WB(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?un.batchSearchByHashToMap(c,r,e.get_attributes,u):un.batchSearchByHash(c,r,e.get_attributes,u)}o(zB,"executeSearch");function jB(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Ye.SEARCH_TYPES.EQUALS:s=un.equals(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.CONTAINS:s=un.contains(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.ENDS_WITH:case Ye.SEARCH_TYPES._ENDS_WITH:s=un.endsWith(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.STARTS_WITH:case Ye.SEARCH_TYPES._STARTS_WITH:s=un.startsWith(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return un.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case Ye.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return un.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case Ye.SEARCH_TYPES.SEARCH_ALL:return un.searchAll(e,n,t.get_attributes,a,c,l);case Ye.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return un.searchAllToMap(e,n,t.get_attributes,a,c,l);case Ye.SEARCH_TYPES.BETWEEN:s=un.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case Ye.SEARCH_TYPES.GREATER_THAN:case Ye.SEARCH_TYPES._GREATER_THAN:s=un.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ye.SEARCH_TYPES._GREATER_THAN_EQUAL:s=un.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.LESS_THAN:case Ye.SEARCH_TYPES._LESS_THAN:s=un.lessThan(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.LESS_THAN_EQUAL:case Ye.SEARCH_TYPES._LESS_THAN_EQUAL:s=un.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(jB,"searchByType");function WB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(WB,"createMapFromIterable");function ate(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(ate,"checkToFetchMore");function QB(e,t,r,n){if(nte.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),qo.indexOf(s)>-1)return r===!0?Ye.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ye.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(qo[0])<0&&s.indexOf(qo[1])<0)return c===!0?r===!0?Ye.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ye.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ye.SEARCH_TYPES.EQUALS;if(qo.indexOf(i)>=0&&qo.indexOf(a)>=0)return e.value=e.value.slice(1,-1),Ye.SEARCH_TYPES.CONTAINS;if(qo.indexOf(i)>=0)return e.value=e.value.substr(1),Ye.SEARCH_TYPES.ENDS_WITH;if(qo.indexOf(a)>=0)return e.value=e.value.slice(0,-1),Ye.SEARCH_TYPES.STARTS_WITH;if(s.includes(qo[0])||s.includes(qo[1]))return Ye.SEARCH_TYPES.EQUALS;throw new Error(YB.UNKNOWN_SEARCH_TYPE)}else switch(n){case pl.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ye.SEARCH_TYPES.BETWEEN;case pl.VALUE_SEARCH_COMPARATORS.GREATER:return Ye.SEARCH_TYPES.GREATER_THAN;case pl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ye.SEARCH_TYPES.GREATER_THAN_EQUAL;case pl.VALUE_SEARCH_COMPARATORS.LESS:return Ye.SEARCH_TYPES.LESS_THAN;case pl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ye.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(YB.UNKNOWN_SEARCH_TYPE)}}o(QB,"createSearchTypeFromSearchObject");JB.exports={executeSearch:zB,createSearchTypeFromSearchObject:QB,prepSearch:ote,searchByType:jB}});var ZB=v((uLe,XB)=>{"use strict";var lLe=hi(),cte=Ju(),lte=ce(),ute=(q(),M(W)),dte=yg();XB.exports=fte;function fte(e,t){if(!lte.isEmpty(t)&&ute.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=cte(e,"value");if(n)throw n;return dte.prepSearch(e,t,!0)}o(fte,"lmdbGetDataByValue")});var op=v((mLe,eF)=>{"use strict";var fLe=hi(),mte=Ju(),pte=ce(),hte=(q(),M(W)),Ete=yg();eF.exports=_te;async function _te(e,t){if(!pte.isEmpty(t)&&hte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=mte(e,"value");if(n)throw n;return Ete.prepSearch(e,t,!1)}o(_te,"lmdbSearchByValue")});var rF=v((ELe,tF)=>{"use strict";var hLe=Vt(),MI=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},vI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},UI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};tF.exports={SearchByConditionsObject:MI,SearchCondition:vI,SortAttribute:UI}});var aF=v((yLe,oF)=>{"use strict";var{SearchByConditionsObject:gLe,SearchCondition:SLe}=rF(),gte=hi(),Ste=Ju(),xI=Qu(),Rg=Vt(),{Resource:TLe}=(Fa(),M(r0)),iF=yg(),Tte=CI(),yte=require("lodash"),{getSchemaPath:Rte}=At(),nF=gt(),{handleHDBError:Ate,hdbErrors:bte}=Ee(),{HTTP_STATUS_CODES:Ite}=bte,wte=1e8;oF.exports=Nte;async function Nte(e){let t=Ste(e,"conditions");if(t)throw Ate(t,t.message,Ite.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=Rte(e.schema,e.table),n=await nF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)nF.openDBI(n,u.attribute);let i=yte.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Rg.SEARCH_TYPES.EQUALS?u.estimated_count=xI.count(n,u.attribute,u.value):d===Rg.SEARCH_TYPES.CONTAINS||d===Rg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=wte}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await sF(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(iF.filterByType),f=d.length,m=xI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:a,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>Tte.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await sF(a,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=xI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(Nte,"lmdbSearchByConditions");async function sF(e,t,r,n){let s=new gte(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Rg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,iF.searchByType(e,s,i,n).map(a=>a.value)}o(sF,"executeConditionSearch")});var ap=v((ALe,cF)=>{"use strict";var Cte=(q(),M(W)).OPERATIONS_ENUM,BI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=Cte.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};cF.exports=BI});var FI=v((ILe,EF)=>{"use strict";var fF=hi(),mF=ap(),pF=op(),hF=rp(),xn=(q(),M(W)),lF=ce(),uF=gt(),{getTransactionAuditStorePath:Ote,getSchemaPath:Pte}=At(),dF=Q();EF.exports=Lte;async function Lte(e){try{if(lF.isEmpty(global.hdb_schema[e.schema])||lF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Dte(e),await Mte(e);let t=Pte(e.schema,e.table);try{await uF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")dF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Ote(e.schema,e.table);await uF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")dF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(Lte,"lmdbDropTable");async function Dte(e){let t=new fF(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await pF(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new mF(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await hF(s)}o(Dte,"deleteAttributesFromSystem");async function Mte(e){let t=new fF(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await pF(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new mF(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await hF(s)}catch(i){throw i}}o(Mte,"dropTableFromSystem")});var gF=v((NLe,_F)=>{"use strict";var vte=require("fs-extra"),Ute=hi(),xte=Xu(),Bte=ap(),Fte=FI(),kte=rp(),Hte=PI(),Gte=op(),$o=(q(),M(W)),{getSchemaPath:qte}=At(),{handleHDBError:$te,hdbErrors:Vte}=Ee(),{HDB_ERROR_MSGS:Kte,HTTP_STATUS_CODES:Yte}=Vte;_F.exports=Wte;async function Wte(e){let t;try{t=await zte(e.schema);let r=new Ute($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,$o.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[$o.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Gte(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await Fte(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Bte($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await kte(s);let i=qte(t);await vte.remove(i)}catch(r){throw r}}o(Wte,"lmdbDropSchema");async function zte(e){let t=new xte($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[$o.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Hte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw $te(new Error,Kte.SCHEMA_NOT_FOUND(e),Yte.NOT_FOUND,void 0,void 0,!0);return n}o(zte,"validateDropSchema")});var cp=v((OLe,SF)=>{"use strict";var kI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};SF.exports=kI});var GI=v((DLe,TF)=>{"use strict";var jte=require("fs-extra"),Ag=gt(),{getTransactionAuditStorePath:Qte}=At(),HI=Vt(),LLe=cp();TF.exports=Jte;async function Jte(e){let t;try{let r=Qte(e.schema,e.table);await jte.mkdirp(r),t=await Ag.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{Ag.createDBI(t,HI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Ag.createDBI(t,HI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Ag.createDBI(t,HI.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(Jte,"createTransactionsAuditEnvironment")});var AF=v((ULe,RF)=>{"use strict";var qI=(q(),M(W)),yF=gt(),Xte=ul(),{getSystemSchemaPath:Zte,getSchemaPath:ere}=At(),vLe=Yi(),tre=pg(),$I=mg(),rre=Q(),nre=GI();RF.exports=sre;async function sre(e,t){let r=ere(t.schema,t.table),n=new $I(t.schema,t.table,qI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new $I(t.schema,t.table,qI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new $I(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await yF.createEnvironment(r,t.table),e!==void 0){let a=await yF.openEnvironment(Zte(),qI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Xte.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await VI(n),await VI(s),await VI(i)}await nre(t)}catch(a){throw a}}o(sre,"lmdbCreateTable");async function VI(e){try{await tre(e)}catch(t){rre.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(VI,"createAttribute")});var IF=v((BLe,bF)=>{"use strict";var ire=Zm(),ore=Sm(),are=hg(),lp=(q(),M(W)),cre=ul().updateRecords,lre=gt(),{getSchemaPath:ure}=At(),dre=ep(),fre=Q();bF.exports=mre;async function mre(e){try{let{schemaTable:t,attributes:r}=ire(e);ore(e,r,t.hash_attribute),e.schema!==lp.SYSTEM_SCHEMA_NAME&&(r.includes(lp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(lp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(lp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(lp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await are(e.hdb_auth_header,t,r),s=ure(e.schema,e.table),i=await lre.openEnvironment(s,e.table),a=await cre(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await dre(e,a)}catch(c){fre.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(mre,"lmdbUpdateRecords")});var NF=v((kLe,wF)=>{"use strict";var pre=(q(),M(W)).OPERATIONS_ENUM,KI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=pre.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};wF.exports=KI});var OF=v((qLe,CF)=>{"use strict";var GLe=NF(),hre=Zm(),Ere=Sm(),_re=hg(),up=(q(),M(W)),gre=ul().upsertRecords,Sre=gt(),{getSchemaPath:Tre}=At(),yre=ep(),Rre=Q(),{handleHDBError:Are,hdbErrors:bre}=Ee();CF.exports=Ire;async function Ire(e){let t;try{t=hre(e)}catch(l){throw Are(l,l.message,bre.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Ere(e,n,r.hash_attribute),e.schema!==up.SYSTEM_SCHEMA_NAME&&(n.includes(up.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(up.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(up.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(up.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await _re(e.hdb_auth_header,r,n),i=Tre(e.schema,e.table),a=await Sre.openEnvironment(i,e.table),c=await gre(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await yre(e,c)}catch(l){Rre.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o(Ire,"lmdbUpsertRecords")});var LF=v((VLe,PF)=>{"use strict";var YI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};PF.exports=YI});var MF=v((YLe,DF)=>{"use strict";var WI=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};DF.exports=WI});var xF=v((jLe,UF)=>{"use strict";var zI=gt(),{getTransactionAuditStorePath:wre}=At(),zLe=LF(),dp=Vt(),Nre=ce(),vF=MF(),Cre=require("util").promisify,Ore=Cre(setTimeout),Pre=1e4,Lre=100;UF.exports=Dre;async function Dre(e){let t=wre(e.schema,e.table),r=await zI.openEnvironment(t,e.table,!0),n=zI.listDBIs(r);zI.initializeDBIs(r,dp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new vF;do s=await Mre(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 Ore(Lre);while(s.transactions_deleted>0);return i}o(Dre,"deleteAuditLogsBefore");async function Mre(e,t){let r=new vF;try{let n=e.dbis[dp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[dp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Nre.isEmpty(c)||(s=e.dbis[dp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[dp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Pre)break}return await s,r}catch(n){throw n}}o(Mre,"deleteTransactions")});var FF=v((JLe,BF)=>{"use strict";var jI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};BF.exports=jI});var HF=v((eDe,kF)=>{"use strict";var vre=hi(),Ure=ap(),ZLe=FF(),Wi=(q(),M(W)),xre=ce(),QI=gt(),Bre=Yi(),Fre=op(),kre=rp(),{getSchemaPath:Hre}=At();kF.exports=Gre;async function Gre(e,t=!0){let r;e.schema===Wi.SYSTEM_SCHEMA_NAME?r=Bre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await $re(e),s=Hre(e.schema,e.table),i=await QI.openEnvironment(s,e.table);return t===!0&&await qre(e,i,r.hash_attribute),QI.dropDBI(i,e.attribute),n}o(Gre,"lmdbDropAttribute");async function qre(e,t,r){let n=QI.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(qre,"removeAttributeFromAllObjects");async function $re(e){let t=new vre(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 Fre(t)).filter(a=>a[Wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(xre.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(a=>a[Wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Ure(Wi.SYSTEM_SCHEMA_NAME,Wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return kre(i)}o($re,"dropAttributeFromSystem")});var YF=v((nDe,KF)=>{"use strict";var JI=gt(),Zu=Vt(),rDe=On(),XI=(q(),M(W)),GF=ce(),{getTransactionAuditStorePath:Vre}=At(),Kre=Qu(),bg=Wu(),Yre=Q();KF.exports=Wre;async function Wre(e){let t=Vre(e.schema,e.table),r=await JI.openEnvironment(t,e.table,!0),n=JI.listDBIs(r);JI.initializeDBIs(r,Zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case XI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return qF(r,e.search_values);case XI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,jre(r,e.search_values,s);case XI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return zre(r,e.search_values);default:return qF(r)}}o(Wre,"readAuditLog");function qF(e,t=[0,Date.now()]){GF.isEmpty(t[0])&&(t[0]=0),GF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zu.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 bg,s))}o(qF,"searchTransactionsByTimestamp");function zre(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Zu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,VF(e,i))}return Object.fromEntries(r)}o(zre,"searchTransactionsByUsername");function jre(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Kre.equals(e,Zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=VF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);$F(l,"records",r,d,a),$F(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(jre,"searchTransactionsByHashValues");function $F(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new bg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new bg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o($F,"loopRecords");function VF(e,t){let r=[];try{let n=e.dbis[Zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new bg,i);r.push(a)}}catch(i){Yre.warn(i)}return r}catch(n){throw n}}o(VF,"batchSearchTransactions")});var zF=v((aDe,WF)=>{"use strict";var{getSchemaPath:iDe}=At(),oDe=gt(),{database:Qre}=(Pe(),M(pt));WF.exports={writeTransaction:Jre};async function Jre(e,t,r){return Qre({database:e,table:t}).transaction(r)}o(Jre,"writeTransaction")});var XF=v((lDe,JF)=>{"use strict";var{getSchemaPath:jF}=At(),QF=gt();JF.exports={flush:Xre,resetReadTxn:Zre};async function Xre(e,t){return(await QF.openEnvironment(jF(e,t),t.toString())).flushed}o(Xre,"flush");async function Zre(e,t){try{(await QF.openEnvironment(jF(e,t),t.toString())).resetReadTxn()}catch{}}o(Zre,"resetReadTxn")});var rk=v((dDe,tk)=>{"use strict";var{Readable:ene}=require("stream"),{getDatabases:tne}=(Pe(),M(pt)),{readSync:rne,openSync:nne,createReadStream:ZF}=require("fs"),{open:sne}=require("lmdb"),{OpenDBIObject:ek}=zm(),ine=jm(),{AUDIT_STORE_OPTIONS:one}=(No(),M(hx)),{INTERNAL_DBIS_NAME:ane,AUDIT_STORE_NAME:cne}=Vt();tk.exports=une;var ZI=32768,lne=100;async function une(e){let t=e.database||e.schema||"data",r=tne()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=sne({noSync:!0,maxDbs:ine.MAX_DBS}),m,p=f.openDB(ane,new ek(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,T){T.encoding="binary",T.encoder=void 0;let w=f.openDB(S,T),L=d.openDB(S,T);for(let{key:k,version:te,value:F}of L.getRange({start:null,transaction:h,versions:L.useVersions}))m=w.put(k,F,te),E++%lne===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:T}of d.getRange({transaction:h,start:!1}))if(s.some(w=>S.startsWith?.(w+"/"))){p.put(S,T);let[,w]=S.split("/"),L=!w,k=new ek(!L,L);await g(S,k)}e.include_audit&&await g(cne,{...one}),await m;let A=ZF(f.path);return A.headers=l(),A.on("close",()=>{h.done(),f.close()}),A}let a=r[Object.keys(r)[0]].primaryStore,c=nne(a.path);return a.transaction(()=>{let u=Buffer.alloc(ZI);rne(c,u,0,ZI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=ZF(null,{fd:c,start:ZI}),m=new ene.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(une,"getBackup")});var ik=v((mDe,sk)=>{"use strict";var dne=Q(),{handleHDBError:fne}=Ee(),mne=U0(),pne=pg(),hne=AI(),Ene=gB(),_ne=rp(),gne=PI(),Sne=VB(),Tne=ZB(),yne=op(),Rne=aF(),Ane=gF(),bne=AF(),Ine=IF(),wne=OF(),Nne=xF(),Cne=FI(),One=HF(),Pne=YF(),Lne=zF(),nk=XF(),Dne=rk(),ew=class extends mne{static{o(this,"LMDBBridge")}async searchByConditions(t){return Rne(t)}async getDataByHash(t){return await gne(t)}async searchByHash(t){return await Sne(t)}async getDataByValue(t,r){return await Tne(t,r)}async searchByValue(t){return await yne(t)}async createSchema(t){return await Ene(t)}async dropSchema(t){return await Ane(t)}async createTable(t,r){return await bne(t,r)}async dropTable(t){return await Cne(t)}async createAttribute(t){return await pne(t)}async createRecords(t){return await hne(t)}async updateRecords(t){return await Ine(t)}async upsertRecords(t){try{return await wne(t)}catch(r){throw fne(r,null,null,dne.ERR,r)}}async deleteRecords(t){return await _ne(t)}async dropAttribute(t){return await One(t)}async deleteAuditLogsBefore(t){return await Nne(t)}async readAuditLog(t){return await Pne(t)}writeTransaction(t,r,n){return Lne.writeTransaction(t,r,n)}flush(t,r){return nk.flush(t,r)}resetReadTxn(t,r){return nk.resetReadTxn(t,r)}getBackup(t){return Dne(t)}};sk.exports=ew});function Bn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function mp(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a string, attempt to assign ${m}`);Bn(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a string, attempt to assign ${m}`);Bn(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a number, attempt to assign ${p}`);Bn(this)[u]=m},"set");break;case"Int":d=o(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ns.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Bn(this)[u]=m},"set");break;case"Long":d=o(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ns.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Bn(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ns.ClientError(`${u} must be a number, attempt to assign ${m}`);Bn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Bn(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ns.ClientError(`${u} must be a Date, attempt to assign ${m}`);Bn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Bn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof Ps||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Bn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Bn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ns.ClientError(`${u} must be an object, attempt to assign ${m}`);Bn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=tw(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ns.ClientError("Can not add a property to a sealed table schema");Bn(this)[l]=u}),a("deleteProperty",function(l){Bn(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?ck:ak);break}c=l}while(c&&c!==ak&&c!==ck)}function lk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(ok[t])return ok[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=tw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Mne(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function tw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends El{static{o(this,"TrackedObject")}},mp(r,t)),new r(e)):new El(e);case Array:let n=new wg(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=tw(a,t?.elements)),n[s]=a}return n;default:return e}}function Ng(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let a=r[s];i=i.update(a)}else i=Ng(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 Va(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let a=Va(i);a!==i&&r===e&&(r=e.slice(0)),i=a}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=KA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Va(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)vne.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Ig(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[hl]||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(Ig(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(Ig(s))return!0}else return!0}else return!0}}return!1}var ns,ok,ak,ck,El,vne,hl,wg,fp,rw=ie(()=>{ns=I(Ee());S_();Ls();o(Bn,"getChanges");o(mp,"assignTrackedAccessors");ok=Object.prototype,ak=new Proxy({},{get:lk}),ck=new Proxy({},{get:lk,set:Mne});o(lk,"getProxiedProperty");o(Mne,"setProxiedProperty");o(tw,"trackObject");El=class{static{o(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};mp(El,{},!0);o(Ng,"collapseData");vne=Object.prototype.hasOwnProperty;o(Va,"updateAndFreeze");o(Ig,"hasChanges");hl=Symbol.for("has-array-changes"),wg=class extends Array{static{o(this,"TrackedArray")}#e;[hl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[hl]=!0,super.splice(...t)}push(...t){return this[hl]=!0,super.push(...t)}pop(){return this[hl]=!0,super.pop()}unshift(...t){return this[hl]=!0,super.unshift(...t)}shift(){return this[hl]=!0,super.shift()}};wg.prototype.constructor=Array;fp=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var _k={};be(_k,{ResourceBridge:()=>iw});function ow({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 uk(e,t){let r=zi(e),n=ow(e,r);if(!r)throw new Ei.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;bt(i,()=>new Promise(u=>a=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&Ng(d)}catch(f){d={message:(0,Ek.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function zi(e){let t=e.database||e.schema||xne,r=ct()[t];if(!r)throw(0,Ei.handleHDBError)(new Error,Une.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function dk(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*fk(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var mk,Cg,Ei,pk,nw,sw,hk,Ek,Une,xne,Bne,Fne,iw,gk=ie(()=>{mk=I(ik()),Cg=I(Ju()),Ei=I(Ee());Pe();pk=I(Zm());q();nw=I(Go()),sw=I(ts()),hk=I(ce());La();rw();Ek=I(Q()),{HDB_ERROR_MSGS:Une}=Ei.hdbErrors,xne="data",Bne=1e4,Fne=10,iw=class extends mk.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=zi(t);if(!r)throw new Ei.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let a=i;return{attribute:a.attribute??a.search_attribute,comparator:a.comparator??a.search_type,value:a.value!==void 0?a.value:a.search_value}}}o(n,"mapCondition");let s=(0,Cg.default)(t,"conditions");if(s)throw(0,Ei.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:ow(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new Ei.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Je({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await zi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=zi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return zi(t).dropTable()}createSchema(t){return ed({database:t.schema,table:null}),nw.signalSchemaChange(new sw.SchemaEventMsg(process.pid,$.CREATE_SCHEMA,t.schema))}async dropSchema(t){await aw(t.schema),nw.signalSchemaChange(new sw.SchemaEventMsg(process.pid,$.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,pk.default)(t),s,i=ct()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),bt(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Ng(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=ct()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),bt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return dk(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ct()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ei.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:e_.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,hk.asyncSetTimeout)(Fne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Bne===0&&await u();return l.length>0&&await u(),s?dk(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Cg.default)(t,"hashes");if(r)throw r;return uk(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of uk(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&bA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,Cg.default)(t,"value");if(n)throw n;let s=zi(t);if(!s)throw new Ei.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===e_.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:ow(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=zi(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){zi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return zi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=zi(t),n={};switch(t.search_type){case t_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case t_.USERNAME:{let s=t.search_values;for await(let i of fk(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return fk(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(ow,"getSelect");o(uk,"getRecords");o(zi,"getTable");o(dk,"createDeleteResponse");o(fk,"groupRecordsInHistory")});var ss=v((bDe,Sk)=>{"use strict";var{ResourceBridge:kne}=(gk(),M(_k)),Hne=le();Hne.initSync();var Og;function Gne(){return Og||(Og=new kne,Og)}o(Gne,"getBridge");Sk.exports=Gne()});var ji=v((wDe,Rk)=>{var qne=Yi(),{promisify:$ne}=require("util"),{getDatabases:yk}=(Pe(),M(pt));Rk.exports={setSchemaDataToGlobal:Tk,getTableSchema:Vne,getSystemSchema:Kne,setSchemaDataToGlobalAsync:$ne(Tk)};function Tk(e){global.hdb_schema=yk(),e&&e()}o(Tk,"setSchemaDataToGlobal");function Vne(e,t,r){let n=yk()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}o(Vne,"getTableSchema");function Kne(){return qne}o(Kne,"getSystemSchema")});var Fn=v((CDe,wk)=>{"use strict";var Lg=iI(),Jr=ce(),Yne=require("util"),Dg=ss(),Wne=ji(),Ak=Q(),{handleHDBError:_l,hdbErrors:zne}=Ee(),{HTTP_STATUS_CODES:gl}=zne,jne=Yne.promisify(Wne.getTableSchema),Qne="updated",bk="inserted",Ik="upserted";wk.exports={insert:Xne,update:Zne,upsert:ese,validation:Jne,flush:tse};async function Jne(e){if(Jr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Jr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Jr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await jne(e.schema,e.table),r=Lg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Jr.isEmptyOrZeroLength(c[n]))throw Ak.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(!Jr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Ak.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Jr.isEmpty(c[n])&&c[n]!==""&&s.has(Jr.autoCast(c[n]))&&(c.skip=!0),s.add(Jr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(Jne,"validation");async function Xne(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Lg(e);if(t)throw _l(new Error,t.message,gl.BAD_REQUEST);Jr.transformReq(e);let r=Jr.checkSchemaTableExist(e.schema,e.table);if(r)throw _l(new Error,r,gl.BAD_REQUEST);let n=await Dg.createRecords(e);return Pg(bk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Xne,"insertData");async function Zne(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Lg(e);if(t)throw _l(new Error,t.message,gl.BAD_REQUEST);Jr.transformReq(e);let r=Jr.checkSchemaTableExist(e.schema,e.table);if(r)throw _l(new Error,r,gl.BAD_REQUEST);let n=await Dg.updateRecords(e);return Jr.isEmpty(n.existing_rows)?Pg(Qne,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Pg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Zne,"updateData");async function ese(e){if(e.operation!=="upsert")throw _l(new Error,"invalid operation, must be upsert",gl.INTERNAL_SERVER_ERROR);let t=Lg(e);if(t)throw _l(new Error,t.message,gl.BAD_REQUEST);Jr.transformReq(e);let r=Jr.checkSchemaTableExist(e.schema,e.table);if(r)throw _l(new Error,r,gl.BAD_REQUEST);let n=await Dg.upsertRecords(e);return Pg(Ik,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(ese,"upsertData");function Pg(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===bk?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===Ik?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(Pg,"returnObject");function tse(e){return Jr.transformReq(e),Dg.flush(e.schema,e.table)}o(tse,"flush")});var lw=v((PDe,Ok)=>{var rse=ft(),cw=require("joi"),{hdbTable:nse,hdbDatabase:Nk}=Vi(),Ck={schema:Nk,database:Nk,table:nse},sse={date:cw.date().iso().required()},ise={timestamp:cw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ok.exports=function(e,t){let r=t==="timestamp"?{...Ck,...ise}:{...Ck,...sse},n=cw.object(r);return rse.validateBySchema(e,n)}});var Dk=v((LDe,Lk)=>{var ose=ft(),uw=require("joi"),{hdbTable:ase,hdbDatabase:Pk}=Vi(),cse=uw.object({schema:Pk,database:Pk,table:ase,hash_values:uw.array().required(),ids:uw.array()});Lk.exports=function(e){return ose.validateBySchema(e,cse)}});var pw=v((DDe,Mk)=>{"use strict";var dw=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},fw=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=a}},mw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Mk.exports={InsertObject:dw,NoSQLSeachObject:fw,DeleteResponseObject:mw}});var yl=v((vDe,Fk)=>{"use strict";var Uk=lw(),lse=Dk(),Sl=ce(),vk=require("moment"),xk=Q(),{promisify:use,callbackify:dse}=require("util"),Tl=(q(),M(W)),fse=ji(),hw=use(fse.getTableSchema),Ew=ss(),{DeleteResponseObject:mse}=pw(),{handleHDBError:Ka,hdbErrors:pse}=Ee(),{HDB_ERROR_MSGS:Mg,HTTP_STATUS_CODES:Ya}=pse,hse="records successfully deleted",Ese=dse(Bk);Fk.exports={delete:Ese,deleteRecord:Bk,deleteFilesBefore:_se,deleteAuditLogsBefore:gse};async function _se(e){let t=Uk(e,"date");if(t)throw Ka(t,t.message,Ya.BAD_REQUEST,void 0,void 0,!0);if(Sl.transformReq(e),!vk(e.date,vk.ISO_8601).isValid())throw Ka(new Error,Mg.INVALID_DATE,Ya.BAD_REQUEST,Tl.LOG_LEVELS.ERROR,Mg.INVALID_DATE,!0);let n=Sl.checkSchemaTableExist(e.schema,e.table);if(n)throw Ka(new Error,n,Ya.NOT_FOUND,Tl.LOG_LEVELS.ERROR,n,!0);let s=await Ew.deleteRecordsBefore(e);if(await hw(e.schema,e.table),xk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(_se,"deleteFilesBefore");async function gse(e){let t=Uk(e,"timestamp");if(t)throw Ka(t,t.message,Ya.BAD_REQUEST,void 0,void 0,!0);if(Sl.transformReq(e),isNaN(e.timestamp))throw Ka(new Error,Mg.INVALID_VALUE("Timestamp"),Ya.BAD_REQUEST,Tl.LOG_LEVELS.ERROR,Mg.INVALID_VALUE("Timestamp"),!0);let r=Sl.checkSchemaTableExist(e.schema,e.table);if(r)throw Ka(new Error,r,Ya.NOT_FOUND,Tl.LOG_LEVELS.ERROR,r,!0);let n=await Ew.deleteAuditLogsBefore(e);return await hw(e.schema,e.table),xk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(gse,"deleteAuditLogsBefore");async function Bk(e){e.ids&&(e.hash_values=e.ids);let t=lse(e);if(t)throw Ka(t,t.message,Ya.BAD_REQUEST,void 0,void 0,!0);Sl.transformReq(e);let r=Sl.checkSchemaTableExist(e.schema,e.table);if(r)throw Ka(new Error,r,Ya.NOT_FOUND,Tl.LOG_LEVELS.ERROR,r,!0);try{await hw(e.schema,e.table);let n=await Ew.deleteRecords(e);return Sl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${hse}`),n}catch(n){if(n.message===Tl.SEARCH_NOT_FOUND_MESSAGE){let s=new mse;return s.message=Tl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(Bk,"deleteRecord")});var vg={};be(vg,{HASH_FUNCTION:()=>Fr,hash:()=>Sw,validate:()=>Tw});function _w(e=hp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(pp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Sw(e,t=Fr[Hk?.toUpperCase()]??Fr.SHA256){return gw[t](e)}function Tw(e,t,r=Fr[Hk?.toUpperCase()]??Fr.SHA256){return e?Sse[r](e,t):!1}var pp,td,kk,Hk,hp,Gk,Fr,gw,Sse,Ug=ie(()=>{pp=I(require("node:crypto")),td=I(require("argon2")),kk=I(le());q();Hk=(0,kk.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),hp=16,Gk=9,Fr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(_w,"generateSalt");gw={[Fr.MD5]:(e,t=void 0)=>{t=t??_w(Gk);let r=pp.createHash(Fr.MD5).update(e+t).digest("hex");return t+r},[Fr.SHA256]:(e,t=void 0)=>{t=t??_w(hp);let r=pp.createHash(Fr.SHA256).update(e+t).digest("hex");return t+r},[Fr.ARGON2ID]:async e=>{let t=_w(hp),r=await td.hash(e,{type:td.argon2id,salt:Buffer.from(t)});return t+r}},Sse={[Fr.MD5]:(e,t)=>{let r=e.slice(0,Gk);return e===gw[Fr.MD5](t,r)},[Fr.SHA256]:(e,t)=>{let r=e.slice(0,hp);return e===gw[Fr.SHA256](t,r)},[Fr.ARGON2ID]:async(e,t)=>await td.verify(e.slice(hp),t)};o(Sw,"hash");o(Tw,"validate")});var $k=v((FDe,qk)=>{var yw=ft(),dn={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 Tse(e){return dn.password.presence=!0,dn.username.presence=!0,dn.role.presence=!0,dn.active.presence=!0,yw.validateObject(e,dn)}o(Tse,"addUserValidation");function yse(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,yw.validateObject(e,dn)}o(yse,"alterUserValidation");function Rse(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,yw.validateObject(e,dn)}o(Rse,"dropUserValidation");qk.exports={addUserValidation:Tse,alterUserValidation:yse,dropUserValidation:Rse}});var rH=v((GDe,tH)=>{"use strict";var Rw=require("recursive-iterator"),Ase=require("alasql"),Aw=require("clone"),Vk=ce(),{handleHDBError:Kk,hdbErrors:bse}=Ee(),{HDB_ERROR_MSGS:Yk,HTTP_STATUS_CODES:Wk}=bse,{getDatabases:Ise}=(Pe(),M(pt)),wse=["DISTINCT_ARRAY"],zk=Symbol("validateTables"),bw=Symbol("validateTable"),HDe=Symbol("getAllColumns"),jk=Symbol("validateAllColumns"),xg=Symbol("findColumn"),Qk=Symbol("validateOrderBy"),Ep=Symbol("validateSegment"),Iw=Symbol("validateColumn"),Jk=Symbol("setColumnsForTable"),Xk=Symbol("checkColumnsForAsterisk"),Zk=Symbol("validateGroupBy"),eH=Symbol("hasColumns"),ww=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[zk](),this[Xk](),this[jk]()}[zk](){if(this[eH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[bw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[bw](t.table)})}}[eH](){let t=!1,r=new Rw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[bw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Ise();if(!r[t.databaseid])throw Kk(new Error,Yk.SCHEMA_NOT_FOUND(t.databaseid),Wk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Kk(new Error,Yk.TABLE_NOT_FOUND(t.databaseid,t.tableid),Wk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Aw(s);i.table=Aw(t),this.attributes.push(i)})}[xg](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)}[Xk](){let t=new Rw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Jk](r.tableid)}[Jk](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Ase.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[jk](){this[Ep](this.statement.columns,!1),this[Ep](this.statement.joins,!1),this[Ep](this.statement.where,!1),this[Zk](this.statement.group,!1),this[Ep](this.statement.order,!0)}[Ep](t,r){if(!t)return;let n=new Rw(t),s=[];for(let{node:i,path:a}of n)!Vk.isEmpty(i)&&!Vk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Qk](i):s.push(this[Iw](i)));return s}[Zk](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&wse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Aw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[xg](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[xg](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Qk](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[Iw](t)}[Iw](t){let r=this[xg](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]}};tH.exports=ww});var oH=v(($De,iH)=>{"use strict";var nH=require("lodash"),_p=require("mathjs"),Nse=require("jsonata"),sH=ce();iH.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?nH.uniqWith(e,nH.isEqual):e,"distinct_array"),searchJSON:Cse,mad:gp.bind(null,_p.mad),mean:gp.bind(null,_p.mean),mode:gp.bind(null,_p.mode),prod:gp.bind(null,_p.prod),median:gp.bind(null,_p.median)};function gp(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(gp,"aggregateFunction");function Cse(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(sH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),sH.isEmpty(this.__ala__.res[r])){let n=Nse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(Cse,"searchJSON")});var cH=v((KDe,aH)=>{"use strict";var dr=require("moment"),Nw="YYYY-MM-DDTHH:mm:ss.SSSZZ";dr.suppressDeprecationWarnings=!0;aH.exports={current_date:o(()=>dr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>dr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return dr(e).utc().format("YYYY");case"month":return dr(e).utc().format("MM");case"day":return dr(e).utc().format("DD");case"hour":return dr(e).utc().format("HH");case"minute":return dr(e).utc().format("mm");case"second":return dr(e).utc().format("ss");case"millisecond":return dr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>dr(e).utc().format(Nw),"date"),date_format:o((e,t)=>dr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>dr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>dr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=dr(e).utc(),s=dr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>dr().utc().valueOf(),"now"),get_server_time:o(()=>dr().format(Nw),"get_server_time"),offset_utc:o((e,t)=>dr(e).utc().utcOffset(t).format(Nw),"offset_utc")}});var fH=v((WDe,dH)=>{"use strict";var Ose=require("@turf/area"),Pse=require("@turf/length"),Lse=require("@turf/circle"),Dse=require("@turf/difference"),Mse=require("@turf/distance"),vse=require("@turf/boolean-contains"),Use=require("@turf/boolean-equal"),xse=require("@turf/boolean-disjoint"),Bse=require("@turf/helpers"),lH=(q(),M(W)),ze=ce(),Vo=Q();dH.exports={geoArea:Fse,geoLength:kse,geoCircle:Hse,geoDifference:Gse,geoDistance:uH,geoNear:qse,geoContains:$se,geoEqual:Vse,geoCrosses:Kse,geoConvert:Yse};function Fse(e){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Ose.default(e)}catch(t){return Vo.trace(t,e),NaN}}o(Fse,"geoArea");function kse(e,t){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Pse.default(e,{units:t||"kilometers"})}catch(r){return Vo.trace(r,e),NaN}}o(kse,"geoLength");function Hse(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Lse.default(e,t,{units:r||"kilometers"})}catch(n){return Vo.trace(n,e,t),NaN}}o(Hse,"geoCircle");function Gse(e,t){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return Dse(e,t)}catch(r){return Vo.trace(r,e,t),NaN}}o(Gse,"geoDifference");function uH(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return Mse.default(e,t,{units:r||"kilometers"})}catch(n){return Vo.trace(n,e,t),NaN}}o(uH,"geoDistance");function qse(e,t,r,n){if(ze.isEmpty(e)||ze.isEmpty(t))return!1;if(ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return uH(e,t,n)<=r}catch(s){return Vo.trace(s,e,t),!1}}o(qse,"geoNear");function $se(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return vse.default(e,t)}catch(r){return Vo.trace(r,e,t),!1}}o($se,"geoContains");function Vse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return Use.default(e,t)}catch(r){return Vo.trace(r,e,t),!1}}o(Vse,"geoEqual");function Kse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return!xse.default(e,t)}catch(r){return Vo.trace(r,e,t),!1}}o(Kse,"geoCrosses");function Yse(e,t,r){if(ze.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ze.isEmpty(t))throw new Error("geo_type is required");if(ze.isEmpty(lH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(lH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ze.autoCastJSON(e)),Bse[t](e,r)}o(Yse,"geoConvert")});var Bg=v((jDe,mH)=>{var Rl=oH(),is=cH(),Qi=fH();mH.exports=e=>{e.aggr.mad=e.aggr.MAD=Rl.mad,e.aggr.mean=e.aggr.MEAN=Rl.mean,e.aggr.mode=e.aggr.MODE=Rl.mode,e.aggr.prod=e.aggr.PROD=Rl.prod,e.aggr.median=e.aggr.MEDIAN=Rl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Rl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Rl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=is.current_date,e.fn.current_time=e.fn.CURRENT_TIME=is.current_time,e.fn.extract=e.fn.EXTRACT=is.extract,e.fn.date=e.fn.DATE=is.date,e.fn.date_format=e.fn.DATE_FORMAT=is.date_format,e.fn.date_add=e.fn.DATE_ADD=is.date_add,e.fn.date_sub=e.fn.DATE_SUB=is.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=is.date_diff,e.fn.now=e.fn.NOW=is.now,e.fn.offset_utc=e.fn.OFFSET_UTC=is.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=is.get_server_time,e.fn.getdate=e.fn.GETDATE=is.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=is.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Qi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Qi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Qi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Qi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Qi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Qi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Qi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Qi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Qi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Qi.geoNear}});var _H=v((QDe,EH)=>{"use strict";var Sp=require("lodash"),kn=require("alasql");kn.options.cache=!1;var Wse=Bg(),pH=require("clone"),Fg=require("recursive-iterator"),$e=Q(),st=ce(),rd=ss(),zse=(q(),M(W)),{hdbErrors:jse}=Ee(),{getDatabases:hH}=(Pe(),M(pt)),Qse="IS NULL",_i="There was a problem performing this search. Please check the logs and try again.";Wse(kn);var Cw=class{static{o(this,"SQLSearch")}constructor(t,r){if(st.isEmpty(t))throw $e.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),st.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!st.isEmptyOrZeroLength(n))return $e.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw $e.error("Error thrown from checkEmptySQL in SQLSearch class method search."),$e.error(n),new Error(_i)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw $e.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),$e.error(n),new Error(_i)}if(Object.keys(this.data).length===0)return $e.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw $e.error("Error thrown from processJoins in SQLSearch class method search."),$e.error(n),new Error(_i)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw $e.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),$e.error(n),new Error(_i)}try{return t=await this._finalSQL(),t}catch(n){throw $e.error("Error thrown from finalSQL in SQLSearch class method search."),$e.error(n),new Error(_i)}}_getColumns(){let t=new Fg(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(pH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Sp.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=hH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(st.isEmpty(this.statement.where)){$e.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Fg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!st.isEmpty(r)&&r.right)if(st.isNotEmptyAndHasValue(r.right.value)){let n=st.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new kn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=st.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new kn.yy.LogicValue({value:i}):n instanceof kn.yy.StringValue&&st.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new kn.yy.NumValue({value:i}))});if(t){$e.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Fg(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!st.isEmpty(zse.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(st.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(st.isEmptyOrZeroLength(r.left.columnid)||st.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(st.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!st.isEmpty(r.right.value)||!st.isEmpty(r.left.value)?n.add(st.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from)&&st.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Sp.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(st.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);st.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(st.isEmptyOrZeroLength(this.all_table_attributes)&&!st.isEmptyOrZeroLength(this.columns.columns))return t;if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await kn.promise(r)}catch(r){throw $e.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),$e.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(pH(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(st.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(Qse)>-1&&this.tables.forEach(s=>{let i={columnid:hH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Sp.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===a&&(l=!0),!st.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await rd.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw $e.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),$e.error(d),new Error(_i)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await rd.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw $e.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),$e.error(d),new Error(_i)}else if(!st.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await rd.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw $e.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),$e.error(d),new Error(_i)}else try{c.attribute=s.attribute,c.value="*";let d=await rd.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw $e.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),$e.error(d),new Error(_i)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof kn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,a=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new kn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new kn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new kn.yy.FuncValue:new kn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;a.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await kn.promise(h,t),t=null}catch(p){throw $e.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),$e.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];a.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}a.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=Sp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,A=E.length;g<A;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Fg(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=Sp.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 $e.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),$e.error(i),new Error(_i)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await rd.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw $e.error("Error thrown from getDataByHash function in SQLSearch class method getData."),$e.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();$e.trace(`Final SQL: ${s}`),n=await kn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),$e.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw $e.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),$e.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 $e.error(jse.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),$e.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let a=await rd.getDataByValue(i);for(let[c,l]of a)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(a){throw $e.error("There was an error when processing this SQL operation. Check your logs"),$e.error(a),new Error(_i)}}return Object.values(Object.values(this.data)[0].__mergedData)}};EH.exports=Cw});var fn=v((XDe,gH)=>{"use strict";var Jse=rH();gH.exports={searchByConditions:Zse,searchByHash:eie,searchByValue:tie,search:rie};var Ow=ss(),{transformReq:Pw}=ce(),Xse=_H();async function Zse(e){return Pw(e),Ow.searchByConditions(e)}o(Zse,"searchByConditions");async function eie(e){Pw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Ow.searchByHash(e))r&&t.push(r);return t}o(eie,"searchByHash");async function tie(e){Pw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Ow.searchByValue(e))t.push(r);return t}o(tie,"searchByValue");function rie(e,t){try{let r=new Jse(e);r.validate(),new Xse(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(rie,"search")});var Ji=v((eMe,RH)=>{"use strict";var Tp=require("crypto"),nie=le(),{CONFIG_PARAMS:sie}=(q(),M(W)),TH="aes-256-cbc",iie=32,oie=16,Lw=64,yH=32,aie=Lw+yH,SH=new Map;RH.exports={encrypt:cie,decrypt:lie,createNatsTableStreamName:uie};function cie(e){let t=Tp.randomBytes(iie),r=Tp.randomBytes(oie),n=Tp.createCipheriv(TH,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(cie,"encrypt");function lie(e){let t=e.substr(0,Lw),r=e.substr(Lw,yH),n=e.substr(aie,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=Tp.createDecipheriv(TH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(lie,"decrypt");function uie(e,t){let r=nie.get(sie.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=SH.get(r);return n||(n=Tp.createHash("md5").update(r).digest("hex"),SH.set(r,n)),n}o(uie,"createNatsTableStreamName")});var Nt=v((nMe,bH)=>{"use strict";var{platform:rMe}=require("os"),die="nats-server.zip",Dw="nats-server",fie=process.platform==="win32"?`${Dw}.exe`:Dw,mie=/^[^\s.,*>]+$/,AH="__request__",pie=o(e=>`${e}.${AH}`,"REQUEST_SUBJECT"),hie={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Eie={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},_ie={HUB:"hub.pid",LEAF:"leaf.pid"},gie={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Sie={SUCCESS:"success",ERROR:"error"},Tie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},yie={TXN:"txn",MSGID:"msgid"},nd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Rie={[nd.ERR]:1,[nd.WRN]:2,[nd.INF]:3,[nd.DBG]:4,[nd.TRC]:5},Aie={debug:"-D",trace:"-DVV"};bH.exports={NATS_SERVER_ZIP:die,NATS_SERVER_NAME:Dw,NATS_BINARY_NAME:fie,PID_FILES:_ie,NATS_CONFIG_FILES:Eie,SERVER_SUFFIX:gie,NATS_TERM_CONSTRAINTS_RX:mie,REQUEST_SUFFIX:AH,UPDATE_REMOTE_RESPONSE_STATUSES:Sie,CLUSTER_STATUS_STATUSES:Tie,REQUEST_SUBJECT:pie,SUBJECT_PREFIXES:yie,MSG_HEADERS:hie,LOG_LEVELS:nd,LOG_LEVEL_FLAGS:Aie,LOG_LEVEL_HIERARCHY:Rie}});var os=v((iMe,kr)=>{"use strict";var NH="username is required",CH="nothing to update, must supply active, role or password to update",OH="password cannot be an empty string",PH="If role is specified, it cannot be empty.",LH="active must be true or false";kr.exports.addUser=Die;kr.exports.alterUser=Mie;kr.exports.dropUser=Uie;kr.exports.getSuperUser=Hie;kr.exports.userInfo=xie;kr.exports.listUsers=Hg;kr.exports.listUsersExternal=Bie;kr.exports.setUsersWithRolesCache=Al;kr.exports.findAndValidateUser=Gw;kr.exports.getClusterUser=Gie;kr.exports.getUsersWithRolesCache=kie;kr.exports.USERNAME_REQUIRED=NH;kr.exports.ALTERUSER_NOTHING_TO_UPDATE=CH;kr.exports.EMPTY_PASSWORD=OH;kr.exports.EMPTY_ROLE=PH;kr.exports.ACTIVE_BOOLEAN=LH;var DH=Fn(),bie=yl(),yp=(Ug(),M(vg)),MH=$k(),Rp=fn(),Bw=Go(),Xi=ce(),vH=require("validate.js"),Fw=Q(),{promisify:Iie}=require("util"),kw=Ji(),vw=(q(),M(W)),IH=Nt(),wie=Rt(),Nie=le(),Cie=Yi(),{hdbErrors:Oie,ClientError:gi}=Ee(),{HTTP_STATUS_CODES:Ko,AUTHENTICATION_ERROR_MSGS:Mw,HDB_ERROR_MSGS:sd}=Oie,{UserEventMsg:Hw}=ts(),Uw=require("lodash"),{server:kg}=(Ur(),M(cm)),Pie=Q();kg.getUser=(e,t)=>Gw(e,t,t!=null);kg.authenticateUser=(e,t)=>Gw(e,t);var UH={username:!0,active:!0,role:!0,password:!0},wH=new Map,Lie=Iie(bie.delete),xw=Nie.get(vw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??yp.HASH_FUNCTION.SHA256,Zi;async function Die(e){let t=vH.cleanAttributes(e,UH),r=MH.addUserValidation(t);if(r)throw new gi(r.message);let n=await Rp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new gi(sd.ROLE_NAME_NOT_FOUND(t.role),Ko.NOT_FOUND);if(n.length>1)throw new gi(sd.DUP_ROLES_FOUND(t.role),Ko.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=kw.encrypt(t.password)),t.password=await yp.hash(t.password,xw),t.hash_function=xw,t.role=n[0].id;let s=await DH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Fw.debug(s),await Al(),s.skipped_hashes.length===1)throw new gi(sd.USER_ALREADY_EXISTS(t.username),Ko.CONFLICT);return Bw.signalUserChange(new Hw(process.pid)),`${t.username} successfully added`}o(Die,"addUser");async function Mie(e){let t=vH.cleanAttributes(e,UH);if(Xi.isEmptyOrZeroLength(t.username))throw new Error(NH);if(Xi.isEmptyOrZeroLength(t.password)&&Xi.isEmptyOrZeroLength(t.role)&&Xi.isEmptyOrZeroLength(t.active))throw new Error(CH);if(!Xi.isEmpty(t.password)&&Xi.isEmptyOrZeroLength(t.password.trim()))throw new Error(OH);if(!Xi.isEmpty(t.active)&&!Xi.isBoolean(t.active))throw new Error(LH);if(!Xi.isEmpty(t.password)&&!Xi.isEmptyOrZeroLength(t.password.trim())&&(vie(t.username)&&(t.hash=kw.encrypt(t.password)),t.password=await yp.hash(t.password,xw)),t.role==="")throw new Error(PH);if(t.role){let n=await Rp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new gi(sd.ALTER_USER_ROLE_NOT_FOUND(t.role),Ko.NOT_FOUND);if(n.length>1)throw new gi(sd.DUP_ROLES_FOUND(t.role),Ko.CONFLICT);t.role=n[0].id}let r=await DH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Al(),Bw.signalUserChange(new Hw(process.pid)),r}o(Mie,"alterUser");function vie(e){let t=!1,r=Zi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(vie,"isClusterUser");async function Uie(e){let t=MH.dropUserValidation(e);if(t)throw new gi(t.message);if(Zi.get(e.username)===void 0)throw new gi(sd.USER_NOT_EXIST(e.username),Ko.NOT_FOUND);let r=await Lie({table:"hdb_user",schema:"system",hash_values:[e.username]});return Fw.debug(r),await Al(),Bw.signalUserChange(new Hw(process.pid)),`${e.username} successfully deleted`}o(Uie,"dropUser");async function xie(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Uw.cloneDeep(e.hdb_user);let r=await Rp.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(xie,"userInfo");async function Bie(){let e=await Hg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Bie,"listUsersExternal");async function Hg(){let e=await Rp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Uw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Rp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Uw.cloneDeep(s),s.role=t[s.role],Fie(s.role),n.set(s.username,s);return n}o(Hg,"listUsers");function Fie(e){if(!e){Fw.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(Cie)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Fie,"appendSystemTablesToRole");async function Al(e=void 0){e?Zi=e:Zi=await Hg()}o(Al,"setUsersWithRolesCache");async function kie(){return Zi||await Al(),Zi}o(kie,"getUsersWithRolesCache");async function Gw(e,t,r=!0){Zi||await Al();let n=Zi.get(e);if(!n){if(!r)return{username:e};throw new gi(Mw.GENERIC_AUTH_FAIL,Ko.UNAUTHORIZED)}if(n&&!n.active)throw new gi(Mw.USER_INACTIVE,Ko.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(wH.get(t)===n.password)return s;{let i=yp.validate(n.password,t,n.hash_function||yp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)wH.set(t,n.password);else throw new gi(Mw.GENERIC_AUTH_FAIL,Ko.UNAUTHORIZED)}}return s}o(Gw,"findAndValidateUser");async function Hie(){Zi||await Al();for(let[,e]of Zi)if(e.role.role==="super_user")return e}o(Hie,"getSuperUser");async function Gie(){let e=await Hg(),t=wie.getConfigFromFile(vw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==vw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=kw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+IH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+IH.SERVER_SUFFIX.ADMIN,r}o(Gie,"getClusterUser");var xH=[];kg.invalidateUser=function(e){for(let t of xH)try{t(e)}catch(r){Pie.error("Error invalidating user",r)}};kg.onInvalidatedUser=function(e){xH.push(e)}});var qe,id=ie(()=>{qe={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var od,qw=ie(()=>{id();od=class{static{o(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==qe.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(qe.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=qe.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(qe.WARNING,t)}markLoading(t){this.updateStatus(qe.LOADING,t||"Component is loading")}isHealthy(){return this.status===qe.HEALTHY}hasError(){return this.status===qe.ERROR}isLoading(){return this.status===qe.LOADING}hasWarning(){return this.status===qe.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var bl,Wa,$w,ad,Vw,cd,Kw,Gg=ie(()=>{bl=I(Yr()),Wa=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=bl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},$w=class extends Wa{static{o(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,bl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},ad=class extends Wa{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,bl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},Vw=class extends Wa{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,bl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},cd=class extends Wa{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,bl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},Kw=class extends Wa{static{o(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,bl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
|
|
15
|
-
`)}}});var BH,Il,FH,za,Ap,ld,qie,qg,Yw=ie(()=>{BH=I(ts()),Il=I(nt());q();FH=I(Os());id();Gg();za=(0,FH.loggerWithTag)("componentStatus.crossThread"),Ap=class{static{o(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,Il.onMessageByType)(bu.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;za.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&(za.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let a=((0,Il.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let T=this.awaitingResponses.get(r);T&&T.length>=a&&!E&&(E=!0,S(),za.trace?.(`Collected all ${T.length} expected responses for request ${r}`),p(T))},"checkComplete"),A=setTimeout(()=>{if(!E){E=!0;let T=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),za.debug?.(`Collection timeout for request ${r}: collected ${T.length}/${a} responses`),p(T)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(A)},"cleanup");this.responseCheckers.set(r,g),(0,BH.sendItcEvent)({type:bu.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(T=>{E=!0,S(),this.responseCheckers.delete(r),h(new ad("sendItcEvent",T))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Il.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return za.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof ad?za.error?.(`ITC failure during component status collection: ${r.message}`):za.warn?.("Failed to collect component status from all threads:",r),za.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,Il.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[a,c]of r)n.set(`${a}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},ld=class{static{o(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let a=s.indexOf("@"),c=a!==-1?s.substring(0,a):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let a=this.aggregateComponentGroup(s,i);r.set(s,a)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,a,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let A=parseInt(E.substring(7));isNaN(A)||(n.workers[A]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==qe.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!a&&(a=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:a};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[qe.ERROR,qe.WARNING,qe.LOADING,qe.UNKNOWN,qe.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return qe.UNKNOWN}},qie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),qg=new Ap(qie)});var ja,$g=ie(()=>{qw();id();Yw();Gg();ja=class{static{o(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new cd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(qe).includes(r))throw new cd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(qe).join(", ")}`);this.statusMap.set(t,new od(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,qe.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,qe.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,qe.WARNING,r)}initializeLoading(t,r){this.setStatus(t,qe.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,qe.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,qe.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[qe.HEALTHY]:0,[qe.ERROR]:0,[qe.WARNING]:0,[qe.LOADING]:0,[qe.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await qg.collect(t);return ld.aggregate(r)}}});var fr,Vg=ie(()=>{$g();fr=new ja});function HH(e){let t=kH.get(e);return t||(t=new Ww(e),kH.set(e,t)),t}function GH(){fr.reset()}var Ww,kH,Yo,qH,$H=ie(()=>{Vg();id();Ww=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return fr.setStatus(this.componentName,qe.HEALTHY,t),this}warning(t){return fr.setStatus(this.componentName,qe.WARNING,t),this}error(t,r){return fr.setStatus(this.componentName,qe.ERROR,t,r),this}loading(t){return fr.setStatus(this.componentName,qe.LOADING,t||"Loading..."),this}unknown(t){return fr.setStatus(this.componentName,qe.UNKNOWN,t),this}get(){return fr.getStatus(this.componentName)}},kH=new Map;o(HH,"statusForComponent");Yo={loading(e,t){fr.initializeLoading(e,t)},loaded(e,t){fr.markLoaded(e,t)},failed(e,t,r){fr.markFailed(e,t,r)}};o(GH,"reset");qH=qe});var bp={};be(bp,{AggregationError:()=>Vw,COMPONENT_STATUS_LEVELS:()=>qe,ComponentStatus:()=>od,ComponentStatusError:()=>Wa,ComponentStatusOperationError:()=>cd,ComponentStatusRegistry:()=>ja,CrossThreadCollectionError:()=>Kw,CrossThreadStatusCollector:()=>Ap,CrossThreadTimeoutError:()=>$w,ITCError:()=>ad,StatusAggregator:()=>ld,componentStatusRegistry:()=>fr,crossThreadCollector:()=>qg,query:()=>$ie});var $ie,VH=ie(()=>{Vg();$g();qw();$g();Yw();Vg();Gg();id();$ie={get(e){return fr.getStatus(e)},all(){return fr.getAllStatuses()},byStatus(e){return fr.getComponentsByStatus(e)},summary(){return fr.getStatusSummary()},async allThreads(){return ja.getAggregatedFromAllThreads(fr)}}});var zw={};be(zw,{STATUS:()=>qH,internal:()=>bp,lifecycle:()=>Yo,reset:()=>GH,statusForComponent:()=>HH});var Ip=ie(()=>{$H();VH()});var Np=v((kMe,WH)=>{"use strict";var as=Q(),mn=(q(),M(W)),Vie=O0(),Kie=os(),{validateEvent:jw}=ts(),wp=ss(),Yie=require("process"),{resetDatabases:Wie}=(Pe(),M(pt)),zie={[mn.ITC_EVENT_TYPES.SCHEMA]:jie,[mn.ITC_EVENT_TYPES.USER]:YH,[mn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Jie};async function jie(e){let t=jw(e);if(t){as.error(t);return}as.trace("ITC schemaHandler received schema event:",e),await Vie(e.message),await Qie(e.message)}o(jie,"schemaHandler");async function Qie(e){try{wp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),wp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),wp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Wie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){as.error(t)}}o(Qie,"syncSchemaMetadata");var KH=[];async function YH(e){try{try{wp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),wp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){as.warn(r)}let t=jw(e);if(t){as.error(t);return}as.trace(`ITC userHandler ${mn.HDB_ITC_CLIENT_PREFIX}${Yie.pid} received user event:`,e),await Kie.setUsersWithRolesCache();for(let r of KH)r()}catch(t){as.error(t)}}o(YH,"userHandler");YH.addListener=function(e){KH.push(e)};async function Jie(e){try{let t=jw(e);if(t){as.error(t);return}as.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Ip(),M(zw)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=ts(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:mn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?as.trace(`Sent component status response directly to thread ${u}`):(u===void 0?as.debug("No originator threadId, falling back to broadcast"):as.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){as.error("Error handling component status request:",t)}}o(Jie,"componentStatusRequestHandler");WH.exports=zie});var ts=v((KMe,jH)=>{"use strict";var GMe=Q(),Qw=ce(),Xie=(q(),M(W)),{ITC_ERRORS:Cp}=Yr(),{parentPort:qMe,threadId:Zie,isMainThread:eoe,workerData:$Me}=require("worker_threads"),{onMessageFromWorkers:toe,broadcast:VMe,broadcastWithAcknowledgement:roe}=nt();jH.exports={sendItcEvent:noe,validateEvent:zH,SchemaEventMsg:soe,UserEventMsg:ioe};var Kg;toe(async(e,t)=>{Kg=Kg||Np(),zH(e),Kg[e.type]&&await Kg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function noe(e){return!eoe&&e.message&&(e.message.originator=Zie),roe(e)}o(noe,"sendItcEvent");function zH(e){if(typeof e!="object")return Cp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Qw.isEmpty(e.type))return Cp.MISSING_TYPE;if(!e.hasOwnProperty("message")||Qw.isEmpty(e.message))return Cp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Qw.isEmpty(e.message.originator))return Cp.MISSING_ORIGIN;if(Xie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Cp.INVALID_EVENT(e.type)}o(zH,"validateEvent");function soe(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(soe,"SchemaEventMsg");function ioe(e){this.originator=e}o(ioe,"UserEventMsg")});var Go=v((zMe,ZH)=>{"use strict";var QH=(q(),M(W)),WMe=ce(),Yg=Q(),JH=d0(),ud,{sendItcEvent:XH}=ts();function ooe(e){try{Yg.debug("signalSchemaChange called with message:",e),ud=ud||Np();let t=new JH(QH.ITC_EVENT_TYPES.SCHEMA,e);return ud.schema(t),XH(t)}catch(t){Yg.error(t)}}o(ooe,"signalSchemaChange");function aoe(e){try{Yg.trace("signalUserChange called with message:",e),ud=ud||Np();let t=new JH(QH.ITC_EVENT_TYPES.USER,e);return ud.user(t),XH(t)}catch(t){Yg.error(t)}}o(aoe,"signalUserChange");ZH.exports={signalSchemaChange:ooe,signalUserChange:aoe}});function Op(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 eG(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new ks(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 ks,Pp=ie(()=>{ks=class extends Map{static{o(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(Op,"appendHeader");o(eG,"mergeHeaders")});var dG={};be(dG,{EVICTED:()=>Ba,INVALIDATED:()=>Mn,coerceType:()=>zg,makeTable:()=>Qg});function Qg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:A}=e;E??=0;let{attributes:S}=e;S||(S=[]);let T=Bb(i,n,l),w,L,k={},te=Promise.resolve(),F,V,X;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(F=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(V=K),K.expiresAt&&(X=K),K.isPrimaryKey&&(k=K);let Y,de=[],ne=[],ae=1,ye=2,Ae={},He={},Ge=864e5,Ar=0,er,Gt,tr,Wf=!1,Uc,qt,zf,jf=Nl.get(x.REPLICATION_DATABASES);if(Array.isArray(jf)){for(let K of jf)if(K.name===c&&K.replicateTo>=0){zf=K.replicateTo;break}}let KE=i.getRange({start:!1,end:!1}).constructor,YE=10,lA=6;g&&WE(),Mm(i.env.path,K=>{if(L)return wa(K)});class Qf extends El{static{o(this,"Updatable")}getUpdatedTime(){return Ua.get(this.getRecord())?.version}getExpiresAt(){return Ua.get(this.getRecord())?.expiresAt}addTo(_,R){if(typeof R=="number"||typeof R=="bigint")this.set(_,new fp(R));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,R){return this.addTo(_,-R)}}class De extends Br{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=F;static updatedTimeProperty=V;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,R){if(R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(b=>!b.intermediateSource)){if(this.sources.some(b=>b.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}L=L||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),w=w||_.load;let O=o(b=>{let P=this.sources;if(P=P.filter(B=>B.intermediateSource&&B[b]&&(!B[b].reliesOnPrototype||B.prototype[b])),P.length>0)if(P.length===1){let B=P[0];return(C,H,U)=>{if(C?.source!==B)return B[b](H,U,C)}}else return(B,C,H)=>{let U=[];for(let J of P){if(B?.source===J)break;U.push(J[b](C,H,B))}return Promise.all(U)}},"getApplyToIntermediateSource"),D=this.sources[this.sources.length-1];D.intermediateSource&&(D={});let y=o(b=>{if(D[b]&&(!D[b].reliesOnPrototype||D.prototype[b]))return(P,B,C)=>{if(!P?.source)return D[b](B,C,P)}},"getApplyToCanonicalSource");Ae={put:y("put"),patch:y("patch"),delete:y("delete"),publish:y("publish")},He={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish"),invalidate:O("invalidate")};let N=D.shouldRevalidateEvents;return(async()=>{let b=!1,P,B=o(async(C,H)=>{let U=C.value,J=C.table?ve[c][C.table]:De;if(c===sm&&(C.table===Au.ROLE_TABLE_NAME||C.table===Au.USER_TABLE_NAME)&&(b=!0),C.id===void 0&&(C.id=U[J.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=_;let j={residencyId:Hc(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId,async:!0},G=C.id,Se=await J.getResource(G,H,j);switch(C.finished&&await C.finished,C.type){case"put":return N?Se._writeInvalidate(G,U,j):Se._writeUpdate(G,U,!0,j);case"patch":return N?Se._writeInvalidate(G,U,j):Se._writeUpdate(G,U,!1,j);case"delete":return Se._writeDelete(G,j);case"publish":case"message":return Se._writePublish(G,U,j);case"invalidate":return Se._writeInvalidate(G,U,j);case"relocate":return Se._writeRelocate(G,j);default:xe.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=_.subscribe;C&&A==null&&(A=!0);let H={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},U=_.subscribeOnThisThread?_.subscribeOnThisThread((0,wl.getWorkerIndex)(),H):(0,wl.getWorkerIndex)()===0,J=C&&U&&await _.subscribe?.(H);if(J){let j;for await(let G of J)try{if(!(G.type==="transaction"?G.writes[0]:G)){xe.default.error?.("Bad subscription event",G);continue}if(G.source=_,G.type==="end_txn"){if(j?.resolve(),G.localTime&&P!==G.localTime){if(G.remoteNodeIds?.length>0){let Oe=[Symbol.for("seq"),G.remoteNodeIds[0]],z=d.get(Oe),oe=z?.nodes;oe||(oe=[]);for(let pe of G.remoteNodeIds.slice(1)){let we=oe.find(fe=>fe.id===pe);oe=oe.filter(fe=>fe.id!==pe||fe===we),we||(we={id:pe,seqId:0},oe.push(we)),we.seqId=Math.max(z?.seqId??1,G.localTime),pe===j?.nodeId&&(we.lastTxnTime=G.timestamp)}let se=Math.max(z?.seqId??1,G.localTime);xe.default.trace?.("Received txn",c,se,new Date(se),G.localTime,new Date(G.localTime),G.remoteNodeIds),d.put(Oe,{seqId:se,nodes:oe})}P=G.localTime}G.onCommit&&j?.committed.then(G.onCommit);continue}if(j)if(G.beginTxn)j.resolve();else{j.write_promises.push(B(G,j));continue}!G.timestamp&&G.version&&(G.timestamp=G.version);let me=bt(G,()=>{if(G.type==="transaction"){let Oe=[];for(let z of G.writes)try{Oe.push(B(z,G))}catch(oe){throw oe.message+=" writing "+JSON.stringify(z)+" of event "+JSON.stringify(G),oe}return Promise.all(Oe)}else if(G.type==="define_schema"){let Oe=this.attributes.slice(0),z=!1;for(let oe of G.attributes)Oe.find(se=>se.name===oe.name)||(Oe.push(oe),z=!0);z&&(Je({table:s,database:c,attributes:Oe,origin:"cluster"}),Dp.signalSchemaChange(new Mp.SchemaEventMsg(process.pid,$.CREATE_TABLE,c,s)))}else return G.beginTxn?(j=G,j.write_promises=[B(G,G)],new Promise(Oe=>{j.resolve=()=>Oe(Promise.all(j.write_promises))})):B(G,G)});j&&(j.committed=me),b&&me&&!me?.waitingForUserChange&&(me.then(()=>Dp.signalUserChange(new Mp.UserEventMsg(process.pid))),me.waitingForUserChange=!0),G.onCommit&&(me?me.then(G.onCommit):G.onCommit())}catch(Se){xe.default.error?.("error in subscription handler",Se)}}}catch(C){xe.default.error?.(C)}})(),this}static get isCaching(){return L}static get shouldRevalidateEvents(){return this.prototype.get!==De.prototype.get}static getResource(_,R,O){let D=super.getResource(_,R,O);if(this.loadAsInstance===!1&&(R._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Is(_);try{if(D.getRecord?.())return D;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let y=!O?.async||i.cache?.get?.(_),N=Ir(R),b=N.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return xc(_,R,{transaction:b,ensureLoaded:O?.ensureLoaded},y,P=>{if(P?De._updateResource(D,P):D.#e=null,R.onlyIfCached){if(!D.doesExist())throw new mt.ServerError("Entry is not cached",504)}else if(O?.ensureLoaded){let B=Vr(_,P,R,D);if(B)return N?.disregardReadTxn(),D.#i=!0,R.loadedFromSource=!0,Si(B,C=>(De._updateResource(D,C),D))}return D})}catch(y){throw y.message.includes("Unable to serialize object")&&(y.message+=": "+JSON.stringify(_)),y}}return D}static _updateResource(_,R){_.#n=R,_.#e=R?.value??null,_.#r=R?.version}ensureLoaded(){let _=Vr(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,Si(_,R=>{this.#n=R,this.#e=R.value,this.#r=R.version})}static getNewId(){let _=k?.type;if(_==="String"||_==="ID")return super.getNewId();if(!qt){let y=i.getEntry(Symbol.for("id_allocation")),N=y?.value,b;if(N&&N.nodeName===server.hostname&&(!Soe(i)||N.pid===process.pid)){let P=N.start,B=N.end;b=P;for(let C of i.getKeys({start:B,end:P,limit:1,reverse:!0}))b=C}else N=D(y?.version??null),b=N.start;qt=new BigInt64Array([BigInt(b)+1n]),qt=new BigInt64Array(i.getUserSharedBuffer("id",qt.buffer)),qt.maxSafeId=N.end}let R=Number(Atomics.add(qt,0,1n)),O=_==="Int"?512:1048576;if(R+O>=qt.maxSafeId){let y=o(N=>{qt.maxSafeId=R+(_==="Int"?1023:4194303);let b=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,P=N?void 0:i.useReadTransaction(),B=Number(qt[0]);for(let U of i.getKeys({start:B+1,end:b,limit:1,transaction:P}))b=U;P?.done();let{value:C,version:H}=i.getEntry(Symbol.for("id_allocation"));if(qt.maxSafeId<b){if(C.end>qt.maxSafeId-100)return;xe.default.info?.("New id allocation",R,qt.maxSafeId,H),i.put(Symbol.for("id_allocation"),{start:C.start,end:qt.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 ${qt.maxSafeId}, but id of ${b} detected`);let U=D(H);U.alreadyUpdated||Atomics.store(qt,0,BigInt(U.start+1)),qt.maxSafeId=U.end}},"updateEnd");R+O===qt.maxSafeId?setImmediate(y):R+100>=qt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>y(!0)))}return R;function D(y){let N=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,b=N/4,P,B,C=!1,H,U;do{H=Math.floor(Math.random()*N),U={start:H,end:H+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},P=0;for(let J of i.getKeys({start:H,limit:1,reverse:!0}))P=J;B=N;for(let J of i.getKeys({start:H+1,end:N,limit:1}))B=J;b*=.875,b<1e3&&!C&&(C=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,H,P,B,b))}while(!(b<B-H&&(b<H-P||P===0)));return i.transactionSync(()=>{let J=i.getEntry(Symbol.for("id_allocation"));return(J?.version??null)==y?(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(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,Ge=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");Ge=Ge||(h+E)/4,wa()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){De.getResidency=_&&((R,O)=>{try{return _(R,O)}catch(D){throw D.message+=` in residency function for table ${s}`,D}})}static setResidencyById(_){De.getResidencyById=_&&(R=>{try{return _(R)}catch(O){throw O.message+=` in residency function for table ${s}`,O}})}static getResidency(_,R){if(De.getResidencyById)return De.getResidencyById(_[t]);let O=zf;if(R.replicateTo!=null){if(Array.isArray(R.replicateTo))return R.replicateTo.includes(server.hostname)?R.replicateTo:[server.hostname,...R.replicateTo];R.replicateTo>=0&&(O=R.replicateTo)}if(O>=0&&server.nodes){let D=[server.hostname];if(R.previousResidency)D.push(...R.previousResidency.slice(0,O));else{let y=server.nodes.map(P=>P.name),N=Math.floor(y.length*Math.random());D.push(...y.slice(N,N+O));let b=N+O-y.length;b>0&&D.push(...y.slice(0,b))}return D}}static enableAuditing(_=!0){g=_,_&&WE(),De.audit=_}static coerceId(_){return _===""?null:zg(_,k)}static async dropTable(){delete ve[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Dn&&_.value&&Da(_.value);if(c===a){for(let _ of S)d.remove(De.tableName+"/"+_.name),r[_.name]?.drop();d.remove(De.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),Xw.default.unlinkSync(i.env.path);Dp.signalSchemaChange(new Mp.SchemaEventMsg(process.pid,$.DROP_TABLE,c,s))}get(_){let R=this.constructor;if(typeof _=="string"&&R.loadAsInstance!==!1)return this.getProperty(_);if(ws(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let O={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?De.getRecordCount().then(D=>(O.recordCount=D.recordCount,O.estimatedRecordRange=D.estimatedRange,O)):O}if(_!==void 0&&R.loadAsInstance===!1){let O=this.getContext(),D=Ir(O),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let N=br(_);Is(N);let b=!0;return _.checkPermission&&(b=this.allowRead(O.user,_)),Si(b,P=>{if(!P)throw new mt.AccessViolation(O.user);let B=!0;return xc(N,O,{transaction:y,ensureLoaded:B},!1,C=>{if(O.onlyIfCached){if(!C?.value)throw new mt.ServerError("Entry is not cached",504)}else if(B){let H=Vr(N,C,O);if(H)return D?.disregardReadTxn(),O.loadedFromSource=!0,H.then(U=>U?.value)}return C?.value})})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,R){let O=Bc(_,R);if(O?.read){if(O.isSuperUser)return!0;let D=O.attribute_permissions,y=R?.select;if(D?.length>0||Wf&&y){if(R||(R={}),y){let N=D?.length>0&&Jw(D,"read");R.select=y.map(b=>{let P=b.name||b;if(!N||N[P]){let B=tr[P]?.definition?.tableClass;if(B){if(b.name||(b={name:b}),!b.checkPermission&&R.checkPermission&&(b.checkPermission=R.checkPermission),!B.prototype.allowRead.call(null,_,b))return!1;if(!b.select)return b.name}return b}}).filter(Boolean)}else R.select=D.filter(N=>N.read&&!tr[N.attribute_name]).map(N=>N.attribute_name);return R}else return!0}}allowUpdate(_,R,O){let D=Bc(_,O);if(D?.update){let y=D.attribute_permissions;if(y?.length>0){let N=Jw(y,"update");for(let b in R)if(!N[b])return!1;for(let b of y){let P=b.attribute_name;!b.update&&!(P in R)&&(R[P]=this.getProperty(P))}}return Ia(this.getContext())}}allowCreate(_,R,O){if(this.isCollection){let D=Bc(_,O);if(D?.insert){let y=D.attribute_permissions;if(y?.length>0){let N=Jw(y,"insert");for(let b in R)if(!N[b])return!1;return Ia(this.getContext())}else return Ia(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,R){return Bc(_,R)?.delete&&Ia(this.getContext())}update(_,R){let O,D=typeof R=="boolean"||R===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),y=!1;D?(y=R,R=_,O=this.getId()):O=br(_);let N=this.getContext();if(!Ir(N))throw new Error("Can not update a table resource outside of a transaction");if(R===!1)return this;if(typeof R=="object"&&R)if(y)Object.isFrozen(R)&&(R={...R}),this.#e={},this.#t=R;else if(D){let P=this.#t;P&&(R=Object.assign(P,R)),this.#t=R}else{let P=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(P=this.allowUpdate(N.user,R,_)),Si(P,B=>{if(!B)throw new mt.AccessViolation(N.user);return Si(i.get(br(_)),C=>{let H=new Qf(C);return H._setChanges(R),this._writeUpdate(O,H.getChanges(),!1),H})})}return this._writeUpdate(O,this.#t,y),this}addTo(_,R){if(typeof R=="number"||typeof R=="bigint")this.#s===rG?this.set(_,(+this.getProperty(_)||0)+R):(this.#s||this.update(),this.set(_,new fp(R)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,R){if(typeof R=="number")return this.addTo(_,-R);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let R=!0,O=this.getContext();return _?.checkPermission&&(R=this.allowDelete(O.user,_,O)),Si(R,D=>{if(!D)throw new mt.AccessViolation(O.user);this._writeInvalidate(_?br(_):this.getId())})}_writeInvalidate(_,R,O){let D=this.getContext();Is(_),Ir(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.invalidate?.bind(this,D,_),beforeIntermediate:He.invalidate?.bind(this,D,_),commit:o((N,b)=>{if(!(ba(N,b,O?.nodeId)<=0)){R??=null;for(let P in r)R||(R={}),R[P]===void 0&&(R[P]=this.getProperty(P));xe.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(N).toISOString()}`),T(_,R,b,N,Mn,g,{user:D?.user,residencyId:O?.residencyId,nodeId:O?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,R){let O=this.getContext();Is(_),Ir(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.relocate?.bind(this,O,_),beforeIntermediate:He.relocate?.bind(this,O,_),commit:o((y,N)=>{if(ba(y,N,R?.nodeId)<=0)return;let b=De.getResidencyRecord(R.residencyId),P=0,B=null,C=N?.value;if(b&&!b.includes(server.hostname)){for(let H in r)B||(B={}),B[H]=C[H];P=Mn}else B=C;xe.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(y).toISOString()}`),T(_,B,N,y,P,g,{user:O.user,residencyId:R.residencyId,nodeId:R.nodeId,expiresAt:R.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,R){let O={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},D=kc(this.getResidency(R.value,O)),y;if(D){if(!D.includes(server.hostname))return!1;y=Hc(D)}let N=0;xe.default.debug?.("Performing a relocate of an entry",existing_entry.key,R.value,D);let b=T(_.key,R.value,_,_.version,N,!0,{residencyId:y,expiresAt:R.expiresAt},"relocate",!1,null);return!0}static evict(_,R,O){let D=this.Source,y;if(!((L||g)&&(!R||(y=i.getEntry(_),!y||!R)||y.version!==O))){if(L){if(i.hasLock(_,y.version))return;let N;for(let b in r)N||(N={}),N[b]=R[b];if(N)return T(_,N,y,O,Ba,null,null,null,!0)}if(i.ifVersion(_,O,()=>{Ao(_,R,null)}),g)return T(_,null,y,O,Ba,null,null,null,!0);ol(i,y??i.getEntry(_),O)}}lock(){throw new Error("Not yet implemented")}static operation(_,R){return _.table||=s,_.schema||=c,global.operation(_,R)}put(_,R){if(R===void 0||R instanceof URLSearchParams)this.update(_,!0);else{let O=!0;if(_==null)throw new TypeError("Can not put a record without a target");let D=this.getContext();return _.checkPermission&&(O=this.allowUpdate(D.user,R,_)),Si(O,y=>{if(!y)throw new mt.AccessViolation(D.user);if(Array.isArray(R))for(let N of R){let b=N[t];this._writeUpdate(b,N,!0)}else{let N=br(_);this._writeUpdate(N,R,!0)}})}}create(_,R){let O=!0,D=this.getContext();if(!R&&!(_ instanceof URLSearchParams)&&(R=_,_=void 0),!R||typeof R!="object"||Array.isArray(R))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(O=this.allowCreate(D.user,R,_)),Si(O,y=>{if(!y)throw new mt.AccessViolation(D.user);let N=br(_)??R[t];if(N===void 0)N=this.constructor.getNewId();else if(i.get(N))throw new mt.ClientError("Record already exists",409);return this._writeUpdate(N,R,!0),R})}patch(_,R){if(R===void 0||R instanceof URLSearchParams)this.update(_,!1);else{let O=this.update(_,R);if(O?.then)return O.then(()=>{})}}_writeUpdate(_,R,O,D){let y=this.getContext(),N=Ir(y);Is(_);let b=this.#n??i.getEntry(_);this.#s=O?rG:hoe;let P={key:_,store:i,entry:b,nodeName:y?.nodeName,validate:o(B=>{R||(R=this.#t),O||R&&Ig(this.#t===R?this:R)?y?.source||(N.checkOverloaded(),this.validate(R,!O),V&&(R[V.name]=V.type==="Date"?new Date(B):V.type==="String"?new Date(B).toISOString():B),O&&(t&&R[t]!==_&&(R[t]=_),F&&(b?.value?R[F.name]=b?.value[F.name]:R[F.name]=F.type==="Date"?new Date(B):F.type==="String"?new Date(B).toISOString():B),R=Va(R))):N.removeWrite(P)},"validate"),before:O?Ae.put?()=>Ae.put(y,_,R):null:Ae.patch?()=>Ae.patch(y,_,R):Ae.put?()=>Ae.put(y,_,Va(this)):null,beforeIntermediate:O?He.put?()=>He.put(y,_,R):null:He.patch?()=>He.patch(y,_,R):He.put?()=>He.put(y,_,Va(this)):null,commit:o((B,C,H)=>{if(H){if(y&&C?.version>(y.lastModified||0)&&(y.lastModified=C.version),this.#n=C,C?.value&&C.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");O||(this.#e=C?.value??null)}this.#t=void 0,this.#r=B;let U=C?.value,J=R;this.#s=0;let j=!1,G=ba(B,C,D?.nodeId),Se;if(G<=0){if(g){let se=C.localTime,pe=C.version;xe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(B),"applying later update from:",new Date(pe),"local recorded time",new Date(se));let we=[];for(;se>B||pe>=B&&se>0;){let fe=l.get(se);if(!fe)break;let Me=Bt(fe);if(pe=Me.version,pe>=B){if(pe===B){if(G=ba(B,{version:pe,localTime:se},D?.nodeId),G===0)return;if(G>0)continue}if(Me.type==="patch")we.push(Me),Se=R;else if(Me.type==="put"||Me.type==="delete")return}se=Me.previousLocalTime}se||xe.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",C),we.sort((fe,Me)=>fe.version-Me.version);for(let fe of we){let Me=fe.getValue(i);if(xe.default.debug?.("Rebuilding update with future patch:",new Date(fe.version),Me,fe),J=g_(J,Me,O),!J)return}}else{if(O)return;J=g_(J,U,O),xe.default.debug?.("Rebuilding update without audit:",J)}xe.default.trace?.("Rebuilt record to save:",J," is full update:",O)}let me;if(O?me=J:this.constructor.loadAsInstance===!1?me=Va(U,J):(this.#e=U,me=Va(this,J)),this.#e=me,me&&me.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let Oe;if(D?.residencyId!=null)Oe=D.residencyId;else{b?.residencyId&&(y.previousResidency=De.getResidencyRecord(b.residencyId));let se=kc(De.getResidency(me,y));if(se&&!se.includes(server.hostname))if(Se??=me,j=!0,De.getResidencyById)me=void 0;else{me=null;for(let pe in r)me||(me={}),me[pe]=Se[pe]}Oe=Hc(se)}O||(Se=R);let z=y?.expiresAt??(h?h+Date.now():-1);xe.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(B).toISOString()}${z?", expires at: "+new Date(z).toISOString():""}${C?", replaces entry from: "+new Date(C.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(me).slice(0,100)}catch{return""}})()),Ao(_,U,me);let oe=O?"put":"patch";T(_,me,C,B,j?Mn:0,g,{omitLocalRecord:j,user:y?.user,residencyId:Oe,expiresAt:z,nodeId:D?.nodeId,originatingOperation:y?.originatingOperation,tableToTrack:c==="system"?null:s},oe,!1,Se),y.expiresAt&&wa()},"commit")};N.addWrite(P)}async delete(_){if(ws(_)){_.select=["$id"];for await(let R of this.search(_))this._writeDelete(R.$id);return!0}if(_){let R=!0,O=this.getContext();return _.checkPermission&&(R=this.allowDelete(O.user,_,O)),Si(R,D=>{if(!D)throw new mt.AccessViolation(O.user);let y=br(_);return this._writeDelete(y),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,R){let O=Ir(this.getContext());Is(_);let D=this.getContext();return O.addWrite({key:_,store:i,entry:this.#n,nodeName:D?.nodeName,before:Ae.delete?.bind(this,D,_),beforeIntermediate:He.delete?.bind(this,D,_),commit:o((y,N,b)=>{let P=N?.value;b&&(D&&N?.version>(D.lastModified||0)&&(D.lastModified=N.version),De._updateResource(this,N)),!(ba(y,N,R?.nodeId)<=0)&&(Ao(this.getId(),P),xe.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(y).toISOString()}`),g||A?(T(_,null,N,y,0,g,{user:D?.user,nodeId:R?.nodeId,tableToTrack:s},"delete"),g||wa()):ol(i,N))},"commit")}),!0}search(_){let R=this.getContext(),O=Ir(R);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(R.user,_))throw new mt.AccessViolation(R.user);R&&(R.lastModified=doe);let D=_.conditions;D?D.length===void 0&&(D=D[Symbol.iterator]?Array.from(D):[D]):D=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let y=_.id??this.getId();y&&(D=[{attribute:null,comparator:Array.isArray(y)?"prefix":"starts_with",value:y}].concat(D));let N,b={};function P(se,pe){let we;switch(pe){case"and":case void 0:if(se.length<1)throw new Error('An "and" operator requires at least one condition');we=!0;break;case"or":if(se.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+pe)}for(let fe of se){if(fe.conditions){fe.conditions=P(fe.conditions,fe.operator);continue}let Me=fe[0]??fe.attribute,at=Me==null?k:qi(S,Me);if(at)(at.type||kb[fe.comparator])&&(fe[1]===void 0?fe.value=C(fe.value,at):fe[1]=C(fe[1],at));else if(Me!=null)throw(0,mt.handleHDBError)(new Error,`${Me} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let Qe=fe.chainedConditions[0],Mr,Kr;if(Qe.comparator==="gt"||Qe.comparator==="greater_than"||Qe.comparator==="ge"||Qe.comparator==="greater_than_equal"?(Mr=fe,Kr=Qe):(Mr=Qe,Kr=fe),Mr.comparator!=="lt"&&Mr.comparator!=="less_than"&&Mr.comparator!=="le"&&Mr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let zE=Kr.comparator==="ge"||Kr.comparator==="greater_than_equal",Ne=Mr.comparator==="le"||Mr.comparator==="less_than_equal";fe.comparator=(zE?"ge":"gt")+(Ne?"le":"lt"),fe.value=[Kr.value,Mr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return se}o(P,"prepareConditions");function B(se,pe){if(_.enforceExecutionOrder)return se;for(let we of se)we.conditions&&(we.conditions=B(we.conditions,we.operator));return se.length>1&&pe!=="or"?coe(se,Z_(De)):se}o(B,"orderConditions");function C(se,pe){return Array.isArray(se)?se.map(we=>zg(we,pe)):zg(se,pe)}o(C,"coerceTypedValues");let H=_.operator;(D.length>0||H)&&(D=P(D,H));let U=typeof _.sort=="object"&&_.sort,J;if(U&&H!=="or"){let se=U.attribute;if(se==null)throw new mt.ClientError("Sort requires an attribute");if(N=D.find(pe=>Gu(pe.attribute)===Gu(se)),!N){let pe=qi(S,se);if(!pe)throw(0,mt.handleHDBError)(new Error,`${Array.isArray(se)?se.join("."):se} is not a defined attribute`,404);if(pe.indexed)N={...U,comparator:"sort"},D.push(N);else if(D.length===0&&!_.allowFullScan)throw(0,mt.handleHDBError)(new Error,`${Array.isArray(se)?se.join("."):se} is not indexed and not combined with any other conditions`,404)}N&&(N.descending=!!U.descending)}D=B(D,H),U&&(N&&D[0]===N?U.next&&(J={dbOrderedAttribute:U.attribute,attribute:U.next.attribute,descending:U.next.descending,next:U.next.next}):(N&&D.splice(D.indexOf(N),1),J=U));let j=_.select;if(D.length===0&&(D=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:D,operator:H,postOrdering:J,selectApplied:!!j};let G=O.useReadTxn(),Se=Hb(D,H,De,G,_,R,(se,pe)=>Jf(se,j,R,G,pe),b),me=_.ensureLoaded!==!1;J||(Se=oe(Se));let Oe=De.transformEntryForSelect(j,R,G,b,me,!0),z=De.transformToOrderedSelect(Se,j,J,R,G,Oe);function oe(se){return _.offset||_.limit!==void 0?se.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0):se}return o(oe,"applyOffset"),J&&(z=oe(z)),z.onDone=()=>{z.onDone=null,O.doneReadTxn()},z.selectApplied=!0,z.getColumns=()=>{if(j){let se=[];for(let pe of j)pe==="*"?se.push(...S.map(we=>we.name)):se.push(pe.name||pe);return se}return S.filter(se=>!se.computed&&!se.relationship).map(se=>se.name)},z}static transformToOrderedSelect(_,R,O,D,y,N){let b=new KE;if(O){_=Jf(_,R,D,y,null);let P;b.iterate=function(){let C,H=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),U,J=O.dbOrderedAttribute,j,G,Se=!0;function me(z){let oe=z.next&&me(z.next),se=z.descending;return D.sort=z,(pe,we)=>{let fe=Fc(pe,z.attribute,D),Me=Fc(we,z.attribute,D),at=se?(0,Cl.compareKeys)(Me,fe):(0,Cl.compareKeys)(fe,Me);return at===0?oe?.(pe,we)||0:at}}o(me,"createComparator");let Oe=me(O);return{async next(){let z;if(C)if(z=C.next(),z.done){if(U)return b.onDone&&b.onDone(),z}else return{value:await N.call(this,z.value)};P=[],j&&P.push(j);do if(z=await H.next(),z.done){if(U=!0,P.length)break;return b.onDone&&b.onDone(),z}else{let oe=z.value;if(oe?.then&&(oe=await oe),J){let se=Fc(oe,J,D);if(Se)Se=!1,G=se;else if(se!==G){G=se,j=oe;break}}P.push(oe)}while(!0);return O.isGrouped,P.sort(Oe),C=P[Symbol.iterator](),z=C.next(),z.done?(b.onDone&&b.onDone(),z):{value:await N.call(this,z.value)}},return(){return b.onDone&&b.onDone(),H.return()},throw(){return b.onDone&&b.onDone(),H.throw()}}};let B=o(C=>{if(typeof R=="object"&&Array.isArray(C.attribute))for(let H=0;H<R.length;H++){let U=R[H],J;if(U.name===C.attribute[0]){for(J=U.sort||(U.sort={});J.next;)J=J.next;J.attribute=C.attribute.slice(1),J.descending=C.descending}else U===C.attribute[0]&&(R[H]=J={name:U,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&B(C.next)},"applySortingOnSelect");B(O)}else b.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),b=b.map(function(P){try{let B=N.call(this,P);return typeof B?.catch=="function"?B.catch(C=>{throw C.partialObject={[t]:P.key},C}):B}catch(B){throw B.partialObject={[t]:P.key},B}});return b}static transformEntryForSelect(_,R,O,D,y,N){let b;y&&L&&!(typeof _=="string"?[_]:_)?.every(C=>{let H;return typeof C=="object"?H=C.name:H=C,r[H]||H===t})&&(b=!0);let P,B=o(function(C){let H;if(R?.transaction?.stale&&(R.transaction.stale=!1),C!=null){if(H=C.deref?C.deref():C.value,!H&&(C.key===void 0||C.deref)||C.metadataFlags&Mn){if(C.metadataFlags&Mn&&R.replicateFrom===!1&&N&&C.residencyId)return Ja.SKIP;if(C=xc(C.key??C,R,{transaction:O,lazy:_?.length<4,ensureLoaded:y},this?.isSync,U=>U),C?.then)return C.then(B.bind(this));H=C?.value}if(b&&C?.metadataFlags&(Mn|Ba)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(R.onlyIfCached)return{[t]:C.key,message:"This entry has expired"};let U=Vr(C.key??C,C,R);if(U?.then)return U.then(B)}}if(H==null)return N?Ja.SKIP:H;if(_&&!(_[0]==="*"&&_.length===1)){let U,J=o((G,Se)=>{let me;typeof G=="object"?me=G.name:me=G;let Oe=tr?.[me],z;if(Oe){let oe=D?.[me];if(oe)if(oe.hasMappings){let pe=Oe.from?H[Oe.from]:Gu(C.key);z=oe.get(pe),z||(z=[])}else z=oe.fromRecord?.(H);else z=Oe(H,R,C,!0);let se=o(pe=>{if(Oe.directReturn)return Se(pe,me);if(pe&&typeof pe=="object"){let we=Oe.definition?.tableClass||De;P||(P={});let fe=P[me]||(P[me]=we.transformEntryForSelect(me===G?null:G.select||(Array.isArray(G)?G:null),R,O,oe,y));if(Array.isArray(pe)){let Me=[],at=we.transformToOrderedSelect(pe,G.select,typeof G.sort=="object"&&G.sort,R,O,fe)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Qe=o(Kr=>{for(;!Kr.done;){if(Kr?.then)return Kr.then(Qe);Me.push(Kr.value),Kr=at.next()}Se(Me,me)},"nextValue"),Mr=Qe(at.next());Mr&&(U||(U=[]),U.push(Mr));return}else if(pe=fe.call(this,pe),pe?.then){U||(U=[]),U.push(pe.then(Me=>Se(Me,me)));return}}Se(pe,me)},"handleResolvedValue");z?.then?(U||(U=[]),U.push(z.then(se))):se(z);return}else z=H[me],z&&typeof z=="object"&&me!==G&&(z=De.transformEntryForSelect(G.select||G,R,O,null)({value:z}));Se(z,me)},"selectAttribute"),j;if(typeof _=="string")J(_,G=>{j=G});else if(Array.isArray(_))if(_.asArray)j=[],_.forEach((G,Se)=>{G==="*"?_[Se]=H:J(G,me=>j[Se]=me)});else{j={};let G=_.forceNulls;for(let Se of _)if(Se==="*")for(let me in H)j[me]=H[me];else J(Se,(me,Oe)=>{me===void 0&&G&&(me=null),j[Oe]=me})}else throw new mt.ClientError("Invalid select"+_);return U?Promise.all(U).then(()=>j):j}return H},"transform");return B}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Je({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let R=!_.rawEvents,O=[],D=Wb(De,this.getId()??null,function(b,P,B,C){try{let H=P.getValue?.(i,R),U=P.type;if(!H&&U==="patch"&&R){let j=i.getEntry(b);j?.version===P.version?H=j.value:H=P.getValue?.(i,!0,B),U="put"}let J={id:b,localTime:B,value:H,version:P.version,type:U,beginTxn:C};O?O.push(J):(Xe(P.size??1,"db-message",s,null),this.send(J))}catch(H){xe.default.error?.(H)}},_.startTime||0,_),y=(async()=>{this.isCollection&&(D.includeDescendants=!0,_.onlyChildren&&(D.onlyChildren=!0)),_.supportsTransactions&&(D.supportsTransactions=!0);let b=this.getId(),P=_.previousCount;P>1e3&&(P=1e3);let B=_.startTime;if(this.isCollection){if(B){if(P)throw new mt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:H}of l.getRange({start:B,exclusiveStart:!0,snapshot:!1})){let U=Bt(H);if(U.tableId!==n)continue;let J=U.recordId;if(b==null||oG(b,J)){let j=U.getValue(i,R,C);if(N({id:J,localTime:C,value:j,version:U.version,type:U.type,size:U.size}),D.queue?.length>sG&&await D.waitForDrain()===!1)return}D.startTime=C}}else if(P){let C=[];for(let{key:H,value:U}of l.getRange({start:"z",end:!1,reverse:!0}))try{let J=Bt(U);if(J.tableId!==n)continue;let j=J.recordId;if(b==null||oG(b,j)){let G=J.getValue(i,R,H);if(C.push({id:j,localTime:H,value:G,version:J.version,type:J.type}),--P<=0)break}}catch(J){xe.default.error("Error getting history entry",H,J)}for(let H=C.length;H>0;)N(C[--H]);C[0]&&(D.startTime=C[0].localTime)}else if(!_.omitCurrent){for(let{key:C,value:H,version:U,localTime:J,size:j}of i.getRange({start:b??!1,end:b==null?void 0:[b,Cl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(H&&(N({id:C,localTime:J,value:H,version:U,type:"put",size:j}),D.queue?.length>sG&&await D.waitForDrain()===!1))return}}else{P&&!B&&(B=0);let C=this.#n?.localTime;if(C===xb&&(i.cache?.delete(b),this.#n=i.getEntry(b),xe.default.trace?.("re-retrieved record",C,this.#n?.localTime),C=this.#n?.localTime),xe.default.trace?.("Subscription from",B,"from",b,C),B<C){let H=[],U=C;do{let J=l.get(U);if(J){_.omitCurrent=!0;let j=Bt(J),G=j.getValue(i,R,U);R&&(j.type="put"),H.push({id:b,value:G,localTime:U,...j}),U=j.previousLocalTime}else break;P&&P--}while(U>B&&P!==0);for(let J=H.length;J>0;)N(H[--J]);D.startTime=C}!_.omitCurrent&&this.doesExist()&&N({id:b,localTime:C,value:this.#e,version:this.#r,type:"put"})}for(let C of O)N(C);O=null})();function N(b){Xe(b.size??1,"db-message",s,null),D.send(b)}return o(N,"send"),_.listener&&D.on("data",_.listener),D}static subscribeOnThisThread(_,R){return _===0||R?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,R,O){if(R===void 0||R instanceof URLSearchParams)this._writePublish(this.getId(),_,R);else{let D=!0,y=this.getContext();return _.checkPermission&&(D=this.allowCreate(y.user,_,y)),Si(D,N=>{if(!N)throw new mt.AccessViolation(y.user);let b=br(_);this._writePublish(b,R,O)})}}_writePublish(_,R,O){let D=Ir(this.getContext());_??=null,_!==null&&Is(_);let y=this.getContext();D.addWrite({key:_,store:i,entry:this.#n,nodeName:y?.nodeName,validate:o(()=>{y?.source||(D.checkOverloaded(),this.validate(R))},"validate"),before:Ae.publish?.bind(this,y,_,R),beforeIntermediate:He.publish?.bind(this,y,_,R),commit:o((N,b,P)=>{b===void 0&&A&&!g&&wa(),xe.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(N).toISOString()}`),T(_,b?.value??null,b,b?.version||N,0,!0,{user:y?.user,residencyId:O?.residencyId,expiresAt:y?.expiresAt,nodeId:O?.nodeId,tableToTrack:s},"message",!1,R)},"commit")})}validate(_,R){let O,D=o((y,N,b)=>{if(N.type&&y!=null)if(R&&y.__op__&&(y=y.value),N.properties){typeof y!="object"&&(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be an object${N.type?" ("+N.type+")":""}`);let P=N.properties;for(let B=0,C=P.length;B<C;B++){let H=P[B];if(H.relationship||H.computed){_.hasOwnProperty(H.name)&&(O||(O=[])).push(`Computed property ${b}.${H.name} may not be directly assigned a value`);continue}let U=D(y[H.name],H,b+"."+H.name);U&&(y[H.name]=U)}if(N.sealed&&y!=null&&typeof y=="object")for(let B in y)P.find(C=>C.name===B)||(O||(O=[])).push(`Property ${B} is not allowed within object in property ${b}`)}else switch(N.type){case"Int":(typeof y!="number"||y>>0!==y)&&(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof y!="number"||!(Math.floor(y)===y&&Math.abs(y)<=9007199254740992))&&(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof y!="number"&&(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a number`);break;case"ID":typeof y=="string"||y?.length>0&&y.every?.(P=>typeof P=="string")||(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a string, or an array of strings`);break;case"String":typeof y!="string"&&(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a string`);break;case"Boolean":typeof y!="boolean"&&(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a boolean`);break;case"Date":if(!(y instanceof Date)){if(typeof y=="string"||typeof y=="number")return new Date(y);(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a Date`)}break;case"BigInt":if(typeof y!="bigint"){if(typeof y=="string"||typeof y=="number")return BigInt(y);(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a bigint`)}break;case"Bytes":if(!(y instanceof Uint8Array)){if(typeof y=="string")return Buffer.from(y);(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(y instanceof Ps)){if(typeof y=="string"&&(y=Buffer.from(y)),y instanceof Buffer)return createBlob(y,{type:"text/plain"});(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a Blob`)}break;case"array":if(Array.isArray(y)){if(N.elements)for(let P=0,B=y.length;P<B;P++){let C=y[P],H=D(C,N.elements,b+"[*]");H&&(y[P]=H)}}else(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be an Array`);break}N.nullable===!1&&y==null&&(O||(O=[])).push(`Property ${b} is required (and not does not allow null values)`)},"validateValue");for(let y=0,N=S.length;y<N;y++){let b=S[y];if(b.relationship||b.computed){Object.hasOwn(_,b.name)&&(O||(O=[])).push(`Computed property ${b.name} may not be directly assigned a value`);continue}if(!R||b.name in _){let P=D(_[b.name],b,b.name);P!==void 0&&(_[b.name]=P)}}if(f)for(let y in _)S.find(N=>N.name===y)||(O||(O=[])).push(`Property ${y} is not allowed`);if(O)throw new mt.ClientError(O.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return L?!!this.#i:void 0}static async addAttributes(_){let R=S.slice(0);for(let O of _){if(!O.name)throw new mt.ClientError("Attribute name is required");if(O.name.match(/[`/]/))throw new mt.ClientError("Attribute names cannot include backticks or forward slashes");loe(O.name),R.push(O)}return Je({table:s,database:c,schemaDefined:u,attributes:R}),De.indexingOperation}static async removeAttributes(_){let R=S.filter(O=>!_.includes(O.name));return Je({table:s,database:c,schemaDefined:u,attributes:R}),De.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,R=Xw.default.statfsSync?.(_)??{};return{available:R.bavail*R.bsize,free:R.bfree*R.bsize,size:R.blocks*R.bsize}}static async getRecordCount(_){let R=i.getStats().entryCount,O=1e3/2,D=performance.now(),y=Math.floor(R/2),N=_?.exactCount,b=0,P=0,B;for(let{value:C}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(C!=null&&b++,P++,await Qa(),!N&&P<y&&performance.now()-D>O){B=P;break}if(B){let C=b;b=0;for(let{value:z}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:B,snapshot:!1}))z!=null&&b++,await Qa();let H=B*2,U=(b+C)/H,J=Math.pow((b-C+1)/B/2,2)+U*(1-U)/H,j=Math.max(Math.sqrt(J)*R,1),G=Math.round(U*R),Se=Math.max(G-1.96*j,b+C),me=Math.min(G+1.96*j,R),Oe=Math.pow(10,Math.round(Math.log10(j)));return Oe>G&&(Oe=Oe/10),b=Math.round(G/Oe)*Oe,{recordCount:b,estimatedRange:[Math.round(Se),Math.round(me)]}}return{recordCount:b}}static updatedAttributes(){tr=this.propertyResolvers={$id:o((_,R,O)=>({value:O.key}),"$id"),$updatedtime:o((_,R,O)=>O.version,"$updatedtime"),$updatedTime:o((_,R,O)=>O.version,"$updatedTime"),$expiresAt:o((_,R,O)=>O.expiresAt,"$expiresAt"),$record:o((_,R,O)=>O?{value:_}:_,"$record"),$distance:o((_,R,O)=>O&&(O.distance??R?.vectorDistances?.get(O)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(k=_),_.resolve=null;let R=_.relationship,O=_.computed;if(R)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),O&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Wf=!0,R.to)_.elements?.definition?(tr[_.name]=_.resolve=(D,y,N,b)=>{let P=D[R.from?R.from:t],B=_.elements.definition.tableClass;return b?Hu({attribute:R.to,value:P},Ir(y).getReadTxn(),!1,B,!1).map(C=>C&&C.key!==void 0?C:B.primaryStore.getEntry(C,{transaction:Ir(y).getReadTxn()})).asArray:B.search([{attribute:R.to,value:P}],y).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=R.to,R.from&&(_.resolve.from=R.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(R.from){let D=_.definition||_.elements?.definition;D?(tr[_.name]=_.resolve=(y,N,b,P)=>{let B=y[R.from];if(B===void 0)return;if(_.elements){let H,U=B?.map(J=>{let j=D.tableClass.primaryStore[P?"getEntry":"get"](J,{transaction:Ir(N).getReadTxn()});return j?.then&&(H=!0),De.loadAsInstance===!1&&Object.freeze(P?j?.value:j),j});return R.filterMissing?H?Promise.all(U).then(J=>J.filter(aG)):U.filter(aG):H?Promise.all(U):U}let C=D.tableClass.primaryStore[P?"getEntry":"get"](B,{transaction:Ir(N).getReadTxn()});return De.loadAsInstance===!1&&Object.freeze(P?C?.value:C),C},_.set=(y,N)=>{if(Array.isArray(N)){let b=N.map(P=>P.getId?.()||P[D.tableClass.primaryKey]);y[R.from]=b}else{let b=N.getId?.()||N[D.tableClass.primaryKey];y[R.from]=b}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=R.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(O)typeof O.from=="function"&&this.setComputedAttribute(_.name,O.from),tr[_.name]=_.resolve=(D,y,N)=>{let b=typeof O.from=="string"?D[O.from]:D,P=this.userResolvers[_.name];if(P)return P(b,y,N);xe.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let D=r[_.name].customIndex;tr[_.name]=(y,N,b)=>{let P=y[_.name];return D.propertyResolver(P,N,b)},tr[_.name].directReturn=!0}}mp(this,this),mp(Qf,this,!0);for(let _ of S){let R=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,R,{get(){return _.resolve(this,$u.getStore())},set(O){return _.set(this,O)},configurable:!0})}}static setComputedAttribute(_,R){let O=qi(S,_);if(!O){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!O.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=R}static async deleteHistory(_=0,R=!1){let O;for(let{key:D,value:y}of l.getRange({start:0,end:_}))await Qa(),Bt(y).tableId===n&&(O=H_(l,D,y));if(R)for(let D of i.getRange({start:0,versions:!0})){let{key:y,value:N,localTime:b}=D;await Qa(),N===null&&b<_&&(O=ol(i,D))}await O}static async*getHistory(_=0,R=1/0){for(let{key:O,value:D}of l.getRange({start:_||1,end:R})){await Qa();let y=Bt(D);y.tableId===n&&(yield{id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user,operation:y.originatingOperation})}}static async getHistoryOfRecord(_){let R=[];if(_==null)throw new Error("An id is required");let O=i.getEntry(_);if(!O)return R;let D=O.localTime;if(!D)throw new Error("The entry does not have a local audit time");let y=0;do{await Qa();let N=l.get(D);if(N){let b=Bt(N);R.push({id:b.recordId,localTime:D,version:b.version,type:b.type,value:b.getValue(i,!0,D),user:b.user}),D=b.previousLocalTime}else break}while(y<1e3&&D);return R.reverse()}static cleanup(){Y?.remove()}}De.updatedAttributes();let uA=De.prototype;return h&&De.setTTLExpiration(h/1e3),X&&Zf(),De;function Ao(K,_,R){let O;for(let D in r){let y=r[D],N=y.isIndexing,b=tr[D],P=R&&(b?b(R):R[D]),B=_&&(b?b(_):_[D]);if(P===B&&!N)continue;if(y.customIndex){y.customIndex.index(K,P,B);continue}O=!0;let C=y.indexNulls,H=(0,Lp.getIndexedValues)(P,C),U=(0,Lp.getIndexedValues)(B,C);if(s==="OrganizationRole"&&xe.default.error?.({tableName:s,id:K,key:D,valuesToAdd:H,valuesToRemove:U}),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)&&tG){let j=U.concat(H).map(G=>({key:G,value:K}));y.prefetch(j,iG)}for(let j=0,G=U.length;j<G;j++)y.remove(U[j],K)}else H?.length>0&&tG&&y.prefetch(H.map(J=>({key:J,value:K})),iG);if(H)for(let J=0,j=H.length;J<j;J++)y.put(H[J],K)}return O}o(Ao,"updateIndices");function Is(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>nG)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,Cl.writeKey)(K,Eoe,0)>nG)throw new Error("Primary key size is too large: "+K.length);return!0}o(Is,"checkValidId");function br(K){return typeof K=="object"&&K?K.id:K}o(br,"requestTargetToId");function ws(K){return typeof K=="object"&&K&&K.isCollection}o(ws,"isSearchTarget");function dA(K){}o(dA,"isRequestTarget");function xc(K,_,R,O,D){if(De.getResidencyById&&R.ensureLoaded&&_?.replicateFrom!==!1){let N=kc(De.getResidencyById(K));if(N&&!N.includes(server.hostname)&&w)return w({key:K,residency:N}).then(D)}let y=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),R.transaction?.isDone)return D(null,K);let N=i.getEntry(K,R);return c!=="system"&&(uG.default.trace?.("Recording db-read action for",s),Xe(N?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(N?.value),N?.residencyId&&N.metadataFlags&Mn&&w&&R.ensureLoaded&&_?.replicateFrom!==!1?w(N).then(b=>D(b,K),b=>(xe.default.error?.("Error loading remote record",K,N,R,b),D(null,K))):(N&&_&&(N?.version>(_.lastModified||0)&&(_.lastModified=N.version),N?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=N.localTime)),D(N,K))},"whenPrefetched");return O?y():ae>0?(ae--,y()):new Promise((N,b)=>{ae===0?(ae--,i.prefetch([K],()=>{P(),B()})):(de.push(K),ne.push(B),de.length>lA&&(ae--,P()));function P(){if(de.length>0){let C=ne;i.prefetch(de,()=>{ae===-1?P():ae++;for(let H of C)H()}),de=[],ne=[],ye>2&&ye--}else ae=ye,ye<YE&&ye++}o(P,"prefetch");function B(){try{N(y())}catch(C){b(C)}}o(B,"load")})}o(xc,"loadLocalRecord");function Bc(K,_){let R=_?.checkPermission;if(typeof R!="object"){if(!K?.role)return;R=K.role.permission}if(R.super_user)return _oe;let O=R[c],D,y=O?.tables;if(y)return y[s];if(c==="data"&&(D=R[s])&&!D.tables)return D}o(Bc,"getTablePermissions");function Vr(K,_,R,O){if(L){let D=!1;if(R.noCache?D=!0:(_?(!_.value||_.metadataFlags&(Mn|Ba)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(D=!0):D=!0,jr(!D,"cache-hit",s)),D){let y=Xf(K,_,R).then(N=>(N?.value&&N?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),R&&(N?.version>(R.lastModified||0)&&(R.lastModified=N.version),R.lastRefreshed=Date.now()),N));if(R?.onlyIfCached||_?.value&&O?.allowStaleWhileRevalidate?.(_,K)){if(y.catch(N=>xe.default.warn?.(N)),R?.onlyIfCached&&!O.doesExist())throw new mt.ServerError("Entry is not cached",504);return}else return y}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return De.evict(_.key,_.value,_.version),_.value=null,{then(D){return D(_)}}}o(Vr,"ensureLoadedFromSource");function Ir(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let R=_.next;if(!R)return _=_.next=new wo,_.lmdbDb=i,_;_=R}while(!0)}else return new E_}o(Ir,"txnForContext");function Fc(K,_,R){if(!K)return;let O=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let y=tr,N=O;for(let b=0,P=_.length;b<P;b++){let B=_[b],C=y?.[B];N=C&&N?C(N,R,K):N?.[B],K=null,y=C?.definition?.tableClass?.propertyResolvers}return N}let D=tr[_];return D?D(O,R,K):O[_]}o(Fc,"getAttributeValue");function Jf(K,_,R,O,D){let y=D?.length,N={transaction:O,lazy:y>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},b;function P(B,C){let H=B?.value;if(!H)return Ja.SKIP;for(let U=0;U<y;U++)if(!b?.includes(U)&&!D[U](H,B))return Ja.SKIP;return C!==void 0&&(B.key=C),B}if(o(P,"processEntry"),y>0||!K.hasEntries){let B=K.map(C=>{if(b=null,typeof C=="object"&&C?.key!==void 0)return y>0?P(C):C;if(C==null)return Ja.SKIP;for(let H=0;H<y;H++){let J=D[H].idFilter;if(J){if(!J(C))return Ja.SKIP;b||(b=[]),b.push(H)}}return xc(C,R,N,!1,P)});return Array.isArray(K)&&(B=B.filter(C=>C!==Ja.SKIP)),B.hasEntries=!0,B}return K}o(Jf,"transformToEntries");function ba(K,_,R=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&R!==void 0){let O=server.replication?.exportIdMapping(l),D=_.localTime,y=D&&l.get(D);if(y){let N,b,P=Bt(y);for(let B in O)O[B]===R&&(N=B),O[B]===P.nodeId&&(b=B);if(N>b)return 1;if(N===b)return 0}}return-1}return 1}o(ba,"precedesExistingVersion");async function Xf(K,_,R){let O=_?.metadataFlags,D=_?.version,y,N;if(!i.attemptLock(K,D,()=>{clearTimeout(N);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(Mn|Ba)?y(Xf(K,i.getEntry(K),R)):y(C)}))return new Promise(C=>{y=C,N=setTimeout(()=>{i.unlock(K,D)},poe)});let b=_?.value,P={requestContext:R,replacingRecord:b,replacingEntry:_,replacingVersion:D,noCacheStore:!1,source:null,resourceCache:R?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},B=R?.responseHeaders;return new Promise((C,H)=>{let U;Si(bt(P,async J=>{let j=performance.now(),G,Se,me;try{for(let se of De.sources)if(se.get&&(!se.get.reliesOnPrototype||se.prototype.get)){if(se.available?.(_)===!1)continue;if(P.source=se,G=await se.get(K,P),G)break}me=O&Mn;let z=P.lastModified||me&&D;Se=me||z>D||!b,z||(z=(0,Lp.getNextMonotonicTime)());let oe=performance.now()-j;if(Xe(oe,"cache-resolution",s,null,"success"),B&&Op(B,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),J.timestamp=z,h&&P.expiresAt==null&&(P.expiresAt=Date.now()+h),G){if(typeof G!="object")throw new Error("Only objects can be cached and stored in tables");if(G.status>0&&G.headers)if(G.status>=300)if(G.status===304)G=b,z=D;else throw new mt.ServerError(G.body||"Error from source",G.status);else G=G.body;typeof G.toJSON=="function"&&(G=G.toJSON()),t&&G[t]!==K&&(G[t]=K)}U=!0,C({key:K,version:z,value:G})}catch(z){z.message+=` while resolving record ${K} for ${s}`,b&&((z.code==="ECONNRESET"||z.code==="ECONNREFUSED"||z.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(z.statusCode===500||z.statusCode===502||z.statusCode===503||z.statusCode===504))?(C({key:K,version:D,value:b}),xe.default.trace?.(z.message,"(returned stale record)")):H(z);let oe=performance.now()-j;Xe(oe,"cache-resolution",s,null,"fail"),B&&Op(B,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),P.transaction.abort();return}if(R?.noCacheStore||P.noCacheStore){P.transaction.abort();return}Ir(P).addWrite({key:K,store:i,entry:_,nodeName:"source",commit:o((z,oe)=>{if(oe?.version!==D)return;let se=Ao(K,b,G);if(G){He.put?.(P,K,G),oe&&(R.previousResidency=De.getResidencyRecord(oe.residencyId));let pe,we=!1,fe,Me=kc(De.getResidency(G,R));if(Me){if(!Me.includes(server.hostname))if(pe=G,we=!0,De.getResidencyById)G=void 0;else{G=null;for(let at in r)G||(G={}),G[at]=pe[at]}fe=Hc(Me)}xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),T(K,G,oe,z,we?Mn:0,g&&(Se||we)||null,{user:P?.user,expiresAt:P.expiresAt,residencyId:fe,tableToTrack:s},"put",!!me,pe)}else oe&&(He.delete?.(P,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),g||A?T(K,null,oe,z,0,g&&Se||null,{user:P?.user,tableToTrack:s},"delete",!!me):ol(i,oe,D))},"commit")})}),()=>{i.unlock(K,D)},J=>{i.unlock(K,D),U&&xe.default.error?.("Error committing cache update",J)})})}o(Xf,"getFromSource");function Ia(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new mt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new mt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Ia,"checkContextPermissions");function wa(K){let _=!1;if(K&&(K-Ar>1&&(_=!0),Ar=K),!(Ge===er&&!_)&&(er=Ge,(0,wl.getWorkerIndex)()===(0,wl.getWorkerCount)()-1))return Gt&&clearTimeout(Gt),Ge?new Promise(R=>{let O=new Date;O.setMonth(0),O.setDate(1),O.setHours(0),O.setMinutes(0),O.setSeconds(0);let D=Ge/(1+Ar),y=_?Date.now():Math.ceil((Date.now()-O.getTime())/D)*D+O.getTime(),N=o(b=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(b)}`),Gt=setTimeout(()=>te=te.then(async()=>{if(N(Math.max(b+Ge,Date.now())),i.rootStore.status!=="open"){clearTimeout(Gt);return}let P=50,B=new Array(P),C=0,H=Math.pow(Ar,8)*(Nl.get(x.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),U=E/Math.pow(Math.max(Ar,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${H}, adjusted eviction ${U}ms`);function J(j,G,Se,me){let Oe=j+U-Date.now();if(Oe<0)return!0;if(Ar){let z=i.lastSize;return Se&Dn&&Lu(me,oe=>{oe.size&&(z+=oe.size)}),xe.default.trace?.(`shouldEvict adjusted ${Oe} ${z}, ${Oe*(j-G)/z} < ${H}`),Oe*(j-G)/z<H}return!1}o(J,"shouldEvict");try{let j=0;for(let G of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Se,value:me,version:Oe,expiresAt:z,metadataFlags:oe}=G,se;me===null&&!g&&Oe+moe<Date.now()?se=ol(i,G,Oe):z!=null&&J(z,Oe,oe,me)&&(se=De.evict(Se,me,Oe),j++),se&&(await B[C],B[C]=se.catch(pe=>{xe.default.error?.("Cleanup error",pe)}),++C>=P&&(C=0)),await Qa()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${j} entries`)}catch(j){xe.default.warn?.(`Error in cleanup scan for ${s}:`,j)}R(void 0),Ar=0}),Math.min(b-Date.now(),2147483647)).unref()},"startNextTimer");N(y)}):void 0}o(wa,"scheduleCleanup");function WE(){Y=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(WE,"addDeleteRemoval");function Zf(){(0,wl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Uc){Uc=!0;try{let K=X.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${X} must be indexed`);for(let R of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let O of _.getValues(R)){let D=i.getEntry(O);D?.value?D.value[K]<Date.now()&&De.evict(O,D.value,D.version):i.ifVersion(O,D?.version,()=>_.remove(R,O))}await Qa()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{Uc=!1}}},foe).unref()}o(Zf,"runRecordExpirationEviction");function kc(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return xe.default.trace?.(`Shard ${K} mapped to ${_.map(R=>R.name).join(", ")}`),_.map(R=>R.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`)}}o(kc,"residencyFromFunction");function Hc(K){if(K){let _=K.join(","),R=d.get([Symbol.for("residency_by_set"),_]);return R||(d.put([Symbol.for("residency_by_set"),_],R=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),R],K),R)}}o(Hc,"getResidencyId")}function Jw(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 iG(){}function zg(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 Wg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Wg(+e);case"Float":return e==="null"?null:Wg(+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;goe.test(e)||(e+="Z");let n=new Date(e);return Wg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,jg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Wg(e){if(isNaN(e))throw new SyntaxError;return e}function oG(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 Si(e,t,r){return e?.then?e.then(t,r):t(e)}function aG(e){return e!=null}function Hs(e){try{return JSON.stringify(e)}catch{return e}}function Soe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ja,Lp,cG,lG,Nl,mt,Dp,Mp,xe,Cl,wl,jg,Xw,uG,coe,loe,uoe,doe,foe,moe,tG,poe,rG,hoe,Mn,Ba,Eoe,nG,sG,_oe,mve,goe,Qa,rg=ie(()=>{q();Ja=require("lmdb"),Lp=I(On()),cG=I(require("lodash")),lG=I(Sm());Fa();ym();Nl=I(le());zb();mt=I(Ee()),Dp=I(Go()),Mp=I(ts());Pe();tg();xe=I(Os());rw();La();Cl=require("ordered-binary"),wl=I(nt());No();jg=I(ce());nl();vs();S_();Pp();Xw=I(require("node:fs"));Ls();x_();uG=I(Q()),{sortBy:coe}=cG.default,{validateAttribute:loe}=lG.default,uoe=new Uint8Array(9);uoe[8]=192;doe=1/0,foe=6e4,moe=864e5;Nl.initSync();tG=Nl.get(x.STORAGE_PREFETCHWRITES),poe=1e4,rG=1,hoe=2,Mn=1,Ba=8,Eoe=Buffer.allocUnsafeSlow(8192),nG=1978,sG=100,_oe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},mve=(0,jg.convertToMS)(Nl.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Qg,"makeTable");o(Jw,"attributesAsObject");o(iG,"noop");goe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(zg,"coerceType");o(Wg,"rejectNaN");o(oG,"isDescendantId");Qa=o(()=>new Promise(setImmediate),"rest");o(Si,"when");o(aG,"exists");o(Hs,"stringify");o(Soe,"hasOtherProcesses")});function Jg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function Xg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var fG=ie(()=>{o(Jg,"euclideanDistance");o(Xg,"cosineDistance")});var mG,pG,fd,eo,dd,Toe,yoe,Zg,hG=ie(()=>{fG();mG=require("msgpackr"),pG=I(Os()),fd=I(Ee()),eo=(0,pG.loggerWithTag)("HNSW"),dd=Symbol.for("entryPoint"),Toe=Symbol.for("key"),yoe=10,Zg=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=mG.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Jg:Xg,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[Toe,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(dd);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let A=0;A<=E;A++)g[A]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);eo.debug?.("setting entry point to",i),this.indexStore.put(dd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),yoe),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);eo.debug?.("setting entry point to",i),this.indexStore.put(dd,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&eo.info?.("should not have zero connections for",l);let A=h[E];for(let S=0;S<g.length;S++){let{id:T,distance:w,node:L}=g[S];if(T===i)continue;let k=[];if(this.optimizeRouting){let V=!1,X=L[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let de=0;de<X.length;de++){let{id:ne,distance:ae}=X[de],ye=1+this.optimizeRouting*(1+.5*de/this.M);for(let Ae=0;Ae<A.length;Ae++){let{id:He,distance:Ge}=A[Ae];if(He===ne){w*Y>Ge+ae?V=!0:ae*ye>w+Ge&&(k.push({fromId:He,toId:T}),k.push({fromId:T,toId:He}));break}}if(V)break}if(V)continue}else if(S>=(E>0?this.M:this.M<<1))continue;A.push({id:T,distance:w});for(let{fromId:V,toId:X}of k){let Y=d(V);Y||(Y=d(V,this.indexStore.get(V)));for(let de=0;de<Y[E].length;de++)if(Y[E][de].id===X){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(de,1);break}}let te=c[E],F=te?.find(({id:V})=>V===T);if(F){let V=te?.indexOf(F);te.copied||(te=[...te],te.copied=!0,c[E]=te),te.splice(V,1)}else this.addConnection(T,d(T,L),i,E,w,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(dd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);eo.debug?.("setting entry point to",l),this.indexStore.put(dd,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(eo.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(dd);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new fd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new fd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=Xg;else if(s==="euclidean")c=Jg;else{if(s)throw new fd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new fd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new fd.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){eo.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||eo.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){eo.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&eo.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?eo.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?Jg:Xg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var Zw,EG=ie(()=>{hG();Zw={HNSW:Zg}});var pt={};be(pt,{database:()=>ed,databaseEnvs:()=>Wo,databases:()=>ve,dropDatabase:()=>aw,dropTableMeta:()=>Noe,getDatabases:()=>ct,getDefaultCompression:()=>oS,getTables:()=>Aoe,onRemovedDB:()=>Hp,onUpdatedTable:()=>Ol,readMetaDb:()=>vp,resetDatabases:()=>_d,table:()=>Je,tables:()=>pn});function kp(e,t){let r=sS.OpenDBIObject??sS.default.OpenDBIObject;return new r(e,t)}function Aoe(){return nS||ct(),pn||{}}function ct(){if(nS)return ve;nS=!0,hd=new Map;let e=(0,Yt.getHdbBasePath)()&&(0,Ft.join)((0,Yt.getHdbBasePath)(),qc),t=(0,Yt.get)(x.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Yt.get)(x.STORAGE_PATH)||e&&((0,cs.existsSync)(e)?e:(0,Ft.join)((0,Yt.getHdbBasePath)(),ZE)),!e)return;if((0,cs.existsSync)(e))for(let n of(0,cs.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ft.basename)(n.name,".mdb");n.isFile()&&(0,Ft.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&vp((0,Ft.join)(e,n.name),null,s)}if((0,cs.existsSync)((0,pd.getBaseSchemaPath)())){for(let n of(0,cs.readdirSync)((0,pd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Ft.join)((0,pd.getBaseSchemaPath)(),n.name),i=(0,Ft.join)((0,pd.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,cs.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,Ft.extname)(a.name).toLowerCase()===".mdb"){let c=(0,Ft.join)(i,a.name);vp((0,Ft.join)(s,a.name),(0,Ft.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,cs.existsSync)(i))for(let c of(0,cs.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Ft.extname)(c.name).toLowerCase()===".mdb"&&vp((0,Ft.join)(i,c.name),(0,Ft.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,Ft.join)(l.path,(0,Ft.basename)(c+".mdb"));(0,cs.existsSync)(u)&&vp(u,c,n,null,!0)}}for(let n in ve){let s=hd.get(n);if(s){let i=ve[n];n.includes("delete")&&Cr.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(Cr.trace(`delete table class ${a}`),delete i[a])}else if(delete ve[n],n==="data"){for(let i in pn)delete pn[i];delete pn[iS]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"];if((0,Yt.get)(x.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(ve.system?.hdb_analytics?.enableAuditing(),ve.system?.hdb_analytics_hostname?.enableAuditing()),ve.system)for(let n of r)ve.system[n]&&(ve.system[n].replicate=!1);return hd=null,ve}function _d(){nS=!1;for(let[,e]of Wo)e.needsDeletion=!0;ct();for(let[e,t]of Wo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Wo.delete(e);let r=ve[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete ve[t.databaseName],xp.forEach(i=>i(t.databaseName));break}}return ve}function vp(e,t,r=rN,n,s){let i=new eN.default(e,!1);try{let a=Wo.get(e);a?a.needsDeletion=!1:(a=(0,Ed.open)(i),Wo.set(e,a));let c=new kp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(eS.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,cs.existsSync)(n)&&(i.path=n,u=(0,Ed.open)(i),u.isLegacy=!0):u=k_(a));let d=yG(r),f=d[iS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let A=m.get(E);A||m.set(E,A={attributes:[]}),(g==null||h.is_hash_attribute)&&(A.primary=h),g!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let ae of E)if(ae.is_hash_attribute||ae.isPrimaryKey){g=ae;break}if(!g){Cr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let A=d[p],S={},T=[],w,L,k=typeof g.audit=="boolean"?g.audit:(0,Yt.get)(x.LOGGING_AUDITLOG),te=g.trackDeletes,F=g.expiration,V=g.eviction,X=g.sealed,Y=g.splitSegments,de=g.replicate;if(A)S=A.indices,T=A.attributes,A.schemaVersion++;else{w=g.tableId,w?w>=(l.get(md)||0)&&(l.putSync(md,w+1),Cr.info(`Updating next table id (it was out of sync) to ${w+1} for ${p}`)):(g.tableId=w=l.get(md),w||(w=1),Cr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(md,w+1),l.putSync(g.key,g));let ae=new kp(!g.is_hash_attribute,g.is_hash_attribute);if(ae.compression=g.compression,ae.compression){let ye=(0,Yt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||TG;ae.compression.threshold=ye}L=J_(a.openDB(g.key,ae),a),a.databaseName=r,L.tableId=w}let ne;for(let ae of E){ae.attribute=ae.name;try{if(!ae.is_hash_attribute&&(ae.indexed||ae.attribute&&!ae.name)){if(!S[ae.name]){let Ae=AG(ae.key,a,ae);S[ae.name]=Ae,S[ae.name].indexNulls=ae.indexNulls}let ye=T.find(Ae=>Ae.name===ae.name);ye?T.splice(T.indexOf(ye),1,ae):T.push(ae),ne=!0}}catch(ye){Cr.error("Error trying to update attribute",ae,T,S,ye)}}for(let ae of T)if(!E.find(Ae=>Ae.name===ae.name)){if(ae.is_hash_attribute){Cr.error("Unable to remove existing primary key attribute",ae);continue}ae.indexed&&(T.splice(T.indexOf(ae),1),ne=!0)}if(A)ne&&(A.schemaVersion++,A.updatedAttributes());else{A=RG(d,p,Qg({primaryStore:L,auditStore:u,audit:k,sealed:X,splitSegments:Y,replicate:de,expirationMS:F&&F*1e3,evictionMS:V&&V*1e3,trackDeletes:te,tableName:p,tableId:w,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let ae of Up)ae(A)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function yG(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=pn:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),hd&&!hd.has(e)){let r=new Set;t[iS]=r,hd.set(e,r)}return t}function RG(e,t,r){return e[t]=r,r}function ed({database:e,table:t}){e||(e=rN),ct();let r=yG(e),n=(0,Ft.join)((0,Yt.getHdbBasePath)(),qc),s=(0,Yt.get)(x.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Yt.get)(x.STORAGE_PATH)||((0,cs.existsSync)(n)?n:(0,Ft.join)((0,Yt.getHdbBasePath)(),ZE));let a=(0,Ft.join)(n,(i?t:e)+".mdb"),c=Wo.get(a);if(!c||c.status==="closed"){let l=new eN.default(a,!1);c=(0,Ed.open)(l),Wo.set(a,c)}return c.auditStore||(c.auditStore=k_(c)),c}async function aw(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Wo.delete(r.path),r.status==="open"&&(await r.close(),await Bp.remove(r.path));if(r||(r=ed({database:e,table:null}),r.status==="open"&&(await r.close(),await Bp.remove(r.path))),e==="data"){for(let n in pn)delete pn[n];delete pn[iS]}delete ve[e],xp.forEach(n=>n(e)),await ob(r)}function AG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&Zw[r.indexed.type]?.useObjectStore,s=new kp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=Zw[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Cr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Je(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=rN);let h=ed({database:r,table:t}),E=ve[r];Cr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let A,S,T;m==null&&(m=!0);let w=new kp(!1);for(let Y of a)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let L,k;if(g){if(A=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let Y=h.auditStore;S=a.find(ye=>ye.isPrimaryKey)||{},A=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=oS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Yt.get)(x.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Cr.trace(`${t} table loading, opening primary store`);let de=new kp(!1,!0);de.compression=S.compression;let ne=t+"/";if(T=h.dbisDb=h.openDB(eS.INTERNAL_DBIS_NAME,w),X(),T.get(ne))return k&&k(),_d(),Je(e);let ae=J_(h.openDB(ne,de),h);h.databaseName=r,ae.tableId=T.get(md),Cr.trace(`Assigning new table id ${ae.tableId} for ${t}`),ae.tableId||(ae.tableId=1),T.put(md,ae.tableId+1),S.tableId=ae.tableId,g=RG(E,t,Qg({primaryStore:ae,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:A,tableName:t,tableId:ae.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:T})),g.schemaVersion=1,L=!0,T.put(ne,S)}let te=g.indices;T=T||(h.dbisDb=h.openDB(eS.INTERNAL_DBIS_NAME,w)),g.dbisDB=T;let F=[];for(let{key:Y,value:de}of T.getRange({start:!0})){let[ne,ae]=Y.toString().split("/");if(ae===""&&(ae=de.name),ae){if(ne!==t)continue}else continue;let ye=a.find(He=>He.name===ae),Ae=!ye?.indexed&&de.indexed&&!de.isPrimaryKey;if((!ye||Ae)&&(X(),L=!0,ye||T.remove(Y),Ae)){let He=g.indices[ne];He&&F.push(He)}}let V=[];try{for(let Y of a||[]){if((Y.relationship||Y.computed)&&(L=!0,Y.relationship))continue;let de=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:de,configurable:!0});let ne=T.get(de);if(Y.isPrimaryKey){if(ne=ne||T.get(de=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ne.expiration||void 0)||(+s||void 0)!==(+ne.eviction||void 0)||Y.type!==ne.type){let ye={...ne};typeof c=="boolean"&&(c&&g.enableAuditing(c),ye.audit=c),n&&(ye.expiration=+n),s&&(ye.eviction=+s),l!==void 0&&(ye.sealed=l),d!==void 0&&(ye.replicate=d),Y.type&&(ye.type=Y.type),L=!0,X(),T.put(de,ye)}continue}ne?.attribute&&!ne.name&&(ne.indexed=!0);let ae=!ne||ne.type!==Y.type||JSON.stringify(ne.indexed)!==JSON.stringify(Y.indexed)||ne.nullable!==Y.nullable||ne.version!==Y.version||JSON.stringify(ne.properties)!==JSON.stringify(Y.properties)||JSON.stringify(ne.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let ye=AG(de,h,Y);(ae||ne.indexingPID&&ne.indexingPID!==process.pid||ne.restartNumber<Fp.workerData?.restartNumber)&&(L=!0,X(),ne=T.get(de),(ae||ne.indexingPID&&ne.indexingPID!==process.pid||ne.restartNumber<Fp.workerData?.restartNumber)&&(L=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=ne?.lastIndexedKey??void 0,Y.indexingPID=process.pid,ye.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:ye}),V.push(Y))),T.put(de,Y)),ne?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),ye.indexNulls=Y.indexNulls,te[Y.name]=ye}else ae&&(L=!0,X(),T.put(de,Y))}}finally{k&&k()}if(L&&(g.schemaVersion++,g.updatedAttributes()),Cr.trace(`${t} table loading, running index`),V.length>0||F.length>0?g.indexingOperation=woe(g,V,F):L&&tS.signalSchemaChange(new rS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,L)for(let Y of Up)Y(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Cr.trace(`${t} table loaded`),g;function X(){k||h.transactionSync(()=>({then(Y){k=Y}}))}o(X,"startTxn")}async function woe(e,t,r){try{Cr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await tS.signalSchemaChange(new rS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,Ed.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,A=E.dbi;try{let S=E.resolve,T=m&&(S?S(m):m[g]);if(A.customIndex){A.customIndex.index(f,T);continue}let w=(0,_G.getIndexedValues)(T);if(w)for(let L=0,k=w.length;L<k;L++)A.put(w[L],f)}catch(S){a[g]||(a[g]=!0,Cr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Cr.error(h)}),Fp.workerData&&Fp.workerData.restartNumber!==SG.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>boe?await s:d>Ioe&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await tS.signalSchemaChange(new rS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Cr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Cr.error("Error in indexing",n)}}function Noe({table:e,database:t}){let r=ed({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 Ol(e){return Up.push(e),{remove(){let t=Up.indexOf(e);t>-1&&Up.splice(t,1)}}}function Hp(e){return xp.push(e),{remove(){let t=xp.indexOf(e);t>-1&&xp.splice(t,1)}}}function oS(){let e=(0,Yt.get)(x.STORAGE_COMPRESSION),t=(0,Yt.get)(x.STORAGE_COMPRESSION_DICTIONARY),r=(0,Yt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||TG,n={startingOffset:32};return t&&(n.dictionary=Bp.readFileSync(t)),r&&(n.threshold=r),e&&n}var Yt,eS,Ed,Ft,cs,pd,eN,Bp,tN,_G,tS,rS,Fp,gG,SG,sS,Roe,Cr,rN,iS,TG,pn,ve,md,Up,xp,nS,Wo,hd,boe,Ioe,Pe=ie(()=>{Yt=I(le()),eS=I(Vt()),Ed=require("lmdb"),Ft=require("path"),cs=require("fs"),pd=I(At());rg();eN=I(jm());q();Bp=I(require("fs-extra")),tN=I(li()),_G=I(On()),tS=I(Go()),rS=I(ts()),Fp=require("worker_threads"),gG=I(Q()),SG=I(nt());No();nl();Ls();EG();sS=I(zm()),{forComponent:Roe}=gG.default;o(kp,"OpenDBIObject");Cr=Roe("storage"),rN="data",iS=Symbol("defined-tables"),TG=((0,Yt.get)(x.STORAGE_PAGESIZE)||4096)-60;(0,Yt.initSync)();pn=Object.create(null),ve=Object.create(null);(0,tN._assignPackageExport)("databases",ve);(0,tN._assignPackageExport)("tables",pn);md=Symbol.for("next-table-id"),Up=[],xp=[],Wo=new Map;o(Aoe,"getTables");o(ct,"getDatabases");o(_d,"resetDatabases");o(vp,"readMetaDb");o(yG,"ensureDB");o(RG,"setTable");o(ed,"database");o(aw,"dropDatabase");o(AG,"openIndex");o(Je,"table");boe=1e3,Ioe=10;o(woe,"runIndexing");o(Noe,"dropTableMeta");o(Ol,"onUpdatedTable");o(Hp,"onRemovedDB");o(oS,"getDefaultCompression")});var iN={};be(iN,{loadGQLSchema:()=>Poe,start:()=>sN,startOnMainThread:()=>Ooe});function sN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,p=[],h;for(let A of f.definitions)switch(A.kind){case l.OBJECT_TYPE_DEFINITION:let k=function(F){if(F.kind==="NonNullType"){let Y=k(F.type);return Y.nullable=!1,Y}if(F.kind==="ListType")return{type:"array",elements:k(F.type)};let X={type:F.name?.value};return Object.defineProperty(X,"location",{value:F.loc.startToken}),X};o(k,"getProperty");let S=A.name.value,T=[],w={table:null,database:null,properties:T};m.set(S,w),i.allTypes.set(S,w);for(let F of A.directives){if(F.name.value==="table"){for(let X of F.arguments)w[X.name.value]=X.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=S),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,p.push(w)}if(F.name.value==="sealed"&&(w.sealed=!0),F.name.value==="splitSegments"&&(w.splitSegments=!0),F.name.value==="replicate"&&(w.replicate=!0),F.name.value==="export"){w.export=!0;for(let X of F.arguments)typeof w.export!="object"&&(w.export={}),w.export[X.name.value]=X.value.value}}let L=!1,te={};for(let F of A.fields){let V=k(F.type);V.name=F.name.value,T.push(V),te[V.name]=void 0;for(let X of F.directives){let Y=X.name.value;if(Y==="primaryKey")L?console.warn("Can not define two attributes as a primary key at",X.loc):(V.isPrimaryKey=!0,L=!0);else if(Y==="indexed"){let de={};for(let ne of X.arguments||[])de[ne.name.value]=ne.value.value;V.indexed=de}else if(Y==="computed"){for(let de of X.arguments||[])if(de.name.value==="from"){let ne=de.value.value;V.computed={from:g(ne,de,te)},V.version==null&&(V.version=ne)}else de.name.value==="version"&&(V.version=de.value.value);V.computed=V.computed||!0}else if(Y==="relationship"){let de={};for(let ne of X.arguments)de[ne.name.value]=ne.value.value;V.relationship=de}else if(Y==="createdTime")V.assignCreatedTime=!0;else if(Y==="updatedTime")V.assignUpdatedTime=!0;else if(Y==="expiresAt")V.expiresAt=!0;else if(Y==="allow"){let de=V.authorizedRoles=[];for(let ne of X.arguments)ne.name.value==="role"&&de.push(ne.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,X.loc)}}w.type=S,S==="Query"&&(h=w)}function E(A){let S=m.get(A.type);S?(Object.defineProperty(A,"properties",{value:S.properties}),Object.defineProperty(A,"definition",{value:S})):A.type==="array"?E(A.elements):Coe.includes(A.type)||(0,IG.getWorkerIndex)()===0&&console.error(`The type ${A.type} is unknown at line ${A.location.line}, column ${A.location.column}, in ${s}`)}o(E,"connectPropertyType");for(let A of m.values())for(let S of A.properties)E(S);for(let A of p)A.tableClass=e(A),A.export&&(A.export.name===""?i.set((0,nN.dirname)(n),A.tableClass):i.set((0,nN.dirname)(n)+"/"+(A.export.name||A.type),A.tableClass,A.export));function g(A,S,T){return new bG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${A}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(T)}o(g,"createComputedFrom")}}var nN,bG,IG,Coe,Ooe,Poe,wG=ie(()=>{nN=require("path"),bG=require("node:vm");Pe();IG=I(nt());ka();Coe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(sN,"start");Ooe=sN,Poe=o(e=>sN({ensureTable:Je}).handleFile(e,null,null,new Vu),"loadGQLSchema")});var aN={};be(aN,{start:()=>koe});function Loe(e){if(e.kind!==ke.Kind.OPERATION_DEFINITION&&e.kind!==ke.Kind.FRAGMENT_DEFINITION)throw new Hr(`Unexpected non-executable definition type ${e.kind}.`)}function NG(e){if(typeof e!="object"||e===null)throw new to("Request body must be an object.");if(!("query"in e))throw new to("Request body must contain a `query` field.");if(typeof e.query!="string")throw new to("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new to("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new to("Request body `operationName` field must be a string.")}function oN(e){return parseInt(e.value,10)}function OG(e){return parseFloat(e.value)}function PG(e,t,r){let n=r.get(e.name.value);return LG(n)?DG(n,t):{attribute:t,value:n}}function LG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function DG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],LG(n)?DG(n,t):{attribute:t,value:n}))}function Doe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case ke.Kind.NULL:return{attribute:t,value:null};case ke.Kind.INT:return{attribute:t,value:oN(e.value)};case ke.Kind.FLOAT:return{attribute:t,value:OG(e.value)};case ke.Kind.BOOLEAN:case ke.Kind.STRING:return{attribute:t,value:e.value.value};case ke.Kind.VARIABLE:return PG(e.value,t,r);case ke.Kind.OBJECT:return MG(e.value,t,r);case ke.Kind.LIST:case ke.Kind.ENUM:default:throw new Hr(`Value type, ${e.value.kind}, is not supported.`)}}function MG(e,t,r){return e.fields.flatMap(n=>Doe(n,t,r))}function Moe(e,t){switch(e.value.kind){case ke.Kind.NULL:return{attribute:e.name.value,value:null};case ke.Kind.INT:return{attribute:e.name.value,value:oN(e.value)};case ke.Kind.FLOAT:return{attribute:e.name.value,value:OG(e.value)};case ke.Kind.BOOLEAN:case ke.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case ke.Kind.VARIABLE:return PG(e.value,e.name.value,t);case ke.Kind.OBJECT:return MG(e.value,[e.name.value],t);case ke.Kind.LIST:case ke.Kind.ENUM:default:throw new Hr(`Argument type, ${e.value.kind}, is not supported.`)}}function voe(e,t){return e.flatMap(r=>Moe(r,t))}function aS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case ke.Kind.FIELD:return r;case ke.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Hr(`Fragment \`${n}\` not found.`);return aS(s.selectionSet,t)}case ke.Kind.INLINE_FRAGMENT:return aS(r.selectionSet,t)}})}function vG(e,t){return aS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:vG(r.selectionSet,t)}:r.name.value)}async function Uoe(e,t,r,n){let s=xs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Hr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:vG(e.selectionSet,r),conditions:voe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function UG(e){switch(e.kind){case ke.Kind.NULL:return null;case ke.Kind.INT:return oN(e);case ke.Kind.FLOAT:return parseFloat(e.value);case ke.Kind.STRING:case ke.Kind.BOOLEAN:return e.value;case ke.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:UG(r.value),...t}),{});case ke.Kind.LIST:case ke.Kind.ENUM:default:throw new Hr(`Value type, ${e.kind}, is not supported.`)}}function xoe(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=UG(n.defaultValue)),n.type.kind===ke.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Hr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Boe(e,t,r,n){if(e.operation===ke.OperationTypeNode.SUBSCRIPTION)throw new Hr("Subscriptions are not supported.");if(e.operation===ke.OperationTypeNode.MUTATION)throw new Hr("Mutations are not supported yet.");let s=xoe(e.variableDefinitions,t),i=await Promise.all(aS(e.selectionSet,r).map(c=>Uoe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function CG({query:e,variables:t={},operationName:r},n){let s=ke.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(Loe(u),u.kind===ke.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Hr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Hr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Hr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Hr(`Operation \`${r}\` not found.`);let l=await Boe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Foe(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 NG(r),CG(r,e)}case"POST":{let r=await Lo(e.headers.get("content-type"),!0)(e._nodeRequest);return NG(r),CG(r,e)}default:throw new to("Method Not Allowed",405,{Allow:"GET, POST"})}}function koe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Foe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof to)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof ke.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Hr)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 to)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof ke.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Hr)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 ke,Hr,to,xG=ie(()=>{ke=I(require("graphql"));Do();ka();o(Loe,"assertExecutableDefinitionNode");o(NG,"assertRequestParams");o(oN,"processIntValueNode");o(OG,"processFloatValueNode");o(PG,"processVariableNode");o(LG,"isObject");o(DG,"transformObjectIntoQueryCondition");o(Doe,"processObjectFieldNode");o(MG,"processObjectValueNode");o(Moe,"processArgumentNode");o(voe,"buildConditionsQuery");o(aS,"fillInFragments");o(vG,"buildSelectQuery");o(Uoe,"processFieldNode");o(UG,"processConstValueNode");o(xoe,"resolveVariables");o(Boe,"executeOperation");o(CG,"resolver");Hr=class extends Error{static{o(this,"GraphQLQueryingError")}},to=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Foe,"graphqlQueryingHandler");o(koe,"start")});var qG=v((Uve,GG)=>{var gd=require("validate.js"),FG=ft(),Sd=(q(),M(W)),{handleHDBError:Hoe,hdbErrors:Goe}=Ee(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:qoe}=Goe,cN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),$oe={STRUCTURE_USER:"structure_user"},BG=Object.values(Sd.ROLE_TYPES_ENUM),Voe="attribute_permissions",Koe="attribute_name",{PERMS_CRUD_ENUM:Td}=Sd,Yoe=[Voe,...Object.values(Td)],kG=[Td.READ,Td.INSERT,Td.UPDATE],Woe=[Koe,...kG];function zoe(e){let t=cN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,HG(e,t)}o(zoe,"addRoleValidation");function joe(e){let t=cN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,HG(e,t)}o(joe,"alterRoleValidation");function Qoe(e){let t=cN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,FG.validateObject(e,t)}o(Qoe,"dropRoleValidation");var Joe=["operation","role","id","permission","hdb_user","access"];function HG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Joe.includes(n[a])||s.push(n[a]);s.length>0&&mr(sr.INVALID_ROLE_JSON_KEYS(s),r);let i=FG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{mr(a,r)}),e.permission){let a=Xoe(e);a&&mr(a,r),BG.forEach(c=>{e.permission[c]&&!gd.isBoolean(e.permission[c])&&mr(sr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(BG.indexOf(a)<0){if(a===$oe.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||mr(sr.SCHEMA_NOT_FOUND(f),r)}continue}mr(sr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){mr(sr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){mr(sr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Yoe.includes(d)||mr(sr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(Td).forEach(d=>{gd.isDefined(u[d])?gd.isBoolean(u[d])||mr(sr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):mr(sr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){mr(sr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){mr(sr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!Woe.includes(E)&&E!==Td.DELETE&&mr(sr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!gd.isDefined(p.attribute_name)){mr(sr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){mr(sr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}kG.forEach(E=>{gd.isDefined(p[E])?gd.isBoolean(p[E])||mr(sr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):mr(sr.ATTR_PERM_MISSING(E,h),r,a,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;mr(sr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Zoe(r)}o(HG,"customValidate");GG.exports={addRoleValidation:zoe,alterRoleValidation:joe,dropRoleValidation:Qoe};function Xoe(e){let{operation:t,permission:r}=e;if(t===Sd.OPERATIONS_ENUM.ADD_ROLE||t===Sd.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return sr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?Sd.ROLE_TYPES_ENUM.SUPER_USER:Sd.ROLE_TYPES_ENUM.CLUSTER_USER;return sr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Xoe,"validateNoSUPerms");function Zoe(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:sr.ROLE_PERMS_ERROR,...e};return Hoe(new Error,n,qoe.BAD_REQUEST)}else return null}o(Zoe,"generateRolePermResponse");function mr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(mr,"addPermError")});var qp=v((Fve,YG)=>{"use strict";var $G=Fn(),VG=fn(),eae=yl(),uN=qG(),dN=Go(),Bve=require("uuid").v4,tae=require("util"),cS=(q(),M(W)),rae=ce(),fN=VG.searchByValue,nae=VG.searchByHash,sae=tae.promisify(eae.delete),iae=hi(),oae=Xu(),{hdbErrors:aae,handleHDBError:Pl}=Ee(),{HDB_ERROR_MSGS:KG,HTTP_STATUS_CODES:Gp}=aae,{UserEventMsg:mN}=ts();YG.exports={addRole:cae,alterRole:lae,dropRole:uae,listRoles:dae};function lN(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(lN,"scrubRoleDetails");async function cae(e){let t=uN.addRoleValidation(e);if(t)throw t;e=lN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await fN(r)||[])}catch(i){throw Pl(i)}if(n&&n.length>0)throw Pl(new Error,KG.ROLE_ALREADY_EXISTS(e.role),Gp.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 $G.insert(s),dN.signalUserChange(new mN(process.pid)),e=lN(e),e}o(cae,"addRole");async function lae(e){let t=uN.alterRoleValidation(e);if(t)throw t;e=lN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await $G.update(r)}catch(s){throw Pl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Pl(new Error,"Invalid role id",Gp.BAD_REQUEST,void 0,void 0,!0);return await dN.signalUserChange(new mN(process.pid)),e}o(lae,"alterRole");async function uae(e){let t=uN.dropRoleValidation(e);if(t)throw Pl(new Error,t,Gp.BAD_REQUEST,void 0,void 0,!0);let r=new oae(cS.SYSTEM_SCHEMA_NAME,cS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await nae(r));if(n.length===0)throw Pl(new Error,KG.ROLE_NOT_FOUND,Gp.NOT_FOUND,void 0,void 0,!0);let s=new iae(cS.SYSTEM_SCHEMA_NAME,cS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await fN(s)),a=!1;if(rae.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Pl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Gp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await sae(c),dN.signalUserChange(new mN(process.pid)),`${n[0].role} successfully deleted`}o(uae,"dropRole");async function dae(){return fN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(dae,"listRoles")});var pN={};be(pN,{start:()=>jG,startOnMainThread:()=>pae});function jG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,WG.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if(fae.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await mae(i)}}}async function mae(e){let t=ct().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,zG.isEqual)(i,e)?void 0:(e.id=r.id,(0,lS.alterRole)(e))}return(0,lS.addRole)(e)}var lS,WG,zG,fae,pae,QG=ie(()=>{Pe();lS=I(qp()),WG=require("yaml"),zG=require("lodash"),fae=["super_user","cluster_user","structure_user"];o(jG,"start");o(mae,"ensureRole");pae=jG});async function uS(e){let t=(0,ZG.pathToFileURL)(e).toString();if(hae)return $p||($p=Eae(gae)),(await(await $p).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Eae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),$p=new Compartment({console,Math,Date,fetch:_ae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,XG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Br,s.tables=pn,s.databases=ve}};let n=await(0,JG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),$p}function _ae(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 gae(){return{Resource:Br,tables:pn}}var JG,XG,ZG,hae,$p,hN=ie(()=>{Fa();Pe();JG=require("fs/promises"),XG=require("path"),ZG=require("url"),hae=!1;o(uS,"secureImport");o(Eae,"getCompartment");o(_ae,"secureOnlyFetch");o(gae,"getGlobalVars")});var EN={};be(EN,{handleApplication:()=>Sae,suppressHandleApplicationWarning:()=>Tae});function eq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Sae(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}uS(t.absolutePath).then(r=>{let n=(0,dS.dirname)(t.urlPath);eq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),tq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function tq(e,t,r){for(let n in t){let s=t[n],i=(0,dS.join)(r,n);eq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&tq(e,s,i)}}var dS,Tae,rq=ie(()=>{hN();dS=require("path");o(eq,"isResource");o(Sae,"handleApplication");o(tq,"recurseForResources");Tae=!0});var gN={};be(gN,{start:()=>yae});function yae({resources:e}){e.set("login",_N),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var _N,nq=ie(()=>{Fa();o(yae,"start");_N=class extends Br{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function lq(e){let t={openapi:Rae,info:{title:"HarperDB HTTP REST interface",version:aq.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}],n=o(s=>{if(s.type&&!t.components.schemas[s.type]){t.components.schemas[s.type]={};let i={},a=[];for(let c of s.properties)fS[c.type]?i[c.name]=new TN(fS[c.type],c.type):c.properties?(i[c.name]=new uq(c.type),n(c)):c.elements?.properties&&(i[c.name]=new Cae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new oq(i,!s.sealed,a)}},"includeDefinitionInSchema");for(let[,s]of e){if(!s.path||s.Resource.isError)continue;let{path:i}=s,a=i.split("/").pop(),{attributes:c,sealed:l}=s.Resource,{prototype:u,primaryKey:d="id"}=s.Resource;if(!c&&e.allTypes.has(s.path)){let te=e.allTypes.get(s.path);l=te.sealed,c=te.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:te,name:F,elements:V,relationship:X,definition:Y,nullable:de}of c){let ne=Y??V?.definition;ne&&n(ne),de===!1&&p.push(F),X?te==="array"?f[F]={type:"array",items:{$ref:Gs+V.type}}:f[F]={$ref:Gs+te}:ne?te==="array"?f[F]={type:"array",items:{$ref:Gs+ne.type}}:f[F]={$ref:Gs+ne.type}:te==="array"?V.type==="Any"?f[F]={type:"array",items:{format:V.type}}:f[F]={type:"array",items:new TN(fS[V.type],V.type)}:te==="Any"?f[F]={format:te}:f[F]=new TN(fS[te],te),m.push(new yN(F,"query",f[F]))}let h=Object.keys(f),E=new yN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new yN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new oq(f,!l,p);let A=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",T=typeof u.get=="function",w=typeof u.delete=="function",L=typeof u.patch=="function",k="/"+i+"/";A&&(t.paths[k]={},t.paths[k].post=new Aae(a,r,{200:new yd({$ref:Gs+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),T&&(t.paths[k]||(t.paths[k]={}),t.paths[k].get=new SN(m,r,{200:new yd({type:"array",items:{$ref:Gs+a}})},"search for records by the specified property name and value pairs")),t.paths[k]||(t.paths[k]={}),t.paths[k].options=new bae(m,r,{200:new Iae},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(t.paths[k]||(t.paths[k]={}),t.paths[k].delete=new iq(m,r,"delete all the records that match the provided query",{204:new sq})),k="/"+i+"/{"+d+"}",T&&(t.paths[k]={},t.paths[k].get=new SN([E],r,{200:new yd({$ref:Gs+a})},"retrieve a record by its primary key")),S&&(t.paths[k]||(t.paths[k]={}),t.paths[k].put=new wae([E],r,a,{200:new yd({$ref:Gs+a})},"create or update the record with the URL path that maps to the record's primary key")),L&&(t.paths[k]||(t.paths[k]={}),t.paths[k].patch=new Nae([E],r,a,{200:new yd({$ref:Gs+a})},"patch the record with the URL path that maps to the record's primary key")),w&&(t.paths[k]||(t.paths[k]={}),t.paths[k].delete=new iq([E],r,"delete a record with the given primary key",{204:new sq})),T&&g.schema.enum.length>0&&(k="/"+i+"/{"+d+"}.{property}",t.paths[k]={},t.paths[k].get=new SN([E,g],r,{200:new yd({enum:h})},"used to retrieve the specified property of the specified record"))}for(let[,s]of e.allTypes)n(s),s.sealed&&t.components.schemas[s.type].additionalProperties&&(t.components.schemas[s.type].additionalProperties=!1);return t}function Aae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Gs+e}}}},this.security=t,this.responses=r}function SN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function bae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Iae(){this.description=cq,this.headers={},this.content={}}function yd(e,t){this.description=cq,this.content={"application/json":{schema:e}},this.headers=t}function sq(){this.description="successfully processed request, no content returned to client"}function wae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Gs+r}}}},this.responses=n}function Nae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Gs+r}}}},this.responses=n}function iq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function oq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function TN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function uq(e){this.$ref=`#/components/schemas/${e}`}function Cae(e){this.type="array",this.items=new uq(e)}function yN(e,t,r){this.name=e,this.in=t,this.schema=r}var aq,Rae,fS,Gs,cq,dq=ie(()=>{aq=I(yt()),Rae="3.0.3",fS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Gs="#/components/schemas/",cq="successful operation";o(lq,"generateJsonApi");o(Aae,"Post");o(SN,"Get");o(bae,"Options");o(Iae,"ResponseOptions200");o(yd,"Response200");o(sq,"Response204");o(wae,"Put");o(Nae,"Patch");o(iq,"Delete");o(oq,"ResourceSchema");o(TN,"Type");o(uq,"Ref");o(Cae,"ArrayRef");o(yN,"Parameter")});var mq={};be(mq,{Request:()=>Xa,createReuseportFd:()=>mS});var fq,Xa,RN,AN,mS,Vp=ie(()=>{fq=require("os"),Xa=class{static{o(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new AN(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new RN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},RN=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},AN=class{static{o(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,fq.platform)()!="win32"&&(mS=require("node-unix-socket").createReuseportFd)});var hS={};be(hS,{parseHeaderValue:()=>IN,start:()=>Lae});async function Pae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&eg(e);let i=new ks;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==pq){let g=pS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new fi(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let A=IN(g);for(let S of A)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=IN(u).map(A=>(A.next?.name==="confirm"&&A.next.value>=0&&(e.replicatedConfirmation=+A.next.value),A.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Lo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Rd.ClientError(g,400)}if(e.authorize=!0,a===pq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return lq(pS);throw new Rd.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Rd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Rd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,bN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=eG(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=Nm(f.data,e,f)),f}else if(isFinite(p)){Oae[0]=p;let g=String.fromCharCode(34,(Xr[0]&63)+62,(Xr[0]>>6)+(Xr[1]<<2&63)+62,(Xr[1]>>4)+(Xr[2]<<4&63)+62,(Xr[2]>>2)+62,(Xr[3]&63)+62,(Xr[3]>>6)+(Xr[4]<<2&63)+62,(Xr[4]>>4)+(Xr[5]<<4&63)+62,(Xr[5]>>2)+62,(Xr[6]&63)+62,(Xr[6]>>6)+(Xr[7]<<2&63)+62,34),A=r["if-none-match"];A&&g==A?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),bN.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=Nm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?Ti.warn(a):Ti.info(a):Ti.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=Nm(a.contentType?a:_q(a),e,c),c}}function Lae(e){bN=e,e.includeExpensiveRecordCountEstimates&&(Xa.prototype.includeExpensiveRecordCountEstimates=!0),!hq&&(hq=!0,pS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Pae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Kp++;let s=new Jn;Eq||(Eq=!0,$m(l=>{Kp>0&&l.push({metric:"ws-connections",connections:Kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ti.warn(l)});let a;t.on("message",o(function(u){a||(a=Lo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);Xe(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{Kp--,jr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=pS.getMatch(l,"ws");if(jr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Xe(h=>({count:h.count,total:Kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new fi(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Po(p.value,r);t.send(h),Xe(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Ti.warn(l):Ti.info(l):Ti.error(l),t.close(Dae[l.statusCode]||1011,_q(l))}t.close()},e))}function IN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Ti,Rd,_q,Xr,Oae,bN,pq,hq,pS,Eq,Kp,Dae,gq=ie(()=>{Do();vs();Ti=I(Q()),Rd=I(Ee());tg();Ou();La();Pp();dq();Vp();ng();({errorToString:_q}=Ti),Xr=new Uint8Array(8),Oae=new Float64Array(Xr.buffer,0,1),bN={},pq="openapi";o(Pae,"http");Kp=0;o(Lae,"start");Dae={401:3e3,403:3003};o(IN,"parseHeaderValue")});var wN=v((uUe,Tq)=>{var{recordAction:ES,recordActionBinary:Sq}=(vs(),M(Y_)),Mae=require("fastify-plugin"),vae=200;Tq.exports=Mae(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),ES(a,"duration",u,f,d),Sq(s.raw.statusCode<400,"success",u,f,d),Sq(1,"response_"+s.raw.statusCode,u,f,d);let m=vae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{ES(performance.now()-c,"transfer",u,f,d),ES(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,ES(m,"bytes-sent",u,f,d));let p=a.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var Rq=v((dUe,yq)=>{var Uae=ft(),xae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};yq.exports=function(e){return Uae.validateObject(e,xae)}});var _S=v((fUe,Aq)=>{"use strict";var Bae=(q(),M(W)).OPERATIONS_ENUM,NN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Bae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Aq.exports=NN});var zp={};be(zp,{createTokens:()=>PN,getJWTRSAKeys:()=>RS,refreshOperationToken:()=>LN,validateOperationToken:()=>DN,validateRefreshToken:()=>AS});async function RS(){if(gS)return gS;try{let e=Yp.default.join(Wp.default.getHdbBasePath(),yA),t=await SS.default.readFile(Yp.default.join(e,om.JWT_PASSPHRASE_NAME),"utf8"),r=await SS.default.readFile(Yp.default.join(e,om.JWT_PRIVATE_KEY_NAME),"utf8");return gS={publicKey:await SS.default.readFile(Yp.default.join(e,om.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},gS}catch(e){throw yS.default.error(e),new yi.ClientError(bd.NO_ENCRYPTION_KEYS,Ad.INTERNAL_SERVER_ERROR)}}async function PN(e){let t=(0,CN.validateBySchema)(e,ro.default.object({username:ro.default.string().optional(),password:ro.default.string().optional(),role:ro.default.string().optional(),expires_in:ro.default.alternatives(ro.default.string(),ro.default.number()).optional()}));if(t)throw new yi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,ON.findAndValidateUser)(e.username,e.password,f)}catch(f){throw yS.default.error(f),new yi.ClientError(bd.INVALID_CREDENTIALS,Ad.UNAUTHORIZED)}if(!r)throw new yi.ClientError(bd.INVALID_CREDENTIALS,Ad.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let a=await RS(),c=await Id.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??Cq,algorithm:TS,subject:wd.OPERATION}),l=await Id.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Fae,algorithm:TS,subject:wd.REFRESH}),u=Sw(l,Fr.SHA256);if((await(0,bq.update)(new Iq.default(sm,Au.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new yi.ClientError(bd.REFRESH_TOKEN_SAVE_FAILED,Ad.INTERNAL_SERVER_ERROR);return wq.default.signalUserChange(new Nq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function LN(e){let t=(0,CN.validateBySchema)(e,ro.default.object({refresh_token:ro.default.string().required()}).required());if(t)throw new yi.ClientError(t.message);let{refresh_token:r}=e;await AS(r);let n=await RS(),s=await Id.default.decode(r);return{operation_token:await Id.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:Cq,algorithm:TS,subject:wd.OPERATION})}}async function DN(e){return Oq(e,wd.OPERATION)}async function AS(e){return Oq(e,wd.REFRESH)}async function Oq(e,t){try{let r=await RS(),n=await Id.default.verify(e,r.publicKey,{algorithms:TS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,ON.findAndValidateUser)(n.username,void 0,!1);if(t===wd.REFRESH&&!Tw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw yS.default.warn(r),r?.name==="TokenExpiredError"?new yi.ClientError(bd.TOKEN_EXPIRED,Ad.FORBIDDEN):new yi.ClientError(bd.INVALID_TOKEN,Ad.UNAUTHORIZED)}}var Id,SS,Yp,ro,CN,yi,yS,ON,bq,Iq,wq,Nq,Wp,Ad,bd,Cq,Fae,TS,wd,gS,Nd=ie(()=>{Id=I(require("jsonwebtoken")),SS=I(require("fs-extra")),Yp=I(require("node:path")),ro=I(require("joi")),CN=I(ft());q();yi=I(Ee()),yS=I(Q());Ug();ON=I(os()),bq=I(Fn()),Iq=I(_S()),wq=I(Go()),Nq=I(ts()),Wp=I(le()),{HTTP_STATUS_CODES:Ad,AUTHENTICATION_ERROR_MSGS:bd}=yi.hdbErrors;Wp.default.initSync();Cq=Wp.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Fae=Wp.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",TS="RS256",wd={OPERATION:"operation",REFRESH:"refresh"};o(RS,"getJWTRSAKeys");o(PN,"createTokens");o(LN,"refreshOperationToken");o(DN,"validateOperationToken");o(AS,"validateRefreshToken");o(Oq,"validateToken")});var MN=v((_Ue,Dq)=>{"use strict";var kae=Rq(),Cd=require("passport"),Hae=require("passport-local").Strategy,Gae=require("passport-http").BasicStrategy,qae=require("util"),$ae=os(),Lq=qae.callbackify($ae.findAndValidateUser),EUe=Yr(),Vae=(q(),M(W)),Pq=(Nd(),M(zp));Cd.use(new Hae(function(e,t,r){Lq(e,t,r)}));Cd.use(new Gae(function(e,t,r){Lq(e,t,r)}));Cd.serializeUser(function(e,t){t(null,e)});Cd.deserializeUser(function(e,t){t(null,e)});function Kae(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":Cd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Vae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Pq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):Pq.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Cd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(Kae,"authorize");function Yae(e,t){let r=kae(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(Yae,"checkPermissions");Dq.exports={authorize:Kae,checkPermissions:Yae}});var bS=v((SUe,Mq)=>{"use strict";var Wae=ss();Mq.exports={writeTransaction:zae};function zae(e,t,r){return Wae.writeTransaction(e,t,r)}o(zae,"writeTransaction")});var Bq=v((RUe,xq)=>{"use strict";var jae=fn(),Qae=ji(),vq=Q(),Jae=Fn(),yUe=bS(),Xae=require("clone"),UN=require("alasql"),Zae=Bg(),Uq=require("util"),ece=Uq.promisify(Qae.getTableSchema),tce=Uq.promisify(jae.search),rce=(q(),M(W)),vN=ce();Zae(UN);xq.exports={update:sce};var nce="There was a problem performing this update. Please check the logs and try again.";async function sce({statement:e,hdb_user:t}){let r=await ece(e.table.databaseid,e.table.tableid),n=ice(e.columns);vN.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=Xae(s),c=vN.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=UN.parse(l).statements[0],d=await tce(u),f=oce(n,d);return ace(a,f,t)}o(sce,"update");function ice(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=UN.compile(`SELECT ${r.expression.toString()} AS [${rce.FUNC_VAL}] FROM ?`)}),t}catch(t){throw vq.error(t),new Error(nce)}}o(ice,"createUpdateRecord");function oce(e,t){return vN.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(oce,"buildUpdateRecords");async function ace(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Jae.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){vq.error(`Error delete new_attributes from update response: ${i}`)}return s}o(ace,"updateRecords")});var kq=v((wUe,Fq)=>{var cce=require("alasql"),lce=fn(),uce=Q(),dce=ss(),BN=require("util"),xN=ce(),fce=(q(),M(W)),mce=ji(),bUe=bS(),IUe=Fn(),pce="record",hce="successfully deleted",Ece=BN.callbackify(Tce),_ce=BN.promisify(lce.search),gce=BN.promisify(mce.getTableSchema);Fq.exports={convertDelete:Ece};function Sce(e){return`${e.deleted_hashes.length} ${pce}${e.deleted_hashes.length===1?"":"s"} ${hce}`}o(Sce,"generateReturnMessage");async function Tce({statement:e,hdb_user:t}){let r=await gce(e.table.databaseid,e.table.tableid);xN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=xN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=cce.parse(a).statements[0],l={operation:fce.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await _ce(c);let u=await dce.deleteRecords(l);return xN.isEmptyOrZeroLength(u.message)&&(u.message=Sce(u)),delete u.txn_time,u}catch(u){throw uce.error(u),u.hdb_code?u.message:u}}o(Tce,"convertDelete")});var Dl=v((OUe,$q)=>{"use strict";var CUe=fn(),jp=Q(),{validateBySchema:Hq}=ft(),Ll=require("joi"),yce=Ji(),IS=ce(),{handleHDBError:wS,hdbErrors:Rce,ClientError:Gq}=Ee(),{HDB_ERROR_MSGS:NS,HTTP_STATUS_CODES:FN}=Rce,qq=le();qq.initSync();var{getDatabases:kN}=(Pe(),M(pt)),Ace=require("fs-extra"),bce=(q(),M(W));$q.exports={describeAll:Ice,describeTable:CS,describeSchema:wce};async function Ice(e={}){try{let t=IS.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=kN(),a={},c={},l=[],u=e?.exact_count;for(let f in i){a[f]=!0,!t&&!s&&!r&&(c[f]=e.hdb_user?.role?.permission[f]?.describe);let m=i[f];for(let p in m)try{let h;if(t||s||r)h=await CS({schema:f,table:p,exactCount:u});else if(n&&n[f].describe&&n[f].tables[p].describe){let E=n[f].tables[p].attribute_permissions;h=await CS({schema:f,table:p,exactCount:u},E)}h&&l.push(h)}catch(h){jp.error(h)}}let d={};for(let f in l)t||s||r?(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]):c[l[f].schema]&&(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]);for(let f in a)t||s||r?d[f]={}:c[f]&&(d[f]={});return d}catch(t){return jp.error("Got an error in describeAll"),jp.error(t),wS(new Error,NS.DESCRIBE_ALL_ERR)}}o(Ice,"describeAll");async function CS(e,t){IS.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=Hq(e,Ll.object({database:Ll.string(),table:Ll.string().required(),exact_count:Ll.boolean().strict()}));if(i)throw new Gq(i.message);let c=kN()[r];if(!c)throw wS(new Error,NS.SCHEMA_NOT_FOUND(e.schema),FN.NOT_FOUND);let l=c[n];if(!l)throw wS(new Error,NS.TABLE_NOT_FOUND(e.schema,e.table),FN.NOT_FOUND);function u(p){d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}o(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await Ace.stat(l.primaryStore.env.path)).size}catch(p){jp.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),qq.get(bce.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=yce.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){jp.warn(`unable to stat table dbi due to ${p}`)}return m}o(CS,"descTable");async function wce(e){IS.transformReq(e);let t=Hq(e,Ll.object({database:Ll.string(),exact_count:Ll.boolean().strict()}));if(t)throw new Gq(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=kN()[n];if(!i)throw wS(new Error,NS.SCHEMA_NOT_FOUND(e.schema),FN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),IS.isEmpty(l)||l.describe){let u=await CS({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(wce,"describeSchema")});var zq=v((LUe,Wq)=>{"use strict";var Nce=Dl(),{hdbErrors:Vq}=Ee(),{getDatabases:Kq}=(Pe(),M(pt));Wq.exports={checkSchemaExists:Yq,checkSchemaTableExists:Cce,schemaDescribe:Nce};async function Yq(e){if(!Kq()[e])return Vq.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Yq,"checkSchemaExists");async function Cce(e,t){let r=await Yq(e);if(r)return r;if(!Kq()[e][t])return Vq.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Cce,"checkSchemaTableExists")});var VN=v((xUe,o$)=>{"use strict";var{decode:Oce}=require("msgpackr"),{isMainThread:MUe,parentPort:vUe,threadId:UUe}=require("worker_threads"),LS=pr(),Od=Nt(),qN=(q(),M(W)),hn=Q(),GN=le(),Pce=(q(),M(W)),{onMessageByType:Lce}=nt(),Xq=Ji(),{recordAction:jq,recordActionBinary:Dce}=(vs(),M(Y_)),{publishToStream:Mce}=LS,{ConsumerEvents:Qq}=require("nats"),vce=fn(),{promisify:Uce}=require("util"),{decodeBlobsWithWrites:xce}=(Ls(),M(ab)),Zq=Uce(setTimeout),DS=1e4,MS,PS,Bce,Fce,e$,Qp=new Map,Pd=new Map;o$.exports={initialize:t$,ingestConsumer:$N,setSubscription:kce,setIgnoreOrigin:qce,getDatabaseSubscriptions:Gce,updateConsumer:r$};async function t$(){Lce(qN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await r$(n)}),e$=!0,hn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await LS.getNATSReferences();MS=e,PS=e.info.server_name,Bce=t,Fce=r}o(t$,"initialize");async function r$(e){if(e.status==="start"){let{js:t,jsm:r}=await n$(e.node_domain_name);$N(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Qp.get(e.stream_name+e.node_domain_name);t&&(hn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Qp.set(e.stream_name+e.node_domain_name,"close")),Pd.get(e.node_domain_name)==="failed"&&Pd.set(e.node_domain_name,"close")}}o(r$,"updateConsumer");var vS=new Map;function kce(e,t,r){let n=vS.get(e);n||vS.set(e,n=new Map),n.set(t,r),e$||t$().then(Hce)}o(kce,"setSubscription");async function Hce(){let e=await vce.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Od.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await n$(r),!n))break;let{schema:a,table:c}=i,l=Xq.createNatsTableStreamName(a,c);$N(l,n,s,r)}}}o(Hce,"accessConsumers");async function n$(e){let t,r,n=1;for(;!r;)try{t=await MS.jetstream({domain:e}),r=await MS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Pd.get(e)==="close")break;Pd.set(e,"failed"),n%10===1&&hn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<DS?n++*100:DS;await Zq(i)}return{js:t,jsm:r}}o(n$,"connectToRemoteJS");function Gce(){return vS}o(Gce,"getDatabaseSubscriptions");var s$;function qce(e){s$=e}o(qce,"setIgnoreOrigin");var i$=100,Jq=new Array(i$),OS=0;async function $N(e,t,r,n){let{connection:s}=await LS.getNATSReferences();MS=s,PS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,PS),hn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Pd.get(n)==="close")break;a%10===1&&hn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(hn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await LS.createConsumer(r,e,PS,new Date(Date.now()).toISOString()));let d=a++*100<DS?a++*100:DS;await Zq(d)}let c=!1,l;for(;!c;){if(Qp.get(e+n)==="close"||Pd.get(n)==="close"){Qp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:GN.get(qN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Qp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===Qq.ConsumerDeleted&&(await l.close(),c=!0),d.type===Qq.HeartbeatsMissed){let f=d.data;hn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(hn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await Jq[OS],Jq[OS]=$ce(d).catch(f=>{hn.error(f)}),++OS>=i$&&(OS=0)}catch(d){d.message==="consumer deleted"?(hn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):hn.error("Error consuming clustering ingest, restarting consumer",d)}}}o($N,"ingestConsumer");async function $ce(e){let t;await xce(()=>{t=Oce(e.data)}),jq(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),hn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=GN.get(qN.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Od.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Od.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Od.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!s$),Dce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Od.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;hn.trace("processing message:",a,c,u,(d?"records: "+d.map(L=>L?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),hn.trace(`messageProcessor nats msg id: ${e.headers.get(Od.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(L=>h=L),{timestamp:g,user:A,node_name:S}=m||{},T=vS.get(c)?.get(u);if(!T)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,T.send(t);else if(d.length===1&&!l)T.send({type:HN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:A,nodeName:S});else{let L=d.map((k,te)=>({type:HN(a),value:k,expiresAt:p,id:f?.[te],table:u}));for(;l;)L.push({type:HN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;T.send({type:"transaction",writes:L,table:u,timestamp:g,onCommit:h,user:A,nodeName:S})}GN.get(Pce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Mce(e.subject.split(".").slice(0,-1).join("."),Xq.createNatsTableStreamName(c,u),e.headers,e.data),await E;let w=Date.now()-g;g&&jq(w,"replication-latency",e.subject,a,"ingest")}catch(a){hn.error(a)}e.ack()}o($ce,"messageProcessor");function HN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(HN,"convertOperation")});var pr=v(($Ue,A$)=>{"use strict";var Gr=le();Gr.initSync();var Vce=require("fs-extra"),Kce=require("semver"),Zp=require("path"),{monotonicFactory:Yce}=require("ulidx"),c$=Yce(),Wce=require("util"),l$=require("child_process"),zce=Wce.promisify(l$.exec),jce=l$.spawn,Zr=Nt(),et=(q(),M(W)),{packageJson:Qce,PACKAGE_ROOT:Jce}=yt(),US=ce(),Ri=Q(),xS=Ji(),Xce=bS(),Jp=Rt(),{broadcast:Zce,onMessageByType:ele,getWorkerIndex:tle}=nt(),{isMainThread:u$}=require("worker_threads"),{Encoder:rle,decode:zN}=require("msgpackr"),d$=new rle,{isEmpty:xl}=US,f$=os(),FUe=48*36e11;u$&&ele(et.ITC_EVENT_TYPES.RESTART,()=>{En=void 0,Ul=void 0});var{connect:nle,StorageType:sle,RetentionPolicy:ile,AckPolicy:jN,DeliverPolicy:QN,DiscardPolicy:ole,NatsConnection:kUe,JetStreamManager:HUe,JetStreamClient:GUe,StringCodec:qUe,JSONCodec:ale,createInbox:JN,headers:cle,ErrorCode:a$}=require("nats"),{recordAction:lle}=(vs(),M(Y_)),{encodeBlobsAsBuffers:ule}=(Ls(),M(ab)),m$=ale(),dle="clustering",fle=Qce.engines[Zr.NATS_SERVER_NAME],mle=Zp.join(Jce,"dependencies"),WN=Zp.join(mle,`${process.platform}-${process.arch}`,Zr.NATS_BINARY_NAME),KN,YN,Xp,Ml,vl;A$.exports={runCommand:p$,checkNATSServerInstalled:ple,createConnection:XN,getConnection:eh,getJetStreamManager:th,getJetStream:E$,getNATSReferences:no,getServerList:Ele,createLocalStream:ZN,listStreams:_$,deleteLocalStream:_le,getServerConfig:Ld,listRemoteStreams:gle,viewStream:Sle,viewStreamIterator:Tle,publishToStream:yle,request:ble,reloadNATS:eC,reloadNATSHub:Ile,reloadNATSLeaf:wle,extractServerName:Ale,requestErrorHandler:Nle,createLocalTableStream:y$,createTableStreams:Ple,purgeTableStream:R$,purgeSchemaTableStreams:Lle,getStreamInfo:Dle,updateLocalStreams:vle,closeConnection:hle,getJsmServerName:BS,addNatsMsgHeader:g$,clearClientCache:h$,updateRemoteConsumer:Cle,createConsumer:S$,updateConsumerIterator:Ole};async function p$(e,t=void 0){let{stdout:r,stderr:n}=await zce(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
13
|
+
`},"serialize"),compressible:!1,q:.8});ln.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()}});HU={type:"application/json",serializeStream:Am,serialize:bm,deserialize:q8,q:.5};ln.set("*/*",HU);ln.set("",HU);o(q8,"tryJSONParse");o(wm,"registerContentHandlers");$8=(0,FU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=A_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(A_,"findBestSerializer");MU=QA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);o(Nm,"serialize");o(Po,"serializeMessage");o(eb,"asyncSerialization");o(tb,"hasAsyncSerialization");o(V8,"streamToBuffer");K8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(Y8,"isBufferEncoding");o(W8,"parseContentType");o(Lo,"getDeserializer");o(z8,"deserializerUnknownType");o(j8,"transformIterable");o(R_,"toCsvStream")});var ab={};be(ab,{Blob:()=>Ps,blobsWereEncoded:()=>Qc,databasePaths:()=>nb,decodeBlobsWithWrites:()=>D_,decodeFromDatabase:()=>Jc,decodeWithBlobCallback:()=>Dm,deleteBlob:()=>O_,deleteBlobsInObject:()=>Da,deleteRootBlobPathsForDB:()=>ob,encodeBlobsAsBuffers:()=>iZ,encodeBlobsWithFilePath:()=>L_,findBlobsInObject:()=>Lu,getFileId:()=>P_,getFilePathForBlob:()=>QU,getRootBlobPathsForDB:()=>Lm,setDeletionDelay:()=>Z8});function WU(){}function O_(e){let t=QU(e);t&&setTimeout(()=>{(0,rt.unlink)(t,r=>{r&&Mo.default.debug?.("Error trying to remove blob file",r)})},zU)}function Z8(e){zU=e}function jU(e){let t=Ln.get(e);if(!t)t={storageIndex:0,fileId:null,store:Dn},Ln.set(e,t);else{if(t.fileId)return t;t.store=Dn}return tZ(t),t.source?rb(e,t.source,t):t.contentBuffer?eZ(e,t):rb(e,Om.Readable.from(e.stream()),t),t}function rb(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,rt.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.write(Buffer.concat([h(BigInt(g.length)+0xff000000000000n),g])),E(t.errored);return}let m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;a?(m||f.write(J8),p=(0,N_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(Q8),t.pipe(f)),t.on("error",E);function h(g){let A=BigInt(g),S=new Uint8Array(Nr),T=new DataView(S.buffer);return A|=BigInt(a?ib:YU)<<48n,T.setBigInt64(0,A),S}o(h,"createHeader");function E(g){i.unlock(d,0);let A=f.fd;g?(A&&(0,rt.close)(A),u(g)):c?(0,rt.fdatasync)(A,S=>{S&&u(S),l(),(0,rt.close)(A)}):(l(),(0,rt.close)(A))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-Nr;e.size=g,(0,rt.write)(f.fd,h(g),0,Nr,0,E)}})}),e}function P_(e){return Ln.get(e)?.fileId}function QU(e){let t=Ln.get(e);return t?.fileId&&Pm(t)}function Lm(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=nb.get(e);if(!t){if(!e.databaseName)return Mo.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,C_.get)(x.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Uo.join)(n,e.databaseName)):t=[(0,Uo.join)((0,C_.getHdbBasePath)(),"blobs",e.databaseName)],nb.set(e,t)}return t}async function ob(e){let t=Lm(e);t&&await Promise.all(t.map(r=>JU(r)))}async function JU(e){if((0,rt.existsSync)(e)){for(let t of await(0,Ds.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await JU((0,Uo.join)(e,t.name));else try{await(0,Ds.unlink)((0,Uo.join)(e,t.name))}catch(r){Mo.default.warn?.("Error deleting file",r)}try{await(0,Ds.rmdir)(e)}catch(t){Mo.default.warn?.("Error deleting directory",t)}}}function Pm({storageIndex:e,fileId:t,store:r}){let n=Lm(r);return(0,Uo.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 eZ(e,t){let r=t.contentBuffer,n=r.length;if(!(n<KU))return e.size=n,rb(e,Om.Readable.from([r]),t)}function tZ(e){let t=Lm(e.store),r=rZ(),n=t?.length>1?nZ(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Pm(e),a=(0,Uo.dirname)(i);(0,rt.existsSync)(a)||(0,sb.ensureDirSync)(a),e.filePath=i}function rZ(){let e=VU.get(Dn);if(!e){let t=0,r=Lm(Dn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,rt.existsSync)(n))for(let c of(0,rt.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>a&&(a=l)}s+=a,n=(0,Uo.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Dn.getUserSharedBuffer("blob-file-id",e.buffer)),VU.set(Dn,e)}return Number(Atomics.add(e,0,1n))}function nZ(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(w_);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,sZ(e)),e.frequencyTable[t%w_]}async function sZ(e){if(!Ds.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,Ds.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,sb.ensureDirSync)(s),a=await(0,Ds.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(w_),n=t.map(s=>1/s);for(let s=0;s<w_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function L_(e,t,r){Pu=t,Dn=r,Qc=!1;try{return e()}finally{Pu=void 0,Dn=void 0}}function iZ(e){Wr=[];let t;try{t=e()}catch(n){throw Wr=void 0,n}let r=Wr.length<2?Wr[0]:Promise.all(Wr);return Wr=void 0,r?r.then(()=>e()):t}function D_(e,t){try{Wr=[],vo=t,e()}catch(n){throw vo=void 0,Wr=void 0,n}vo=void 0;let r=Wr.length<2?Wr[0]:Promise.all(Wr);return Wr=void 0,r}function Dm(e,t,r){Dn=r;try{return vo=t,e()}finally{vo=void 0}}function Jc(e,t){return Dn=t,e()}function Da(e){Lu(e,t=>{O_(t)})}function Lu(e,t){if(e instanceof Ps)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Lu(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Lu(e[r],t)}}function aZ(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var Hi,Ds,rt,N_,Om,sb,C_,Uo,Mo,KU,Nr,YU,ib,qU,Q8,J8,$U,Ln,vo,Ps,Pu,Wr,Dn,Qc,Cm,b_,X8,I_,zU,nb,VU,w_,oZ,Ls=ie(()=>{Hi=require("msgpackr"),Ds=require("node:fs/promises"),rt=require("node:fs"),N_=require("node:zlib"),Om=require("node:stream"),sb=require("fs-extra"),C_=I(le());q();Uo=require("path"),Mo=I(Os());Do();KU=8192,Nr=8,YU=0,ib=1,qU=255,Q8=new Uint8Array([0,YU,255,255,255,255,255,255]),J8=new Uint8Array([0,ib,255,255,255,255,255,255]),$U=0xffffffffffff,Ln=new WeakMap,Ps=global.Blob||aZ(),Qc=!1,Cm=new Uint8Array(8),b_=new DataView(Cm.buffer),X8=6e4;o(WU,"InstanceOfBlobWithNoConstructor");WU.prototype=Ps.prototype;I_=class e extends WU{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Ln.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):(tb()&&eb(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Ln.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=Pm(t),a,c=o(async()=>{let l,u=Nr;try{if(l=await(0,Ds.readFile)(i),l.length>=Nr){l.copy(Cm,0,0,Nr);let f=b_.getBigUint64(0);if(Number(f>>48n)===qU)throw new Error("Error in blob: "+buffer.subarray(Nr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<$U&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(a=!0,h(c()))))return a=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===ib?new Promise((f,m)=>{(0,N_.deflate)(l.subarray(Nr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Nr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Ln.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=Pm(t),a,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=o((A,S)=>{(0,rt.open)(i,"r",(T,w)=>{if(T){if(T.code==="ENOENT"&&f!==!1&&(Mo.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(A,S)},20).unref();S(T),p.#e?.forEach(L=>L(T))}else a=w,A(w)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,A=100;return new Promise(o(function S(T,w){function L(te){(0,rt.close)(a),clearTimeout(d),u&&u.close(),w(te),p.#e?.forEach(F=>F(te))}o(L,"onError");let k=Buffer.allocUnsafe(262144);(0,rt.read)(a,k,0,k.length,c,(te,F,V)=>{if(l+=F,te)return L(te);if(c===0){if(F<Nr){A-- >0&&f!==!1?(h(),Mo.default.debug?.("File was empty, waiting for data to be written",i,A),setTimeout(()=>S(T,w),20).unref()):(Mo.default.debug?.("File was empty, throwing error",i,A),w(new Error(`Blob ${t.fileId} was empty`)));return}V.copy(Cm,0,0,Nr);let X=b_.getBigUint64(0);if(Number(X>>48n)===qU)return L(new Error("Error in blob: "+V.subarray(Nr)));if(g=Number(X&0xffffffffffffn),g<$U&&p.size!==g&&(p.size=g,p.#t))for(let Y of p.#t)Y(g);V=V.subarray(Nr,F),l-=Nr}else if(F===0){let X=Buffer.allocUnsafe(8);return(0,rt.read)(a,X,0,Nr,0,Y=>{if(Y)return L(Y);if(Cm.set(X),g=Number(b_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{L(new Error(`File read timed out reading from ${i}`))},X8).unref():(u=(0,rt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(T,w))}),S(T,w)):m?L(new Error("Blob is incomplete")):(m=!0,S(T,w));return}(0,rt.close)(a),E.close(),T()})}else V=V.subarray(0,F);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=F,S(T,w);s&&l>=s&&(l>s&&(V=V.subarray(0,s-c)),l=g=s),n&&n>c&&(V=V.subarray(n-c))}c+=F;try{E.enqueue(V)}catch(X){return Mo.default.debug?.("Error enqueuing chunk",X),T()}l===g&&((0,rt.close)(a),E.close()),T()})},"readMore"))},"pull"),cancel(){(0,rt.close)(a),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=Ln.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};Ln.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Ln.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(Dn=t?.primaryStore?.rootStore,!Dn)throw new Error("No target table specified");return jU(this).saving??Promise.resolve()}},zU=500;o(O_,"deleteBlob");o(Z8,"setDeletionDelay");global.createBlob=function(e,t){let r=new I_(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Ln.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Om.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Om.Readable.from(e);else throw new Error("Invalid source type");return r};o(jU,"saveBlob");o(rb,"writeBlobWithStream");o(P_,"getFileId");o(QU,"getFilePathForBlob");nb=new Map;o(Lm,"getRootBlobPathsForDB");o(ob,"deleteRootBlobPathsForDB");o(JU,"rimrafSteadily");o(Pm,"getFilePath");o(eZ,"writeBlobWithBuffer");o(tZ,"generateFilePath");VU=new Map;o(rZ,"getNextFileId");w_=128;o(nZ,"getNextStorageIndex");o(sZ,"createFrequencyTableForStoragePaths");o(L_,"encodeBlobsWithFilePath");o(iZ,"encodeBlobsAsBuffers");o(D_,"decodeBlobsWithWrites");o(Dm,"decodeWithBlobCallback");o(Jc,"decodeFromDatabase");o(Da,"deleteBlobsInObject");o(Lu,"findBlobsInObject");oZ=new Hi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Hi.addExtension)({Class:Ps,type:11,unpack:o(function(e){let t=oZ.unpack(e),r=new I_;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Ln.set(r,{storageIndex:t[1],fileId:t[2],store:Dn}),vo)return vo(r)??r;if(!Dn)throw new Error("No store specified, cannot load blob from storage")}else Ln.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=Ln.get(e);if(Pu!==void 0&&(Qc=!0,t?.recordId!==void 0&&t.recordId!==Pu))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<KU)return r.size=t.contentBuffer.length,(0,Hi.pack)([r,t.contentBuffer])}if(Pu!==void 0){if(t=jU(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Pu,(0,Hi.pack)([r,t.storageIndex,t.fileId])}if(t){if(vo)return vo(e),(0,Hi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,rt.readFileSync)(Pm(t));if(n.length>=Nr&&(n.copy(Cm,0,0,Nr),Number(b_.getBigUint64(0)&0xffffffffffffn)===n.length-Nr))return Buffer.concat([(0,Hi.pack)([r]),n]);if(Wr)Wr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Wr)return Wr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Hi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(aZ,"polyfillBlob")});var rx={};be(rx,{onStorageReclamation:()=>Mm,runReclamationHandlers:()=>db,setAvailableSpaceRatioGetter:()=>lZ});function Mm(e,t,r){(r||(0,v_.getWorkerIndex)()===(0,v_.getWorkerCount)()-1)&&(M_.has(e)||M_.set(e,[]),M_.get(e).push({priority:0,handler:t}),ub||(ub=setTimeout(db,ZU).unref()))}async function db(){for(let[e,t]of M_)try{let r=await tx(e),n=cZ/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(lb.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){lb.default.error?.("Error running storage reclamation handlers",r)}ub=setTimeout(db,ZU).unref()}function lZ(e){tx=e??ex}var cb,v_,lb,U_,XU,M_,cZ,ZU,ub,ex,tx,x_=ie(()=>{cb=require("node:fs/promises"),v_=I(nt()),lb=I(Os());q();U_=I(le()),XU=I(ce());U_.default.initSync();M_=new Map,cZ=U_.default.get(x.STORAGE_RECLAMATION_THRESHOLD)??.4,ZU=(0,XU.convertToMS)(U_.default.get(x.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Mm,"onStorageReclamation");ex=o(async e=>{if(cb.statfs){let t=await(0,cb.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"),tx=ex;o(db,"runReclamationHandlers");o(lZ,"setAvailableSpaceRatioGetter")});var hx={};be(hx,{ACTION_32_BIT:()=>G_,ACTION_64_BIT:()=>mZ,AUDIT_STORE_OPTIONS:()=>xm,Decoder:()=>Zc,HAS_BLOBS:()=>Mn,HAS_CURRENT_RESIDENCY_ID:()=>el,HAS_EXPIRATION_EXTENDED_TYPE:()=>km,HAS_ORIGINATING_OPERATION:()=>Fm,HAS_PREVIOUS_RESIDENCY_ID:()=>tl,REMOTE_SEQUENCE_UPDATE:()=>q_,createAuditEntry:()=>rl,getLastRemoved:()=>dZ,openAuditStore:()=>k_,readAuditEntry:()=>Bt,removeAuditEntry:()=>H_,setAuditRetention:()=>fZ,transactionKeyEncoder:()=>dx});function k_(e){let t=e.auditStore=e.openDB(fb.AUDIT_STORE_NAME,{create:!1,...xm});t||(t=e.auditStore=e.openDB(fb.AUDIT_STORE_NAME,xm),sx(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=pb;Mm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-mb/(1+i*i)})){try{m=H_(t,h,E)}catch(g){Du.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=uZ){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,mb/10):(sx(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Um.getWorkerIndex)()===(0,Um.getWorkerCount)()-1&&c(),(0,Um.getWorkerIndex)()===0&&!nx)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(nx=!0,Du.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 H_(e,t,r){let n=pZ(r),s;if(n&Mn){s=Bt(r);let i=e.tableStores[s.tableId],a=i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Jc(()=>Da(s.getValue(i)),i.rootStore)}if((n&15)===hb){s=s||Bt(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 sx(e,t){Eb[0]=t,e.put(Symbol.for("last-removed"),fx)}function dZ(e){let t=e.get(Symbol.for("last-removed"));if(t)return fx.set(t),Eb[0]}function fZ(e,t=pb){mb=e,pb=t}function rl(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=mx[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Ma.setFloat64(0,n):Ms.set(_b),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}A(s),A(t),g(r),Ma.setFloat64(h,e),h+=8,l&el&&A(u),l&tl&&A(d),l&km&&(Ma.setFloat64(h,f),h+=8),l&Fm&&A(px[m]),i?g(i):Ms[h++]=0,l?Ma.setUint32(n?8:0,p|l|3221225472):Ms[n?8:0]=p;let E=Ms.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let T=h;h+=1,h=(0,Xc.writeKey)(S,Ms,h);let w=h-T-1;w>127?w>16383?(Du.error("Key or username was too large for audit entry",S),h=T+1,Ms[T]=0):(Ms.copyWithin(T+2,T+1,h),Ma.setUint16(T,w|32768),h++):Ms[T]=w}function A(S){S<128?Ms[h++]=S:S<16384?(Ma.setUint16(h,S|32768),h+=2):S<1056964608?(Ma.setUint32(h,S|3221225472),h+=4):(Ms[h]=255,Ma.setUint32(h+1,S),h+=5)}}function pZ(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 Zc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Bt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Zc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&el&&(m=n.readInt()),i&tl&&(p=n.readInt()),i&km&&(h=n.readFloat64()),i&Fm){let T=n.readInt();E=px[T]}l=n.readInt();let g=n.position,A=n.position+=l,S;return{type:mx[i&7],tableId:c,nodeId:a,get recordId(){return(0,Xc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return A>g?(0,Xc.readKey)(e,g,A):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(T,w,L){if(i&B_||i&vm&&!w)return S||(S=Jc(()=>T.decoder.decode(e.subarray(n.position,r)),T.rootStore)),S;if(i&vm&&L)return VA(T.getEntry(this.recordId),L,T)},getBinaryValue(){return i&(B_|vm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Du.error("Reading audit entry error",n,e),{}}}var Xc,F_,fb,Um,ux,Du,Ms,Ma,dx,xm,mb,uZ,Eb,fx,pb,nx,B_,vm,ix,hb,ox,ax,cx,lx,G_,mZ,q_,el,tl,Fm,km,Mn,mx,px,Zc,No=ie(()=>{Xc=require("ordered-binary"),F_=I(le()),fb=I(Vt());q();Um=I(nt()),ux=I(ce());nl();Du=I(Q());S_();Ls();x_();(0,F_.initSync)();Ms=Buffer.alloc(2816),Ma=new DataView(Ms.buffer,Ms.byteOffset,2816),dx={writeKey(e,t,r){return e===Bm?(t.set(Bm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Xc.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,Xc.readKey)(e,t,r)}},xm={encoding:"binary",keyEncoder:dx},mb=(0,ux.convertToMS)((0,F_.get)(x.LOGGING_AUDITRETENTION))||86400*3,uZ=1e3,Eb=new Float64Array(1),fx=new Uint8Array(Eb.buffer),pb=1e4,nx=!1;o(k_,"openAuditStore");o(H_,"removeAuditEntry");o(sx,"updateLastRemoved");o(dZ,"getLastRemoved");o(fZ,"setAuditRetention");B_=16,vm=32,ix=1,hb=2,ox=3,ax=4,cx=5,lx=6,G_=14,mZ=15,q_=11,el=512,tl=1024,Fm=2048,km=4096,Mn=8192,mx={put:ix|B_,[ix]:"put",delete:hb,[hb]:"delete",message:ox|B_,[ox]:"message",invalidate:ax|vm,[ax]:"invalidate",patch:cx|vm,[cx]:"patch",relocate:lx,[lx]:"relocate"},px={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(rl,"createAuditEntry");o(pZ,"readAction");o(Bt,"readAuditEntry");Zc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function $_(){return gb||(gb=Je({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),gb}function EZ(e){return e=e.replace(hZ,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function _Z(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function Tb(e){let t=Ex.default.createHash("shake128",{outputLength:4}),r;return(0,_x.isIPv6)(e)?r=EZ(e):r=e.toLowerCase(),_Z(Uint8Array.from(t.update(r).digest()))}var Ex,_x,Sb,gb,hZ,yb=ie(()=>{Pe();Ex=I(require("crypto")),_x=require("node:net"),Sb=new Map;o($_,"getAnalyticsHostnameTable");hZ=/(\d{1,3}\.){3}\d{1,3}$/;o(EZ,"normalizeIPv6");o(_Z,"nodeHashToNumber");o(Tb,"stableNodeId")});var xo,Rb=ie(()=>{xo={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var Y_={};be(Y_,{addAnalyticsListener:()=>$m,analyticsDelay:()=>wb,calculateCPUUtilization:()=>Ux,diffResourceUsage:()=>xx,onAnalyticsAggregate:()=>Ob,recordAction:()=>Xe,recordActionBinary:()=>jr,recordHostname:()=>Nb,setAnalyticsEnabled:()=>TZ});function TZ(e){Px=e,clearTimeout(Gm),Gm=null}function yZ(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 RZ(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},K_.set(e,a)}function Xe(e,t,r,n,s){if(!Px)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=K_.get(i);a?yZ(e,a):RZ(i,e,t,r,n,s),Gm||AZ()}function jr(e,t,r,n,s){Xe(!!e,t,r,n,s)}function $m(e){Dx.push(e)}function AZ(){Ab||=performance.now(),Gm=setTimeout(async()=>{Gm=null;let e=performance.now()-Ab;Ab=0;let t=[],r={time:Date.now(),period:e,threadId:sl.threadId,metrics:t};for(let[s,i]of K_){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of vx){let m=Math.floor(c*f),p=a[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await Bx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:sl.threadId,byThread:!0,...n});for(let s of Dx)s(t);K_=new Map,sl.parentPort?sl.parentPort.postMessage({type:Lx,report:r}):Hx({report:r})},wb).unref()}async function Nb(){let e=Ue.hostname;zr.trace?.("recordHostname server.hostname:",e);let t=Tb(e);zr.trace?.("recordHostname nodeId:",t);let r=$_();if(!await r.get(t)){let s={id:t,hostname:e};zr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Mu(e,t){let r=Ue.hostname,n=Sb.get(r);n?zr.trace?.("storeMetric cached nodeId:",n):(n=Tb(r),zr.trace?.("storeMetric new nodeId:",n),Sb.set(r,n));let s={id:[(0,Ib.getNextMonotonicTime)(),n],...t};zr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Ux(e,t){let r=e.userCPUTime+e.systemCPUTime;return zr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function xx(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function bZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:xo.TABLE_SIZE,database:t,table:s,size:c};zr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),Mu(e,l),n+=c}return n}function gx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=Ox.statSync(s.primaryStore.env.path).size,c=bZ(e,r,n),l=a-c,u={metric:xo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};Mu(e,u),zr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){zr.warn?.("Error getting DB size metrics",s)}}function Sx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:xo.STORAGE_VOLUME,database:r,...i};Mu(e,a),zr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){zr.warn?.("Error getting DB volume metrics",s)}}async function IZ(e,t=6e4){let r=Cb(),n=Fx(),s=new Promise(T=>{let w=performance.now();setImmediate(()=>{let L=performance.now();L-w>5e3&&zr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(L-w)+"ms"),w=performance.now()}),n.primaryStore.prefetch([1],()=>{let L=performance.now();L-w>5e3&&zr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(L-w)+"ms"),T(L-w)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:T,value:w}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!w)continue;if(a){if(T>a+t)break}else a=T;d=T;let{metrics:L,threadId:k}=w;for(let te of L||[]){let{path:F,method:V,type:X,metric:Y,count:de,total:ne,distribution:ae,threads:ye,...Ae}=te;de||(de=1);let He=Y+(F?"-"+F:"");V!==void 0&&(He+="-"+V),X!==void 0&&(He+="-"+X);let Ge=c.get(He);if(Ge){if(Ge.threads){let er=Ge.threads[k];if(er)Ge=er;else{Ge.threads[k]={...Ae};continue}}Ge.count||(Ge.count=1);let Ar=Ge.count;for(let er in Ae){let Gt=Ae[er];typeof Gt=="number"&&(Ge[er]=(Ge[er]*Ar+Gt*de)/(Ar+de))}Ge.count+=de,ne>=0&&(Ge.total+=ne,Ge.ratio=Ge.total/Ge.count)}else Ge={period:t,...te},delete Ge.distribution,c.set(He,Ge),Ge.byThread&&(Ge.threads=[],Ge.threads[k]={...Ae},u.push(Ge));if(ae){ae=ae.map(er=>typeof er=="number"?{value:er,count:1}:er);let Ar=l.get(He);Ar?Ar.push(...ae):l.set(He,ae)}}await Bx()}for(let T of u){let{path:w,method:L,type:k,metric:te,count:F,total:V,distribution:X,threads:Y,...de}=T;Y=Y.filter(ne=>ne);for(let ne in de){if(typeof T[ne]!="number")continue;let ae=0;for(let ye of Y){let Ae=ye[ne];typeof Ae=="number"&&(ae+=Ae)}T[ne]=ae}T.count=Y.length,delete T.threads,delete T.byThread}for(let[T,w]of l){let L=c.get(T);w.sort((er,Gt)=>er.value>Gt.value?1:-1);let k=L.count-1,te=[],F=0,V=0,X;for(let er of vx){let Gt=k*er;for(;F<Gt;)X=w[V++],F+=X.count,V===1&&F--;let tr=w[V>1?V-2:0];X||(X=w[0]),te.push(X.value-(X.value-tr.value)*(F-Gt)/X.count)}let[Y,de,ne,ae,ye,Ae,He,Ge,Ar]=te;Object.assign(L,{p1:Y,p10:de,p25:ne,median:ae,p75:ye,p90:Ae,p95:He,p99:Ge,p999:Ar})}let f;for(let[,T]of c)T.time=d,Mu(n,T),f=!0;if(f)for(let T of Mx)T(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let T={metric:xo.MAIN_THREAD_UTILIZATION,idle:p-Tx,active:h-yx,taskQueueLatency:await s,time:m,...process.memoryUsage()};Mu(n,T)}Tx=p,yx=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,zr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=xx(V_,E);zr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=V_.time?m-V_.time:t,g.cpuUtilization=Ux(g,g.period);let A={metric:xo.RESOURCE_USAGE,...g};Mu(n,A),V_=E;let S=ct();gx(n,S),gx(n,{system:S.system}),Sx(n,S),Sx(n,{system:S.system})}async function Rx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Cb(){return Ax||(Ax=Je({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Fx(){return bx||(bx=Je({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function CZ(){kx=!0;let e=(0,qm.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await IZ(wb,e),await Rx(Cb(),wZ),await Rx(Fx(),NZ)},Math.min(e/2,2147483647)).unref()}function Hx(e,t){let r=e.report;r.threadId=t?.threadId||sl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Ix+=n.mean*n.count);r.totalBytesProcessed=Ix,t&&(r.metrics.push({metric:xo.UTILIZATION,...t.performance.eventLoopUtilization(wx.get(t))}),wx.set(t,t.performance.eventLoopUtilization())),r.id=(0,Ib.getNextMonotonicTime)(),Cb().primaryStore.put(r.id,r),kx||CZ(),OZ&&(Gx=LZ(r))}async function LZ(e){if(await Gx,!va){let r=(0,Hm.dirname)(gZ());try{va=await(0,bb.open)((0,Hm.join)(r,"analytics.log"),"r+")}catch{va=await(0,bb.open)((0,Hm.join)(r,"analytics.log"),"w+")}}let t=(await va.stat()).size;if(t>PZ){let r=Buffer.alloc(t);await va.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await va.write(r,{position:0}),await va.truncate(r.length),t=r.length}await va.write(JSON.stringify(e)+`
|
|
14
|
+
`,t)}function Ob(e){e&&Mx.push(e)}var sl,Nx,Cx,Hm,bb,Ib,qm,Ox,gZ,SZ,zr,K_,Px,Gm,Ab,wb,Lx,Dx,Mx,vx,Tx,yx,V_,Bx,wZ,NZ,Ax,bx,kx,Ix,wx,OZ,Gx,va,PZ,vs=ie(()=>{sl=require("worker_threads"),Nx=I(nt());Pe();Cx=I(Q()),Hm=require("path"),bb=require("fs/promises"),Ib=I(Pn()),qm=I(le());q();Ur();Ox=I(require("node:fs"));yb();Rb();({getLogFilePath:gZ,forComponent:SZ}=Cx.default),zr=SZ("analytics").conditional;(0,qm.initSync)();K_=new Map,Px=(0,qm.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;o(TZ,"setAnalyticsEnabled");o(yZ,"recordExistingAction");o(RZ,"recordNewAction");o(Xe,"recordAction");Ue.recordAnalytics=Xe;o(jr,"recordActionBinary");Ab=0,wb=1e3,Lx="analytics-report",Dx=[],Mx=[];o($m,"addAnalyticsListener");vx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(AZ,"sendAnalytics");o(Nb,"recordHostname");o(Mu,"storeMetric");o(Ux,"calculateCPUUtilization");o(xx,"diffResourceUsage");o(bZ,"storeTableSizeMetrics");o(gx,"storeDBSizeMetrics");o(Sx,"storeVolumeMetrics");o(IZ,"aggregation");Tx=0,yx=0,V_={userCPUTime:0,systemCPUTime:0},Bx=o(()=>new Promise(setImmediate),"rest");o(Rx,"cleanup");wZ=36e5,NZ=31536e6;o(Cb,"getRawAnalyticsTable");o(Fx,"getAnalyticsTable");(0,Nx.setChildListenerByType)(Lx,Hx);o(CZ,"startScheduledTasks");Ix=0,wx=new Map,OZ=!1;o(Hx,"recordAnalytics");PZ=1e6;o(LZ,"logAnalytics");o(Ob,"onAnalyticsAggregate")});var Yx={};be(Yx,{ENTRY:()=>MZ,HAS_EXPIRATION:()=>j_,HAS_RESIDENCY_ID:()=>Ub,HAS_STRUCTURE_UPDATE:()=>Q_,LAST_TIMESTAMP_PLACEHOLDER:()=>Bm,LOCAL_TIMESTAMP:()=>DZ,METADATA:()=>xu,NEW_TIMESTAMP_PLACEHOLDER:()=>$x,NO_TIMESTAMP:()=>Pb,PENDING_LOCAL_TIME:()=>xb,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>_b,RecordEncoder:()=>vb,TIMESTAMP_ASSIGN_LAST:()=>UZ,TIMESTAMP_ASSIGN_NEW:()=>Vx,TIMESTAMP_ASSIGN_PREVIOUS:()=>Kx,TIMESTAMP_PLACEHOLDER:()=>W_,TIMESTAMP_RECORD_PREVIOUS:()=>Lb,entryMap:()=>Ua,handleLocalTimeForGets:()=>J_,lastMetadata:()=>lt,recordUpdater:()=>Bb,removeEntry:()=>ol});function FZ(){return Km[0]=Km[0]^64,vZ.getFloat64(0)}function J_(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,lt=null;let l=r.call(this,a,c);return l&&(lt&&(l.metadataFlags=lt[xu],l.localTime=lt.localTime,l.residencyId=lt.residencyId,l.size=lt.size,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l.value&&Ua.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){lt=null;let l=n.call(this,a,c);return lt&&l&&(Ua.set(l,lt),lt=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(lt&&(l.metadataFlags=lt[xu],l.localTime=lt.localTime,l.residencyId=lt.residencyId,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,il.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<il.length;u++){let d=il[u].deref();(!d||d.isDone||d.isCommitted)&&il.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function Bb(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Uu=i?.localTime?Lb|Kx:Pb:Uu=l?i?.localTime?Lb|16384:Vx|16384:Pb;let p=u?.expiresAt;if(p>=0&&(c|=j_),Vm=c,Db=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Uu>0},E,g=0;try{let A=i?.residencyId,S=u?.residencyId;S&&(Mb=S,Vm|=Ub,g|=el),A!==S&&(g|=tl,A||(A=0)),c&j_&&(g|=km),u?.originatingOperation&&(g|=Fm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Mn&&(r.getBinaryFast(i.localTime)||Da(i.value));let T;if(s!==void 0&&(T=L_(()=>e.put(n,s,h),n,e.rootStore),Qc&&(g|=Mn)),l){let w=u?.user?.username;if(m&&(L_(()=>e.encoder.encode(m),n,e.rootStore),Qc&&(g|=Mn)),e.encoder.hasStructureUpdate&&(g|=Q_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let L=i?.localTime,k=r.get(L);if(k){let te=Bt(k).previousLocalTime;return T=r.put(L,rl(a,t,n,te,u?.nodeId??server.replication.getThisNodeId(r)??0,w,d,vu,g,S,A,p),{ifVersion:E}),T}}T=r.put(s===void 0?$x:Bm,rl(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,w,d,vu,g,S,A,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&xZ.has(d)&&Xe(vu?.length??1,"db-write",u.tableToTrack,null),T}catch(A){throw A.message+=" id: "+n+" options: "+h,A}}}function ol(e,t,r){if(t)return t.value&&t.metadataFlags&Mn&&!e.auditStore.getBinaryFast(t.localTime)&&Da(t.value),e.remove(t.key,r)}var qx,z_,W_,Bm,_b,$x,DZ,xu,MZ,Km,vZ,Pb,Vx,UZ,Kx,Lb,j_,Ub,xb,Q_,xZ,Ua,BZ,vu,Uu,Vm,Db,Mb,lt,vb,il,nl=ie(()=>{qx=require("msgpackr");No();z_=I(Q());Ls();Ls();vs();W_=new Uint8Array([1,1,1,1,4,64,0,0]),Bm=new Uint8Array([1,1,1,1,1,0,0,0]),_b=new Uint8Array([1,1,1,1,3,64,0,0]),$x=new Uint8Array([1,1,1,1,0,64,0,0]),DZ=Symbol("local-timestamp"),xu=Symbol("metadata"),MZ=Symbol("entry"),Km=new Uint8Array(8),vZ=new DataView(Km.buffer,0,8),Pb=0,Vx=0,UZ=1,Kx=3,Lb=4,j_=16,Ub=32,xb=1,Q_=256,xZ=new Set(["put","patch","delete","message","publish"]),Ua=new WeakMap,Uu=0,Vm=-1,Db=-1,Mb=0,lt=null,vb=class extends qx.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Ua.get(this)?.version}getExpiresAt(){return Ua.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Uu||Vm>=0){let c=0,l=Uu;l&&(c+=8,Uu=0);let u=Vm,d=Db,f=Mb;u>=0&&(c+=4,Vm=-1,d>=0&&(c+=8,Db=-1),f&&(c+=4,Mb=0));let m=BZ=n.call(this,i,a|2048|c);vu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(W_[4]=l,W_[5]=l>>8,m.set(W_,p),p+=8),Qc&&(u|=Mn),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|G_<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return vu=n.call(this,i,a),vu};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){lt=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Km,0,c),c+=8;else for(let m=0;m<8;m++)Km[m]=t[c++];l=FZ(),i=t[c]}let u,d;i<32&&(i===G_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&j_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&Ub&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Jc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return lt={localTime:l,[xu]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Jc(()=>super.decode(t,r),this.rootStore)}catch(c){return z_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(FZ,"getTimestamp");o(J_,"handleLocalTimeForGets");il=[];setInterval(()=>{for(let e=0;e<il.length;e++){let t=il[e].deref();!t||t.isDone||t.isCommitted?il.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(z_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):z_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(Bb,"recordUpdater");o(ol,"removeEntry")});function Hb(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?Hb(f.conditions,f.operator,r,n,s,i,a,c):Hu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",T=d(h.conditions,!S,p);return S?(w,L)=>T.some(k=>k(w,L)):(w,L)=>T.every(k=>k(w,L))}let g=(h.attribute||h[0])===r.primaryKey,A=Wm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=WZ(r.primaryStore,h.estimated_count,p)),A}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Hu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new Qr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let T=c[0],w=qi(n.attributes,T);if(w.relationship){if(c.length<2)throw new Qr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let L=w.definition?.tableClass||w.elements?.definition?.tableClass,k=new Map,te=Hu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,L,s,k);if(w.relationship.to){i[c[0]]=k;let F=!!qi(L.attributes,w.relationship.to)?.elements;te=$Z(te,w,L.primaryStore,F,k)}if(w.relationship.from){let F=o(V=>(V?.key!==void 0&&(V=V.key),Hu({attribute:w.relationship.from,value:V},t,r,n,s,k)),"searchEntry");w.elements?(i[c[0]]=k,te=VZ(te,w,L.primaryStore,k,F)):te=te.flatMap(F)}return te}else if(c.length===1)c=c[0];else throw new Qr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(Gb[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=Gi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new Qr.ClientError(`Unknown query comparator "${u}"`)}let A;if(typeof m=="string"&&m.length>Us.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Us.MAX_SEARCH_KEY_LENGTH)+Us.OVERFLOW_MARKER,E=!1,A=Wm(e,n,null,i,d)),typeof p=="string"&&p.length>Us.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Us.MAX_SEARCH_KEY_LENGTH)+Us.OVERFLOW_MARKER,h=!0,A=A??Wm(e,n,null,i,d)),r){let T=m;m=p,p=T,T=!E,E=!h,h=T}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new Qr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new Qr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new Qr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new Qr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(A=A??Wm(e,n,null,i,d),!A)throw new Qr.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let T=f.getRange(S).map(A?function({key:w,value:L}){return this?.isSync?L&&A(L)?w:xa.SKIP:new Promise((k,te)=>setImmediate(()=>{try{k(L&&A(L)?w:xa.SKIP)}catch(F){te(F)}}))}:w=>w.value==null&&!(w.metadataFlags&(vn|Ba))?xa.SKIP:(a?._freezeRecords&&Object.freeze(w.value),w));return T.hasEntries=!0,T}else return f?f.customIndex?f.customIndex.search(e,a).map(T=>{if(typeof T=="object"&&T){let{key:w,...L}=T,k=n.primaryStore.getEntry(w);return a?._freezeRecords&&Object.freeze(k?.value),{...L,...k}}return T}):f.getRange(S).map(A?function({key:T,value:w}){let L;return typeof T=="string"&&T.length>Us.MAX_SEARCH_KEY_LENGTH?L=n.primaryStore.get(w):L={[c]:T},this.isSync?A(L)?w:xa.SKIP:new Promise((k,te)=>setImmediate(()=>{try{k(A(L)?w:xa.SKIP)}catch(F){te(F)}}))}:({value:T})=>T):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:T,value:w}){return this.isSync?w&&A(w)?T:xa.SKIP:new Promise((L,k)=>setImmediate(()=>{try{L(w&&A(w)?T:xa.SKIP)}catch(te){k(te)}}))})}function qi(e,t){if(Array.isArray(t))if(t.length>1){let r=qi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?qi(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 $Z(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function VZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function Wm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=qi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=Wm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,A=o((T,w)=>{let L,k;return E?E.returnDirect?(L=E(T,r,w),k=lt):(k=E(T,r,w,!0),Array.isArray(k)?(L=k.map(te=>te.value),k=null):L=k?.value):L=T[d],{subObject:L,subEntry:k}},"getSubObject"),S=o((T,w)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let V of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:V};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let F=g(T);return g.idFilter&&(S.idFilter=g.idFilter),F}let{subObject:L,subEntry:k}=A(T,w);return L?Array.isArray(L)?(!n?.[d]&&n&&(n[d]={fromRecord(F){let V=A(F).subObject;return Array.isArray(V)?V.filter(h).map(X=>X[m.primaryKey]):V}}),L.some(h)):h(L,k):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),Gb[a]||a){case Us.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Gi.compareKeys)(d,l[0])>=0&&(0,Gi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Gi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Gi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Gi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Gi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Gi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new Qr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&Z_(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function A(S){let T=S[d],w;if(typeof T!="object"||!T||p?w=f(T):Array.isArray(T)?w=T.some(f):T instanceof Date&&(w=f(T.getTime())),m&&(g++,!w&&!A.idFilter&&++E/g*i>h)){let L=Hu(e,r.transaction.getReadTxn(),!1,t),k;A.to?k=L.flatMap(F=>t.primaryStore.get(F)[A.to]):k=L.map(Gu);let te=new Set(k);A.idFilter=F=>te.has(Gu(F)),A.idFilter.idSet=te}return w}return o(A,"recordFilter"),s&&(A.idFilter=f),A}o(u,"attributeComparator")}function Z_(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/Bo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Gb[n]||n,n===Us.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=qi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=Z_(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Bo(e.indices[i.relationship.from])/(Bo(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Bo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=GZ*Bo(e.primaryStore)+1;else if(n==="between")r.estimated_count=HZ*Bo(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=Bo(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=kZ*Bo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function eg(e,t){if(e)if(Fo=e,Bu.lastIndex=0,KZ.test(e))try{if(t&&(t.conditions=[]),di=t??new ku,Ym(di,""),xr!==Fo.length&&Kt("Unable to parse query, unexpected end of query"),di.parseErrorMessage&&(di.parseError=new Fb(t.parseErrorMessage),!t))throw di.parseError;return di}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${xr} in '${Fo}'`,di.parseErrorMessage&&(r.message+=", "+di.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Kt(e){let t=`${e} at position ${xr}`;di.parseErrorMessage=di.parseErrorMessage?di.parseErrorMessage+", "+t:t}function Ym(e,t){let r=Bu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Fo);){xr=r.lastIndex;let[,d,f]=n;a?(d&&Kt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Kt(`invalid FIQL operator ${d}`),l=Wx):(l=decodeURIComponent,i="equals",d||Kt("attribute must be specified before equality comparator"),s=Fu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=qZ[f],l=kb[i]?Wx:decodeURIComponent,d||Kt(`attribute must be specified before comparator ${f}`),s=Fu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Kt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Kt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Kt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&zx(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else X_(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Kt("conditions/comparisons are not allowed in a property list"):e.push(Fu(d)),s=void 0;break;case"(":Bu.lastIndex=xr;let p=Ym(d?[]:new ku,")");switch(d){case"":X_(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Kt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Kt("group by is not implemented yet");case"sort":e.sort=jx(p);break;default:Kt(`unknown query function call ${d}`)}Fo[xr]===","?r.lastIndex=++xr:a=!0,s=null;break;case"{":e.conditions&&Kt("property sets are not allowed in a queries"),d||Kt("property sets must have a defined parent property name"),Bu.lastIndex=xr,m=Ym([],"}"),m.name=d,e.push(m),Fo[xr]===","?r.lastIndex=++xr:a=!0;break;case"[":if(Bu.lastIndex=xr,d?(m=Ym(new ku,"]"),m.name=d):m=Ym(e.conditions?new ku:[],"]"),e.conditions)if(X_(e,u),Fo[xr]==="="){l=decodeURIComponent,i="equals",s=Fu(d),r.lastIndex=++xr;break}else e.conditions.push(m),s=null;else e.push(m);Fo[xr]===","?r.lastIndex=++xr:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&zx(h,d),X_(e,u),e.conditions.push(h)}else d&&Kt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Fu(d));return e}else Kt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Kt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?YZ:Bu,r.lastIndex=xr),xr===Fo.length)return e}t&&Kt(`expected '${t}', but encountered end of string`)}function X_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Kt("Can not mix operators within a condition grouping"):e.operator=t)}function Fu(e){return e.indexOf(".")>-1?e.split(".").map(Fu):decodeURIComponent(e)}function Wx(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new Qr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function zx(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Qr.ClientError("wildcard can only be used at the end of a string")}function jx(e){let t=Qx(e[0]);return e.length>1&&(t.next=jx(e.slice(1))),t}function Qx(e){if(Array.isArray(e)){let t=Qx(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}}Kt(`Unknown sort type ${e}`)}function Gu(e){return Array.isArray(e)?e.join("\0"):e}function Bo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function WZ(e,t,r){return t*r/Bo(e)}var Qr,Us,Gi,xa,kZ,HZ,GZ,qZ,kb,Gb,Fb,KZ,Bu,YZ,xr,di,Fo,ku,tg=ie(()=>{Qr=I(Ee()),Us=I(Vt()),Gi=require("ordered-binary"),xa=require("lmdb");rg();nl();kZ=.3,HZ=.1,GZ=.05,qZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},kb={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(Hb,"executeConditions");o(Hu,"searchByIndex");o(qi,"findAttribute");o($Z,"joinTo");o(VZ,"joinFrom");Gb={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(Wm,"filterByType");o(Z_,"estimateCondition");Fb=class extends Qr.Violation{static{o(this,"SyntaxViolation")}},KZ=/[()[\]|!<>.]|(=\w*=)/,Bu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,YZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(eg,"parseQuery");o(Kt,"recordError");o(Ym,"parseBlock");o(X_,"assignOperator");o(Fu,"decodeProperty");o(Wx,"typedDecoding");o(zx,"wildcardDecoding");o(jx,"toSortObject");o(Qx,"toSortEntry");ku=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Gu,"flattenKey");o(Bo,"estimatedEntryCount");o(WZ,"intersectionEstimate")});var Jx,fi,ng=ie(()=>{Jx=I(li()),fi=class extends URLSearchParams{static{o(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,Jx._assignPackageExport)("Resource",Resource)});var r0={};be(r0,{MultiPartId:()=>sg,Resource:()=>Br,contextStorage:()=>$u,snakeCase:()=>jZ,transformForSelect:()=>ig});function jZ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Xx(e,t){if(al=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(al=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new sg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){al=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return al=!0,null;e[e.length-1]==="/"&&(al=!0)}return t.coerceId(decodeURIComponent(e))}function Un(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof wo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new qu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new fi,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new fi,l.id=c,c==null&&(u=!0);l||(l=new fi,l.id=c),u&&(l.isCollection=!0);let f;a||(a=$u.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=o(E=>$u.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return bt(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(A=>{if(!A)throw new qu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new qu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function Zn(e,t){let r=new qu.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 qb(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function ig(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):qb(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(qb(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(qb(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=ig(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var Zx,e0,qu,t0,$u,zZ,Br,al,sg,Fa=ie(()=>{Zx=require("crypto");ym();Ou();e0=I(li()),qu=I(Ee());La();tg();t0=require("async_hooks");ng();$u=new t0.AsyncLocalStorage,zZ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Br=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Un(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=ig(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.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Zn(t,"put")},{hasContent:!0,type:"update"});static patch=Un(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Zn(t,"patch")},{hasContent:!0,type:"update"});static delete=Un(function(t,r,n,s){return t.delete?t.delete(r):Zn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Zx.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=$u.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),bt(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Zn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Un(function(t,r,n,s){return t.invalidate?t.invalidate(r):Zn(t,"delete")},{hasContent:!1,type:"update"});static post=Un(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Un(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Un(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Zn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Un(function(t,r,n,s){return t.subscribe?t.subscribe(r):Zn(t,"subscribe")},{type:"read"});static publish=Un(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):Zn(t,"publish")},{hasContent:!0,type:"create"});static search=Un(function(t,r,n){let s=t.search?t.search(r):Zn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=ig(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Un(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Zn(t,"search")},{hasContent:!0,type:"read"});static copy=Un(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Zn(t,"copy")},{hasContent:!0,type:"create"});static move=Un(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Zn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Zn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return eg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&zZ[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:Xx(t,this),isCollection:al}}let i=Xx(t,this);return al?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Xn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Xn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,e0._assignPackageExport)("Resource",Br);o(jZ,"snakeCase");o(Xx,"pathToId");sg=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Un,"transactional");o(Zn,"missingMethod");o(qb,"selectFromObject");o(ig,"transformForSelect")});var cl,$b=ie(()=>{cl=class{static{o(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Vb={};be(Vb,{Resources:()=>Vu,keyArrayToString:()=>Ku,resetResources:()=>QZ,resources:()=>xs});function QZ(){return xs=new Vu,Ue.resources=xs,xs}function Ku(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var n0,s0,Vu,xs,ka=ie(()=>{La();$b();n0=I(Q()),s0=I(Ee());Ur();Vu=class extends Map{static{o(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new s0.ServerError(`Conflicting paths for ${t}`);n0.default.error(c),i.Resource=new cl(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return bt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(QZ,"resetResources");o(Ku,"keyArrayToString")});function Wb(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=o0,JZ(e.primaryStore,e.auditStore)):(c=i0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{a0(i0[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=Ku(t);let d=new Yb(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function a0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),c0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Bt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Ku(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,Kb.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,Kb.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function JZ(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=o0[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{a0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function c0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function l0(e){return e.nextTransaction||(Wb({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),c0(e)),e.nextTransaction}var Kb,i0,o0,Yb,zb=ie(()=>{Kb=I(Q());Ou();ka();No();i0=Object.create(null),o0=Object.create(null);o(Wb,"addSubscription");Yb=class extends Xn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(a0,"notifyFromTransactionData");o(JZ,"listenToCommits");o(c0,"nextTransaction");o(l0,"whenNextTransaction")});var d0=v((AOe,u0)=>{"use strict";var jb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};u0.exports=jb});var m0=v((IOe,f0)=>{"use strict";var Qb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};f0.exports=Qb});var zm=v(h0=>{"use strict";var p0=le(),XZ=(q(),M(W)),{RecordEncoder:ZZ}=(nl(),M(Yx));p0.initSync();var e9=p0.get(XZ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Jb=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=e9&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:ZZ})}};h0.OpenDBIObject=Jb});var jm=v((OOe,E0)=>{"use strict";var es=le(),Bs=(q(),M(W));es.initSync();var og=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=es.get(Bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||es.get(Bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||es.get(Bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",es.get(Bs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=es.get(Bs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),es.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=es.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),es.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=es.get(Bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),es.get(Bs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=es.get(Bs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=es.get(Bs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};E0.exports=og;og.MAX_DBS=1e4});var gt=v((LOe,w0)=>{"use strict";var Zb=require("lmdb"),mi=require("fs-extra"),ts=require("path"),ag=Pn(),S0=Q(),xn=Yr().LMDB_ERRORS_ENUM,cg=m0(),{OpenDBIObject:eI}=zm(),T0=jm(),Ha=Vt(),_0=(q(),M(W)),{table:t9,resetDatabases:r9}=(Pe(),M(pt)),g0=le(),pi=Ha.INTERNAL_DBIS_NAME,y0=Ha.DBI_DEFINITION_NAME,n9="data.mdb",s9="lock.mdb",Qm=".mdb",i9="-lock",Xb=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Fs(t,r),this.key_type=this.dbi[Ha.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ha.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Zb.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function lg(e,t){if(e===void 0)throw new Error(xn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(xn.ENV_NAME_REQUIRED)}o(lg,"pathEnvNameValidation");async function tI(e,t,r=!0){try{await mi.access(e)}catch(n){throw n.code==="ENOENT"?new Error(xn.INVALID_BASE_PATH):n}try{let n=ts.join(e,t+Qm);return await mi.access(n,mi.constants.R_OK|mi.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await mi.access(ts.join(e,t,n9),mi.constants.R_OK|mi.constants.F_OK),ts.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(xn.INVALID_ENVIRONMENT)}else throw new Error(xn.INVALID_ENVIRONMENT);throw n}}o(tI,"validateEnvironmentPath");function ug(e,t){if(ag.validateEnv(e),t===void 0)throw new Error(xn.DBI_NAME_REQUIRED)}o(ug,"validateEnvDBIName");async function o9(e,t,r=!1,n=!1){lg(e,t);let s=ts.basename(e);t=t.toString();let i=g0.get(_0.CONFIG_PARAMS.DATABASES);i||g0.setProperty(_0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await tI(e,t,n),R0(e,t,r)}catch(a){if(a.message===xn.INVALID_ENVIRONMENT){let c=ts.join(e,t);await mi.mkdirp(n?c:e);let l=new T0(n?c:c+Qm,!1),u=Zb.open(l);u.dbis=Object.create(null);let d=new eI(!1);u.openDB(pi,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=rI(e,t,r);return u[Ha.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(o9,"createEnvironment");async function a9(e,t,r,n=!0){lg(e,t),t=t.toString();let s=ts.join(e,t);return t9({table:t,database:ts.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(a9,"copyEnvironment");async function R0(e,t,r=!1){lg(e,t),t=t.toString();let n=rI(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 tI(e,t),i=ts.join(e,t+Qm),a=s!=i,c=new T0(s,a),l=Zb.open(c);l.dbis=Object.create(null);let u=b0(l);for(let d=0;d<u.length;d++)Fs(l,u[d]);return l[Ha.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(R0,"openEnvironment");async function c9(e,t,r=!1){lg(e,t),t=t.toString();let n=ts.join(e,t+Qm),s=await tI(e,t);if(global.lmdb_map!==void 0){let i=rI(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await A0(a),delete global.lmdb_map[i]}}await mi.remove(s),await mi.remove(s===n?s+i9:ts.join(ts.dirname(s),s9))}o(c9,"deleteEnvironment");async function A0(e){ag.validateEnv(e);let t=e[Ha.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(A0,"closeEnvironment");function rI(e,t,r=!1){let s=`${ts.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(rI,"getCachedEnvironmentName");function l9(e){ag.validateEnv(e);let t=Object.create(null),r=Fs(e,pi);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==pi)try{t[n]=Object.assign(new cg,s)}catch{S0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(l9,"listDBIDefinitions");function b0(e){ag.validateEnv(e);let t=[],r=Fs(e,pi);for(let{key:n}of r.getRange({start:!1}))n!==pi&&t.push(n);return t}o(b0,"listDBIs");function u9(e,t){let n=Fs(e,pi).getEntry(t),s=new cg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{S0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(u9,"getDBIDefinition");function I0(e,t,r,n=!r){if(ug(e,t),t=t.toString(),t===pi)throw new Error(xn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fs(e,t)}catch(s){if(s.message===xn.DBI_DOES_NOT_EXIST){let i=new eI(r,n===!0),a=e.openDB(t,i),c=new cg(r===!0,n);return a[y0]=c,Fs(e,pi).putSync(t,c),e.dbis[t]=a,a}throw s}}o(I0,"createDBI");function Fs(e,t){if(ug(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==pi?r=u9(e,t):r=new cg,r===void 0)throw new Error(xn.DBI_DOES_NOT_EXIST);let n;try{let s=new eI(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(xn.DBI_DOES_NOT_EXIST):s}return n[y0]=r,e.dbis[t]=n,n}o(Fs,"openDBI");function d9(e,t){ug(e,t),t=t.toString();let r=Fs(e,t),n=r.getStats();return r[Ha.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(d9,"statDBI");async function f9(e,t){try{let r=ts.join(e,t+Qm);return(await mi.stat(r)).size}catch{throw new Error(xn.INVALID_ENVIRONMENT)}}o(f9,"environmentDataSize");function m9(e,t){if(ug(e,t),t=t.toString(),t===pi)throw new Error(xn.CANNOT_DROP_INTERNAL_DBIS_NAME);Fs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Fs(e,pi).removeSync(t)}o(m9,"dropDBI");function p9(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Fs(e,i)}catch(a){if(a.message===xn.DBI_DOES_NOT_EXIST)I0(e,i,i!==t,i===t),n=!0;else throw a}}n&&r9()}o(p9,"initializeDBIs");w0.exports={openDBI:Fs,openEnvironment:R0,createEnvironment:o9,listDBIs:b0,listDBIDefinitions:l9,createDBI:I0,dropDBI:m9,statDBI:d9,deleteEnvironment:c9,initializeDBIs:p9,TransactionCursor:Xb,environmentDataSize:f9,copyEnvironment:a9,closeEnvironment:A0}});var O0=v((MOe,C0)=>{"use strict";var nI=gt(),h9=Q(),N0=Yr().LMDB_ERRORS_ENUM;C0.exports=E9;async function E9(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await nI.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==N0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await nI.closeEnvironment(global.lmdb_map[n]),await nI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==N0.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){h9.error(t)}}o(E9,"cleanLMDBMap")});var Vi=v((UOe,L0)=>{"use strict";var P0=ce(),_9=(q(),M(W)),Yu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,$i=require("joi"),Ga={schema_format:{pattern:Yu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},g9=$i.alternatives($i.string().min(1).max(Ga.schema_length.maximum).pattern(Yu).messages({"string.pattern.base":"{:#label} "+Ga.schema_format.message}),$i.number(),$i.array()).required(),S9=$i.alternatives($i.string().min(1).max(Ga.schema_length.maximum).pattern(Yu).messages({"string.pattern.base":"{:#label} "+Ga.schema_format.message}),$i.number()),T9=$i.alternatives($i.string().min(1).max(Ga.schema_length.maximum).pattern(Yu).messages({"string.pattern.base":"{:#label} "+Ga.schema_format.message}),$i.number()).required();function y9(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Ga.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Yu.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(y9,"checkValidTable");function R9(e,t){return P0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(R9,"validateSchemaExists");function A9(e,t){let r=t.state.ancestors[0].schema;return P0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(A9,"validateTableExists");function b9(e,t){return e.toLowerCase()===_9.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(b9,"validateSchemaName");L0.exports={commonValidators:Ga,schemaRegex:Yu,hdbSchemaTable:g9,validateSchemaExists:R9,validateTableExists:A9,validateSchemaName:b9,checkValidTable:y9,hdbDatabase:S9,hdbTable:T9}});var iI=v((BOe,M0)=>{var{hdbTable:I9,hdbDatabase:D0}=Vi(),w9=ft(),sI=require("joi"),N9={undefined:"undefined",null:"null"},C9=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||N9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),O9=sI.object({database:D0,schema:D0,table:I9,records:sI.array().items(sI.object().custom(C9)).required()});M0.exports=function(e){return w9.validateBySchema(e,O9)}});var U0=v((kOe,v0)=>{"use strict";var oI=class{static{o(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};v0.exports=oI});var B0=v((GOe,x0)=>{"use strict";var aI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};x0.exports=aI});var k0=v(($Oe,F0)=>{"use strict";var cI=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};F0.exports=cI});var G0=v((KOe,H0)=>{"use strict";var lI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};H0.exports=lI});var ul=v((QOe,V0)=>{"use strict";var P9=gt(),L9=B0(),D9=k0(),M9=G0(),Ki=Pn(),Jm=Yr().LMDB_ERRORS_ENUM,v9=Vt(),ko=(q(),M(W)),U9=ce(),x9=require("uuid"),WOe=require("lmdb"),{handleHDBError:B9,hdbErrors:F9}=Ee(),{OVERFLOW_MARKER:zOe,MAX_SEARCH_KEY_LENGTH:jOe}=v9,q0=le();q0.initSync();var dg=q0.get(ko.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),uI=ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ll=ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function k9(e,t,r,n,s=Ki.getNextMonotonicTime()){pI(e,t,r,n),dI(e,t,r);let i=new L9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];$0(u,!0,s);let d=H9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return fI(a,c,n,i,s)}o(k9,"insertRecords");function H9(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][ko.FUNC_VAL],n[a]=c)}let l=Ki.getIndexedValues(c),u=e.dbis[a];if(l){dg&&u.prefetch(l.map(d=>({key:d,value:s})),fg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}dg&&e.dbis[t].prefetch([s],fg),e.dbis[t].put(s,n,n[ll])})}o(H9,"insertRecord");function G9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(G9,"removeSkippedRecords");function $0(e,t,r){let n=r>0;(n||!Number.isInteger(e[ll]))&&(e[ll]=r||(r=Ki.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[uI]))&&(e[uI]=r||Ki.getNextMonotonicTime()):delete e[uI]}o($0,"setTimestamps");function dI(e,t,r){r.indexOf(ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),P9.initializeDBIs(e,t,r)}o(dI,"initializeTransaction");async function q9(e,t,r,n,s=Ki.getNextMonotonicTime()){pI(e,t,r,n),dI(e,t,r);let i=new D9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=mI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return fI(c,l,n,i,s,a)}o(q9,"updateRecords");async function $9(e,t,r,n,s=Ki.getNextMonotonicTime()){try{pI(e,t,r,n)}catch(l){throw B9(l,l.message,F9.HTTP_STATUS_CODES.BAD_REQUEST)}dI(e,t,r);let i=new M9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;U9.isEmpty(u[t])?(d=x9.v4(),u[t]=d):d=u[t];let f=mI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return fI(a,c,n,i,s)}o($9,"upsertRecords");async function fI(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ki.getNextMonotonicTime(),G9(r,i),n}o(fI,"finalizeWrite");function mI(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if($0(r,!d,a),Number.isInteger(r[ll])&&u[ll]>r[ll])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let A=u[h];if(typeof E=="function"){let T=E([[u]]);Array.isArray(T)&&(E=T[0][ko.FUNC_VAL],r[h]=E)}if(E===A)continue;let S=Ki.getIndexedValues(A);if(S){dg&&g.prefetch(S.map(T=>({key:T,value:n})),fg);for(let T=0,w=S.length;T<w;T++)g.remove(S[T],n)}if(S=Ki.getIndexedValues(E),S){dg&&g.prefetch(S.map(T=>({key:T,value:n})),fg);for(let T=0,w=S.length;T<w;T++)g.put(S[T],n)}}let p={...u,...r};c.put(n,p,p[ll])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:mI(e,t,r,n,s,i,a))}o(mI,"updateUpsertRecord");function V9(e,t,r){if(Ki.validateEnv(e),t===void 0)throw new Error(Jm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Jm.WRITE_ATTRIBUTES_REQUIRED):new Error(Jm.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(V9,"validateBasic");function pI(e,t,r,n){if(V9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Jm.RECORDS_REQUIRED):new Error(Jm.RECORDS_MUST_BE_ARRAY)}o(pI,"validateWrite");function fg(){}o(fg,"noop");V0.exports={insertRecords:k9,updateRecords:q9,upsertRecords:$9}});var Yi=v((XOe,K9)=>{K9.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Y0=v((ZOe,K0)=>{"use strict";var Y9=require("uuid"),hI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||Y9.v4(),this.schema_table=`${this.schema}.${this.table}`}};K0.exports=hI});var mg=v((tPe,W0)=>{"use strict";var W9=Y0(),EI=class extends W9{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};W0.exports=EI});var j0=v((nPe,z0)=>{"use strict";z0.exports=j9;var z9="inserted";function j9(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===z9?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(j9,"returnObject")});var pg=v((oPe,J0)=>{"use strict";var Q9=(q(),M(W)),_I=gt(),J9=ul(),{getSystemSchemaPath:X9,getSchemaPath:Z9}=At(),iPe=Yi(),{validateBySchema:e7}=ft(),Xm=require("joi"),t7=mg(),r7=j0(),{handleHDBError:n7,hdbErrors:s7,ClientError:i7}=Ee(),Q0=ce(),{HTTP_STATUS_CODES:o7}=s7,a7="inserted";J0.exports=c7;async function c7(e){let t=e7(e,Xm.object({database:Xm.string(),schema:Xm.string(),table:Xm.string().required(),attribute:Xm.string().required()}));if(t)throw new i7(t.message);let r=!e.skip_table_check&&Q0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw n7(new Error,r,o7.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Q0.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 t7(e.schema,e.table,e.attribute,e.id);try{let i=await _I.openEnvironment(Z9(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);_I.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await _I.openEnvironment(X9(),Q9.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await J9.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return r7(a7,c,{records:[s]},l)}catch(i){throw i}}o(c7,"lmdbCreateAttribute")});var Zm=v((lPe,Z0)=>{"use strict";var Ho=ce(),X0=Q(),cPe=iI(),{getDatabases:l7}=(Pe(),M(pt)),{ClientError:dl}=Ee();Z0.exports=u7;function u7(e){if(Ho.isEmpty(e))throw new dl("invalid update parameters defined.");if(Ho.isEmptyOrZeroLength(e.schema))throw new dl("invalid schema specified.");if(Ho.isEmptyOrZeroLength(e.table))throw new dl("invalid table specified.");if(!Array.isArray(e.records))throw new dl("records must be an array");let t=l7()[e.schema]?.[e.table];if(Ho.isEmpty(t))throw new dl(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Ho.isEmptyOrZeroLength(a[r]))throw X0.error("a valid hash attribute must be provided with update record:",a),new dl("a valid hash attribute must be provided with update record, check log for more info");if(!Ho.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw X0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new dl(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Ho.isEmpty(a[r])&&a[r]!==""&&n.has(Ho.autoCast(a[r]))&&(a.skip=!0),n.add(Ho.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(u7,"insertUpdateValidate")});var hg=v((dPe,tB)=>{"use strict";var eB=ce(),d7=(q(),M(W)),f7=Q(),m7=pg(),p7=mg(),h7=Go(),{SchemaEventMsg:E7}=rs(),_7="already exists in";tB.exports=g7;async function g7(e,t,r){if(eB.isEmptyOrZeroLength(r))return r;let n=[];eB.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 S7(e,t.schema,t.name,i)})),s}o(g7,"lmdbCheckForNewAttributes");async function S7(e,t,r,n){let s=new p7(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await T7(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(_7))f7.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(S7,"createNewAttribute");async function T7(e){let t;return t=await m7(e),h7.signalSchemaChange(new E7(process.pid,d7.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(T7,"createAttribute")});var Wu=v((mPe,rB)=>{"use strict";var gI=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};rB.exports=gI});var sB=v((hPe,nB)=>{"use strict";var y7=Wu(),R7=(q(),M(W)).OPERATIONS_ENUM,SI=class extends y7{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(R7.INSERT,r,n,s,i),this.records=t}};nB.exports=SI});var oB=v((_Pe,iB)=>{"use strict";var A7=Wu(),b7=(q(),M(W)).OPERATIONS_ENUM,TI=class extends A7{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(b7.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};iB.exports=TI});var cB=v((SPe,aB)=>{"use strict";var I7=Wu(),w7=(q(),M(W)).OPERATIONS_ENUM,yI=class extends I7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(w7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};aB.exports=yI});var uB=v((yPe,lB)=>{"use strict";var N7=Wu(),C7=(q(),M(W)).OPERATIONS_ENUM,RI=class extends N7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(C7.DELETE,n,s,t,i),this.original_records=r}};lB.exports=RI});var ep=v((bPe,pB)=>{"use strict";var APe=require("path"),dB=gt(),O7=sB(),P7=oB(),L7=cB(),D7=uB(),zu=Vt(),fB=ce(),{CONFIG_PARAMS:M7}=(q(),M(W)),mB=le();mB.initSync();var Eg=(q(),M(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:v7}=At();pB.exports=U7;async function U7(e,t){if(mB.get(M7.LOGGING_AUDITLOG)===!1)return;let r=v7(e.schema,e.table),n=await dB.openEnvironment(r,e.table,!0),s=x7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){dB.initializeDBIs(n,zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),fB.isEmpty(s.user_name)||n.dbis[zu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[zu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(U7,"writeTransaction");function x7(e,t){let r=fB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Eg.INSERT)return new O7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.UPDATE)return new P7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.UPSERT)return new L7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.DELETE)return new D7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(x7,"createTransactionObject")});var AI=v((NPe,hB)=>{"use strict";var B7=Zm(),wPe=gm(),tp=(q(),M(W)),F7=Sm(),k7=ul().insertRecords,H7=gt(),G7=Q(),q7=hg(),{getSchemaPath:$7}=At(),V7=ep();hB.exports=K7;async function K7(e){try{let{schemaTable:t,attributes:r}=B7(e);F7(e,r,t.hash_attribute),e.schema!==tp.SYSTEM_SCHEMA_NAME&&(r.includes(tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await q7(e.hdb_auth_header,t,r),s=$7(e.schema,e.table),i=await H7.openEnvironment(s,e.table),a=await k7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await V7(e,a)}catch(c){G7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(K7,"lmdbCreateRecords")});var gB=v((OPe,_B)=>{"use strict";var EB=(q(),M(W)),Y7=AI(),W7=gm(),z7=require("fs-extra"),{getSchemaPath:j7}=At();_B.exports=Q7;async function Q7(e){let t=[{name:e.schema,createddate:Date.now()}],r=new W7(EB.SYSTEM_SCHEMA_NAME,EB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Y7(r),await z7.mkdirp(j7(e.schema))}o(Q7,"lmdbCreateSchema")});var TB=v((LPe,SB)=>{"use strict";var bI=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};SB.exports=bI});var bB=v((xPe,AB)=>{"use strict";var yB=gt(),II=Pn(),wI=Yr().LMDB_ERRORS_ENUM,J7=Vt(),RB=Q(),MPe=ce(),X7=require("lmdb"),Z7=TB(),eee=(q(),M(W)),{OVERFLOW_MARKER:vPe,MAX_SEARCH_KEY_LENGTH:UPe}=J7,tee=eee.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ree(e,t,r,n){if(II.validateEnv(e),t===void 0)throw new Error(wI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(wI.IDS_REQUIRED):new Error(wI.IDS_MUST_BE_ITERABLE);try{let s=yB.listDBIs(e);yB.initializeDBIs(e,t,s);let i=new Z7,a,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{a=r[m];let h=e.dbis[t].get(a);if(!h||n&&h[tee]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,X7.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let A=s[g];if(!h.hasOwnProperty(A)||A===t)continue;let S=e.dbis[A],T=h[A];if(T!=null)try{let w=II.getIndexedValues(T);if(w)for(let L=0,k=w.length;L<k;L++)S.remove(w[L],a)}catch{RB.warn(`cannot delete from attribute: ${A}, ${T}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){RB.warn(h),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=II.getNextMonotonicTime(),i}catch(s){throw s}}o(ree,"deleteRecords");AB.exports={deleteRecords:ree}});var rp=v((FPe,wB)=>{"use strict";var ju=ce(),nee=bB(),see=gt(),{getSchemaPath:iee}=At(),oee=ep(),aee=Q();wB.exports=cee;async function cee(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(ju.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(ju.isEmptyOrZeroLength(e.hash_values)&&!ju.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];ju.isEmpty(l)||e.hash_values.push(l)}}if(ju.isEmptyOrZeroLength(e.hash_values))return IB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(ju.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=iee(e.schema,e.table),i=await see.openEnvironment(s,e.table),a=await nee.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await oee(e,a)}catch(c){aee.error(`unable to write transaction due to ${c.message}`)}return IB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(cee,"lmdbDeleteRecords");function IB(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(IB,"createDeleteResponse")});var CI=v((GPe,NB)=>{"use strict";var lee=(q(),M(W)),HPe=Pn();function NI(e,t){let r=Object.create(null);if(t.length===1&&lee.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(NI,"parseRow");function uee(e,t,r,n){let s=NI(r,e);n.push(s)}o(uee,"searchAll");function dee(e,t,r,n){let s=NI(r,e);n[t]=s}o(dee,"searchAllToMap");function fee(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(fee,"iterateDBI");function fl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(fl,"pushResults");function mee(e,t,r,n,s,i){t.toString().endsWith(e)&&fl(t,r,n,s,i)}o(mee,"endsWith");function pee(e,t,r,n,s,i){t.toString().includes(e)&&fl(t,r,n,s,i)}o(pee,"contains");function hee(e,t,r,n,s,i){t>e&&fl(t,r,n,s,i)}o(hee,"greaterThanCompare");function Eee(e,t,r,n,s,i){t>=e&&fl(t,r,n,s,i)}o(Eee,"greaterThanEqualCompare");function _ee(e,t,r,n,s,i){t<e&&fl(t,r,n,s,i)}o(_ee,"lessThanCompare");function gee(e,t,r,n,s,i){t<=e&&fl(t,r,n,s,i)}o(gee,"lessThanEqualCompare");NB.exports={parseRow:NI,searchAll:uee,searchAllToMap:dee,iterateDBI:fee,endsWith:mee,contains:pee,greaterThanCompare:hee,greaterThanEqualCompare:Eee,lessThanCompare:_ee,lessThanEqualCompare:gee,pushResults:fl}});var Qu=v((YPe,vB)=>{"use strict";var qa=gt(),$Pe=Q(),ns=Pn(),_g=Vt(),nr=Yr().LMDB_ERRORS_ENUM,VPe=ce(),See=(q(),M(W)),gg=CI(),{parseRow:Tee}=gg,KPe=require("lmdb"),{OVERFLOW_MARKER:CB,MAX_SEARCH_KEY_LENGTH:yee}=_g;function OB(e,t,r,n=!1,s=void 0,i=void 0){return ml(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(OB,"iterateFullIndex");function np(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ml(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(T=>({value:T}))):f.getRange(S)})}o(np,"iterateRangeBetween");function ml(e,t,r,n){let s=e.database||e,i=qa.openDBI(s,r);i[_g.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&qa.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(ml,"setupTransaction");function PB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(CB)){if(!s)if(r)s=qa.openDBI(e,r);else{let l=qa.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=qa.openDBI(e,l[u]),!s[_g.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(PB,"getOverflowCheck");function Ree(e,t,r,n=!1,s=void 0,i=void 0){if(ns.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return ml(e,t,t,(a,c,l)=>(Sg(r),r=sp(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Tee(u.value,r))))}o(Ree,"searchAll");function Aee(e,t,r,n=!1,s=void 0,i=void 0){if(ns.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);Sg(r),r=sp(e.database||e,r);let a=new Map;for(let{key:c,value:l}of OB(e,t,t,n,s,i))a.set(c,gg.parseRow(l,r));return a}o(Aee,"searchAllToMap");function bee(e,t,r=!1,n=void 0,s=void 0){if(ns.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=OB(e,void 0,t,r,n,s),c=a.transaction,l=PB(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(bee,"iterateDBI");function Iee(e,t){if(ns.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return qa.statDBI(e,t).entryCount}o(Iee,"countAll");function wee(e,t,r,n,s=!1,i=void 0,a=void 0){return $a(e,r,n),ml(e,t,r,(c,l,u,d)=>(n=ns.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(wee,"equals");function Nee(e,t,r){return $a(e,t,r),qa.openDBI(e,t).getValuesCount(r)}o(Nee,"count");function Cee(e,t,r,n,s=!1,i=void 0,a=void 0){return $a(e,r,n),ml(e,null,r,(c,l)=>{n=ns.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(Cee,"startsWith");function Oee(e,t,r,n,s=!1,i=void 0,a=void 0){return LB(e,t,r,n,s,i,a,!0)}o(Oee,"endsWith");function LB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return $a(e,r,n),ml(e,null,r,(l,u,d,f)=>{let m=PB(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(CB)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[_g.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(LB,"contains");function Pee(e,t,r,n,s=!1,i=void 0,a=void 0){$a(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),np(e,t,r,n,l,s,i,a,!0,!1)}o(Pee,"greaterThan");function Lee(e,t,r,n,s=!1,i=void 0,a=void 0){$a(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),np(e,t,r,n,l,s,i,a,!1,!1)}o(Lee,"greaterThanEqual");function Dee(e,t,r,n,s=!1,i=void 0,a=void 0){$a(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),np(e,t,r,l,n,s,i,a,!1,!0)}o(Dee,"lessThan");function Mee(e,t,r,n,s=!1,i=void 0,a=void 0){$a(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),np(e,t,r,l,n,s,i,a,!1,!1)}o(Mee,"lessThanEqual");function vee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(ns.validateEnv(e),r===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(nr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(nr.END_VALUE_REQUIRED);if(n=ns.convertKeyValueToWrite(n),s=ns.convertKeyValueToWrite(s),n>s)throw new Error(nr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return np(e,t,r,n,s,i,a,c)}o(vee,"between");function Uee(e,t,r,n){ns.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(Sg(r),r=sp(s,r),n===void 0)throw new Error(nr.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=gg.parseRow(c,r)),a}o(Uee,"searchByHash");function xee(e,t,r){ns.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(nr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(xee,"checkHashExists");function Bee(e,t,r,n,s=[]){return MB(e,t,r,n,s),DB(e,t,r,n,s).map(i=>i[1])}o(Bee,"batchSearchByHash");function Fee(e,t,r,n,s=[]){MB(e,t,r,n,s);let i=new Map;for(let[a,c]of DB(e,t,r,n,s))i.set(a,c);return i}o(Fee,"batchSearchByHashToMap");function DB(e,t,r,n,s=[]){return ml(e,t,t,(i,a,c)=>{r=sp(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,gg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(DB,"batchHashSearch");function MB(e,t,r,n,s){if(ns.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(Sg(r),n==null)throw new Error(nr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(nr.IDS_MUST_BE_ITERABLE)}o(MB,"initializeBatchSearchByHash");function Sg(e){if(!Array.isArray(e))throw e===void 0?new Error(nr.FETCH_ATTRIBUTES_REQUIRED):new Error(nr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(Sg,"validateFetchAttributes");function $a(e,t,r){if(ns.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(nr.SEARCH_VALUE_REQUIRED);if(r?.length>yee)throw new Error(nr.SEARCH_VALUE_TOO_LARGE)}o($a,"validateComparisonFunctions");function sp(e,t){return t.length===1&&See.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=qa.listDBIs(e)),t}o(sp,"setGetWholeRowAttributes");vB.exports={searchAll:Ree,searchAllToMap:Aee,count:Nee,countAll:Iee,equals:wee,startsWith:Cee,endsWith:Oee,contains:LB,searchByHash:Uee,setGetWholeRowAttributes:sp,batchSearchByHash:Bee,batchSearchByHashToMap:Fee,checkHashExists:xee,iterateDBI:bee,greaterThan:Pee,greaterThanEqual:Lee,lessThan:Dee,lessThanEqual:Mee,between:vee}});var Ju=v((zPe,kB)=>{var UB=require("lodash"),xB=ft(),Ke=require("joi"),kee=ce(),{hdbSchemaTable:ip,checkValidTable:BB,hdbTable:FB,hdbDatabase:Tg}=Vi(),{handleHDBError:Hee,hdbErrors:Gee}=Ee(),{getDatabases:qee}=(Pe(),M(pt)),{HTTP_STATUS_CODES:$ee}=Gee,Vee=Ke.object({database:Tg,schema:Tg,table:FB,attribute:ip,value:Ke.any().required(),get_attributes:Ke.array().min(1).items(Ke.alternatives(ip,Ke.object())).optional(),desc:Ke.bool(),limit:Ke.number().integer().min(1),offset:Ke.number().integer().min(0)}),Kee=Ke.object({database:Tg,schema:Tg,table:FB,operator:Ke.string().valid("and","or").default("and").lowercase(),offset:Ke.number().integer().min(0),limit:Ke.number().integer().min(1),get_attributes:Ke.array().min(1).items(Ke.alternatives(ip,Ke.object())).optional(),sort:Ke.object({attribute:Ke.alternatives(ip,Ke.array().min(1)),descending:Ke.bool().optional()}).optional(),conditions:Ke.array().min(1).items(Ke.alternatives(Ke.object({operator:Ke.string().valid("and","or").default("and").lowercase(),conditions:Ke.array()}),Ke.object({attribute:Ke.alternatives(ip,Ke.array().min(1)),comparator:Ke.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Ke.when("comparator",{switch:[{is:"equals",then:Ke.any()},{is:"between",then:Ke.array().items(Ke.alternatives([Ke.string(),Ke.number()])).length(2)}],otherwise:Ke.alternatives(Ke.string(),Ke.number())}).required()}))).required()});kB.exports=function(e,t){let r=null;switch(t){case"value":r=xB.validateBySchema(e,Vee);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(BB("database",e.schema)),i(BB("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=xB.validateBySchema(e,Kee);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=kee.checkGlobalSchemaTable(e.schema,e.table);if(s)return Hee(new Error,s,$ee.NOT_FOUND);let a=qee()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=o(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=UB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!UB.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var OI=v((QPe,HB)=>{"use strict";var Yee=gt(),Wee=Ju(),{getSchemaPath:zee}=At();HB.exports=jee;function jee(e){let t=Wee(e,"hashes");if(t)throw t;let r=zee(e.schema,e.table);return Yee.openEnvironment(r,e.table)}o(jee,"initialize")});var PI=v((XPe,GB)=>{"use strict";var Qee=Qu(),Jee=OI();GB.exports=Xee;async function Xee(e){let t=await Jee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Qee.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(Xee,"lmdbGetDataByHash")});var Xu=v((eLe,qB)=>{"use strict";var LI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};qB.exports=LI});var VB=v((nLe,$B)=>{"use strict";var rLe=Xu(),Zee=Qu(),ete=OI();$B.exports=tte;async function tte(e){let t=await ete(e),r=global.hdb_schema[e.schema][e.table];return Zee.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(tte,"lmdbSearchByHash")});var hi=v((iLe,KB)=>{"use strict";var DI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};KB.exports=DI});var yg=v((aLe,JB)=>{"use strict";var un=Qu(),rte=gt(),nte=ce(),Ye=Vt(),pl=(q(),M(W)),ste=Yi(),YB=Yr().LMDB_ERRORS_ENUM,{getSchemaPath:ite}=At(),qo=pl.SEARCH_WILDCARDS;async function ote(e,t,r){let n;e.schema===pl.SYSTEM_SCHEMA_NAME?n=ste[e.table]:n=global.hdb_schema[e.schema][e.table];let s=QB(e,n.hash_attribute,r,t);return zB(e,s,n.hash_attribute,r)}o(ote,"prepSearch");async function zB(e,t,r,n){let s=ite(e.schema,e.table),i=await rte.openEnvironment(s,e.table),a=jB(i,e,t,r),c=a.transaction||i;if([Ye.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ye.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ye.SEARCH_TYPES.SEARCH_ALL,Ye.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(ate(e,r)===!1){let d=e.attribute;if(d===r)return n?WB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?WB(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?un.batchSearchByHashToMap(c,r,e.get_attributes,u):un.batchSearchByHash(c,r,e.get_attributes,u)}o(zB,"executeSearch");function jB(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Ye.SEARCH_TYPES.EQUALS:s=un.equals(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.CONTAINS:s=un.contains(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.ENDS_WITH:case Ye.SEARCH_TYPES._ENDS_WITH:s=un.endsWith(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.STARTS_WITH:case Ye.SEARCH_TYPES._STARTS_WITH:s=un.startsWith(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return un.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case Ye.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return un.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case Ye.SEARCH_TYPES.SEARCH_ALL:return un.searchAll(e,n,t.get_attributes,a,c,l);case Ye.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return un.searchAllToMap(e,n,t.get_attributes,a,c,l);case Ye.SEARCH_TYPES.BETWEEN:s=un.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case Ye.SEARCH_TYPES.GREATER_THAN:case Ye.SEARCH_TYPES._GREATER_THAN:s=un.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ye.SEARCH_TYPES._GREATER_THAN_EQUAL:s=un.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.LESS_THAN:case Ye.SEARCH_TYPES._LESS_THAN:s=un.lessThan(e,i,t.attribute,t.value,a,c,l);break;case Ye.SEARCH_TYPES.LESS_THAN_EQUAL:case Ye.SEARCH_TYPES._LESS_THAN_EQUAL:s=un.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(jB,"searchByType");function WB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(WB,"createMapFromIterable");function ate(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(ate,"checkToFetchMore");function QB(e,t,r,n){if(nte.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),qo.indexOf(s)>-1)return r===!0?Ye.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ye.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(qo[0])<0&&s.indexOf(qo[1])<0)return c===!0?r===!0?Ye.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ye.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ye.SEARCH_TYPES.EQUALS;if(qo.indexOf(i)>=0&&qo.indexOf(a)>=0)return e.value=e.value.slice(1,-1),Ye.SEARCH_TYPES.CONTAINS;if(qo.indexOf(i)>=0)return e.value=e.value.substr(1),Ye.SEARCH_TYPES.ENDS_WITH;if(qo.indexOf(a)>=0)return e.value=e.value.slice(0,-1),Ye.SEARCH_TYPES.STARTS_WITH;if(s.includes(qo[0])||s.includes(qo[1]))return Ye.SEARCH_TYPES.EQUALS;throw new Error(YB.UNKNOWN_SEARCH_TYPE)}else switch(n){case pl.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ye.SEARCH_TYPES.BETWEEN;case pl.VALUE_SEARCH_COMPARATORS.GREATER:return Ye.SEARCH_TYPES.GREATER_THAN;case pl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ye.SEARCH_TYPES.GREATER_THAN_EQUAL;case pl.VALUE_SEARCH_COMPARATORS.LESS:return Ye.SEARCH_TYPES.LESS_THAN;case pl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ye.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(YB.UNKNOWN_SEARCH_TYPE)}}o(QB,"createSearchTypeFromSearchObject");JB.exports={executeSearch:zB,createSearchTypeFromSearchObject:QB,prepSearch:ote,searchByType:jB}});var ZB=v((uLe,XB)=>{"use strict";var lLe=hi(),cte=Ju(),lte=ce(),ute=(q(),M(W)),dte=yg();XB.exports=fte;function fte(e,t){if(!lte.isEmpty(t)&&ute.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=cte(e,"value");if(n)throw n;return dte.prepSearch(e,t,!0)}o(fte,"lmdbGetDataByValue")});var op=v((mLe,eF)=>{"use strict";var fLe=hi(),mte=Ju(),pte=ce(),hte=(q(),M(W)),Ete=yg();eF.exports=_te;async function _te(e,t){if(!pte.isEmpty(t)&&hte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=mte(e,"value");if(n)throw n;return Ete.prepSearch(e,t,!1)}o(_te,"lmdbSearchByValue")});var rF=v((ELe,tF)=>{"use strict";var hLe=Vt(),MI=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},vI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},UI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};tF.exports={SearchByConditionsObject:MI,SearchCondition:vI,SortAttribute:UI}});var aF=v((yLe,oF)=>{"use strict";var{SearchByConditionsObject:gLe,SearchCondition:SLe}=rF(),gte=hi(),Ste=Ju(),xI=Qu(),Rg=Vt(),{Resource:TLe}=(Fa(),M(r0)),iF=yg(),Tte=CI(),yte=require("lodash"),{getSchemaPath:Rte}=At(),nF=gt(),{handleHDBError:Ate,hdbErrors:bte}=Ee(),{HTTP_STATUS_CODES:Ite}=bte,wte=1e8;oF.exports=Nte;async function Nte(e){let t=Ste(e,"conditions");if(t)throw Ate(t,t.message,Ite.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=Rte(e.schema,e.table),n=await nF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)nF.openDBI(n,u.attribute);let i=yte.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Rg.SEARCH_TYPES.EQUALS?u.estimated_count=xI.count(n,u.attribute,u.value):d===Rg.SEARCH_TYPES.CONTAINS||d===Rg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=wte}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await sF(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(iF.filterByType),f=d.length,m=xI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:a,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>Tte.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await sF(a,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=xI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(Nte,"lmdbSearchByConditions");async function sF(e,t,r,n){let s=new gte(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Rg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,iF.searchByType(e,s,i,n).map(a=>a.value)}o(sF,"executeConditionSearch")});var ap=v((ALe,cF)=>{"use strict";var Cte=(q(),M(W)).OPERATIONS_ENUM,BI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=Cte.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};cF.exports=BI});var FI=v((ILe,EF)=>{"use strict";var fF=hi(),mF=ap(),pF=op(),hF=rp(),Bn=(q(),M(W)),lF=ce(),uF=gt(),{getTransactionAuditStorePath:Ote,getSchemaPath:Pte}=At(),dF=Q();EF.exports=Lte;async function Lte(e){try{if(lF.isEmpty(global.hdb_schema[e.schema])||lF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Dte(e),await Mte(e);let t=Pte(e.schema,e.table);try{await uF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")dF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Ote(e.schema,e.table);await uF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")dF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(Lte,"lmdbDropTable");async function Dte(e){let t=new fF(Bn.SYSTEM_SCHEMA_NAME,Bn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Bn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Bn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await pF(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new mF(Bn.SYSTEM_SCHEMA_NAME,Bn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await hF(s)}o(Dte,"deleteAttributesFromSystem");async function Mte(e){let t=new fF(Bn.SYSTEM_SCHEMA_NAME,Bn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Bn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Bn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Bn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Bn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await pF(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new mF(Bn.SYSTEM_SCHEMA_NAME,Bn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await hF(s)}catch(i){throw i}}o(Mte,"dropTableFromSystem")});var gF=v((NLe,_F)=>{"use strict";var vte=require("fs-extra"),Ute=hi(),xte=Xu(),Bte=ap(),Fte=FI(),kte=rp(),Hte=PI(),Gte=op(),$o=(q(),M(W)),{getSchemaPath:qte}=At(),{handleHDBError:$te,hdbErrors:Vte}=Ee(),{HDB_ERROR_MSGS:Kte,HTTP_STATUS_CODES:Yte}=Vte;_F.exports=Wte;async function Wte(e){let t;try{t=await zte(e.schema);let r=new Ute($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,$o.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[$o.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Gte(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await Fte(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Bte($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await kte(s);let i=qte(t);await vte.remove(i)}catch(r){throw r}}o(Wte,"lmdbDropSchema");async function zte(e){let t=new xte($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[$o.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Hte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw $te(new Error,Kte.SCHEMA_NOT_FOUND(e),Yte.NOT_FOUND,void 0,void 0,!0);return n}o(zte,"validateDropSchema")});var cp=v((OLe,SF)=>{"use strict";var kI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};SF.exports=kI});var GI=v((DLe,TF)=>{"use strict";var jte=require("fs-extra"),Ag=gt(),{getTransactionAuditStorePath:Qte}=At(),HI=Vt(),LLe=cp();TF.exports=Jte;async function Jte(e){let t;try{let r=Qte(e.schema,e.table);await jte.mkdirp(r),t=await Ag.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{Ag.createDBI(t,HI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Ag.createDBI(t,HI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Ag.createDBI(t,HI.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(Jte,"createTransactionsAuditEnvironment")});var AF=v((ULe,RF)=>{"use strict";var qI=(q(),M(W)),yF=gt(),Xte=ul(),{getSystemSchemaPath:Zte,getSchemaPath:ere}=At(),vLe=Yi(),tre=pg(),$I=mg(),rre=Q(),nre=GI();RF.exports=sre;async function sre(e,t){let r=ere(t.schema,t.table),n=new $I(t.schema,t.table,qI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new $I(t.schema,t.table,qI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new $I(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await yF.createEnvironment(r,t.table),e!==void 0){let a=await yF.openEnvironment(Zte(),qI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Xte.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await VI(n),await VI(s),await VI(i)}await nre(t)}catch(a){throw a}}o(sre,"lmdbCreateTable");async function VI(e){try{await tre(e)}catch(t){rre.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(VI,"createAttribute")});var IF=v((BLe,bF)=>{"use strict";var ire=Zm(),ore=Sm(),are=hg(),lp=(q(),M(W)),cre=ul().updateRecords,lre=gt(),{getSchemaPath:ure}=At(),dre=ep(),fre=Q();bF.exports=mre;async function mre(e){try{let{schemaTable:t,attributes:r}=ire(e);ore(e,r,t.hash_attribute),e.schema!==lp.SYSTEM_SCHEMA_NAME&&(r.includes(lp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(lp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(lp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(lp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await are(e.hdb_auth_header,t,r),s=ure(e.schema,e.table),i=await lre.openEnvironment(s,e.table),a=await cre(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await dre(e,a)}catch(c){fre.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(mre,"lmdbUpdateRecords")});var NF=v((kLe,wF)=>{"use strict";var pre=(q(),M(W)).OPERATIONS_ENUM,KI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=pre.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};wF.exports=KI});var OF=v((qLe,CF)=>{"use strict";var GLe=NF(),hre=Zm(),Ere=Sm(),_re=hg(),up=(q(),M(W)),gre=ul().upsertRecords,Sre=gt(),{getSchemaPath:Tre}=At(),yre=ep(),Rre=Q(),{handleHDBError:Are,hdbErrors:bre}=Ee();CF.exports=Ire;async function Ire(e){let t;try{t=hre(e)}catch(l){throw Are(l,l.message,bre.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Ere(e,n,r.hash_attribute),e.schema!==up.SYSTEM_SCHEMA_NAME&&(n.includes(up.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(up.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(up.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(up.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await _re(e.hdb_auth_header,r,n),i=Tre(e.schema,e.table),a=await Sre.openEnvironment(i,e.table),c=await gre(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await yre(e,c)}catch(l){Rre.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o(Ire,"lmdbUpsertRecords")});var LF=v((VLe,PF)=>{"use strict";var YI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};PF.exports=YI});var MF=v((YLe,DF)=>{"use strict";var WI=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};DF.exports=WI});var xF=v((jLe,UF)=>{"use strict";var zI=gt(),{getTransactionAuditStorePath:wre}=At(),zLe=LF(),dp=Vt(),Nre=ce(),vF=MF(),Cre=require("util").promisify,Ore=Cre(setTimeout),Pre=1e4,Lre=100;UF.exports=Dre;async function Dre(e){let t=wre(e.schema,e.table),r=await zI.openEnvironment(t,e.table,!0),n=zI.listDBIs(r);zI.initializeDBIs(r,dp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new vF;do s=await Mre(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 Ore(Lre);while(s.transactions_deleted>0);return i}o(Dre,"deleteAuditLogsBefore");async function Mre(e,t){let r=new vF;try{let n=e.dbis[dp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[dp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Nre.isEmpty(c)||(s=e.dbis[dp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[dp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Pre)break}return await s,r}catch(n){throw n}}o(Mre,"deleteTransactions")});var FF=v((JLe,BF)=>{"use strict";var jI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};BF.exports=jI});var HF=v((eDe,kF)=>{"use strict";var vre=hi(),Ure=ap(),ZLe=FF(),Wi=(q(),M(W)),xre=ce(),QI=gt(),Bre=Yi(),Fre=op(),kre=rp(),{getSchemaPath:Hre}=At();kF.exports=Gre;async function Gre(e,t=!0){let r;e.schema===Wi.SYSTEM_SCHEMA_NAME?r=Bre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await $re(e),s=Hre(e.schema,e.table),i=await QI.openEnvironment(s,e.table);return t===!0&&await qre(e,i,r.hash_attribute),QI.dropDBI(i,e.attribute),n}o(Gre,"lmdbDropAttribute");async function qre(e,t,r){let n=QI.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(qre,"removeAttributeFromAllObjects");async function $re(e){let t=new vre(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 Fre(t)).filter(a=>a[Wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(xre.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(a=>a[Wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Ure(Wi.SYSTEM_SCHEMA_NAME,Wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return kre(i)}o($re,"dropAttributeFromSystem")});var YF=v((nDe,KF)=>{"use strict";var JI=gt(),Zu=Vt(),rDe=Pn(),XI=(q(),M(W)),GF=ce(),{getTransactionAuditStorePath:Vre}=At(),Kre=Qu(),bg=Wu(),Yre=Q();KF.exports=Wre;async function Wre(e){let t=Vre(e.schema,e.table),r=await JI.openEnvironment(t,e.table,!0),n=JI.listDBIs(r);JI.initializeDBIs(r,Zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case XI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return qF(r,e.search_values);case XI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,jre(r,e.search_values,s);case XI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return zre(r,e.search_values);default:return qF(r)}}o(Wre,"readAuditLog");function qF(e,t=[0,Date.now()]){GF.isEmpty(t[0])&&(t[0]=0),GF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zu.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 bg,s))}o(qF,"searchTransactionsByTimestamp");function zre(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Zu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,VF(e,i))}return Object.fromEntries(r)}o(zre,"searchTransactionsByUsername");function jre(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Kre.equals(e,Zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=VF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);$F(l,"records",r,d,a),$F(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(jre,"searchTransactionsByHashValues");function $F(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new bg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new bg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o($F,"loopRecords");function VF(e,t){let r=[];try{let n=e.dbis[Zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new bg,i);r.push(a)}}catch(i){Yre.warn(i)}return r}catch(n){throw n}}o(VF,"batchSearchTransactions")});var zF=v((aDe,WF)=>{"use strict";var{getSchemaPath:iDe}=At(),oDe=gt(),{database:Qre}=(Pe(),M(pt));WF.exports={writeTransaction:Jre};async function Jre(e,t,r){return Qre({database:e,table:t}).transaction(r)}o(Jre,"writeTransaction")});var XF=v((lDe,JF)=>{"use strict";var{getSchemaPath:jF}=At(),QF=gt();JF.exports={flush:Xre,resetReadTxn:Zre};async function Xre(e,t){return(await QF.openEnvironment(jF(e,t),t.toString())).flushed}o(Xre,"flush");async function Zre(e,t){try{(await QF.openEnvironment(jF(e,t),t.toString())).resetReadTxn()}catch{}}o(Zre,"resetReadTxn")});var rk=v((dDe,tk)=>{"use strict";var{Readable:ene}=require("stream"),{getDatabases:tne}=(Pe(),M(pt)),{readSync:rne,openSync:nne,createReadStream:ZF}=require("fs"),{open:sne}=require("lmdb"),{OpenDBIObject:ek}=zm(),ine=jm(),{AUDIT_STORE_OPTIONS:one}=(No(),M(hx)),{INTERNAL_DBIS_NAME:ane,AUDIT_STORE_NAME:cne}=Vt();tk.exports=une;var ZI=32768,lne=100;async function une(e){let t=e.database||e.schema||"data",r=tne()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=sne({noSync:!0,maxDbs:ine.MAX_DBS}),m,p=f.openDB(ane,new ek(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,T){T.encoding="binary",T.encoder=void 0;let w=f.openDB(S,T),L=d.openDB(S,T);for(let{key:k,version:te,value:F}of L.getRange({start:null,transaction:h,versions:L.useVersions}))m=w.put(k,F,te),E++%lne===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:T}of d.getRange({transaction:h,start:!1}))if(s.some(w=>S.startsWith?.(w+"/"))){p.put(S,T);let[,w]=S.split("/"),L=!w,k=new ek(!L,L);await g(S,k)}e.include_audit&&await g(cne,{...one}),await m;let A=ZF(f.path);return A.headers=l(),A.on("close",()=>{h.done(),f.close()}),A}let a=r[Object.keys(r)[0]].primaryStore,c=nne(a.path);return a.transaction(()=>{let u=Buffer.alloc(ZI);rne(c,u,0,ZI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=ZF(null,{fd:c,start:ZI}),m=new ene.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(une,"getBackup")});var ik=v((mDe,sk)=>{"use strict";var dne=Q(),{handleHDBError:fne}=Ee(),mne=U0(),pne=pg(),hne=AI(),Ene=gB(),_ne=rp(),gne=PI(),Sne=VB(),Tne=ZB(),yne=op(),Rne=aF(),Ane=gF(),bne=AF(),Ine=IF(),wne=OF(),Nne=xF(),Cne=FI(),One=HF(),Pne=YF(),Lne=zF(),nk=XF(),Dne=rk(),ew=class extends mne{static{o(this,"LMDBBridge")}async searchByConditions(t){return Rne(t)}async getDataByHash(t){return await gne(t)}async searchByHash(t){return await Sne(t)}async getDataByValue(t,r){return await Tne(t,r)}async searchByValue(t){return await yne(t)}async createSchema(t){return await Ene(t)}async dropSchema(t){return await Ane(t)}async createTable(t,r){return await bne(t,r)}async dropTable(t){return await Cne(t)}async createAttribute(t){return await pne(t)}async createRecords(t){return await hne(t)}async updateRecords(t){return await Ine(t)}async upsertRecords(t){try{return await wne(t)}catch(r){throw fne(r,null,null,dne.ERR,r)}}async deleteRecords(t){return await _ne(t)}async dropAttribute(t){return await One(t)}async deleteAuditLogsBefore(t){return await Nne(t)}async readAuditLog(t){return await Pne(t)}writeTransaction(t,r,n){return Lne.writeTransaction(t,r,n)}flush(t,r){return nk.flush(t,r)}resetReadTxn(t,r){return nk.resetReadTxn(t,r)}getBackup(t){return Dne(t)}};sk.exports=ew});function Fn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function mp(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a string, attempt to assign ${m}`);Fn(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a string, attempt to assign ${m}`);Fn(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a number, attempt to assign ${p}`);Fn(this)[u]=m},"set");break;case"Int":d=o(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ss.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Fn(this)[u]=m},"set");break;case"Long":d=o(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ss.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Fn(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ss.ClientError(`${u} must be a number, attempt to assign ${m}`);Fn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Fn(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ss.ClientError(`${u} must be a Date, attempt to assign ${m}`);Fn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Fn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof Ps||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Fn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Fn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be an object, attempt to assign ${m}`);Fn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=tw(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ss.ClientError("Can not add a property to a sealed table schema");Fn(this)[l]=u}),a("deleteProperty",function(l){Fn(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?ck:ak);break}c=l}while(c&&c!==ak&&c!==ck)}function lk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(ok[t])return ok[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=tw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Mne(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function tw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends El{static{o(this,"TrackedObject")}},mp(r,t)),new r(e)):new El(e);case Array:let n=new wg(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=tw(a,t?.elements)),n[s]=a}return n;default:return e}}function Ng(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let a=r[s];i=i.update(a)}else i=Ng(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 Va(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let a=Va(i);a!==i&&r===e&&(r=e.slice(0)),i=a}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=KA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Va(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)vne.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Ig(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[hl]||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(Ig(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(Ig(s))return!0}else return!0}else return!0}}return!1}var ss,ok,ak,ck,El,vne,hl,wg,fp,rw=ie(()=>{ss=I(Ee());S_();Ls();o(Fn,"getChanges");o(mp,"assignTrackedAccessors");ok=Object.prototype,ak=new Proxy({},{get:lk}),ck=new Proxy({},{get:lk,set:Mne});o(lk,"getProxiedProperty");o(Mne,"setProxiedProperty");o(tw,"trackObject");El=class{static{o(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};mp(El,{},!0);o(Ng,"collapseData");vne=Object.prototype.hasOwnProperty;o(Va,"updateAndFreeze");o(Ig,"hasChanges");hl=Symbol.for("has-array-changes"),wg=class extends Array{static{o(this,"TrackedArray")}#e;[hl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[hl]=!0,super.splice(...t)}push(...t){return this[hl]=!0,super.push(...t)}pop(){return this[hl]=!0,super.pop()}unshift(...t){return this[hl]=!0,super.unshift(...t)}shift(){return this[hl]=!0,super.shift()}};wg.prototype.constructor=Array;fp=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var _k={};be(_k,{ResourceBridge:()=>iw});function ow({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 uk(e,t){let r=zi(e),n=ow(e,r);if(!r)throw new Ei.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;bt(i,()=>new Promise(u=>a=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&Ng(d)}catch(f){d={message:(0,Ek.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function zi(e){let t=e.database||e.schema||xne,r=ct()[t];if(!r)throw(0,Ei.handleHDBError)(new Error,Une.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function dk(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*fk(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var mk,Cg,Ei,pk,nw,sw,hk,Ek,Une,xne,Bne,Fne,iw,gk=ie(()=>{mk=I(ik()),Cg=I(Ju()),Ei=I(Ee());Pe();pk=I(Zm());q();nw=I(Go()),sw=I(rs()),hk=I(ce());La();rw();Ek=I(Q()),{HDB_ERROR_MSGS:Une}=Ei.hdbErrors,xne="data",Bne=1e4,Fne=10,iw=class extends mk.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=zi(t);if(!r)throw new Ei.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let a=i;return{attribute:a.attribute??a.search_attribute,comparator:a.comparator??a.search_type,value:a.value!==void 0?a.value:a.search_value}}}o(n,"mapCondition");let s=(0,Cg.default)(t,"conditions");if(s)throw(0,Ei.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:ow(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new Ei.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Je({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await zi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=zi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return zi(t).dropTable()}createSchema(t){return ed({database:t.schema,table:null}),nw.signalSchemaChange(new sw.SchemaEventMsg(process.pid,$.CREATE_SCHEMA,t.schema))}async dropSchema(t){await aw(t.schema),nw.signalSchemaChange(new sw.SchemaEventMsg(process.pid,$.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,pk.default)(t),s,i=ct()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),bt(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Ng(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=ct()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),bt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return dk(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ct()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ei.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:e_.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,hk.asyncSetTimeout)(Fne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Bne===0&&await u();return l.length>0&&await u(),s?dk(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Cg.default)(t,"hashes");if(r)throw r;return uk(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of uk(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&bA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,Cg.default)(t,"value");if(n)throw n;let s=zi(t);if(!s)throw new Ei.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===e_.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:ow(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=zi(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){zi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return zi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=zi(t),n={};switch(t.search_type){case t_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case t_.USERNAME:{let s=t.search_values;for await(let i of fk(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return fk(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(ow,"getSelect");o(uk,"getRecords");o(zi,"getTable");o(dk,"createDeleteResponse");o(fk,"groupRecordsInHistory")});var is=v((bDe,Sk)=>{"use strict";var{ResourceBridge:kne}=(gk(),M(_k)),Hne=le();Hne.initSync();var Og;function Gne(){return Og||(Og=new kne,Og)}o(Gne,"getBridge");Sk.exports=Gne()});var ji=v((wDe,Rk)=>{var qne=Yi(),{promisify:$ne}=require("util"),{getDatabases:yk}=(Pe(),M(pt));Rk.exports={setSchemaDataToGlobal:Tk,getTableSchema:Vne,getSystemSchema:Kne,setSchemaDataToGlobalAsync:$ne(Tk)};function Tk(e){global.hdb_schema=yk(),e&&e()}o(Tk,"setSchemaDataToGlobal");function Vne(e,t,r){let n=yk()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}o(Vne,"getTableSchema");function Kne(){return qne}o(Kne,"getSystemSchema")});var kn=v((CDe,wk)=>{"use strict";var Lg=iI(),Jr=ce(),Yne=require("util"),Dg=is(),Wne=ji(),Ak=Q(),{handleHDBError:_l,hdbErrors:zne}=Ee(),{HTTP_STATUS_CODES:gl}=zne,jne=Yne.promisify(Wne.getTableSchema),Qne="updated",bk="inserted",Ik="upserted";wk.exports={insert:Xne,update:Zne,upsert:ese,validation:Jne,flush:tse};async function Jne(e){if(Jr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Jr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Jr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await jne(e.schema,e.table),r=Lg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Jr.isEmptyOrZeroLength(c[n]))throw Ak.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(!Jr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Ak.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Jr.isEmpty(c[n])&&c[n]!==""&&s.has(Jr.autoCast(c[n]))&&(c.skip=!0),s.add(Jr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(Jne,"validation");async function Xne(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Lg(e);if(t)throw _l(new Error,t.message,gl.BAD_REQUEST);Jr.transformReq(e);let r=Jr.checkSchemaTableExist(e.schema,e.table);if(r)throw _l(new Error,r,gl.BAD_REQUEST);let n=await Dg.createRecords(e);return Pg(bk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Xne,"insertData");async function Zne(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Lg(e);if(t)throw _l(new Error,t.message,gl.BAD_REQUEST);Jr.transformReq(e);let r=Jr.checkSchemaTableExist(e.schema,e.table);if(r)throw _l(new Error,r,gl.BAD_REQUEST);let n=await Dg.updateRecords(e);return Jr.isEmpty(n.existing_rows)?Pg(Qne,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Pg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Zne,"updateData");async function ese(e){if(e.operation!=="upsert")throw _l(new Error,"invalid operation, must be upsert",gl.INTERNAL_SERVER_ERROR);let t=Lg(e);if(t)throw _l(new Error,t.message,gl.BAD_REQUEST);Jr.transformReq(e);let r=Jr.checkSchemaTableExist(e.schema,e.table);if(r)throw _l(new Error,r,gl.BAD_REQUEST);let n=await Dg.upsertRecords(e);return Pg(Ik,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(ese,"upsertData");function Pg(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===bk?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===Ik?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(Pg,"returnObject");function tse(e){return Jr.transformReq(e),Dg.flush(e.schema,e.table)}o(tse,"flush")});var lw=v((PDe,Ok)=>{var rse=ft(),cw=require("joi"),{hdbTable:nse,hdbDatabase:Nk}=Vi(),Ck={schema:Nk,database:Nk,table:nse},sse={date:cw.date().iso().required()},ise={timestamp:cw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ok.exports=function(e,t){let r=t==="timestamp"?{...Ck,...ise}:{...Ck,...sse},n=cw.object(r);return rse.validateBySchema(e,n)}});var Dk=v((LDe,Lk)=>{var ose=ft(),uw=require("joi"),{hdbTable:ase,hdbDatabase:Pk}=Vi(),cse=uw.object({schema:Pk,database:Pk,table:ase,hash_values:uw.array().required(),ids:uw.array()});Lk.exports=function(e){return ose.validateBySchema(e,cse)}});var pw=v((DDe,Mk)=>{"use strict";var dw=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},fw=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=a}},mw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Mk.exports={InsertObject:dw,NoSQLSeachObject:fw,DeleteResponseObject:mw}});var yl=v((vDe,Fk)=>{"use strict";var Uk=lw(),lse=Dk(),Sl=ce(),vk=require("moment"),xk=Q(),{promisify:use,callbackify:dse}=require("util"),Tl=(q(),M(W)),fse=ji(),hw=use(fse.getTableSchema),Ew=is(),{DeleteResponseObject:mse}=pw(),{handleHDBError:Ka,hdbErrors:pse}=Ee(),{HDB_ERROR_MSGS:Mg,HTTP_STATUS_CODES:Ya}=pse,hse="records successfully deleted",Ese=dse(Bk);Fk.exports={delete:Ese,deleteRecord:Bk,deleteFilesBefore:_se,deleteAuditLogsBefore:gse};async function _se(e){let t=Uk(e,"date");if(t)throw Ka(t,t.message,Ya.BAD_REQUEST,void 0,void 0,!0);if(Sl.transformReq(e),!vk(e.date,vk.ISO_8601).isValid())throw Ka(new Error,Mg.INVALID_DATE,Ya.BAD_REQUEST,Tl.LOG_LEVELS.ERROR,Mg.INVALID_DATE,!0);let n=Sl.checkSchemaTableExist(e.schema,e.table);if(n)throw Ka(new Error,n,Ya.NOT_FOUND,Tl.LOG_LEVELS.ERROR,n,!0);let s=await Ew.deleteRecordsBefore(e);if(await hw(e.schema,e.table),xk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(_se,"deleteFilesBefore");async function gse(e){let t=Uk(e,"timestamp");if(t)throw Ka(t,t.message,Ya.BAD_REQUEST,void 0,void 0,!0);if(Sl.transformReq(e),isNaN(e.timestamp))throw Ka(new Error,Mg.INVALID_VALUE("Timestamp"),Ya.BAD_REQUEST,Tl.LOG_LEVELS.ERROR,Mg.INVALID_VALUE("Timestamp"),!0);let r=Sl.checkSchemaTableExist(e.schema,e.table);if(r)throw Ka(new Error,r,Ya.NOT_FOUND,Tl.LOG_LEVELS.ERROR,r,!0);let n=await Ew.deleteAuditLogsBefore(e);return await hw(e.schema,e.table),xk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(gse,"deleteAuditLogsBefore");async function Bk(e){e.ids&&(e.hash_values=e.ids);let t=lse(e);if(t)throw Ka(t,t.message,Ya.BAD_REQUEST,void 0,void 0,!0);Sl.transformReq(e);let r=Sl.checkSchemaTableExist(e.schema,e.table);if(r)throw Ka(new Error,r,Ya.NOT_FOUND,Tl.LOG_LEVELS.ERROR,r,!0);try{await hw(e.schema,e.table);let n=await Ew.deleteRecords(e);return Sl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${hse}`),n}catch(n){if(n.message===Tl.SEARCH_NOT_FOUND_MESSAGE){let s=new mse;return s.message=Tl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(Bk,"deleteRecord")});var vg={};be(vg,{HASH_FUNCTION:()=>Fr,hash:()=>Sw,validate:()=>Tw});function _w(e=hp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(pp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Sw(e,t=Fr[Hk?.toUpperCase()]??Fr.SHA256){return gw[t](e)}function Tw(e,t,r=Fr[Hk?.toUpperCase()]??Fr.SHA256){return e?Sse[r](e,t):!1}var pp,td,kk,Hk,hp,Gk,Fr,gw,Sse,Ug=ie(()=>{pp=I(require("node:crypto")),td=I(require("argon2")),kk=I(le());q();Hk=(0,kk.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),hp=16,Gk=9,Fr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(_w,"generateSalt");gw={[Fr.MD5]:(e,t=void 0)=>{t=t??_w(Gk);let r=pp.createHash(Fr.MD5).update(e+t).digest("hex");return t+r},[Fr.SHA256]:(e,t=void 0)=>{t=t??_w(hp);let r=pp.createHash(Fr.SHA256).update(e+t).digest("hex");return t+r},[Fr.ARGON2ID]:async e=>{let t=_w(hp),r=await td.hash(e,{type:td.argon2id,salt:Buffer.from(t)});return t+r}},Sse={[Fr.MD5]:(e,t)=>{let r=e.slice(0,Gk);return e===gw[Fr.MD5](t,r)},[Fr.SHA256]:(e,t)=>{let r=e.slice(0,hp);return e===gw[Fr.SHA256](t,r)},[Fr.ARGON2ID]:async(e,t)=>await td.verify(e.slice(hp),t)};o(Sw,"hash");o(Tw,"validate")});var $k=v((FDe,qk)=>{var yw=ft(),dn={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 Tse(e){return dn.password.presence=!0,dn.username.presence=!0,dn.role.presence=!0,dn.active.presence=!0,yw.validateObject(e,dn)}o(Tse,"addUserValidation");function yse(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,yw.validateObject(e,dn)}o(yse,"alterUserValidation");function Rse(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,yw.validateObject(e,dn)}o(Rse,"dropUserValidation");qk.exports={addUserValidation:Tse,alterUserValidation:yse,dropUserValidation:Rse}});var rH=v((GDe,tH)=>{"use strict";var Rw=require("recursive-iterator"),Ase=require("alasql"),Aw=require("clone"),Vk=ce(),{handleHDBError:Kk,hdbErrors:bse}=Ee(),{HDB_ERROR_MSGS:Yk,HTTP_STATUS_CODES:Wk}=bse,{getDatabases:Ise}=(Pe(),M(pt)),wse=["DISTINCT_ARRAY"],zk=Symbol("validateTables"),bw=Symbol("validateTable"),HDe=Symbol("getAllColumns"),jk=Symbol("validateAllColumns"),xg=Symbol("findColumn"),Qk=Symbol("validateOrderBy"),Ep=Symbol("validateSegment"),Iw=Symbol("validateColumn"),Jk=Symbol("setColumnsForTable"),Xk=Symbol("checkColumnsForAsterisk"),Zk=Symbol("validateGroupBy"),eH=Symbol("hasColumns"),ww=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[zk](),this[Xk](),this[jk]()}[zk](){if(this[eH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[bw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[bw](t.table)})}}[eH](){let t=!1,r=new Rw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[bw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Ise();if(!r[t.databaseid])throw Kk(new Error,Yk.SCHEMA_NOT_FOUND(t.databaseid),Wk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Kk(new Error,Yk.TABLE_NOT_FOUND(t.databaseid,t.tableid),Wk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Aw(s);i.table=Aw(t),this.attributes.push(i)})}[xg](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)}[Xk](){let t=new Rw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Jk](r.tableid)}[Jk](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Ase.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[jk](){this[Ep](this.statement.columns,!1),this[Ep](this.statement.joins,!1),this[Ep](this.statement.where,!1),this[Zk](this.statement.group,!1),this[Ep](this.statement.order,!0)}[Ep](t,r){if(!t)return;let n=new Rw(t),s=[];for(let{node:i,path:a}of n)!Vk.isEmpty(i)&&!Vk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Qk](i):s.push(this[Iw](i)));return s}[Zk](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&wse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Aw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[xg](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[xg](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Qk](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[Iw](t)}[Iw](t){let r=this[xg](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]}};tH.exports=ww});var oH=v(($De,iH)=>{"use strict";var nH=require("lodash"),_p=require("mathjs"),Nse=require("jsonata"),sH=ce();iH.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?nH.uniqWith(e,nH.isEqual):e,"distinct_array"),searchJSON:Cse,mad:gp.bind(null,_p.mad),mean:gp.bind(null,_p.mean),mode:gp.bind(null,_p.mode),prod:gp.bind(null,_p.prod),median:gp.bind(null,_p.median)};function gp(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(gp,"aggregateFunction");function Cse(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(sH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),sH.isEmpty(this.__ala__.res[r])){let n=Nse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(Cse,"searchJSON")});var cH=v((KDe,aH)=>{"use strict";var dr=require("moment"),Nw="YYYY-MM-DDTHH:mm:ss.SSSZZ";dr.suppressDeprecationWarnings=!0;aH.exports={current_date:o(()=>dr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>dr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return dr(e).utc().format("YYYY");case"month":return dr(e).utc().format("MM");case"day":return dr(e).utc().format("DD");case"hour":return dr(e).utc().format("HH");case"minute":return dr(e).utc().format("mm");case"second":return dr(e).utc().format("ss");case"millisecond":return dr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>dr(e).utc().format(Nw),"date"),date_format:o((e,t)=>dr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>dr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>dr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=dr(e).utc(),s=dr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>dr().utc().valueOf(),"now"),get_server_time:o(()=>dr().format(Nw),"get_server_time"),offset_utc:o((e,t)=>dr(e).utc().utcOffset(t).format(Nw),"offset_utc")}});var fH=v((WDe,dH)=>{"use strict";var Ose=require("@turf/area"),Pse=require("@turf/length"),Lse=require("@turf/circle"),Dse=require("@turf/difference"),Mse=require("@turf/distance"),vse=require("@turf/boolean-contains"),Use=require("@turf/boolean-equal"),xse=require("@turf/boolean-disjoint"),Bse=require("@turf/helpers"),lH=(q(),M(W)),ze=ce(),Vo=Q();dH.exports={geoArea:Fse,geoLength:kse,geoCircle:Hse,geoDifference:Gse,geoDistance:uH,geoNear:qse,geoContains:$se,geoEqual:Vse,geoCrosses:Kse,geoConvert:Yse};function Fse(e){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Ose.default(e)}catch(t){return Vo.trace(t,e),NaN}}o(Fse,"geoArea");function kse(e,t){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Pse.default(e,{units:t||"kilometers"})}catch(r){return Vo.trace(r,e),NaN}}o(kse,"geoLength");function Hse(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Lse.default(e,t,{units:r||"kilometers"})}catch(n){return Vo.trace(n,e,t),NaN}}o(Hse,"geoCircle");function Gse(e,t){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return Dse(e,t)}catch(r){return Vo.trace(r,e,t),NaN}}o(Gse,"geoDifference");function uH(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return Mse.default(e,t,{units:r||"kilometers"})}catch(n){return Vo.trace(n,e,t),NaN}}o(uH,"geoDistance");function qse(e,t,r,n){if(ze.isEmpty(e)||ze.isEmpty(t))return!1;if(ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return uH(e,t,n)<=r}catch(s){return Vo.trace(s,e,t),!1}}o(qse,"geoNear");function $se(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return vse.default(e,t)}catch(r){return Vo.trace(r,e,t),!1}}o($se,"geoContains");function Vse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return Use.default(e,t)}catch(r){return Vo.trace(r,e,t),!1}}o(Vse,"geoEqual");function Kse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return!xse.default(e,t)}catch(r){return Vo.trace(r,e,t),!1}}o(Kse,"geoCrosses");function Yse(e,t,r){if(ze.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ze.isEmpty(t))throw new Error("geo_type is required");if(ze.isEmpty(lH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(lH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ze.autoCastJSON(e)),Bse[t](e,r)}o(Yse,"geoConvert")});var Bg=v((jDe,mH)=>{var Rl=oH(),os=cH(),Qi=fH();mH.exports=e=>{e.aggr.mad=e.aggr.MAD=Rl.mad,e.aggr.mean=e.aggr.MEAN=Rl.mean,e.aggr.mode=e.aggr.MODE=Rl.mode,e.aggr.prod=e.aggr.PROD=Rl.prod,e.aggr.median=e.aggr.MEDIAN=Rl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Rl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Rl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=os.current_date,e.fn.current_time=e.fn.CURRENT_TIME=os.current_time,e.fn.extract=e.fn.EXTRACT=os.extract,e.fn.date=e.fn.DATE=os.date,e.fn.date_format=e.fn.DATE_FORMAT=os.date_format,e.fn.date_add=e.fn.DATE_ADD=os.date_add,e.fn.date_sub=e.fn.DATE_SUB=os.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=os.date_diff,e.fn.now=e.fn.NOW=os.now,e.fn.offset_utc=e.fn.OFFSET_UTC=os.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=os.get_server_time,e.fn.getdate=e.fn.GETDATE=os.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=os.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Qi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Qi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Qi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Qi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Qi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Qi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Qi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Qi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Qi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Qi.geoNear}});var _H=v((QDe,EH)=>{"use strict";var Sp=require("lodash"),Hn=require("alasql");Hn.options.cache=!1;var Wse=Bg(),pH=require("clone"),Fg=require("recursive-iterator"),$e=Q(),st=ce(),rd=is(),zse=(q(),M(W)),{hdbErrors:jse}=Ee(),{getDatabases:hH}=(Pe(),M(pt)),Qse="IS NULL",_i="There was a problem performing this search. Please check the logs and try again.";Wse(Hn);var Cw=class{static{o(this,"SQLSearch")}constructor(t,r){if(st.isEmpty(t))throw $e.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),st.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!st.isEmptyOrZeroLength(n))return $e.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw $e.error("Error thrown from checkEmptySQL in SQLSearch class method search."),$e.error(n),new Error(_i)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw $e.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),$e.error(n),new Error(_i)}if(Object.keys(this.data).length===0)return $e.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw $e.error("Error thrown from processJoins in SQLSearch class method search."),$e.error(n),new Error(_i)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw $e.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),$e.error(n),new Error(_i)}try{return t=await this._finalSQL(),t}catch(n){throw $e.error("Error thrown from finalSQL in SQLSearch class method search."),$e.error(n),new Error(_i)}}_getColumns(){let t=new Fg(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(pH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Sp.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=hH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(st.isEmpty(this.statement.where)){$e.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Fg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!st.isEmpty(r)&&r.right)if(st.isNotEmptyAndHasValue(r.right.value)){let n=st.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Hn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=st.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Hn.yy.LogicValue({value:i}):n instanceof Hn.yy.StringValue&&st.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Hn.yy.NumValue({value:i}))});if(t){$e.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Fg(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!st.isEmpty(zse.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(st.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(st.isEmptyOrZeroLength(r.left.columnid)||st.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(st.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!st.isEmpty(r.right.value)||!st.isEmpty(r.left.value)?n.add(st.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from)&&st.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Sp.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(st.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);st.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(st.isEmptyOrZeroLength(this.all_table_attributes)&&!st.isEmptyOrZeroLength(this.columns.columns))return t;if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Hn.promise(r)}catch(r){throw $e.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),$e.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(pH(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(st.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(Qse)>-1&&this.tables.forEach(s=>{let i={columnid:hH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Sp.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===a&&(l=!0),!st.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await rd.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw $e.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),$e.error(d),new Error(_i)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await rd.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw $e.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),$e.error(d),new Error(_i)}else if(!st.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await rd.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw $e.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),$e.error(d),new Error(_i)}else try{c.attribute=s.attribute,c.value="*";let d=await rd.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw $e.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),$e.error(d),new Error(_i)}}}_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 Hn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,a=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Hn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Hn.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 Hn.yy.FuncValue:new Hn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;a.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Hn.promise(h,t),t=null}catch(p){throw $e.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),$e.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];a.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}a.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=Sp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,A=E.length;g<A;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Fg(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=Sp.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 $e.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),$e.error(i),new Error(_i)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await rd.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw $e.error("Error thrown from getDataByHash function in SQLSearch class method getData."),$e.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();$e.trace(`Final SQL: ${s}`),n=await Hn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),$e.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw $e.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),$e.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 $e.error(jse.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),$e.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let a=await rd.getDataByValue(i);for(let[c,l]of a)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(a){throw $e.error("There was an error when processing this SQL operation. Check your logs"),$e.error(a),new Error(_i)}}return Object.values(Object.values(this.data)[0].__mergedData)}};EH.exports=Cw});var fn=v((XDe,gH)=>{"use strict";var Jse=rH();gH.exports={searchByConditions:Zse,searchByHash:eie,searchByValue:tie,search:rie};var Ow=is(),{transformReq:Pw}=ce(),Xse=_H();async function Zse(e){return Pw(e),Ow.searchByConditions(e)}o(Zse,"searchByConditions");async function eie(e){Pw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Ow.searchByHash(e))r&&t.push(r);return t}o(eie,"searchByHash");async function tie(e){Pw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Ow.searchByValue(e))t.push(r);return t}o(tie,"searchByValue");function rie(e,t){try{let r=new Jse(e);r.validate(),new Xse(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(rie,"search")});var Ji=v((eMe,RH)=>{"use strict";var Tp=require("crypto"),nie=le(),{CONFIG_PARAMS:sie}=(q(),M(W)),TH="aes-256-cbc",iie=32,oie=16,Lw=64,yH=32,aie=Lw+yH,SH=new Map;RH.exports={encrypt:cie,decrypt:lie,createNatsTableStreamName:uie};function cie(e){let t=Tp.randomBytes(iie),r=Tp.randomBytes(oie),n=Tp.createCipheriv(TH,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(cie,"encrypt");function lie(e){let t=e.substr(0,Lw),r=e.substr(Lw,yH),n=e.substr(aie,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=Tp.createDecipheriv(TH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(lie,"decrypt");function uie(e,t){let r=nie.get(sie.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=SH.get(r);return n||(n=Tp.createHash("md5").update(r).digest("hex"),SH.set(r,n)),n}o(uie,"createNatsTableStreamName")});var Nt=v((nMe,bH)=>{"use strict";var{platform:rMe}=require("os"),die="nats-server.zip",Dw="nats-server",fie=process.platform==="win32"?`${Dw}.exe`:Dw,mie=/^[^\s.,*>]+$/,AH="__request__",pie=o(e=>`${e}.${AH}`,"REQUEST_SUBJECT"),hie={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Eie={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},_ie={HUB:"hub.pid",LEAF:"leaf.pid"},gie={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Sie={SUCCESS:"success",ERROR:"error"},Tie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},yie={TXN:"txn",MSGID:"msgid"},nd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Rie={[nd.ERR]:1,[nd.WRN]:2,[nd.INF]:3,[nd.DBG]:4,[nd.TRC]:5},Aie={debug:"-D",trace:"-DVV"};bH.exports={NATS_SERVER_ZIP:die,NATS_SERVER_NAME:Dw,NATS_BINARY_NAME:fie,PID_FILES:_ie,NATS_CONFIG_FILES:Eie,SERVER_SUFFIX:gie,NATS_TERM_CONSTRAINTS_RX:mie,REQUEST_SUFFIX:AH,UPDATE_REMOTE_RESPONSE_STATUSES:Sie,CLUSTER_STATUS_STATUSES:Tie,REQUEST_SUBJECT:pie,SUBJECT_PREFIXES:yie,MSG_HEADERS:hie,LOG_LEVELS:nd,LOG_LEVEL_FLAGS:Aie,LOG_LEVEL_HIERARCHY:Rie}});var as=v((iMe,kr)=>{"use strict";var NH="username is required",CH="nothing to update, must supply active, role or password to update",OH="password cannot be an empty string",PH="If role is specified, it cannot be empty.",LH="active must be true or false";kr.exports.addUser=Die;kr.exports.alterUser=Mie;kr.exports.dropUser=Uie;kr.exports.getSuperUser=Hie;kr.exports.userInfo=xie;kr.exports.listUsers=Hg;kr.exports.listUsersExternal=Bie;kr.exports.setUsersWithRolesCache=Al;kr.exports.findAndValidateUser=Gw;kr.exports.getClusterUser=Gie;kr.exports.getUsersWithRolesCache=kie;kr.exports.USERNAME_REQUIRED=NH;kr.exports.ALTERUSER_NOTHING_TO_UPDATE=CH;kr.exports.EMPTY_PASSWORD=OH;kr.exports.EMPTY_ROLE=PH;kr.exports.ACTIVE_BOOLEAN=LH;var DH=kn(),bie=yl(),yp=(Ug(),M(vg)),MH=$k(),Rp=fn(),Bw=Go(),Xi=ce(),vH=require("validate.js"),Fw=Q(),{promisify:Iie}=require("util"),kw=Ji(),vw=(q(),M(W)),IH=Nt(),wie=Rt(),Nie=le(),Cie=Yi(),{hdbErrors:Oie,ClientError:gi}=Ee(),{HTTP_STATUS_CODES:Ko,AUTHENTICATION_ERROR_MSGS:Mw,HDB_ERROR_MSGS:sd}=Oie,{UserEventMsg:Hw}=rs(),Uw=require("lodash"),{server:kg}=(Ur(),M(cm)),Pie=Q();kg.getUser=(e,t)=>Gw(e,t,t!=null);kg.authenticateUser=(e,t)=>Gw(e,t);var UH={username:!0,active:!0,role:!0,password:!0},wH=new Map,Lie=Iie(bie.delete),xw=Nie.get(vw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??yp.HASH_FUNCTION.SHA256,Zi;async function Die(e){let t=vH.cleanAttributes(e,UH),r=MH.addUserValidation(t);if(r)throw new gi(r.message);let n=await Rp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new gi(sd.ROLE_NAME_NOT_FOUND(t.role),Ko.NOT_FOUND);if(n.length>1)throw new gi(sd.DUP_ROLES_FOUND(t.role),Ko.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=kw.encrypt(t.password)),t.password=await yp.hash(t.password,xw),t.hash_function=xw,t.role=n[0].id;let s=await DH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Fw.debug(s),await Al(),s.skipped_hashes.length===1)throw new gi(sd.USER_ALREADY_EXISTS(t.username),Ko.CONFLICT);return Bw.signalUserChange(new Hw(process.pid)),`${t.username} successfully added`}o(Die,"addUser");async function Mie(e){let t=vH.cleanAttributes(e,UH);if(Xi.isEmptyOrZeroLength(t.username))throw new Error(NH);if(Xi.isEmptyOrZeroLength(t.password)&&Xi.isEmptyOrZeroLength(t.role)&&Xi.isEmptyOrZeroLength(t.active))throw new Error(CH);if(!Xi.isEmpty(t.password)&&Xi.isEmptyOrZeroLength(t.password.trim()))throw new Error(OH);if(!Xi.isEmpty(t.active)&&!Xi.isBoolean(t.active))throw new Error(LH);if(!Xi.isEmpty(t.password)&&!Xi.isEmptyOrZeroLength(t.password.trim())&&(vie(t.username)&&(t.hash=kw.encrypt(t.password)),t.password=await yp.hash(t.password,xw)),t.role==="")throw new Error(PH);if(t.role){let n=await Rp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new gi(sd.ALTER_USER_ROLE_NOT_FOUND(t.role),Ko.NOT_FOUND);if(n.length>1)throw new gi(sd.DUP_ROLES_FOUND(t.role),Ko.CONFLICT);t.role=n[0].id}let r=await DH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Al(),Bw.signalUserChange(new Hw(process.pid)),r}o(Mie,"alterUser");function vie(e){let t=!1,r=Zi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(vie,"isClusterUser");async function Uie(e){let t=MH.dropUserValidation(e);if(t)throw new gi(t.message);if(Zi.get(e.username)===void 0)throw new gi(sd.USER_NOT_EXIST(e.username),Ko.NOT_FOUND);let r=await Lie({table:"hdb_user",schema:"system",hash_values:[e.username]});return Fw.debug(r),await Al(),Bw.signalUserChange(new Hw(process.pid)),`${e.username} successfully deleted`}o(Uie,"dropUser");async function xie(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Uw.cloneDeep(e.hdb_user);let r=await Rp.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(xie,"userInfo");async function Bie(){let e=await Hg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Bie,"listUsersExternal");async function Hg(){let e=await Rp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Uw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Rp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Uw.cloneDeep(s),s.role=t[s.role],Fie(s.role),n.set(s.username,s);return n}o(Hg,"listUsers");function Fie(e){if(!e){Fw.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(Cie)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Fie,"appendSystemTablesToRole");async function Al(e=void 0){e?Zi=e:Zi=await Hg()}o(Al,"setUsersWithRolesCache");async function kie(){return Zi||await Al(),Zi}o(kie,"getUsersWithRolesCache");async function Gw(e,t,r=!0){Zi||await Al();let n=Zi.get(e);if(!n){if(!r)return{username:e};throw new gi(Mw.GENERIC_AUTH_FAIL,Ko.UNAUTHORIZED)}if(n&&!n.active)throw new gi(Mw.USER_INACTIVE,Ko.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(wH.get(t)===n.password)return s;{let i=yp.validate(n.password,t,n.hash_function||yp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)wH.set(t,n.password);else throw new gi(Mw.GENERIC_AUTH_FAIL,Ko.UNAUTHORIZED)}}return s}o(Gw,"findAndValidateUser");async function Hie(){Zi||await Al();for(let[,e]of Zi)if(e.role.role==="super_user")return e}o(Hie,"getSuperUser");async function Gie(){let e=await Hg(),t=wie.getConfigFromFile(vw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==vw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=kw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+IH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+IH.SERVER_SUFFIX.ADMIN,r}o(Gie,"getClusterUser");var xH=[];kg.invalidateUser=function(e){for(let t of xH)try{t(e)}catch(r){Pie.error("Error invalidating user",r)}};kg.onInvalidatedUser=function(e){xH.push(e)}});var qe,id=ie(()=>{qe={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var od,qw=ie(()=>{id();od=class{static{o(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==qe.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(qe.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=qe.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(qe.WARNING,t)}markLoading(t){this.updateStatus(qe.LOADING,t||"Component is loading")}isHealthy(){return this.status===qe.HEALTHY}hasError(){return this.status===qe.ERROR}isLoading(){return this.status===qe.LOADING}hasWarning(){return this.status===qe.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var bl,Wa,$w,ad,Vw,cd,Kw,Gg=ie(()=>{bl=I(Yr()),Wa=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=bl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},$w=class extends Wa{static{o(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,bl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},ad=class extends Wa{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,bl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},Vw=class extends Wa{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,bl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},cd=class extends Wa{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,bl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},Kw=class extends Wa{static{o(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,bl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
|
|
15
|
+
`)}}});var BH,Il,FH,za,Ap,ld,qie,qg,Yw=ie(()=>{BH=I(rs()),Il=I(nt());q();FH=I(Os());id();Gg();za=(0,FH.loggerWithTag)("componentStatus.crossThread"),Ap=class{static{o(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,Il.onMessageByType)(bu.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;za.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&(za.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let a=((0,Il.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let T=this.awaitingResponses.get(r);T&&T.length>=a&&!E&&(E=!0,S(),za.trace?.(`Collected all ${T.length} expected responses for request ${r}`),p(T))},"checkComplete"),A=setTimeout(()=>{if(!E){E=!0;let T=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),za.debug?.(`Collection timeout for request ${r}: collected ${T.length}/${a} responses`),p(T)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(A)},"cleanup");this.responseCheckers.set(r,g),(0,BH.sendItcEvent)({type:bu.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(T=>{E=!0,S(),this.responseCheckers.delete(r),h(new ad("sendItcEvent",T))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Il.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return za.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof ad?za.error?.(`ITC failure during component status collection: ${r.message}`):za.warn?.("Failed to collect component status from all threads:",r),za.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,Il.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[a,c]of r)n.set(`${a}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},ld=class{static{o(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let a=s.indexOf("@"),c=a!==-1?s.substring(0,a):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let a=this.aggregateComponentGroup(s,i);r.set(s,a)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,a,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let A=parseInt(E.substring(7));isNaN(A)||(n.workers[A]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==qe.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!a&&(a=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:a};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[qe.ERROR,qe.WARNING,qe.LOADING,qe.UNKNOWN,qe.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return qe.UNKNOWN}},qie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),qg=new Ap(qie)});var ja,$g=ie(()=>{qw();id();Yw();Gg();ja=class{static{o(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new cd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(qe).includes(r))throw new cd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(qe).join(", ")}`);this.statusMap.set(t,new od(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,qe.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,qe.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,qe.WARNING,r)}initializeLoading(t,r){this.setStatus(t,qe.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,qe.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,qe.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[qe.HEALTHY]:0,[qe.ERROR]:0,[qe.WARNING]:0,[qe.LOADING]:0,[qe.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await qg.collect(t);return ld.aggregate(r)}}});var fr,Vg=ie(()=>{$g();fr=new ja});function HH(e){let t=kH.get(e);return t||(t=new Ww(e),kH.set(e,t)),t}function GH(){fr.reset()}var Ww,kH,Yo,qH,$H=ie(()=>{Vg();id();Ww=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return fr.setStatus(this.componentName,qe.HEALTHY,t),this}warning(t){return fr.setStatus(this.componentName,qe.WARNING,t),this}error(t,r){return fr.setStatus(this.componentName,qe.ERROR,t,r),this}loading(t){return fr.setStatus(this.componentName,qe.LOADING,t||"Loading..."),this}unknown(t){return fr.setStatus(this.componentName,qe.UNKNOWN,t),this}get(){return fr.getStatus(this.componentName)}},kH=new Map;o(HH,"statusForComponent");Yo={loading(e,t){fr.initializeLoading(e,t)},loaded(e,t){fr.markLoaded(e,t)},failed(e,t,r){fr.markFailed(e,t,r)}};o(GH,"reset");qH=qe});var bp={};be(bp,{AggregationError:()=>Vw,COMPONENT_STATUS_LEVELS:()=>qe,ComponentStatus:()=>od,ComponentStatusError:()=>Wa,ComponentStatusOperationError:()=>cd,ComponentStatusRegistry:()=>ja,CrossThreadCollectionError:()=>Kw,CrossThreadStatusCollector:()=>Ap,CrossThreadTimeoutError:()=>$w,ITCError:()=>ad,StatusAggregator:()=>ld,componentStatusRegistry:()=>fr,crossThreadCollector:()=>qg,query:()=>$ie});var $ie,VH=ie(()=>{Vg();$g();qw();$g();Yw();Vg();Gg();id();$ie={get(e){return fr.getStatus(e)},all(){return fr.getAllStatuses()},byStatus(e){return fr.getComponentsByStatus(e)},summary(){return fr.getStatusSummary()},async allThreads(){return ja.getAggregatedFromAllThreads(fr)}}});var zw={};be(zw,{STATUS:()=>qH,internal:()=>bp,lifecycle:()=>Yo,reset:()=>GH,statusForComponent:()=>HH});var Ip=ie(()=>{$H();VH()});var Np=v((kMe,WH)=>{"use strict";var cs=Q(),mn=(q(),M(W)),Vie=O0(),Kie=as(),{validateEvent:jw}=rs(),wp=is(),Yie=require("process"),{resetDatabases:Wie}=(Pe(),M(pt)),zie={[mn.ITC_EVENT_TYPES.SCHEMA]:jie,[mn.ITC_EVENT_TYPES.USER]:YH,[mn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Jie};async function jie(e){let t=jw(e);if(t){cs.error(t);return}cs.trace("ITC schemaHandler received schema event:",e),await Vie(e.message),await Qie(e.message)}o(jie,"schemaHandler");async function Qie(e){try{wp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),wp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),wp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Wie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){cs.error(t)}}o(Qie,"syncSchemaMetadata");var KH=[];async function YH(e){try{try{wp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),wp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){cs.warn(r)}let t=jw(e);if(t){cs.error(t);return}cs.trace(`ITC userHandler ${mn.HDB_ITC_CLIENT_PREFIX}${Yie.pid} received user event:`,e),await Kie.setUsersWithRolesCache();for(let r of KH)r()}catch(t){cs.error(t)}}o(YH,"userHandler");YH.addListener=function(e){KH.push(e)};async function Jie(e){try{let t=jw(e);if(t){cs.error(t);return}cs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Ip(),M(zw)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=rs(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:mn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?cs.trace(`Sent component status response directly to thread ${u}`):(u===void 0?cs.debug("No originator threadId, falling back to broadcast"):cs.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){cs.error("Error handling component status request:",t)}}o(Jie,"componentStatusRequestHandler");WH.exports=zie});var rs=v((KMe,jH)=>{"use strict";var GMe=Q(),Qw=ce(),Xie=(q(),M(W)),{ITC_ERRORS:Cp}=Yr(),{parentPort:qMe,threadId:Zie,isMainThread:eoe,workerData:$Me}=require("worker_threads"),{onMessageFromWorkers:toe,broadcast:VMe,broadcastWithAcknowledgement:roe}=nt();jH.exports={sendItcEvent:noe,validateEvent:zH,SchemaEventMsg:soe,UserEventMsg:ioe};var Kg;toe(async(e,t)=>{Kg=Kg||Np(),zH(e),Kg[e.type]&&await Kg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function noe(e){return!eoe&&e.message&&(e.message.originator=Zie),roe(e)}o(noe,"sendItcEvent");function zH(e){if(typeof e!="object")return Cp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Qw.isEmpty(e.type))return Cp.MISSING_TYPE;if(!e.hasOwnProperty("message")||Qw.isEmpty(e.message))return Cp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Qw.isEmpty(e.message.originator))return Cp.MISSING_ORIGIN;if(Xie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Cp.INVALID_EVENT(e.type)}o(zH,"validateEvent");function soe(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(soe,"SchemaEventMsg");function ioe(e){this.originator=e}o(ioe,"UserEventMsg")});var Go=v((zMe,ZH)=>{"use strict";var QH=(q(),M(W)),WMe=ce(),Yg=Q(),JH=d0(),ud,{sendItcEvent:XH}=rs();function ooe(e){try{Yg.debug("signalSchemaChange called with message:",e),ud=ud||Np();let t=new JH(QH.ITC_EVENT_TYPES.SCHEMA,e);return ud.schema(t),XH(t)}catch(t){Yg.error(t)}}o(ooe,"signalSchemaChange");function aoe(e){try{Yg.trace("signalUserChange called with message:",e),ud=ud||Np();let t=new JH(QH.ITC_EVENT_TYPES.USER,e);return ud.user(t),XH(t)}catch(t){Yg.error(t)}}o(aoe,"signalUserChange");ZH.exports={signalSchemaChange:ooe,signalUserChange:aoe}});function Op(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 eG(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new ks(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 ks,Pp=ie(()=>{ks=class extends Map{static{o(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(Op,"appendHeader");o(eG,"mergeHeaders")});var dG={};be(dG,{EVICTED:()=>Ba,INVALIDATED:()=>vn,coerceType:()=>zg,makeTable:()=>Qg});function Qg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:A}=e;E??=0;let{attributes:S}=e;S||(S=[]);let T=Bb(i,n,l),w,L,k={},te=Promise.resolve(),F,V,X;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(F=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(V=K),K.expiresAt&&(X=K),K.isPrimaryKey&&(k=K);let Y,de=[],ne=[],ae=1,ye=2,Ae={},He={},Ge=864e5,Ar=0,er,Gt,tr,Wf=!1,Uc,qt,zf,jf=Nl.get(x.REPLICATION_DATABASES);if(Array.isArray(jf)){for(let K of jf)if(K.name===c&&K.replicateTo>=0){zf=K.replicateTo;break}}let KE=i.getRange({start:!1,end:!1}).constructor,YE=10,lA=6;g&&WE(),Mm(i.env.path,K=>{if(L)return wa(K)});class Qf extends El{static{o(this,"Updatable")}getUpdatedTime(){return Ua.get(this.getRecord())?.version}getExpiresAt(){return Ua.get(this.getRecord())?.expiresAt}addTo(_,R){if(typeof R=="number"||typeof R=="bigint")this.set(_,new fp(R));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,R){return this.addTo(_,-R)}}class De extends Br{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=F;static updatedTimeProperty=V;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,R){if(R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(b=>!b.intermediateSource)){if(this.sources.some(b=>b.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}L=L||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),w=w||_.load;let O=o(b=>{let P=this.sources;if(P=P.filter(B=>B.intermediateSource&&B[b]&&(!B[b].reliesOnPrototype||B.prototype[b])),P.length>0)if(P.length===1){let B=P[0];return(C,H,U)=>{if(C?.source!==B)return B[b](H,U,C)}}else return(B,C,H)=>{let U=[];for(let J of P){if(B?.source===J)break;U.push(J[b](C,H,B))}return Promise.all(U)}},"getApplyToIntermediateSource"),D=this.sources[this.sources.length-1];D.intermediateSource&&(D={});let y=o(b=>{if(D[b]&&(!D[b].reliesOnPrototype||D.prototype[b]))return(P,B,C)=>{if(!P?.source)return D[b](B,C,P)}},"getApplyToCanonicalSource");Ae={put:y("put"),patch:y("patch"),delete:y("delete"),publish:y("publish")},He={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish"),invalidate:O("invalidate")};let N=D.shouldRevalidateEvents;return(async()=>{let b=!1,P,B=o(async(C,H)=>{let U=C.value,J=C.table?ve[c][C.table]:De;if(c===sm&&(C.table===Au.ROLE_TABLE_NAME||C.table===Au.USER_TABLE_NAME)&&(b=!0),C.id===void 0&&(C.id=U[J.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=_;let j={residencyId:Hc(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId,async:!0},G=C.id,Se=await J.getResource(G,H,j);switch(C.finished&&await C.finished,C.type){case"put":return N?Se._writeInvalidate(G,U,j):Se._writeUpdate(G,U,!0,j);case"patch":return N?Se._writeInvalidate(G,U,j):Se._writeUpdate(G,U,!1,j);case"delete":return Se._writeDelete(G,j);case"publish":case"message":return Se._writePublish(G,U,j);case"invalidate":return Se._writeInvalidate(G,U,j);case"relocate":return Se._writeRelocate(G,j);default:xe.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=_.subscribe;C&&A==null&&(A=!0);let H={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},U=_.subscribeOnThisThread?_.subscribeOnThisThread((0,wl.getWorkerIndex)(),H):(0,wl.getWorkerIndex)()===0,J=C&&U&&await _.subscribe?.(H);if(J){let j;for await(let G of J)try{if(!(G.type==="transaction"?G.writes[0]:G)){xe.default.error?.("Bad subscription event",G);continue}if(G.source=_,G.type==="end_txn"){if(j?.resolve(),G.localTime&&P!==G.localTime){if(G.remoteNodeIds?.length>0){let Oe=[Symbol.for("seq"),G.remoteNodeIds[0]],z=d.get(Oe),oe=z?.nodes;oe||(oe=[]);for(let pe of G.remoteNodeIds.slice(1)){let we=oe.find(fe=>fe.id===pe);oe=oe.filter(fe=>fe.id!==pe||fe===we),we||(we={id:pe,seqId:0},oe.push(we)),we.seqId=Math.max(z?.seqId??1,G.localTime),pe===j?.nodeId&&(we.lastTxnTime=G.timestamp)}let se=Math.max(z?.seqId??1,G.localTime);xe.default.trace?.("Received txn",c,se,new Date(se),G.localTime,new Date(G.localTime),G.remoteNodeIds),d.put(Oe,{seqId:se,nodes:oe})}P=G.localTime}G.onCommit&&j?.committed.then(G.onCommit);continue}if(j)if(G.beginTxn)j.resolve();else{j.write_promises.push(B(G,j));continue}!G.timestamp&&G.version&&(G.timestamp=G.version);let me=bt(G,()=>{if(G.type==="transaction"){let Oe=[];for(let z of G.writes)try{Oe.push(B(z,G))}catch(oe){throw oe.message+=" writing "+JSON.stringify(z)+" of event "+JSON.stringify(G),oe}return Promise.all(Oe)}else if(G.type==="define_schema"){let Oe=this.attributes.slice(0),z=!1;for(let oe of G.attributes)Oe.find(se=>se.name===oe.name)||(Oe.push(oe),z=!0);z&&(Je({table:s,database:c,attributes:Oe,origin:"cluster"}),Dp.signalSchemaChange(new Mp.SchemaEventMsg(process.pid,$.CREATE_TABLE,c,s)))}else return G.beginTxn?(j=G,j.write_promises=[B(G,G)],new Promise(Oe=>{j.resolve=()=>Oe(Promise.all(j.write_promises))})):B(G,G)});j&&(j.committed=me),b&&me&&!me?.waitingForUserChange&&(me.then(()=>Dp.signalUserChange(new Mp.UserEventMsg(process.pid))),me.waitingForUserChange=!0),G.onCommit&&(me?me.then(G.onCommit):G.onCommit())}catch(Se){xe.default.error?.("error in subscription handler",Se)}}}catch(C){xe.default.error?.(C)}})(),this}static get isCaching(){return L}static get shouldRevalidateEvents(){return this.prototype.get!==De.prototype.get}static getResource(_,R,O){let D=super.getResource(_,R,O);if(this.loadAsInstance===!1&&(R._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Is(_);try{if(D.getRecord?.())return D;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let y=!O?.async||i.cache?.get?.(_),N=Ir(R),b=N.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return xc(_,R,{transaction:b,ensureLoaded:O?.ensureLoaded},y,P=>{if(P?De._updateResource(D,P):D.#e=null,R.onlyIfCached){if(!D.doesExist())throw new mt.ServerError("Entry is not cached",504)}else if(O?.ensureLoaded){let B=Vr(_,P,R,D);if(B)return N?.disregardReadTxn(),D.#i=!0,R.loadedFromSource=!0,Si(B,C=>(De._updateResource(D,C),D))}return D})}catch(y){throw y.message.includes("Unable to serialize object")&&(y.message+=": "+JSON.stringify(_)),y}}return D}static _updateResource(_,R){_.#n=R,_.#e=R?.value??null,_.#r=R?.version}ensureLoaded(){let _=Vr(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,Si(_,R=>{this.#n=R,this.#e=R.value,this.#r=R.version})}static getNewId(){let _=k?.type;if(_==="String"||_==="ID")return super.getNewId();if(!qt){let y=i.getEntry(Symbol.for("id_allocation")),N=y?.value,b;if(N&&N.nodeName===server.hostname&&(!Soe(i)||N.pid===process.pid)){let P=N.start,B=N.end;b=P;for(let C of i.getKeys({start:B,end:P,limit:1,reverse:!0}))b=C}else N=D(y?.version??null),b=N.start;qt=new BigInt64Array([BigInt(b)+1n]),qt=new BigInt64Array(i.getUserSharedBuffer("id",qt.buffer)),qt.maxSafeId=N.end}let R=Number(Atomics.add(qt,0,1n)),O=_==="Int"?512:1048576;if(R+O>=qt.maxSafeId){let y=o(N=>{qt.maxSafeId=R+(_==="Int"?1023:4194303);let b=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,P=N?void 0:i.useReadTransaction(),B=Number(qt[0]);for(let U of i.getKeys({start:B+1,end:b,limit:1,transaction:P}))b=U;P?.done();let{value:C,version:H}=i.getEntry(Symbol.for("id_allocation"));if(qt.maxSafeId<b){if(C.end>qt.maxSafeId-100)return;xe.default.info?.("New id allocation",R,qt.maxSafeId,H),i.put(Symbol.for("id_allocation"),{start:C.start,end:qt.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 ${qt.maxSafeId}, but id of ${b} detected`);let U=D(H);U.alreadyUpdated||Atomics.store(qt,0,BigInt(U.start+1)),qt.maxSafeId=U.end}},"updateEnd");R+O===qt.maxSafeId?setImmediate(y):R+100>=qt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>y(!0)))}return R;function D(y){let N=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,b=N/4,P,B,C=!1,H,U;do{H=Math.floor(Math.random()*N),U={start:H,end:H+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},P=0;for(let J of i.getKeys({start:H,limit:1,reverse:!0}))P=J;B=N;for(let J of i.getKeys({start:H+1,end:N,limit:1}))B=J;b*=.875,b<1e3&&!C&&(C=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,H,P,B,b))}while(!(b<B-H&&(b<H-P||P===0)));return i.transactionSync(()=>{let J=i.getEntry(Symbol.for("id_allocation"));return(J?.version??null)==y?(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(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,Ge=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");Ge=Ge||(h+E)/4,wa()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){De.getResidency=_&&((R,O)=>{try{return _(R,O)}catch(D){throw D.message+=` in residency function for table ${s}`,D}})}static setResidencyById(_){De.getResidencyById=_&&(R=>{try{return _(R)}catch(O){throw O.message+=` in residency function for table ${s}`,O}})}static getResidency(_,R){if(De.getResidencyById)return De.getResidencyById(_[t]);let O=zf;if(R.replicateTo!=null){if(Array.isArray(R.replicateTo))return R.replicateTo.includes(server.hostname)?R.replicateTo:[server.hostname,...R.replicateTo];R.replicateTo>=0&&(O=R.replicateTo)}if(O>=0&&server.nodes){let D=[server.hostname];if(R.previousResidency)D.push(...R.previousResidency.slice(0,O));else{let y=server.nodes.map(P=>P.name),N=Math.floor(y.length*Math.random());D.push(...y.slice(N,N+O));let b=N+O-y.length;b>0&&D.push(...y.slice(0,b))}return D}}static enableAuditing(_=!0){g=_,_&&WE(),De.audit=_}static coerceId(_){return _===""?null:zg(_,k)}static async dropTable(){delete ve[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Mn&&_.value&&Da(_.value);if(c===a){for(let _ of S)d.remove(De.tableName+"/"+_.name),r[_.name]?.drop();d.remove(De.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),Xw.default.unlinkSync(i.env.path);Dp.signalSchemaChange(new Mp.SchemaEventMsg(process.pid,$.DROP_TABLE,c,s))}get(_){let R=this.constructor;if(typeof _=="string"&&R.loadAsInstance!==!1)return this.getProperty(_);if(ws(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let O={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?De.getRecordCount().then(D=>(O.recordCount=D.recordCount,O.estimatedRecordRange=D.estimatedRange,O)):O}if(_!==void 0&&R.loadAsInstance===!1){let O=this.getContext(),D=Ir(O),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let N=br(_);Is(N);let b=!0;return _.checkPermission&&(b=this.allowRead(O.user,_)),Si(b,P=>{if(!P)throw new mt.AccessViolation(O.user);let B=!0;return xc(N,O,{transaction:y,ensureLoaded:B},!1,C=>{if(O.onlyIfCached){if(!C?.value)throw new mt.ServerError("Entry is not cached",504)}else if(B){let H=Vr(N,C,O);if(H)return D?.disregardReadTxn(),O.loadedFromSource=!0,H.then(U=>U?.value)}return C?.value})})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,R){let O=Bc(_,R);if(O?.read){if(O.isSuperUser)return!0;let D=O.attribute_permissions,y=R?.select;if(D?.length>0||Wf&&y){if(R||(R={}),y){let N=D?.length>0&&Jw(D,"read");R.select=y.map(b=>{let P=b.name||b;if(!N||N[P]){let B=tr[P]?.definition?.tableClass;if(B){if(b.name||(b={name:b}),!b.checkPermission&&R.checkPermission&&(b.checkPermission=R.checkPermission),!B.prototype.allowRead.call(null,_,b))return!1;if(!b.select)return b.name}return b}}).filter(Boolean)}else R.select=D.filter(N=>N.read&&!tr[N.attribute_name]).map(N=>N.attribute_name);return R}else return!0}}allowUpdate(_,R,O){let D=Bc(_,O);if(D?.update){let y=D.attribute_permissions;if(y?.length>0){let N=Jw(y,"update");for(let b in R)if(!N[b])return!1;for(let b of y){let P=b.attribute_name;!b.update&&!(P in R)&&(R[P]=this.getProperty(P))}}return Ia(this.getContext())}}allowCreate(_,R,O){if(this.isCollection){let D=Bc(_,O);if(D?.insert){let y=D.attribute_permissions;if(y?.length>0){let N=Jw(y,"insert");for(let b in R)if(!N[b])return!1;return Ia(this.getContext())}else return Ia(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,R){return Bc(_,R)?.delete&&Ia(this.getContext())}update(_,R){let O,D=typeof R=="boolean"||R===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),y=!1;D?(y=R,R=_,O=this.getId()):O=br(_);let N=this.getContext();if(!Ir(N))throw new Error("Can not update a table resource outside of a transaction");if(R===!1)return this;if(typeof R=="object"&&R)if(y)Object.isFrozen(R)&&(R={...R}),this.#e={},this.#t=R;else if(D){let P=this.#t;P&&(R=Object.assign(P,R)),this.#t=R}else{let P=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(P=this.allowUpdate(N.user,R,_)),Si(P,B=>{if(!B)throw new mt.AccessViolation(N.user);return Si(i.get(br(_)),C=>{let H=new Qf(C);return H._setChanges(R),this._writeUpdate(O,H.getChanges(),!1),H})})}return this._writeUpdate(O,this.#t,y),this}addTo(_,R){if(typeof R=="number"||typeof R=="bigint")this.#s===rG?this.set(_,(+this.getProperty(_)||0)+R):(this.#s||this.update(),this.set(_,new fp(R)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,R){if(typeof R=="number")return this.addTo(_,-R);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let R=!0,O=this.getContext();return _?.checkPermission&&(R=this.allowDelete(O.user,_,O)),Si(R,D=>{if(!D)throw new mt.AccessViolation(O.user);this._writeInvalidate(_?br(_):this.getId())})}_writeInvalidate(_,R,O){let D=this.getContext();Is(_),Ir(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.invalidate?.bind(this,D,_),beforeIntermediate:He.invalidate?.bind(this,D,_),commit:o((N,b)=>{if(!(ba(N,b,O?.nodeId)<=0)){R??=null;for(let P in r)R||(R={}),R[P]===void 0&&(R[P]=this.getProperty(P));xe.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(N).toISOString()}`),T(_,R,b,N,vn,g,{user:D?.user,residencyId:O?.residencyId,nodeId:O?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,R){let O=this.getContext();Is(_),Ir(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.relocate?.bind(this,O,_),beforeIntermediate:He.relocate?.bind(this,O,_),commit:o((y,N)=>{if(ba(y,N,R?.nodeId)<=0)return;let b=De.getResidencyRecord(R.residencyId),P=0,B=null,C=N?.value;if(b&&!b.includes(server.hostname)){for(let H in r)B||(B={}),B[H]=C[H];P=vn}else B=C;xe.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(y).toISOString()}`),T(_,B,N,y,P,g,{user:O.user,residencyId:R.residencyId,nodeId:R.nodeId,expiresAt:R.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,R){let O={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},D=kc(this.getResidency(R.value,O)),y;if(D){if(!D.includes(server.hostname))return!1;y=Hc(D)}let N=0;xe.default.debug?.("Performing a relocate of an entry",existing_entry.key,R.value,D);let b=T(_.key,R.value,_,_.version,N,!0,{residencyId:y,expiresAt:R.expiresAt},"relocate",!1,null);return!0}static evict(_,R,O){let D=this.Source,y;if(!((L||g)&&(!R||(y=i.getEntry(_),!y||!R)||y.version!==O))){if(L){if(i.hasLock(_,y.version))return;let N;for(let b in r)N||(N={}),N[b]=R[b];if(N)return T(_,N,y,O,Ba,null,null,null,!0)}if(i.ifVersion(_,O,()=>{Ao(_,R,null)}),g)return T(_,null,y,O,Ba,null,null,null,!0);ol(i,y??i.getEntry(_),O)}}lock(){throw new Error("Not yet implemented")}static operation(_,R){return _.table||=s,_.schema||=c,global.operation(_,R)}put(_,R){if(R===void 0||R instanceof URLSearchParams)this.update(_,!0);else{let O=!0;if(_==null)throw new TypeError("Can not put a record without a target");let D=this.getContext();return _.checkPermission&&(O=this.allowUpdate(D.user,R,_)),Si(O,y=>{if(!y)throw new mt.AccessViolation(D.user);if(Array.isArray(R))for(let N of R){let b=N[t];this._writeUpdate(b,N,!0)}else{let N=br(_);this._writeUpdate(N,R,!0)}})}}create(_,R){let O=!0,D=this.getContext();if(!R&&!(_ instanceof URLSearchParams)&&(R=_,_=void 0),!R||typeof R!="object"||Array.isArray(R))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(O=this.allowCreate(D.user,R,_)),Si(O,y=>{if(!y)throw new mt.AccessViolation(D.user);let N=br(_)??R[t];if(N===void 0)N=this.constructor.getNewId();else if(i.get(N))throw new mt.ClientError("Record already exists",409);return this._writeUpdate(N,R,!0),R})}patch(_,R){if(R===void 0||R instanceof URLSearchParams)this.update(_,!1);else{let O=this.update(_,R);if(O?.then)return O.then(()=>{})}}_writeUpdate(_,R,O,D){let y=this.getContext(),N=Ir(y);Is(_);let b=this.#n??i.getEntry(_);this.#s=O?rG:hoe;let P={key:_,store:i,entry:b,nodeName:y?.nodeName,validate:o(B=>{R||(R=this.#t),O||R&&Ig(this.#t===R?this:R)?y?.source||(N.checkOverloaded(),this.validate(R,!O),V&&(R[V.name]=V.type==="Date"?new Date(B):V.type==="String"?new Date(B).toISOString():B),O&&(t&&R[t]!==_&&(R[t]=_),F&&(b?.value?R[F.name]=b?.value[F.name]:R[F.name]=F.type==="Date"?new Date(B):F.type==="String"?new Date(B).toISOString():B),R=Va(R))):N.removeWrite(P)},"validate"),before:O?Ae.put?()=>Ae.put(y,_,R):null:Ae.patch?()=>Ae.patch(y,_,R):Ae.put?()=>Ae.put(y,_,Va(this)):null,beforeIntermediate:O?He.put?()=>He.put(y,_,R):null:He.patch?()=>He.patch(y,_,R):He.put?()=>He.put(y,_,Va(this)):null,commit:o((B,C,H)=>{if(H){if(y&&C?.version>(y.lastModified||0)&&(y.lastModified=C.version),this.#n=C,C?.value&&C.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");O||(this.#e=C?.value??null)}this.#t=void 0,this.#r=B;let U=C?.value,J=R;this.#s=0;let j=!1,G=ba(B,C,D?.nodeId),Se;if(G<=0){if(g){let se=C.localTime,pe=C.version;xe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(B),"applying later update from:",new Date(pe),"local recorded time",new Date(se));let we=[];for(;se>B||pe>=B&&se>0;){let fe=l.get(se);if(!fe)break;let Me=Bt(fe);if(pe=Me.version,pe>=B){if(pe===B){if(G=ba(B,{version:pe,localTime:se},D?.nodeId),G===0)return;if(G>0)continue}if(Me.type==="patch")we.push(Me),Se=R;else if(Me.type==="put"||Me.type==="delete")return}se=Me.previousLocalTime}se||xe.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",C),we.sort((fe,Me)=>fe.version-Me.version);for(let fe of we){let Me=fe.getValue(i);if(xe.default.debug?.("Rebuilding update with future patch:",new Date(fe.version),Me,fe),J=g_(J,Me,O),!J)return}}else{if(O)return;J=g_(J,U,O),xe.default.debug?.("Rebuilding update without audit:",J)}xe.default.trace?.("Rebuilt record to save:",J," is full update:",O)}let me;if(O?me=J:this.constructor.loadAsInstance===!1?me=Va(U,J):(this.#e=U,me=Va(this,J)),this.#e=me,me&&me.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let Oe;if(D?.residencyId!=null)Oe=D.residencyId;else{b?.residencyId&&(y.previousResidency=De.getResidencyRecord(b.residencyId));let se=kc(De.getResidency(me,y));if(se&&!se.includes(server.hostname))if(Se??=me,j=!0,De.getResidencyById)me=void 0;else{me=null;for(let pe in r)me||(me={}),me[pe]=Se[pe]}Oe=Hc(se)}O||(Se=R);let z=y?.expiresAt??(h?h+Date.now():-1);xe.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(B).toISOString()}${z?", expires at: "+new Date(z).toISOString():""}${C?", replaces entry from: "+new Date(C.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(me).slice(0,100)}catch{return""}})()),Ao(_,U,me);let oe=O?"put":"patch";T(_,me,C,B,j?vn:0,g,{omitLocalRecord:j,user:y?.user,residencyId:Oe,expiresAt:z,nodeId:D?.nodeId,originatingOperation:y?.originatingOperation,tableToTrack:c==="system"?null:s},oe,!1,Se),y.expiresAt&&wa()},"commit")};N.addWrite(P)}async delete(_){if(ws(_)){_.select=["$id"];for await(let R of this.search(_))this._writeDelete(R.$id);return!0}if(_){let R=!0,O=this.getContext();return _.checkPermission&&(R=this.allowDelete(O.user,_,O)),Si(R,D=>{if(!D)throw new mt.AccessViolation(O.user);let y=br(_);return this._writeDelete(y),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,R){let O=Ir(this.getContext());Is(_);let D=this.getContext();return O.addWrite({key:_,store:i,entry:this.#n,nodeName:D?.nodeName,before:Ae.delete?.bind(this,D,_),beforeIntermediate:He.delete?.bind(this,D,_),commit:o((y,N,b)=>{let P=N?.value;b&&(D&&N?.version>(D.lastModified||0)&&(D.lastModified=N.version),De._updateResource(this,N)),!(ba(y,N,R?.nodeId)<=0)&&(Ao(this.getId(),P),xe.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(y).toISOString()}`),g||A?(T(_,null,N,y,0,g,{user:D?.user,nodeId:R?.nodeId,tableToTrack:s},"delete"),g||wa()):ol(i,N))},"commit")}),!0}search(_){let R=this.getContext(),O=Ir(R);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(R.user,_))throw new mt.AccessViolation(R.user);R&&(R.lastModified=doe);let D=_.conditions;D?D.length===void 0&&(D=D[Symbol.iterator]?Array.from(D):[D]):D=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let y=_.id??this.getId();y&&(D=[{attribute:null,comparator:Array.isArray(y)?"prefix":"starts_with",value:y}].concat(D));let N,b={};function P(se,pe){let we;switch(pe){case"and":case void 0:if(se.length<1)throw new Error('An "and" operator requires at least one condition');we=!0;break;case"or":if(se.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+pe)}for(let fe of se){if(fe.conditions){fe.conditions=P(fe.conditions,fe.operator);continue}let Me=fe[0]??fe.attribute,at=Me==null?k:qi(S,Me);if(at)(at.type||kb[fe.comparator])&&(fe[1]===void 0?fe.value=C(fe.value,at):fe[1]=C(fe[1],at));else if(Me!=null)throw(0,mt.handleHDBError)(new Error,`${Me} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let Qe=fe.chainedConditions[0],Mr,Kr;if(Qe.comparator==="gt"||Qe.comparator==="greater_than"||Qe.comparator==="ge"||Qe.comparator==="greater_than_equal"?(Mr=fe,Kr=Qe):(Mr=Qe,Kr=fe),Mr.comparator!=="lt"&&Mr.comparator!=="less_than"&&Mr.comparator!=="le"&&Mr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let zE=Kr.comparator==="ge"||Kr.comparator==="greater_than_equal",Ne=Mr.comparator==="le"||Mr.comparator==="less_than_equal";fe.comparator=(zE?"ge":"gt")+(Ne?"le":"lt"),fe.value=[Kr.value,Mr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return se}o(P,"prepareConditions");function B(se,pe){if(_.enforceExecutionOrder)return se;for(let we of se)we.conditions&&(we.conditions=B(we.conditions,we.operator));return se.length>1&&pe!=="or"?coe(se,Z_(De)):se}o(B,"orderConditions");function C(se,pe){return Array.isArray(se)?se.map(we=>zg(we,pe)):zg(se,pe)}o(C,"coerceTypedValues");let H=_.operator;(D.length>0||H)&&(D=P(D,H));let U=typeof _.sort=="object"&&_.sort,J;if(U&&H!=="or"){let se=U.attribute;if(se==null)throw new mt.ClientError("Sort requires an attribute");if(N=D.find(pe=>Gu(pe.attribute)===Gu(se)),!N){let pe=qi(S,se);if(!pe)throw(0,mt.handleHDBError)(new Error,`${Array.isArray(se)?se.join("."):se} is not a defined attribute`,404);if(pe.indexed)N={...U,comparator:"sort"},D.push(N);else if(D.length===0&&!_.allowFullScan)throw(0,mt.handleHDBError)(new Error,`${Array.isArray(se)?se.join("."):se} is not indexed and not combined with any other conditions`,404)}N&&(N.descending=!!U.descending)}D=B(D,H),U&&(N&&D[0]===N?U.next&&(J={dbOrderedAttribute:U.attribute,attribute:U.next.attribute,descending:U.next.descending,next:U.next.next}):(N&&D.splice(D.indexOf(N),1),J=U));let j=_.select;if(D.length===0&&(D=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:D,operator:H,postOrdering:J,selectApplied:!!j};let G=O.useReadTxn(),Se=Hb(D,H,De,G,_,R,(se,pe)=>Jf(se,j,R,G,pe),b),me=_.ensureLoaded!==!1;J||(Se=oe(Se));let Oe=De.transformEntryForSelect(j,R,G,b,me,!0),z=De.transformToOrderedSelect(Se,j,J,R,G,Oe);function oe(se){return _.offset||_.limit!==void 0?se.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0):se}return o(oe,"applyOffset"),J&&(z=oe(z)),z.onDone=()=>{z.onDone=null,O.doneReadTxn()},z.selectApplied=!0,z.getColumns=()=>{if(j){let se=[];for(let pe of j)pe==="*"?se.push(...S.map(we=>we.name)):se.push(pe.name||pe);return se}return S.filter(se=>!se.computed&&!se.relationship).map(se=>se.name)},z}static transformToOrderedSelect(_,R,O,D,y,N){let b=new KE;if(O){_=Jf(_,R,D,y,null);let P;b.iterate=function(){let C,H=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),U,J=O.dbOrderedAttribute,j,G,Se=!0;function me(z){let oe=z.next&&me(z.next),se=z.descending;return D.sort=z,(pe,we)=>{let fe=Fc(pe,z.attribute,D),Me=Fc(we,z.attribute,D),at=se?(0,Cl.compareKeys)(Me,fe):(0,Cl.compareKeys)(fe,Me);return at===0?oe?.(pe,we)||0:at}}o(me,"createComparator");let Oe=me(O);return{async next(){let z;if(C)if(z=C.next(),z.done){if(U)return b.onDone&&b.onDone(),z}else return{value:await N.call(this,z.value)};P=[],j&&P.push(j);do if(z=await H.next(),z.done){if(U=!0,P.length)break;return b.onDone&&b.onDone(),z}else{let oe=z.value;if(oe?.then&&(oe=await oe),J){let se=Fc(oe,J,D);if(Se)Se=!1,G=se;else if(se!==G){G=se,j=oe;break}}P.push(oe)}while(!0);return O.isGrouped,P.sort(Oe),C=P[Symbol.iterator](),z=C.next(),z.done?(b.onDone&&b.onDone(),z):{value:await N.call(this,z.value)}},return(){return b.onDone&&b.onDone(),H.return()},throw(){return b.onDone&&b.onDone(),H.throw()}}};let B=o(C=>{if(typeof R=="object"&&Array.isArray(C.attribute))for(let H=0;H<R.length;H++){let U=R[H],J;if(U.name===C.attribute[0]){for(J=U.sort||(U.sort={});J.next;)J=J.next;J.attribute=C.attribute.slice(1),J.descending=C.descending}else U===C.attribute[0]&&(R[H]=J={name:U,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&B(C.next)},"applySortingOnSelect");B(O)}else b.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),b=b.map(function(P){try{let B=N.call(this,P);return typeof B?.catch=="function"?B.catch(C=>{throw C.partialObject={[t]:P.key},C}):B}catch(B){throw B.partialObject={[t]:P.key},B}});return b}static transformEntryForSelect(_,R,O,D,y,N){let b;y&&L&&!(typeof _=="string"?[_]:_)?.every(C=>{let H;return typeof C=="object"?H=C.name:H=C,r[H]||H===t})&&(b=!0);let P,B=o(function(C){let H;if(R?.transaction?.stale&&(R.transaction.stale=!1),C!=null){if(H=C.deref?C.deref():C.value,!H&&(C.key===void 0||C.deref)||C.metadataFlags&vn){if(C.metadataFlags&vn&&R.replicateFrom===!1&&N&&C.residencyId)return Ja.SKIP;if(C=xc(C.key??C,R,{transaction:O,lazy:_?.length<4,ensureLoaded:y},this?.isSync,U=>U),C?.then)return C.then(B.bind(this));H=C?.value}if(b&&C?.metadataFlags&(vn|Ba)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(R.onlyIfCached)return{[t]:C.key,message:"This entry has expired"};let U=Vr(C.key??C,C,R);if(U?.then)return U.then(B)}}if(H==null)return N?Ja.SKIP:H;if(_&&!(_[0]==="*"&&_.length===1)){let U,J=o((G,Se)=>{let me;typeof G=="object"?me=G.name:me=G;let Oe=tr?.[me],z;if(Oe){let oe=D?.[me];if(oe)if(oe.hasMappings){let pe=Oe.from?H[Oe.from]:Gu(C.key);z=oe.get(pe),z||(z=[])}else z=oe.fromRecord?.(H);else z=Oe(H,R,C,!0);let se=o(pe=>{if(Oe.directReturn)return Se(pe,me);if(pe&&typeof pe=="object"){let we=Oe.definition?.tableClass||De;P||(P={});let fe=P[me]||(P[me]=we.transformEntryForSelect(me===G?null:G.select||(Array.isArray(G)?G:null),R,O,oe,y));if(Array.isArray(pe)){let Me=[],at=we.transformToOrderedSelect(pe,G.select,typeof G.sort=="object"&&G.sort,R,O,fe)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Qe=o(Kr=>{for(;!Kr.done;){if(Kr?.then)return Kr.then(Qe);Me.push(Kr.value),Kr=at.next()}Se(Me,me)},"nextValue"),Mr=Qe(at.next());Mr&&(U||(U=[]),U.push(Mr));return}else if(pe=fe.call(this,pe),pe?.then){U||(U=[]),U.push(pe.then(Me=>Se(Me,me)));return}}Se(pe,me)},"handleResolvedValue");z?.then?(U||(U=[]),U.push(z.then(se))):se(z);return}else z=H[me],z&&typeof z=="object"&&me!==G&&(z=De.transformEntryForSelect(G.select||G,R,O,null)({value:z}));Se(z,me)},"selectAttribute"),j;if(typeof _=="string")J(_,G=>{j=G});else if(Array.isArray(_))if(_.asArray)j=[],_.forEach((G,Se)=>{G==="*"?_[Se]=H:J(G,me=>j[Se]=me)});else{j={};let G=_.forceNulls;for(let Se of _)if(Se==="*")for(let me in H)j[me]=H[me];else J(Se,(me,Oe)=>{me===void 0&&G&&(me=null),j[Oe]=me})}else throw new mt.ClientError("Invalid select"+_);return U?Promise.all(U).then(()=>j):j}return H},"transform");return B}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Je({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let R=!_.rawEvents,O=[],D=Wb(De,this.getId()??null,function(b,P,B,C){try{let H=P.getValue?.(i,R),U=P.type;if(!H&&U==="patch"&&R){let j=i.getEntry(b);j?.version===P.version?H=j.value:H=P.getValue?.(i,!0,B),U="put"}let J={id:b,localTime:B,value:H,version:P.version,type:U,beginTxn:C};O?O.push(J):(Xe(P.size??1,"db-message",s,null),this.send(J))}catch(H){xe.default.error?.(H)}},_.startTime||0,_),y=(async()=>{this.isCollection&&(D.includeDescendants=!0,_.onlyChildren&&(D.onlyChildren=!0)),_.supportsTransactions&&(D.supportsTransactions=!0);let b=this.getId(),P=_.previousCount;P>1e3&&(P=1e3);let B=_.startTime;if(this.isCollection){if(B){if(P)throw new mt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:H}of l.getRange({start:B,exclusiveStart:!0,snapshot:!1})){let U=Bt(H);if(U.tableId!==n)continue;let J=U.recordId;if(b==null||oG(b,J)){let j=U.getValue(i,R,C);if(N({id:J,localTime:C,value:j,version:U.version,type:U.type,size:U.size}),D.queue?.length>sG&&await D.waitForDrain()===!1)return}D.startTime=C}}else if(P){let C=[];for(let{key:H,value:U}of l.getRange({start:"z",end:!1,reverse:!0}))try{let J=Bt(U);if(J.tableId!==n)continue;let j=J.recordId;if(b==null||oG(b,j)){let G=J.getValue(i,R,H);if(C.push({id:j,localTime:H,value:G,version:J.version,type:J.type}),--P<=0)break}}catch(J){xe.default.error("Error getting history entry",H,J)}for(let H=C.length;H>0;)N(C[--H]);C[0]&&(D.startTime=C[0].localTime)}else if(!_.omitCurrent){for(let{key:C,value:H,version:U,localTime:J,size:j}of i.getRange({start:b??!1,end:b==null?void 0:[b,Cl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(H&&(N({id:C,localTime:J,value:H,version:U,type:"put",size:j}),D.queue?.length>sG&&await D.waitForDrain()===!1))return}}else{P&&!B&&(B=0);let C=this.#n?.localTime;if(C===xb&&(i.cache?.delete(b),this.#n=i.getEntry(b),xe.default.trace?.("re-retrieved record",C,this.#n?.localTime),C=this.#n?.localTime),xe.default.trace?.("Subscription from",B,"from",b,C),B<C){let H=[],U=C;do{let J=l.get(U);if(J){_.omitCurrent=!0;let j=Bt(J),G=j.getValue(i,R,U);R&&(j.type="put"),H.push({id:b,value:G,localTime:U,...j}),U=j.previousLocalTime}else break;P&&P--}while(U>B&&P!==0);for(let J=H.length;J>0;)N(H[--J]);D.startTime=C}!_.omitCurrent&&this.doesExist()&&N({id:b,localTime:C,value:this.#e,version:this.#r,type:"put"})}for(let C of O)N(C);O=null})();function N(b){Xe(b.size??1,"db-message",s,null),D.send(b)}return o(N,"send"),_.listener&&D.on("data",_.listener),D}static subscribeOnThisThread(_,R){return _===0||R?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,R,O){if(R===void 0||R instanceof URLSearchParams)this._writePublish(this.getId(),_,R);else{let D=!0,y=this.getContext();return _.checkPermission&&(D=this.allowCreate(y.user,_,y)),Si(D,N=>{if(!N)throw new mt.AccessViolation(y.user);let b=br(_);this._writePublish(b,R,O)})}}_writePublish(_,R,O){let D=Ir(this.getContext());_??=null,_!==null&&Is(_);let y=this.getContext();D.addWrite({key:_,store:i,entry:this.#n,nodeName:y?.nodeName,validate:o(()=>{y?.source||(D.checkOverloaded(),this.validate(R))},"validate"),before:Ae.publish?.bind(this,y,_,R),beforeIntermediate:He.publish?.bind(this,y,_,R),commit:o((N,b,P)=>{b===void 0&&A&&!g&&wa(),xe.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(N).toISOString()}`),T(_,b?.value??null,b,b?.version||N,0,!0,{user:y?.user,residencyId:O?.residencyId,expiresAt:y?.expiresAt,nodeId:O?.nodeId,tableToTrack:s},"message",!1,R)},"commit")})}validate(_,R){let O,D=o((y,N,b)=>{if(N.type&&y!=null)if(R&&y.__op__&&(y=y.value),N.properties){typeof y!="object"&&(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be an object${N.type?" ("+N.type+")":""}`);let P=N.properties;for(let B=0,C=P.length;B<C;B++){let H=P[B];if(H.relationship||H.computed){_.hasOwnProperty(H.name)&&(O||(O=[])).push(`Computed property ${b}.${H.name} may not be directly assigned a value`);continue}let U=D(y[H.name],H,b+"."+H.name);U&&(y[H.name]=U)}if(N.sealed&&y!=null&&typeof y=="object")for(let B in y)P.find(C=>C.name===B)||(O||(O=[])).push(`Property ${B} is not allowed within object in property ${b}`)}else switch(N.type){case"Int":(typeof y!="number"||y>>0!==y)&&(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof y!="number"||!(Math.floor(y)===y&&Math.abs(y)<=9007199254740992))&&(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof y!="number"&&(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a number`);break;case"ID":typeof y=="string"||y?.length>0&&y.every?.(P=>typeof P=="string")||(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a string, or an array of strings`);break;case"String":typeof y!="string"&&(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a string`);break;case"Boolean":typeof y!="boolean"&&(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a boolean`);break;case"Date":if(!(y instanceof Date)){if(typeof y=="string"||typeof y=="number")return new Date(y);(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a Date`)}break;case"BigInt":if(typeof y!="bigint"){if(typeof y=="string"||typeof y=="number")return BigInt(y);(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a bigint`)}break;case"Bytes":if(!(y instanceof Uint8Array)){if(typeof y=="string")return Buffer.from(y);(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(y instanceof Ps)){if(typeof y=="string"&&(y=Buffer.from(y)),y instanceof Buffer)return createBlob(y,{type:"text/plain"});(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be a Blob`)}break;case"array":if(Array.isArray(y)){if(N.elements)for(let P=0,B=y.length;P<B;P++){let C=y[P],H=D(C,N.elements,b+"[*]");H&&(y[P]=H)}}else(O||(O=[])).push(`Value ${Hs(y)} in property ${b} must be an Array`);break}N.nullable===!1&&y==null&&(O||(O=[])).push(`Property ${b} is required (and not does not allow null values)`)},"validateValue");for(let y=0,N=S.length;y<N;y++){let b=S[y];if(b.relationship||b.computed){Object.hasOwn(_,b.name)&&(O||(O=[])).push(`Computed property ${b.name} may not be directly assigned a value`);continue}if(!R||b.name in _){let P=D(_[b.name],b,b.name);P!==void 0&&(_[b.name]=P)}}if(f)for(let y in _)S.find(N=>N.name===y)||(O||(O=[])).push(`Property ${y} is not allowed`);if(O)throw new mt.ClientError(O.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return L?!!this.#i:void 0}static async addAttributes(_){let R=S.slice(0);for(let O of _){if(!O.name)throw new mt.ClientError("Attribute name is required");if(O.name.match(/[`/]/))throw new mt.ClientError("Attribute names cannot include backticks or forward slashes");loe(O.name),R.push(O)}return Je({table:s,database:c,schemaDefined:u,attributes:R}),De.indexingOperation}static async removeAttributes(_){let R=S.filter(O=>!_.includes(O.name));return Je({table:s,database:c,schemaDefined:u,attributes:R}),De.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,R=Xw.default.statfsSync?.(_)??{};return{available:R.bavail*R.bsize,free:R.bfree*R.bsize,size:R.blocks*R.bsize}}static async getRecordCount(_){let R=i.getStats().entryCount,O=1e3/2,D=performance.now(),y=Math.floor(R/2),N=_?.exactCount,b=0,P=0,B;for(let{value:C}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(C!=null&&b++,P++,await Qa(),!N&&P<y&&performance.now()-D>O){B=P;break}if(B){let C=b;b=0;for(let{value:z}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:B,snapshot:!1}))z!=null&&b++,await Qa();let H=B*2,U=(b+C)/H,J=Math.pow((b-C+1)/B/2,2)+U*(1-U)/H,j=Math.max(Math.sqrt(J)*R,1),G=Math.round(U*R),Se=Math.max(G-1.96*j,b+C),me=Math.min(G+1.96*j,R),Oe=Math.pow(10,Math.round(Math.log10(j)));return Oe>G&&(Oe=Oe/10),b=Math.round(G/Oe)*Oe,{recordCount:b,estimatedRange:[Math.round(Se),Math.round(me)]}}return{recordCount:b}}static updatedAttributes(){tr=this.propertyResolvers={$id:o((_,R,O)=>({value:O.key}),"$id"),$updatedtime:o((_,R,O)=>O.version,"$updatedtime"),$updatedTime:o((_,R,O)=>O.version,"$updatedTime"),$expiresAt:o((_,R,O)=>O.expiresAt,"$expiresAt"),$record:o((_,R,O)=>O?{value:_}:_,"$record"),$distance:o((_,R,O)=>O&&(O.distance??R?.vectorDistances?.get(O)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(k=_),_.resolve=null;let R=_.relationship,O=_.computed;if(R)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),O&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Wf=!0,R.to)_.elements?.definition?(tr[_.name]=_.resolve=(D,y,N,b)=>{let P=D[R.from?R.from:t],B=_.elements.definition.tableClass;return b?Hu({attribute:R.to,value:P},Ir(y).getReadTxn(),!1,B,!1).map(C=>C&&C.key!==void 0?C:B.primaryStore.getEntry(C,{transaction:Ir(y).getReadTxn()})).asArray:B.search([{attribute:R.to,value:P}],y).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=R.to,R.from&&(_.resolve.from=R.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(R.from){let D=_.definition||_.elements?.definition;D?(tr[_.name]=_.resolve=(y,N,b,P)=>{let B=y[R.from];if(B===void 0)return;if(_.elements){let H,U=B?.map(J=>{let j=D.tableClass.primaryStore[P?"getEntry":"get"](J,{transaction:Ir(N).getReadTxn()});return j?.then&&(H=!0),De.loadAsInstance===!1&&Object.freeze(P?j?.value:j),j});return R.filterMissing?H?Promise.all(U).then(J=>J.filter(aG)):U.filter(aG):H?Promise.all(U):U}let C=D.tableClass.primaryStore[P?"getEntry":"get"](B,{transaction:Ir(N).getReadTxn()});return De.loadAsInstance===!1&&Object.freeze(P?C?.value:C),C},_.set=(y,N)=>{if(Array.isArray(N)){let b=N.map(P=>P.getId?.()||P[D.tableClass.primaryKey]);y[R.from]=b}else{let b=N.getId?.()||N[D.tableClass.primaryKey];y[R.from]=b}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=R.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(O)typeof O.from=="function"&&this.setComputedAttribute(_.name,O.from),tr[_.name]=_.resolve=(D,y,N)=>{let b=typeof O.from=="string"?D[O.from]:D,P=this.userResolvers[_.name];if(P)return P(b,y,N);xe.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let D=r[_.name].customIndex;tr[_.name]=(y,N,b)=>{let P=y[_.name];return D.propertyResolver(P,N,b)},tr[_.name].directReturn=!0}}mp(this,this),mp(Qf,this,!0);for(let _ of S){let R=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,R,{get(){return _.resolve(this,$u.getStore())},set(O){return _.set(this,O)},configurable:!0})}}static setComputedAttribute(_,R){let O=qi(S,_);if(!O){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!O.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=R}static async deleteHistory(_=0,R=!1){let O;for(let{key:D,value:y}of l.getRange({start:0,end:_}))await Qa(),Bt(y).tableId===n&&(O=H_(l,D,y));if(R)for(let D of i.getRange({start:0,versions:!0})){let{key:y,value:N,localTime:b}=D;await Qa(),N===null&&b<_&&(O=ol(i,D))}await O}static async*getHistory(_=0,R=1/0){for(let{key:O,value:D}of l.getRange({start:_||1,end:R})){await Qa();let y=Bt(D);y.tableId===n&&(yield{id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user,operation:y.originatingOperation})}}static async getHistoryOfRecord(_){let R=[];if(_==null)throw new Error("An id is required");let O=i.getEntry(_);if(!O)return R;let D=O.localTime;if(!D)throw new Error("The entry does not have a local audit time");let y=0;do{await Qa();let N=l.get(D);if(N){let b=Bt(N);R.push({id:b.recordId,localTime:D,version:b.version,type:b.type,value:b.getValue(i,!0,D),user:b.user}),D=b.previousLocalTime}else break}while(y<1e3&&D);return R.reverse()}static cleanup(){Y?.remove()}}De.updatedAttributes();let uA=De.prototype;return h&&De.setTTLExpiration(h/1e3),X&&Zf(),De;function Ao(K,_,R){let O;for(let D in r){let y=r[D],N=y.isIndexing,b=tr[D],P=R&&(b?b(R):R[D]),B=_&&(b?b(_):_[D]);if(P===B&&!N)continue;if(y.customIndex){y.customIndex.index(K,P,B);continue}O=!0;let C=y.indexNulls,H=(0,Lp.getIndexedValues)(P,C),U=(0,Lp.getIndexedValues)(B,C);if(s==="OrganizationRole"&&xe.default.error?.({tableName:s,id:K,key:D,valuesToAdd:H,valuesToRemove:U}),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)&&tG){let j=U.concat(H).map(G=>({key:G,value:K}));y.prefetch(j,iG)}for(let j=0,G=U.length;j<G;j++)y.remove(U[j],K)}else H?.length>0&&tG&&y.prefetch(H.map(J=>({key:J,value:K})),iG);if(H)for(let J=0,j=H.length;J<j;J++)y.put(H[J],K)}return O}o(Ao,"updateIndices");function Is(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>nG)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,Cl.writeKey)(K,Eoe,0)>nG)throw new Error("Primary key size is too large: "+K.length);return!0}o(Is,"checkValidId");function br(K){return typeof K=="object"&&K?K.id:K}o(br,"requestTargetToId");function ws(K){return typeof K=="object"&&K&&K.isCollection}o(ws,"isSearchTarget");function dA(K){}o(dA,"isRequestTarget");function xc(K,_,R,O,D){if(De.getResidencyById&&R.ensureLoaded&&_?.replicateFrom!==!1){let N=kc(De.getResidencyById(K));if(N&&!N.includes(server.hostname)&&w)return w({key:K,residency:N}).then(D)}let y=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),R.transaction?.isDone)return D(null,K);let N=i.getEntry(K,R);return c!=="system"&&(uG.default.trace?.("Recording db-read action for",s),Xe(N?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(N?.value),N?.residencyId&&N.metadataFlags&vn&&w&&R.ensureLoaded&&_?.replicateFrom!==!1?w(N).then(b=>D(b,K),b=>(xe.default.error?.("Error loading remote record",K,N,R,b),D(null,K))):(N&&_&&(N?.version>(_.lastModified||0)&&(_.lastModified=N.version),N?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=N.localTime)),D(N,K))},"whenPrefetched");return O?y():ae>0?(ae--,y()):new Promise((N,b)=>{ae===0?(ae--,i.prefetch([K],()=>{P(),B()})):(de.push(K),ne.push(B),de.length>lA&&(ae--,P()));function P(){if(de.length>0){let C=ne;i.prefetch(de,()=>{ae===-1?P():ae++;for(let H of C)H()}),de=[],ne=[],ye>2&&ye--}else ae=ye,ye<YE&&ye++}o(P,"prefetch");function B(){try{N(y())}catch(C){b(C)}}o(B,"load")})}o(xc,"loadLocalRecord");function Bc(K,_){let R=_?.checkPermission;if(typeof R!="object"){if(!K?.role)return;R=K.role.permission}if(R.super_user)return _oe;let O=R[c],D,y=O?.tables;if(y)return y[s];if(c==="data"&&(D=R[s])&&!D.tables)return D}o(Bc,"getTablePermissions");function Vr(K,_,R,O){if(L){let D=!1;if(R.noCache?D=!0:(_?(!_.value||_.metadataFlags&(vn|Ba)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(D=!0):D=!0,jr(!D,"cache-hit",s)),D){let y=Xf(K,_,R).then(N=>(N?.value&&N?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),R&&(N?.version>(R.lastModified||0)&&(R.lastModified=N.version),R.lastRefreshed=Date.now()),N));if(R?.onlyIfCached||_?.value&&O?.allowStaleWhileRevalidate?.(_,K)){if(y.catch(N=>xe.default.warn?.(N)),R?.onlyIfCached&&!O.doesExist())throw new mt.ServerError("Entry is not cached",504);return}else return y}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return De.evict(_.key,_.value,_.version),_.value=null,{then(D){return D(_)}}}o(Vr,"ensureLoadedFromSource");function Ir(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let R=_.next;if(!R)return _=_.next=new wo,_.lmdbDb=i,_;_=R}while(!0)}else return new E_}o(Ir,"txnForContext");function Fc(K,_,R){if(!K)return;let O=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let y=tr,N=O;for(let b=0,P=_.length;b<P;b++){let B=_[b],C=y?.[B];N=C&&N?C(N,R,K):N?.[B],K=null,y=C?.definition?.tableClass?.propertyResolvers}return N}let D=tr[_];return D?D(O,R,K):O[_]}o(Fc,"getAttributeValue");function Jf(K,_,R,O,D){let y=D?.length,N={transaction:O,lazy:y>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},b;function P(B,C){let H=B?.value;if(!H)return Ja.SKIP;for(let U=0;U<y;U++)if(!b?.includes(U)&&!D[U](H,B))return Ja.SKIP;return C!==void 0&&(B.key=C),B}if(o(P,"processEntry"),y>0||!K.hasEntries){let B=K.map(C=>{if(b=null,typeof C=="object"&&C?.key!==void 0)return y>0?P(C):C;if(C==null)return Ja.SKIP;for(let H=0;H<y;H++){let J=D[H].idFilter;if(J){if(!J(C))return Ja.SKIP;b||(b=[]),b.push(H)}}return xc(C,R,N,!1,P)});return Array.isArray(K)&&(B=B.filter(C=>C!==Ja.SKIP)),B.hasEntries=!0,B}return K}o(Jf,"transformToEntries");function ba(K,_,R=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&R!==void 0){let O=server.replication?.exportIdMapping(l),D=_.localTime,y=D&&l.get(D);if(y){let N,b,P=Bt(y);for(let B in O)O[B]===R&&(N=B),O[B]===P.nodeId&&(b=B);if(N>b)return 1;if(N===b)return 0}}return-1}return 1}o(ba,"precedesExistingVersion");async function Xf(K,_,R){let O=_?.metadataFlags,D=_?.version,y,N;if(!i.attemptLock(K,D,()=>{clearTimeout(N);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(vn|Ba)?y(Xf(K,i.getEntry(K),R)):y(C)}))return new Promise(C=>{y=C,N=setTimeout(()=>{i.unlock(K,D)},poe)});let b=_?.value,P={requestContext:R,replacingRecord:b,replacingEntry:_,replacingVersion:D,noCacheStore:!1,source:null,resourceCache:R?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},B=R?.responseHeaders;return new Promise((C,H)=>{let U;Si(bt(P,async J=>{let j=performance.now(),G,Se,me;try{for(let se of De.sources)if(se.get&&(!se.get.reliesOnPrototype||se.prototype.get)){if(se.available?.(_)===!1)continue;if(P.source=se,G=await se.get(K,P),G)break}me=O&vn;let z=P.lastModified||me&&D;Se=me||z>D||!b,z||(z=(0,Lp.getNextMonotonicTime)());let oe=performance.now()-j;if(Xe(oe,"cache-resolution",s,null,"success"),B&&Op(B,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),J.timestamp=z,h&&P.expiresAt==null&&(P.expiresAt=Date.now()+h),G){if(typeof G!="object")throw new Error("Only objects can be cached and stored in tables");if(G.status>0&&G.headers)if(G.status>=300)if(G.status===304)G=b,z=D;else throw new mt.ServerError(G.body||"Error from source",G.status);else G=G.body;typeof G.toJSON=="function"&&(G=G.toJSON()),t&&G[t]!==K&&(G[t]=K)}U=!0,C({key:K,version:z,value:G})}catch(z){z.message+=` while resolving record ${K} for ${s}`,b&&((z.code==="ECONNRESET"||z.code==="ECONNREFUSED"||z.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(z.statusCode===500||z.statusCode===502||z.statusCode===503||z.statusCode===504))?(C({key:K,version:D,value:b}),xe.default.trace?.(z.message,"(returned stale record)")):H(z);let oe=performance.now()-j;Xe(oe,"cache-resolution",s,null,"fail"),B&&Op(B,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),P.transaction.abort();return}if(R?.noCacheStore||P.noCacheStore){P.transaction.abort();return}Ir(P).addWrite({key:K,store:i,entry:_,nodeName:"source",commit:o((z,oe)=>{if(oe?.version!==D)return;let se=Ao(K,b,G);if(G){He.put?.(P,K,G),oe&&(R.previousResidency=De.getResidencyRecord(oe.residencyId));let pe,we=!1,fe,Me=kc(De.getResidency(G,R));if(Me){if(!Me.includes(server.hostname))if(pe=G,we=!0,De.getResidencyById)G=void 0;else{G=null;for(let at in r)G||(G={}),G[at]=pe[at]}fe=Hc(Me)}xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),T(K,G,oe,z,we?vn:0,g&&(Se||we)||null,{user:P?.user,expiresAt:P.expiresAt,residencyId:fe,tableToTrack:s},"put",!!me,pe)}else oe&&(He.delete?.(P,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),g||A?T(K,null,oe,z,0,g&&Se||null,{user:P?.user,tableToTrack:s},"delete",!!me):ol(i,oe,D))},"commit")})}),()=>{i.unlock(K,D)},J=>{i.unlock(K,D),U&&xe.default.error?.("Error committing cache update",J)})})}o(Xf,"getFromSource");function Ia(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new mt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new mt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Ia,"checkContextPermissions");function wa(K){let _=!1;if(K&&(K-Ar>1&&(_=!0),Ar=K),!(Ge===er&&!_)&&(er=Ge,(0,wl.getWorkerIndex)()===(0,wl.getWorkerCount)()-1))return Gt&&clearTimeout(Gt),Ge?new Promise(R=>{let O=new Date;O.setMonth(0),O.setDate(1),O.setHours(0),O.setMinutes(0),O.setSeconds(0);let D=Ge/(1+Ar),y=_?Date.now():Math.ceil((Date.now()-O.getTime())/D)*D+O.getTime(),N=o(b=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(b)}`),Gt=setTimeout(()=>te=te.then(async()=>{if(N(Math.max(b+Ge,Date.now())),i.rootStore.status!=="open"){clearTimeout(Gt);return}let P=50,B=new Array(P),C=0,H=Math.pow(Ar,8)*(Nl.get(x.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),U=E/Math.pow(Math.max(Ar,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${H}, adjusted eviction ${U}ms`);function J(j,G,Se,me){let Oe=j+U-Date.now();if(Oe<0)return!0;if(Ar){let z=i.lastSize;return Se&Mn&&Lu(me,oe=>{oe.size&&(z+=oe.size)}),xe.default.trace?.(`shouldEvict adjusted ${Oe} ${z}, ${Oe*(j-G)/z} < ${H}`),Oe*(j-G)/z<H}return!1}o(J,"shouldEvict");try{let j=0;for(let G of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Se,value:me,version:Oe,expiresAt:z,metadataFlags:oe}=G,se;me===null&&!g&&Oe+moe<Date.now()?se=ol(i,G,Oe):z!=null&&J(z,Oe,oe,me)&&(se=De.evict(Se,me,Oe),j++),se&&(await B[C],B[C]=se.catch(pe=>{xe.default.error?.("Cleanup error",pe)}),++C>=P&&(C=0)),await Qa()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${j} entries`)}catch(j){xe.default.warn?.(`Error in cleanup scan for ${s}:`,j)}R(void 0),Ar=0}),Math.min(b-Date.now(),2147483647)).unref()},"startNextTimer");N(y)}):void 0}o(wa,"scheduleCleanup");function WE(){Y=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(WE,"addDeleteRemoval");function Zf(){(0,wl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Uc){Uc=!0;try{let K=X.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${X} must be indexed`);for(let R of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let O of _.getValues(R)){let D=i.getEntry(O);D?.value?D.value[K]<Date.now()&&De.evict(O,D.value,D.version):i.ifVersion(O,D?.version,()=>_.remove(R,O))}await Qa()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{Uc=!1}}},foe).unref()}o(Zf,"runRecordExpirationEviction");function kc(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return xe.default.trace?.(`Shard ${K} mapped to ${_.map(R=>R.name).join(", ")}`),_.map(R=>R.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`)}}o(kc,"residencyFromFunction");function Hc(K){if(K){let _=K.join(","),R=d.get([Symbol.for("residency_by_set"),_]);return R||(d.put([Symbol.for("residency_by_set"),_],R=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),R],K),R)}}o(Hc,"getResidencyId")}function Jw(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 iG(){}function zg(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 Wg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Wg(+e);case"Float":return e==="null"?null:Wg(+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;goe.test(e)||(e+="Z");let n=new Date(e);return Wg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,jg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Wg(e){if(isNaN(e))throw new SyntaxError;return e}function oG(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 Si(e,t,r){return e?.then?e.then(t,r):t(e)}function aG(e){return e!=null}function Hs(e){try{return JSON.stringify(e)}catch{return e}}function Soe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ja,Lp,cG,lG,Nl,mt,Dp,Mp,xe,Cl,wl,jg,Xw,uG,coe,loe,uoe,doe,foe,moe,tG,poe,rG,hoe,vn,Ba,Eoe,nG,sG,_oe,mve,goe,Qa,rg=ie(()=>{q();Ja=require("lmdb"),Lp=I(Pn()),cG=I(require("lodash")),lG=I(Sm());Fa();ym();Nl=I(le());zb();mt=I(Ee()),Dp=I(Go()),Mp=I(rs());Pe();tg();xe=I(Os());rw();La();Cl=require("ordered-binary"),wl=I(nt());No();jg=I(ce());nl();vs();S_();Pp();Xw=I(require("node:fs"));Ls();x_();uG=I(Q()),{sortBy:coe}=cG.default,{validateAttribute:loe}=lG.default,uoe=new Uint8Array(9);uoe[8]=192;doe=1/0,foe=6e4,moe=864e5;Nl.initSync();tG=Nl.get(x.STORAGE_PREFETCHWRITES),poe=1e4,rG=1,hoe=2,vn=1,Ba=8,Eoe=Buffer.allocUnsafeSlow(8192),nG=1978,sG=100,_oe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},mve=(0,jg.convertToMS)(Nl.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Qg,"makeTable");o(Jw,"attributesAsObject");o(iG,"noop");goe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(zg,"coerceType");o(Wg,"rejectNaN");o(oG,"isDescendantId");Qa=o(()=>new Promise(setImmediate),"rest");o(Si,"when");o(aG,"exists");o(Hs,"stringify");o(Soe,"hasOtherProcesses")});function Jg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function Xg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var fG=ie(()=>{o(Jg,"euclideanDistance");o(Xg,"cosineDistance")});var mG,pG,fd,eo,dd,Toe,yoe,Zg,hG=ie(()=>{fG();mG=require("msgpackr"),pG=I(Os()),fd=I(Ee()),eo=(0,pG.loggerWithTag)("HNSW"),dd=Symbol.for("entryPoint"),Toe=Symbol.for("key"),yoe=10,Zg=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=mG.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Jg:Xg,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[Toe,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(dd);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let A=0;A<=E;A++)g[A]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);eo.debug?.("setting entry point to",i),this.indexStore.put(dd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),yoe),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);eo.debug?.("setting entry point to",i),this.indexStore.put(dd,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&eo.info?.("should not have zero connections for",l);let A=h[E];for(let S=0;S<g.length;S++){let{id:T,distance:w,node:L}=g[S];if(T===i)continue;let k=[];if(this.optimizeRouting){let V=!1,X=L[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let de=0;de<X.length;de++){let{id:ne,distance:ae}=X[de],ye=1+this.optimizeRouting*(1+.5*de/this.M);for(let Ae=0;Ae<A.length;Ae++){let{id:He,distance:Ge}=A[Ae];if(He===ne){w*Y>Ge+ae?V=!0:ae*ye>w+Ge&&(k.push({fromId:He,toId:T}),k.push({fromId:T,toId:He}));break}}if(V)break}if(V)continue}else if(S>=(E>0?this.M:this.M<<1))continue;A.push({id:T,distance:w});for(let{fromId:V,toId:X}of k){let Y=d(V);Y||(Y=d(V,this.indexStore.get(V)));for(let de=0;de<Y[E].length;de++)if(Y[E][de].id===X){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(de,1);break}}let te=c[E],F=te?.find(({id:V})=>V===T);if(F){let V=te?.indexOf(F);te.copied||(te=[...te],te.copied=!0,c[E]=te),te.splice(V,1)}else this.addConnection(T,d(T,L),i,E,w,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(dd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);eo.debug?.("setting entry point to",l),this.indexStore.put(dd,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(eo.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(dd);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new fd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new fd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=Xg;else if(s==="euclidean")c=Jg;else{if(s)throw new fd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new fd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new fd.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){eo.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||eo.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){eo.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&eo.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?eo.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?Jg:Xg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var Zw,EG=ie(()=>{hG();Zw={HNSW:Zg}});var pt={};be(pt,{database:()=>ed,databaseEnvs:()=>Wo,databases:()=>ve,dropDatabase:()=>aw,dropTableMeta:()=>Noe,getDatabases:()=>ct,getDefaultCompression:()=>oS,getTables:()=>Aoe,onRemovedDB:()=>Hp,onUpdatedTable:()=>Ol,readMetaDb:()=>vp,resetDatabases:()=>_d,table:()=>Je,tables:()=>pn});function kp(e,t){let r=sS.OpenDBIObject??sS.default.OpenDBIObject;return new r(e,t)}function Aoe(){return nS||ct(),pn||{}}function ct(){if(nS)return ve;nS=!0,hd=new Map;let e=(0,Yt.getHdbBasePath)()&&(0,Ft.join)((0,Yt.getHdbBasePath)(),qc),t=(0,Yt.get)(x.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Yt.get)(x.STORAGE_PATH)||e&&((0,ls.existsSync)(e)?e:(0,Ft.join)((0,Yt.getHdbBasePath)(),ZE)),!e)return;if((0,ls.existsSync)(e))for(let n of(0,ls.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ft.basename)(n.name,".mdb");n.isFile()&&(0,Ft.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&vp((0,Ft.join)(e,n.name),null,s)}if((0,ls.existsSync)((0,pd.getBaseSchemaPath)())){for(let n of(0,ls.readdirSync)((0,pd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Ft.join)((0,pd.getBaseSchemaPath)(),n.name),i=(0,Ft.join)((0,pd.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,ls.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,Ft.extname)(a.name).toLowerCase()===".mdb"){let c=(0,Ft.join)(i,a.name);vp((0,Ft.join)(s,a.name),(0,Ft.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ls.existsSync)(i))for(let c of(0,ls.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Ft.extname)(c.name).toLowerCase()===".mdb"&&vp((0,Ft.join)(i,c.name),(0,Ft.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,Ft.join)(l.path,(0,Ft.basename)(c+".mdb"));(0,ls.existsSync)(u)&&vp(u,c,n,null,!0)}}for(let n in ve){let s=hd.get(n);if(s){let i=ve[n];n.includes("delete")&&Cr.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(Cr.trace(`delete table class ${a}`),delete i[a])}else if(delete ve[n],n==="data"){for(let i in pn)delete pn[i];delete pn[iS]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"];if((0,Yt.get)(x.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(ve.system?.hdb_analytics?.enableAuditing(),ve.system?.hdb_analytics_hostname?.enableAuditing()),ve.system)for(let n of r)ve.system[n]&&(ve.system[n].replicate=!1);return hd=null,ve}function _d(){nS=!1;for(let[,e]of Wo)e.needsDeletion=!0;ct();for(let[e,t]of Wo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Wo.delete(e);let r=ve[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete ve[t.databaseName],xp.forEach(i=>i(t.databaseName));break}}return ve}function vp(e,t,r=rN,n,s){let i=new eN.default(e,!1);try{let a=Wo.get(e);a?a.needsDeletion=!1:(a=(0,Ed.open)(i),Wo.set(e,a));let c=new kp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(eS.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ls.existsSync)(n)&&(i.path=n,u=(0,Ed.open)(i),u.isLegacy=!0):u=k_(a));let d=yG(r),f=d[iS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let A=m.get(E);A||m.set(E,A={attributes:[]}),(g==null||h.is_hash_attribute)&&(A.primary=h),g!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let ae of E)if(ae.is_hash_attribute||ae.isPrimaryKey){g=ae;break}if(!g){Cr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let A=d[p],S={},T=[],w,L,k=typeof g.audit=="boolean"?g.audit:(0,Yt.get)(x.LOGGING_AUDITLOG),te=g.trackDeletes,F=g.expiration,V=g.eviction,X=g.sealed,Y=g.splitSegments,de=g.replicate;if(A)S=A.indices,T=A.attributes,A.schemaVersion++;else{w=g.tableId,w?w>=(l.get(md)||0)&&(l.putSync(md,w+1),Cr.info(`Updating next table id (it was out of sync) to ${w+1} for ${p}`)):(g.tableId=w=l.get(md),w||(w=1),Cr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(md,w+1),l.putSync(g.key,g));let ae=new kp(!g.is_hash_attribute,g.is_hash_attribute);if(ae.compression=g.compression,ae.compression){let ye=(0,Yt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||TG;ae.compression.threshold=ye}L=J_(a.openDB(g.key,ae),a),a.databaseName=r,L.tableId=w}let ne;for(let ae of E){ae.attribute=ae.name;try{if(!ae.is_hash_attribute&&(ae.indexed||ae.attribute&&!ae.name)){if(!S[ae.name]){let Ae=AG(ae.key,a,ae);S[ae.name]=Ae,S[ae.name].indexNulls=ae.indexNulls}let ye=T.find(Ae=>Ae.name===ae.name);ye?T.splice(T.indexOf(ye),1,ae):T.push(ae),ne=!0}}catch(ye){Cr.error("Error trying to update attribute",ae,T,S,ye)}}for(let ae of T)if(!E.find(Ae=>Ae.name===ae.name)){if(ae.is_hash_attribute){Cr.error("Unable to remove existing primary key attribute",ae);continue}ae.indexed&&(T.splice(T.indexOf(ae),1),ne=!0)}if(A)ne&&(A.schemaVersion++,A.updatedAttributes());else{A=RG(d,p,Qg({primaryStore:L,auditStore:u,audit:k,sealed:X,splitSegments:Y,replicate:de,expirationMS:F&&F*1e3,evictionMS:V&&V*1e3,trackDeletes:te,tableName:p,tableId:w,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let ae of Up)ae(A)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function yG(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=pn:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),hd&&!hd.has(e)){let r=new Set;t[iS]=r,hd.set(e,r)}return t}function RG(e,t,r){return e[t]=r,r}function ed({database:e,table:t}){e||(e=rN),ct();let r=yG(e),n=(0,Ft.join)((0,Yt.getHdbBasePath)(),qc),s=(0,Yt.get)(x.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Yt.get)(x.STORAGE_PATH)||((0,ls.existsSync)(n)?n:(0,Ft.join)((0,Yt.getHdbBasePath)(),ZE));let a=(0,Ft.join)(n,(i?t:e)+".mdb"),c=Wo.get(a);if(!c||c.status==="closed"){let l=new eN.default(a,!1);c=(0,Ed.open)(l),Wo.set(a,c)}return c.auditStore||(c.auditStore=k_(c)),c}async function aw(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Wo.delete(r.path),r.status==="open"&&(await r.close(),await Bp.remove(r.path));if(r||(r=ed({database:e,table:null}),r.status==="open"&&(await r.close(),await Bp.remove(r.path))),e==="data"){for(let n in pn)delete pn[n];delete pn[iS]}delete ve[e],xp.forEach(n=>n(e)),await ob(r)}function AG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&Zw[r.indexed.type]?.useObjectStore,s=new kp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=Zw[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Cr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Je(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=rN);let h=ed({database:r,table:t}),E=ve[r];Cr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let A,S,T;m==null&&(m=!0);let w=new kp(!1);for(let Y of a)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let L,k;if(g){if(A=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let Y=h.auditStore;S=a.find(ye=>ye.isPrimaryKey)||{},A=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=oS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Yt.get)(x.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Cr.trace(`${t} table loading, opening primary store`);let de=new kp(!1,!0);de.compression=S.compression;let ne=t+"/";if(T=h.dbisDb=h.openDB(eS.INTERNAL_DBIS_NAME,w),X(),T.get(ne))return k&&k(),_d(),Je(e);let ae=J_(h.openDB(ne,de),h);h.databaseName=r,ae.tableId=T.get(md),Cr.trace(`Assigning new table id ${ae.tableId} for ${t}`),ae.tableId||(ae.tableId=1),T.put(md,ae.tableId+1),S.tableId=ae.tableId,g=RG(E,t,Qg({primaryStore:ae,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:A,tableName:t,tableId:ae.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:T})),g.schemaVersion=1,L=!0,T.put(ne,S)}let te=g.indices;T=T||(h.dbisDb=h.openDB(eS.INTERNAL_DBIS_NAME,w)),g.dbisDB=T;let F=[];for(let{key:Y,value:de}of T.getRange({start:!0})){let[ne,ae]=Y.toString().split("/");if(ae===""&&(ae=de.name),ae){if(ne!==t)continue}else continue;let ye=a.find(He=>He.name===ae),Ae=!ye?.indexed&&de.indexed&&!de.isPrimaryKey;if((!ye||Ae)&&(X(),L=!0,ye||T.remove(Y),Ae)){let He=g.indices[ne];He&&F.push(He)}}let V=[];try{for(let Y of a||[]){if((Y.relationship||Y.computed)&&(L=!0,Y.relationship))continue;let de=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:de,configurable:!0});let ne=T.get(de);if(Y.isPrimaryKey){if(ne=ne||T.get(de=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ne.expiration||void 0)||(+s||void 0)!==(+ne.eviction||void 0)||Y.type!==ne.type){let ye={...ne};typeof c=="boolean"&&(c&&g.enableAuditing(c),ye.audit=c),n&&(ye.expiration=+n),s&&(ye.eviction=+s),l!==void 0&&(ye.sealed=l),d!==void 0&&(ye.replicate=d),Y.type&&(ye.type=Y.type),L=!0,X(),T.put(de,ye)}continue}ne?.attribute&&!ne.name&&(ne.indexed=!0);let ae=!ne||ne.type!==Y.type||JSON.stringify(ne.indexed)!==JSON.stringify(Y.indexed)||ne.nullable!==Y.nullable||ne.version!==Y.version||JSON.stringify(ne.properties)!==JSON.stringify(Y.properties)||JSON.stringify(ne.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let ye=AG(de,h,Y);(ae||ne.indexingPID&&ne.indexingPID!==process.pid||ne.restartNumber<Fp.workerData?.restartNumber)&&(L=!0,X(),ne=T.get(de),(ae||ne.indexingPID&&ne.indexingPID!==process.pid||ne.restartNumber<Fp.workerData?.restartNumber)&&(L=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=ne?.lastIndexedKey??void 0,Y.indexingPID=process.pid,ye.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:ye}),V.push(Y))),T.put(de,Y)),ne?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),ye.indexNulls=Y.indexNulls,te[Y.name]=ye}else ae&&(L=!0,X(),T.put(de,Y))}}finally{k&&k()}if(L&&(g.schemaVersion++,g.updatedAttributes()),Cr.trace(`${t} table loading, running index`),V.length>0||F.length>0?g.indexingOperation=woe(g,V,F):L&&tS.signalSchemaChange(new rS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,L)for(let Y of Up)Y(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Cr.trace(`${t} table loaded`),g;function X(){k||h.transactionSync(()=>({then(Y){k=Y}}))}o(X,"startTxn")}async function woe(e,t,r){try{Cr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await tS.signalSchemaChange(new rS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,Ed.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,A=E.dbi;try{let S=E.resolve,T=m&&(S?S(m):m[g]);if(A.customIndex){A.customIndex.index(f,T);continue}let w=(0,_G.getIndexedValues)(T);if(w)for(let L=0,k=w.length;L<k;L++)A.put(w[L],f)}catch(S){a[g]||(a[g]=!0,Cr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Cr.error(h)}),Fp.workerData&&Fp.workerData.restartNumber!==SG.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>boe?await s:d>Ioe&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await tS.signalSchemaChange(new rS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Cr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Cr.error("Error in indexing",n)}}function Noe({table:e,database:t}){let r=ed({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 Ol(e){return Up.push(e),{remove(){let t=Up.indexOf(e);t>-1&&Up.splice(t,1)}}}function Hp(e){return xp.push(e),{remove(){let t=xp.indexOf(e);t>-1&&xp.splice(t,1)}}}function oS(){let e=(0,Yt.get)(x.STORAGE_COMPRESSION),t=(0,Yt.get)(x.STORAGE_COMPRESSION_DICTIONARY),r=(0,Yt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||TG,n={startingOffset:32};return t&&(n.dictionary=Bp.readFileSync(t)),r&&(n.threshold=r),e&&n}var Yt,eS,Ed,Ft,ls,pd,eN,Bp,tN,_G,tS,rS,Fp,gG,SG,sS,Roe,Cr,rN,iS,TG,pn,ve,md,Up,xp,nS,Wo,hd,boe,Ioe,Pe=ie(()=>{Yt=I(le()),eS=I(Vt()),Ed=require("lmdb"),Ft=require("path"),ls=require("fs"),pd=I(At());rg();eN=I(jm());q();Bp=I(require("fs-extra")),tN=I(li()),_G=I(Pn()),tS=I(Go()),rS=I(rs()),Fp=require("worker_threads"),gG=I(Q()),SG=I(nt());No();nl();Ls();EG();sS=I(zm()),{forComponent:Roe}=gG.default;o(kp,"OpenDBIObject");Cr=Roe("storage"),rN="data",iS=Symbol("defined-tables"),TG=((0,Yt.get)(x.STORAGE_PAGESIZE)||4096)-60;(0,Yt.initSync)();pn=Object.create(null),ve=Object.create(null);(0,tN._assignPackageExport)("databases",ve);(0,tN._assignPackageExport)("tables",pn);md=Symbol.for("next-table-id"),Up=[],xp=[],Wo=new Map;o(Aoe,"getTables");o(ct,"getDatabases");o(_d,"resetDatabases");o(vp,"readMetaDb");o(yG,"ensureDB");o(RG,"setTable");o(ed,"database");o(aw,"dropDatabase");o(AG,"openIndex");o(Je,"table");boe=1e3,Ioe=10;o(woe,"runIndexing");o(Noe,"dropTableMeta");o(Ol,"onUpdatedTable");o(Hp,"onRemovedDB");o(oS,"getDefaultCompression")});var iN={};be(iN,{loadGQLSchema:()=>Poe,start:()=>sN,startOnMainThread:()=>Ooe});function sN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,p=[],h;for(let A of f.definitions)switch(A.kind){case l.OBJECT_TYPE_DEFINITION:let k=function(F){if(F.kind==="NonNullType"){let Y=k(F.type);return Y.nullable=!1,Y}if(F.kind==="ListType")return{type:"array",elements:k(F.type)};let X={type:F.name?.value};return Object.defineProperty(X,"location",{value:F.loc.startToken}),X};o(k,"getProperty");let S=A.name.value,T=[],w={table:null,database:null,properties:T};m.set(S,w),i.allTypes.set(S,w);for(let F of A.directives){if(F.name.value==="table"){for(let X of F.arguments)w[X.name.value]=X.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=S),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,p.push(w)}if(F.name.value==="sealed"&&(w.sealed=!0),F.name.value==="splitSegments"&&(w.splitSegments=!0),F.name.value==="replicate"&&(w.replicate=!0),F.name.value==="export"){w.export=!0;for(let X of F.arguments)typeof w.export!="object"&&(w.export={}),w.export[X.name.value]=X.value.value}}let L=!1,te={};for(let F of A.fields){let V=k(F.type);V.name=F.name.value,T.push(V),te[V.name]=void 0;for(let X of F.directives){let Y=X.name.value;if(Y==="primaryKey")L?console.warn("Can not define two attributes as a primary key at",X.loc):(V.isPrimaryKey=!0,L=!0);else if(Y==="indexed"){let de={};for(let ne of X.arguments||[])de[ne.name.value]=ne.value.value;V.indexed=de}else if(Y==="computed"){for(let de of X.arguments||[])if(de.name.value==="from"){let ne=de.value.value;V.computed={from:g(ne,de,te)},V.version==null&&(V.version=ne)}else de.name.value==="version"&&(V.version=de.value.value);V.computed=V.computed||!0}else if(Y==="relationship"){let de={};for(let ne of X.arguments)de[ne.name.value]=ne.value.value;V.relationship=de}else if(Y==="createdTime")V.assignCreatedTime=!0;else if(Y==="updatedTime")V.assignUpdatedTime=!0;else if(Y==="expiresAt")V.expiresAt=!0;else if(Y==="allow"){let de=V.authorizedRoles=[];for(let ne of X.arguments)ne.name.value==="role"&&de.push(ne.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,X.loc)}}w.type=S,S==="Query"&&(h=w)}function E(A){let S=m.get(A.type);S?(Object.defineProperty(A,"properties",{value:S.properties}),Object.defineProperty(A,"definition",{value:S})):A.type==="array"?E(A.elements):Coe.includes(A.type)||(0,IG.getWorkerIndex)()===0&&console.error(`The type ${A.type} is unknown at line ${A.location.line}, column ${A.location.column}, in ${s}`)}o(E,"connectPropertyType");for(let A of m.values())for(let S of A.properties)E(S);for(let A of p)A.tableClass=e(A),A.export&&(A.export.name===""?i.set((0,nN.dirname)(n),A.tableClass):i.set((0,nN.dirname)(n)+"/"+(A.export.name||A.type),A.tableClass,A.export));function g(A,S,T){return new bG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${A}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(T)}o(g,"createComputedFrom")}}var nN,bG,IG,Coe,Ooe,Poe,wG=ie(()=>{nN=require("path"),bG=require("node:vm");Pe();IG=I(nt());ka();Coe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(sN,"start");Ooe=sN,Poe=o(e=>sN({ensureTable:Je}).handleFile(e,null,null,new Vu),"loadGQLSchema")});var aN={};be(aN,{start:()=>koe});function Loe(e){if(e.kind!==ke.Kind.OPERATION_DEFINITION&&e.kind!==ke.Kind.FRAGMENT_DEFINITION)throw new Hr(`Unexpected non-executable definition type ${e.kind}.`)}function NG(e){if(typeof e!="object"||e===null)throw new to("Request body must be an object.");if(!("query"in e))throw new to("Request body must contain a `query` field.");if(typeof e.query!="string")throw new to("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new to("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new to("Request body `operationName` field must be a string.")}function oN(e){return parseInt(e.value,10)}function OG(e){return parseFloat(e.value)}function PG(e,t,r){let n=r.get(e.name.value);return LG(n)?DG(n,t):{attribute:t,value:n}}function LG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function DG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],LG(n)?DG(n,t):{attribute:t,value:n}))}function Doe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case ke.Kind.NULL:return{attribute:t,value:null};case ke.Kind.INT:return{attribute:t,value:oN(e.value)};case ke.Kind.FLOAT:return{attribute:t,value:OG(e.value)};case ke.Kind.BOOLEAN:case ke.Kind.STRING:return{attribute:t,value:e.value.value};case ke.Kind.VARIABLE:return PG(e.value,t,r);case ke.Kind.OBJECT:return MG(e.value,t,r);case ke.Kind.LIST:case ke.Kind.ENUM:default:throw new Hr(`Value type, ${e.value.kind}, is not supported.`)}}function MG(e,t,r){return e.fields.flatMap(n=>Doe(n,t,r))}function Moe(e,t){switch(e.value.kind){case ke.Kind.NULL:return{attribute:e.name.value,value:null};case ke.Kind.INT:return{attribute:e.name.value,value:oN(e.value)};case ke.Kind.FLOAT:return{attribute:e.name.value,value:OG(e.value)};case ke.Kind.BOOLEAN:case ke.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case ke.Kind.VARIABLE:return PG(e.value,e.name.value,t);case ke.Kind.OBJECT:return MG(e.value,[e.name.value],t);case ke.Kind.LIST:case ke.Kind.ENUM:default:throw new Hr(`Argument type, ${e.value.kind}, is not supported.`)}}function voe(e,t){return e.flatMap(r=>Moe(r,t))}function aS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case ke.Kind.FIELD:return r;case ke.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Hr(`Fragment \`${n}\` not found.`);return aS(s.selectionSet,t)}case ke.Kind.INLINE_FRAGMENT:return aS(r.selectionSet,t)}})}function vG(e,t){return aS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:vG(r.selectionSet,t)}:r.name.value)}async function Uoe(e,t,r,n){let s=xs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Hr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:vG(e.selectionSet,r),conditions:voe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function UG(e){switch(e.kind){case ke.Kind.NULL:return null;case ke.Kind.INT:return oN(e);case ke.Kind.FLOAT:return parseFloat(e.value);case ke.Kind.STRING:case ke.Kind.BOOLEAN:return e.value;case ke.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:UG(r.value),...t}),{});case ke.Kind.LIST:case ke.Kind.ENUM:default:throw new Hr(`Value type, ${e.kind}, is not supported.`)}}function xoe(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=UG(n.defaultValue)),n.type.kind===ke.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Hr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Boe(e,t,r,n){if(e.operation===ke.OperationTypeNode.SUBSCRIPTION)throw new Hr("Subscriptions are not supported.");if(e.operation===ke.OperationTypeNode.MUTATION)throw new Hr("Mutations are not supported yet.");let s=xoe(e.variableDefinitions,t),i=await Promise.all(aS(e.selectionSet,r).map(c=>Uoe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function CG({query:e,variables:t={},operationName:r},n){let s=ke.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(Loe(u),u.kind===ke.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Hr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Hr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Hr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Hr(`Operation \`${r}\` not found.`);let l=await Boe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Foe(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 NG(r),CG(r,e)}case"POST":{let r=await Lo(e.headers.get("content-type"),!0)(e._nodeRequest);return NG(r),CG(r,e)}default:throw new to("Method Not Allowed",405,{Allow:"GET, POST"})}}function koe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Foe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof to)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof ke.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Hr)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 to)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof ke.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Hr)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 ke,Hr,to,xG=ie(()=>{ke=I(require("graphql"));Do();ka();o(Loe,"assertExecutableDefinitionNode");o(NG,"assertRequestParams");o(oN,"processIntValueNode");o(OG,"processFloatValueNode");o(PG,"processVariableNode");o(LG,"isObject");o(DG,"transformObjectIntoQueryCondition");o(Doe,"processObjectFieldNode");o(MG,"processObjectValueNode");o(Moe,"processArgumentNode");o(voe,"buildConditionsQuery");o(aS,"fillInFragments");o(vG,"buildSelectQuery");o(Uoe,"processFieldNode");o(UG,"processConstValueNode");o(xoe,"resolveVariables");o(Boe,"executeOperation");o(CG,"resolver");Hr=class extends Error{static{o(this,"GraphQLQueryingError")}},to=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Foe,"graphqlQueryingHandler");o(koe,"start")});var qG=v((Uve,GG)=>{var gd=require("validate.js"),FG=ft(),Sd=(q(),M(W)),{handleHDBError:Hoe,hdbErrors:Goe}=Ee(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:qoe}=Goe,cN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),$oe={STRUCTURE_USER:"structure_user"},BG=Object.values(Sd.ROLE_TYPES_ENUM),Voe="attribute_permissions",Koe="attribute_name",{PERMS_CRUD_ENUM:Td}=Sd,Yoe=[Voe,...Object.values(Td)],kG=[Td.READ,Td.INSERT,Td.UPDATE],Woe=[Koe,...kG];function zoe(e){let t=cN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,HG(e,t)}o(zoe,"addRoleValidation");function joe(e){let t=cN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,HG(e,t)}o(joe,"alterRoleValidation");function Qoe(e){let t=cN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,FG.validateObject(e,t)}o(Qoe,"dropRoleValidation");var Joe=["operation","role","id","permission","hdb_user","access"];function HG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Joe.includes(n[a])||s.push(n[a]);s.length>0&&mr(sr.INVALID_ROLE_JSON_KEYS(s),r);let i=FG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{mr(a,r)}),e.permission){let a=Xoe(e);a&&mr(a,r),BG.forEach(c=>{e.permission[c]&&!gd.isBoolean(e.permission[c])&&mr(sr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(BG.indexOf(a)<0){if(a===$oe.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||mr(sr.SCHEMA_NOT_FOUND(f),r)}continue}mr(sr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){mr(sr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){mr(sr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Yoe.includes(d)||mr(sr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(Td).forEach(d=>{gd.isDefined(u[d])?gd.isBoolean(u[d])||mr(sr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):mr(sr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){mr(sr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){mr(sr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!Woe.includes(E)&&E!==Td.DELETE&&mr(sr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!gd.isDefined(p.attribute_name)){mr(sr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){mr(sr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}kG.forEach(E=>{gd.isDefined(p[E])?gd.isBoolean(p[E])||mr(sr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):mr(sr.ATTR_PERM_MISSING(E,h),r,a,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;mr(sr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Zoe(r)}o(HG,"customValidate");GG.exports={addRoleValidation:zoe,alterRoleValidation:joe,dropRoleValidation:Qoe};function Xoe(e){let{operation:t,permission:r}=e;if(t===Sd.OPERATIONS_ENUM.ADD_ROLE||t===Sd.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return sr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?Sd.ROLE_TYPES_ENUM.SUPER_USER:Sd.ROLE_TYPES_ENUM.CLUSTER_USER;return sr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Xoe,"validateNoSUPerms");function Zoe(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:sr.ROLE_PERMS_ERROR,...e};return Hoe(new Error,n,qoe.BAD_REQUEST)}else return null}o(Zoe,"generateRolePermResponse");function mr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(mr,"addPermError")});var qp=v((Fve,YG)=>{"use strict";var $G=kn(),VG=fn(),eae=yl(),uN=qG(),dN=Go(),Bve=require("uuid").v4,tae=require("util"),cS=(q(),M(W)),rae=ce(),fN=VG.searchByValue,nae=VG.searchByHash,sae=tae.promisify(eae.delete),iae=hi(),oae=Xu(),{hdbErrors:aae,handleHDBError:Pl}=Ee(),{HDB_ERROR_MSGS:KG,HTTP_STATUS_CODES:Gp}=aae,{UserEventMsg:mN}=rs();YG.exports={addRole:cae,alterRole:lae,dropRole:uae,listRoles:dae};function lN(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(lN,"scrubRoleDetails");async function cae(e){let t=uN.addRoleValidation(e);if(t)throw t;e=lN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await fN(r)||[])}catch(i){throw Pl(i)}if(n&&n.length>0)throw Pl(new Error,KG.ROLE_ALREADY_EXISTS(e.role),Gp.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 $G.insert(s),dN.signalUserChange(new mN(process.pid)),e=lN(e),e}o(cae,"addRole");async function lae(e){let t=uN.alterRoleValidation(e);if(t)throw t;e=lN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await $G.update(r)}catch(s){throw Pl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Pl(new Error,"Invalid role id",Gp.BAD_REQUEST,void 0,void 0,!0);return await dN.signalUserChange(new mN(process.pid)),e}o(lae,"alterRole");async function uae(e){let t=uN.dropRoleValidation(e);if(t)throw Pl(new Error,t,Gp.BAD_REQUEST,void 0,void 0,!0);let r=new oae(cS.SYSTEM_SCHEMA_NAME,cS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await nae(r));if(n.length===0)throw Pl(new Error,KG.ROLE_NOT_FOUND,Gp.NOT_FOUND,void 0,void 0,!0);let s=new iae(cS.SYSTEM_SCHEMA_NAME,cS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await fN(s)),a=!1;if(rae.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Pl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Gp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await sae(c),dN.signalUserChange(new mN(process.pid)),`${n[0].role} successfully deleted`}o(uae,"dropRole");async function dae(){return fN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(dae,"listRoles")});var pN={};be(pN,{start:()=>jG,startOnMainThread:()=>pae});function jG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,WG.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if(fae.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await mae(i)}}}async function mae(e){let t=ct().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,zG.isEqual)(i,e)?void 0:(e.id=r.id,(0,lS.alterRole)(e))}return(0,lS.addRole)(e)}var lS,WG,zG,fae,pae,QG=ie(()=>{Pe();lS=I(qp()),WG=require("yaml"),zG=require("lodash"),fae=["super_user","cluster_user","structure_user"];o(jG,"start");o(mae,"ensureRole");pae=jG});async function uS(e){let t=(0,ZG.pathToFileURL)(e).toString();if(hae)return $p||($p=Eae(gae)),(await(await $p).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Eae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),$p=new Compartment({console,Math,Date,fetch:_ae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,XG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Br,s.tables=pn,s.databases=ve}};let n=await(0,JG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),$p}function _ae(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 gae(){return{Resource:Br,tables:pn}}var JG,XG,ZG,hae,$p,hN=ie(()=>{Fa();Pe();JG=require("fs/promises"),XG=require("path"),ZG=require("url"),hae=!1;o(uS,"secureImport");o(Eae,"getCompartment");o(_ae,"secureOnlyFetch");o(gae,"getGlobalVars")});var EN={};be(EN,{handleApplication:()=>Sae,suppressHandleApplicationWarning:()=>Tae});function eq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Sae(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}uS(t.absolutePath).then(r=>{let n=(0,dS.dirname)(t.urlPath);eq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),tq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function tq(e,t,r){for(let n in t){let s=t[n],i=(0,dS.join)(r,n);eq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&tq(e,s,i)}}var dS,Tae,rq=ie(()=>{hN();dS=require("path");o(eq,"isResource");o(Sae,"handleApplication");o(tq,"recurseForResources");Tae=!0});var gN={};be(gN,{start:()=>yae});function yae({resources:e}){e.set("login",_N),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var _N,nq=ie(()=>{Fa();o(yae,"start");_N=class extends Br{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function lq(e){let t={openapi:Rae,info:{title:"HarperDB HTTP REST interface",version:aq.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}],n=o(s=>{if(s.type&&!t.components.schemas[s.type]){t.components.schemas[s.type]={};let i={},a=[];for(let c of s.properties)fS[c.type]?i[c.name]=new TN(fS[c.type],c.type):c.properties?(i[c.name]=new uq(c.type),n(c)):c.elements?.properties&&(i[c.name]=new Cae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new oq(i,!s.sealed,a)}},"includeDefinitionInSchema");for(let[,s]of e){if(!s.path||s.Resource.isError)continue;let{path:i}=s,a=i.split("/").pop(),{attributes:c,sealed:l}=s.Resource,{prototype:u,primaryKey:d="id"}=s.Resource;if(!c&&e.allTypes.has(s.path)){let te=e.allTypes.get(s.path);l=te.sealed,c=te.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:te,name:F,elements:V,relationship:X,definition:Y,nullable:de}of c){let ne=Y??V?.definition;ne&&n(ne),de===!1&&p.push(F),X?te==="array"?f[F]={type:"array",items:{$ref:Gs+V.type}}:f[F]={$ref:Gs+te}:ne?te==="array"?f[F]={type:"array",items:{$ref:Gs+ne.type}}:f[F]={$ref:Gs+ne.type}:te==="array"?V.type==="Any"?f[F]={type:"array",items:{format:V.type}}:f[F]={type:"array",items:new TN(fS[V.type],V.type)}:te==="Any"?f[F]={format:te}:f[F]=new TN(fS[te],te),m.push(new yN(F,"query",f[F]))}let h=Object.keys(f),E=new yN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new yN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new oq(f,!l,p);let A=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",T=typeof u.get=="function",w=typeof u.delete=="function",L=typeof u.patch=="function",k="/"+i+"/";A&&(t.paths[k]={},t.paths[k].post=new Aae(a,r,{200:new yd({$ref:Gs+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),T&&(t.paths[k]||(t.paths[k]={}),t.paths[k].get=new SN(m,r,{200:new yd({type:"array",items:{$ref:Gs+a}})},"search for records by the specified property name and value pairs")),t.paths[k]||(t.paths[k]={}),t.paths[k].options=new bae(m,r,{200:new Iae},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(t.paths[k]||(t.paths[k]={}),t.paths[k].delete=new iq(m,r,"delete all the records that match the provided query",{204:new sq})),k="/"+i+"/{"+d+"}",T&&(t.paths[k]={},t.paths[k].get=new SN([E],r,{200:new yd({$ref:Gs+a})},"retrieve a record by its primary key")),S&&(t.paths[k]||(t.paths[k]={}),t.paths[k].put=new wae([E],r,a,{200:new yd({$ref:Gs+a})},"create or update the record with the URL path that maps to the record's primary key")),L&&(t.paths[k]||(t.paths[k]={}),t.paths[k].patch=new Nae([E],r,a,{200:new yd({$ref:Gs+a})},"patch the record with the URL path that maps to the record's primary key")),w&&(t.paths[k]||(t.paths[k]={}),t.paths[k].delete=new iq([E],r,"delete a record with the given primary key",{204:new sq})),T&&g.schema.enum.length>0&&(k="/"+i+"/{"+d+"}.{property}",t.paths[k]={},t.paths[k].get=new SN([E,g],r,{200:new yd({enum:h})},"used to retrieve the specified property of the specified record"))}for(let[,s]of e.allTypes)n(s),s.sealed&&t.components.schemas[s.type].additionalProperties&&(t.components.schemas[s.type].additionalProperties=!1);return t}function Aae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Gs+e}}}},this.security=t,this.responses=r}function SN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function bae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Iae(){this.description=cq,this.headers={},this.content={}}function yd(e,t){this.description=cq,this.content={"application/json":{schema:e}},this.headers=t}function sq(){this.description="successfully processed request, no content returned to client"}function wae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Gs+r}}}},this.responses=n}function Nae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Gs+r}}}},this.responses=n}function iq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function oq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function TN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function uq(e){this.$ref=`#/components/schemas/${e}`}function Cae(e){this.type="array",this.items=new uq(e)}function yN(e,t,r){this.name=e,this.in=t,this.schema=r}var aq,Rae,fS,Gs,cq,dq=ie(()=>{aq=I(yt()),Rae="3.0.3",fS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Gs="#/components/schemas/",cq="successful operation";o(lq,"generateJsonApi");o(Aae,"Post");o(SN,"Get");o(bae,"Options");o(Iae,"ResponseOptions200");o(yd,"Response200");o(sq,"Response204");o(wae,"Put");o(Nae,"Patch");o(iq,"Delete");o(oq,"ResourceSchema");o(TN,"Type");o(uq,"Ref");o(Cae,"ArrayRef");o(yN,"Parameter")});var mq={};be(mq,{Request:()=>Xa,createReuseportFd:()=>mS});var fq,Xa,RN,AN,mS,Vp=ie(()=>{fq=require("os"),Xa=class{static{o(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new AN(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new RN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},RN=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},AN=class{static{o(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,fq.platform)()!="win32"&&(mS=require("node-unix-socket").createReuseportFd)});var hS={};be(hS,{parseHeaderValue:()=>IN,start:()=>Lae});async function Pae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&eg(e);let i=new ks;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==pq){let g=pS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new fi(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let A=IN(g);for(let S of A)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=IN(u).map(A=>(A.next?.name==="confirm"&&A.next.value>=0&&(e.replicatedConfirmation=+A.next.value),A.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Lo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Rd.ClientError(g,400)}if(e.authorize=!0,a===pq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return lq(pS);throw new Rd.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Rd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Rd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,bN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=eG(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=Nm(f.data,e,f)),f}else if(isFinite(p)){Oae[0]=p;let g=String.fromCharCode(34,(Xr[0]&63)+62,(Xr[0]>>6)+(Xr[1]<<2&63)+62,(Xr[1]>>4)+(Xr[2]<<4&63)+62,(Xr[2]>>2)+62,(Xr[3]&63)+62,(Xr[3]>>6)+(Xr[4]<<2&63)+62,(Xr[4]>>4)+(Xr[5]<<4&63)+62,(Xr[5]>>2)+62,(Xr[6]&63)+62,(Xr[6]>>6)+(Xr[7]<<2&63)+62,34),A=r["if-none-match"];A&&g==A?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),bN.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=Nm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?Ti.warn(a):Ti.info(a):Ti.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=Nm(a.contentType?a:_q(a),e,c),c}}function Lae(e){bN=e,e.includeExpensiveRecordCountEstimates&&(Xa.prototype.includeExpensiveRecordCountEstimates=!0),!hq&&(hq=!0,pS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Pae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Kp++;let s=new Xn;Eq||(Eq=!0,$m(l=>{Kp>0&&l.push({metric:"ws-connections",connections:Kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ti.warn(l)});let a;t.on("message",o(function(u){a||(a=Lo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);Xe(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{Kp--,jr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=pS.getMatch(l,"ws");if(jr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Xe(h=>({count:h.count,total:Kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new fi(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Po(p.value,r);t.send(h),Xe(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Ti.warn(l):Ti.info(l):Ti.error(l),t.close(Dae[l.statusCode]||1011,_q(l))}t.close()},e))}function IN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Ti,Rd,_q,Xr,Oae,bN,pq,hq,pS,Eq,Kp,Dae,gq=ie(()=>{Do();vs();Ti=I(Q()),Rd=I(Ee());tg();Ou();La();Pp();dq();Vp();ng();({errorToString:_q}=Ti),Xr=new Uint8Array(8),Oae=new Float64Array(Xr.buffer,0,1),bN={},pq="openapi";o(Pae,"http");Kp=0;o(Lae,"start");Dae={401:3e3,403:3003};o(IN,"parseHeaderValue")});var wN=v((uUe,Tq)=>{var{recordAction:ES,recordActionBinary:Sq}=(vs(),M(Y_)),Mae=require("fastify-plugin"),vae=200;Tq.exports=Mae(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),ES(a,"duration",u,f,d),Sq(s.raw.statusCode<400,"success",u,f,d),Sq(1,"response_"+s.raw.statusCode,u,f,d);let m=vae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{ES(performance.now()-c,"transfer",u,f,d),ES(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,ES(m,"bytes-sent",u,f,d));let p=a.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var Rq=v((dUe,yq)=>{var Uae=ft(),xae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};yq.exports=function(e){return Uae.validateObject(e,xae)}});var _S=v((fUe,Aq)=>{"use strict";var Bae=(q(),M(W)).OPERATIONS_ENUM,NN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Bae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Aq.exports=NN});var zp={};be(zp,{createTokens:()=>PN,getJWTRSAKeys:()=>RS,refreshOperationToken:()=>LN,validateOperationToken:()=>DN,validateRefreshToken:()=>AS});async function RS(){if(gS)return gS;try{let e=Yp.default.join(Wp.default.getHdbBasePath(),yA),t=await SS.default.readFile(Yp.default.join(e,om.JWT_PASSPHRASE_NAME),"utf8"),r=await SS.default.readFile(Yp.default.join(e,om.JWT_PRIVATE_KEY_NAME),"utf8");return gS={publicKey:await SS.default.readFile(Yp.default.join(e,om.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},gS}catch(e){throw yS.default.error(e),new yi.ClientError(bd.NO_ENCRYPTION_KEYS,Ad.INTERNAL_SERVER_ERROR)}}async function PN(e){let t=(0,CN.validateBySchema)(e,ro.default.object({username:ro.default.string().optional(),password:ro.default.string().optional(),role:ro.default.string().optional(),expires_in:ro.default.alternatives(ro.default.string(),ro.default.number()).optional()}));if(t)throw new yi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,ON.findAndValidateUser)(e.username,e.password,f)}catch(f){throw yS.default.error(f),new yi.ClientError(bd.INVALID_CREDENTIALS,Ad.UNAUTHORIZED)}if(!r)throw new yi.ClientError(bd.INVALID_CREDENTIALS,Ad.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let a=await RS(),c=await Id.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??Cq,algorithm:TS,subject:wd.OPERATION}),l=await Id.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Fae,algorithm:TS,subject:wd.REFRESH}),u=Sw(l,Fr.SHA256);if((await(0,bq.update)(new Iq.default(sm,Au.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new yi.ClientError(bd.REFRESH_TOKEN_SAVE_FAILED,Ad.INTERNAL_SERVER_ERROR);return wq.default.signalUserChange(new Nq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function LN(e){let t=(0,CN.validateBySchema)(e,ro.default.object({refresh_token:ro.default.string().required()}).required());if(t)throw new yi.ClientError(t.message);let{refresh_token:r}=e;await AS(r);let n=await RS(),s=await Id.default.decode(r);return{operation_token:await Id.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:Cq,algorithm:TS,subject:wd.OPERATION})}}async function DN(e){return Oq(e,wd.OPERATION)}async function AS(e){return Oq(e,wd.REFRESH)}async function Oq(e,t){try{let r=await RS(),n=await Id.default.verify(e,r.publicKey,{algorithms:TS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,ON.findAndValidateUser)(n.username,void 0,!1);if(t===wd.REFRESH&&!Tw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw yS.default.warn(r),r?.name==="TokenExpiredError"?new yi.ClientError(bd.TOKEN_EXPIRED,Ad.FORBIDDEN):new yi.ClientError(bd.INVALID_TOKEN,Ad.UNAUTHORIZED)}}var Id,SS,Yp,ro,CN,yi,yS,ON,bq,Iq,wq,Nq,Wp,Ad,bd,Cq,Fae,TS,wd,gS,Nd=ie(()=>{Id=I(require("jsonwebtoken")),SS=I(require("fs-extra")),Yp=I(require("node:path")),ro=I(require("joi")),CN=I(ft());q();yi=I(Ee()),yS=I(Q());Ug();ON=I(as()),bq=I(kn()),Iq=I(_S()),wq=I(Go()),Nq=I(rs()),Wp=I(le()),{HTTP_STATUS_CODES:Ad,AUTHENTICATION_ERROR_MSGS:bd}=yi.hdbErrors;Wp.default.initSync();Cq=Wp.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Fae=Wp.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",TS="RS256",wd={OPERATION:"operation",REFRESH:"refresh"};o(RS,"getJWTRSAKeys");o(PN,"createTokens");o(LN,"refreshOperationToken");o(DN,"validateOperationToken");o(AS,"validateRefreshToken");o(Oq,"validateToken")});var MN=v((_Ue,Dq)=>{"use strict";var kae=Rq(),Cd=require("passport"),Hae=require("passport-local").Strategy,Gae=require("passport-http").BasicStrategy,qae=require("util"),$ae=as(),Lq=qae.callbackify($ae.findAndValidateUser),EUe=Yr(),Vae=(q(),M(W)),Pq=(Nd(),M(zp));Cd.use(new Hae(function(e,t,r){Lq(e,t,r)}));Cd.use(new Gae(function(e,t,r){Lq(e,t,r)}));Cd.serializeUser(function(e,t){t(null,e)});Cd.deserializeUser(function(e,t){t(null,e)});function Kae(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":Cd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Vae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Pq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):Pq.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Cd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(Kae,"authorize");function Yae(e,t){let r=kae(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(Yae,"checkPermissions");Dq.exports={authorize:Kae,checkPermissions:Yae}});var bS=v((SUe,Mq)=>{"use strict";var Wae=is();Mq.exports={writeTransaction:zae};function zae(e,t,r){return Wae.writeTransaction(e,t,r)}o(zae,"writeTransaction")});var Bq=v((RUe,xq)=>{"use strict";var jae=fn(),Qae=ji(),vq=Q(),Jae=kn(),yUe=bS(),Xae=require("clone"),UN=require("alasql"),Zae=Bg(),Uq=require("util"),ece=Uq.promisify(Qae.getTableSchema),tce=Uq.promisify(jae.search),rce=(q(),M(W)),vN=ce();Zae(UN);xq.exports={update:sce};var nce="There was a problem performing this update. Please check the logs and try again.";async function sce({statement:e,hdb_user:t}){let r=await ece(e.table.databaseid,e.table.tableid),n=ice(e.columns);vN.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=Xae(s),c=vN.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=UN.parse(l).statements[0],d=await tce(u),f=oce(n,d);return ace(a,f,t)}o(sce,"update");function ice(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=UN.compile(`SELECT ${r.expression.toString()} AS [${rce.FUNC_VAL}] FROM ?`)}),t}catch(t){throw vq.error(t),new Error(nce)}}o(ice,"createUpdateRecord");function oce(e,t){return vN.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(oce,"buildUpdateRecords");async function ace(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Jae.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){vq.error(`Error delete new_attributes from update response: ${i}`)}return s}o(ace,"updateRecords")});var kq=v((wUe,Fq)=>{var cce=require("alasql"),lce=fn(),uce=Q(),dce=is(),BN=require("util"),xN=ce(),fce=(q(),M(W)),mce=ji(),bUe=bS(),IUe=kn(),pce="record",hce="successfully deleted",Ece=BN.callbackify(Tce),_ce=BN.promisify(lce.search),gce=BN.promisify(mce.getTableSchema);Fq.exports={convertDelete:Ece};function Sce(e){return`${e.deleted_hashes.length} ${pce}${e.deleted_hashes.length===1?"":"s"} ${hce}`}o(Sce,"generateReturnMessage");async function Tce({statement:e,hdb_user:t}){let r=await gce(e.table.databaseid,e.table.tableid);xN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=xN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=cce.parse(a).statements[0],l={operation:fce.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await _ce(c);let u=await dce.deleteRecords(l);return xN.isEmptyOrZeroLength(u.message)&&(u.message=Sce(u)),delete u.txn_time,u}catch(u){throw uce.error(u),u.hdb_code?u.message:u}}o(Tce,"convertDelete")});var Dl=v((OUe,$q)=>{"use strict";var CUe=fn(),jp=Q(),{validateBySchema:Hq}=ft(),Ll=require("joi"),yce=Ji(),IS=ce(),{handleHDBError:wS,hdbErrors:Rce,ClientError:Gq}=Ee(),{HDB_ERROR_MSGS:NS,HTTP_STATUS_CODES:FN}=Rce,qq=le();qq.initSync();var{getDatabases:kN}=(Pe(),M(pt)),Ace=require("fs-extra"),bce=(q(),M(W));$q.exports={describeAll:Ice,describeTable:CS,describeSchema:wce};async function Ice(e={}){try{let t=IS.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=kN(),a={},c={},l=[],u=e?.exact_count;for(let f in i){a[f]=!0,!t&&!s&&!r&&(c[f]=e.hdb_user?.role?.permission[f]?.describe);let m=i[f];for(let p in m)try{let h;if(t||s||r)h=await CS({schema:f,table:p,exactCount:u});else if(n&&n[f].describe&&n[f].tables[p].describe){let E=n[f].tables[p].attribute_permissions;h=await CS({schema:f,table:p,exactCount:u},E)}h&&l.push(h)}catch(h){jp.error(h)}}let d={};for(let f in l)t||s||r?(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]):c[l[f].schema]&&(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]);for(let f in a)t||s||r?d[f]={}:c[f]&&(d[f]={});return d}catch(t){return jp.error("Got an error in describeAll"),jp.error(t),wS(new Error,NS.DESCRIBE_ALL_ERR)}}o(Ice,"describeAll");async function CS(e,t){IS.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=Hq(e,Ll.object({database:Ll.string(),table:Ll.string().required(),exact_count:Ll.boolean().strict()}));if(i)throw new Gq(i.message);let c=kN()[r];if(!c)throw wS(new Error,NS.SCHEMA_NOT_FOUND(e.schema),FN.NOT_FOUND);let l=c[n];if(!l)throw wS(new Error,NS.TABLE_NOT_FOUND(e.schema,e.table),FN.NOT_FOUND);function u(p){d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}o(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await Ace.stat(l.primaryStore.env.path)).size}catch(p){jp.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),qq.get(bce.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=yce.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){jp.warn(`unable to stat table dbi due to ${p}`)}return m}o(CS,"descTable");async function wce(e){IS.transformReq(e);let t=Hq(e,Ll.object({database:Ll.string(),exact_count:Ll.boolean().strict()}));if(t)throw new Gq(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=kN()[n];if(!i)throw wS(new Error,NS.SCHEMA_NOT_FOUND(e.schema),FN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),IS.isEmpty(l)||l.describe){let u=await CS({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(wce,"describeSchema")});var zq=v((LUe,Wq)=>{"use strict";var Nce=Dl(),{hdbErrors:Vq}=Ee(),{getDatabases:Kq}=(Pe(),M(pt));Wq.exports={checkSchemaExists:Yq,checkSchemaTableExists:Cce,schemaDescribe:Nce};async function Yq(e){if(!Kq()[e])return Vq.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Yq,"checkSchemaExists");async function Cce(e,t){let r=await Yq(e);if(r)return r;if(!Kq()[e][t])return Vq.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Cce,"checkSchemaTableExists")});var VN=v((xUe,o$)=>{"use strict";var{decode:Oce}=require("msgpackr"),{isMainThread:MUe,parentPort:vUe,threadId:UUe}=require("worker_threads"),LS=pr(),Od=Nt(),qN=(q(),M(W)),hn=Q(),GN=le(),Pce=(q(),M(W)),{onMessageByType:Lce}=nt(),Xq=Ji(),{recordAction:jq,recordActionBinary:Dce}=(vs(),M(Y_)),{publishToStream:Mce}=LS,{ConsumerEvents:Qq}=require("nats"),vce=fn(),{promisify:Uce}=require("util"),{decodeBlobsWithWrites:xce}=(Ls(),M(ab)),Zq=Uce(setTimeout),DS=1e4,MS,PS,Bce,Fce,e$,Qp=new Map,Pd=new Map;o$.exports={initialize:t$,ingestConsumer:$N,setSubscription:kce,setIgnoreOrigin:qce,getDatabaseSubscriptions:Gce,updateConsumer:r$};async function t$(){Lce(qN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await r$(n)}),e$=!0,hn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await LS.getNATSReferences();MS=e,PS=e.info.server_name,Bce=t,Fce=r}o(t$,"initialize");async function r$(e){if(e.status==="start"){let{js:t,jsm:r}=await n$(e.node_domain_name);$N(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Qp.get(e.stream_name+e.node_domain_name);t&&(hn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Qp.set(e.stream_name+e.node_domain_name,"close")),Pd.get(e.node_domain_name)==="failed"&&Pd.set(e.node_domain_name,"close")}}o(r$,"updateConsumer");var vS=new Map;function kce(e,t,r){let n=vS.get(e);n||vS.set(e,n=new Map),n.set(t,r),e$||t$().then(Hce)}o(kce,"setSubscription");async function Hce(){let e=await vce.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Od.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await n$(r),!n))break;let{schema:a,table:c}=i,l=Xq.createNatsTableStreamName(a,c);$N(l,n,s,r)}}}o(Hce,"accessConsumers");async function n$(e){let t,r,n=1;for(;!r;)try{t=await MS.jetstream({domain:e}),r=await MS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Pd.get(e)==="close")break;Pd.set(e,"failed"),n%10===1&&hn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<DS?n++*100:DS;await Zq(i)}return{js:t,jsm:r}}o(n$,"connectToRemoteJS");function Gce(){return vS}o(Gce,"getDatabaseSubscriptions");var s$;function qce(e){s$=e}o(qce,"setIgnoreOrigin");var i$=100,Jq=new Array(i$),OS=0;async function $N(e,t,r,n){let{connection:s}=await LS.getNATSReferences();MS=s,PS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,PS),hn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Pd.get(n)==="close")break;a%10===1&&hn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(hn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await LS.createConsumer(r,e,PS,new Date(Date.now()).toISOString()));let d=a++*100<DS?a++*100:DS;await Zq(d)}let c=!1,l;for(;!c;){if(Qp.get(e+n)==="close"||Pd.get(n)==="close"){Qp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:GN.get(qN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Qp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===Qq.ConsumerDeleted&&(await l.close(),c=!0),d.type===Qq.HeartbeatsMissed){let f=d.data;hn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(hn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await Jq[OS],Jq[OS]=$ce(d).catch(f=>{hn.error(f)}),++OS>=i$&&(OS=0)}catch(d){d.message==="consumer deleted"?(hn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):hn.error("Error consuming clustering ingest, restarting consumer",d)}}}o($N,"ingestConsumer");async function $ce(e){let t;await xce(()=>{t=Oce(e.data)}),jq(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),hn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=GN.get(qN.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Od.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Od.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Od.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!s$),Dce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Od.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;hn.trace("processing message:",a,c,u,(d?"records: "+d.map(L=>L?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),hn.trace(`messageProcessor nats msg id: ${e.headers.get(Od.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(L=>h=L),{timestamp:g,user:A,node_name:S}=m||{},T=vS.get(c)?.get(u);if(!T)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,T.send(t);else if(d.length===1&&!l)T.send({type:HN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:A,nodeName:S});else{let L=d.map((k,te)=>({type:HN(a),value:k,expiresAt:p,id:f?.[te],table:u}));for(;l;)L.push({type:HN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;T.send({type:"transaction",writes:L,table:u,timestamp:g,onCommit:h,user:A,nodeName:S})}GN.get(Pce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Mce(e.subject.split(".").slice(0,-1).join("."),Xq.createNatsTableStreamName(c,u),e.headers,e.data),await E;let w=Date.now()-g;g&&jq(w,"replication-latency",e.subject,a,"ingest")}catch(a){hn.error(a)}e.ack()}o($ce,"messageProcessor");function HN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(HN,"convertOperation")});var pr=v(($Ue,A$)=>{"use strict";var Gr=le();Gr.initSync();var Vce=require("fs-extra"),Kce=require("semver"),Zp=require("path"),{monotonicFactory:Yce}=require("ulidx"),c$=Yce(),Wce=require("util"),l$=require("child_process"),zce=Wce.promisify(l$.exec),jce=l$.spawn,Zr=Nt(),et=(q(),M(W)),{packageJson:Qce,PACKAGE_ROOT:Jce}=yt(),US=ce(),Ri=Q(),xS=Ji(),Xce=bS(),Jp=Rt(),{broadcast:Zce,onMessageByType:ele,getWorkerIndex:tle}=nt(),{isMainThread:u$}=require("worker_threads"),{Encoder:rle,decode:zN}=require("msgpackr"),d$=new rle,{isEmpty:xl}=US,f$=as(),FUe=48*36e11;u$&&ele(et.ITC_EVENT_TYPES.RESTART,()=>{En=void 0,Ul=void 0});var{connect:nle,StorageType:sle,RetentionPolicy:ile,AckPolicy:jN,DeliverPolicy:QN,DiscardPolicy:ole,NatsConnection:kUe,JetStreamManager:HUe,JetStreamClient:GUe,StringCodec:qUe,JSONCodec:ale,createInbox:JN,headers:cle,ErrorCode:a$}=require("nats"),{recordAction:lle}=(vs(),M(Y_)),{encodeBlobsAsBuffers:ule}=(Ls(),M(ab)),m$=ale(),dle="clustering",fle=Qce.engines[Zr.NATS_SERVER_NAME],mle=Zp.join(Jce,"dependencies"),WN=Zp.join(mle,`${process.platform}-${process.arch}`,Zr.NATS_BINARY_NAME),KN,YN,Xp,Ml,vl;A$.exports={runCommand:p$,checkNATSServerInstalled:ple,createConnection:XN,getConnection:eh,getJetStreamManager:th,getJetStream:E$,getNATSReferences:no,getServerList:Ele,createLocalStream:ZN,listStreams:_$,deleteLocalStream:_le,getServerConfig:Ld,listRemoteStreams:gle,viewStream:Sle,viewStreamIterator:Tle,publishToStream:yle,request:ble,reloadNATS:eC,reloadNATSHub:Ile,reloadNATSLeaf:wle,extractServerName:Ale,requestErrorHandler:Nle,createLocalTableStream:y$,createTableStreams:Ple,purgeTableStream:R$,purgeSchemaTableStreams:Lle,getStreamInfo:Dle,updateLocalStreams:vle,closeConnection:hle,getJsmServerName:BS,addNatsMsgHeader:g$,clearClientCache:h$,updateRemoteConsumer:Cle,createConsumer:S$,updateConsumerIterator:Ole};async function p$(e,t=void 0){let{stdout:r,stderr:n}=await zce(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
16
16
|
`,""));return r.replace(`
|
|
17
|
-
`,"")}o(p$,"runCommand");async function ple(){try{await Vce.access(WN)}catch{return!1}let e=await p$(`${WN} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Kce.eq(t,fle)}o(ple,"checkNATSServerInstalled");async function XN(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await f$.getClusterUser();if(xl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}Ri.trace("create nats connection called");let i=await nle({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ri.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&Ri.error("Error with Nats client connection, connection closed",a),i===En&&h$()}),i}o(XN,"createConnection");function h$(){En=void 0,Ml=void 0,vl=void 0,Ul=void 0}o(h$,"clearClientCache");async function hle(){En&&(await En.drain(),En=void 0,Ml=void 0,vl=void 0,Ul=void 0)}o(hle,"closeConnection");var En,Ul;async function eh(){return Ul||(Ul=XN(Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),En=await Ul),En||Ul}o(eh,"getConnection");async function th(){if(Ml)return Ml;xl(En)&&await eh();let{domain:e}=Ld(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(xl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ml=await En.jetstreamManager({domain:e,timeout:6e4}),Ml}o(th,"getJetStreamManager");async function E$(){if(vl)return vl;xl(En)&&await eh();let{domain:e}=Ld(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(xl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return vl=En.jetstream({domain:e,timeout:6e4}),vl}o(E$,"getJetStream");async function no(){let e=En||await eh(),t=Ml||await th(),r=vl||await E$();return{connection:e,jsm:t,js:r}}o(no,"getNATSReferences");async function Ele(e){let t=Gr.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await f$.getClusterUser(),s=await XN(t,r,n),i=JN(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=m$.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await US.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Ele,"getServerList");async function ZN(e,t){let{jsm:r}=await no(),n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:sle.File,retention:ile.Limits,subjects:t,discard:ole.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(ZN,"createLocalStream");async function _$(){let{jsm:e}=await no(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(_$,"listStreams");async function _le(e){let{jsm:t}=await no();await t.streams.delete(e)}o(_le,"deleteLocalStream");async function gle(e){let{connection:t}=await no(),r=[],n=JN(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(m$.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(gle,"listRemoteStreams");async function Sle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await no(),i=c$(),a={durable_name:i,ack_policy:jN.Explicit};t&&(a.deliver_policy=QN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=zN(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Zr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(Sle,"viewStream");async function*Tle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await no(),i=c$(),a={durable_name:i,ack_policy:jN.Explicit};t&&(a.deliver_policy=QN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=zN(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(Zr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Tle,"viewStreamIterator");async function yle(e,t,r,n){Ri.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=g$(n,r);let{js:s}=await no(),i=await BS(),a=`${e}.${i}`,c=await ule(()=>n instanceof Uint8Array?n:d$.encode(n));try{Ri.trace(`publishToStream publishing to subject: ${a}`),lle(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return T$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ri.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await ZN(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(yle,"publishToStream");function g$(e,t){t===void 0&&(t=cle());let r=Gr.get(et.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Zr.MSG_HEADERS.ORIGIN)&&r&&t.append(Zr.MSG_HEADERS.ORIGIN,r),t}o(g$,"addNatsMsgHeader");function Ld(e){e=e.toLowerCase();let t=Zp.join(Gr.get(et.CONFIG_PARAMS.ROOTPATH),dle);if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return xl(YN)&&(YN={port:Jp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Jp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zr.SERVER_SUFFIX.HUB,config_file:Zr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Zp.join(t,Zr.PID_FILES.HUB),hdbNatsPath:t}),YN;if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return xl(KN)&&(KN={port:Jp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Jp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zr.SERVER_SUFFIX.LEAF,config_file:Zr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Jp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zr.SERVER_SUFFIX.LEAF,pid_file_path:Zp.join(t,Zr.PID_FILES.LEAF),hdbNatsPath:t}),KN;Ri.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Ld,"getServerConfig");async function S$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:jN.Explicit,durable_name:r,deliver_policy:QN.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(S$,"createConsumer");async function Rle(e,t,r){await e.consumers.delete(t,r)}o(Rle,"removeConsumer");function Ale(e){return e.split(".")[1]}o(Ale,"extractServerName");async function ble(e,t,r=6e4,n=JN()){if(!US.isObject(t))throw new Error("data param must be an object");let s=d$.encode(t),{connection:i}=await no(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return zN(c.data)}o(ble,"request");function eC(e){return new Promise(async(t,r)=>{let n=jce(WN,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(eC,"reloadNATS");async function Ile(){let{pid_file_path:e}=Ld(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await eC(e)}o(Ile,"reloadNATSHub");async function wle(){let{pid_file_path:e}=Ld(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await eC(e)}o(wle,"reloadNATSLeaf");function Nle(e,t,r){let n;switch(e.code){case a$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case a$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(Nle,"requestErrorHandler");async function Cle(e,t){let r=t+Zr.SERVER_SUFFIX.LEAF,{connection:n}=await no(),{jsm:s}=await xle(r),{schema:i,table:a}=e,c=xS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await T$(async()=>{if(e.subscribe===!0)await S$(s,c,n.info.server_name,l);else try{await Rle(s,c,n.info.server_name)}catch(u){Ri.trace(u)}})}o(Cle,"updateRemoteConsumer");async function Ole(e,t,r,n){let s=xS.createNatsTableStreamName(e,t),i=r+Zr.SERVER_SUFFIX.LEAF,a={type:et.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!u$&&tle()<Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=VN();await c(a)}await Zce(a),n==="stop"&&await US.asyncSetTimeout(1e3)}o(Ole,"updateConsumerIterator");function T$(e){return Xce.writeTransaction(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(T$,"exclusiveLock");async function y$(e,t){let r=xS.createNatsTableStreamName(e,t),n=await BS(),s=Mle(e,t,n);await ZN(r,[s])}o(y$,"createLocalTableStream");async function Ple(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await y$(n,s)}}o(Ple,"createTableStreams");async function R$(e,t,r=void 0){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=xS.createNatsTableStreamName(e,t),{domain:s}=Ld(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await eh()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ri.warn(n);else throw n}}o(R$,"purgeTableStream");async function Lle(e,t){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await R$(e,t[r])}o(Lle,"purgeSchemaTableStreams");async function Dle(e){return(await th()).streams.info(e)}o(Dle,"getStreamInfo");function Mle(e,t,r){return`${Zr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(Mle,"createSubjectName");async function BS(){if(Xp)return Xp;if(Xp=(await th())?.nc?.info?.server_name,Xp===void 0)throw new Error("Unable to get jetstream manager server name");return Xp}o(BS,"getJsmServerName");async function vle(){let e=await th(),t=await BS(),r=await _$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=Ule(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");Ri.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(vle,"updateLocalStreams");function Ule(e){let{config:t}=e,r=!1,n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(Ule,"updateStreamLimits");async function xle(e){let t,r;try{t=await En.jetstream({domain:e}),r=await En.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ri.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(xle,"connectToRemoteJS")});function tC(e){let t=e.get(FS),r=t?(0,Dd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=it(),s=!1;r.nodeName=it();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:nh(e)??1,nodes:[]})})}i[n]=0,e.putSync(FS,(0,Dd.pack)(r))}return r}function rh(e){return tC(e).remoteNameToId}function I$(e,t){let r=tC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(FS,(0,Dd.pack)(r)),s}function kS(e,t){let r=tC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(FS,(0,Dd.pack)(r))}return b$.trace?.("The remote node name map",e,n,s),s}var b$,Dd,FS,rC=ie(()=>{b$=I(Os());ls();Dd=require("msgpackr"),FS=Symbol.for("remote-ids");o(tC,"getIdMappingRecord");o(rh,"exportIdMapping");o(I$,"remoteToLocalNodeId");o(kS,"getIdOfRemoteNode")});var nC={};be(nC,{commitsAwaitingReplication:()=>vd,getHDBNodeTable:()=>Wt,getReplicationSharedStatus:()=>Ud,iterateRoutes:()=>ih,shouldReplicateToNode:()=>sh,subscribeToNodeUpdates:()=>xd});function Wt(){return w$||(w$=Je({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Ud(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function xd(e){Wt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;P$.debug?.("adding node",n,"on node",it()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==it()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Wt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function sh(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Wt().primaryStore.get(it())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Ble(){xd(e=>{Za({},(t,r)=>{let n=e.name,s=N$.get(n);if(s||N$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=Ud(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of vd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*ih(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=Md.default.get(x.REPLICATION_SECUREPORT)??(!Md.default.get(x.REPLICATION_PORT)&&Md.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Md.default.get(x.REPLICATION_PORT)||Md.default.get(x.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){C$.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var C$,O$,Md,P$,w$,N$,vd,Bl=ie(()=>{Pe();ls();ym();C$=require("worker_threads"),O$=I(Ee()),Md=I(le());q();P$=I(Os());server.nodes=[];o(Wt,"getHDBNodeTable");o(Ud,"getReplicationSharedStatus");o(xd,"subscribeToNodeUpdates");o(sh,"shouldReplicateToNode");N$=new Map;TU((e,t,r)=>{if(r>server.nodes.length)throw new O$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);vd||(vd=new Map,Ble());let n=vd.get(e);return n||(n=[],vd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(Ble,"startSubscriptionToReplications");o(ih,"iterateRoutes")});var U$={};be(U$,{connectedToNode:()=>Fl,disconnectedFromNode:()=>Fd,ensureNode:()=>zo,requestClusterStatus:()=>v$,startOnMainThread:()=>iC});async function iC(e){let t=0,r=ct();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){HS.set(i,nh(l.auditStore));break}}}io.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=it();function c(){let l=Wt().primaryStore.get(a);if(l!==null){let u=e.url??ec();if(l===void 0||l.url!==u||l.shard!==e.shard)return zo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Wt().primaryStore.get(a)&&c();for(let l of ih(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}xd(s)});let n;function s(i,a=i?.name){let c=it()&&a===it()||ec()&&i?.url===ec();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Wt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ut.trace("Setting up node replication for",i),!i){for(let[f,m]of so){let p;for(let[h,{worker:E,nodes:g}]of m){let A=g[0];if(A&&A.name==a){p=!0;for(let[S,{worker:T}]of m)m.delete(S),ut.warn("Node was deleted, unsubscribing from node",a,S,f),T?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){so.get(f).iterator.remove(),so.delete(f);return}}return}if(c)return;if(!i.url){ut.info(`Node ${i.name} is missing url`);return}let l=so.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ut.info(`Added node ${i.name} at ${i.url} for process ${it()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Bd)if(i.url===m.url){Bd.delete(f);break}Bd.set(i.name,i)}let u=ct();if(l||(l=new Map,so.set(i.url,l)),l.iterator=Za(e,(f,m,p)=>{p?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ut.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ut.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];HS.has(f)&&(E.push({replicateByDefault:m,name:it(),startTime:HS.get(f),endTime:Date.now(),replicates:!0}),HS.delete(f));let g=sh(i,f),A=io.workers.filter(S=>S.name==="http");if(p?(h=p.worker,p.nodes=E):g&&(t=t%A.length,h=A[t++],l.set(f,{worker:h,nodes:E,url:i.url}),h?.on("exit",()=>{l.get(f)?.worker===h&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let S={type:"subscribe-to-node",database:f,nodes:E};h?h.postMessage(S):oh(S)},Fle);else{ut.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Wt().primaryStore.get(it())?.replicates}),Wt().primaryStore.get(it())?.replicates||(n=!1,ut.info("Disabling replication, this node name",it(),Wt().primaryStore.get(it()),f));let S={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};h?h.postMessage(S):qS(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Fd=o(function(i){try{ut.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Bd.keys()),c=a.sort(),l=c.indexOf(i.name||Ai(i.url));if(l===-1){ut.warn("Disconnected node not found in node map",i.name,a);return}let u=so.get(i.url),d=u?.get(i.database);if(!d){ut.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||sC.default.get(x.REPLICATION_FAILOVER)===!1)return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,p=(l+1)%c.length;for(;l!==p;){let h=c[p],E=Bd.get(h);u=so.get(E.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){p=(p+1)%c.length;continue}let{worker:A,nodes:S}=g,T=!1;for(let w of d.nodes){if(S.some(L=>L.name===w.name)){ut.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}w.endTime<Date.now()||(S.push(w),T=!0)}if(d.nodes=[d.nodes[0]],!T){ut.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}ut.info(`Failing over ${i.database} from ${i.name} to ${h}`),A?A.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):oh({database:i.database,nodes:S});return}ut.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ut.error("Error failing over node",a)}},"disconnectedFromNode"),Fl=o(function(i){let a=so.get(i.url),c=a?.get(i.database);if(!c){ut.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ut.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ut.debug("Connected node is not named yet",i.database,c);return}c.nodes=[l];let u=!1;for(let d of so.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:p,connected:h}=f;if(p)if(h===!1&&p[0].shard===l.shard)u=!0,c.nodes.push(p[0]);else{let E=p.filter(g=>g&&g.name!==l.name);E.length<p.length&&(f.nodes=E,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:p}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,io.onMessageByType)("disconnected-from-node",Fd),(0,io.onMessageByType)("connected-to-node",Fl),(0,io.onMessageByType)("request-cluster-status",v$)}function v$(e,t){let r=[];for(let[n,s]of Bd)try{let i=so.get(s.url);ut.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=D$(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ut.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function zo(e,t){let r=Wt();e=e??Ai(t.url),t.name=e;try{if(t.ca){let s=new M$.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ut.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ut.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!sC.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=D$(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ut.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var io,GS,ut,L$,sC,M$,D$,Fle,so,Fd,Fl,Bd,HS,ah=ie(()=>{Pe();io=I(nt());ls();GS=require("worker_threads");Bl();ut=I(Q()),L$=I(require("lodash")),sC=I(le());q();M$=require("crypto"),{cloneDeep:D$}=L$.default,Fle=200,so=new Map,Bd=new Map,HS=new Map;o(iC,"startOnMainThread");o(v$,"requestClusterStatus");GS.parentPort&&(Fd=o(e=>{GS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Fl=o(e=>{GS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,io.onMessageByType)("subscribe-to-node",e=>{oh(e)}),(0,io.onMessageByType)("unsubscribe-from-node",e=>{qS(e)}));o(zo,"ensureNode")});var ds=v(zt=>{"use strict";var hr=require("path"),{watch:kle}=require("chokidar"),Hn=require("fs-extra"),kd=require("node-forge"),G$=require("net"),{generateKeyPair:oC,X509Certificate:jo,createPrivateKey:q$}=require("crypto"),Hle=require("util");oC=Hle.promisify(oC);var Ct=kd.pki,bi=require("joi"),{v4:$$}=require("uuid"),{validateBySchema:uC}=ft(),{forComponent:Gle}=Q(),us=le(),qs=(q(),M(W)),{CONFIG_PARAMS:Hl}=qs,Ii=wA(),{ClientError:tc}=Ee(),VS=require("node:tls"),{relative:V$,join:qle}=require("node:path"),{CERTIFICATE_VALUES:x$}=Ii,$le=$c(),aC=Rt(),{table:Vle,getDatabases:Kle,databases:$S}=(Pe(),M(pt)),{getJWTRSAKeys:B$}=(Nd(),M(zp)),je=Gle("tls").conditional;zt.generateKeys=mC;zt.updateConfigCert=X$;zt.createCsr=Xle;zt.signCertificate=Zle;zt.setCertTable=Hd;zt.loadCertificates=j$;zt.reviewSelfSignedCert=hC;zt.createTLSSelector=eV;zt.listCertificates=rV;zt.addCertificate=iue;zt.removeCertificate=aue;zt.createNatsCerts=rue;zt.generateCertsKeys=tue;zt.getReplicationCert=lh;zt.getReplicationCertAuth=Jle;zt.renewSelfSigned=nue;zt.hostnamesFromCert=_C;zt.getKey=cue;zt.getHostnamesFromCertificate=lue;zt.getPrimaryHostName=EC;var{urlToNodeName:K$,getThisNodeUrl:Yle,getThisNodeName:YS,clearThisNodeName:Wle}=(ls(),M(Qo)),{readFileSync:zle,statSync:Y$}=require("node:fs"),oxe=le(),{getTicketKeys:jle,onMessageFromWorkers:Qle}=nt(),{isMainThread:W$}=require("worker_threads"),{TLSSocket:z$,createSecureContext:axe}=require("node:tls"),dC=3650,ch=["127.0.0.1","localhost","::1"],fC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Qle(async e=>{e.type===qs.ITC_EVENT_TYPES.RESTART&&(us.initSync(!0),await hC())});var en;function nc(){return en||(en=Kle().system.hdb_certificate,en||(en=Vle({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__"}]}))),en}o(nc,"getCertTable");async function lh(){let e=eV("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(YS());if(!r)return;let n=new jo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(lh,"getReplicationCert");async function Jle(){nc();let e=(await lh()).options.cert,r=new jo(e).issuer.match(/CN=(.*)/)?.[1];return en.get(r)}o(Jle,"getReplicationCertAuth");var F$,rc=new Map;function j$(){if(F$)return;F$=!0;let e=[{configKey:Hl.TLS},{configKey:Hl.OPERATIONSAPI_TLS}];nc();let t=hr.dirname(aC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=aC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&V$(qle(t,"keys"),a);c&&k$(a,l=>{rc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&W$){let d;k$(u,f=>{if(x$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=Z$(u),h=new jo(p),E;try{E=EC(h)}catch(T){je.error?.("error extracting host name from certificate",T);return}if(E==null){je.error?.("No host name found on certificate");return}if(h.checkIssued(new jo(x$.cert)))return;let g=en.primaryStore.get(E),A=Y$(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&A<=S){A<S&&je.info?.(`Certificate ${E} at ${u} is older (${new Date(A)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=en.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:A,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(j$,"loadCertificates");function k$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&W$&&je.warn?.(`Reloading ${r}:`,i),n=c,t(Z$(i)))}catch(c){je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Hn.existsSync(e)?s(e,Y$(e)):je.error?.(`${r} file not found:`,e),kle(e,{persistent:!1}).on("change",s)}o(k$,"loadAndWatch");function cC(){let e=Yle();if(e==null){let t=ch[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return K$(e)}o(cC,"getHost");function KS(){let e=YS();if(e==null){let t=ch[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(KS,"getCommonName");async function Xle(){let e=await lh(),t=Ct.certificateFromPem(e.options.cert),r=Ct.privateKeyFromPem(e.options.key);je.info?.("Creating CSR with cert named:",e.name);let n=Ct.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:KS()},...fC];je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:Q$()}];return je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),kd.pki.certificationRequestToPem(n)}o(Xle,"createCsr");function Q$(){let e=ch.includes(KS())?ch:[...ch,KS()];return e.includes(cC())||e.push(cC()),[{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=>G$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(Q$,"certExtensions");async function Zle(e){let t={},r=hr.join(us.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;nc();for await(let d of en.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(rc.has(d.private_key_name)){n=rc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Hn.exists(hr.join(r,d.private_key_name))){n=Hn.readFile(hr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await lC();s=d.ca,n=d.private_key}n=Ct.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Ct.certificateFromPem(s.certificate);je.info?.("Signing CSR with cert named",s.name);let a=Ct.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=kd.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+dC),je.info?.("sign cert setting validity:",c.validity),je.info?.("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,kd.md.sha256.create()),t.certificate=Ct.certificateToPem(c)}else je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(Zle,"signCertificate");async function eue(e,t){await Hd({name:YS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Hd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Ct.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(eue,"createCertificateTable");async function Hd(e){let t;try{t=new jo(e.certificate)}catch(r){je.error?.(`Failed to parse certificate for ${e.name}:`,r.message),je.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},nc(),await en.patch(e)}o(Hd,"setCertTable");async function mC(){let e=await oC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Ct.publicKeyFromPem(e.publicKey),privateKey:Ct.privateKeyFromPem(e.privateKey)}}o(mC,"generateKeys");async function pC(e,t,r){let n=Ct.createCertificate();if(!t){let a=await lh();t=Ct.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+dC);let i=[{name:"commonName",value:KS()},...fC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(Q$()),n.sign(e,kd.md.sha256.create()),Ct.certificateToPem(n)}o(pC,"generateCertificates");async function lC(){let e=await rV(),t;for(let r of e){if(!r.is_authority)continue;let n=await tV(r.private_key_name);if(r.private_key_name&&n&&new jo(r.certificate).checkPrivateKey(q$(n))){je.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;je.trace?.("No CA found with matching private key")}o(lC,"getCertAuthority");async function J$(e,t,r=!0){let n=Ct.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+dC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${us.get(Hl.REPLICATION_HOSTNAME)??K$(us.get(Hl.REPLICATION_URL))??$$().split("-")[0]}`},...fC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,kd.md.sha256.create());let a=hr.join(us.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),c=hr.join(a,Ii.PRIVATEKEY_PEM_NAME);return r&&await Hn.writeFile(c,Ct.privateKeyToPem(e)),n}o(J$,"generateCertAuthority");async function tue(){let{privateKey:e,publicKey:t}=await mC(),r=await J$(e,t),n=await pC(e,t,r);await eue(n,r),X$()}o(tue,"generateCertsKeys");async function rue(){let e=await pC(Ct.privateKeyFromPem(Ii.CERTIFICATE_VALUES.key),void 0,Ct.certificateFromPem(Ii.CERTIFICATE_VALUES.cert)),t=hr.join(us.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),r=hr.join(t,Ii.NATS_CERTIFICATE_PEM_NAME);await Hn.exists(r)||await Hn.writeFile(r,e);let n=hr.join(t,Ii.NATS_CA_PEM_NAME);await Hn.exists(n)||await Hn.writeFile(n,Ii.CERTIFICATE_VALUES.cert)}o(rue,"createNatsCerts");async function nue(){nc();for await(let e of en.search([{attribute:"is_self_signed",value:!0}]))await en.delete(e.name);await hC()}o(nue,"renewSelfSigned");async function hC(){Wle(),await j$(),nc();let e=await lC();if(!e){je.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Ct.privateKeyFromPem(Hn.readFileSync(u)),keyPath:u}}catch(d){return je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=us.get(Hl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=us.get(Hl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=hr.join(us.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),c=V$(a,i);s||(je.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await mC(),Hn.existsSync(hr.join(a,Ii.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${$$().split("-")[0]}.pem`),await Hn.writeFile(hr.join(a,c),Ct.privateKeyToPem(s)));let l=await J$(s,Ct.setRsaPublicKey(s.n,s.e),!1);await Hd({name:l.subject.getField("CN").value,uses:["https"],certificate:Ct.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await lh()){let r=YS();je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await lC();let n=Ct.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await pC(Ct.privateKeyFromPem(e.private_key),s,n);await Hd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(hC,"reviewSelfSignedCert");function X$(){let e=$le(Object.keys(qs.CONFIG_PARAM_MAP),!0),t=hr.join(us.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),r=hr.join(t,Ii.PRIVATEKEY_PEM_NAME),n=hr.join(t,Ii.NATS_CERTIFICATE_PEM_NAME),s=hr.join(t,Ii.NATS_CA_PEM_NAME),i=qs.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),aC.updateConfigValue(void 0,void 0,a,!1,!0)}o(X$,"updateConfigCert");function Z$(e){return e.startsWith("-----BEGIN")?e:zle(e,"utf8")}o(Z$,"readPEM");var H$=VS.createSecureContext;VS.createSecureContext=function(e){if(!e.cert||!e.key)return H$(e);let t={...e};delete t.key,delete t.cert;let r=H$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var sue=z$.prototype._init;z$.prototype._init=function(e,t){sue.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var kl=new Map;function eV(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),kl.clear();let d=0;if($S===void 0){c();return}for await(let f of $S.system.hdb_certificate.search([])){let m=f.certificate,p=new jo(m);f.is_authority&&(p.asString=m,kl.set(p.subject,m))}for await(let f of $S.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await tV(f.private_key_name),E=f.certificate,g=new jo(E);if(kl.has(g.issuer)&&(E+=`
|
|
18
|
-
`+kl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let A={ciphers:f.ciphers,ticketKeys:jle(),availableCAs:kl,ca:t&&Array.from(kl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(A.sessionIdContext=a.sessionIdContext);let S=VS.createSecureContext(A);S.name=f.name,S.options=A,S.quality=p,S.certificateAuthorities=Array.from(kl),S.certStart=E.toString().slice(0,100);let T=f.hostnames??_C(g);Array.isArray(T)||(T=[T]);let w;for(let L of T)if(L){L[0]==="*"&&(s=!0,L=L.slice(1)),L===cC()&&(p+=2),G$.isIP(L)&&(w=!0);let k=r.get(L)?.quality??0;p>k&&r.set(L,S)}else je.error?.("No hostname found for certificate at",VS.certificate);je.trace?.("Adding TLS",S.name,"for",a.ports||"client","cert named",f.name,"hostnames",T,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=S,d=p,a&&(a.defaultContext=S))}catch(m){je.error?.("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),$S?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){je.info?.("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return je.debug?.("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?je.debug?.("No certificate found to match",a,"using the default certificate"):je.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):je.info?.("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(eV,"createTLSSelector");async function tV(e){let t=rc.get(e);return!t&&e?await Hn.readFile(hr.join(us.get(Hl.ROOTPATH),qs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(tV,"getPrivateKeyByName");async function rV(){nc();let e=[];for await(let t of en.search([]))e.push(t);return e}o(rV,"listCertificates");async function iue(e){let t=uC(e,bi.object({name:bi.string().required(),certificate:bi.string().required(),is_authority:bi.boolean().required(),private_key:bi.string(),hosts:bi.array(),uses:bi.array()}));if(t)throw new tc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new jo(n),c=!1,l=!1,u;for(let[p,h]of rc)!s&&!c&&a.checkPrivateKey(q$(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new tc("A suitable private key was not found for this certificate");let d;if(!r){try{d=EC(a)}catch(p){je.error?.(p)}if(d==null)throw new tc("Error extracting certificate host name, please provide a name parameter")}let f=oue(r??d);s&&!c&&!l&&(await Hn.writeFile(hr.join(us.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME,f+".pem"),s),rc.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Hd(m),"Successfully added certificate: "+f}o(iue,"addCertificate");function oue(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(oue,"sanitizeName");async function aue(e){let t=uC(e,bi.object({name:bi.string().required()}));if(t)throw new tc(t.message);let{name:r}=e;nc();let n=await en.get(r);if(!n)throw new tc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await en.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(je.info?.("Removing private key named",s),await Hn.remove(hr.join(us.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME,s)))}return await en.delete(r),"Successfully removed "+r}o(aue,"removeCertificate");function EC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||_C(e)[0]}o(EC,"getPrimaryHostName");function _C(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(_C,"hostnamesFromCert");async function cue(e){if(e.bypass_auth!==!0)throw new tc("Unauthorized","401");let t=uC(e,bi.object({name:bi.string().required()}));if(t)throw new tc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await B$()).privateKey;if(r===".jwtPublic")return(await B$()).publicKey;if(rc.get(r))return rc.get(e.name);throw new tc("Key not found")}o(cue,"getKey");function lue(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(lue,"getHostnamesFromCertificate")});var wV={};be(wV,{CONFIRMATION_STATUS_POSITION:()=>AV,LATENCY_POSITION:()=>ZS,NodeReplicationConnection:()=>qd,OPERATION_REQUEST:()=>RC,RECEIVED_TIME_POSITION:()=>bC,RECEIVED_VERSION_POSITION:()=>AC,RECEIVING_STATUS_POSITION:()=>IC,RECEIVING_STATUS_RECEIVING:()=>IV,RECEIVING_STATUS_WAITING:()=>bV,SENDING_TIME_POSITION:()=>uh,createWebSocket:()=>eT,databaseSubscriptions:()=>ic,replicateOverWS:()=>dh,tableUpdateListeners:()=>NC});async function eT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=it(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!TC){let l=(0,gV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),TC=u.secureContexts}if(i=TC.get(s),i&&ue.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,TV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(XS?.caCount!==Jo.size&&(XS=SV.createSecureContext({...i.options,ca:[...Jo,...i.options.availableCAs.values()]}),XS.caCount=Jo.size),c.secureContext=XS),new hV.WebSocket(e,"harperdb-replication-v1",c)}function dh(e,t,r){let n=t.port||t.securePort,s=Gl.pid%1e3+"-"+EV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ue.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||ic,f,m,p=!1,h=t.subscription;h?.then&&h.then(y=>{h=y,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&ct()[u],g,A=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let T,w,L,k,te,F,V,X=6e4,Y,de=0,ne=0,ae=0,ye=pV.default.get(x.REPLICATION_BLOBTIMEOUT)??12e4,Ae=new Map,He=[],Ge=0,Ar;if(t.url){let y=o(()=>{te&&ne===e._socket?.bytesRead&&ae===e._socket?.bytesWritten?e.terminate():(te=performance.now(),e.ping(),ne=e._socket?.bytesRead,ae=e._socket?.bytesWritten)},"sendPing");L=setInterval(y,fV).unref(),y()}else er();e._socket?.setMaxListeners(200);function er(){clearTimeout(k),ne=e._socket?.bytesRead,ae=e._socket?.bytesWritten,k=setTimeout(()=>{ne===e._socket?.bytesRead&&ae===e._socket?.bytesWritten&&(ue.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},fV*2).unref()}o(er,"resetPingTimer");function Gt(){if(!(!g||!u))return m||(m=Ud(f,u,g)),m}o(Gt,"getSharedStatus"),u&&wa(u);let tr,Wf,Uc=[],qt=[],zf,jf=[],KE=[],YE=[],lA=150,Qf=25,De=0,uA=0,Ao=!1,Is,br,ws,dA;e.on("message",xc);async function xc(y){if(r=await r,!r){ue.error?.(s,"No authorization provided"),Vr(1008,"Unauthorized");return}Bc(y),e.off("message",xc),e.on("message",Bc)}o(xc,"onWSMessageWhenAuthorized");function Bc(y){de=performance.now();try{let N=y.dataView=new Zc(y.buffer,y.byteOffset,y.byteLength);if(y[0]>127){let C=(0,ot.decode)(y),[H,U,J]=C;switch(H){case sV:{if(U){if(g){if(g!==U){ue.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${U}, disconnecting`),e.send((0,ot.encode)([Gd])),Vr(1008,"Node name mismatch");return}}else if(g=U,t.connection?.tentativeNode){let z=t.connection.tentativeNode;z.name=g,t.connection.tentativeNode=null,zo(g,z)}if(t.connection&&(t.connection.nodeName=g),ue.debug?.(s,"received node name:",g,"db:",u??C[2]),!u)try{wa(u=C[2]),u==="system"&&(tr=Za(t,(z,oe)=>{Ia(oe)&&Zf(oe)}),e.on("close",()=>{tr?.remove()}))}catch(z){ue.warn?.(s,"Error setting database",z),e.send((0,ot.encode)([Gd])),Vr(1008,z.message);return}ba()}break}case uV:{ue.debug?.(s,"Received table definitions for",U.map(z=>z.table));for(let z of U){let oe=C[2];z.database=oe;let se;if(Ia(oe)){if(u==="system")ve[oe]?.[z.table]||(se=D(z,ve[oe]?.[z.table]));else{if(oe!=="data"&&!ve[oe]){ue.warn?.("Database not found",oe);return}se=D(z,ve[oe]?.[z.table])}f||(f=se?.auditStore),E||(E=ct()?.[oe])}}break}case Gd:Vr();break;case RC:try{let z=r?.replicates||r?.subscribers||r?.name;ue.debug?.("Received operation request",U,"from",g),server.operation(U,{user:r},!z).then(oe=>{ue.debug?.("Requested request from finished",g,oe),Array.isArray(oe)&&(oe={results:oe}),oe.requestId=U.requestId,e.send((0,ot.encode)([zS,oe]))},oe=>{ue.debug?.("Failed requested operation from",g,oe),e.send((0,ot.encode)([zS,{requestId:U.requestId,error:gC(oe)}]))})}catch(z){e.send((0,ot.encode)([zS,{requestId:U.requestId,error:gC(z)}]))}break;case zS:let{resolve:j,reject:G}=A.get(U.requestId);ue.debug?.("Received completed operation request",g,U),U.error?G(new Error(U.error)):j(U),A.delete(U.requestId);break;case SC:let Se=C[3];if(!E){u?ue.error?.(s,"No database found for",u):ue.error?.(s,"Database name never received"),Vr();return}let me=E[Se];me=D({table:Se,database:u,attributes:U.attributes,schemaDefined:U.schemaDefined},me),Uc[J]={name:Se,decoder:new ot.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:U.typedStructs,structures:U.structures}),getEntry(z){return me.primaryStore.getEntry(z)},rootStore:me.primaryStore.rootStore};break;case iV:dA=f?I$(U,f):new Map,zf=C[2],ue.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${zf}`);break;case oV:let Oe=J;YE[Oe]=U;break;case lV:Gt()[AV]=U,ue.trace?.(s,"received and broadcasting committed update",U),Gt().buffer.notify();break;case cV:T=U,h.send({type:"end_txn",localTime:T,remoteNodeIds:S});break;case jS:{let z=C[1],{fileId:oe,size:se,finished:pe,error:we}=z,fe=Ae.get(oe);ue.debug?.("Received blob",oe,"has stream",!!fe,"connectedToBlob",!!fe?.connectedToBlob,"length",C[2].length,"finished",pe),fe||(fe=new yC.PassThrough,fe.expectedSize=se,Ae.set(oe,fe)),fe.lastChunk=Date.now();let Me=C[2];Xe(Me.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{pe?(we?(fe.on("error",()=>{}),fe.destroy(new Error("Blob error: "+we+" for record "+(fe.recordId??"unknown")+" from "+remote_node_name))):fe.end(Me),fe.connectedToBlob&&Ae.delete(oe)):fe.write(Me)}catch(at){ue.error?.(`Error receiving blob for ${fe.recordId} from ${g} and streaming to storage`,at),Ae.delete(oe)}break}case aV:{let z=U,oe;try{let se=C[3],pe=qt[J]||(qt[J]=E[C[4]]);if(!pe)return ue.warn?.("Unknown table id trying to handle record request",J);let we=pe.primaryStore.getBinaryFast(Symbol.for("structures")),fe=we?.length??0;if(fe>0&&fe!==uA){uA=fe;let at=(0,ot.decode)(we);e.send((0,ot.encode)([SC,{typedStructs:at.typed,structures:at.named},J,pe.tableName]))}let Me=pe.primaryStore.getBinaryFast(se);if(Me){let at=pe.primaryStore.decoder.decode(Me,{valueAsBuffer:!0}),Qe=lt||{};Qe.version=(0,yV.getLastVersion)(),lt&<[xu]&Dn&&(at=Buffer.from(at),Dm(()=>pe.primaryStore.decoder.decode(Me),Mr=>Fc(Mr,se),pe.primaryStore.rootStore)),oe=(0,ot.encode)([WS,z,{value:at,expiresAt:Qe.expiresAt,version:Qe.version,residencyId:Qe.residencyId,nodeId:Qe.nodeId,user:Qe.user}])}else oe=(0,ot.encode)([WS,z])}catch(se){oe=(0,ot.encode)([WS,z,{error:se.message}])}e.send(oe);break}case WS:{let{resolve:z,reject:oe,tableId:se,key:pe}=A.get(C[1]),we=C[2];if(we?.error)oe(new Error(we.error));else if(we){let fe;D_(()=>{let Me=Uc[se].decoder.decode(we.value);we.value=Me,we.key=pe,z(we)||fe&&setTimeout(()=>fe.forEach(O_),6e4).unref()},Me=>{let at=Jf(Me,pe);return fe||(fe=[]),fe.push(at),at})}else z();A.delete(C[1]);break}case nV:{ws=U;let z,oe,se=!1;if(h){if(u!==h.databaseName&&!h.then){ue.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(ue.debug?.(s,"received subscription request for",u,"at",ws),!h){let Ne;h=new Promise($t=>{ue.debug?.("Waiting for subscription to database "+u),Ne=$t}),h.ready=Ne,ic.set(u,h)}if(r.name)oe=Wt().subscribe(r.name),oe.then(async Ne=>{z=Ne;for await(let $t of z){let Mt=$t.value;if(!(Mt?.replicates===!0||Mt?.replicates?.receives||Mt?.subscriptions?.some(vr=>(vr.database||vr.schema)===u&&vr.publish!==!1))){se=!0,e.send((0,ot.encode)([Gd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}}},Ne=>{ue.error?.(s,"Error subscribing to HDB nodes",Ne)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ot.encode)([Gd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}if(br&&(ue.debug?.(s,"stopping previous subscription",u),br.emit("close")),ws.length===0)return;let pe=ws[0],we=o(Ne=>{if(Ne&&(pe.replicateByDefault?!pe.tables.includes(Ne.tableName):pe.tables.includes(Ne.tableName)))return{table:Ne}},"tableToTableEntry"),fe={txnTime:0},Me,at,Qe=1/0,Mr,Kr=o((Ne,$t)=>{if(Ne.type==="end_txn"){fe.txnTime&&(a[i]!==66&&ue.error?.("Invalid encoding of message"),K(9),K(q_),R(Mr=$t),zE()),i=c,fe.txnTime=0;return}let Mt=Ne.nodeId,vr=Ne.tableId,vt=at[vr];if(!vt&&(vt=at[vr]=we(h.tableById[vr]),!vt))return ue.debug?.("Not subscribed to table",vr);let Ns=vt.table,Ut=Ns.primaryStore,oi=Ut.encoder;(Ne.extendedType&Q_||!oi.typedStructs)&&(oi._mergeStructures(oi.getStructures()),oi.typedStructs&&(oi.lastTypedStructuresLength=oi.typedStructs.length));let Ru=Me[Mt];if(!(Ru&&Ru.startTime<$t&&(!Ru.endTime||Ru.endTime>$t)))return JS&&ue.trace?.(s,"skipping replication update",Ne.recordId,"to:",g,"from:",Mt,"subscribed:",Me),JM();JS&&ue.trace?.(s,"sending replication update",Ne.recordId,"to:",g,"from:",Mt,"subscribed:",Me);let fA=Ne.version;fe.txnTime!==fA&&(fe.txnTime&&(JS&&ue.trace?.(s,"new txn time, sending queued txn",fe.txnTime),a[i]!==66&&ue.error?.("Invalid encoding of message"),zE()),fe.txnTime=fA,i=c,R(fA));let Gc=Ne.residencyId,mA=Xf(Gc,Ns),jE;if(mA&&!mA.includes(g)){let ai=Xf(Ne.previousResidencyId,Ns);if(ai&&!ai.includes(g)&&(Ne.type==="put"||Ne.type==="patch")||Ns.getResidencyById)return JM();let em=Ne.recordId;ue.trace?.(s,"sending invalidation",em,g,"from",Mt);let tm=0;Gc&&(tm|=el),Ne.previousResidencyId&&(tm|=tl);let EA,QE=null;for(let XM in Ns.indices){if(!QE){if(EA=Ne.getValue(Ut,!0),!EA)break;QE={}}QE[XM]=EA[XM]}jE=rl(Ne.version,vr,em,null,Mt,Ne.user,Ne.type==="put"||Ne.type==="patch"?"invalidate":Ne.type,oi.encode(QE),tm,Gc,Ne.previousResidencyId,Ne.expiresAt)}function JM(){return ue.trace?.(s,"skipping audit record",Ne.recordId),F||(F=setTimeout(()=>{F=null,(Mr||0)+dV/2<Qe&&(JS&&ue.trace?.(s,"sending skipped sequence update",Qe),e.send((0,ot.encode)([cV,Qe])))},dV).unref()),new Promise(setImmediate)}o(JM,"skipAuditRecord");let pA=oi.typedStructs,hA=oi.structures;if((pA?.length!=vt.typed_length||hA?.length!=vt.structure_length)&&(vt.typed_length=pA?.length,vt.structure_length=hA.length,ue.debug?.(s,"send table struct",vt.typed_length,vt.structure_length),vt.sentName||(vt.sentName=!0),e.send((0,ot.encode)([SC,{typedStructs:pA,structures:hA,attributes:Ns.attributes,schemaDefined:Ns.schemaDefined},vr,vt.table.tableName]))),Gc&&!KE[Gc]&&(e.send((0,ot.encode)([oV,mA,Gc])),KE[Gc]=!0),jE)K(jE.length),_(jE);else{let ai=Ne.encoded;Ne.extendedType&Dn&&Dm(()=>Ne.getValue(Ut),tm=>Fc(tm,Ne.recordId),Ut.rootStore);let em=ai[0]===66?8:0;K(ai.length-em),_(ai,em),ue.trace?.("wrote record",Ne.recordId,"length:",ai.length)}return e._socket.writableNeedDrain?new Promise(ai=>{ue.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",ai)}):Ge>Qf?new Promise(ai=>{Ar=ai}):new Promise(setImmediate)},"sendAuditRecord"),zE=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ue.debug?.(s,"Sent message, size:",c-i),Xe(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ue.debug?.(s,"skipping empty transaction")},"sendQueuedData");br=new wC.EventEmitter,br.once("close",()=>{se=!0,z?.end()});for(let{startTime:Ne}of ws)Ne<Qe&&(Qe=Ne);(oe||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,at=h.tableById.map(we),Me=[];for(let{name:$t,startTime:Mt,endTime:vr}of ws){let vt=kS($t,f);ue.debug?.("subscription to",$t,"using local id",vt,"starting",Mt),Me[vt]={startTime:Mt,endTime:vr}}Zf(u),tr||(tr=Ol($t=>{$t.databaseName===u&&Zf(u)}),Wf=Hp($t=>{$t===u&&(e.send((0,ot.encode)([Gd])),Vr())}),e.on("close",()=>{tr?.remove(),Wf?.remove()})),e.send((0,ot.encode)([iV,rh(h.auditStore),ws.map(({name:$t})=>$t)]));let Ne=!0;do{isFinite(Qe)||(ue.warn?.("Invalid sequence id "+Qe),Vr(1008,"Invalid sequence id"+Qe));let $t;if(Ne&&!se&&(Ne=!1,Qe===0)){ue.info?.("Replicating all tables to",g);let Mt=Qe,vr=tT(f);for(let vt in E){if(!we(vt))continue;let Ns=E[vt];for(let Ut of Ns.primaryStore.getRange({snapshot:!1,versions:!0})){if(se)return;if(Ut.localTime>=Qe){ue.trace?.(s,"Copying record from",u,vt,Ut.key,Ut.localTime),Mt=Math.max(Ut.localTime,Mt),$t=!0,Gt()[uh]=1;let oi=rl(Ut.version,Ns.tableId,Ut.key,null,vr,null,"put",Dm(()=>Ns.primaryStore.encoder.encode(Ut.value),Ru=>Fc(Ru,Ut.key)),Ut.metadataFlags&-256,Ut.residencyId,null,Ut.expiresAt);await Kr({recordId:Ut.key,tableId:Ns.tableId,type:"put",getValue(){return Ut.value},encoded:oi,version:Ut.version,residencyId:Ut.residencyId,nodeId:vr,extendedType:Ut.metadataFlags},Ut.localTime)}}}$t&&Kr({type:"end_txn"},Qe),Gt()[uh]=0,Qe=Mt}for(let{key:Mt,value:vr}of f.getRange({start:Qe||1,exclusiveStart:!0,snapshot:!1})){if(se)return;let vt=Bt(vr);ue.debug?.("sending audit record",new Date(Mt)),Gt()[uh]=Mt,Qe=Mt,await Kr(vt,Mt),br.startTime=Mt,$t=!0}$t&&Kr({type:"end_txn"},Qe),Gt()[uh]=0,await l0(f)}while(!se)}).catch(Ne=>{ue.error?.(s,"Error handling subscription to node",Ne),Vr(1008,"Error handling subscription to node")});break}}return}N.position=8;let b=!0,P,B;do{Gt();let C=N.readInt();if(C===9&&N.getUint8(N.position)==q_){N.position++,T=B=N.readFloat64(),m[AC]=T,m[bC]=Date.now(),m[IC]=bV,ue.trace?.("received remote sequence update",T,u);break}let H=N.position,U=Bt(y,H,H+C),J=Uc[U.tableId];J||ue.error?.(`No table found with an id of ${U.tableId}`);let j;U.residencyId&&(j=YE[U.residencyId],ue.trace?.(s,"received residency list",j,U.type,U.recordId));try{let G=U.recordId;D_(()=>{P={table:J.name,id:U.recordId,type:U.type,nodeId:dA.get(U.nodeId),residencyList:j,timestamp:U.version,value:U.getValue(J),user:U.user,beginTxn:b,expiresAt:U.expiresAt}},Se=>Jf(Se,G))}catch(G){throw G.message+="typed structures for current decoder"+JSON.stringify(J.decoder.typedStructs),G}b=!1,ue.trace?.(s,"received replication message",U.type,"id",P.id,"version",new Date(U.version),"nodeId",P.nodeId),m[AC]=U.version,m[bC]=Date.now(),m[IC]=IV,h.send(P),N.position=H+C}while(N.position<y.byteLength);De++,Xe(y.byteLength,"bytes-received",`${g}.${u}.${P?.table||"unknown_table"}`,"replication","ingest"),De>lA&&!Ao&&(Ao=!0,e.pause(),ue.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:T,remoteNodeIds:S,async onCommit(){if(P){let C=Date.now()-P.timestamp;Xe(C,"replication-latency",g+"."+u+"."+P.table,P.type,"ingest")}De--,Ao&&(Ao=!1,e.resume(),ue.debug?.(`Replication resuming ${g}`)),He.length>0&&await Promise.all(He),ue.trace?.("All blobs finished"),!w&&B&&(ue.trace?.(s,"queuing confirmation of a commit at",B),setTimeout(()=>{e.send((0,ot.encode)([lV,w])),ue.trace?.(s,"sent confirmation of a commit at",w),w=null},fue)),w=B,ue.debug?.("last sequence committed",new Date(B),u)}})}catch(N){ue.error?.(s,"Error handling incoming replication message",N)}}o(Bc,"onWSMessage"),e.on("ping",er),e.on("pong",()=>{if(t.connection){let y=performance.now()-te;t.connection.latency=y,Gt()&&(m[ZS]=y),t.isSubscriptionConnection&&Fl({name:g,database:u,url:t.url,latency:y})}te=null}),e.on("close",(y,N)=>{clearInterval(L),clearTimeout(k),clearInterval(V),br&&br.emit("close"),Is&&Is.end();for(let[b,{reject:P}]of A)P(new Error(`Connection closed ${N?.toString()} ${y}`));ue.debug?.(s,"closed",y,N?.toString())});function Vr(y,N){try{e.isFinished=!0,ue.debug?.(s,"closing",g,u,y,N),e.close(y,N),t.connection?.emit("finished")}catch(b){ue.error?.(s,"Error closing connection",b)}}o(Vr,"close");let Ir=new Set;async function Fc(y,N){let b=P_(y);if(Ir.has(b)){ue.debug?.("Blob already being sent",b);return}Ir.add(b);try{let P;Ge++;for await(let B of y.stream())P&&(ue.debug?.("Sending blob chunk",b,"length",P.length),e.send((0,ot.encode)([jS,{fileId:b,size:y.size},P]))),P=B,e._socket.writableNeedDrain&&(ue.debug?.("draining",b),await new Promise(C=>e._socket.once("drain",C)),ue.debug?.("drained",b)),Xe(B.length,"bytes-sent",`${g}.${u}`,"replication","blob");ue.debug?.("Sending final blob chunk",b,"length",P.length),e.send((0,ot.encode)([jS,{fileId:b,size:y.size,finished:!0},P]))}catch(P){ue.warn?.("Error sending blob",P,"blob id",b,"for record",N),e.send((0,ot.encode)([jS,{fileId:b,finished:!0,error:gC(P)},Buffer.alloc(0)]))}finally{Ir.delete(b),Ge--,Ge<Qf&&Ar?.()}}o(Fc,"sendBlobs");function Jf(y,N){let b=P_(y),P=Ae.get(b);ue.debug?.("Received transaction with blob",b,"has stream",!!P,"ended",!!P?.writableEnded),P?P.writableEnded&&Ae.delete(b):(P=new yC.PassThrough,Ae.set(b,P)),P.connectedToBlob=!0,P.lastChunk=Date.now(),P.recordId=N,y.size===void 0&&P.expectedSize&&(y.size=P.expectedSize);let B=P.blob??createBlob(P,y);P.blob=B;let C=B.save({primaryStore:h.auditStore});return C&&(C.blobId=b,He.push(C),C.finally(()=>{ue.debug?.(`Finished receiving blob stream ${b}`),He.splice(He.indexOf(C),1)})),B}o(Jf,"receiveBlobs");function ba(){if(p||(p=!0,t.connection?.on("subscriptions-updated",ba)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let y=new Map;f||(f=h?.auditStore);try{for(let P of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let B of P.value.nodes||[])B.lastTxnTime>(y.get(B.id)??0)&&y.set(B.id,B.lastTxnTime)}catch(P){if(!P.message.includes("Can not re"))throw P}let N=t.connection?.nodeSubscriptions?.[0];S=[];let b=t.connection?.nodeSubscriptions.map((P,B)=>{let C=[],{replicateByDefault:H}=P;if(P.subscriptions){for(let G of P.subscriptions)if(G.subscribe&&(G.schema||G.database)===u){let Se=G.table;E?.[Se]?.replicate!==!1&&C.push(Se)}H=!1}else for(let G in E)(H?E[G].replicate===!1:E[G].replicate)&&C.push(G);let U=f&&kS(P.name,f),J=h?.dbisDB?.get([Symbol.for("seq"),U])??1,j=Math.max(J?.seqId??1,(typeof P.startTime=="string"?new Date(P.startTime).getTime():P.startTime)??1);if(ue.debug?.("Starting time recorded in db",P.name,U,u,J?.seqId,"start time:",j,new Date(j)),N!==P){let G=f&&kS(N.name,f),Se=h?.dbisDB?.get([Symbol.for("seq"),G])??1;for(let me of Se?.nodes||[])me.name===P.name&&(j=me.seqId,ue.debug?.("Using sequence id from proxy node",N.name,j))}if(U===void 0?ue.warn("Starting subscription request from node",P,"but no node id found"):S.push(U),y.get(U)>j&&(j=y.get(U),ue.debug?.("Updating start time from more recent txn recorded",N.name,j)),j===1&&QS)try{new URL(QS).hostname===P.name?(ue.warn?.(`Requesting full copy of database ${u} from ${QS}`),j=0):j=Date.now()-6e4}catch(G){ue.error?.("Error parsing leader URL",QS,G)}return ue.trace?.(s,"defining subscription request",P.name,u,new Date(j)),{name:P.name,replicateByDefault:H,tables:C,startTime:j,endTime:P.endTime}});if(b)if(ue.debug?.(s,"sending subscription request",b,h?.dbisDB?.path),clearTimeout(Y),b.length>0)e.send((0,ot.encode)([nV,b]));else{let P=o(()=>{let B=performance.now();Y=setTimeout(()=>{de<=B?Vr(1008,"Connection has no subscriptions and is no longer used"):P()},X).unref()},"scheduleClose");P()}}o(ba,"sendSubscriptionRequestUpdate");function Xf(y,N){if(!y)return;let b=jf[y];return b||(b=N.getResidencyRecord(y),jf[y]=b),b}o(Xf,"getResidence");function Ia(y){return!(sc&&sc!="*"&&!sc[y]&&!sc.includes?.(y)&&!sc.some?.(N=>N.name===y))}o(Ia,"checkDatabaseAccess");function wa(y){if(h=h||d.get(y),!Ia(y))throw new Error(`Access to database "${y}" is not permitted`);h||ue.warn?.(`No database named "${y}" was declared and registered`),f=h?.auditStore,E||(E=ct()?.[y]);let N=it();if(N===g)throw N?new Error("Should not connect to self",N):new Error("Node name not defined");return WE(N,y),!0}o(wa,"setDatabase");function WE(y,N){let b=ct()?.[N],P=[];for(let B in b){let C=b[B];P.push({table:B,schemaDefined:C.schemaDefined,attributes:C.attributes.map(H=>({name:H.name,type:H.type,isPrimaryKey:H.isPrimaryKey}))})}ue.trace?.("Sending database info for node",y,"database name",N),e.send((0,ot.encode)([sV,y,N,P]))}o(WE,"sendNodeDBName");function Zf(y){let N=ct()?.[y],b=[];for(let P in N){if(ws&&!ws.some(C=>C.replicateByDefault?!C.tables.includes(P):C.tables.includes(P)))continue;let B=N[P];b.push({table:P,schemaDefined:B.schemaDefined,attributes:B.attributes.map(C=>({name:C.name,type:C.type,isPrimaryKey:C.isPrimaryKey}))})}e.send((0,ot.encode)([uV,b,y]))}o(Zf,"sendDBSchema"),V=setInterval(()=>{for(let[y,N]of Ae)N.lastChunk+ye<Date.now()&&(ue.warn?.(`Timeout waiting for blob stream to finish ${y} for record ${N.recordId??"unknown"} from ${g}`),Ae.delete(y),N.end())},ye).unref();let kc=1,Hc=[];return{end(){Is&&Is.end(),br&&br.emit("close")},getRecord(y){let N=kc++;return new Promise((b,P)=>{let B=[aV,N,y.table.tableId,y.id];Hc[y.table.tableId]||(B.push(y.table.tableName),Hc[y.table.tableId]=!0),e.send((0,ot.encode)(B)),de=performance.now(),A.set(N,{tableId:y.table.tableId,key:y.id,resolve(C){let{table:H,entry:U}=y;if(b(C),C)return H._recordRelocate(U,C)},reject:P})})},sendOperation(y){let N=kc++;return y.requestId=N,e.send((0,ot.encode)([RC,y])),new Promise((b,P)=>{A.set(N,{resolve:b,reject:P})})}};function K(y){O(5),y<128?a[c++]=y:y<16384?(l.setUint16(c,y|32768),c+=2):y<1056964608?(l.setUint32(c,y|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,y),c+=5)}function _(y,N=0,b=y.length){let P=b-N;O(P),y.copy(a,c,N,b),c+=P}function R(y){O(8),l.setFloat64(c,y),c+=8}function O(y){if(y+16>a.length-c){let N=Buffer.allocUnsafeSlow(c+y-i+65536>>10<<11);a.copy(N,0,i,c),c=c-i,i=0,a=N,l=new DataView(a.buffer,0,a.length)}}function D(y,N){let b=y.database??"data";N||(N={});let P=N.schemaDefined,B=!1,C=y.schemaDefined,H=N.attributes||[];for(let U=0;U<y.attributes?.length;U++){let J=y.attributes[U],j=H.find(G=>G.name===J.name);(!j||j.type!==J.type)&&(P?ue.error?.(`Schema for '${u}.${y.table}' is defined locally, but attribute '${J.name}: ${J.type}' from '${g}' does not match local attribute ${j?"'"+j.name+": "+j.type+"'":"which does not exist"}`):(B=!0,C||(J.indexed=!0),j?H[H.indexOf(j)]=J:H.push(J)))}return B?(ue.debug?.("(Re)creating",y),Je({table:y.table,database:y.database,schemaDefined:y.schemaDefined,attributes:H,...N})):N}}var pV,ot,hV,EV,_V,wC,gV,SV,Gl,TV,yC,yV,RV,uue,gC,ue,nV,sV,iV,Gd,oV,SC,aV,WS,RC,zS,cV,lV,uV,jS,AV,AC,bC,uh,ZS,IC,bV,IV,due,QS,NC,ic,JS,dV,fue,fV,TC,XS,mV,qd,CC=ie(()=>{Pe();No();rC();zb();ls();pV=I(le());q();nl();ot=require("msgpackr"),hV=require("ws"),EV=require("worker_threads"),_V=I(Q());ah();wC=require("events"),gV=I(ds()),SV=I(require("node:tls"));Bl();Gl=I(require("node:process")),TV=require("node:net");vs();Ls();yC=require("node:stream"),yV=require("lmdb"),RV=I(require("minimist")),{forComponent:uue,errorToString:gC}=_V.default,ue=uue("replication").conditional,nV=129,sV=140,iV=141,Gd=142,oV=130,SC=132,aV=133,WS=134,RC=136,zS=137,cV=143,lV=144,uV=145,jS=146,AV=0,AC=1,bC=2,uh=3,ZS=4,IC=5,bV=0,IV=1,due=(0,RV.default)(Gl.argv),QS=due.HDB_LEADER_URL??Gl.env.HDB_LEADER_URL,NC=new Map,ic=new Map,JS=!0,dV=300,fue=2,fV=3e4;o(eT,"createWebSocket");mV=500,qd=class extends wC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=mV;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??Ai(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await eT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ue.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Gl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ue[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=mV,this.nodeSubscriptions&&Fl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=dh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ue.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ue.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ue.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Fd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ue.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(dh,"replicateOverWS")});function fh(e){return e===CV||e===mue}function pue(e){return e===OV||e===PV}function OC(e){return e===CV?OV:PV}function hue(){if(NV)return;NV=!0;let e=ql.CryptoEngine.prototype,t=ql.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return fh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return fh(s)?{name:OC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return pue(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=ql.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(fh(i)){let a=OC(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),a,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(fh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new mh.X509Certificate(Buffer.from(i)),l=new mh.X509Certificate(Buffer.from(a));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,a]=n,c=a.algorithm.algorithmId;if(fh(c)){let l=OC(c);try{let u=this.crypto?.subtle||this.subtle||ql.getCrypto(!0)?.subtle||mh.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",a.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var ql,mh,CV,mue,OV,PV,NV,LV=ie(()=>{ql=I(require("pkijs")),mh=require("node:crypto"),CV="1.3.101.112",mue="1.3.101.113",OV="Ed25519",PV="Ed448",NV=!1;o(fh,"isEd25519OrEd448");o(pue,"isEdDSAAlgorithmName");o(OC,"getEdDSAAlgorithmName");o(hue,"applyEd25519Patch");hue()});function Eue(){return rT||(rT=Je({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),rT.sourcedFrom(PC)),rT}function _ue(e){if(jt.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return jt.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return jt.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function $d(e,t){jt.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=_ue(t);if(r===!1)return jt.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=Tue(e);return jt.trace?.("Certificate chain length:",n.length),n.length===1&&!n[0].issuer?(jt.debug?.("Certificate without issuer - cannot perform OCSP check"),{valid:!0,status:"no-issuer-cert",method:"disabled"}):n.length<2||!n[0].issuer?(jt.debug?.("Certificate chain too short for revocation checking"),{valid:!0,status:"insufficient-chain",method:"disabled"}):gue(n[0].cert,n[0].issuer,r)}async function gue(e,t,r){jt.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=DV(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=DV(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,vV.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;jt.trace?.("OCSP cache key:",i);let c=await Eue().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??ph.failureMode)==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(jt.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return jt.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(n){return jt.error?.("OCSP verification error:",n),(r?.failureMode??ph.failureMode)==="fail-closed"?{valid:!1,status:"error",error:n.message,method:"ocsp"}:(jt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Sue(e,t,r){jt.trace?.("Calling getCertStatus with timeout:",r);let n=await(0,MV.getCertStatus)(e,{ca:t,timeout:r});return jt.debug?.("OCSP response from easy-ocsp:",{status:n.status,revocationReason:n.revocationReason,responseData:n}),n.status==="good"?{status:"good"}:n.status==="revoked"?{status:"revoked",reason:n.revocationReason?.toString()||"unspecified"}:{status:"unknown",reason:"unknown-status"}}function DV(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
|
|
19
|
-
`)}function Tue(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}var MV,vV,UV,jt,PC,ph,rT,nT=ie(()=>{LV();MV=require("easy-ocsp"),vV=require("node:crypto"),UV=I(Os());Pe();Fa();jt=(0,UV.loggerWithTag)("cert-verification"),PC=class extends Br{static{o(this,"CertificateVerificationSource")}async get(t){jt.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;jt.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??ph.timeout,l=await Promise.race([Sue(s,i,c),new Promise((d,f)=>setTimeout(()=>f(new Error("OCSP timeout")),c))]);jt.debug?.("OCSP check result:",l);let u=a?.cacheTtl??ph.cacheTtl;return r&&(r.expiresAt=Date.now()+u),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:Date.now()+u,method:"ocsp"}}catch(c){return jt.error?.("OCSP verification error:",c),(a?.failureMode??ph.failureMode)==="fail-closed"?(r&&(r.expiresAt=Date.now()+3e5),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:Date.now()+3e5,method:"ocsp"}):(jt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null)}}},ph={timeout:5e3,cacheTtl:36e5,failureMode:"fail-open"};o(Eue,"getCertificateCacheTable");o(_ue,"getCertificateVerificationConfig");o($d,"verifyCertificate");o(gue,"verifyOCSP");o(Sue,"performOCSPCheck");o(DV,"bufferToPem");o(Tue,"extractCertificateChain")});var Qo={};be(Qo,{clearThisNodeName:()=>Oue,disableReplication:()=>bue,enabledDatabases:()=>sc,forEachReplicatedDatabase:()=>Za,getThisNodeId:()=>tT,getThisNodeName:()=>it,getThisNodeUrl:()=>ec,hostnameToUrl:()=>aT,lastTimeInAuditStore:()=>nh,monitorNodeCAs:()=>VV,replicateOperation:()=>Lue,replicationCertificateAuthorities:()=>Jo,sendOperationToNode:()=>hh,servers:()=>Rue,setReplicator:()=>YV,start:()=>Aue,startOnMainThread:()=>iC,subscribeToNode:()=>oh,unsubscribeFromNode:()=>qS,urlToNodeName:()=>Ai});function Aue(e){if(!e.port&&!e.securePort&&(e.port=$s.default.get(x.OPERATIONSAPI_NETWORK_PORT),e.securePort=$s.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),!it())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of ih(e))t.set(Ai(s.url),s);Iue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ue.ws(async(s,i,a,c)=>{if(It.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),dh(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Ue.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=Wt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,qV.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await $d(s.peerCertificate,e);if(!u.valid){It.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else It.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:It.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(Jo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=oT.createSecureContext(u)}catch(l){It.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),$s.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1&&i()}VV(()=>{for(let s of n)s()})}function VV(e){let t=0;xd(r=>{r?.ca&&(Jo.add(r.ca),Jo.size!==t&&(t=Jo.size,e?.()))})}function bue(e=!0){$V=e}function Iue(e){$V||(ct(),sc=e.databases,Za(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||ic;for(let[s,i]of iT){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];YV(r,s,e),NC.get(s)?.forEach(i=>i(s))}}))}function YV(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 KV extends Br{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||ic,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(It.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Jn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Ue.hostname)continue;let E=Nue(h,KV.subscription,e);if(E?.isConnected){let g=Ud(t.auditStore,e,h)[ZS];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new HV.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:yue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",$l,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function wue(e,t,r,n,s){let i=iT.get(e);i||iT.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new qd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function Nue(e,t,r){let n=xV.get($l);n||(n=new Map,xV.set($l,n));let s=n.get(r);if(s)return s;let i=Wt().primaryStore.get(e);return i?.url&&(s=new qd(i.url,t,r,$l,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function hh(e,t,r){r||(r={}),r.serverName=e.name;let n=await eT(e.url,r),s=dh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function oh(e){try{GV.isMainThread&&It.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=ic.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,ic.set(e.database,t)}let r=wue(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=>sh(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function qS({name:e,url:t,database:r}){It.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Wt().primaryStore.getRange({})));let n=iT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Cue(){if(LC!==void 0)return LC;let e=$s.default.get(x.OPERATIONSAPI_TLS_CERTIFICATE)||$s.default.get(x.TLS_CERTIFICATE);if(e)return LC=new FV.X509Certificate((0,kV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return $l||($l=$s.default.get("replication_hostname")??Ai($s.default.get("replication_url"))??Cue()??BV("operationsapi_network_secureport")??BV("operationsapi_network_port")??"127.0.0.1")}function Oue(){$l=void 0}function BV(e){let t=$s.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function sT(e){let t=$s.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function tT(e){return rh(e)?.[it()]}function ec(){let e=$s.default.get("replication_url");return e||aT(it())}function aT(e){let t=sT("replication_port");if(t)return`ws://${e}:${t}`;if(t=sT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=sT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=sT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ai(e){if(e)return new URL(e).hostname}function Za(e,t){for(let n of Object.getOwnPropertyNames(ve))r(n);return Hp(n=>{r(n)}),Ol((n,s)=>{r(n.databaseName)});function r(n){let s=ve[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):Pue(n)&&t(s,n,!1)}o(r,"forDatabase")}function Pue(e){let t=ve[e];for(let r in t)if(t[r].replicate)return!0}function nh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Lue(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>hh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ue.nodes[s]?.name,i})}return t}var $s,It,FV,kV,oT,HV,GV,qV,$V,yue,Rue,Jo,sc,iT,xV,LC,$l,ls=ie(()=>{Pe();Fa();Ou();CC();Ur();$s=I(le()),It=I(Q()),FV=require("crypto");nT();kV=require("fs");ah();Bl();q();rC();oT=I(require("node:tls")),HV=I(Ee()),GV=require("worker_threads"),qV=I(ds()),yue=1,Rue=[],Jo=$s.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1?new Set(oT.rootCertificates):new Set;o(Aue,"start");o(VV,"monitorNodeCAs");o(bue,"disableReplication");o(Iue,"assignReplicationSource");o(YV,"setReplicator");iT=new Map;o(wue,"getSubscriptionConnection");xV=new Map;o(Nue,"getRetrievalConnectionByName");o(hh,"sendOperationToNode");o(oh,"subscribeToNode");o(qS,"unsubscribeFromNode");o(Cue,"getCommonNameFromCert");o(it,"getThisNodeName");o(Oue,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return it()}});o(BV,"getHostFromListeningPort");o(sT,"getPortFromListeningPort");o(tT,"getThisNodeId");Ue.replication={getThisNodeId:tT,exportIdMapping:rh};o(ec,"getThisNodeUrl");o(aT,"hostnameToUrl");o(Ai,"urlToNodeName");o(Za,"forEachReplicatedDatabase");o(Pue,"hasExplicitlyReplicatedTable");o(nh,"lastTimeInAuditStore");o(Lue,"replicateOperation")});var fT=v((Hxe,JV)=>{"use strict";var Vd=zq(),{validateBySchema:Eh}=ft(),{commonValidators:Kd,schemaRegex:DC}=Vi(),Er=require("joi"),Due=Q(),Mue=require("uuid").v4,uT=Go(),Yd=(q(),M(W)),vue=require("util"),oc=ss(),{handleHDBError:Xo,hdbErrors:Uue,ClientError:_h}=Ee(),{HDB_ERROR_MSGS:cT,HTTP_STATUS_CODES:Zo}=Uue,{SchemaEventMsg:dT}=ts(),WV=pr(),{getDatabases:xue}=(Pe(),M(pt)),{transformReq:Wd}=ce(),{replicateOperation:zV}=(ls(),M(Qo)),lT=Er.string().min(1).max(Kd.schema_length.maximum).pattern(DC).messages({"string.pattern.base":"{:#label} "+Kd.schema_format.message}),Bue=Er.string().min(1).max(Kd.schema_length.maximum).pattern(DC).messages({"string.pattern.base":"{:#label} "+Kd.schema_format.message}).required(),Fue=Er.string().min(1).max(Kd.schema_length.maximum).pattern(DC).messages({"string.pattern.base":"{:#label} "+Kd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();JV.exports={createSchema:kue,createSchemaStructure:jV,createTable:Hue,createTableStructure:QV,createAttribute:Kue,dropSchema:Gue,dropTable:que,dropAttribute:$ue,getBackup:Yue};async function kue(e){let t=await jV(e);return uT.signalSchemaChange(new dT(process.pid,e.operation,e.schema)),t}o(kue,"createSchema");async function jV(e){let t=Eh(e,Er.object({database:lT,schema:lT}));if(t)throw new _h(t.message);if(Wd(e),!await Vd.checkSchemaExists(e.schema))throw Xo(new Error,cT.SCHEMA_EXISTS_ERR(e.schema),Zo.BAD_REQUEST,Yd.LOG_LEVELS.ERROR,cT.SCHEMA_EXISTS_ERR(e.schema),!0);return await oc.createSchema(e),`database '${e.schema}' successfully created`}o(jV,"createSchemaStructure");async function Hue(e){return Wd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await QV(e)}o(Hue,"createTable");async function QV(e){let t=Eh(e,Er.object({database:lT,schema:lT,table:Bue,residence:Er.array().items(Er.string().min(1)).optional(),hash_attribute:Fue}));if(t)throw new _h(t.message);if(!await Vd.checkSchemaTableExists(e.schema,e.table))throw Xo(new Error,cT.TABLE_EXISTS_ERR(e.schema,e.table),Zo.BAD_REQUEST,Yd.LOG_LEVELS.ERROR,cT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Mue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await oc.createTable(n,e);else throw Xo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Zo.BAD_REQUEST);else await oc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(QV,"createTableStructure");async function Gue(e){let t=Eh(e,Er.object({database:Er.string(),schema:Er.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new _h(t.message);Wd(e);let r=await Vd.checkSchemaExists(e.schema);if(r)throw Xo(new Error,r,Zo.NOT_FOUND,Yd.LOG_LEVELS.ERROR,r,!0);let n=await Vd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await oc.dropSchema(e),uT.signalSchemaChange(new dT(process.pid,e.operation,e.schema)),await WV.purgeSchemaTableStreams(e.schema,s);let i=await zV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Gue,"dropSchema");async function que(e){let t=Eh(e,Er.object({database:Er.string(),schema:Er.string(),table:Er.string().required()}));if(t)throw new _h(t.message);Wd(e);let r=await Vd.checkSchemaTableExists(e.schema,e.table);if(r)throw Xo(new Error,r,Zo.NOT_FOUND,Yd.LOG_LEVELS.ERROR,r,!0);await oc.dropTable(e),await WV.purgeTableStream(e.schema,e.table);let n=await zV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(que,"dropTable");async function $ue(e){let t=Eh(e,Er.object({database:Er.string(),schema:Er.string(),table:Er.string().required(),attribute:Er.string().required()}));if(t)throw new _h(t.message);Wd(e);let r=await Vd.checkSchemaTableExists(e.schema,e.table);if(r)throw Xo(new Error,r,Zo.NOT_FOUND,Yd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Xo(new Error,"You cannot drop a hash attribute",Zo.BAD_REQUEST,void 0,void 0,!0);if(Yd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Xo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Zo.BAD_REQUEST,void 0,void 0,!0);try{return await oc.dropAttribute(e),Vue(e),uT.signalSchemaChange(new dT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Due.error(`Got an error deleting attribute ${vue.inspect(e)}.`),n}}o($ue,"dropAttribute");function Vue(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(Vue,"dropAttributeFromGlobal");async function Kue(e){Wd(e);let t=xue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Xo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Zo.BAD_REQUEST,void 0,void 0,!0);return await oc.createAttribute(e),uT.signalSchemaChange(new dT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Kue,"createAttribute");function Yue(e){return oc.getBackup(e)}o(Yue,"getBackup")});var ZV=v((qxe,XV)=>{"use strict";var{OPERATIONS_ENUM:Wue}=(q(),M(W)),MC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Wue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};XV.exports=MC});var vC=v((Kxe,s1)=>{"use strict";var zue=ss(),Vxe=ZV(),mT=ce(),pT=(q(),M(W)),jue=le(),{handleHDBError:e1,hdbErrors:Que}=Ee(),{HDB_ERROR_MSGS:t1,HTTP_STATUS_CODES:r1}=Que,Jue=Object.values(pT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),n1="To use this operation audit log must be enabled in harperdb-config.yaml";s1.exports=Xue;async function Xue(e){if(mT.isEmpty(e.schema))throw new Error(t1.SCHEMA_REQUIRED_ERR);if(mT.isEmpty(e.table))throw new Error(t1.TABLE_REQUIRED_ERR);if(!jue.get(pT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw e1(new Error,n1,r1.BAD_REQUEST,pT.LOG_LEVELS.ERROR,n1,!0);let t=mT.checkSchemaTableExist(e.schema,e.table);if(t)throw e1(new Error,t,r1.NOT_FOUND,pT.LOG_LEVELS.ERROR,t,!0);if(!mT.isEmpty(e.search_type)&&Jue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await zue.readAuditLog(e)}o(Xue,"readAuditLog")});var o1=v((Wxe,i1)=>{"use strict";var{OPERATIONS_ENUM:Zue}=(q(),M(W)),UC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Zue.GET_BACKUP,this.schema=t,this.table=r}};i1.exports=UC});var l1=v((Jxe,c1)=>{"use strict";var ede=ss(),jxe=o1(),xC=ce(),tde=(q(),M(W)),Qxe=le(),{handleHDBError:rde,hdbErrors:nde}=Ee(),{HDB_ERROR_MSGS:a1,HTTP_STATUS_CODES:sde}=nde;c1.exports=ide;async function ide(e){if(xC.isEmpty(e.schema))throw new Error(a1.SCHEMA_REQUIRED_ERR);if(xC.isEmpty(e.table))throw new Error(a1.TABLE_REQUIRED_ERR);let t=xC.checkSchemaTableExist(e.schema,e.table);if(t)throw rde(new Error,t,sde.NOT_FOUND,tde.LOG_LEVELS.ERROR,t,!0);return await ede.getBackup(readAuditLogObject)}o(ide,"getBackup")});var m1=v((Zxe,f1)=>{"use strict";var ode=le(),ac=require("joi"),ade=ft(),u1=require("moment"),cde=require("fs-extra"),BC=require("path"),lde=require("lodash"),gh=(q(),M(W)),{LOG_LEVELS:Vl}=(q(),M(W)),ude="YYYY-MM-DD hh:mm:ss",dde=BC.resolve(__dirname,"../logs");f1.exports=function(e){return ade.validateBySchema(e,fde)};var fde=ac.object({from:ac.custom(d1),until:ac.custom(d1),level:ac.valid(Vl.NOTIFY,Vl.FATAL,Vl.ERROR,Vl.WARN,Vl.INFO,Vl.DEBUG,Vl.TRACE),order:ac.valid("asc","desc"),limit:ac.number().min(1),start:ac.number().min(0),log_name:ac.custom(mde)});function d1(e,t){if(u1(e,u1.ISO_8601).format(ude)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(d1,"validateDatetime");function mde(e,t){if(lde.invert(gh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=ode.get(gh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?gh.LOG_NAMES.HDB:e,i=s===gh.LOG_NAMES.INSTALL?BC.join(dde,gh.LOG_NAMES.INSTALL):BC.join(n,s);return cde.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(mde,"validateReadLogPath")});var kC=v((t0e,h1)=>{"use strict";var hT=(q(),M(W)),pde=Q(),hde=le(),Ede=m1(),FC=require("path"),p1=require("fs-extra"),{once:_de}=require("events"),{handleHDBError:gde,hdbErrors:Sde}=Ee(),{PACKAGE_ROOT:Tde}=yt(),{replicateOperation:yde}=(ls(),M(Qo)),Rde=FC.join(Tde,"logs"),Ade=1e3,bde=200;h1.exports=Ide;async function Ide(e){let t=Ede(e);if(t)throw gde(t,t.message,Sde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=yde(e),n=hde.get(hT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?hT.LOG_NAMES.HDB:e.log_name,i=s===hT.LOG_NAMES.INSTALL?FC.join(Rde,hT.LOG_NAMES.INSTALL):FC.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?Ade:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(p1.statSync(i).size-(E+5)*bde,0));let A=p1.createReadStream(i,{start:g});A.on("error",F=>{pde.error(F)});let S=0,T=[],w="",L;A.on("data",F=>{let V=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=w+F;let X=0,Y;for(;(Y=V.exec(F))&&!A.destroyed;){L&&(L.message=F.slice(X,Y.index),k(L));let[de,ne,ae]=Y,ye=ae.split("] ["),Ae=ye[0],He=ye[1];ye.splice(0,2),L={timestamp:ne,thread:Ae,level:He,tags:ye,message:""},X=Y.index+de.length}w=F.slice(X)}),A.on("end",F=>{A.destroyed||L&&(L.message=w.trim(),k(L))}),A.resume();function k(F){let V,X,Y;switch(!0){case(a&&l&&d):V=new Date(F.timestamp),X=new Date(u),Y=new Date(f),F.level===c&&V>=X&&V<=Y&&S<h?S++:F.level===c&&V>=X&&V<=Y&&(oo(F,p,T),S++,S===E&&A.destroy());break;case(a&&l):V=new Date(F.timestamp),X=new Date(u),F.level===c&&V>=X&&S<h?S++:F.level===c&&V>=X&&(oo(F,p,T),S++,S===E&&A.destroy());break;case(a&&d):V=new Date(F.timestamp),Y=new Date(f),F.level===c&&V<=Y&&S<h?S++:F.level===c&&V<=Y&&(oo(F,p,T),S++,S===E&&A.destroy());break;case(l&&d):V=new Date(F.timestamp),X=new Date(u),Y=new Date(f),V>=X&&V<=Y&&S<h?S++:V>=X&&V<=Y&&(oo(F,p,T),S++,S===E&&A.destroy());break;case a:F.level===c&&S<h?S++:F.level===c&&(oo(F,p,T),S++,S===E&&A.destroy());break;case l:V=new Date(F.timestamp),X=new Date(u),V>=X&&S<h?S++:V>=X&&S>=h&&(oo(F,p,T),S++,S===E&&A.destroy());break;case d:V=new Date(F.timestamp),Y=new Date(f),V<=Y&&S<h?S++:V<=Y&&S>=h&&(oo(F,p,T),S++,S===E&&A.destroy());break;default:S<h?S++:(oo(F,p,T),S++,S===E&&A.destroy())}}o(k,"onLogMessage"),await _de(A,"close");let te=await r;if(te.replicated){for(let F of T)F.node=server.hostname;for(let F of te.replicated){let V=F.node;if(F.status==="failed")oo({timestamp:new Date().toISOString(),level:"error",node:V,message:`Error retrieving logs: ${F.reason}`},p,T);else for(let X of F.results)X.node=V,oo(X,p,T)}}return T}o(Ide,"readLog");function oo(e,t,r){t==="desc"?wde(e,r):t==="asc"?Nde(e,r):r.push(e)}o(oo,"pushLineToResult");function wde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(wde,"insertDescending");function Nde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(Nde,"insertAscending")});var ET=v((a0e,S1)=>{"use strict";var HC=require("joi"),{string:zd,boolean:E1,date:Cde}=HC.types(),Ode=ft(),{validateSchemaExists:n0e,validateTableExists:s0e,validateSchemaName:i0e}=Vi(),Pde=(q(),M(W)),Lde=Nt(),_1=le();_1.initSync();var o0e=zd.invalid(_1.get(Pde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Lde.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),g1={operation:zd.valid("add_node","update_node","set_node_replication"),node_name:zd.optional(),subscriptions:HC.array().items({table:zd.optional(),schema:zd.optional(),database:zd.optional(),subscribe:E1.required(),publish:E1.required().custom(Mde),start_time:Cde.iso()})};function Dde(e){return Ode.validateBySchema(e,HC.object(g1))}o(Dde,"addUpdateNodeValidator");function Mde(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(Mde,"checkForFalsy");S1.exports={addUpdateNodeValidator:Dde,validationSchema:g1}});var jd=v((l0e,T1)=>{"use strict";var GC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},qC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};T1.exports={Node:GC,NodeSubscription:qC}});var R1=v((d0e,y1)=>{"use strict";var vde=(q(),M(W)).OPERATIONS_ENUM,$C=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=vde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};y1.exports=$C});var Sh=v((m0e,A1)=>{"use strict";var VC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},KC=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};A1.exports={RemotePayloadObject:VC,RemotePayloadSubscription:KC}});var I1=v((h0e,b1)=>{"use strict";var YC=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};b1.exports=YC});var N1=v((y0e,w1)=>{"use strict";var Ude=I1(),_0e=Vt(),g0e=gt(),xde=Q(),{getSchemaPath:S0e,getTransactionAuditStorePath:T0e}=At(),{getDatabases:Bde}=(Pe(),M(pt));w1.exports=Fde;async function Fde(e){let t=new Ude;try{let r=Bde()[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){xde.warn(`unable to stat table dbi due to ${r}`)}return t}o(Fde,"lmdbGetTableSize")});var O1=v((A0e,C1)=>{"use strict";var WC=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};C1.exports=WC});var Jd=v((O0e,M1)=>{"use strict";var kde=require("fs-extra"),Hde=require("path"),_n=require("systeminformation"),cc=Q(),P1=pr(),I0e=Nt(),Qd=(q(),M(W)),Gde=N1(),qde=Dl(),{getThreadInfo:L1}=nt(),Th=le();Th.initSync();var $de=O1(),{openEnvironment:w0e}=gt(),{getSchemaPath:N0e}=At(),{database:C0e,databases:zC}=(Pe(),M(pt)),_T;M1.exports={getHDBProcessInfo:XC,getNetworkInfo:eO,getDiskInfo:ZC,getMemoryInfo:JC,getCPUInfo:QC,getTimeInfo:jC,getSystemInformation:tO,systemInformation:Vde,getTableSize:rO,getMetrics:nO};function jC(){return _n.time()}o(jC,"getTimeInfo");async function QC(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await _n.cpu();d.cpu_speed=await _n.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:A,...S}=await _n.currentLoad();return S.cpus=[],A.forEach(T=>{let{rawLoad:w,rawLoadIdle:L,rawLoadIrq:k,rawLoadNice:te,rawLoadSystem:F,rawLoadUser:V,...X}=T;S.cpus.push(X)}),d.current_load=S,d}catch(e){return cc.error(`error in getCPUInfo: ${e}`),{}}}o(QC,"getCPUInfo");async function JC(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await _n.mem();return Object.assign(s,process.memoryUsage())}catch(e){return cc.error(`error in getMemoryInfo: ${e}`),{}}}o(JC,"getMemoryInfo");async function XC(){let e={core:[],clustering:[]};try{let t=await _n.processes(),r;try{r=Number.parseInt(await kde.readFile(Hde.join(Th.get(Qd.CONFIG_PARAMS.ROOTPATH),Qd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Qd.NODE_ERROR_CODES.ENOENT)cc.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 cc.error(`error in getHDBProcessInfo: ${t}`),e}}o(XC,"getHDBProcessInfo");async function ZC(){let e={};try{if(!Th.get(Qd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await _n.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await _n.fsStats();return e.read_write=u,e.size=await _n.fsSize(),e}catch(t){return cc.error(`error in getDiskInfo: ${t}`),e}}o(ZC,"getDiskInfo");async function eO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Th.get(Qd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await _n.networkInterfaceDefault(),e.latency=await _n.inetChecksite("google.com"),(await _n.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await _n.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return cc.error(`error in getNetworkInfo: ${t}`),e}}o(eO,"getNetworkInfo");async function tO(){if(_T!==void 0)return _T;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await _n.osInfo();e=c;let l=await _n.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,_T=e,_T}catch(t){return cc.error(`error in getSystemInformation: ${t}`),e}}o(tO,"getSystemInformation");async function rO(){let e=[],t=await qde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Gde(n));return e}o(rO,"getTableSize");async function nO(){let e={};for(let t in zC){let r=e[t]={},n=r.tables={};for(let s in zC[t])try{let i=zC[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){cc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(nO,"getMetrics");async function D1(){if(Th.get(Qd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await P1.getNATSReferences(),t=await P1.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(D1,"getNatsStreamInfo");async function Vde(e){let t=new $de;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await tO(),t.time=jC(),t.cpu=await QC(),t.memory=await JC(),t.disk=await ZC(),t.network=await eO(),t.harperdb_processes=await XC(),t.table_size=await rO(),t.metrics=await nO(),t.threads=await L1(),t.replication=await D1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await tO();break;case"time":t.time=jC();break;case"cpu":t.cpu=await QC();break;case"memory":t.memory=await JC();break;case"disk":t.disk=await ZC();break;case"network":t.network=await eO();break;case"harperdb_processes":t.harperdb_processes=await XC();break;case"table_size":t.table_size=await rO();break;case"database_metrics":case"metrics":t.metrics=await nO();break;case"threads":t.threads=await L1();break;case"replication":t.replication=await D1();break;default:break}return t}o(Vde,"systemInformation")});var ea=v((v0e,B1)=>{"use strict";var Kde=Fn(),sO=ce(),Yde=require("util"),Kl=(q(),M(W)),v1=le();v1.initSync();var Wde=MN(),U1=fn(),{Node:L0e,NodeSubscription:D0e}=jd(),zde=Xu(),jde=R1(),{RemotePayloadObject:Qde,RemotePayloadSubscription:Jde}=Sh(),{handleHDBError:Xde,hdbErrors:Zde}=Ee(),{HTTP_STATUS_CODES:efe,HDB_ERROR_MSGS:tfe}=Zde,rfe=hi(),nfe=Jd(),{packageJson:sfe}=yt(),{getDatabases:ife}=(Pe(),M(pt)),M0e=Yde.promisify(Wde.authorize),ofe=U1.searchByHash,afe=U1.searchByValue;B1.exports={isEmpty:cfe,getNodeRecord:lfe,upsertNodeRecord:ufe,buildNodePayloads:dfe,checkClusteringEnabled:ffe,getAllNodeRecords:mfe,getSystemInfo:pfe,reverseSubscription:x1};function cfe(e){return e==null}o(cfe,"isEmpty");async function lfe(e){let t=new zde(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return ofe(t)}o(lfe,"getNodeRecord");async function ufe(e){let t=new jde(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Kde.upsert(t)}o(ufe,"upsertNodeRecord");function x1(e){if(sO.isEmpty(e.subscribe)||sO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(x1,"reverseSubscription");function dfe(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=sO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=x1(c),p=ife()[l]?.[u],h=new Jde(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Qde(r,t,s,n)}o(dfe,"buildNodePayloads");function ffe(){if(!v1.get(Kl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xde(new Error,tfe.CLUSTERING_NOT_ENABLED,efe.BAD_REQUEST,void 0,void 0,!0)}o(ffe,"checkClusteringEnabled");async function mfe(){let e=new rfe(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await afe(e))}o(mfe,"getAllNodeRecords");async function pfe(){let e=await nfe.getSystemInformation();return{hdb_version:sfe.version,node_version:e.node_version,platform:e.platform}}o(pfe,"getSystemInfo")});var iO=v((x0e,K1)=>{"use strict";var gT=pr(),F1=ce(),k1=Nt(),H1=(q(),M(W)),ST=Q(),G1=fT(),hfe=cp(),{RemotePayloadObject:Efe}=Sh(),{handleHDBError:q1,hdbErrors:_fe}=Ee(),{HTTP_STATUS_CODES:$1}=_fe,{NodeSubscription:V1}=jd();K1.exports=gfe;async function gfe(e,t){let r;try{r=await gT.request(`${t}.${k1.REQUEST_SUFFIX}`,new Efe(H1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),ST.trace("Response from remote describe all request:",r)}catch(a){ST.error(`addNode received error from describe all request to remote node: ${a}`);let c=gT.requestErrorHandler(a,"add_node",t);throw q1(new Error,c,$1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===k1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw q1(new Error,a,$1.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===H1.SYSTEM_SCHEMA_NAME){await gT.createLocalTableStream(l,c);let h=new V1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=F1.doesSchemaExist(l),d=n[l]!==void 0,f=c?F1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(ST.trace(`addNode creating schema: ${l}`),await G1.createSchema({operation:"create_schema",schema:l})),!f&&m){ST.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new hfe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await G1.createTable(h)}await gT.createLocalTableStream(l,c);let p=new V1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(gfe,"reviewSubscriptions")});var Xd={};be(Xd,{addNodeBack:()=>oO,removeNodeBack:()=>aO,setNode:()=>Rfe});async function Rfe(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=Ai(t)):t=aT(r);let n=(0,W1.validateBySchema)(e,yfe);if(n)throw(0,ta.handleHDBError)(n,n.message,Tfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new ta.ClientError("url or hostname is required for remove_node operation");let p=r,h=Wt(),E=await h.get(p);if(!E)throw new ta.ClientError(p+" does not exist");try{await hh({url:E.url},{operation:$.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){fs.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new ta.ClientError("url required for this operation");let s=ec();if(s==null)throw new ta.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Vs.getReplicationCert)();let p=await(0,Vs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Vs.createCsr)(),fs.info("Sending CSR to target node:",t)):p&&(c=p.certificate,fs.info("Sending CA named",p.name,"to target node",t))}let l={operation:$.ADD_NODE_BACK,hostname:(0,uc.get)(x.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,uc.get)(x.REPLICATION_SHARD)!==void 0&&(l.shard=(0,uc.get)(x.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(Y1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=Y1(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await hh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,fs.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(fs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Vs.setCertTable)({name:Sfe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Vs.setCertTable)({name:it(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,uc.get)(x.REPLICATION_SHARD)!==void 0&&(p.shard=(0,uc.get)(x.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await zo(it(),p)}await zo(u?u.nodeName:f.name??Ai(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function oO(e){fs.trace("addNodeBack received request:",e);let t=await(0,Vs.signCertificate)(e),r;e.csr?(r=t.signingCA,fs.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,fs.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,Vs.getReplicationCertAuth)();if(n.replicates){let i={url:ec(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,uc.get)(x.REPLICATION_SHARD)!==void 0&&(i.shard=(0,uc.get)(x.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await zo(it(),i)}return await zo(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,fs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function aO(e){fs.trace("removeNodeBack received request:",e),await Wt().delete(e.name)}function Y1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Vs,W1,lc,uc,fs,ta,Sfe,Tfe,yfe,Zd=ie(()=>{Vs=I(ds()),W1=I(ft()),lc=I(require("joi")),uc=I(le());q();ah();Bl();ls();fs=I(Q()),ta=I(Ee()),{pki:Sfe}=require("node-forge"),{HTTP_STATUS_CODES:Tfe}=ta.hdbErrors,yfe=lc.default.object({hostname:lc.default.string(),verify_tls:lc.default.boolean(),replicates:lc.default.boolean(),subscriptions:lc.default.array(),revoked_certificates:lc.default.array(),shard:lc.default.number()});o(Rfe,"setNode");o(oO,"addNodeBack");o(aO,"removeNodeBack");o(Y1,"reverseSubscription")});var bT=v((K0e,j1)=>{"use strict";var{handleHDBError:TT,hdbErrors:Afe}=Ee(),{HTTP_STATUS_CODES:yT}=Afe,{addUpdateNodeValidator:bfe}=ET(),RT=Q(),AT=(q(),M(W)),z1=Nt(),Ife=ce(),yh=pr(),Rh=ea(),cO=le(),wfe=iO(),{Node:Nfe,NodeSubscription:Cfe}=jd(),{broadcast:Ofe}=nt(),{setNode:Pfe}=(Zd(),M(Xd)),$0e=le(),V0e=(q(),M(W)),Lfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Dfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Mfe=cO.get(AT.CONFIG_PARAMS.CLUSTERING_NODENAME);j1.exports=vfe;async function vfe(e,t=!1){if(RT.trace("addNode called with:",e),cO.get(AT.CONFIG_PARAMS.REPLICATION_URL)||cO.get(AT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Pfe(e);Rh.checkClusteringEnabled();let r=bfe(e);if(r)throw TT(r,r.message,yT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Rh.getNodeRecord(n);if(!Ife.isEmptyOrZeroLength(f))throw TT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,yT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await wfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=Lfe,a;let c=Rh.buildNodePayloads(s,Mfe,AT.OPERATIONS_ENUM.ADD_NODE,await Rh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new Cfe(p.schema,p.table,p.publish,p.subscribe))}RT.trace("addNode sending remote payload:",c);let u;try{u=await yh.request(`${n}.${z1.REQUEST_SUFFIX}`,c)}catch(f){RT.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await yh.updateRemoteConsumer(E,n)}let m=yh.requestErrorHandler(f,"add_node",n);throw TT(new Error,m,yT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===z1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw TT(new Error,f,yT.INTERNAL_SERVER_ERROR,"error",f)}RT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await yh.updateRemoteConsumer(p,n),p.subscribe===!0&&await yh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new Nfe(n,l,u.system_info);return await Rh.upsertNodeRecord(d),Ofe({type:"nats_update"}),i.length>0?a.message=Dfe:a.message=`Successfully added '${n}' to manifest`,a}o(vfe,"addNode")});var fO=v((z0e,J1)=>{"use strict";var{handleHDBError:lO,hdbErrors:Ufe}=Ee(),{HTTP_STATUS_CODES:uO}=Ufe,{addUpdateNodeValidator:xfe}=ET(),Ah=Q(),IT=(q(),M(W)),Q1=Nt(),W0e=ce(),bh=pr(),Ih=ea(),dO=le(),{cloneDeep:Bfe}=require("lodash"),Ffe=iO(),{Node:kfe,NodeSubscription:Hfe}=jd(),{broadcast:Gfe}=nt(),{setNode:qfe}=(Zd(),M(Xd)),$fe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Vfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Kfe=dO.get(IT.CONFIG_PARAMS.CLUSTERING_NODENAME);J1.exports=Yfe;async function Yfe(e){if(Ah.trace("updateNode called with:",e),dO.get(IT.CONFIG_PARAMS.REPLICATION_URL)??dO.get(IT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return qfe(e);Ih.checkClusteringEnabled();let t=xfe(e);if(t)throw lO(t,t.message,uO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Ih.getNodeRecord(r);s.length>0&&(n=Bfe(s));let{added:i,skipped:a}=await Ffe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=$fe,c;let l=Ih.buildNodePayloads(i,Kfe,IT.OPERATIONS_ENUM.UPDATE_NODE,await Ih.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Ah.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Ah.trace("updateNode sending remote payload:",l);let u;try{u=await bh.request(`${r}.${Q1.REQUEST_SUFFIX}`,l)}catch(d){Ah.error(`updateNode received error from request: ${d}`);let f=bh.requestErrorHandler(d,"update_node",r);throw lO(new Error,f,uO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===Q1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw lO(new Error,d,uO.INTERNAL_SERVER_ERROR,"error",d)}Ah.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await bh.updateRemoteConsumer(m,r),m.subscribe===!0?await bh.updateConsumerIterator(m.schema,m.table,r,"start"):await bh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new kfe(r,[],u.system_info)]),await Wfe(n[0],i,u.system_info),a.length>0?c.message=Vfe:c.message=`Successfully updated '${r}'`,c}o(Yfe,"updateNode");async function Wfe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new Hfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Ih.upsertNodeRecord(n),Gfe({type:"nats_update"})}o(Wfe,"updateNodeTable")});var rK=v((Q0e,tK)=>{"use strict";var eK=require("joi"),{string:X1}=eK.types(),zfe=ft(),Z1=(q(),M(W)),jfe=le(),Qfe=Nt();tK.exports=Jfe;function Jfe(e){let t=X1.invalid(jfe.get(Z1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Qfe.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=eK.object({operation:X1.valid(Z1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return zfe.validateBySchema(e,r)}o(Jfe,"removeNodeValidator")});var wT=v((X0e,aK)=>{"use strict";var{handleHDBError:nK,hdbErrors:Xfe}=Ee(),{HTTP_STATUS_CODES:sK}=Xfe,Zfe=rK(),wh=Q(),iK=ea(),eme=ce(),ef=(q(),M(W)),oK=Nt(),mO=pr(),pO=le(),{RemotePayloadObject:tme}=Sh(),{NodeSubscription:rme}=jd(),nme=ap(),sme=yl(),{broadcast:ime}=nt(),{setNode:ome}=(Zd(),M(Xd)),ame=pO.get(ef.CONFIG_PARAMS.CLUSTERING_NODENAME);aK.exports=cme;async function cme(e){if(wh.trace("removeNode called with:",e),pO.get(ef.CONFIG_PARAMS.REPLICATION_URL)??pO.get(ef.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ome(e);iK.checkClusteringEnabled();let t=Zfe(e);if(t)throw nK(t,t.message,sK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await iK.getNodeRecord(r);if(eme.isEmptyOrZeroLength(n))throw nK(new Error,`Node '${r}' was not found.`,sK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new tme(ef.OPERATIONS_ENUM.REMOVE_NODE,ame,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await mO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await mO.updateRemoteConsumer(new rme(d.schema,d.table,!1,!1),r)}catch(f){wh.error(f)}}try{i=await mO.request(`${r}.${oK.REQUEST_SUFFIX}`,s),wh.trace("Remove node reply from remote node:",r,i)}catch(l){wh.error("removeNode received error from request:",l),a=!0}let c=new nme(ef.SYSTEM_SCHEMA_NAME,ef.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await sme.deleteRecord(c),ime({type:"nats_update"}),i?.status===oK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(wh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(cme,"removeNode")});var uK=v((eBe,lK)=>{"use strict";var cK=require("joi"),{string:lme,array:ume}=cK.types(),dme=ft(),fme=ET();lK.exports=mme;function mme(e){let t=cK.object({operation:lme.valid("configure_cluster").required(),connections:ume.items(fme.validationSchema).required()});return dme.validateBySchema(e,t)}o(mme,"configureClusterValidator")});var hO=v((rBe,hK)=>{"use strict";var dK=(q(),M(W)),NT=Q(),pme=ce(),hme=le(),Eme=wT(),_me=bT(),gme=ea(),Sme=uK(),{handleHDBError:fK,hdbErrors:Tme}=Ee(),{HTTP_STATUS_CODES:mK}=Tme,yme="Configure cluster complete.",Rme="Failed to configure the cluster. Check the logs for more details.",Ame="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";hK.exports=bme;async function bme(e){NT.trace("configure cluster called with:",e);let t=Sme(e);if(t)throw fK(t,t.message,mK.BAD_REQUEST,void 0,void 0,!0);let r=await gme.getAllNodeRecords(),n=[];if(hme.get(dK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await pK(Eme,{operation:dK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}NT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await pK(_me,f,f.node_name);s.push(m)}NT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(NT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(pme.isEmptyOrZeroLength(a))return{message:yme,connections:c};if(l)return{message:Ame,failed_nodes:a,connections:c};throw fK(new Error,Rme,mK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(bme,"configureCluster");async function pK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(pK,"functionWrapper")});var SK=v((sBe,gK)=>{"use strict";var Nh=require("joi"),Ime=ft(),{validateSchemaExists:EK,validateTableExists:wme,validateSchemaName:_K}=Vi(),Nme=Nh.object({operation:Nh.string().valid("purge_stream"),schema:Nh.string().custom(EK).custom(_K).optional(),database:Nh.string().custom(EK).custom(_K).optional(),table:Nh.string().custom(wme).required()});function Cme(e){return Ime.validateBySchema(e,Nme)}o(Cme,"purgeStreamValidator");gK.exports=Cme});var EO=v((oBe,TK)=>{"use strict";var{handleHDBError:Ome,hdbErrors:Pme}=Ee(),{HTTP_STATUS_CODES:Lme}=Pme,Dme=SK(),Mme=pr(),vme=ea();TK.exports=Ume;async function Ume(e){e.schema=e.schema??e.database;let t=Dme(e);if(t)throw Ome(t,t.message,Lme.BAD_REQUEST,void 0,void 0,!0);vme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Mme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Ume,"purgeStream")});var SO=v((cBe,NK)=>{"use strict";var gO=ea(),xme=pr(),OT=le(),tf=(q(),M(W)),Yl=Nt(),Bme=ce(),_O=Q(),{RemotePayloadObject:Fme}=Sh(),{ErrorCode:yK}=require("nats"),{parentPort:RK}=require("worker_threads"),{onMessageByType:kme}=nt(),{getThisNodeName:Hme}=(ls(),M(Qo)),{requestClusterStatus:Gme}=(ah(),M(U$)),{getReplicationSharedStatus:qme,getHDBNodeTable:$me}=(Bl(),M(nC)),{CONFIRMATION_STATUS_POSITION:Vme,RECEIVED_VERSION_POSITION:Kme,RECEIVED_TIME_POSITION:Yme,SENDING_TIME_POSITION:Wme,RECEIVING_STATUS_POSITION:zme,RECEIVING_STATUS_RECEIVING:jme}=(CC(),M(wV)),AK=OT.get(tf.CONFIG_PARAMS.CLUSTERING_ENABLED),bK=OT.get(tf.CONFIG_PARAMS.CLUSTERING_NODENAME);NK.exports={clusterStatus:Qme,buildNodeStatus:wK};var IK;kme("cluster-status",async e=>{IK(e)});async function Qme(){if(OT.get(tf.CONFIG_PARAMS.REPLICATION_URL)||OT.get(tf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(RK){RK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{IK=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=qme(u,l,a);c.lastCommitConfirmed=CT(d[Vme]),c.lastReceivedRemoteTime=CT(d[Kme]),c.lastReceivedLocalTime=CT(d[Yme]),c.sendingMessage=CT(d[Wme]),c.lastReceivedStatus=d[zme]===jme?"Receiving":"Waiting"}}}else n=Gme();n.node_name=Hme();let s=$me().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:bK,is_enabled:AK,connections:[]};if(!AK)return e;let t=await gO.getAllNodeRecords();if(Bme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(wK(t[n],e.connections));return await Promise.allSettled(r),e}o(Qme,"clusterStatus");function CT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(CT,"asDate");async function wK(e,t){let r=e.name,n=new Fme(tf.OPERATIONS_ENUM.CLUSTER_STATUS,bK,void 0,await gO.getSystemInfo()),s,i,a=Yl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await xme.request(Yl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Yl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Yl.CLUSTER_STATUS_STATUSES.CLOSED,_O.error(`Error getting node status from ${r} `,s))}catch(l){_O.warn(`Error getting node status from ${r}`,l),l.code===yK.NoResponders?a=Yl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===yK.Timeout?a=Yl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Yl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Jme(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==tf.PRE_4_0_0_VERSION&&await gO.upsertNodeRecord(l)}catch(l){_O.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(wK,"buildNodeStatus");function Jme(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Jme,"NodeStatusObject")});var yO=v((uBe,CK)=>{"use strict";var{handleHDBError:Xme,hdbErrors:Zme}=Ee(),{HTTP_STATUS_CODES:epe}=Zme,tpe=pr(),rpe=ea(),TO=ce(),PT=require("joi"),npe=ft(),spe=2e3,ipe=PT.object({timeout:PT.number().min(1),connected_nodes:PT.boolean(),routes:PT.boolean()});CK.exports=ope;async function ope(e){rpe.checkClusteringEnabled();let t=npe.validateBySchema(e,ipe);if(t)throw Xme(t,t.message,epe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||TO.autoCastBoolean(n),a=s===void 0||TO.autoCastBoolean(s),c={nodes:[]},l=await tpe.getServerList(r??spe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:TO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(ope,"clusterNetwork")});var DK=v((fBe,LK)=>{"use strict";var RO=require("joi"),OK=ft(),{routeConstraints:PK}=CA();LK.exports={setRoutesValidator:ape,deleteRoutesValidator:cpe};function ape(e){let t=RO.object({server:RO.valid("hub","leaf"),routes:PK.required()});return OK.validateBySchema(e,t)}o(ape,"setRoutesValidator");function cpe(e){let t=RO.object({routes:PK.required()});return OK.validateBySchema(e,t)}o(cpe,"deleteRoutesValidator")});var LT=v((pBe,kK)=>{"use strict";var ra=Rt(),AO=ce(),Ks=(q(),M(W)),rf=le(),MK=DK(),{handleHDBError:vK,hdbErrors:lpe}=Ee(),{HTTP_STATUS_CODES:UK}=lpe,xK="cluster routes successfully set",BK="cluster routes successfully deleted";kK.exports={setRoutes:dpe,getRoutes:fpe,deleteRoutes:mpe};function upe(e){let t=ra.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=AO.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?ra.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ra.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:xK,set:i,skipped:s}}o(upe,"setRoutesNats");function dpe(e){let t=MK.setRoutesValidator(e);if(t)throw vK(t,t.message,UK.BAD_REQUEST,void 0,void 0,!0);if(rf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return upe(e);let r=[],n=[],s=rf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{FK(s,i)?n.push(i):(s.push(i),r.push(i))}),ra.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:xK,set:r,skipped:n}}o(dpe,"setRoutes");function FK(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(FK,"existsInArray");function fpe(){if(rf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ra.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return rf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(fpe,"getRoutes");function mpe(e){let t=MK.deleteRoutesValidator(e);if(t)throw vK(t,t.message,UK.BAD_REQUEST,void 0,void 0,!0);if(rf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return ppe(e);let r=[],n=[],s=rf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{FK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),ra.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:BK,deleted:r,skipped:n}}o(mpe,"deleteRoutes");function ppe(e){let t=ra.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=AO.isEmptyOrZeroLength(r)?null:r,ra.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=AO.isEmptyOrZeroLength(n)?null:n,ra.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:BK,deleted:s,skipped:i}}o(ppe,"deleteRoutesNats")});var GK=v((EBe,HK)=>{"use strict";var Ch=require("alasql"),Wl=require("recursive-iterator"),wi=Q(),hpe=ce(),Oh=(q(),M(W)),bO=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,_pe(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,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][Oh.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Epe(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!Oh.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new Ch.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function Epe(e){return e.filter(t=>t[Oh.PERMS_CRUD_ENUM.READ])}o(Epe,"filterReadRestrictedAttrs");function _pe(e,t,r,n,s){gpe(e,t,r,n,s)}o(_pe,"interpretAST");function Ph(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(Ph,"addSchemaTableToMap");function gpe(e,t,r,n,s){if(!e){wi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ch.yy.Insert?Rpe(e,t,r):e instanceof Ch.yy.Select?Spe(e,t,r,n,s):e instanceof Ch.yy.Update?Tpe(e,t,r):e instanceof Ch.yy.Delete?ype(e,t,r):wi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(gpe,"getRecordAttributesAST");function Spe(e,t,r,n,s){if(!e){wi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(hpe.isEmptyOrZeroLength(i)){wi.error("No schema specified");return}e.from.forEach(c=>{Ph(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Ph(c.table,t,r,n,s)});let a=new Wl(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{wi.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 Wl(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{wi.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Wl(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{wi.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new Wl(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{wi.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(Spe,"getSelectAttributes");function Tpe(e,t,r){if(!e){wi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Wl(e.columns),s=e.table.databaseid;Ph(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&IO(e.table.tableid,s,i.columnid,t,r)}o(Tpe,"getUpdateAttributes");function ype(e,t,r){if(!e){wi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Wl(e.where),s=e.table.databaseid;Ph(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&IO(e.table.tableid,s,i.columnid,t,r)}o(ype,"getDeleteAttributes");function Rpe(e,t,r){if(!e){wi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Wl(e.columns),s=e.into.databaseid;Ph(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&IO(e.into.tableid,s,i.columnid,t,r)}o(Rpe,"getInsertAttributes");function IO(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(IO,"pushAttribute");HK.exports=bO});var $K=v((gBe,qK)=>{"use strict";var DT=(q(),M(W)),MT=class{static{o(this,"BaseLicense")}constructor(t=0,r=DT.RAM_ALLOCATION_ENUM.DEFAULT,n=DT.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},wO=class extends MT{static{o(this,"ExtendedLicense")}constructor(t=0,r=DT.RAM_ALLOCATION_ENUM.DEFAULT,n=DT.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};qK.exports={BaseLicense:MT,ExtendedLicense:wO}});var of=v((TBe,jK)=>{"use strict";var sf=require("fs-extra"),vT=(Ug(),M(vg)),KK=require("crypto"),Ape=require("moment"),bpe=require("uuid").v4,gn=Q(),CO=require("path"),Ipe=ce(),zl=(q(),M(W)),{totalmem:VK}=require("os"),wpe=$K().ExtendedLicense,nf="invalid license key format",Npe="061183",Cpe="mofi25",Ope="aes-256-cbc",Ppe=16,Lpe=32,YK=le(),{resolvePath:WK}=Rt();YK.initSync();var NO;jK.exports={validateLicense:zK,generateFingerPrint:Mpe,licenseSearch:LO,getLicense:xpe,checkMemoryLimit:Bpe};function OO(){return CO.join(YK.getHdbBasePath(),zl.LICENSE_KEY_DIR_NAME,zl.LICENSE_FILE_NAME)}o(OO,"getLicenseDirPath");function Dpe(){let e=OO();return WK(CO.join(e,zl.LICENSE_FILE_NAME))}o(Dpe,"getLicenseFilePath");function PO(){let e=OO();return WK(CO.join(e,zl.REG_KEY_FILE_NAME))}o(PO,"getFingerPrintFilePath");async function Mpe(){let e=PO();try{return await sf.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await vpe();throw gn.error(`Error writing fingerprint file to ${e}`),gn.error(t),new Error("There was an error generating the fingerprint")}}o(Mpe,"generateFingerPrint");async function vpe(){let e=bpe(),t=vT.hash(e,vT.HASH_FUNCTION.MD5),r=PO();try{await sf.mkdirp(OO()),await sf.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw gn.error(`Error writing fingerprint file to ${r}`),gn.error(n),new Error("There was an error generating the fingerprint")}return t}o(vpe,"writeFingerprint");function zK(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:zl.RAM_ALLOCATION_ENUM.DEFAULT,version:zl.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return gn.error("empty license key passed to validate."),r;let n=PO(),s=!1;try{s=sf.statSync(n)}catch(i){gn.error(i)}if(s){let i;try{i=sf.readFileSync(n,"utf8")}catch{gn.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(Cpe),c=a[1];c=Buffer.concat([Buffer.from(c)],Ppe);let l=Buffer.concat([Buffer.from(i)],Lpe),u=KK.createDecipheriv(Ope,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(a[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let p=Upe(a[0],i);if(p)d=p;else throw r.valid_license=!1,r.valid_machine=!1,console.error(nf),gn.error(nf),new Error(nf)}let f;if(isNaN(d))try{f=JSON.parse(d),r.version=f.version,r.exp_date=f.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),f.ram_allocation&&(r.ram_allocation=f.ram_allocation)}catch{throw console.error(nf),gn.error(nf),new Error(nf)}else r.exp_date=d;r.exp_date<Ape().valueOf()&&(r.valid_date=!1),vT.validate(a[1],`${Npe}${i}${t}`,vT.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||gn.error("Invalid licence"),r}o(zK,"validateLicense");function Upe(e,t){try{let r=KK.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{gn.warn("Check old license failed")}}o(Upe,"checkOldLicense");function LO(){let e=new wpe,t=[];try{t=sf.readFileSync(Dpe(),"utf-8").split(`\r
|
|
20
|
-
`)}catch(r){r.code==="ENOENT"?gn.debug("no license file found"):gn.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(Ipe.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=zK(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){gn.error("There was an error parsing the license string."),gn.error(s),e.ram_allocation=zl.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return NO=e,e}o(LO,"licenseSearch");async function xpe(){return NO||await LO(),NO}o(xpe,"getLicense");function Bpe(){let e=LO().ram_allocation,t=process.constrainedMemory?.()||VK();if(t=Math.round(Math.min(t,VK())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}o(Bpe,"checkMemoryLimit")});var vO=v((RBe,ZK)=>{var UT=of(),QK=require("chalk"),ms=Q(),JK=require("prompt"),{promisify:Fpe}=require("util"),DO=(q(),M(W)),kpe=require("fs-extra"),Hpe=require("path"),Gpe=ce(),{packageJson:qpe}=yt(),XK=le();XK.initSync();var $pe=require("moment"),Vpe=Fpe(JK.get),Kpe=Hpe.join(XK.getHdbBasePath(),DO.LICENSE_KEY_DIR_NAME,DO.LICENSE_FILE_NAME,DO.LICENSE_FILE_NAME);ZK.exports={getFingerprint:Wpe,setLicense:Ype,parseLicense:MO,register:zpe,getRegistrationInfo:Qpe};async function Ype(e){if(e&&e.key&&e.company){try{ms.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await MO(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw ms.error(r),ms.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(Ype,"setLicense");async function Wpe(){let e={};try{e=await UT.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw ms.error(r),ms.error(t),new Error(r)}return e}o(Wpe,"getFingerprint");async function MO(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");ms.info("Validating license input...");let r=UT.validateLicense(e,t);if(ms.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(ms.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(ms.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{ms.info("writing license to disk"),await kpe.writeFile(Kpe,JSON.stringify({license_key:e,company:t}))}catch(n){throw ms.error("Failed to write License"),n}return"Registration successful."}o(MO,"parseLicense");async function zpe(){let e=await jpe();return MO(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(zpe,"register");async function jpe(){let e=await UT.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:QK.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:QK.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{JK.start()}catch(n){ms.error(n)}let r;try{r=await Vpe(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}o(jpe,"promptForRegistration");async function Qpe(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await UT.getLicense()}catch(r){throw ms.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Gpe.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=qpe.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=$pe.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(Qpe,"getRegistrationInfo")});var tY=v((bBe,eY)=>{"use strict";var Jpe=Nt(),UO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+Jpe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};eY.exports=UO});var sY=v((wBe,nY)=>{"use strict";var rY=Nt(),xO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+rY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+rY.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};nY.exports=xO});var oY=v((CBe,iY)=>{"use strict";var BO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};iY.exports=BO});var cY=v((PBe,aY)=>{"use strict";var Xpe=Nt(),FO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Xpe.SERVER_SUFFIX.ADMIN,this.password=r}};aY.exports=FO});var kT=v((DBe,dY)=>{"use strict";var jl=require("path"),Ql=require("fs-extra"),Zpe=tY(),ehe=sY(),the=oY(),rhe=cY(),kO=os(),cf=ce(),Gn=Rt(),BT=(q(),M(W)),Lh=Nt(),{CONFIG_PARAMS:ir}=BT,lf=Q(),Dh=le(),lY=Ji(),HO=pr(),nhe=ds(),af="clustering",she=1e4,uY=50;dY.exports={generateNatsConfig:ohe,removeNatsConfig:ahe,getHubConfigPath:ihe};function ihe(){let e=Dh.get(ir.ROOTPATH);return jl.join(e,af,Lh.NATS_CONFIG_FILES.HUB_SERVER)}o(ihe,"getHubConfigPath");async function ohe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Dh.get(ir.ROOTPATH);Ql.ensureDirSync(jl.join(r,"clustering","leaf")),Dh.initSync();let n=Gn.getConfigFromFile(ir.CLUSTERING_TLS_CERT_AUTH),s=Gn.getConfigFromFile(ir.CLUSTERING_TLS_PRIVATEKEY),i=Gn.getConfigFromFile(ir.CLUSTERING_TLS_CERTIFICATE);!await Ql.exists(i)&&!await Ql.exists(!n)&&await nhe.createNatsCerts();let a=jl.join(r,af,Lh.PID_FILES.HUB),c=jl.join(r,af,Lh.PID_FILES.LEAF),l=Gn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=jl.join(r,af,Lh.NATS_CONFIG_FILES.HUB_SERVER),d=jl.join(r,af,Lh.NATS_CONFIG_FILES.LEAF_SERVER),f=Gn.getConfigFromFile(ir.CLUSTERING_TLS_INSECURE),m=Gn.getConfigFromFile(ir.CLUSTERING_TLS_VERIFY),p=Gn.getConfigFromFile(ir.CLUSTERING_NODENAME),h=Gn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await HO.checkNATSServerInstalled()||FT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await kO.listUsers(),g=Gn.getConfigFromFile(ir.CLUSTERING_USER),A=await kO.getClusterUser();(cf.isEmpty(A)||A.active!==!0)&&FT(`Invalid cluster user '${cluster_username}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await xT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await xT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await xT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await xT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],T=[];for(let[X,Y]of E.entries())Y.role?.role===BT.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new rhe(Y.username,lY.decrypt(Y.hash))),T.push(new the(Y.username,lY.decrypt(Y.hash))));let w=[],{hub_routes:L}=Gn.getClusteringRoutes();if(!cf.isEmptyOrZeroLength(L))for(let X of L)w.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${X.host}:${X.port}`);let k=new Zpe(Gn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Gn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NAME),Gn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),w,S,T);n==null&&(delete k.tls.ca_file,delete k.leafnodes.tls.ca_file),t=cf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===BT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Ql.writeJson(u,k),lf.trace(`Hub server config written to ${u}`));let te=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,F=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,V=new ehe(Gn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[te],[F],S,T,i,s,n,f);n==null&&delete V.tls.ca_file,(t===void 0||t===BT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Ql.writeJson(d,V),lf.trace(`Leaf server config written to ${d}`))}o(ohe,"generateNatsConfig");async function xT(e){let t=Dh.get(e);return cf.isEmpty(t)&&FT(`port undefined for '${e}'`),await cf.isPortTaken(t)&&FT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(xT,"isPortAvailable");function FT(e){let t=`Error generating clustering config: ${e}`;lf.error(t),console.error(t),process.exit(1)}o(FT,"generateNatsConfigError");async function ahe(e){let{port:t,config_file:r}=HO.getServerConfig(e),{username:n,decrypt_hash:s}=await kO.getClusterUser(),i=0,a=2e3;for(;i<uY;){try{let d=await HO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){lf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=uY)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&lf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await cf.asyncSetTimeout(u)}let c="0".repeat(she),l=jl.join(Dh.get(ir.ROOTPATH),af,r);await Ql.writeFile(l,c),await Ql.remove(l),lf.notify(e,"started.")}o(ahe,"removeNatsConfig")});var $O={};be($O,{compactOnStart:()=>che,copyDb:()=>_Y});async function che(){dc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,GO.get)(x.ROOTPATH),t=new Map,r=ct();(0,qO.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,HT.join)(e,"backup",n+".mdb"),a=(0,HT.join)(e,qc,n+"-copy.mdb"),c=0;try{c=await fY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){dc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await _Y(n,a),console.log("Backing up",n,"to",i);try{await(0,Jl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{_d()}catch(n){dc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Jl.move)(i,s,{overwrite:!0}),await(0,Jl.remove)((0,HT.join)(e,qc,`${n}-copy.mdb-lock`));try{_d()}catch(n){dc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){dc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,qO.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Jl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw _d(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await fY(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
17
|
+
`,"")}o(p$,"runCommand");async function ple(){try{await Vce.access(WN)}catch{return!1}let e=await p$(`${WN} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Kce.eq(t,fle)}o(ple,"checkNATSServerInstalled");async function XN(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await f$.getClusterUser();if(xl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}Ri.trace("create nats connection called");let i=await nle({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ri.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&Ri.error("Error with Nats client connection, connection closed",a),i===En&&h$()}),i}o(XN,"createConnection");function h$(){En=void 0,Ml=void 0,vl=void 0,Ul=void 0}o(h$,"clearClientCache");async function hle(){En&&(await En.drain(),En=void 0,Ml=void 0,vl=void 0,Ul=void 0)}o(hle,"closeConnection");var En,Ul;async function eh(){return Ul||(Ul=XN(Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),En=await Ul),En||Ul}o(eh,"getConnection");async function th(){if(Ml)return Ml;xl(En)&&await eh();let{domain:e}=Ld(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(xl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ml=await En.jetstreamManager({domain:e,timeout:6e4}),Ml}o(th,"getJetStreamManager");async function E$(){if(vl)return vl;xl(En)&&await eh();let{domain:e}=Ld(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(xl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return vl=En.jetstream({domain:e,timeout:6e4}),vl}o(E$,"getJetStream");async function no(){let e=En||await eh(),t=Ml||await th(),r=vl||await E$();return{connection:e,jsm:t,js:r}}o(no,"getNATSReferences");async function Ele(e){let t=Gr.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await f$.getClusterUser(),s=await XN(t,r,n),i=JN(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=m$.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await US.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Ele,"getServerList");async function ZN(e,t){let{jsm:r}=await no(),n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:sle.File,retention:ile.Limits,subjects:t,discard:ole.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(ZN,"createLocalStream");async function _$(){let{jsm:e}=await no(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(_$,"listStreams");async function _le(e){let{jsm:t}=await no();await t.streams.delete(e)}o(_le,"deleteLocalStream");async function gle(e){let{connection:t}=await no(),r=[],n=JN(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(m$.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(gle,"listRemoteStreams");async function Sle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await no(),i=c$(),a={durable_name:i,ack_policy:jN.Explicit};t&&(a.deliver_policy=QN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=zN(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Zr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(Sle,"viewStream");async function*Tle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await no(),i=c$(),a={durable_name:i,ack_policy:jN.Explicit};t&&(a.deliver_policy=QN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=zN(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(Zr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Tle,"viewStreamIterator");async function yle(e,t,r,n){Ri.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=g$(n,r);let{js:s}=await no(),i=await BS(),a=`${e}.${i}`,c=await ule(()=>n instanceof Uint8Array?n:d$.encode(n));try{Ri.trace(`publishToStream publishing to subject: ${a}`),lle(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return T$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ri.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await ZN(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(yle,"publishToStream");function g$(e,t){t===void 0&&(t=cle());let r=Gr.get(et.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Zr.MSG_HEADERS.ORIGIN)&&r&&t.append(Zr.MSG_HEADERS.ORIGIN,r),t}o(g$,"addNatsMsgHeader");function Ld(e){e=e.toLowerCase();let t=Zp.join(Gr.get(et.CONFIG_PARAMS.ROOTPATH),dle);if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return xl(YN)&&(YN={port:Jp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Jp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zr.SERVER_SUFFIX.HUB,config_file:Zr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Zp.join(t,Zr.PID_FILES.HUB),hdbNatsPath:t}),YN;if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return xl(KN)&&(KN={port:Jp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Jp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zr.SERVER_SUFFIX.LEAF,config_file:Zr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Jp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zr.SERVER_SUFFIX.LEAF,pid_file_path:Zp.join(t,Zr.PID_FILES.LEAF),hdbNatsPath:t}),KN;Ri.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Ld,"getServerConfig");async function S$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:jN.Explicit,durable_name:r,deliver_policy:QN.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(S$,"createConsumer");async function Rle(e,t,r){await e.consumers.delete(t,r)}o(Rle,"removeConsumer");function Ale(e){return e.split(".")[1]}o(Ale,"extractServerName");async function ble(e,t,r=6e4,n=JN()){if(!US.isObject(t))throw new Error("data param must be an object");let s=d$.encode(t),{connection:i}=await no(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return zN(c.data)}o(ble,"request");function eC(e){return new Promise(async(t,r)=>{let n=jce(WN,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(eC,"reloadNATS");async function Ile(){let{pid_file_path:e}=Ld(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await eC(e)}o(Ile,"reloadNATSHub");async function wle(){let{pid_file_path:e}=Ld(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await eC(e)}o(wle,"reloadNATSLeaf");function Nle(e,t,r){let n;switch(e.code){case a$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case a$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(Nle,"requestErrorHandler");async function Cle(e,t){let r=t+Zr.SERVER_SUFFIX.LEAF,{connection:n}=await no(),{jsm:s}=await xle(r),{schema:i,table:a}=e,c=xS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await T$(async()=>{if(e.subscribe===!0)await S$(s,c,n.info.server_name,l);else try{await Rle(s,c,n.info.server_name)}catch(u){Ri.trace(u)}})}o(Cle,"updateRemoteConsumer");async function Ole(e,t,r,n){let s=xS.createNatsTableStreamName(e,t),i=r+Zr.SERVER_SUFFIX.LEAF,a={type:et.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!u$&&tle()<Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=VN();await c(a)}await Zce(a),n==="stop"&&await US.asyncSetTimeout(1e3)}o(Ole,"updateConsumerIterator");function T$(e){return Xce.writeTransaction(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(T$,"exclusiveLock");async function y$(e,t){let r=xS.createNatsTableStreamName(e,t),n=await BS(),s=Mle(e,t,n);await ZN(r,[s])}o(y$,"createLocalTableStream");async function Ple(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await y$(n,s)}}o(Ple,"createTableStreams");async function R$(e,t,r=void 0){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=xS.createNatsTableStreamName(e,t),{domain:s}=Ld(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await eh()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ri.warn(n);else throw n}}o(R$,"purgeTableStream");async function Lle(e,t){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await R$(e,t[r])}o(Lle,"purgeSchemaTableStreams");async function Dle(e){return(await th()).streams.info(e)}o(Dle,"getStreamInfo");function Mle(e,t,r){return`${Zr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(Mle,"createSubjectName");async function BS(){if(Xp)return Xp;if(Xp=(await th())?.nc?.info?.server_name,Xp===void 0)throw new Error("Unable to get jetstream manager server name");return Xp}o(BS,"getJsmServerName");async function vle(){let e=await th(),t=await BS(),r=await _$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=Ule(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");Ri.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(vle,"updateLocalStreams");function Ule(e){let{config:t}=e,r=!1,n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(Ule,"updateStreamLimits");async function xle(e){let t,r;try{t=await En.jetstream({domain:e}),r=await En.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ri.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(xle,"connectToRemoteJS")});function tC(e){let t=e.get(FS),r=t?(0,Dd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=it(),s=!1;r.nodeName=it();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:nh(e)??1,nodes:[]})})}i[n]=0,e.putSync(FS,(0,Dd.pack)(r))}return r}function rh(e){return tC(e).remoteNameToId}function I$(e,t){let r=tC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(FS,(0,Dd.pack)(r)),s}function kS(e,t){let r=tC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(FS,(0,Dd.pack)(r))}return b$.trace?.("The remote node name map",e,n,s),s}var b$,Dd,FS,rC=ie(()=>{b$=I(Os());us();Dd=require("msgpackr"),FS=Symbol.for("remote-ids");o(tC,"getIdMappingRecord");o(rh,"exportIdMapping");o(I$,"remoteToLocalNodeId");o(kS,"getIdOfRemoteNode")});var nC={};be(nC,{commitsAwaitingReplication:()=>vd,getHDBNodeTable:()=>Wt,getReplicationSharedStatus:()=>Ud,iterateRoutes:()=>ih,shouldReplicateToNode:()=>sh,subscribeToNodeUpdates:()=>xd});function Wt(){return w$||(w$=Je({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Ud(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function xd(e){Wt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;P$.debug?.("adding node",n,"on node",it()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==it()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Wt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function sh(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Wt().primaryStore.get(it())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Ble(){xd(e=>{Za({},(t,r)=>{let n=e.name,s=N$.get(n);if(s||N$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=Ud(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of vd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*ih(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=Md.default.get(x.REPLICATION_SECUREPORT)??(!Md.default.get(x.REPLICATION_PORT)&&Md.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Md.default.get(x.REPLICATION_PORT)||Md.default.get(x.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){C$.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var C$,O$,Md,P$,w$,N$,vd,Bl=ie(()=>{Pe();us();ym();C$=require("worker_threads"),O$=I(Ee()),Md=I(le());q();P$=I(Os());server.nodes=[];o(Wt,"getHDBNodeTable");o(Ud,"getReplicationSharedStatus");o(xd,"subscribeToNodeUpdates");o(sh,"shouldReplicateToNode");N$=new Map;TU((e,t,r)=>{if(r>server.nodes.length)throw new O$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);vd||(vd=new Map,Ble());let n=vd.get(e);return n||(n=[],vd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(Ble,"startSubscriptionToReplications");o(ih,"iterateRoutes")});var U$={};be(U$,{connectedToNode:()=>Fl,disconnectedFromNode:()=>Fd,ensureNode:()=>zo,requestClusterStatus:()=>v$,startOnMainThread:()=>iC});async function iC(e){let t=0,r=ct();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){HS.set(i,nh(l.auditStore));break}}}io.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=it();function c(){let l=Wt().primaryStore.get(a);if(l!==null){let u=e.url??ec();if(l===void 0||l.url!==u||l.shard!==e.shard)return zo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Wt().primaryStore.get(a)&&c();for(let l of ih(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}xd(s)});let n;function s(i,a=i?.name){let c=it()&&a===it()||ec()&&i?.url===ec();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Wt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ut.trace("Setting up node replication for",i),!i){for(let[f,m]of so){let p;for(let[h,{worker:E,nodes:g}]of m){let A=g[0];if(A&&A.name==a){p=!0;for(let[S,{worker:T}]of m)m.delete(S),ut.warn("Node was deleted, unsubscribing from node",a,S,f),T?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){so.get(f).iterator.remove(),so.delete(f);return}}return}if(c)return;if(!i.url){ut.info(`Node ${i.name} is missing url`);return}let l=so.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ut.info(`Added node ${i.name} at ${i.url} for process ${it()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Bd)if(i.url===m.url){Bd.delete(f);break}Bd.set(i.name,i)}let u=ct();if(l||(l=new Map,so.set(i.url,l)),l.iterator=Za(e,(f,m,p)=>{p?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ut.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ut.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];HS.has(f)&&(E.push({replicateByDefault:m,name:it(),startTime:HS.get(f),endTime:Date.now(),replicates:!0}),HS.delete(f));let g=sh(i,f),A=io.workers.filter(S=>S.name==="http");if(p?(h=p.worker,p.nodes=E):g&&(t=t%A.length,h=A[t++],l.set(f,{worker:h,nodes:E,url:i.url}),h?.on("exit",()=>{l.get(f)?.worker===h&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let S={type:"subscribe-to-node",database:f,nodes:E};h?h.postMessage(S):oh(S)},Fle);else{ut.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Wt().primaryStore.get(it())?.replicates}),Wt().primaryStore.get(it())?.replicates||(n=!1,ut.info("Disabling replication, this node name",it(),Wt().primaryStore.get(it()),f));let S={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};h?h.postMessage(S):qS(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Fd=o(function(i){try{ut.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Bd.keys()),c=a.sort(),l=c.indexOf(i.name||Ai(i.url));if(l===-1){ut.warn("Disconnected node not found in node map",i.name,a);return}let u=so.get(i.url),d=u?.get(i.database);if(!d){ut.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||sC.default.get(x.REPLICATION_FAILOVER)===!1)return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,p=(l+1)%c.length;for(;l!==p;){let h=c[p],E=Bd.get(h);u=so.get(E.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){p=(p+1)%c.length;continue}let{worker:A,nodes:S}=g,T=!1;for(let w of d.nodes){if(S.some(L=>L.name===w.name)){ut.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}w.endTime<Date.now()||(S.push(w),T=!0)}if(d.nodes=[d.nodes[0]],!T){ut.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}ut.info(`Failing over ${i.database} from ${i.name} to ${h}`),A?A.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):oh({database:i.database,nodes:S});return}ut.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ut.error("Error failing over node",a)}},"disconnectedFromNode"),Fl=o(function(i){let a=so.get(i.url),c=a?.get(i.database);if(!c){ut.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ut.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ut.debug("Connected node is not named yet",i.database,c);return}c.nodes=[l];let u=!1;for(let d of so.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:p,connected:h}=f;if(p)if(h===!1&&p[0].shard===l.shard)u=!0,c.nodes.push(p[0]);else{let E=p.filter(g=>g&&g.name!==l.name);E.length<p.length&&(f.nodes=E,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:p}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,io.onMessageByType)("disconnected-from-node",Fd),(0,io.onMessageByType)("connected-to-node",Fl),(0,io.onMessageByType)("request-cluster-status",v$)}function v$(e,t){let r=[];for(let[n,s]of Bd)try{let i=so.get(s.url);ut.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=D$(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ut.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function zo(e,t){let r=Wt();e=e??Ai(t.url),t.name=e;try{if(t.ca){let s=new M$.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ut.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ut.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!sC.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=D$(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ut.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var io,GS,ut,L$,sC,M$,D$,Fle,so,Fd,Fl,Bd,HS,ah=ie(()=>{Pe();io=I(nt());us();GS=require("worker_threads");Bl();ut=I(Q()),L$=I(require("lodash")),sC=I(le());q();M$=require("crypto"),{cloneDeep:D$}=L$.default,Fle=200,so=new Map,Bd=new Map,HS=new Map;o(iC,"startOnMainThread");o(v$,"requestClusterStatus");GS.parentPort&&(Fd=o(e=>{GS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Fl=o(e=>{GS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,io.onMessageByType)("subscribe-to-node",e=>{oh(e)}),(0,io.onMessageByType)("unsubscribe-from-node",e=>{qS(e)}));o(zo,"ensureNode")});var fs=v(zt=>{"use strict";var hr=require("path"),{watch:kle}=require("chokidar"),Gn=require("fs-extra"),kd=require("node-forge"),G$=require("net"),{generateKeyPair:oC,X509Certificate:jo,createPrivateKey:q$}=require("crypto"),Hle=require("util");oC=Hle.promisify(oC);var Ct=kd.pki,bi=require("joi"),{v4:$$}=require("uuid"),{validateBySchema:uC}=ft(),{forComponent:Gle}=Q(),ds=le(),qs=(q(),M(W)),{CONFIG_PARAMS:Hl}=qs,Ii=wA(),{ClientError:tc}=Ee(),VS=require("node:tls"),{relative:V$,join:qle}=require("node:path"),{CERTIFICATE_VALUES:x$}=Ii,$le=$c(),aC=Rt(),{table:Vle,getDatabases:Kle,databases:$S}=(Pe(),M(pt)),{getJWTRSAKeys:B$}=(Nd(),M(zp)),je=Gle("tls").conditional;zt.generateKeys=mC;zt.updateConfigCert=X$;zt.createCsr=Xle;zt.signCertificate=Zle;zt.setCertTable=Hd;zt.loadCertificates=j$;zt.reviewSelfSignedCert=hC;zt.createTLSSelector=eV;zt.listCertificates=rV;zt.addCertificate=iue;zt.removeCertificate=aue;zt.createNatsCerts=rue;zt.generateCertsKeys=tue;zt.getReplicationCert=lh;zt.getReplicationCertAuth=Jle;zt.renewSelfSigned=nue;zt.hostnamesFromCert=_C;zt.getKey=cue;zt.getHostnamesFromCertificate=lue;zt.getPrimaryHostName=EC;var{urlToNodeName:K$,getThisNodeUrl:Yle,getThisNodeName:YS,clearThisNodeName:Wle}=(us(),M(Qo)),{readFileSync:zle,statSync:Y$}=require("node:fs"),oxe=le(),{getTicketKeys:jle,onMessageFromWorkers:Qle}=nt(),{isMainThread:W$}=require("worker_threads"),{TLSSocket:z$,createSecureContext:axe}=require("node:tls"),dC=3650,ch=["127.0.0.1","localhost","::1"],fC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Qle(async e=>{e.type===qs.ITC_EVENT_TYPES.RESTART&&(ds.initSync(!0),await hC())});var en;function nc(){return en||(en=Kle().system.hdb_certificate,en||(en=Vle({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__"}]}))),en}o(nc,"getCertTable");async function lh(){let e=eV("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(YS());if(!r)return;let n=new jo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(lh,"getReplicationCert");async function Jle(){nc();let e=(await lh()).options.cert,r=new jo(e).issuer.match(/CN=(.*)/)?.[1];return en.get(r)}o(Jle,"getReplicationCertAuth");var F$,rc=new Map;function j$(){if(F$)return;F$=!0;let e=[{configKey:Hl.TLS},{configKey:Hl.OPERATIONSAPI_TLS}];nc();let t=hr.dirname(aC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=aC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&V$(qle(t,"keys"),a);c&&k$(a,l=>{rc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&W$){let d;k$(u,f=>{if(x$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=Z$(u),h=new jo(p),E;try{E=EC(h)}catch(T){je.error?.("error extracting host name from certificate",T);return}if(E==null){je.error?.("No host name found on certificate");return}if(h.checkIssued(new jo(x$.cert)))return;let g=en.primaryStore.get(E),A=Y$(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&A<=S){A<S&&je.info?.(`Certificate ${E} at ${u} is older (${new Date(A)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=en.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:A,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(j$,"loadCertificates");function k$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&W$&&je.warn?.(`Reloading ${r}:`,i),n=c,t(Z$(i)))}catch(c){je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Gn.existsSync(e)?s(e,Y$(e)):je.error?.(`${r} file not found:`,e),kle(e,{persistent:!1}).on("change",s)}o(k$,"loadAndWatch");function cC(){let e=Yle();if(e==null){let t=ch[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return K$(e)}o(cC,"getHost");function KS(){let e=YS();if(e==null){let t=ch[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(KS,"getCommonName");async function Xle(){let e=await lh(),t=Ct.certificateFromPem(e.options.cert),r=Ct.privateKeyFromPem(e.options.key);je.info?.("Creating CSR with cert named:",e.name);let n=Ct.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:KS()},...fC];je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:Q$()}];return je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),kd.pki.certificationRequestToPem(n)}o(Xle,"createCsr");function Q$(){let e=ch.includes(KS())?ch:[...ch,KS()];return e.includes(cC())||e.push(cC()),[{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=>G$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(Q$,"certExtensions");async function Zle(e){let t={},r=hr.join(ds.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;nc();for await(let d of en.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(rc.has(d.private_key_name)){n=rc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Gn.exists(hr.join(r,d.private_key_name))){n=Gn.readFile(hr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await lC();s=d.ca,n=d.private_key}n=Ct.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Ct.certificateFromPem(s.certificate);je.info?.("Signing CSR with cert named",s.name);let a=Ct.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=kd.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+dC),je.info?.("sign cert setting validity:",c.validity),je.info?.("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,kd.md.sha256.create()),t.certificate=Ct.certificateToPem(c)}else je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(Zle,"signCertificate");async function eue(e,t){await Hd({name:YS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Hd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Ct.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(eue,"createCertificateTable");async function Hd(e){let t;try{t=new jo(e.certificate)}catch(r){je.error?.(`Failed to parse certificate for ${e.name}:`,r.message),je.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},nc(),await en.patch(e)}o(Hd,"setCertTable");async function mC(){let e=await oC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Ct.publicKeyFromPem(e.publicKey),privateKey:Ct.privateKeyFromPem(e.privateKey)}}o(mC,"generateKeys");async function pC(e,t,r){let n=Ct.createCertificate();if(!t){let a=await lh();t=Ct.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+dC);let i=[{name:"commonName",value:KS()},...fC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(Q$()),n.sign(e,kd.md.sha256.create()),Ct.certificateToPem(n)}o(pC,"generateCertificates");async function lC(){let e=await rV(),t;for(let r of e){if(!r.is_authority)continue;let n=await tV(r.private_key_name);if(r.private_key_name&&n&&new jo(r.certificate).checkPrivateKey(q$(n))){je.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;je.trace?.("No CA found with matching private key")}o(lC,"getCertAuthority");async function J$(e,t,r=!0){let n=Ct.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+dC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${ds.get(Hl.REPLICATION_HOSTNAME)??K$(ds.get(Hl.REPLICATION_URL))??$$().split("-")[0]}`},...fC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,kd.md.sha256.create());let a=hr.join(ds.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),c=hr.join(a,Ii.PRIVATEKEY_PEM_NAME);return r&&await Gn.writeFile(c,Ct.privateKeyToPem(e)),n}o(J$,"generateCertAuthority");async function tue(){let{privateKey:e,publicKey:t}=await mC(),r=await J$(e,t),n=await pC(e,t,r);await eue(n,r),X$()}o(tue,"generateCertsKeys");async function rue(){let e=await pC(Ct.privateKeyFromPem(Ii.CERTIFICATE_VALUES.key),void 0,Ct.certificateFromPem(Ii.CERTIFICATE_VALUES.cert)),t=hr.join(ds.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),r=hr.join(t,Ii.NATS_CERTIFICATE_PEM_NAME);await Gn.exists(r)||await Gn.writeFile(r,e);let n=hr.join(t,Ii.NATS_CA_PEM_NAME);await Gn.exists(n)||await Gn.writeFile(n,Ii.CERTIFICATE_VALUES.cert)}o(rue,"createNatsCerts");async function nue(){nc();for await(let e of en.search([{attribute:"is_self_signed",value:!0}]))await en.delete(e.name);await hC()}o(nue,"renewSelfSigned");async function hC(){Wle(),await j$(),nc();let e=await lC();if(!e){je.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Ct.privateKeyFromPem(Gn.readFileSync(u)),keyPath:u}}catch(d){return je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=ds.get(Hl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=ds.get(Hl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=hr.join(ds.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),c=V$(a,i);s||(je.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await mC(),Gn.existsSync(hr.join(a,Ii.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${$$().split("-")[0]}.pem`),await Gn.writeFile(hr.join(a,c),Ct.privateKeyToPem(s)));let l=await J$(s,Ct.setRsaPublicKey(s.n,s.e),!1);await Hd({name:l.subject.getField("CN").value,uses:["https"],certificate:Ct.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await lh()){let r=YS();je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await lC();let n=Ct.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await pC(Ct.privateKeyFromPem(e.private_key),s,n);await Hd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(hC,"reviewSelfSignedCert");function X$(){let e=$le(Object.keys(qs.CONFIG_PARAM_MAP),!0),t=hr.join(ds.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),r=hr.join(t,Ii.PRIVATEKEY_PEM_NAME),n=hr.join(t,Ii.NATS_CERTIFICATE_PEM_NAME),s=hr.join(t,Ii.NATS_CA_PEM_NAME),i=qs.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),aC.updateConfigValue(void 0,void 0,a,!1,!0)}o(X$,"updateConfigCert");function Z$(e){return e.startsWith("-----BEGIN")?e:zle(e,"utf8")}o(Z$,"readPEM");var H$=VS.createSecureContext;VS.createSecureContext=function(e){if(!e.cert||!e.key)return H$(e);let t={...e};delete t.key,delete t.cert;let r=H$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var sue=z$.prototype._init;z$.prototype._init=function(e,t){sue.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var kl=new Map;function eV(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),kl.clear();let d=0;if($S===void 0){c();return}for await(let f of $S.system.hdb_certificate.search([])){let m=f.certificate,p=new jo(m);f.is_authority&&(p.asString=m,kl.set(p.subject,m))}for await(let f of $S.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await tV(f.private_key_name),E=f.certificate,g=new jo(E);if(kl.has(g.issuer)&&(E+=`
|
|
18
|
+
`+kl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let A={ciphers:f.ciphers,ticketKeys:jle(),availableCAs:kl,ca:t&&Array.from(kl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(A.sessionIdContext=a.sessionIdContext);let S=VS.createSecureContext(A);S.name=f.name,S.options=A,S.quality=p,S.certificateAuthorities=Array.from(kl),S.certStart=E.toString().slice(0,100);let T=f.hostnames??_C(g);Array.isArray(T)||(T=[T]);let w;for(let L of T)if(L){L[0]==="*"&&(s=!0,L=L.slice(1)),L===cC()&&(p+=2),G$.isIP(L)&&(w=!0);let k=r.get(L)?.quality??0;p>k&&r.set(L,S)}else je.error?.("No hostname found for certificate at",VS.certificate);je.trace?.("Adding TLS",S.name,"for",a.ports||"client","cert named",f.name,"hostnames",T,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=S,d=p,a&&(a.defaultContext=S))}catch(m){je.error?.("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),$S?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){je.info?.("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return je.debug?.("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?je.debug?.("No certificate found to match",a,"using the default certificate"):je.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):je.info?.("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(eV,"createTLSSelector");async function tV(e){let t=rc.get(e);return!t&&e?await Gn.readFile(hr.join(ds.get(Hl.ROOTPATH),qs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(tV,"getPrivateKeyByName");async function rV(){nc();let e=[];for await(let t of en.search([]))e.push(t);return e}o(rV,"listCertificates");async function iue(e){let t=uC(e,bi.object({name:bi.string().required(),certificate:bi.string().required(),is_authority:bi.boolean().required(),private_key:bi.string(),hosts:bi.array(),uses:bi.array()}));if(t)throw new tc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new jo(n),c=!1,l=!1,u;for(let[p,h]of rc)!s&&!c&&a.checkPrivateKey(q$(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new tc("A suitable private key was not found for this certificate");let d;if(!r){try{d=EC(a)}catch(p){je.error?.(p)}if(d==null)throw new tc("Error extracting certificate host name, please provide a name parameter")}let f=oue(r??d);s&&!c&&!l&&(await Gn.writeFile(hr.join(ds.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME,f+".pem"),s),rc.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Hd(m),"Successfully added certificate: "+f}o(iue,"addCertificate");function oue(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(oue,"sanitizeName");async function aue(e){let t=uC(e,bi.object({name:bi.string().required()}));if(t)throw new tc(t.message);let{name:r}=e;nc();let n=await en.get(r);if(!n)throw new tc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await en.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(je.info?.("Removing private key named",s),await Gn.remove(hr.join(ds.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME,s)))}return await en.delete(r),"Successfully removed "+r}o(aue,"removeCertificate");function EC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||_C(e)[0]}o(EC,"getPrimaryHostName");function _C(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(_C,"hostnamesFromCert");async function cue(e){if(e.bypass_auth!==!0)throw new tc("Unauthorized","401");let t=uC(e,bi.object({name:bi.string().required()}));if(t)throw new tc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await B$()).privateKey;if(r===".jwtPublic")return(await B$()).publicKey;if(rc.get(r))return rc.get(e.name);throw new tc("Key not found")}o(cue,"getKey");function lue(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(lue,"getHostnamesFromCertificate")});var wV={};be(wV,{CONFIRMATION_STATUS_POSITION:()=>AV,LATENCY_POSITION:()=>ZS,NodeReplicationConnection:()=>qd,OPERATION_REQUEST:()=>RC,RECEIVED_TIME_POSITION:()=>bC,RECEIVED_VERSION_POSITION:()=>AC,RECEIVING_STATUS_POSITION:()=>IC,RECEIVING_STATUS_RECEIVING:()=>IV,RECEIVING_STATUS_WAITING:()=>bV,SENDING_TIME_POSITION:()=>uh,createWebSocket:()=>eT,databaseSubscriptions:()=>ic,replicateOverWS:()=>dh,tableUpdateListeners:()=>NC});async function eT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=it(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!TC){let l=(0,gV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),TC=u.secureContexts}if(i=TC.get(s),i&&ue.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,TV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(XS?.caCount!==Jo.size&&(XS=SV.createSecureContext({...i.options,ca:[...Jo,...i.options.availableCAs.values()]}),XS.caCount=Jo.size),c.secureContext=XS),new hV.WebSocket(e,"harperdb-replication-v1",c)}function dh(e,t,r){let n=t.port||t.securePort,s=Gl.pid%1e3+"-"+EV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ue.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||ic,f,m,p=!1,h=t.subscription;h?.then&&h.then(y=>{h=y,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&ct()[u],g,A=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let T,w,L,k,te,F,V,X=6e4,Y,de=0,ne=0,ae=0,ye=pV.default.get(x.REPLICATION_BLOBTIMEOUT)??12e4,Ae=new Map,He=[],Ge=0,Ar;if(t.url){let y=o(()=>{te&&ne===e._socket?.bytesRead&&ae===e._socket?.bytesWritten?e.terminate():(te=performance.now(),e.ping(),ne=e._socket?.bytesRead,ae=e._socket?.bytesWritten)},"sendPing");L=setInterval(y,fV).unref(),y()}else er();e._socket?.setMaxListeners(200);function er(){clearTimeout(k),ne=e._socket?.bytesRead,ae=e._socket?.bytesWritten,k=setTimeout(()=>{ne===e._socket?.bytesRead&&ae===e._socket?.bytesWritten&&(ue.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},fV*2).unref()}o(er,"resetPingTimer");function Gt(){if(!(!g||!u))return m||(m=Ud(f,u,g)),m}o(Gt,"getSharedStatus"),u&&wa(u);let tr,Wf,Uc=[],qt=[],zf,jf=[],KE=[],YE=[],lA=150,Qf=25,De=0,uA=0,Ao=!1,Is,br,ws,dA;e.on("message",xc);async function xc(y){if(r=await r,!r){ue.error?.(s,"No authorization provided"),Vr(1008,"Unauthorized");return}Bc(y),e.off("message",xc),e.on("message",Bc)}o(xc,"onWSMessageWhenAuthorized");function Bc(y){de=performance.now();try{let N=y.dataView=new Zc(y.buffer,y.byteOffset,y.byteLength);if(y[0]>127){let C=(0,ot.decode)(y),[H,U,J]=C;switch(H){case sV:{if(U){if(g){if(g!==U){ue.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${U}, disconnecting`),e.send((0,ot.encode)([Gd])),Vr(1008,"Node name mismatch");return}}else if(g=U,t.connection?.tentativeNode){let z=t.connection.tentativeNode;z.name=g,t.connection.tentativeNode=null,zo(g,z)}if(t.connection&&(t.connection.nodeName=g),ue.debug?.(s,"received node name:",g,"db:",u??C[2]),!u)try{wa(u=C[2]),u==="system"&&(tr=Za(t,(z,oe)=>{Ia(oe)&&Zf(oe)}),e.on("close",()=>{tr?.remove()}))}catch(z){ue.warn?.(s,"Error setting database",z),e.send((0,ot.encode)([Gd])),Vr(1008,z.message);return}ba()}break}case uV:{ue.debug?.(s,"Received table definitions for",U.map(z=>z.table));for(let z of U){let oe=C[2];z.database=oe;let se;if(Ia(oe)){if(u==="system")ve[oe]?.[z.table]||(se=D(z,ve[oe]?.[z.table]));else{if(oe!=="data"&&!ve[oe]){ue.warn?.("Database not found",oe);return}se=D(z,ve[oe]?.[z.table])}f||(f=se?.auditStore),E||(E=ct()?.[oe])}}break}case Gd:Vr();break;case RC:try{let z=r?.replicates||r?.subscribers||r?.name;ue.debug?.("Received operation request",U,"from",g),server.operation(U,{user:r},!z).then(oe=>{ue.debug?.("Requested request from finished",g,oe),Array.isArray(oe)&&(oe={results:oe}),oe.requestId=U.requestId,e.send((0,ot.encode)([zS,oe]))},oe=>{ue.debug?.("Failed requested operation from",g,oe),e.send((0,ot.encode)([zS,{requestId:U.requestId,error:gC(oe)}]))})}catch(z){e.send((0,ot.encode)([zS,{requestId:U.requestId,error:gC(z)}]))}break;case zS:let{resolve:j,reject:G}=A.get(U.requestId);ue.debug?.("Received completed operation request",g,U),U.error?G(new Error(U.error)):j(U),A.delete(U.requestId);break;case SC:let Se=C[3];if(!E){u?ue.error?.(s,"No database found for",u):ue.error?.(s,"Database name never received"),Vr();return}let me=E[Se];me=D({table:Se,database:u,attributes:U.attributes,schemaDefined:U.schemaDefined},me),Uc[J]={name:Se,decoder:new ot.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:U.typedStructs,structures:U.structures}),getEntry(z){return me.primaryStore.getEntry(z)},rootStore:me.primaryStore.rootStore};break;case iV:dA=f?I$(U,f):new Map,zf=C[2],ue.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${zf}`);break;case oV:let Oe=J;YE[Oe]=U;break;case lV:Gt()[AV]=U,ue.trace?.(s,"received and broadcasting committed update",U),Gt().buffer.notify();break;case cV:T=U,h.send({type:"end_txn",localTime:T,remoteNodeIds:S});break;case jS:{let z=C[1],{fileId:oe,size:se,finished:pe,error:we}=z,fe=Ae.get(oe);ue.debug?.("Received blob",oe,"has stream",!!fe,"connectedToBlob",!!fe?.connectedToBlob,"length",C[2].length,"finished",pe),fe||(fe=new yC.PassThrough,fe.expectedSize=se,Ae.set(oe,fe)),fe.lastChunk=Date.now();let Me=C[2];Xe(Me.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{pe?(we?(fe.on("error",()=>{}),fe.destroy(new Error("Blob error: "+we+" for record "+(fe.recordId??"unknown")+" from "+remote_node_name))):fe.end(Me),fe.connectedToBlob&&Ae.delete(oe)):fe.write(Me)}catch(at){ue.error?.(`Error receiving blob for ${fe.recordId} from ${g} and streaming to storage`,at),Ae.delete(oe)}break}case aV:{let z=U,oe;try{let se=C[3],pe=qt[J]||(qt[J]=E[C[4]]);if(!pe)return ue.warn?.("Unknown table id trying to handle record request",J);let we=pe.primaryStore.getBinaryFast(Symbol.for("structures")),fe=we?.length??0;if(fe>0&&fe!==uA){uA=fe;let at=(0,ot.decode)(we);e.send((0,ot.encode)([SC,{typedStructs:at.typed,structures:at.named},J,pe.tableName]))}let Me=pe.primaryStore.getBinaryFast(se);if(Me){let at=pe.primaryStore.decoder.decode(Me,{valueAsBuffer:!0}),Qe=lt||{};Qe.version=(0,yV.getLastVersion)(),lt&<[xu]&Mn&&(at=Buffer.from(at),Dm(()=>pe.primaryStore.decoder.decode(Me),Mr=>Fc(Mr,se),pe.primaryStore.rootStore)),oe=(0,ot.encode)([WS,z,{value:at,expiresAt:Qe.expiresAt,version:Qe.version,residencyId:Qe.residencyId,nodeId:Qe.nodeId,user:Qe.user}])}else oe=(0,ot.encode)([WS,z])}catch(se){oe=(0,ot.encode)([WS,z,{error:se.message}])}e.send(oe);break}case WS:{let{resolve:z,reject:oe,tableId:se,key:pe}=A.get(C[1]),we=C[2];if(we?.error)oe(new Error(we.error));else if(we){let fe;D_(()=>{let Me=Uc[se].decoder.decode(we.value);we.value=Me,we.key=pe,z(we)||fe&&setTimeout(()=>fe.forEach(O_),6e4).unref()},Me=>{let at=Jf(Me,pe);return fe||(fe=[]),fe.push(at),at})}else z();A.delete(C[1]);break}case nV:{ws=U;let z,oe,se=!1;if(h){if(u!==h.databaseName&&!h.then){ue.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(ue.debug?.(s,"received subscription request for",u,"at",ws),!h){let Ne;h=new Promise($t=>{ue.debug?.("Waiting for subscription to database "+u),Ne=$t}),h.ready=Ne,ic.set(u,h)}if(r.name)oe=Wt().subscribe(r.name),oe.then(async Ne=>{z=Ne;for await(let $t of z){let Mt=$t.value;if(!(Mt?.replicates===!0||Mt?.replicates?.receives||Mt?.subscriptions?.some(vr=>(vr.database||vr.schema)===u&&vr.publish!==!1))){se=!0,e.send((0,ot.encode)([Gd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}}},Ne=>{ue.error?.(s,"Error subscribing to HDB nodes",Ne)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ot.encode)([Gd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}if(br&&(ue.debug?.(s,"stopping previous subscription",u),br.emit("close")),ws.length===0)return;let pe=ws[0],we=o(Ne=>{if(Ne&&(pe.replicateByDefault?!pe.tables.includes(Ne.tableName):pe.tables.includes(Ne.tableName)))return{table:Ne}},"tableToTableEntry"),fe={txnTime:0},Me,at,Qe=1/0,Mr,Kr=o((Ne,$t)=>{if(Ne.type==="end_txn"){fe.txnTime&&(a[i]!==66&&ue.error?.("Invalid encoding of message"),K(9),K(q_),R(Mr=$t),zE()),i=c,fe.txnTime=0;return}let Mt=Ne.nodeId,vr=Ne.tableId,vt=at[vr];if(!vt&&(vt=at[vr]=we(h.tableById[vr]),!vt))return ue.debug?.("Not subscribed to table",vr);let Ns=vt.table,Ut=Ns.primaryStore,oi=Ut.encoder;(Ne.extendedType&Q_||!oi.typedStructs)&&(oi._mergeStructures(oi.getStructures()),oi.typedStructs&&(oi.lastTypedStructuresLength=oi.typedStructs.length));let Ru=Me[Mt];if(!(Ru&&Ru.startTime<$t&&(!Ru.endTime||Ru.endTime>$t)))return JS&&ue.trace?.(s,"skipping replication update",Ne.recordId,"to:",g,"from:",Mt,"subscribed:",Me),JM();JS&&ue.trace?.(s,"sending replication update",Ne.recordId,"to:",g,"from:",Mt,"subscribed:",Me);let fA=Ne.version;fe.txnTime!==fA&&(fe.txnTime&&(JS&&ue.trace?.(s,"new txn time, sending queued txn",fe.txnTime),a[i]!==66&&ue.error?.("Invalid encoding of message"),zE()),fe.txnTime=fA,i=c,R(fA));let Gc=Ne.residencyId,mA=Xf(Gc,Ns),jE;if(mA&&!mA.includes(g)){let ai=Xf(Ne.previousResidencyId,Ns);if(ai&&!ai.includes(g)&&(Ne.type==="put"||Ne.type==="patch")||Ns.getResidencyById)return JM();let em=Ne.recordId;ue.trace?.(s,"sending invalidation",em,g,"from",Mt);let tm=0;Gc&&(tm|=el),Ne.previousResidencyId&&(tm|=tl);let EA,QE=null;for(let XM in Ns.indices){if(!QE){if(EA=Ne.getValue(Ut,!0),!EA)break;QE={}}QE[XM]=EA[XM]}jE=rl(Ne.version,vr,em,null,Mt,Ne.user,Ne.type==="put"||Ne.type==="patch"?"invalidate":Ne.type,oi.encode(QE),tm,Gc,Ne.previousResidencyId,Ne.expiresAt)}function JM(){return ue.trace?.(s,"skipping audit record",Ne.recordId),F||(F=setTimeout(()=>{F=null,(Mr||0)+dV/2<Qe&&(JS&&ue.trace?.(s,"sending skipped sequence update",Qe),e.send((0,ot.encode)([cV,Qe])))},dV).unref()),new Promise(setImmediate)}o(JM,"skipAuditRecord");let pA=oi.typedStructs,hA=oi.structures;if((pA?.length!=vt.typed_length||hA?.length!=vt.structure_length)&&(vt.typed_length=pA?.length,vt.structure_length=hA.length,ue.debug?.(s,"send table struct",vt.typed_length,vt.structure_length),vt.sentName||(vt.sentName=!0),e.send((0,ot.encode)([SC,{typedStructs:pA,structures:hA,attributes:Ns.attributes,schemaDefined:Ns.schemaDefined},vr,vt.table.tableName]))),Gc&&!KE[Gc]&&(e.send((0,ot.encode)([oV,mA,Gc])),KE[Gc]=!0),jE)K(jE.length),_(jE);else{let ai=Ne.encoded;Ne.extendedType&Mn&&Dm(()=>Ne.getValue(Ut),tm=>Fc(tm,Ne.recordId),Ut.rootStore);let em=ai[0]===66?8:0;K(ai.length-em),_(ai,em),ue.trace?.("wrote record",Ne.recordId,"length:",ai.length)}return e._socket.writableNeedDrain?new Promise(ai=>{ue.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",ai)}):Ge>Qf?new Promise(ai=>{Ar=ai}):new Promise(setImmediate)},"sendAuditRecord"),zE=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ue.debug?.(s,"Sent message, size:",c-i),Xe(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ue.debug?.(s,"skipping empty transaction")},"sendQueuedData");br=new wC.EventEmitter,br.once("close",()=>{se=!0,z?.end()});for(let{startTime:Ne}of ws)Ne<Qe&&(Qe=Ne);(oe||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,at=h.tableById.map(we),Me=[];for(let{name:$t,startTime:Mt,endTime:vr}of ws){let vt=kS($t,f);ue.debug?.("subscription to",$t,"using local id",vt,"starting",Mt),Me[vt]={startTime:Mt,endTime:vr}}Zf(u),tr||(tr=Ol($t=>{$t.databaseName===u&&Zf(u)}),Wf=Hp($t=>{$t===u&&(e.send((0,ot.encode)([Gd])),Vr())}),e.on("close",()=>{tr?.remove(),Wf?.remove()})),e.send((0,ot.encode)([iV,rh(h.auditStore),ws.map(({name:$t})=>$t)]));let Ne=!0;do{isFinite(Qe)||(ue.warn?.("Invalid sequence id "+Qe),Vr(1008,"Invalid sequence id"+Qe));let $t;if(Ne&&!se&&(Ne=!1,Qe===0)){ue.info?.("Replicating all tables to",g);let Mt=Qe,vr=tT(f);for(let vt in E){if(!we(vt))continue;let Ns=E[vt];for(let Ut of Ns.primaryStore.getRange({snapshot:!1,versions:!0})){if(se)return;if(Ut.localTime>=Qe){ue.trace?.(s,"Copying record from",u,vt,Ut.key,Ut.localTime),Mt=Math.max(Ut.localTime,Mt),$t=!0,Gt()[uh]=1;let oi=rl(Ut.version,Ns.tableId,Ut.key,null,vr,null,"put",Dm(()=>Ns.primaryStore.encoder.encode(Ut.value),Ru=>Fc(Ru,Ut.key)),Ut.metadataFlags&-256,Ut.residencyId,null,Ut.expiresAt);await Kr({recordId:Ut.key,tableId:Ns.tableId,type:"put",getValue(){return Ut.value},encoded:oi,version:Ut.version,residencyId:Ut.residencyId,nodeId:vr,extendedType:Ut.metadataFlags},Ut.localTime)}}}$t&&Kr({type:"end_txn"},Qe),Gt()[uh]=0,Qe=Mt}for(let{key:Mt,value:vr}of f.getRange({start:Qe||1,exclusiveStart:!0,snapshot:!1})){if(se)return;let vt=Bt(vr);ue.debug?.("sending audit record",new Date(Mt)),Gt()[uh]=Mt,Qe=Mt,await Kr(vt,Mt),br.startTime=Mt,$t=!0}$t&&Kr({type:"end_txn"},Qe),Gt()[uh]=0,await l0(f)}while(!se)}).catch(Ne=>{ue.error?.(s,"Error handling subscription to node",Ne),Vr(1008,"Error handling subscription to node")});break}}return}N.position=8;let b=!0,P,B;do{Gt();let C=N.readInt();if(C===9&&N.getUint8(N.position)==q_){N.position++,T=B=N.readFloat64(),m[AC]=T,m[bC]=Date.now(),m[IC]=bV,ue.trace?.("received remote sequence update",T,u);break}let H=N.position,U=Bt(y,H,H+C),J=Uc[U.tableId];J||ue.error?.(`No table found with an id of ${U.tableId}`);let j;U.residencyId&&(j=YE[U.residencyId],ue.trace?.(s,"received residency list",j,U.type,U.recordId));try{let G=U.recordId;D_(()=>{P={table:J.name,id:U.recordId,type:U.type,nodeId:dA.get(U.nodeId),residencyList:j,timestamp:U.version,value:U.getValue(J),user:U.user,beginTxn:b,expiresAt:U.expiresAt}},Se=>Jf(Se,G))}catch(G){throw G.message+="typed structures for current decoder"+JSON.stringify(J.decoder.typedStructs),G}b=!1,ue.trace?.(s,"received replication message",U.type,"id",P.id,"version",new Date(U.version),"nodeId",P.nodeId),m[AC]=U.version,m[bC]=Date.now(),m[IC]=IV,h.send(P),N.position=H+C}while(N.position<y.byteLength);De++,Xe(y.byteLength,"bytes-received",`${g}.${u}.${P?.table||"unknown_table"}`,"replication","ingest"),De>lA&&!Ao&&(Ao=!0,e.pause(),ue.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:T,remoteNodeIds:S,async onCommit(){if(P){let C=Date.now()-P.timestamp;Xe(C,"replication-latency",g+"."+u+"."+P.table,P.type,"ingest")}De--,Ao&&(Ao=!1,e.resume(),ue.debug?.(`Replication resuming ${g}`)),He.length>0&&await Promise.all(He),ue.trace?.("All blobs finished"),!w&&B&&(ue.trace?.(s,"queuing confirmation of a commit at",B),setTimeout(()=>{e.send((0,ot.encode)([lV,w])),ue.trace?.(s,"sent confirmation of a commit at",w),w=null},fue)),w=B,ue.debug?.("last sequence committed",new Date(B),u)}})}catch(N){ue.error?.(s,"Error handling incoming replication message",N)}}o(Bc,"onWSMessage"),e.on("ping",er),e.on("pong",()=>{if(t.connection){let y=performance.now()-te;t.connection.latency=y,Gt()&&(m[ZS]=y),t.isSubscriptionConnection&&Fl({name:g,database:u,url:t.url,latency:y})}te=null}),e.on("close",(y,N)=>{clearInterval(L),clearTimeout(k),clearInterval(V),br&&br.emit("close"),Is&&Is.end();for(let[b,{reject:P}]of A)P(new Error(`Connection closed ${N?.toString()} ${y}`));ue.debug?.(s,"closed",y,N?.toString())});function Vr(y,N){try{e.isFinished=!0,ue.debug?.(s,"closing",g,u,y,N),e.close(y,N),t.connection?.emit("finished")}catch(b){ue.error?.(s,"Error closing connection",b)}}o(Vr,"close");let Ir=new Set;async function Fc(y,N){let b=P_(y);if(Ir.has(b)){ue.debug?.("Blob already being sent",b);return}Ir.add(b);try{let P;Ge++;for await(let B of y.stream())P&&(ue.debug?.("Sending blob chunk",b,"length",P.length),e.send((0,ot.encode)([jS,{fileId:b,size:y.size},P]))),P=B,e._socket.writableNeedDrain&&(ue.debug?.("draining",b),await new Promise(C=>e._socket.once("drain",C)),ue.debug?.("drained",b)),Xe(B.length,"bytes-sent",`${g}.${u}`,"replication","blob");ue.debug?.("Sending final blob chunk",b,"length",P.length),e.send((0,ot.encode)([jS,{fileId:b,size:y.size,finished:!0},P]))}catch(P){ue.warn?.("Error sending blob",P,"blob id",b,"for record",N),e.send((0,ot.encode)([jS,{fileId:b,finished:!0,error:gC(P)},Buffer.alloc(0)]))}finally{Ir.delete(b),Ge--,Ge<Qf&&Ar?.()}}o(Fc,"sendBlobs");function Jf(y,N){let b=P_(y),P=Ae.get(b);ue.debug?.("Received transaction with blob",b,"has stream",!!P,"ended",!!P?.writableEnded),P?P.writableEnded&&Ae.delete(b):(P=new yC.PassThrough,Ae.set(b,P)),P.connectedToBlob=!0,P.lastChunk=Date.now(),P.recordId=N,y.size===void 0&&P.expectedSize&&(y.size=P.expectedSize);let B=P.blob??createBlob(P,y);P.blob=B;let C=B.save({primaryStore:h.auditStore});return C&&(C.blobId=b,He.push(C),C.finally(()=>{ue.debug?.(`Finished receiving blob stream ${b}`),He.splice(He.indexOf(C),1)})),B}o(Jf,"receiveBlobs");function ba(){if(p||(p=!0,t.connection?.on("subscriptions-updated",ba)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let y=new Map;f||(f=h?.auditStore);try{for(let P of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let B of P.value.nodes||[])B.lastTxnTime>(y.get(B.id)??0)&&y.set(B.id,B.lastTxnTime)}catch(P){if(!P.message.includes("Can not re"))throw P}let N=t.connection?.nodeSubscriptions?.[0];S=[];let b=t.connection?.nodeSubscriptions.map((P,B)=>{let C=[],{replicateByDefault:H}=P;if(P.subscriptions){for(let G of P.subscriptions)if(G.subscribe&&(G.schema||G.database)===u){let Se=G.table;E?.[Se]?.replicate!==!1&&C.push(Se)}H=!1}else for(let G in E)(H?E[G].replicate===!1:E[G].replicate)&&C.push(G);let U=f&&kS(P.name,f),J=h?.dbisDB?.get([Symbol.for("seq"),U])??1,j=Math.max(J?.seqId??1,(typeof P.startTime=="string"?new Date(P.startTime).getTime():P.startTime)??1);if(ue.debug?.("Starting time recorded in db",P.name,U,u,J?.seqId,"start time:",j,new Date(j)),N!==P){let G=f&&kS(N.name,f),Se=h?.dbisDB?.get([Symbol.for("seq"),G])??1;for(let me of Se?.nodes||[])me.name===P.name&&(j=me.seqId,ue.debug?.("Using sequence id from proxy node",N.name,j))}if(U===void 0?ue.warn("Starting subscription request from node",P,"but no node id found"):S.push(U),y.get(U)>j&&(j=y.get(U),ue.debug?.("Updating start time from more recent txn recorded",N.name,j)),j===1&&QS)try{new URL(QS).hostname===P.name?(ue.warn?.(`Requesting full copy of database ${u} from ${QS}`),j=0):j=Date.now()-6e4}catch(G){ue.error?.("Error parsing leader URL",QS,G)}return ue.trace?.(s,"defining subscription request",P.name,u,new Date(j)),{name:P.name,replicateByDefault:H,tables:C,startTime:j,endTime:P.endTime}});if(b)if(ue.debug?.(s,"sending subscription request",b,h?.dbisDB?.path),clearTimeout(Y),b.length>0)e.send((0,ot.encode)([nV,b]));else{let P=o(()=>{let B=performance.now();Y=setTimeout(()=>{de<=B?Vr(1008,"Connection has no subscriptions and is no longer used"):P()},X).unref()},"scheduleClose");P()}}o(ba,"sendSubscriptionRequestUpdate");function Xf(y,N){if(!y)return;let b=jf[y];return b||(b=N.getResidencyRecord(y),jf[y]=b),b}o(Xf,"getResidence");function Ia(y){return!(sc&&sc!="*"&&!sc[y]&&!sc.includes?.(y)&&!sc.some?.(N=>N.name===y))}o(Ia,"checkDatabaseAccess");function wa(y){if(h=h||d.get(y),!Ia(y))throw new Error(`Access to database "${y}" is not permitted`);h||ue.warn?.(`No database named "${y}" was declared and registered`),f=h?.auditStore,E||(E=ct()?.[y]);let N=it();if(N===g)throw N?new Error("Should not connect to self",N):new Error("Node name not defined");return WE(N,y),!0}o(wa,"setDatabase");function WE(y,N){let b=ct()?.[N],P=[];for(let B in b){let C=b[B];P.push({table:B,schemaDefined:C.schemaDefined,attributes:C.attributes.map(H=>({name:H.name,type:H.type,isPrimaryKey:H.isPrimaryKey}))})}ue.trace?.("Sending database info for node",y,"database name",N),e.send((0,ot.encode)([sV,y,N,P]))}o(WE,"sendNodeDBName");function Zf(y){let N=ct()?.[y],b=[];for(let P in N){if(ws&&!ws.some(C=>C.replicateByDefault?!C.tables.includes(P):C.tables.includes(P)))continue;let B=N[P];b.push({table:P,schemaDefined:B.schemaDefined,attributes:B.attributes.map(C=>({name:C.name,type:C.type,isPrimaryKey:C.isPrimaryKey}))})}e.send((0,ot.encode)([uV,b,y]))}o(Zf,"sendDBSchema"),V=setInterval(()=>{for(let[y,N]of Ae)N.lastChunk+ye<Date.now()&&(ue.warn?.(`Timeout waiting for blob stream to finish ${y} for record ${N.recordId??"unknown"} from ${g}`),Ae.delete(y),N.end())},ye).unref();let kc=1,Hc=[];return{end(){Is&&Is.end(),br&&br.emit("close")},getRecord(y){let N=kc++;return new Promise((b,P)=>{let B=[aV,N,y.table.tableId,y.id];Hc[y.table.tableId]||(B.push(y.table.tableName),Hc[y.table.tableId]=!0),e.send((0,ot.encode)(B)),de=performance.now(),A.set(N,{tableId:y.table.tableId,key:y.id,resolve(C){let{table:H,entry:U}=y;if(b(C),C)return H._recordRelocate(U,C)},reject:P})})},sendOperation(y){let N=kc++;return y.requestId=N,e.send((0,ot.encode)([RC,y])),new Promise((b,P)=>{A.set(N,{resolve:b,reject:P})})}};function K(y){O(5),y<128?a[c++]=y:y<16384?(l.setUint16(c,y|32768),c+=2):y<1056964608?(l.setUint32(c,y|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,y),c+=5)}function _(y,N=0,b=y.length){let P=b-N;O(P),y.copy(a,c,N,b),c+=P}function R(y){O(8),l.setFloat64(c,y),c+=8}function O(y){if(y+16>a.length-c){let N=Buffer.allocUnsafeSlow(c+y-i+65536>>10<<11);a.copy(N,0,i,c),c=c-i,i=0,a=N,l=new DataView(a.buffer,0,a.length)}}function D(y,N){let b=y.database??"data";N||(N={});let P=N.schemaDefined,B=!1,C=y.schemaDefined,H=N.attributes||[];for(let U=0;U<y.attributes?.length;U++){let J=y.attributes[U],j=H.find(G=>G.name===J.name);(!j||j.type!==J.type)&&(P?ue.error?.(`Schema for '${u}.${y.table}' is defined locally, but attribute '${J.name}: ${J.type}' from '${g}' does not match local attribute ${j?"'"+j.name+": "+j.type+"'":"which does not exist"}`):(B=!0,C||(J.indexed=!0),j?H[H.indexOf(j)]=J:H.push(J)))}return B?(ue.debug?.("(Re)creating",y),Je({table:y.table,database:y.database,schemaDefined:y.schemaDefined,attributes:H,...N})):N}}var pV,ot,hV,EV,_V,wC,gV,SV,Gl,TV,yC,yV,RV,uue,gC,ue,nV,sV,iV,Gd,oV,SC,aV,WS,RC,zS,cV,lV,uV,jS,AV,AC,bC,uh,ZS,IC,bV,IV,due,QS,NC,ic,JS,dV,fue,fV,TC,XS,mV,qd,CC=ie(()=>{Pe();No();rC();zb();us();pV=I(le());q();nl();ot=require("msgpackr"),hV=require("ws"),EV=require("worker_threads"),_V=I(Q());ah();wC=require("events"),gV=I(fs()),SV=I(require("node:tls"));Bl();Gl=I(require("node:process")),TV=require("node:net");vs();Ls();yC=require("node:stream"),yV=require("lmdb"),RV=I(require("minimist")),{forComponent:uue,errorToString:gC}=_V.default,ue=uue("replication").conditional,nV=129,sV=140,iV=141,Gd=142,oV=130,SC=132,aV=133,WS=134,RC=136,zS=137,cV=143,lV=144,uV=145,jS=146,AV=0,AC=1,bC=2,uh=3,ZS=4,IC=5,bV=0,IV=1,due=(0,RV.default)(Gl.argv),QS=due.HDB_LEADER_URL??Gl.env.HDB_LEADER_URL,NC=new Map,ic=new Map,JS=!0,dV=300,fue=2,fV=3e4;o(eT,"createWebSocket");mV=500,qd=class extends wC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=mV;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??Ai(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await eT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ue.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Gl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ue[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=mV,this.nodeSubscriptions&&Fl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=dh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ue.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ue.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ue.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Fd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ue.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(dh,"replicateOverWS")});function fh(e){return e===CV||e===mue}function pue(e){return e===OV||e===PV}function OC(e){return e===CV?OV:PV}function hue(){if(NV)return;NV=!0;let e=ql.CryptoEngine.prototype,t=ql.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return fh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return fh(s)?{name:OC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return pue(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=ql.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(fh(i)){let a=OC(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),a,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(fh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new mh.X509Certificate(Buffer.from(i)),l=new mh.X509Certificate(Buffer.from(a));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,a]=n,c=a.algorithm.algorithmId;if(fh(c)){let l=OC(c);try{let u=this.crypto?.subtle||this.subtle||ql.getCrypto(!0)?.subtle||mh.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",a.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var ql,mh,CV,mue,OV,PV,NV,LV=ie(()=>{ql=I(require("pkijs")),mh=require("node:crypto"),CV="1.3.101.112",mue="1.3.101.113",OV="Ed25519",PV="Ed448",NV=!1;o(fh,"isEd25519OrEd448");o(pue,"isEdDSAAlgorithmName");o(OC,"getEdDSAAlgorithmName");o(hue,"applyEd25519Patch");hue()});function Eue(){return rT||(rT=Je({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),rT.sourcedFrom(PC)),rT}function _ue(e){if(jt.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return jt.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return jt.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function $d(e,t){jt.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=_ue(t);if(r===!1)return jt.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=Tue(e);return jt.trace?.("Certificate chain length:",n.length),n.length===1&&!n[0].issuer?(jt.debug?.("Certificate without issuer - cannot perform OCSP check"),{valid:!0,status:"no-issuer-cert",method:"disabled"}):n.length<2||!n[0].issuer?(jt.debug?.("Certificate chain too short for revocation checking"),{valid:!0,status:"insufficient-chain",method:"disabled"}):gue(n[0].cert,n[0].issuer,r)}async function gue(e,t,r){jt.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=DV(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=DV(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,vV.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;jt.trace?.("OCSP cache key:",i);let c=await Eue().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??ph.failureMode)==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(jt.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return jt.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(n){return jt.error?.("OCSP verification error:",n),(r?.failureMode??ph.failureMode)==="fail-closed"?{valid:!1,status:"error",error:n.message,method:"ocsp"}:(jt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Sue(e,t,r){jt.trace?.("Calling getCertStatus with timeout:",r);let n=await(0,MV.getCertStatus)(e,{ca:t,timeout:r});return jt.debug?.("OCSP response from easy-ocsp:",{status:n.status,revocationReason:n.revocationReason,responseData:n}),n.status==="good"?{status:"good"}:n.status==="revoked"?{status:"revoked",reason:n.revocationReason?.toString()||"unspecified"}:{status:"unknown",reason:"unknown-status"}}function DV(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
|
|
19
|
+
`)}function Tue(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}var MV,vV,UV,jt,PC,ph,rT,nT=ie(()=>{LV();MV=require("easy-ocsp"),vV=require("node:crypto"),UV=I(Os());Pe();Fa();jt=(0,UV.loggerWithTag)("cert-verification"),PC=class extends Br{static{o(this,"CertificateVerificationSource")}async get(t){jt.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;jt.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??ph.timeout,l=await Promise.race([Sue(s,i,c),new Promise((d,f)=>setTimeout(()=>f(new Error("OCSP timeout")),c))]);jt.debug?.("OCSP check result:",l);let u=a?.cacheTtl??ph.cacheTtl;return r&&(r.expiresAt=Date.now()+u),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:Date.now()+u,method:"ocsp"}}catch(c){return jt.error?.("OCSP verification error:",c),(a?.failureMode??ph.failureMode)==="fail-closed"?(r&&(r.expiresAt=Date.now()+3e5),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:Date.now()+3e5,method:"ocsp"}):(jt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null)}}},ph={timeout:5e3,cacheTtl:36e5,failureMode:"fail-open"};o(Eue,"getCertificateCacheTable");o(_ue,"getCertificateVerificationConfig");o($d,"verifyCertificate");o(gue,"verifyOCSP");o(Sue,"performOCSPCheck");o(DV,"bufferToPem");o(Tue,"extractCertificateChain")});var Qo={};be(Qo,{clearThisNodeName:()=>Oue,disableReplication:()=>bue,enabledDatabases:()=>sc,forEachReplicatedDatabase:()=>Za,getThisNodeId:()=>tT,getThisNodeName:()=>it,getThisNodeUrl:()=>ec,hostnameToUrl:()=>aT,lastTimeInAuditStore:()=>nh,monitorNodeCAs:()=>VV,replicateOperation:()=>Lue,replicationCertificateAuthorities:()=>Jo,sendOperationToNode:()=>hh,servers:()=>Rue,setReplicator:()=>YV,start:()=>Aue,startOnMainThread:()=>iC,subscribeToNode:()=>oh,unsubscribeFromNode:()=>qS,urlToNodeName:()=>Ai});function Aue(e){if(!e.port&&!e.securePort&&(e.port=$s.default.get(x.OPERATIONSAPI_NETWORK_PORT),e.securePort=$s.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),!it())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of ih(e))t.set(Ai(s.url),s);Iue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ue.ws(async(s,i,a,c)=>{if(It.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),dh(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Ue.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=Wt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,qV.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await $d(s.peerCertificate,e);if(!u.valid){It.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else It.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:It.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(Jo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=oT.createSecureContext(u)}catch(l){It.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),$s.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1&&i()}VV(()=>{for(let s of n)s()})}function VV(e){let t=0;xd(r=>{r?.ca&&(Jo.add(r.ca),Jo.size!==t&&(t=Jo.size,e?.()))})}function bue(e=!0){$V=e}function Iue(e){$V||(ct(),sc=e.databases,Za(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||ic;for(let[s,i]of iT){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];YV(r,s,e),NC.get(s)?.forEach(i=>i(s))}}))}function YV(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 KV extends Br{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||ic,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(It.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Xn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Ue.hostname)continue;let E=Nue(h,KV.subscription,e);if(E?.isConnected){let g=Ud(t.auditStore,e,h)[ZS];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new HV.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:yue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",$l,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function wue(e,t,r,n,s){let i=iT.get(e);i||iT.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new qd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function Nue(e,t,r){let n=xV.get($l);n||(n=new Map,xV.set($l,n));let s=n.get(r);if(s)return s;let i=Wt().primaryStore.get(e);return i?.url&&(s=new qd(i.url,t,r,$l,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function hh(e,t,r){r||(r={}),r.serverName=e.name;let n=await eT(e.url,r),s=dh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function oh(e){try{GV.isMainThread&&It.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=ic.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,ic.set(e.database,t)}let r=wue(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=>sh(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function qS({name:e,url:t,database:r}){It.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Wt().primaryStore.getRange({})));let n=iT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Cue(){if(LC!==void 0)return LC;let e=$s.default.get(x.OPERATIONSAPI_TLS_CERTIFICATE)||$s.default.get(x.TLS_CERTIFICATE);if(e)return LC=new FV.X509Certificate((0,kV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return $l||($l=$s.default.get("replication_hostname")??Ai($s.default.get("replication_url"))??Cue()??BV("operationsapi_network_secureport")??BV("operationsapi_network_port")??"127.0.0.1")}function Oue(){$l=void 0}function BV(e){let t=$s.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function sT(e){let t=$s.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function tT(e){return rh(e)?.[it()]}function ec(){let e=$s.default.get("replication_url");return e||aT(it())}function aT(e){let t=sT("replication_port");if(t)return`ws://${e}:${t}`;if(t=sT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=sT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=sT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ai(e){if(e)return new URL(e).hostname}function Za(e,t){for(let n of Object.getOwnPropertyNames(ve))r(n);return Hp(n=>{r(n)}),Ol((n,s)=>{r(n.databaseName)});function r(n){let s=ve[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):Pue(n)&&t(s,n,!1)}o(r,"forDatabase")}function Pue(e){let t=ve[e];for(let r in t)if(t[r].replicate)return!0}function nh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Lue(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>hh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ue.nodes[s]?.name,i})}return t}var $s,It,FV,kV,oT,HV,GV,qV,$V,yue,Rue,Jo,sc,iT,xV,LC,$l,us=ie(()=>{Pe();Fa();Ou();CC();Ur();$s=I(le()),It=I(Q()),FV=require("crypto");nT();kV=require("fs");ah();Bl();q();rC();oT=I(require("node:tls")),HV=I(Ee()),GV=require("worker_threads"),qV=I(fs()),yue=1,Rue=[],Jo=$s.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1?new Set(oT.rootCertificates):new Set;o(Aue,"start");o(VV,"monitorNodeCAs");o(bue,"disableReplication");o(Iue,"assignReplicationSource");o(YV,"setReplicator");iT=new Map;o(wue,"getSubscriptionConnection");xV=new Map;o(Nue,"getRetrievalConnectionByName");o(hh,"sendOperationToNode");o(oh,"subscribeToNode");o(qS,"unsubscribeFromNode");o(Cue,"getCommonNameFromCert");o(it,"getThisNodeName");o(Oue,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return it()}});o(BV,"getHostFromListeningPort");o(sT,"getPortFromListeningPort");o(tT,"getThisNodeId");Ue.replication={getThisNodeId:tT,exportIdMapping:rh};o(ec,"getThisNodeUrl");o(aT,"hostnameToUrl");o(Ai,"urlToNodeName");o(Za,"forEachReplicatedDatabase");o(Pue,"hasExplicitlyReplicatedTable");o(nh,"lastTimeInAuditStore");o(Lue,"replicateOperation")});var fT=v((Hxe,JV)=>{"use strict";var Vd=zq(),{validateBySchema:Eh}=ft(),{commonValidators:Kd,schemaRegex:DC}=Vi(),Er=require("joi"),Due=Q(),Mue=require("uuid").v4,uT=Go(),Yd=(q(),M(W)),vue=require("util"),oc=is(),{handleHDBError:Xo,hdbErrors:Uue,ClientError:_h}=Ee(),{HDB_ERROR_MSGS:cT,HTTP_STATUS_CODES:Zo}=Uue,{SchemaEventMsg:dT}=rs(),WV=pr(),{getDatabases:xue}=(Pe(),M(pt)),{transformReq:Wd}=ce(),{replicateOperation:zV}=(us(),M(Qo)),lT=Er.string().min(1).max(Kd.schema_length.maximum).pattern(DC).messages({"string.pattern.base":"{:#label} "+Kd.schema_format.message}),Bue=Er.string().min(1).max(Kd.schema_length.maximum).pattern(DC).messages({"string.pattern.base":"{:#label} "+Kd.schema_format.message}).required(),Fue=Er.string().min(1).max(Kd.schema_length.maximum).pattern(DC).messages({"string.pattern.base":"{:#label} "+Kd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();JV.exports={createSchema:kue,createSchemaStructure:jV,createTable:Hue,createTableStructure:QV,createAttribute:Kue,dropSchema:Gue,dropTable:que,dropAttribute:$ue,getBackup:Yue};async function kue(e){let t=await jV(e);return uT.signalSchemaChange(new dT(process.pid,e.operation,e.schema)),t}o(kue,"createSchema");async function jV(e){let t=Eh(e,Er.object({database:lT,schema:lT}));if(t)throw new _h(t.message);if(Wd(e),!await Vd.checkSchemaExists(e.schema))throw Xo(new Error,cT.SCHEMA_EXISTS_ERR(e.schema),Zo.BAD_REQUEST,Yd.LOG_LEVELS.ERROR,cT.SCHEMA_EXISTS_ERR(e.schema),!0);return await oc.createSchema(e),`database '${e.schema}' successfully created`}o(jV,"createSchemaStructure");async function Hue(e){return Wd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await QV(e)}o(Hue,"createTable");async function QV(e){let t=Eh(e,Er.object({database:lT,schema:lT,table:Bue,residence:Er.array().items(Er.string().min(1)).optional(),hash_attribute:Fue}));if(t)throw new _h(t.message);if(!await Vd.checkSchemaTableExists(e.schema,e.table))throw Xo(new Error,cT.TABLE_EXISTS_ERR(e.schema,e.table),Zo.BAD_REQUEST,Yd.LOG_LEVELS.ERROR,cT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Mue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await oc.createTable(n,e);else throw Xo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Zo.BAD_REQUEST);else await oc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(QV,"createTableStructure");async function Gue(e){let t=Eh(e,Er.object({database:Er.string(),schema:Er.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new _h(t.message);Wd(e);let r=await Vd.checkSchemaExists(e.schema);if(r)throw Xo(new Error,r,Zo.NOT_FOUND,Yd.LOG_LEVELS.ERROR,r,!0);let n=await Vd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await oc.dropSchema(e),uT.signalSchemaChange(new dT(process.pid,e.operation,e.schema)),await WV.purgeSchemaTableStreams(e.schema,s);let i=await zV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Gue,"dropSchema");async function que(e){let t=Eh(e,Er.object({database:Er.string(),schema:Er.string(),table:Er.string().required()}));if(t)throw new _h(t.message);Wd(e);let r=await Vd.checkSchemaTableExists(e.schema,e.table);if(r)throw Xo(new Error,r,Zo.NOT_FOUND,Yd.LOG_LEVELS.ERROR,r,!0);await oc.dropTable(e),await WV.purgeTableStream(e.schema,e.table);let n=await zV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(que,"dropTable");async function $ue(e){let t=Eh(e,Er.object({database:Er.string(),schema:Er.string(),table:Er.string().required(),attribute:Er.string().required()}));if(t)throw new _h(t.message);Wd(e);let r=await Vd.checkSchemaTableExists(e.schema,e.table);if(r)throw Xo(new Error,r,Zo.NOT_FOUND,Yd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Xo(new Error,"You cannot drop a hash attribute",Zo.BAD_REQUEST,void 0,void 0,!0);if(Yd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Xo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Zo.BAD_REQUEST,void 0,void 0,!0);try{return await oc.dropAttribute(e),Vue(e),uT.signalSchemaChange(new dT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Due.error(`Got an error deleting attribute ${vue.inspect(e)}.`),n}}o($ue,"dropAttribute");function Vue(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(Vue,"dropAttributeFromGlobal");async function Kue(e){Wd(e);let t=xue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Xo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Zo.BAD_REQUEST,void 0,void 0,!0);return await oc.createAttribute(e),uT.signalSchemaChange(new dT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Kue,"createAttribute");function Yue(e){return oc.getBackup(e)}o(Yue,"getBackup")});var ZV=v((qxe,XV)=>{"use strict";var{OPERATIONS_ENUM:Wue}=(q(),M(W)),MC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Wue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};XV.exports=MC});var vC=v((Kxe,s1)=>{"use strict";var zue=is(),Vxe=ZV(),mT=ce(),pT=(q(),M(W)),jue=le(),{handleHDBError:e1,hdbErrors:Que}=Ee(),{HDB_ERROR_MSGS:t1,HTTP_STATUS_CODES:r1}=Que,Jue=Object.values(pT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),n1="To use this operation audit log must be enabled in harperdb-config.yaml";s1.exports=Xue;async function Xue(e){if(mT.isEmpty(e.schema))throw new Error(t1.SCHEMA_REQUIRED_ERR);if(mT.isEmpty(e.table))throw new Error(t1.TABLE_REQUIRED_ERR);if(!jue.get(pT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw e1(new Error,n1,r1.BAD_REQUEST,pT.LOG_LEVELS.ERROR,n1,!0);let t=mT.checkSchemaTableExist(e.schema,e.table);if(t)throw e1(new Error,t,r1.NOT_FOUND,pT.LOG_LEVELS.ERROR,t,!0);if(!mT.isEmpty(e.search_type)&&Jue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await zue.readAuditLog(e)}o(Xue,"readAuditLog")});var o1=v((Wxe,i1)=>{"use strict";var{OPERATIONS_ENUM:Zue}=(q(),M(W)),UC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Zue.GET_BACKUP,this.schema=t,this.table=r}};i1.exports=UC});var l1=v((Jxe,c1)=>{"use strict";var ede=is(),jxe=o1(),xC=ce(),tde=(q(),M(W)),Qxe=le(),{handleHDBError:rde,hdbErrors:nde}=Ee(),{HDB_ERROR_MSGS:a1,HTTP_STATUS_CODES:sde}=nde;c1.exports=ide;async function ide(e){if(xC.isEmpty(e.schema))throw new Error(a1.SCHEMA_REQUIRED_ERR);if(xC.isEmpty(e.table))throw new Error(a1.TABLE_REQUIRED_ERR);let t=xC.checkSchemaTableExist(e.schema,e.table);if(t)throw rde(new Error,t,sde.NOT_FOUND,tde.LOG_LEVELS.ERROR,t,!0);return await ede.getBackup(readAuditLogObject)}o(ide,"getBackup")});var m1=v((Zxe,f1)=>{"use strict";var ode=le(),ac=require("joi"),ade=ft(),u1=require("moment"),cde=require("fs-extra"),BC=require("path"),lde=require("lodash"),gh=(q(),M(W)),{LOG_LEVELS:Vl}=(q(),M(W)),ude="YYYY-MM-DD hh:mm:ss",dde=BC.resolve(__dirname,"../logs");f1.exports=function(e){return ade.validateBySchema(e,fde)};var fde=ac.object({from:ac.custom(d1),until:ac.custom(d1),level:ac.valid(Vl.NOTIFY,Vl.FATAL,Vl.ERROR,Vl.WARN,Vl.INFO,Vl.DEBUG,Vl.TRACE),order:ac.valid("asc","desc"),limit:ac.number().min(1),start:ac.number().min(0),log_name:ac.custom(mde)});function d1(e,t){if(u1(e,u1.ISO_8601).format(ude)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(d1,"validateDatetime");function mde(e,t){if(lde.invert(gh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=ode.get(gh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?gh.LOG_NAMES.HDB:e,i=s===gh.LOG_NAMES.INSTALL?BC.join(dde,gh.LOG_NAMES.INSTALL):BC.join(n,s);return cde.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(mde,"validateReadLogPath")});var kC=v((t0e,h1)=>{"use strict";var hT=(q(),M(W)),pde=Q(),hde=le(),Ede=m1(),FC=require("path"),p1=require("fs-extra"),{once:_de}=require("events"),{handleHDBError:gde,hdbErrors:Sde}=Ee(),{PACKAGE_ROOT:Tde}=yt(),{replicateOperation:yde}=(us(),M(Qo)),Rde=FC.join(Tde,"logs"),Ade=1e3,bde=200;h1.exports=Ide;async function Ide(e){let t=Ede(e);if(t)throw gde(t,t.message,Sde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=yde(e),n=hde.get(hT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?hT.LOG_NAMES.HDB:e.log_name,i=s===hT.LOG_NAMES.INSTALL?FC.join(Rde,hT.LOG_NAMES.INSTALL):FC.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?Ade:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(p1.statSync(i).size-(E+5)*bde,0));let A=p1.createReadStream(i,{start:g});A.on("error",F=>{pde.error(F)});let S=0,T=[],w="",L;A.on("data",F=>{let V=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=w+F;let X=0,Y;for(;(Y=V.exec(F))&&!A.destroyed;){L&&(L.message=F.slice(X,Y.index),k(L));let[de,ne,ae]=Y,ye=ae.split("] ["),Ae=ye[0],He=ye[1];ye.splice(0,2),L={timestamp:ne,thread:Ae,level:He,tags:ye,message:""},X=Y.index+de.length}w=F.slice(X)}),A.on("end",F=>{A.destroyed||L&&(L.message=w.trim(),k(L))}),A.resume();function k(F){let V,X,Y;switch(!0){case(a&&l&&d):V=new Date(F.timestamp),X=new Date(u),Y=new Date(f),F.level===c&&V>=X&&V<=Y&&S<h?S++:F.level===c&&V>=X&&V<=Y&&(oo(F,p,T),S++,S===E&&A.destroy());break;case(a&&l):V=new Date(F.timestamp),X=new Date(u),F.level===c&&V>=X&&S<h?S++:F.level===c&&V>=X&&(oo(F,p,T),S++,S===E&&A.destroy());break;case(a&&d):V=new Date(F.timestamp),Y=new Date(f),F.level===c&&V<=Y&&S<h?S++:F.level===c&&V<=Y&&(oo(F,p,T),S++,S===E&&A.destroy());break;case(l&&d):V=new Date(F.timestamp),X=new Date(u),Y=new Date(f),V>=X&&V<=Y&&S<h?S++:V>=X&&V<=Y&&(oo(F,p,T),S++,S===E&&A.destroy());break;case a:F.level===c&&S<h?S++:F.level===c&&(oo(F,p,T),S++,S===E&&A.destroy());break;case l:V=new Date(F.timestamp),X=new Date(u),V>=X&&S<h?S++:V>=X&&S>=h&&(oo(F,p,T),S++,S===E&&A.destroy());break;case d:V=new Date(F.timestamp),Y=new Date(f),V<=Y&&S<h?S++:V<=Y&&S>=h&&(oo(F,p,T),S++,S===E&&A.destroy());break;default:S<h?S++:(oo(F,p,T),S++,S===E&&A.destroy())}}o(k,"onLogMessage"),await _de(A,"close");let te=await r;if(te.replicated){for(let F of T)F.node=server.hostname;for(let F of te.replicated){let V=F.node;if(F.status==="failed")oo({timestamp:new Date().toISOString(),level:"error",node:V,message:`Error retrieving logs: ${F.reason}`},p,T);else for(let X of F.results)X.node=V,oo(X,p,T)}}return T}o(Ide,"readLog");function oo(e,t,r){t==="desc"?wde(e,r):t==="asc"?Nde(e,r):r.push(e)}o(oo,"pushLineToResult");function wde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(wde,"insertDescending");function Nde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(Nde,"insertAscending")});var ET=v((a0e,S1)=>{"use strict";var HC=require("joi"),{string:zd,boolean:E1,date:Cde}=HC.types(),Ode=ft(),{validateSchemaExists:n0e,validateTableExists:s0e,validateSchemaName:i0e}=Vi(),Pde=(q(),M(W)),Lde=Nt(),_1=le();_1.initSync();var o0e=zd.invalid(_1.get(Pde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Lde.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),g1={operation:zd.valid("add_node","update_node","set_node_replication"),node_name:zd.optional(),subscriptions:HC.array().items({table:zd.optional(),schema:zd.optional(),database:zd.optional(),subscribe:E1.required(),publish:E1.required().custom(Mde),start_time:Cde.iso()})};function Dde(e){return Ode.validateBySchema(e,HC.object(g1))}o(Dde,"addUpdateNodeValidator");function Mde(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(Mde,"checkForFalsy");S1.exports={addUpdateNodeValidator:Dde,validationSchema:g1}});var jd=v((l0e,T1)=>{"use strict";var GC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},qC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};T1.exports={Node:GC,NodeSubscription:qC}});var R1=v((d0e,y1)=>{"use strict";var vde=(q(),M(W)).OPERATIONS_ENUM,$C=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=vde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};y1.exports=$C});var Sh=v((m0e,A1)=>{"use strict";var VC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},KC=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};A1.exports={RemotePayloadObject:VC,RemotePayloadSubscription:KC}});var I1=v((h0e,b1)=>{"use strict";var YC=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};b1.exports=YC});var N1=v((y0e,w1)=>{"use strict";var Ude=I1(),_0e=Vt(),g0e=gt(),xde=Q(),{getSchemaPath:S0e,getTransactionAuditStorePath:T0e}=At(),{getDatabases:Bde}=(Pe(),M(pt));w1.exports=Fde;async function Fde(e){let t=new Ude;try{let r=Bde()[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){xde.warn(`unable to stat table dbi due to ${r}`)}return t}o(Fde,"lmdbGetTableSize")});var O1=v((A0e,C1)=>{"use strict";var WC=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};C1.exports=WC});var Jd=v((O0e,M1)=>{"use strict";var kde=require("fs-extra"),Hde=require("path"),_n=require("systeminformation"),cc=Q(),P1=pr(),I0e=Nt(),Qd=(q(),M(W)),Gde=N1(),qde=Dl(),{getThreadInfo:L1}=nt(),Th=le();Th.initSync();var $de=O1(),{openEnvironment:w0e}=gt(),{getSchemaPath:N0e}=At(),{database:C0e,databases:zC}=(Pe(),M(pt)),_T;M1.exports={getHDBProcessInfo:XC,getNetworkInfo:eO,getDiskInfo:ZC,getMemoryInfo:JC,getCPUInfo:QC,getTimeInfo:jC,getSystemInformation:tO,systemInformation:Vde,getTableSize:rO,getMetrics:nO};function jC(){return _n.time()}o(jC,"getTimeInfo");async function QC(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await _n.cpu();d.cpu_speed=await _n.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:A,...S}=await _n.currentLoad();return S.cpus=[],A.forEach(T=>{let{rawLoad:w,rawLoadIdle:L,rawLoadIrq:k,rawLoadNice:te,rawLoadSystem:F,rawLoadUser:V,...X}=T;S.cpus.push(X)}),d.current_load=S,d}catch(e){return cc.error(`error in getCPUInfo: ${e}`),{}}}o(QC,"getCPUInfo");async function JC(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await _n.mem();return Object.assign(s,process.memoryUsage())}catch(e){return cc.error(`error in getMemoryInfo: ${e}`),{}}}o(JC,"getMemoryInfo");async function XC(){let e={core:[],clustering:[]};try{let t=await _n.processes(),r;try{r=Number.parseInt(await kde.readFile(Hde.join(Th.get(Qd.CONFIG_PARAMS.ROOTPATH),Qd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Qd.NODE_ERROR_CODES.ENOENT)cc.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 cc.error(`error in getHDBProcessInfo: ${t}`),e}}o(XC,"getHDBProcessInfo");async function ZC(){let e={};try{if(!Th.get(Qd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await _n.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await _n.fsStats();return e.read_write=u,e.size=await _n.fsSize(),e}catch(t){return cc.error(`error in getDiskInfo: ${t}`),e}}o(ZC,"getDiskInfo");async function eO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Th.get(Qd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await _n.networkInterfaceDefault(),e.latency=await _n.inetChecksite("google.com"),(await _n.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await _n.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return cc.error(`error in getNetworkInfo: ${t}`),e}}o(eO,"getNetworkInfo");async function tO(){if(_T!==void 0)return _T;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await _n.osInfo();e=c;let l=await _n.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,_T=e,_T}catch(t){return cc.error(`error in getSystemInformation: ${t}`),e}}o(tO,"getSystemInformation");async function rO(){let e=[],t=await qde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Gde(n));return e}o(rO,"getTableSize");async function nO(){let e={};for(let t in zC){let r=e[t]={},n=r.tables={};for(let s in zC[t])try{let i=zC[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){cc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(nO,"getMetrics");async function D1(){if(Th.get(Qd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await P1.getNATSReferences(),t=await P1.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(D1,"getNatsStreamInfo");async function Vde(e){let t=new $de;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await tO(),t.time=jC(),t.cpu=await QC(),t.memory=await JC(),t.disk=await ZC(),t.network=await eO(),t.harperdb_processes=await XC(),t.table_size=await rO(),t.metrics=await nO(),t.threads=await L1(),t.replication=await D1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await tO();break;case"time":t.time=jC();break;case"cpu":t.cpu=await QC();break;case"memory":t.memory=await JC();break;case"disk":t.disk=await ZC();break;case"network":t.network=await eO();break;case"harperdb_processes":t.harperdb_processes=await XC();break;case"table_size":t.table_size=await rO();break;case"database_metrics":case"metrics":t.metrics=await nO();break;case"threads":t.threads=await L1();break;case"replication":t.replication=await D1();break;default:break}return t}o(Vde,"systemInformation")});var ea=v((v0e,B1)=>{"use strict";var Kde=kn(),sO=ce(),Yde=require("util"),Kl=(q(),M(W)),v1=le();v1.initSync();var Wde=MN(),U1=fn(),{Node:L0e,NodeSubscription:D0e}=jd(),zde=Xu(),jde=R1(),{RemotePayloadObject:Qde,RemotePayloadSubscription:Jde}=Sh(),{handleHDBError:Xde,hdbErrors:Zde}=Ee(),{HTTP_STATUS_CODES:efe,HDB_ERROR_MSGS:tfe}=Zde,rfe=hi(),nfe=Jd(),{packageJson:sfe}=yt(),{getDatabases:ife}=(Pe(),M(pt)),M0e=Yde.promisify(Wde.authorize),ofe=U1.searchByHash,afe=U1.searchByValue;B1.exports={isEmpty:cfe,getNodeRecord:lfe,upsertNodeRecord:ufe,buildNodePayloads:dfe,checkClusteringEnabled:ffe,getAllNodeRecords:mfe,getSystemInfo:pfe,reverseSubscription:x1};function cfe(e){return e==null}o(cfe,"isEmpty");async function lfe(e){let t=new zde(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return ofe(t)}o(lfe,"getNodeRecord");async function ufe(e){let t=new jde(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Kde.upsert(t)}o(ufe,"upsertNodeRecord");function x1(e){if(sO.isEmpty(e.subscribe)||sO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(x1,"reverseSubscription");function dfe(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=sO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=x1(c),p=ife()[l]?.[u],h=new Jde(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Qde(r,t,s,n)}o(dfe,"buildNodePayloads");function ffe(){if(!v1.get(Kl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xde(new Error,tfe.CLUSTERING_NOT_ENABLED,efe.BAD_REQUEST,void 0,void 0,!0)}o(ffe,"checkClusteringEnabled");async function mfe(){let e=new rfe(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await afe(e))}o(mfe,"getAllNodeRecords");async function pfe(){let e=await nfe.getSystemInformation();return{hdb_version:sfe.version,node_version:e.node_version,platform:e.platform}}o(pfe,"getSystemInfo")});var iO=v((x0e,K1)=>{"use strict";var gT=pr(),F1=ce(),k1=Nt(),H1=(q(),M(W)),ST=Q(),G1=fT(),hfe=cp(),{RemotePayloadObject:Efe}=Sh(),{handleHDBError:q1,hdbErrors:_fe}=Ee(),{HTTP_STATUS_CODES:$1}=_fe,{NodeSubscription:V1}=jd();K1.exports=gfe;async function gfe(e,t){let r;try{r=await gT.request(`${t}.${k1.REQUEST_SUFFIX}`,new Efe(H1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),ST.trace("Response from remote describe all request:",r)}catch(a){ST.error(`addNode received error from describe all request to remote node: ${a}`);let c=gT.requestErrorHandler(a,"add_node",t);throw q1(new Error,c,$1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===k1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw q1(new Error,a,$1.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===H1.SYSTEM_SCHEMA_NAME){await gT.createLocalTableStream(l,c);let h=new V1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=F1.doesSchemaExist(l),d=n[l]!==void 0,f=c?F1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(ST.trace(`addNode creating schema: ${l}`),await G1.createSchema({operation:"create_schema",schema:l})),!f&&m){ST.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new hfe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await G1.createTable(h)}await gT.createLocalTableStream(l,c);let p=new V1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(gfe,"reviewSubscriptions")});var Xd={};be(Xd,{addNodeBack:()=>oO,removeNodeBack:()=>aO,setNode:()=>Rfe});async function Rfe(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=Ai(t)):t=aT(r);let n=(0,W1.validateBySchema)(e,yfe);if(n)throw(0,ta.handleHDBError)(n,n.message,Tfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new ta.ClientError("url or hostname is required for remove_node operation");let p=r,h=Wt(),E=await h.get(p);if(!E)throw new ta.ClientError(p+" does not exist");try{await hh({url:E.url},{operation:$.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){ms.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new ta.ClientError("url required for this operation");let s=ec();if(s==null)throw new ta.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Vs.getReplicationCert)();let p=await(0,Vs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Vs.createCsr)(),ms.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ms.info("Sending CA named",p.name,"to target node",t))}let l={operation:$.ADD_NODE_BACK,hostname:(0,uc.get)(x.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,uc.get)(x.REPLICATION_SHARD)!==void 0&&(l.shard=(0,uc.get)(x.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(Y1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=Y1(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await hh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ms.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(ms.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Vs.setCertTable)({name:Sfe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Vs.setCertTable)({name:it(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,uc.get)(x.REPLICATION_SHARD)!==void 0&&(p.shard=(0,uc.get)(x.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await zo(it(),p)}await zo(u?u.nodeName:f.name??Ai(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function oO(e){ms.trace("addNodeBack received request:",e);let t=await(0,Vs.signCertificate)(e),r;e.csr?(r=t.signingCA,ms.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,ms.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,Vs.getReplicationCertAuth)();if(n.replicates){let i={url:ec(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,uc.get)(x.REPLICATION_SHARD)!==void 0&&(i.shard=(0,uc.get)(x.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await zo(it(),i)}return await zo(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,ms.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function aO(e){ms.trace("removeNodeBack received request:",e),await Wt().delete(e.name)}function Y1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Vs,W1,lc,uc,ms,ta,Sfe,Tfe,yfe,Zd=ie(()=>{Vs=I(fs()),W1=I(ft()),lc=I(require("joi")),uc=I(le());q();ah();Bl();us();ms=I(Q()),ta=I(Ee()),{pki:Sfe}=require("node-forge"),{HTTP_STATUS_CODES:Tfe}=ta.hdbErrors,yfe=lc.default.object({hostname:lc.default.string(),verify_tls:lc.default.boolean(),replicates:lc.default.boolean(),subscriptions:lc.default.array(),revoked_certificates:lc.default.array(),shard:lc.default.number()});o(Rfe,"setNode");o(oO,"addNodeBack");o(aO,"removeNodeBack");o(Y1,"reverseSubscription")});var bT=v((K0e,j1)=>{"use strict";var{handleHDBError:TT,hdbErrors:Afe}=Ee(),{HTTP_STATUS_CODES:yT}=Afe,{addUpdateNodeValidator:bfe}=ET(),RT=Q(),AT=(q(),M(W)),z1=Nt(),Ife=ce(),yh=pr(),Rh=ea(),cO=le(),wfe=iO(),{Node:Nfe,NodeSubscription:Cfe}=jd(),{broadcast:Ofe}=nt(),{setNode:Pfe}=(Zd(),M(Xd)),$0e=le(),V0e=(q(),M(W)),Lfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Dfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Mfe=cO.get(AT.CONFIG_PARAMS.CLUSTERING_NODENAME);j1.exports=vfe;async function vfe(e,t=!1){if(RT.trace("addNode called with:",e),cO.get(AT.CONFIG_PARAMS.REPLICATION_URL)||cO.get(AT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Pfe(e);Rh.checkClusteringEnabled();let r=bfe(e);if(r)throw TT(r,r.message,yT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Rh.getNodeRecord(n);if(!Ife.isEmptyOrZeroLength(f))throw TT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,yT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await wfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=Lfe,a;let c=Rh.buildNodePayloads(s,Mfe,AT.OPERATIONS_ENUM.ADD_NODE,await Rh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new Cfe(p.schema,p.table,p.publish,p.subscribe))}RT.trace("addNode sending remote payload:",c);let u;try{u=await yh.request(`${n}.${z1.REQUEST_SUFFIX}`,c)}catch(f){RT.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await yh.updateRemoteConsumer(E,n)}let m=yh.requestErrorHandler(f,"add_node",n);throw TT(new Error,m,yT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===z1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw TT(new Error,f,yT.INTERNAL_SERVER_ERROR,"error",f)}RT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await yh.updateRemoteConsumer(p,n),p.subscribe===!0&&await yh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new Nfe(n,l,u.system_info);return await Rh.upsertNodeRecord(d),Ofe({type:"nats_update"}),i.length>0?a.message=Dfe:a.message=`Successfully added '${n}' to manifest`,a}o(vfe,"addNode")});var fO=v((z0e,J1)=>{"use strict";var{handleHDBError:lO,hdbErrors:Ufe}=Ee(),{HTTP_STATUS_CODES:uO}=Ufe,{addUpdateNodeValidator:xfe}=ET(),Ah=Q(),IT=(q(),M(W)),Q1=Nt(),W0e=ce(),bh=pr(),Ih=ea(),dO=le(),{cloneDeep:Bfe}=require("lodash"),Ffe=iO(),{Node:kfe,NodeSubscription:Hfe}=jd(),{broadcast:Gfe}=nt(),{setNode:qfe}=(Zd(),M(Xd)),$fe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Vfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Kfe=dO.get(IT.CONFIG_PARAMS.CLUSTERING_NODENAME);J1.exports=Yfe;async function Yfe(e){if(Ah.trace("updateNode called with:",e),dO.get(IT.CONFIG_PARAMS.REPLICATION_URL)??dO.get(IT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return qfe(e);Ih.checkClusteringEnabled();let t=xfe(e);if(t)throw lO(t,t.message,uO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Ih.getNodeRecord(r);s.length>0&&(n=Bfe(s));let{added:i,skipped:a}=await Ffe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=$fe,c;let l=Ih.buildNodePayloads(i,Kfe,IT.OPERATIONS_ENUM.UPDATE_NODE,await Ih.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Ah.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Ah.trace("updateNode sending remote payload:",l);let u;try{u=await bh.request(`${r}.${Q1.REQUEST_SUFFIX}`,l)}catch(d){Ah.error(`updateNode received error from request: ${d}`);let f=bh.requestErrorHandler(d,"update_node",r);throw lO(new Error,f,uO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===Q1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw lO(new Error,d,uO.INTERNAL_SERVER_ERROR,"error",d)}Ah.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await bh.updateRemoteConsumer(m,r),m.subscribe===!0?await bh.updateConsumerIterator(m.schema,m.table,r,"start"):await bh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new kfe(r,[],u.system_info)]),await Wfe(n[0],i,u.system_info),a.length>0?c.message=Vfe:c.message=`Successfully updated '${r}'`,c}o(Yfe,"updateNode");async function Wfe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new Hfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Ih.upsertNodeRecord(n),Gfe({type:"nats_update"})}o(Wfe,"updateNodeTable")});var rK=v((Q0e,tK)=>{"use strict";var eK=require("joi"),{string:X1}=eK.types(),zfe=ft(),Z1=(q(),M(W)),jfe=le(),Qfe=Nt();tK.exports=Jfe;function Jfe(e){let t=X1.invalid(jfe.get(Z1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Qfe.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=eK.object({operation:X1.valid(Z1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return zfe.validateBySchema(e,r)}o(Jfe,"removeNodeValidator")});var wT=v((X0e,aK)=>{"use strict";var{handleHDBError:nK,hdbErrors:Xfe}=Ee(),{HTTP_STATUS_CODES:sK}=Xfe,Zfe=rK(),wh=Q(),iK=ea(),eme=ce(),ef=(q(),M(W)),oK=Nt(),mO=pr(),pO=le(),{RemotePayloadObject:tme}=Sh(),{NodeSubscription:rme}=jd(),nme=ap(),sme=yl(),{broadcast:ime}=nt(),{setNode:ome}=(Zd(),M(Xd)),ame=pO.get(ef.CONFIG_PARAMS.CLUSTERING_NODENAME);aK.exports=cme;async function cme(e){if(wh.trace("removeNode called with:",e),pO.get(ef.CONFIG_PARAMS.REPLICATION_URL)??pO.get(ef.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ome(e);iK.checkClusteringEnabled();let t=Zfe(e);if(t)throw nK(t,t.message,sK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await iK.getNodeRecord(r);if(eme.isEmptyOrZeroLength(n))throw nK(new Error,`Node '${r}' was not found.`,sK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new tme(ef.OPERATIONS_ENUM.REMOVE_NODE,ame,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await mO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await mO.updateRemoteConsumer(new rme(d.schema,d.table,!1,!1),r)}catch(f){wh.error(f)}}try{i=await mO.request(`${r}.${oK.REQUEST_SUFFIX}`,s),wh.trace("Remove node reply from remote node:",r,i)}catch(l){wh.error("removeNode received error from request:",l),a=!0}let c=new nme(ef.SYSTEM_SCHEMA_NAME,ef.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await sme.deleteRecord(c),ime({type:"nats_update"}),i?.status===oK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(wh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(cme,"removeNode")});var uK=v((eBe,lK)=>{"use strict";var cK=require("joi"),{string:lme,array:ume}=cK.types(),dme=ft(),fme=ET();lK.exports=mme;function mme(e){let t=cK.object({operation:lme.valid("configure_cluster").required(),connections:ume.items(fme.validationSchema).required()});return dme.validateBySchema(e,t)}o(mme,"configureClusterValidator")});var hO=v((rBe,hK)=>{"use strict";var dK=(q(),M(W)),NT=Q(),pme=ce(),hme=le(),Eme=wT(),_me=bT(),gme=ea(),Sme=uK(),{handleHDBError:fK,hdbErrors:Tme}=Ee(),{HTTP_STATUS_CODES:mK}=Tme,yme="Configure cluster complete.",Rme="Failed to configure the cluster. Check the logs for more details.",Ame="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";hK.exports=bme;async function bme(e){NT.trace("configure cluster called with:",e);let t=Sme(e);if(t)throw fK(t,t.message,mK.BAD_REQUEST,void 0,void 0,!0);let r=await gme.getAllNodeRecords(),n=[];if(hme.get(dK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await pK(Eme,{operation:dK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}NT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await pK(_me,f,f.node_name);s.push(m)}NT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(NT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(pme.isEmptyOrZeroLength(a))return{message:yme,connections:c};if(l)return{message:Ame,failed_nodes:a,connections:c};throw fK(new Error,Rme,mK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(bme,"configureCluster");async function pK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(pK,"functionWrapper")});var SK=v((sBe,gK)=>{"use strict";var Nh=require("joi"),Ime=ft(),{validateSchemaExists:EK,validateTableExists:wme,validateSchemaName:_K}=Vi(),Nme=Nh.object({operation:Nh.string().valid("purge_stream"),schema:Nh.string().custom(EK).custom(_K).optional(),database:Nh.string().custom(EK).custom(_K).optional(),table:Nh.string().custom(wme).required()});function Cme(e){return Ime.validateBySchema(e,Nme)}o(Cme,"purgeStreamValidator");gK.exports=Cme});var EO=v((oBe,TK)=>{"use strict";var{handleHDBError:Ome,hdbErrors:Pme}=Ee(),{HTTP_STATUS_CODES:Lme}=Pme,Dme=SK(),Mme=pr(),vme=ea();TK.exports=Ume;async function Ume(e){e.schema=e.schema??e.database;let t=Dme(e);if(t)throw Ome(t,t.message,Lme.BAD_REQUEST,void 0,void 0,!0);vme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Mme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Ume,"purgeStream")});var SO=v((cBe,NK)=>{"use strict";var gO=ea(),xme=pr(),OT=le(),tf=(q(),M(W)),Yl=Nt(),Bme=ce(),_O=Q(),{RemotePayloadObject:Fme}=Sh(),{ErrorCode:yK}=require("nats"),{parentPort:RK}=require("worker_threads"),{onMessageByType:kme}=nt(),{getThisNodeName:Hme}=(us(),M(Qo)),{requestClusterStatus:Gme}=(ah(),M(U$)),{getReplicationSharedStatus:qme,getHDBNodeTable:$me}=(Bl(),M(nC)),{CONFIRMATION_STATUS_POSITION:Vme,RECEIVED_VERSION_POSITION:Kme,RECEIVED_TIME_POSITION:Yme,SENDING_TIME_POSITION:Wme,RECEIVING_STATUS_POSITION:zme,RECEIVING_STATUS_RECEIVING:jme}=(CC(),M(wV)),AK=OT.get(tf.CONFIG_PARAMS.CLUSTERING_ENABLED),bK=OT.get(tf.CONFIG_PARAMS.CLUSTERING_NODENAME);NK.exports={clusterStatus:Qme,buildNodeStatus:wK};var IK;kme("cluster-status",async e=>{IK(e)});async function Qme(){if(OT.get(tf.CONFIG_PARAMS.REPLICATION_URL)||OT.get(tf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(RK){RK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{IK=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=qme(u,l,a);c.lastCommitConfirmed=CT(d[Vme]),c.lastReceivedRemoteTime=CT(d[Kme]),c.lastReceivedLocalTime=CT(d[Yme]),c.sendingMessage=CT(d[Wme]),c.lastReceivedStatus=d[zme]===jme?"Receiving":"Waiting"}}}else n=Gme();n.node_name=Hme();let s=$me().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:bK,is_enabled:AK,connections:[]};if(!AK)return e;let t=await gO.getAllNodeRecords();if(Bme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(wK(t[n],e.connections));return await Promise.allSettled(r),e}o(Qme,"clusterStatus");function CT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(CT,"asDate");async function wK(e,t){let r=e.name,n=new Fme(tf.OPERATIONS_ENUM.CLUSTER_STATUS,bK,void 0,await gO.getSystemInfo()),s,i,a=Yl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await xme.request(Yl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Yl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Yl.CLUSTER_STATUS_STATUSES.CLOSED,_O.error(`Error getting node status from ${r} `,s))}catch(l){_O.warn(`Error getting node status from ${r}`,l),l.code===yK.NoResponders?a=Yl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===yK.Timeout?a=Yl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Yl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Jme(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==tf.PRE_4_0_0_VERSION&&await gO.upsertNodeRecord(l)}catch(l){_O.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(wK,"buildNodeStatus");function Jme(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Jme,"NodeStatusObject")});var yO=v((uBe,CK)=>{"use strict";var{handleHDBError:Xme,hdbErrors:Zme}=Ee(),{HTTP_STATUS_CODES:epe}=Zme,tpe=pr(),rpe=ea(),TO=ce(),PT=require("joi"),npe=ft(),spe=2e3,ipe=PT.object({timeout:PT.number().min(1),connected_nodes:PT.boolean(),routes:PT.boolean()});CK.exports=ope;async function ope(e){rpe.checkClusteringEnabled();let t=npe.validateBySchema(e,ipe);if(t)throw Xme(t,t.message,epe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||TO.autoCastBoolean(n),a=s===void 0||TO.autoCastBoolean(s),c={nodes:[]},l=await tpe.getServerList(r??spe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:TO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(ope,"clusterNetwork")});var DK=v((fBe,LK)=>{"use strict";var RO=require("joi"),OK=ft(),{routeConstraints:PK}=CA();LK.exports={setRoutesValidator:ape,deleteRoutesValidator:cpe};function ape(e){let t=RO.object({server:RO.valid("hub","leaf"),routes:PK.required()});return OK.validateBySchema(e,t)}o(ape,"setRoutesValidator");function cpe(e){let t=RO.object({routes:PK.required()});return OK.validateBySchema(e,t)}o(cpe,"deleteRoutesValidator")});var LT=v((pBe,kK)=>{"use strict";var ra=Rt(),AO=ce(),Ks=(q(),M(W)),rf=le(),MK=DK(),{handleHDBError:vK,hdbErrors:lpe}=Ee(),{HTTP_STATUS_CODES:UK}=lpe,xK="cluster routes successfully set",BK="cluster routes successfully deleted";kK.exports={setRoutes:dpe,getRoutes:fpe,deleteRoutes:mpe};function upe(e){let t=ra.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=AO.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?ra.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ra.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:xK,set:i,skipped:s}}o(upe,"setRoutesNats");function dpe(e){let t=MK.setRoutesValidator(e);if(t)throw vK(t,t.message,UK.BAD_REQUEST,void 0,void 0,!0);if(rf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return upe(e);let r=[],n=[],s=rf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{FK(s,i)?n.push(i):(s.push(i),r.push(i))}),ra.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:xK,set:r,skipped:n}}o(dpe,"setRoutes");function FK(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(FK,"existsInArray");function fpe(){if(rf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ra.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return rf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(fpe,"getRoutes");function mpe(e){let t=MK.deleteRoutesValidator(e);if(t)throw vK(t,t.message,UK.BAD_REQUEST,void 0,void 0,!0);if(rf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return ppe(e);let r=[],n=[],s=rf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{FK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),ra.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:BK,deleted:r,skipped:n}}o(mpe,"deleteRoutes");function ppe(e){let t=ra.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=AO.isEmptyOrZeroLength(r)?null:r,ra.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=AO.isEmptyOrZeroLength(n)?null:n,ra.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:BK,deleted:s,skipped:i}}o(ppe,"deleteRoutesNats")});var GK=v((EBe,HK)=>{"use strict";var Ch=require("alasql"),Wl=require("recursive-iterator"),wi=Q(),hpe=ce(),Oh=(q(),M(W)),bO=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,_pe(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,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][Oh.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Epe(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!Oh.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new Ch.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function Epe(e){return e.filter(t=>t[Oh.PERMS_CRUD_ENUM.READ])}o(Epe,"filterReadRestrictedAttrs");function _pe(e,t,r,n,s){gpe(e,t,r,n,s)}o(_pe,"interpretAST");function Ph(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(Ph,"addSchemaTableToMap");function gpe(e,t,r,n,s){if(!e){wi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ch.yy.Insert?Rpe(e,t,r):e instanceof Ch.yy.Select?Spe(e,t,r,n,s):e instanceof Ch.yy.Update?Tpe(e,t,r):e instanceof Ch.yy.Delete?ype(e,t,r):wi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(gpe,"getRecordAttributesAST");function Spe(e,t,r,n,s){if(!e){wi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(hpe.isEmptyOrZeroLength(i)){wi.error("No schema specified");return}e.from.forEach(c=>{Ph(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Ph(c.table,t,r,n,s)});let a=new Wl(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{wi.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 Wl(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{wi.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Wl(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{wi.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new Wl(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{wi.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(Spe,"getSelectAttributes");function Tpe(e,t,r){if(!e){wi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Wl(e.columns),s=e.table.databaseid;Ph(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&IO(e.table.tableid,s,i.columnid,t,r)}o(Tpe,"getUpdateAttributes");function ype(e,t,r){if(!e){wi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Wl(e.where),s=e.table.databaseid;Ph(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&IO(e.table.tableid,s,i.columnid,t,r)}o(ype,"getDeleteAttributes");function Rpe(e,t,r){if(!e){wi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Wl(e.columns),s=e.into.databaseid;Ph(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&IO(e.into.tableid,s,i.columnid,t,r)}o(Rpe,"getInsertAttributes");function IO(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(IO,"pushAttribute");HK.exports=bO});var $K=v((gBe,qK)=>{"use strict";var DT=(q(),M(W)),MT=class{static{o(this,"BaseLicense")}constructor(t=0,r=DT.RAM_ALLOCATION_ENUM.DEFAULT,n=DT.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},wO=class extends MT{static{o(this,"ExtendedLicense")}constructor(t=0,r=DT.RAM_ALLOCATION_ENUM.DEFAULT,n=DT.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};qK.exports={BaseLicense:MT,ExtendedLicense:wO}});var of=v((TBe,jK)=>{"use strict";var sf=require("fs-extra"),vT=(Ug(),M(vg)),KK=require("crypto"),Ape=require("moment"),bpe=require("uuid").v4,gn=Q(),CO=require("path"),Ipe=ce(),zl=(q(),M(W)),{totalmem:VK}=require("os"),wpe=$K().ExtendedLicense,nf="invalid license key format",Npe="061183",Cpe="mofi25",Ope="aes-256-cbc",Ppe=16,Lpe=32,YK=le(),{resolvePath:WK}=Rt();YK.initSync();var NO;jK.exports={validateLicense:zK,generateFingerPrint:Mpe,licenseSearch:LO,getLicense:xpe,checkMemoryLimit:Bpe};function OO(){return CO.join(YK.getHdbBasePath(),zl.LICENSE_KEY_DIR_NAME,zl.LICENSE_FILE_NAME)}o(OO,"getLicenseDirPath");function Dpe(){let e=OO();return WK(CO.join(e,zl.LICENSE_FILE_NAME))}o(Dpe,"getLicenseFilePath");function PO(){let e=OO();return WK(CO.join(e,zl.REG_KEY_FILE_NAME))}o(PO,"getFingerPrintFilePath");async function Mpe(){let e=PO();try{return await sf.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await vpe();throw gn.error(`Error writing fingerprint file to ${e}`),gn.error(t),new Error("There was an error generating the fingerprint")}}o(Mpe,"generateFingerPrint");async function vpe(){let e=bpe(),t=vT.hash(e,vT.HASH_FUNCTION.MD5),r=PO();try{await sf.mkdirp(OO()),await sf.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw gn.error(`Error writing fingerprint file to ${r}`),gn.error(n),new Error("There was an error generating the fingerprint")}return t}o(vpe,"writeFingerprint");function zK(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:zl.RAM_ALLOCATION_ENUM.DEFAULT,version:zl.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return gn.error("empty license key passed to validate."),r;let n=PO(),s=!1;try{s=sf.statSync(n)}catch(i){gn.error(i)}if(s){let i;try{i=sf.readFileSync(n,"utf8")}catch{gn.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(Cpe),c=a[1];c=Buffer.concat([Buffer.from(c)],Ppe);let l=Buffer.concat([Buffer.from(i)],Lpe),u=KK.createDecipheriv(Ope,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(a[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let p=Upe(a[0],i);if(p)d=p;else throw r.valid_license=!1,r.valid_machine=!1,console.error(nf),gn.error(nf),new Error(nf)}let f;if(isNaN(d))try{f=JSON.parse(d),r.version=f.version,r.exp_date=f.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),f.ram_allocation&&(r.ram_allocation=f.ram_allocation)}catch{throw console.error(nf),gn.error(nf),new Error(nf)}else r.exp_date=d;r.exp_date<Ape().valueOf()&&(r.valid_date=!1),vT.validate(a[1],`${Npe}${i}${t}`,vT.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||gn.error("Invalid licence"),r}o(zK,"validateLicense");function Upe(e,t){try{let r=KK.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{gn.warn("Check old license failed")}}o(Upe,"checkOldLicense");function LO(){let e=new wpe,t=[];try{t=sf.readFileSync(Dpe(),"utf-8").split(`\r
|
|
20
|
+
`)}catch(r){r.code==="ENOENT"?gn.debug("no license file found"):gn.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(Ipe.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=zK(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){gn.error("There was an error parsing the license string."),gn.error(s),e.ram_allocation=zl.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return NO=e,e}o(LO,"licenseSearch");async function xpe(){return NO||await LO(),NO}o(xpe,"getLicense");function Bpe(){let e=LO().ram_allocation,t=process.constrainedMemory?.()||VK();if(t=Math.round(Math.min(t,VK())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}o(Bpe,"checkMemoryLimit")});var vO=v((RBe,ZK)=>{var UT=of(),QK=require("chalk"),ps=Q(),JK=require("prompt"),{promisify:Fpe}=require("util"),DO=(q(),M(W)),kpe=require("fs-extra"),Hpe=require("path"),Gpe=ce(),{packageJson:qpe}=yt(),XK=le();XK.initSync();var $pe=require("moment"),Vpe=Fpe(JK.get),Kpe=Hpe.join(XK.getHdbBasePath(),DO.LICENSE_KEY_DIR_NAME,DO.LICENSE_FILE_NAME,DO.LICENSE_FILE_NAME);ZK.exports={getFingerprint:Wpe,setLicense:Ype,parseLicense:MO,register:zpe,getRegistrationInfo:Qpe};async function Ype(e){if(e&&e.key&&e.company){try{ps.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await MO(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw ps.error(r),ps.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(Ype,"setLicense");async function Wpe(){let e={};try{e=await UT.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw ps.error(r),ps.error(t),new Error(r)}return e}o(Wpe,"getFingerprint");async function MO(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");ps.info("Validating license input...");let r=UT.validateLicense(e,t);if(ps.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(ps.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(ps.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{ps.info("writing license to disk"),await kpe.writeFile(Kpe,JSON.stringify({license_key:e,company:t}))}catch(n){throw ps.error("Failed to write License"),n}return"Registration successful."}o(MO,"parseLicense");async function zpe(){let e=await jpe();return MO(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(zpe,"register");async function jpe(){let e=await UT.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:QK.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:QK.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{JK.start()}catch(n){ps.error(n)}let r;try{r=await Vpe(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}o(jpe,"promptForRegistration");async function Qpe(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await UT.getLicense()}catch(r){throw ps.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Gpe.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=qpe.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=$pe.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(Qpe,"getRegistrationInfo")});var tY=v((bBe,eY)=>{"use strict";var Jpe=Nt(),UO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+Jpe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};eY.exports=UO});var sY=v((wBe,nY)=>{"use strict";var rY=Nt(),xO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+rY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+rY.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};nY.exports=xO});var oY=v((CBe,iY)=>{"use strict";var BO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};iY.exports=BO});var cY=v((PBe,aY)=>{"use strict";var Xpe=Nt(),FO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Xpe.SERVER_SUFFIX.ADMIN,this.password=r}};aY.exports=FO});var kT=v((DBe,dY)=>{"use strict";var jl=require("path"),Ql=require("fs-extra"),Zpe=tY(),ehe=sY(),the=oY(),rhe=cY(),kO=as(),cf=ce(),qn=Rt(),BT=(q(),M(W)),Lh=Nt(),{CONFIG_PARAMS:ir}=BT,lf=Q(),Dh=le(),lY=Ji(),HO=pr(),nhe=fs(),af="clustering",she=1e4,uY=50;dY.exports={generateNatsConfig:ohe,removeNatsConfig:ahe,getHubConfigPath:ihe};function ihe(){let e=Dh.get(ir.ROOTPATH);return jl.join(e,af,Lh.NATS_CONFIG_FILES.HUB_SERVER)}o(ihe,"getHubConfigPath");async function ohe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Dh.get(ir.ROOTPATH);Ql.ensureDirSync(jl.join(r,"clustering","leaf")),Dh.initSync();let n=qn.getConfigFromFile(ir.CLUSTERING_TLS_CERT_AUTH),s=qn.getConfigFromFile(ir.CLUSTERING_TLS_PRIVATEKEY),i=qn.getConfigFromFile(ir.CLUSTERING_TLS_CERTIFICATE);!await Ql.exists(i)&&!await Ql.exists(!n)&&await nhe.createNatsCerts();let a=jl.join(r,af,Lh.PID_FILES.HUB),c=jl.join(r,af,Lh.PID_FILES.LEAF),l=qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=jl.join(r,af,Lh.NATS_CONFIG_FILES.HUB_SERVER),d=jl.join(r,af,Lh.NATS_CONFIG_FILES.LEAF_SERVER),f=qn.getConfigFromFile(ir.CLUSTERING_TLS_INSECURE),m=qn.getConfigFromFile(ir.CLUSTERING_TLS_VERIFY),p=qn.getConfigFromFile(ir.CLUSTERING_NODENAME),h=qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await HO.checkNATSServerInstalled()||FT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await kO.listUsers(),g=qn.getConfigFromFile(ir.CLUSTERING_USER),A=await kO.getClusterUser();(cf.isEmpty(A)||A.active!==!0)&&FT(`Invalid cluster user '${cluster_username}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await xT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await xT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await xT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await xT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],T=[];for(let[X,Y]of E.entries())Y.role?.role===BT.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new rhe(Y.username,lY.decrypt(Y.hash))),T.push(new the(Y.username,lY.decrypt(Y.hash))));let w=[],{hub_routes:L}=qn.getClusteringRoutes();if(!cf.isEmptyOrZeroLength(L))for(let X of L)w.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${X.host}:${X.port}`);let k=new Zpe(qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NAME),qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),w,S,T);n==null&&(delete k.tls.ca_file,delete k.leafnodes.tls.ca_file),t=cf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===BT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Ql.writeJson(u,k),lf.trace(`Hub server config written to ${u}`));let te=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,F=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,V=new ehe(qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[te],[F],S,T,i,s,n,f);n==null&&delete V.tls.ca_file,(t===void 0||t===BT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Ql.writeJson(d,V),lf.trace(`Leaf server config written to ${d}`))}o(ohe,"generateNatsConfig");async function xT(e){let t=Dh.get(e);return cf.isEmpty(t)&&FT(`port undefined for '${e}'`),await cf.isPortTaken(t)&&FT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(xT,"isPortAvailable");function FT(e){let t=`Error generating clustering config: ${e}`;lf.error(t),console.error(t),process.exit(1)}o(FT,"generateNatsConfigError");async function ahe(e){let{port:t,config_file:r}=HO.getServerConfig(e),{username:n,decrypt_hash:s}=await kO.getClusterUser(),i=0,a=2e3;for(;i<uY;){try{let d=await HO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){lf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=uY)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&lf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await cf.asyncSetTimeout(u)}let c="0".repeat(she),l=jl.join(Dh.get(ir.ROOTPATH),af,r);await Ql.writeFile(l,c),await Ql.remove(l),lf.notify(e,"started.")}o(ahe,"removeNatsConfig")});var $O={};be($O,{compactOnStart:()=>che,copyDb:()=>_Y});async function che(){dc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,GO.get)(x.ROOTPATH),t=new Map,r=ct();(0,qO.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,HT.join)(e,"backup",n+".mdb"),a=(0,HT.join)(e,qc,n+"-copy.mdb"),c=0;try{c=await fY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){dc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await _Y(n,a),console.log("Backing up",n,"to",i);try{await(0,Jl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{_d()}catch(n){dc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Jl.move)(i,s,{overwrite:!0}),await(0,Jl.remove)((0,HT.join)(e,qc,`${n}-copy.mdb-lock`));try{_d()}catch(n){dc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){dc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,qO.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Jl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw _d(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await fY(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
21
21
|
Total record count before compaction: ${i}, total after: ${c}.
|
|
22
|
-
Database backup has not been removed and can be found here: ${s}`;dc.error(l),console.error(l)}(0,GO.get)(x.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,Jl.remove)(s))}}async function fY(e){let t=await(0,EY.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function _Y(e,t){console.log("copyDb start");let r=ct()[e],n;for(let f in r){n=r[f].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,a=(0,mY.open)(new pY.default(t)),c=a.openDB(GT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=oS(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let A=new hY.OpenDBIObject(!h,h);A.encoding="binary",A.compression=E;let S=n.openDB(m,A);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",A.compression=g;let T=a.openDB(m,A);T.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,T,h,d)}if(i){let m=n.openDB(GT.AUDIT_STORE_NAME,xm);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,A=0,S=1e7,T=null;for(;S-- >0;)try{for(let w of m.getKeys({start:T,transaction:E}))try{T=w;let{value:L,version:k}=m.getEntry(w,{transaction:E});l=p.put(w,L,h?k:void 0),g++,E.openTimer&&(E.openTimer=0),A+=(w?.length||10)+L.length,u++>5e3&&(await l,console.log("copied",g,"entries",A,"bytes"),u=0)}catch(L){console.error("Error copying record",typeof w=="symbol"?"symbol":w,"from",e,"to",t,L)}console.log("finish copying, copied",g,"entries",A,"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)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var mY,HT,Jl,GO,pY,hY,GT,EY,qO,dc,VO=ie(()=>{Pe();mY=require("lmdb"),HT=require("path"),Jl=require("fs-extra"),GO=I(le()),pY=I(jm()),hY=I(zm()),GT=I(Vt());q();No();EY=I(Dl()),qO=I(Rt()),dc=I(Q());o(che,"compactOnStart");o(fY,"getTotalDBRecordCount");o(_Y,"copyDb")});var df=v((GBe,bY)=>{"use strict";var lhe=require("minimist"),{isMainThread:YO,parentPort:vh,threadId:FBe}=require("worker_threads"),ht=(q(),M(W)),ao=Q(),WO=ce(),$T=kT(),qT=pr(),kBe=Nt(),yY=Rt(),Ni=ff(),gY=Jd(),{compactOnStart:uhe}=(VO(),M($O)),dhe=$c(),{restartWorkers:VT,onMessageByType:fhe}=nt(),{handleHDBError:mhe,hdbErrors:phe}=Ee(),{HTTP_STATUS_CODES:hhe}=phe,Uh=le(),{sendOperationToNode:SY,getThisNodeName:Ehe,monitorNodeCAs:_he}=(
|
|
23
|
-
${r.stack}`;throw jO.error(n),IY(new Error)}}}o(Ihe,"getRolePermissions");function whe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[qn.SYSTEM_SCHEMA_NAME]=n[qn.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]=Nhe(t[i]);return}r[i]=OY(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=Che(c,l);r[i].describe||LY.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=QO()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=QO()})}),r}o(whe,"translateRolePermissions");function Nhe(e){let t=OY(!0);return Object.keys(e).forEach(r=>{t.tables[r]=QO(!0,!0,!0,!0,!0)}),t}o(Nhe,"createStructureUserPermissions");function Che(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return qn.TIME_STAMP_NAMES.includes(f)&&(m=NY(f,d[xh])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=wY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=MY(d),s.attribute_permissions.push(d),c||Ohe(d,l)}else if(u!==a){let d;qn.TIME_STAMP_NAMES.includes(u)?d=NY(u):d=wY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=CY(s),s}else return e.describe=CY(e),e}o(Che,"getTableAttrPerms");function CY(e){return LY.filter(t=>e[t]).length>0}o(CY,"getSchemaTableDescribePerm");function MY(e){return DY.filter(t=>e[t]).length>0}o(MY,"getAttributeDescribePerm");function Ohe(e,t){DY.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(Ohe,"checkForHashPerms")});var Bh={};be(Bh,{authentication:()=>VY,bypassAuth:()=>Ghe,login:()=>eP,logout:()=>tP,start:()=>qhe});function Ghe(){$Y=!0}async function VY(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let p=e.isOperationsServer?Bhe?xhe:[]:Uhe?vhe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=Sn.get(x.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new ks([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return YT&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}a.push("Access-Control-Allow-Origin",i),YT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(YT){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await xY.get(l);break}e.session=u||(u={})}let d=o((p,h,E)=>{let g=new Lhe(p,h,Na.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===ci.SUCCESS?KT.info?.(g):KT.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&KT.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await $d(e.peerCertificate,e.mtlsConfig);if(!p.valid)return KT.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Po({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Ue.getUser(h,null,e),d(h,ci.SUCCESS,"mTLS")):Mhe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=Zl.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,A;try{switch(h){case"Basic":let S=atob(E),T=S.indexOf(":");g=S.slice(0,T),A=S.slice(T+1),f=g||A?await Ue.getUser(g,A,e):null;break;case"Bearer":try{f=await DN(E)}catch(w){if(w.message==="invalid token")try{return await AS(E),c({status:-1})}catch{throw w}}break}}catch(S){return khe&&(Zl.get(E)||(Zl.set(E,E),d(g,ci.FAILURE,h))),c({status:401,body:Po({error:S.message},e)})}Zl.set(n,f),Fhe&&d(f.username,ci.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):($Y&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,FY.getSuperUser)());YT&&(e.session.update=function(p){let h=Sn.get(x.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,kY.v4)();let g=Sn.get(x.AUTHENTICATION_COOKIE_DOMAINS),A=h?new Date(Date.now()+(0,ZO.convertToMS)(h)).toUTCString():Hhe,S=r.host&&g?.find(L=>{L.startsWith(".")&&(L=L.slice(1));let k=r.host.indexOf(":");return(k!==-1?r.host.slice(0,k):r.host).endsWith(L)}),w=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${A}; HttpOnly`;S&&(w+=`; Domain=${S}`),E&&(w+="; SameSite=None; Secure"),a?a.push("Set-Cookie",w):m?.headers?.set&&m.headers.set("Set-Cookie",w)}return E&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,xY.put(p,{expiresAt:h?Date.now()+(0,ZO.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Ue.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&xs.loginPath?(m.status=302,m.headers.set("Location",xs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new ks);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function qhe({server:e,port:t,securePort:r}){e.http(VY,t||r?{port:t,securePort:r}:{port:"all"}),BY||(BY=!0,setInterval(()=>{Zl=new Map},Sn.get(x.AUTHENTICATION_CACHETTL)).unref(),Dhe.addListener(()=>{Zl=new Map}))}async function eP(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 tP(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var FY,kY,Sn,HY,GY,ZO,Phe,Lhe,Dhe,qY,Mhe,KT,vhe,Uhe,xhe,Bhe,xY,YT,$Y,Fhe,khe,Hhe,Zl,BY,WT=ie(()=>{FY=I(os());Ur();ka();Nd();Pe();kY=require("uuid"),Sn=I(le());q();HY=I(Q()),GY=I(Np());Pp();ZO=I(ce());nT();Do();({forComponent:Phe,AuthAuditLog:Lhe}=HY.default),{user:Dhe}=GY.default,qY=Phe("authentication"),{debug:Mhe}=qY,KT=qY.withTag("auth-event");Sn.initSync();vhe=Sn.get(x.HTTP_CORSACCESSLIST),Uhe=Sn.get(x.HTTP_CORS),xhe=Sn.get(x.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Bhe=Sn.get(x.OPERATIONSAPI_NETWORK_CORS),xY=Je({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),YT=Sn.get(x.AUTHENTICATION_ENABLESESSIONS)??!0,$Y=process.env.AUTHENTICATION_AUTHORIZELOCAL??Sn.get(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Fhe=Sn.get(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,khe=Sn.get(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Hhe="Tue, 01 Oct 8307 19:33:20 GMT",Zl=new Map;Ue.onInvalidatedUser(()=>{Zl=new Map});o(Ghe,"bypassAuth");o(VY,"authentication");o(qhe,"start");o(eP,"login");o(tP,"logout")});var JY=v((tFe,QY)=>{"use strict";var Ce=require("joi"),KY=require("fs-extra"),YY=require("path"),ps=ft(),WY=le(),zY=(q(),M(W)),jY=Q(),{hdbErrors:$he}=Ee(),{HDB_ERROR_MSGS:Tn}=$he,na=/^[a-zA-Z0-9-_]+$/,Vhe=/^[a-zA-Z0-9-_]+$/;QY.exports={getDropCustomFunctionValidator:Yhe,setCustomFunctionValidator:Whe,addComponentValidator:Jhe,dropCustomFunctionProjectValidator:Xhe,packageComponentValidator:Zhe,deployComponentValidator:eEe,setComponentFileValidator:zhe,getComponentFileValidator:Qhe,dropComponentFileValidator:jhe,addSSHKeyValidator:tEe,updateSSHKeyValidator:rEe,deleteSSHKeyValidator:nEe,setSSHKnownHostsValidator:sEe};function zT(e,t,r){try{let n=WY.get(zY.CONFIG_PARAMS.COMPONENTSROOT),s=YY.join(n,t);return KY.existsSync(s)?e?t:r.message(Tn.PROJECT_EXISTS):e?r.message(Tn.NO_PROJECT):t}catch(n){return jY.error(n),r.message(Tn.VALIDATION_ERR)}}o(zT,"checkProjectExists");function Fh(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(Fh,"checkFilePath");function Khe(e,t,r,n){try{let s=WY.get(zY.CONFIG_PARAMS.COMPONENTSROOT),i=YY.join(s,e,t,r+".js");return KY.existsSync(i)?r:n.message(Tn.NO_FILE)}catch(s){return jY.error(s),n.message(Tn.VALIDATION_ERR)}}o(Khe,"checkFileExists");function Yhe(e){let t=Ce.object({project:Ce.string().pattern(na).custom(zT.bind(null,!0)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(na).custom(Khe.bind(null,e.project,e.type)).custom(Fh).required().messages({"string.pattern.base":Tn.BAD_FILE_NAME})});return ps.validateBySchema(e,t)}o(Yhe,"getDropCustomFunctionValidator");function Whe(e){let t=Ce.object({project:Ce.string().pattern(na).custom(zT.bind(null,!0)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(Fh).required(),function_content:Ce.string().required()});return ps.validateBySchema(e,t)}o(Whe,"setCustomFunctionValidator");function zhe(e){let t=Ce.object({project:Ce.string().pattern(na).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),file:Ce.string().custom(Fh).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ps.validateBySchema(e,t)}o(zhe,"setComponentFileValidator");function jhe(e){let t=Ce.object({project:Ce.string().pattern(na).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),file:Ce.string().custom(Fh).optional()});return ps.validateBySchema(e,t)}o(jhe,"dropComponentFileValidator");function Qhe(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(Fh).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ps.validateBySchema(e,t)}o(Qhe,"getComponentFileValidator");function Jhe(e){let t=Ce.object({project:Ce.string().pattern(na).custom(zT.bind(null,!1)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME})});return ps.validateBySchema(e,t)}o(Jhe,"addComponentValidator");function Xhe(e){let t=Ce.object({project:Ce.string().pattern(na).custom(zT.bind(null,!0)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME})});return ps.validateBySchema(e,t)}o(Xhe,"dropCustomFunctionProjectValidator");function Zhe(e){let t=Ce.object({project:Ce.string().pattern(na).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean(),skip_symlinks:Ce.boolean()});return ps.validateBySchema(e,t)}o(Zhe,"packageComponentValidator");function eEe(e){let t=Ce.object({project:Ce.string().pattern(na).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),package:Ce.string().optional(),restart:Ce.alternatives().try(Ce.boolean(),Ce.string().valid("rolling")).optional()});return ps.validateBySchema(e,t)}o(eEe,"deployComponentValidator");function tEe(e){let t=Ce.object({name:Ce.string().pattern(Vhe).required().messages({"string.pattern.base":Tn.BAD_SSH_KEY_NAME}),key:Ce.string().required(),host:Ce.string().required(),hostname:Ce.string().required(),known_hosts:Ce.string().optional()});return ps.validateBySchema(e,t)}o(tEe,"addSSHKeyValidator");function rEe(e){let t=Ce.object({name:Ce.string().required(),key:Ce.string().required()});return ps.validateBySchema(e,t)}o(rEe,"updateSSHKeyValidator");function nEe(e){let t=Ce.object({name:Ce.string().required()});return ps.validateBySchema(e,t)}o(nEe,"deleteSSHKeyValidator");function sEe(e){let t=Ce.object({known_hosts:Ce.string().required()});return ps.validateBySchema(e,t)}o(sEe,"setSSHKnownHostsValidator")});var Gh=v((nFe,rW)=>{"use strict";var jT=require("joi"),fc=require("path"),mf=require("fs-extra"),{exec:iEe,spawn:oEe}=require("child_process"),aEe=require("util"),cEe=aEe.promisify(iEe),pf=(q(),M(W)),{PACKAGE_ROOT:lEe}=yt(),{handleHDBError:kh,hdbErrors:uEe}=Ee(),{HTTP_STATUS_CODES:Hh}=uEe,eu=le(),dEe=ft(),mc=Q(),{once:fEe}=require("events");eu.initSync();var rP=eu.get(pf.CONFIG_PARAMS.COMPONENTSROOT),XY="npm install --force --omit=dev --json",mEe=`${XY} --dry-run`,pEe=eu.get(pf.CONFIG_PARAMS.ROOTPATH),QT=fc.join(pEe,"ssh");rW.exports={installModules:gEe,auditModules:SEe,installAllRootModules:hEe,uninstallRootModule:EEe,linkHarperdb:_Ee,runCommand:hf};async function hEe(e=!1,t=eu.get(pf.CONFIG_PARAMS.ROOTPATH)){await JT();let r=!1,n=process.env;mf.pathExistsSync(QT)&&mf.readdirSync(QT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+fc.join(QT,"config")+" -o UserKnownHostsFile="+fc.join(QT,"known_hosts"),...process.env},r=!0)});try{let s=eu.get(pf.CONFIG_PARAMS.ROOTPATH),i=fc.join(s,"node_modules","harperdb");mf.lstatSync(i).isSymbolicLink()&&mf.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&mc.error("Error removing symlink:",s)}await hf(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(hEe,"installAllRootModules");async function EEe(e){await hf(`npm uninstall ${e}`,eu.get(pf.CONFIG_PARAMS.ROOTPATH))}o(EEe,"uninstallRootModule");async function _Ee(){await JT(),await hf(`npm link ${lEe}`,eu.get(pf.CONFIG_PARAMS.ROOTPATH))}o(_Ee,"linkHarperdb");async function hf(e,t=void 0,r=process.env){mc.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=oEe(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();mc.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();mc.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await fEe(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(hf,"runCommand");async function gEe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";mc.warn(t,e.projects);let r=tW(e);if(r)throw kh(r,r.message,Hh.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?mEe:XY;await JT(),await eW(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=fc.join(rP,u),f,m=null;try{let{stdout:p,stderr:h}=await cEe(i,{cwd:d});f=p?p.replace(`
|
|
22
|
+
Database backup has not been removed and can be found here: ${s}`;dc.error(l),console.error(l)}(0,GO.get)(x.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,Jl.remove)(s))}}async function fY(e){let t=await(0,EY.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function _Y(e,t){console.log("copyDb start");let r=ct()[e],n;for(let f in r){n=r[f].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,a=(0,mY.open)(new pY.default(t)),c=a.openDB(GT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=oS(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let A=new hY.OpenDBIObject(!h,h);A.encoding="binary",A.compression=E;let S=n.openDB(m,A);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",A.compression=g;let T=a.openDB(m,A);T.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,T,h,d)}if(i){let m=n.openDB(GT.AUDIT_STORE_NAME,xm);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,A=0,S=1e7,T=null;for(;S-- >0;)try{for(let w of m.getKeys({start:T,transaction:E}))try{T=w;let{value:L,version:k}=m.getEntry(w,{transaction:E});l=p.put(w,L,h?k:void 0),g++,E.openTimer&&(E.openTimer=0),A+=(w?.length||10)+L.length,u++>5e3&&(await l,console.log("copied",g,"entries",A,"bytes"),u=0)}catch(L){console.error("Error copying record",typeof w=="symbol"?"symbol":w,"from",e,"to",t,L)}console.log("finish copying, copied",g,"entries",A,"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)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var mY,HT,Jl,GO,pY,hY,GT,EY,qO,dc,VO=ie(()=>{Pe();mY=require("lmdb"),HT=require("path"),Jl=require("fs-extra"),GO=I(le()),pY=I(jm()),hY=I(zm()),GT=I(Vt());q();No();EY=I(Dl()),qO=I(Rt()),dc=I(Q());o(che,"compactOnStart");o(fY,"getTotalDBRecordCount");o(_Y,"copyDb")});var df=v((GBe,bY)=>{"use strict";var lhe=require("minimist"),{isMainThread:YO,parentPort:vh,threadId:FBe}=require("worker_threads"),ht=(q(),M(W)),ao=Q(),WO=ce(),$T=kT(),qT=pr(),kBe=Nt(),yY=Rt(),Ni=ff(),gY=Jd(),{compactOnStart:uhe}=(VO(),M($O)),dhe=$c(),{restartWorkers:VT,onMessageByType:fhe}=nt(),{handleHDBError:mhe,hdbErrors:phe}=Ee(),{HTTP_STATUS_CODES:hhe}=phe,Uh=le(),{sendOperationToNode:SY,getThisNodeName:Ehe,monitorNodeCAs:_he}=(us(),M(Qo)),{getHDBNodeTable:HBe}=(Bl(),M(nC));Uh.initSync();var Mh=`Restarting HarperDB. This may take up to ${ht.RESTART_TIMEOUT_MS/1e3} seconds.`,ghe="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",TY="Clustering is not enabled so cannot be restarted",She="Invalid service",uf,Ys;bY.exports={restart:RY,restartService:zO};YO&&fhe(ht.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await zO({service:e.workerType}):RY({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function RY(e){Ys=Object.keys(e).length===0,uf=await Ni.isServiceRegistered(ht.PROCESS_DESCRIPTORS.HDB);let t=lhe(process.argv);if(t.service){await zO(t);return}if(Ys&&!uf){console.error(ghe);return}if(Ys&&console.log(Mh),uf){Ni.enterPM2Mode(),ao.notify(Mh);let r=dhe(Object.keys(ht.CONFIG_PARAM_MAP),!0);return WO.isEmptyOrZeroLength(Object.keys(r))||yY.updateConfigValue(void 0,void 0,r,!0,!0),The(),Mh}return YO?(ao.notify(Mh),Uh.get(ht.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await uhe(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{VT()},50)):vh.postMessage({type:ht.ITC_EVENT_TYPES.RESTART}),Mh}o(RY,"restart");async function zO(e){let{service:t}=e;if(ht.HDB_PROCESS_SERVICES[t]===void 0)throw mhe(new Error,She,hhe.BAD_REQUEST,void 0,void 0,!0);if(Ni.expectedRestartOfChildren(),uf=await Ni.isServiceRegistered(ht.PROCESS_DESCRIPTORS.HDB),!YO){e.replicated&&_he(),vh.postMessage({type:ht.ITC_EVENT_TYPES.RESTART,workerType:t}),vh.ref(),await new Promise(s=>{vh.on("message",i=>{i.type==="restart-complete"&&(s(),vh.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Ehe())continue;let i;try{({job_id:i}=await SY(s,e))}catch(a){n.push({node:s.name,message:a.message});continue}n.push(await new Promise((a,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let p=new Error("Timed out waiting for restart job to complete");p.replicated=n,c(p)}let m=(await SY(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),a({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let p=new Error(m.message);p.replicated=n,c(p)}},250)}))}return{replicated:n}}return}let r;switch(t){case ht.HDB_PROCESS_SERVICES.clustering:if(!Uh.get(ht.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=TY;break}Ys&&console.log("Restarting clustering"),ao.notify("Restarting clustering"),await AY();break;case ht.HDB_PROCESS_SERVICES.clustering_config:case ht.HDB_PROCESS_SERVICES["clustering config"]:if(!Uh.get(ht.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=TY;break}Ys&&console.log("Restarting clusteringConfig"),ao.notify("Restarting clustering_config"),await Ni.reloadClustering();break;case"custom_functions":case"custom functions":case ht.HDB_PROCESS_SERVICES.harperdb:case ht.HDB_PROCESS_SERVICES.http_workers:case ht.HDB_PROCESS_SERVICES.http:if(Ys&&!uf){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}Ys&&console.log("Restarting httpWorkers"),ao.notify("Restarting http_workers"),Ys?await Ni.restart(ht.PROCESS_DESCRIPTORS.HDB):await VT("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(ao.error(r),Ys&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(zO,"restartService");async function The(){await AY(),await Ni.restart(ht.PROCESS_DESCRIPTORS.HDB),await WO.asyncSetTimeout(2e3),Uh.get(ht.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await KO(),Ys&&(await qT.closeConnection(),process.exit(0))}o(The,"restartPM2Mode");async function AY(){if(!yY.getConfigFromFile(ht.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await gY.getHDBProcessInfo()).clustering.length===0)ao.trace("Clustering not running, restart will start clustering services"),await $T.generateNatsConfig(!0),await Ni.startClusteringProcesses(),await Ni.startClusteringThreads(),await KO(),Ys&&await qT.closeConnection();else{await $T.generateNatsConfig(!0),uf?(ao.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ni.restart(ht.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ni.restart(ht.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await gY.getHDBProcessInfo()).clustering.forEach(s=>{ao.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await WO.asyncSetTimeout(3e3),await KO(),await qT.updateLocalStreams(),Ys&&await qT.closeConnection(),ao.trace("Restart clustering restarting ingest and reply service threads");let t=VT(ht.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=VT(ht.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(AY,"restartClustering");async function KO(){await $T.removeNatsConfig(ht.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await $T.removeNatsConfig(ht.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(KO,"removeNatsConfig")});var UY=v((VBe,vY)=>{"use strict";var $Be=require("lodash"),$n=(q(),M(W)),{handleHDBError:IY,hdbErrors:yhe}=Ee(),{HDB_ERROR_MSGS:Rhe,HTTP_STATUS_CODES:Ahe}=yhe,jO=Q();vY.exports={getRolePermissions:Ihe};var Xl=Object.create(null),bhe=o(e=>({key:e,perms:{}}),"permsTemplateObj"),OY=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),PY=o((e=!1,t=!1,r=!1,n=!1)=>({[$n.PERMS_CRUD_ENUM.READ]:e,[$n.PERMS_CRUD_ENUM.INSERT]:t,[$n.PERMS_CRUD_ENUM.UPDATE]:r,[$n.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),QO=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...PY(t,r,n,s)}),"tablePermsTemplate"),wY=o((e,t=PY())=>({attribute_name:e,describe:MY(t),[xh]:t[xh],[JO]:t[JO],[XO]:t[XO]}),"attrPermsTemplate"),NY=o((e,t=!1)=>({attribute_name:e,describe:t,[xh]:t}),"timestampAttrPermsTemplate"),{READ:xh,INSERT:JO,UPDATE:XO}=$n.PERMS_CRUD_ENUM,LY=Object.values($n.PERMS_CRUD_ENUM),DY=[xh,JO,XO];function Ihe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[$n.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Xl[t]&&Xl[t].key===n)return Xl[t].perms;let s=whe(e,r);return Xl[t]?Xl[t].key=n:Xl[t]=bhe(n),Xl[t].perms=s,s}catch(r){if(!e[$n.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[$n.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<$n.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${role_name}' must be updated to align with new structure from the 2.2.0 release.`;throw jO.error(n),jO.debug(r),IY(new Error,Rhe.OUTDATED_PERMS_TRANSLATION_ERROR,Ahe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
23
|
+
${r.stack}`;throw jO.error(n),IY(new Error)}}}o(Ihe,"getRolePermissions");function whe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[$n.SYSTEM_SCHEMA_NAME]=n[$n.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]=Nhe(t[i]);return}r[i]=OY(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=Che(c,l);r[i].describe||LY.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=QO()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=QO()})}),r}o(whe,"translateRolePermissions");function Nhe(e){let t=OY(!0);return Object.keys(e).forEach(r=>{t.tables[r]=QO(!0,!0,!0,!0,!0)}),t}o(Nhe,"createStructureUserPermissions");function Che(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return $n.TIME_STAMP_NAMES.includes(f)&&(m=NY(f,d[xh])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=wY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=MY(d),s.attribute_permissions.push(d),c||Ohe(d,l)}else if(u!==a){let d;$n.TIME_STAMP_NAMES.includes(u)?d=NY(u):d=wY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=CY(s),s}else return e.describe=CY(e),e}o(Che,"getTableAttrPerms");function CY(e){return LY.filter(t=>e[t]).length>0}o(CY,"getSchemaTableDescribePerm");function MY(e){return DY.filter(t=>e[t]).length>0}o(MY,"getAttributeDescribePerm");function Ohe(e,t){DY.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(Ohe,"checkForHashPerms")});var Bh={};be(Bh,{authentication:()=>VY,bypassAuth:()=>Ghe,login:()=>eP,logout:()=>tP,start:()=>qhe});function Ghe(){$Y=!0}async function VY(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let p=e.isOperationsServer?Bhe?xhe:[]:Uhe?vhe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=Sn.get(x.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new ks([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return YT&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}a.push("Access-Control-Allow-Origin",i),YT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(YT){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await xY.get(l);break}e.session=u||(u={})}let d=o((p,h,E)=>{let g=new Lhe(p,h,Na.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===ci.SUCCESS?KT.info?.(g):KT.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&KT.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await $d(e.peerCertificate,e.mtlsConfig);if(!p.valid)return KT.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Po({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Ue.getUser(h,null,e),d(h,ci.SUCCESS,"mTLS")):Mhe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=Zl.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,A;try{switch(h){case"Basic":let S=atob(E),T=S.indexOf(":");g=S.slice(0,T),A=S.slice(T+1),f=g||A?await Ue.getUser(g,A,e):null;break;case"Bearer":try{f=await DN(E)}catch(w){if(w.message==="invalid token")try{return await AS(E),c({status:-1})}catch{throw w}}break}}catch(S){return khe&&(Zl.get(E)||(Zl.set(E,E),d(g,ci.FAILURE,h))),c({status:401,body:Po({error:S.message},e)})}Zl.set(n,f),Fhe&&d(f.username,ci.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):($Y&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,FY.getSuperUser)());YT&&(e.session.update=function(p){let h=Sn.get(x.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,kY.v4)();let g=Sn.get(x.AUTHENTICATION_COOKIE_DOMAINS),A=h?new Date(Date.now()+(0,ZO.convertToMS)(h)).toUTCString():Hhe,S=r.host&&g?.find(L=>{L.startsWith(".")&&(L=L.slice(1));let k=r.host.indexOf(":");return(k!==-1?r.host.slice(0,k):r.host).endsWith(L)}),w=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${A}; HttpOnly`;S&&(w+=`; Domain=${S}`),E&&(w+="; SameSite=None; Secure"),a?a.push("Set-Cookie",w):m?.headers?.set&&m.headers.set("Set-Cookie",w)}return E&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,xY.put(p,{expiresAt:h?Date.now()+(0,ZO.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Ue.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&xs.loginPath?(m.status=302,m.headers.set("Location",xs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new ks);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function qhe({server:e,port:t,securePort:r}){e.http(VY,t||r?{port:t,securePort:r}:{port:"all"}),BY||(BY=!0,setInterval(()=>{Zl=new Map},Sn.get(x.AUTHENTICATION_CACHETTL)).unref(),Dhe.addListener(()=>{Zl=new Map}))}async function eP(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 tP(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var FY,kY,Sn,HY,GY,ZO,Phe,Lhe,Dhe,qY,Mhe,KT,vhe,Uhe,xhe,Bhe,xY,YT,$Y,Fhe,khe,Hhe,Zl,BY,WT=ie(()=>{FY=I(as());Ur();ka();Nd();Pe();kY=require("uuid"),Sn=I(le());q();HY=I(Q()),GY=I(Np());Pp();ZO=I(ce());nT();Do();({forComponent:Phe,AuthAuditLog:Lhe}=HY.default),{user:Dhe}=GY.default,qY=Phe("authentication"),{debug:Mhe}=qY,KT=qY.withTag("auth-event");Sn.initSync();vhe=Sn.get(x.HTTP_CORSACCESSLIST),Uhe=Sn.get(x.HTTP_CORS),xhe=Sn.get(x.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Bhe=Sn.get(x.OPERATIONSAPI_NETWORK_CORS),xY=Je({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),YT=Sn.get(x.AUTHENTICATION_ENABLESESSIONS)??!0,$Y=process.env.AUTHENTICATION_AUTHORIZELOCAL??Sn.get(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Fhe=Sn.get(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,khe=Sn.get(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Hhe="Tue, 01 Oct 8307 19:33:20 GMT",Zl=new Map;Ue.onInvalidatedUser(()=>{Zl=new Map});o(Ghe,"bypassAuth");o(VY,"authentication");o(qhe,"start");o(eP,"login");o(tP,"logout")});var JY=v((tFe,QY)=>{"use strict";var Ce=require("joi"),KY=require("fs-extra"),YY=require("path"),hs=ft(),WY=le(),zY=(q(),M(W)),jY=Q(),{hdbErrors:$he}=Ee(),{HDB_ERROR_MSGS:Tn}=$he,na=/^[a-zA-Z0-9-_]+$/,Vhe=/^[a-zA-Z0-9-_]+$/;QY.exports={getDropCustomFunctionValidator:Yhe,setCustomFunctionValidator:Whe,addComponentValidator:Jhe,dropCustomFunctionProjectValidator:Xhe,packageComponentValidator:Zhe,deployComponentValidator:eEe,setComponentFileValidator:zhe,getComponentFileValidator:Qhe,dropComponentFileValidator:jhe,addSSHKeyValidator:tEe,updateSSHKeyValidator:rEe,deleteSSHKeyValidator:nEe,setSSHKnownHostsValidator:sEe};function zT(e,t,r){try{let n=WY.get(zY.CONFIG_PARAMS.COMPONENTSROOT),s=YY.join(n,t);return KY.existsSync(s)?e?t:r.message(Tn.PROJECT_EXISTS):e?r.message(Tn.NO_PROJECT):t}catch(n){return jY.error(n),r.message(Tn.VALIDATION_ERR)}}o(zT,"checkProjectExists");function Fh(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(Fh,"checkFilePath");function Khe(e,t,r,n){try{let s=WY.get(zY.CONFIG_PARAMS.COMPONENTSROOT),i=YY.join(s,e,t,r+".js");return KY.existsSync(i)?r:n.message(Tn.NO_FILE)}catch(s){return jY.error(s),n.message(Tn.VALIDATION_ERR)}}o(Khe,"checkFileExists");function Yhe(e){let t=Ce.object({project:Ce.string().pattern(na).custom(zT.bind(null,!0)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(na).custom(Khe.bind(null,e.project,e.type)).custom(Fh).required().messages({"string.pattern.base":Tn.BAD_FILE_NAME})});return hs.validateBySchema(e,t)}o(Yhe,"getDropCustomFunctionValidator");function Whe(e){let t=Ce.object({project:Ce.string().pattern(na).custom(zT.bind(null,!0)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(Fh).required(),function_content:Ce.string().required()});return hs.validateBySchema(e,t)}o(Whe,"setCustomFunctionValidator");function zhe(e){let t=Ce.object({project:Ce.string().pattern(na).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),file:Ce.string().custom(Fh).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return hs.validateBySchema(e,t)}o(zhe,"setComponentFileValidator");function jhe(e){let t=Ce.object({project:Ce.string().pattern(na).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),file:Ce.string().custom(Fh).optional()});return hs.validateBySchema(e,t)}o(jhe,"dropComponentFileValidator");function Qhe(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(Fh).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return hs.validateBySchema(e,t)}o(Qhe,"getComponentFileValidator");function Jhe(e){let t=Ce.object({project:Ce.string().pattern(na).custom(zT.bind(null,!1)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME})});return hs.validateBySchema(e,t)}o(Jhe,"addComponentValidator");function Xhe(e){let t=Ce.object({project:Ce.string().pattern(na).custom(zT.bind(null,!0)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME})});return hs.validateBySchema(e,t)}o(Xhe,"dropCustomFunctionProjectValidator");function Zhe(e){let t=Ce.object({project:Ce.string().pattern(na).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean(),skip_symlinks:Ce.boolean()});return hs.validateBySchema(e,t)}o(Zhe,"packageComponentValidator");function eEe(e){let t=Ce.object({project:Ce.string().pattern(na).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),package:Ce.string().optional(),restart:Ce.alternatives().try(Ce.boolean(),Ce.string().valid("rolling")).optional()});return hs.validateBySchema(e,t)}o(eEe,"deployComponentValidator");function tEe(e){let t=Ce.object({name:Ce.string().pattern(Vhe).required().messages({"string.pattern.base":Tn.BAD_SSH_KEY_NAME}),key:Ce.string().required(),host:Ce.string().required(),hostname:Ce.string().required(),known_hosts:Ce.string().optional()});return hs.validateBySchema(e,t)}o(tEe,"addSSHKeyValidator");function rEe(e){let t=Ce.object({name:Ce.string().required(),key:Ce.string().required()});return hs.validateBySchema(e,t)}o(rEe,"updateSSHKeyValidator");function nEe(e){let t=Ce.object({name:Ce.string().required()});return hs.validateBySchema(e,t)}o(nEe,"deleteSSHKeyValidator");function sEe(e){let t=Ce.object({known_hosts:Ce.string().required()});return hs.validateBySchema(e,t)}o(sEe,"setSSHKnownHostsValidator")});var Gh=v((nFe,rW)=>{"use strict";var jT=require("joi"),fc=require("path"),mf=require("fs-extra"),{exec:iEe,spawn:oEe}=require("child_process"),aEe=require("util"),cEe=aEe.promisify(iEe),pf=(q(),M(W)),{PACKAGE_ROOT:lEe}=yt(),{handleHDBError:kh,hdbErrors:uEe}=Ee(),{HTTP_STATUS_CODES:Hh}=uEe,eu=le(),dEe=ft(),mc=Q(),{once:fEe}=require("events");eu.initSync();var rP=eu.get(pf.CONFIG_PARAMS.COMPONENTSROOT),XY="npm install --force --omit=dev --json",mEe=`${XY} --dry-run`,pEe=eu.get(pf.CONFIG_PARAMS.ROOTPATH),QT=fc.join(pEe,"ssh");rW.exports={installModules:gEe,auditModules:SEe,installAllRootModules:hEe,uninstallRootModule:EEe,linkHarperdb:_Ee,runCommand:hf};async function hEe(e=!1,t=eu.get(pf.CONFIG_PARAMS.ROOTPATH)){await JT();let r=!1,n=process.env;mf.pathExistsSync(QT)&&mf.readdirSync(QT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+fc.join(QT,"config")+" -o UserKnownHostsFile="+fc.join(QT,"known_hosts"),...process.env},r=!0)});try{let s=eu.get(pf.CONFIG_PARAMS.ROOTPATH),i=fc.join(s,"node_modules","harperdb");mf.lstatSync(i).isSymbolicLink()&&mf.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&mc.error("Error removing symlink:",s)}await hf(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(hEe,"installAllRootModules");async function EEe(e){await hf(`npm uninstall ${e}`,eu.get(pf.CONFIG_PARAMS.ROOTPATH))}o(EEe,"uninstallRootModule");async function _Ee(){await JT(),await hf(`npm link ${lEe}`,eu.get(pf.CONFIG_PARAMS.ROOTPATH))}o(_Ee,"linkHarperdb");async function hf(e,t=void 0,r=process.env){mc.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=oEe(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();mc.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();mc.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await fEe(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(hf,"runCommand");async function gEe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";mc.warn(t,e.projects);let r=tW(e);if(r)throw kh(r,r.message,Hh.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?mEe:XY;await JT(),await eW(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=fc.join(rP,u),f,m=null;try{let{stdout:p,stderr:h}=await cEe(i,{cwd:d});f=p?p.replace(`
|
|
24
24
|
`,""):null,m=h?h.replace(`
|
|
25
25
|
`,""):null}catch(p){p.stderr?a[u].npm_error=ZY(p.stderr):a[u].npm_error=p.message;continue}try{a[u].npm_output=JSON.parse(f)}catch{a[u].npm_output=f}try{a[u].npm_error=JSON.parse(m)}catch{a[u].npm_error=m}}return mc.info(`finished installModules with response ${a}`),a.warning=t,a}o(gEe,"installModules");function ZY(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
26
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(ZY,"parseNPMStdErr");async function SEe(e){mc.info(`starting auditModules for request: ${e}`);let t=tW(e);if(t)throw kh(t,t.message,Hh.BAD_REQUEST);let{projects:r}=e;await JT(),await eW(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=fc.join(rP,a);n[a]={npm_output:null,npm_error:null};try{let l=await hf("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=ZY(l.stderr)}}return mc.info(`finished auditModules with response ${n}`),n}o(SEe,"auditModules");async function JT(){return await hf("npm -v"),!0}o(JT,"checkNPMInstalled");async function eW(e){if(!Array.isArray(e)||e.length===0)throw kh(new Error,"projects argument must be an array with at least 1 element",Hh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],a=fc.join(rP,i.toString());if(!await mf.pathExists(a)){t.push(i);continue}let l=fc.join(a,"package.json");await mf.pathExists(l)||r.push(i)}if(t.length>0)throw kh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Hh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw kh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Hh.BAD_REQUEST,void 0,void 0,!0)}o(eW,"checkProjectPaths");function tW(e){let t=jT.object({projects:jT.array().min(1).items(jT.string()).required(),dry_run:jT.boolean().default(!1)});return dEe.validateBySchema(e,t)}o(tW,"modulesValidator")});var sP=v((iFe,cW)=>{"use strict";var Ws=require("fs-extra"),$h=require("path"),qh=Q(),nW=ce(),{PACKAGE_ROOT:TEe}=yt(),nP=(q(),M(W)),aW=le(),yEe=Rt();cW.exports=REe;async function REe(){let e=AEe(),t=aW.get(nP.CONFIG_PARAMS.ROOTPATH),r=$h.join(t,"package.json"),n={dependencies:{harperdb:"file:"+TEe}},s=$h.join(t,"node_modules");Ws.ensureDirSync(s);let i,a=!0,c=!1;try{i=Ws.readJsonSync(r)}catch(l){if(nW.isEmptyOrZeroLength(e))return;if(l.code!==nP.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!nW.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=iW(u);n.dependencies[l]=d+u}if(!a){qh.notify("Installing components"),await oW(r,n,null),await sW(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=iW(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(Ws.statSync(new URL(u+"/package.json")).mtimeMs>Ws.statSync(r).mtimeMs){c=!0;break}}catch(m){qh.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(qh.notify("Removing component",l),c=!0);c&&(qh.notify("Updating components."),await oW(r,n,i),await sW(t,e))}o(REe,"installComponents");function sW(e,t){return Promise.all(t.map(({name:r})=>{let n=$h.join(e,"node_modules",r),s=$h.join(e,"components",r);if(Ws.existsSync(n)&&Ws.lstatSync(n).isDirectory())return Ws.move(n,s,{overwrite:!0}).then(()=>{Ws.symlink(s,n)})}))}o(sW,"moveModuleToComponents");function AEe(){let e=yEe.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(AEe,"getComponentsConfig");function iW(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":$h.extname(e)||Ws.existsSync(e)?"file:":"github:"}o(iW,"getPkgPrefix");async function oW(e,t,r){qh.trace("npm installing components package.json",t),Ws.writeFileSync(e,JSON.stringify(t,null," "));try{await Gh().installAllRootModules(aW.get(nP.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Ws.writeFileSync(e,JSON.stringify(r,null," ")):Ws.unlinkSync(e),n}}o(oW,"installPackages")});var fW={};be(fW,{packageDirectory:()=>bEe});function bEe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];uW.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,lW.join)("cache","webpack")):void 0}).pipe((0,dW.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var lW,uW,dW,mW=ie(()=>{lW=require("path"),uW=I(require("tar-fs")),dW=require("node:zlib");o(bEe,"packageDirectory")});var aP=v(ar=>{"use strict";var Ie=require("fs-extra"),iP=require("fast-glob"),Le=require("path"),IEe=require("tar-fs"),wEe=require("gunzip-maybe"),oP=require("normalize-path"),$n=JY(),kt=Q(),Et=(q(),M(W)),or=le(),XT=Rt(),NEe=ce(),{PACKAGE_ROOT:CEe}=yt(),{handleHDBError:Qt,hdbErrors:OEe}=Ee(),{basename:cFe}=require("path"),PEe=sP(),hW=le(),{Readable:LEe}=require("stream"),{isMainThread:DEe}=require("worker_threads"),{HDB_ERROR_MSGS:tu,HTTP_STATUS_CODES:Jt}=OEe,EW=nt(),{replicateOperation:Ci}=(ls(),M(Qo)),{packageDirectory:MEe}=(mW(),M(fW)),pW=Gh(),vEe=Le.join(CEe,"application-template"),UEe=or.get(Et.CONFIG_PARAMS.ROOTPATH),pc=Le.join(UEe,"ssh"),sa=Le.join(pc,"known_hosts"),{Resources:xEe}=(ka(),M(Vb));function BEe(){kt.trace("getting custom api status");let e={};try{e={port:or.get(Et.CONFIG_PARAMS.HTTP_PORT),directory:or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Qt(new Error,tu.FUNCTION_STATUS,Jt.INTERNAL_SERVER_ERROR,kt.ERR,t)}return e}o(BEe,"customFunctionsStatus");function FEe(){kt.trace("getting custom api endpoints");let e={},t=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT);try{iP.sync(oP(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:iP.sync(oP(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:iP.sync(oP(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Qt(new Error,tu.GET_FUNCTIONS,Jt.INTERNAL_SERVER_ERROR,kt.ERR,r)}return e}o(FEe,"getCustomFunctions");function kEe(e){e.project&&(e.project=Le.parse(e.project).name),e.file&&(e.file=Le.parse(e.file).name);let t=$n.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);kt.trace("getting custom api endpoint file content");let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Le.join(r,n,s,i+".js");try{return Ie.readFileSync(a,{encoding:"utf8"})}catch(c){throw Qt(new Error,tu.GET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,c)}}o(kEe,"getCustomFunction");async function HEe(e){e.project&&(e.project=Le.parse(e.project).name),e.file&&(e.file=Le.parse(e.file).name);let t=$n.setCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);kt.trace("setting custom function file content");let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Ie.outputFileSync(Le.join(r,n,s,i+".js"),a);let c=await Ci(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Qt(new Error,tu.SET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,c)}}o(HEe,"setCustomFunction");async function GEe(e){e.project&&(e.project=Le.parse(e.project).name),e.file&&(e.file=Le.parse(e.file).name);let t=$n.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);kt.trace("dropping custom function file");let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ie.unlinkSync(Le.join(r,n,s,i+".js"));let a=await Ci(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Qt(new Error,tu.DROP_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,a)}}o(GEe,"dropCustomFunction");async function qEe(e){e.project&&(e.project=Le.parse(e.project).name);let t=$n.addComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);kt.trace("adding component");let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Le.join(r,n);Ie.mkdirSync(s,{recursive:!0}),Ie.copySync(vEe,s);let i=await Ci(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Qt(new Error,tu.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,s)}}o(qEe,"addComponent");async function $Ee(e){e.project&&(e.project=Le.parse(e.project).name);let t=$n.dropCustomFunctionProjectValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);kt.trace("dropping custom function project");let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=or.get(Et.CONFIG_PARAMS.APPS);if(!NEe.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return XT.updateConfigValue(Et.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Le.join(r,n);Ie.rmSync(i,{recursive:!0});let a=await Ci(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Qt(new Error,tu.DROP_FUNCTION_PROJECT,Jt.INTERNAL_SERVER_ERROR,kt.ERR,i)}}o($Ee,"dropCustomFunctionProject");async function VEe(e){e.project&&(e.project=Le.parse(e.project).name);let t=$n.packageComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;kt.trace("packaging component",n);let s;try{s=await Ie.realpath(Le.join(r,n))}catch(a){if(a.code!==Et.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Ie.realpath(Le.join(or.get(Et.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Et.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await MEe(s,e)).toString("base64");return{project:n,payload:i}}o(VEe,"packageComponent");async function KEe(e){e.project?e.project=Le.parse(e.project).name:e.package&&(e.project=YEe(e.package));let t=$n.deployComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(kt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Le.join(r,n),i="file:"+c,await Ie.emptyDir(c);let p=LEe.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((g,A)=>{p.pipe(wEe()).pipe(IEe.extract(c,{finish:g})).on("error",A)});let h=await Ie.readdir(c);h.length===1&&h[0]==="package"&&(await Ie.copy(Le.join(c,"package"),c),await Ie.remove(Le.join(c,"package")));let E=Le.join(c,"node_modules");a?await pW.runCommand(a,c):Ie.existsSync(E)||await pW.installAllRootModules(!1,c)}else{await XT.addConfig(n,{package:i}),await PEe();let p=hW.get(Et.CONFIG_PARAMS.ROOTPATH);c=Le.join(p,"node_modules",n)}if(DEe)return;let l=new xEe;l.isWorker=!0;let u=(Vh(),M(ZT)),d;if(u.setErrorReporter(p=>d=p),await u.loadComponent(c,l),d)throw d;kt.info("Installed component");let f=e.restart==="rolling";e.restart=f?!1:e.restart;let m=await Ci(e);if(e.restart===!0)EW.restartWorkers("http"),m.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(f){let h=await(lP(),M(cP)).executeJob({operation:"restart_service",service:"http",replicated:!0});m.restartJobId=h.job_id,m.message=`Successfully deployed: ${n}, restarting HarperDB`}else m.message=`Successfully deployed: ${n}`;return m}o(KEe,"deployComponent");function YEe(e){if(e.startsWith("git+ssh://"))return Le.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Le.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ie.readFileSync(Le.join(e,"package.json"),"utf8"));return Le.basename(t)}catch{}return Le.basename(e)}o(YEe,"getProjectNameFromPackage");async function WEe(){let e=o(async(s,i)=>{try{let a=await Ie.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Le.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await Ie.stat(u),f={name:Le.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return kt.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{name:or.get(Et.CONFIG_PARAMS.COMPONENTSROOT).split(Le.sep).slice(-1).pop(),entries:[]}),{internal:r}=(Ip(),M(zw)),n;try{n=await r.ComponentStatusRegistry.getAggregatedFromAllThreads(r.componentStatusRegistry)}catch(s){kt.debug(`Failed to get component status from threads: ${s.message}`)}for(let s of t.entries){let i=n?.get(s.name);i?s.status=structuredClone(i):s.status={status:"unknown",message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}}}return t}o(WEe,"getComponents");async function zEe(e){let t=$n.getComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let n=XT.getConfigObj()[e.project]||e.project==="harperdb"?Le.join(hW.get(Et.CONFIG_PARAMS.ROOTPATH),"node_modules"):or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ie.stat(Le.join(n,e.project,e.file));return{message:await Ie.readFile(Le.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Et.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Le.join(e.project,e.file)}'`):i}}o(zEe,"getComponentFile");async function jEe(e){let t=$n.setComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Le.join(or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ie.ensureFile(n),await Ie.outputFile(n,e.payload,r)):await Ie.ensureDir(n);let s=await Ci(e);return s.message="Successfully set component: "+e.file,s}o(jEe,"setComponentFile");async function QEe(e){let t=$n.dropComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Le.join(r,n):r,i=Le.join(or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),s),a=Le.join(or.get(Et.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ie.pathExists(a)&&await Ie.unlink(a),await Ie.pathExists(i)&&await Ie.remove(i);let c=Le.join(or.get(Et.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ie.pathExists(c)){let u=JSON.parse(await Ie.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ie.writeFile(c,JSON.stringify(u,null,2),"utf8")}XT.deleteConfigFromFile([r]);let l=await Ci(e);return e.restart===!0?(EW.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(QEe,"dropComponent");async function JEe(e){let t=$n.addSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;kt.trace("adding ssh key",r);let c=Le.join(pc,r+".key"),l=Le.join(pc,"config");if(await Ie.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ie.outputFile(c,n),await Ie.chmod(c,"0600");let u=`#${r}
|
|
26
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(ZY,"parseNPMStdErr");async function SEe(e){mc.info(`starting auditModules for request: ${e}`);let t=tW(e);if(t)throw kh(t,t.message,Hh.BAD_REQUEST);let{projects:r}=e;await JT(),await eW(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=fc.join(rP,a);n[a]={npm_output:null,npm_error:null};try{let l=await hf("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=ZY(l.stderr)}}return mc.info(`finished auditModules with response ${n}`),n}o(SEe,"auditModules");async function JT(){return await hf("npm -v"),!0}o(JT,"checkNPMInstalled");async function eW(e){if(!Array.isArray(e)||e.length===0)throw kh(new Error,"projects argument must be an array with at least 1 element",Hh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],a=fc.join(rP,i.toString());if(!await mf.pathExists(a)){t.push(i);continue}let l=fc.join(a,"package.json");await mf.pathExists(l)||r.push(i)}if(t.length>0)throw kh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Hh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw kh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Hh.BAD_REQUEST,void 0,void 0,!0)}o(eW,"checkProjectPaths");function tW(e){let t=jT.object({projects:jT.array().min(1).items(jT.string()).required(),dry_run:jT.boolean().default(!1)});return dEe.validateBySchema(e,t)}o(tW,"modulesValidator")});var sP=v((iFe,cW)=>{"use strict";var Ws=require("fs-extra"),$h=require("path"),qh=Q(),nW=ce(),{PACKAGE_ROOT:TEe}=yt(),nP=(q(),M(W)),aW=le(),yEe=Rt();cW.exports=REe;async function REe(){let e=AEe(),t=aW.get(nP.CONFIG_PARAMS.ROOTPATH),r=$h.join(t,"package.json"),n={dependencies:{harperdb:"file:"+TEe}},s=$h.join(t,"node_modules");Ws.ensureDirSync(s);let i,a=!0,c=!1;try{i=Ws.readJsonSync(r)}catch(l){if(nW.isEmptyOrZeroLength(e))return;if(l.code!==nP.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!nW.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=iW(u);n.dependencies[l]=d+u}if(!a){qh.notify("Installing components"),await oW(r,n,null),await sW(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=iW(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(Ws.statSync(new URL(u+"/package.json")).mtimeMs>Ws.statSync(r).mtimeMs){c=!0;break}}catch(m){qh.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(qh.notify("Removing component",l),c=!0);c&&(qh.notify("Updating components."),await oW(r,n,i),await sW(t,e))}o(REe,"installComponents");function sW(e,t){return Promise.all(t.map(({name:r})=>{let n=$h.join(e,"node_modules",r),s=$h.join(e,"components",r);if(Ws.existsSync(n)&&Ws.lstatSync(n).isDirectory())return Ws.move(n,s,{overwrite:!0}).then(()=>{Ws.symlink(s,n)})}))}o(sW,"moveModuleToComponents");function AEe(){let e=yEe.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(AEe,"getComponentsConfig");function iW(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":$h.extname(e)||Ws.existsSync(e)?"file:":"github:"}o(iW,"getPkgPrefix");async function oW(e,t,r){qh.trace("npm installing components package.json",t),Ws.writeFileSync(e,JSON.stringify(t,null," "));try{await Gh().installAllRootModules(aW.get(nP.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Ws.writeFileSync(e,JSON.stringify(r,null," ")):Ws.unlinkSync(e),n}}o(oW,"installPackages")});var fW={};be(fW,{packageDirectory:()=>bEe});function bEe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];uW.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,lW.join)("cache","webpack")):void 0}).pipe((0,dW.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var lW,uW,dW,mW=ie(()=>{lW=require("path"),uW=I(require("tar-fs")),dW=require("node:zlib");o(bEe,"packageDirectory")});var aP=v(ar=>{"use strict";var Ie=require("fs-extra"),iP=require("fast-glob"),Le=require("path"),IEe=require("tar-fs"),wEe=require("gunzip-maybe"),oP=require("normalize-path"),Vn=JY(),kt=Q(),Et=(q(),M(W)),or=le(),XT=Rt(),NEe=ce(),{PACKAGE_ROOT:CEe}=yt(),{handleHDBError:Qt,hdbErrors:OEe}=Ee(),{basename:cFe}=require("path"),PEe=sP(),hW=le(),{Readable:LEe}=require("stream"),{isMainThread:DEe}=require("worker_threads"),{HDB_ERROR_MSGS:tu,HTTP_STATUS_CODES:Jt}=OEe,EW=nt(),{replicateOperation:Ci}=(us(),M(Qo)),{packageDirectory:MEe}=(mW(),M(fW)),pW=Gh(),vEe=Le.join(CEe,"application-template"),UEe=or.get(Et.CONFIG_PARAMS.ROOTPATH),pc=Le.join(UEe,"ssh"),sa=Le.join(pc,"known_hosts"),{Resources:xEe}=(ka(),M(Vb));function BEe(){kt.trace("getting custom api status");let e={};try{e={port:or.get(Et.CONFIG_PARAMS.HTTP_PORT),directory:or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Qt(new Error,tu.FUNCTION_STATUS,Jt.INTERNAL_SERVER_ERROR,kt.ERR,t)}return e}o(BEe,"customFunctionsStatus");function FEe(){kt.trace("getting custom api endpoints");let e={},t=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT);try{iP.sync(oP(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:iP.sync(oP(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:iP.sync(oP(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Qt(new Error,tu.GET_FUNCTIONS,Jt.INTERNAL_SERVER_ERROR,kt.ERR,r)}return e}o(FEe,"getCustomFunctions");function kEe(e){e.project&&(e.project=Le.parse(e.project).name),e.file&&(e.file=Le.parse(e.file).name);let t=Vn.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);kt.trace("getting custom api endpoint file content");let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Le.join(r,n,s,i+".js");try{return Ie.readFileSync(a,{encoding:"utf8"})}catch(c){throw Qt(new Error,tu.GET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,c)}}o(kEe,"getCustomFunction");async function HEe(e){e.project&&(e.project=Le.parse(e.project).name),e.file&&(e.file=Le.parse(e.file).name);let t=Vn.setCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);kt.trace("setting custom function file content");let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Ie.outputFileSync(Le.join(r,n,s,i+".js"),a);let c=await Ci(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Qt(new Error,tu.SET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,c)}}o(HEe,"setCustomFunction");async function GEe(e){e.project&&(e.project=Le.parse(e.project).name),e.file&&(e.file=Le.parse(e.file).name);let t=Vn.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);kt.trace("dropping custom function file");let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ie.unlinkSync(Le.join(r,n,s,i+".js"));let a=await Ci(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Qt(new Error,tu.DROP_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,a)}}o(GEe,"dropCustomFunction");async function qEe(e){e.project&&(e.project=Le.parse(e.project).name);let t=Vn.addComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);kt.trace("adding component");let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Le.join(r,n);Ie.mkdirSync(s,{recursive:!0}),Ie.copySync(vEe,s);let i=await Ci(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Qt(new Error,tu.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,s)}}o(qEe,"addComponent");async function $Ee(e){e.project&&(e.project=Le.parse(e.project).name);let t=Vn.dropCustomFunctionProjectValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);kt.trace("dropping custom function project");let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=or.get(Et.CONFIG_PARAMS.APPS);if(!NEe.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return XT.updateConfigValue(Et.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Le.join(r,n);Ie.rmSync(i,{recursive:!0});let a=await Ci(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Qt(new Error,tu.DROP_FUNCTION_PROJECT,Jt.INTERNAL_SERVER_ERROR,kt.ERR,i)}}o($Ee,"dropCustomFunctionProject");async function VEe(e){e.project&&(e.project=Le.parse(e.project).name);let t=Vn.packageComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;kt.trace("packaging component",n);let s;try{s=await Ie.realpath(Le.join(r,n))}catch(a){if(a.code!==Et.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Ie.realpath(Le.join(or.get(Et.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Et.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await MEe(s,e)).toString("base64");return{project:n,payload:i}}o(VEe,"packageComponent");async function KEe(e){e.project?e.project=Le.parse(e.project).name:e.package&&(e.project=YEe(e.package));let t=Vn.deployComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(kt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Le.join(r,n),i="file:"+c,await Ie.emptyDir(c);let p=LEe.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((g,A)=>{p.pipe(wEe()).pipe(IEe.extract(c,{finish:g})).on("error",A)});let h=await Ie.readdir(c);h.length===1&&h[0]==="package"&&(await Ie.copy(Le.join(c,"package"),c),await Ie.remove(Le.join(c,"package")));let E=Le.join(c,"node_modules");a?await pW.runCommand(a,c):Ie.existsSync(E)||await pW.installAllRootModules(!1,c)}else{await XT.addConfig(n,{package:i}),await PEe();let p=hW.get(Et.CONFIG_PARAMS.ROOTPATH);c=Le.join(p,"node_modules",n)}if(DEe)return;let l=new xEe;l.isWorker=!0;let u=(Vh(),M(ZT)),d;if(u.setErrorReporter(p=>d=p),await u.loadComponent(c,l),d)throw d;kt.info("Installed component");let f=e.restart==="rolling";e.restart=f?!1:e.restart;let m=await Ci(e);if(e.restart===!0)EW.restartWorkers("http"),m.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(f){let h=await(lP(),M(cP)).executeJob({operation:"restart_service",service:"http",replicated:!0});m.restartJobId=h.job_id,m.message=`Successfully deployed: ${n}, restarting HarperDB`}else m.message=`Successfully deployed: ${n}`;return m}o(KEe,"deployComponent");function YEe(e){if(e.startsWith("git+ssh://"))return Le.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Le.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ie.readFileSync(Le.join(e,"package.json"),"utf8"));return Le.basename(t)}catch{}return Le.basename(e)}o(YEe,"getProjectNameFromPackage");async function WEe(){let e=o(async(s,i)=>{try{let a=await Ie.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Le.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await Ie.stat(u),f={name:Le.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return kt.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{name:or.get(Et.CONFIG_PARAMS.COMPONENTSROOT).split(Le.sep).slice(-1).pop(),entries:[]}),{internal:r}=(Ip(),M(zw)),n;try{n=await r.ComponentStatusRegistry.getAggregatedFromAllThreads(r.componentStatusRegistry)}catch(s){kt.debug(`Failed to get component status from threads: ${s.message}`)}for(let s of t.entries){let i=n?.get(s.name);i?s.status=structuredClone(i):s.status={status:"unknown",message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}}}return t}o(WEe,"getComponents");async function zEe(e){let t=Vn.getComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let n=XT.getConfigObj()[e.project]||e.project==="harperdb"?Le.join(hW.get(Et.CONFIG_PARAMS.ROOTPATH),"node_modules"):or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ie.stat(Le.join(n,e.project,e.file));return{message:await Ie.readFile(Le.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Et.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Le.join(e.project,e.file)}'`):i}}o(zEe,"getComponentFile");async function jEe(e){let t=Vn.setComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Le.join(or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ie.ensureFile(n),await Ie.outputFile(n,e.payload,r)):await Ie.ensureDir(n);let s=await Ci(e);return s.message="Successfully set component: "+e.file,s}o(jEe,"setComponentFile");async function QEe(e){let t=Vn.dropComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Le.join(r,n):r,i=Le.join(or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),s),a=Le.join(or.get(Et.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ie.pathExists(a)&&await Ie.unlink(a),await Ie.pathExists(i)&&await Ie.remove(i);let c=Le.join(or.get(Et.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ie.pathExists(c)){let u=JSON.parse(await Ie.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ie.writeFile(c,JSON.stringify(u,null,2),"utf8")}XT.deleteConfigFromFile([r]);let l=await Ci(e);return e.restart===!0?(EW.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(QEe,"dropComponent");async function JEe(e){let t=Vn.addSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;kt.trace("adding ssh key",r);let c=Le.join(pc,r+".key"),l=Le.join(pc,"config");if(await Ie.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ie.outputFile(c,n),await Ie.chmod(c,"0600");let u=`#${r}
|
|
27
27
|
Host ${s}
|
|
28
28
|
HostName ${i}
|
|
29
29
|
User git
|
|
30
30
|
IdentityFile ${c}
|
|
31
31
|
IdentitiesOnly yes`;await Ie.pathExists(l)?await Ie.appendFile(l,`
|
|
32
32
|
`+u):await Ie.outputFile(l,u);let d="";if(await Ie.pathExists(sa)||(await Ie.writeFile(sa,""),await Ie.chmod(sa,"0600")),i=="github.com"&&!(await Ie.readFile(sa,"utf8")).includes("github.com"))try{let E=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of E)Ie.appendFile(sa,"github.com "+g+`
|
|
33
|
-
`)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Ie.appendFile(sa,a);let f=await Ci(e);return f.message=`Added ssh key: ${r}${d}`,f}o(JEe,"addSSHKey");async function XEe(e){let t=$n.updateSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n}=e;kt.trace("updating ssh key",r);let s=Le.join(pc,r+".key");if(!await Ie.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Ie.outputFile(s,n);let i=await Ci(e);return i.message=`Updated ssh key: ${r}`,i}o(XEe,"updateSSHKey");async function ZEe(e){let t=$n.deleteSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r}=e;kt.trace("deleting ssh key",r);let n=Le.join(pc,r+".key"),s=Le.join(pc,"config");if(!await Ie.pathExists(n))throw new Error("Key does not exist");let i=await Ie.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Ie.outputFile(s,i),Ie.removeSync(n);let c=await Ci(e);return c.message=`Deleted ssh key: ${r}`,c}o(ZEe,"deleteSSHKey");async function e_e(e){let t=[];return await Ie.pathExists(pc)&&(await Ie.readdir(pc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(e_e,"listSSHKeys");async function t_e(e){let t=$n.setSSHKnownHostsValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{known_hosts:r}=e;await Ie.outputFile(sa,r);let n=await Ci(e);return n.message="Known hosts successfully set",n}o(t_e,"setSSHKnownHosts");async function r_e(e){return await Ie.pathExists(sa)?{known_hosts:await Ie.readFile(sa,"utf8")}:{known_hosts:null}}o(r_e,"getSSHKnownHosts");ar.customFunctionsStatus=BEe;ar.getCustomFunctions=FEe;ar.getCustomFunction=kEe;ar.setCustomFunction=HEe;ar.dropCustomFunction=GEe;ar.addComponent=qEe;ar.dropCustomFunctionProject=$Ee;ar.packageComponent=VEe;ar.deployComponent=KEe;ar.getComponents=WEe;ar.getComponentFile=zEe;ar.setComponentFile=jEe;ar.dropComponent=QEe;ar.addSSHKey=JEe;ar.updateSSHKey=XEe;ar.deleteSSHKey=ZEe;ar.listSSHKeys=e_e;ar.setSSHKnownHosts=t_e;ar.getSSHKnownHosts=r_e});var uP=v((dFe,gW)=>{"use strict";var zs=require("joi"),_W=ft();gW.exports={readTransactionLogValidator:n_e,deleteTransactionLogsBeforeValidator:s_e};function n_e(e){let t=zs.object({schema:zs.string(),database:zs.string(),table:zs.string().required(),from:zs.date().timestamp(),to:zs.date().timestamp(),limit:zs.number().min(1)});return _W.validateBySchema(e,t)}o(n_e,"readTransactionLogValidator");function s_e(e){let t=zs.object({schema:zs.string(),database:zs.string(),table:zs.string().required(),timestamp:zs.date().timestamp().required()});return _W.validateBySchema(e,t)}o(s_e,"deleteTransactionLogsBeforeValidator")});var ry=v((mFe,bW)=>{"use strict";var dP=(q(),M(W)),Kh=pr(),SW=ce(),TW=le(),yW=Ji(),RW=Q(),{handleHDBError:ey,hdbErrors:i_e}=Ee(),{HTTP_STATUS_CODES:ty}=i_e,{readTransactionLogValidator:o_e,deleteTransactionLogsBeforeValidator:a_e}=uP(),AW=ss(),c_e="Logs successfully deleted from transaction log.",l_e="All logs successfully deleted from transaction log.";bW.exports={readTransactionLog:u_e,deleteTransactionLogsBefore:f_e};async function u_e(e){let t=o_e(e);if(t)throw ey(t,t.message,ty.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=SW.checkSchemaTableExist(e.database,e.table);if(r)throw ey(new Error,r,ty.NOT_FOUND,void 0,void 0,!0);return TW.get(dP.CONFIG_PARAMS.CLUSTERING_ENABLED)?await d_e(e):(RW.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)),AW.readAuditLog(e))}o(u_e,"readTransactionLog");async function*d_e(e){let t=yW.createNatsTableStreamName(e.database,e.table),r=await Kh.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===dP.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(d_e,"readTransactionLogNats");async function f_e(e){let t=a_e(e);if(t)throw ey(t,t.message,ty.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!TW.get(dP.CONFIG_PARAMS.CLUSTERING_ENABLED))return RW.info("Delete transaction logs called for Plexus"),AW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=SW.checkSchemaTableExist(r,n);if(i)throw ey(new Error,i,ty.NOT_FOUND,void 0,void 0,!0);let a=yW.createNatsTableStreamName(r,n),{jsm:c}=await Kh.getNATSReferences(),l=await Kh.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=c_e,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=l_e):f=(await Kh.viewStream(a,parseInt(s),1))[0].nats_sequence,await Kh.purgeTableStream(r,n,{seq:f}),d}o(f_e,"deleteTransactionLogsBefore")});var hP={};be(hP,{describeMetric:()=>PW,describeMetricOp:()=>pP,get:()=>CW,getOp:()=>fP,listMetrics:()=>OW,listMetricsOp:()=>mP});async function p_e(e){return(await $_().get(e)).hostname}function IW(e,t){return e.length===0||e.includes(t)}function fP(e){return Yh.trace?.("get_analytics request:",e),CW(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function NW(e){return"conditions"in e?{...e,conditions:e.conditions.map(NW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function CW(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(NW));let a=t??[];IW(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i};return a.length>0&&(c.select=a),Yh.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],IW(a,"node")&&(Yh.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await p_e(d)),Yh.trace?.("get_analytics result:",JSON.stringify(u)),u})}function mP(e){return OW(e.metric_types)}async function OW(e=["builtin"]){let t=[],r=Object.values(xo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function pP(e){return PW(e.metric)}async function PW(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return Yh.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var wW,m_e,Yh,EP=ie(()=>{wW=I(Q());yb();Rb();({forComponent:m_e}=wW.default),Yh=m_e("analytics").conditional;o(p_e,"lookupHostname");o(IW,"isSelected");o(fP,"getOp");o(NW,"conformCondition");o(CW,"get");o(mP,"listMetricsOp");o(OW,"listMetrics");o(pP,"describeMetricOp");o(PW,"describeMetric")});var ny,sy,Wh,iy=ie(()=>{ny={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},sy=Object.keys(ny),Wh="primary"});function DW(e){return LW.validateBySchema(e,g_e)}var zh,LW,h_e,E_e,__e,g_e,MW=ie(()=>{zh=I(require("joi")),LW=I(ft());iy();h_e=sy,E_e=Object.entries(ny).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),__e=o(()=>{let e=zh.default.string().min(1).max(512);return Object.entries(ny).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:zh.default.string().valid(...r.allowedValues).messages({"any.only":E_e[t]})}))}),e.required()},"createStatusValidationSchema"),g_e=zh.default.object({id:zh.default.string().valid(...h_e).required(),status:__e()});o(DW,"validateStatus")});function vW(){_P||(_P=ia.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),gP=new Uint8Array(_P))}function UW(){vW(),gP[0]=1}function xW(){return vW(),gP[0]===1}var _P,gP,SP=ie(()=>{jh();o(vW,"ensureInitialized");o(UW,"requestRestart");o(xW,"restartNeeded")});var bP={};be(bP,{DEFAULT_STATUS_ID:()=>Wh,STATUS_IDS:()=>sy,Status:()=>ia,clear:()=>yP,get:()=>RP,set:()=>AP});function Jh(){return TP||(TP=Je({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),TP}function yP({id:e}){return Qh.debug?.("clearStatus",e),Jh().delete(e)}async function T_e(){Qh.debug?.("getAllStatus");let e=Jh().get({}),t=await bp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=xW();return{systemStatus:e,componentStatus:r,restartRequired:n}}function RP({id:e}){return e?(Qh.debug?.("getStatus",e),Jh().get(e)):(Qh.debug?.("getStatus","all"),T_e())}function AP({status:e,id:t=Wh}){let r=DW({status:e,id:t});if(r)throw(0,oy.handleHDBError)(r,r.message,S_e.BAD_REQUEST);return Qh.debug?.("setStatus",t,e),Jh().put(t,{status:e})}var oy,BW,S_e,TP,ia,Qh,jh=ie(()=>{Pe();oy=I(Ee()),BW=I(Os());MW();iy();Ip();SP();iy();({HTTP_STATUS_CODES:S_e}=oy.hdbErrors);o(Jh,"getStatusTable");ia={get primaryStore(){return Jh().primaryStore}},Qh=(0,BW.loggerWithTag)("status");o(yP,"clearStatus");o(T_e,"getAllStatus");o(RP,"getStatus");o(AP,"setStatus")});function R_e(e){if(typeof e!="string")throw new ay(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new ay(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new Ef(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=y_e.getKey();if(!(0,cy.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new wP("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function A_e(e){if(e?.typ!=="Harper-License")throw new Xh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new Xh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function b_e(e){let t=["id","region","expiration"],r=["level","reads","writes","readBytes","writeBytes","realTimeMessages","realTimeBytes","cpuTime","storage"];for(let n of t)if(typeof e[n]!="string")throw new Zh(`Invalid license payload; ${n} must be a string; got: ${typeof e[n]}`);for(let n of r)if(typeof e[n]!="number")throw new Zh(`Invalid license payload; ${n} must be a number; got: ${typeof e[n]}`)}function kW(e){let{header:t,payload:r}=R_e(e),n;try{n=JSON.parse(t)}catch(i){let a=new Xh;throw a.cause=i,a}A_e(n);let s;try{s=JSON.parse(r)}catch(i){let a=new Zh;throw a.cause=i,a}return b_e(s),s}var cy,FW,IP,ay,Ef,wP,Xh,Zh,y_e,HW=ie(()=>{cy=require("node:crypto"),FW=I(le());q();IP=class{static{o(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
|
|
33
|
+
`)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Ie.appendFile(sa,a);let f=await Ci(e);return f.message=`Added ssh key: ${r}${d}`,f}o(JEe,"addSSHKey");async function XEe(e){let t=Vn.updateSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n}=e;kt.trace("updating ssh key",r);let s=Le.join(pc,r+".key");if(!await Ie.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Ie.outputFile(s,n);let i=await Ci(e);return i.message=`Updated ssh key: ${r}`,i}o(XEe,"updateSSHKey");async function ZEe(e){let t=Vn.deleteSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r}=e;kt.trace("deleting ssh key",r);let n=Le.join(pc,r+".key"),s=Le.join(pc,"config");if(!await Ie.pathExists(n))throw new Error("Key does not exist");let i=await Ie.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Ie.outputFile(s,i),Ie.removeSync(n);let c=await Ci(e);return c.message=`Deleted ssh key: ${r}`,c}o(ZEe,"deleteSSHKey");async function e_e(e){let t=[];return await Ie.pathExists(pc)&&(await Ie.readdir(pc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(e_e,"listSSHKeys");async function t_e(e){let t=Vn.setSSHKnownHostsValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{known_hosts:r}=e;await Ie.outputFile(sa,r);let n=await Ci(e);return n.message="Known hosts successfully set",n}o(t_e,"setSSHKnownHosts");async function r_e(e){return await Ie.pathExists(sa)?{known_hosts:await Ie.readFile(sa,"utf8")}:{known_hosts:null}}o(r_e,"getSSHKnownHosts");ar.customFunctionsStatus=BEe;ar.getCustomFunctions=FEe;ar.getCustomFunction=kEe;ar.setCustomFunction=HEe;ar.dropCustomFunction=GEe;ar.addComponent=qEe;ar.dropCustomFunctionProject=$Ee;ar.packageComponent=VEe;ar.deployComponent=KEe;ar.getComponents=WEe;ar.getComponentFile=zEe;ar.setComponentFile=jEe;ar.dropComponent=QEe;ar.addSSHKey=JEe;ar.updateSSHKey=XEe;ar.deleteSSHKey=ZEe;ar.listSSHKeys=e_e;ar.setSSHKnownHosts=t_e;ar.getSSHKnownHosts=r_e});var uP=v((dFe,gW)=>{"use strict";var zs=require("joi"),_W=ft();gW.exports={readTransactionLogValidator:n_e,deleteTransactionLogsBeforeValidator:s_e};function n_e(e){let t=zs.object({schema:zs.string(),database:zs.string(),table:zs.string().required(),from:zs.date().timestamp(),to:zs.date().timestamp(),limit:zs.number().min(1)});return _W.validateBySchema(e,t)}o(n_e,"readTransactionLogValidator");function s_e(e){let t=zs.object({schema:zs.string(),database:zs.string(),table:zs.string().required(),timestamp:zs.date().timestamp().required()});return _W.validateBySchema(e,t)}o(s_e,"deleteTransactionLogsBeforeValidator")});var ry=v((mFe,bW)=>{"use strict";var dP=(q(),M(W)),Kh=pr(),SW=ce(),TW=le(),yW=Ji(),RW=Q(),{handleHDBError:ey,hdbErrors:i_e}=Ee(),{HTTP_STATUS_CODES:ty}=i_e,{readTransactionLogValidator:o_e,deleteTransactionLogsBeforeValidator:a_e}=uP(),AW=is(),c_e="Logs successfully deleted from transaction log.",l_e="All logs successfully deleted from transaction log.";bW.exports={readTransactionLog:u_e,deleteTransactionLogsBefore:f_e};async function u_e(e){let t=o_e(e);if(t)throw ey(t,t.message,ty.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=SW.checkSchemaTableExist(e.database,e.table);if(r)throw ey(new Error,r,ty.NOT_FOUND,void 0,void 0,!0);return TW.get(dP.CONFIG_PARAMS.CLUSTERING_ENABLED)?await d_e(e):(RW.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)),AW.readAuditLog(e))}o(u_e,"readTransactionLog");async function*d_e(e){let t=yW.createNatsTableStreamName(e.database,e.table),r=await Kh.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===dP.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(d_e,"readTransactionLogNats");async function f_e(e){let t=a_e(e);if(t)throw ey(t,t.message,ty.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!TW.get(dP.CONFIG_PARAMS.CLUSTERING_ENABLED))return RW.info("Delete transaction logs called for Plexus"),AW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=SW.checkSchemaTableExist(r,n);if(i)throw ey(new Error,i,ty.NOT_FOUND,void 0,void 0,!0);let a=yW.createNatsTableStreamName(r,n),{jsm:c}=await Kh.getNATSReferences(),l=await Kh.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=c_e,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=l_e):f=(await Kh.viewStream(a,parseInt(s),1))[0].nats_sequence,await Kh.purgeTableStream(r,n,{seq:f}),d}o(f_e,"deleteTransactionLogsBefore")});var hP={};be(hP,{describeMetric:()=>PW,describeMetricOp:()=>pP,get:()=>CW,getOp:()=>fP,listMetrics:()=>OW,listMetricsOp:()=>mP});async function p_e(e){return(await $_().get(e)).hostname}function IW(e,t){return e.length===0||e.includes(t)}function fP(e){return Yh.trace?.("get_analytics request:",e),CW(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function NW(e){return"conditions"in e?{...e,conditions:e.conditions.map(NW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function CW(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(NW));let a=t??[];IW(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i};return a.length>0&&(c.select=a),Yh.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],IW(a,"node")&&(Yh.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await p_e(d)),Yh.trace?.("get_analytics result:",JSON.stringify(u)),u})}function mP(e){return OW(e.metric_types)}async function OW(e=["builtin"]){let t=[],r=Object.values(xo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function pP(e){return PW(e.metric)}async function PW(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return Yh.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var wW,m_e,Yh,EP=ie(()=>{wW=I(Q());yb();Rb();({forComponent:m_e}=wW.default),Yh=m_e("analytics").conditional;o(p_e,"lookupHostname");o(IW,"isSelected");o(fP,"getOp");o(NW,"conformCondition");o(CW,"get");o(mP,"listMetricsOp");o(OW,"listMetrics");o(pP,"describeMetricOp");o(PW,"describeMetric")});var ny,sy,Wh,iy=ie(()=>{ny={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},sy=Object.keys(ny),Wh="primary"});function DW(e){return LW.validateBySchema(e,g_e)}var zh,LW,h_e,E_e,__e,g_e,MW=ie(()=>{zh=I(require("joi")),LW=I(ft());iy();h_e=sy,E_e=Object.entries(ny).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),__e=o(()=>{let e=zh.default.string().min(1).max(512);return Object.entries(ny).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:zh.default.string().valid(...r.allowedValues).messages({"any.only":E_e[t]})}))}),e.required()},"createStatusValidationSchema"),g_e=zh.default.object({id:zh.default.string().valid(...h_e).required(),status:__e()});o(DW,"validateStatus")});function vW(){_P||(_P=ia.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),gP=new Uint8Array(_P))}function UW(){vW(),gP[0]=1}function xW(){return vW(),gP[0]===1}var _P,gP,SP=ie(()=>{jh();o(vW,"ensureInitialized");o(UW,"requestRestart");o(xW,"restartNeeded")});var bP={};be(bP,{DEFAULT_STATUS_ID:()=>Wh,STATUS_IDS:()=>sy,Status:()=>ia,clear:()=>yP,get:()=>RP,set:()=>AP});function Jh(){return TP||(TP=Je({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),TP}function yP({id:e}){return Qh.debug?.("clearStatus",e),Jh().delete(e)}async function T_e(){Qh.debug?.("getAllStatus");let e=Jh().get({}),t=await bp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=xW();return{systemStatus:e,componentStatus:r,restartRequired:n}}function RP({id:e}){return e?(Qh.debug?.("getStatus",e),Jh().get(e)):(Qh.debug?.("getStatus","all"),T_e())}function AP({status:e,id:t=Wh}){let r=DW({status:e,id:t});if(r)throw(0,oy.handleHDBError)(r,r.message,S_e.BAD_REQUEST);return Qh.debug?.("setStatus",t,e),Jh().put(t,{status:e})}var oy,BW,S_e,TP,ia,Qh,jh=ie(()=>{Pe();oy=I(Ee()),BW=I(Os());MW();iy();Ip();SP();iy();({HTTP_STATUS_CODES:S_e}=oy.hdbErrors);o(Jh,"getStatusTable");ia={get primaryStore(){return Jh().primaryStore}},Qh=(0,BW.loggerWithTag)("status");o(yP,"clearStatus");o(T_e,"getAllStatus");o(RP,"getStatus");o(AP,"setStatus")});function R_e(e){if(typeof e!="string")throw new ay(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new ay(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new Ef(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=y_e.getKey();if(!(0,cy.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new wP("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function A_e(e){if(e?.typ!=="Harper-License")throw new Xh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new Xh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function b_e(e){let t=["id","region","expiration"],r=["level","reads","writes","readBytes","writeBytes","realTimeMessages","realTimeBytes","cpuTime","storage"];for(let n of t)if(typeof e[n]!="string")throw new Zh(`Invalid license payload; ${n} must be a string; got: ${typeof e[n]}`);for(let n of r)if(typeof e[n]!="number")throw new Zh(`Invalid license payload; ${n} must be a number; got: ${typeof e[n]}`)}function kW(e){let{header:t,payload:r}=R_e(e),n;try{n=JSON.parse(t)}catch(i){let a=new Xh;throw a.cause=i,a}A_e(n);let s;try{s=JSON.parse(r)}catch(i){let a=new Zh;throw a.cause=i,a}return b_e(s),s}var cy,FW,IP,ay,Ef,wP,Xh,Zh,y_e,HW=ie(()=>{cy=require("node:crypto"),FW=I(le());q();IP=class{static{o(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
|
|
34
34
|
MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
|
|
35
35
|
-----END PUBLIC KEY-----
|
|
36
36
|
`:this.pem=`-----BEGIN PUBLIC KEY-----
|
|
37
37
|
MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
|
|
38
38
|
-----END PUBLIC KEY-----
|
|
39
|
-
`}getKey(){return(0,cy.createPublicKey)(this.pem)}toString(){return this.pem}},ay=class extends TypeError{static{o(this,"LicenseEncodingError")}},Ef=class extends TypeError{static{o(this,"InvalidLicenseError")}},wP=class extends Ef{static{o(this,"InvalidLicenseSignatureError")}},Xh=class extends Ef{static{o(this,"InvalidHeaderError")}},Zh=class extends Ef{static{o(this,"InvalidPayloadError")}},y_e=new IP(FW.get(x.LICENSE_MODE));o(R_e,"validateLicenseSignature");o(A_e,"validateLicenseHeader");o(b_e,"validateLicensePayload");o(kW,"validateLicense")});var PP={};be(PP,{getUsageLicenses:()=>zW,getUsageLicensesOp:()=>OP,installUsageLicense:()=>KW,installUsageLicenseOp:()=>CP,isActiveLicense:()=>YW,recordUsage:()=>WW});async function CP(e){let t=e.license;try{await KW(t)}catch(r){let n=new $W.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function KW(e){let t=kW(e),{id:r}=t;if(await ve.system.hdb_license.get(r))throw new NP(`A usage license with ${r} already exists`);return ve.system.hdb_license.put(r,t)}function YW(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function WW(e){hs.trace?.("Recording usage into license from analytics");let t,r=new Date().toISOString(),n={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:r}]},s=VW.get(x.LICENSE_REGION);s!==void 0?n.conditions.push({attribute:"region",comparator:"equals",value:s}):hs.warn?.("No region specified for usage license, selecting any valid license");let i=ve.system.hdb_license?.search(n),a;for await(let c of i)if(YW(c)){a=c.id;break}if(a){hs.trace?.("Found license to record usage into:",a);let c={};bt(c,()=>{t=ve.system.hdb_license.update(a,c);for(let l of e)switch(hs.trace?.("Processing analytics record:",l),l.metric){case"db-read":hs.trace?.("Recording read usage into license"),t.addTo("usedReads",l.count),t.addTo("usedReadBytes",l.mean*l.count);break;case"db-write":hs.trace?.("Recording write usage into license"),t.addTo("usedWrites",l.count),t.addTo("usedWriteBytes",l.mean*l.count);break;case"db-message":hs.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",l.count),t.addTo("usedRealTimeBytes",l.mean*l.count);break;case"cpu-usage":l.path==="user"&&(hs.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",l.mean*l.count));break;default:hs.trace?.("Skipping metric:",l.metric)}})}else if(!process.env.DEV_MODE){let c="This server does not have valid usage licenses, this should only be used for educational and development purposes.";GW||(console.error(c),GW=!0),qW===void 0&&(qW=setInterval(()=>{hs.notify(c)},I_e).unref())}}function OP(e){return zW()}function zW(){return ve.system.hdb_license.search({sort:{attribute:"__createdtime__"}})}var $W,hs,VW,NP,GW,qW,I_e,LP=ie(()=>{HW();$W=I(Ee()),hs=I(Q());vs();La();VW=I(le());q();Pe();NP=class extends Error{static{o(this,"ExistingLicenseError")}};o(CP,"installUsageLicenseOp");o(KW,"installUsageLicense");GW=!1,I_e=6e5;o(YW,"isActiveLicense");o(WW,"recordUsage");Ob(WW);o(OP,"getUsageLicensesOp");o(zW,"getUsageLicenses")});var QW=v((kFe,jW)=>{"use strict";var DP=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};jW.exports=DP});var XW=v((GFe,JW)=>{"use strict";var MP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};JW.exports=MP});var UP=v(($Fe,ez)=>{"use strict";var ZW=QW(),w_e=XW(),{HDB_ERROR_MSGS:N_e}=Yr(),vP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=N_e.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new ZW(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new w_e(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new ZW(r,n,[],i);this.unauthorized_access[a]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};ez.exports=vP});var fy=v((KFe,gz)=>{"use strict";var xP=Fn(),ly=fn(),js=fT(),rE=Dl(),BP=yl(),C_e=vC(),O_e=l1(),nE=os(),uy=qp(),Or=Q(),P_e=kC(),L_e=bT(),D_e=fO(),M_e=wT(),v_e=hO(),U_e=EO(),x_e=SO(),B_e=yO(),FP=LT(),oa=ce(),F_e=GK(),kP=vO(),nz=df(),yn=(q(),M(W)),sz=UY(),k_e=Jd(),iz=(Nd(),M(zp)),oz=(WT(),M(Bh)),az=Rt(),_r=aP(),H_e=require("alasql"),cz=ry(),lz=Gh(),_f=ds(),uz=(Zd(),M(Xd)),HP=(EP(),M(hP)),GP=(jh(),M(bP)),dz=(LP(),M(PP)),fz=UP(),{handleHDBError:Vn,hdbErrors:mz}=Ee(),{HDB_ERROR_MSGS:tn,HTTP_STATUS_CODES:eE}=mz,ee=new Map,pz="delete",hc="insert",Qs="read",ru="update",tE="describe",tz=rE.describeSchema.name,rz=rE.describeTable.name,hz={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},G_e={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},q_e="catchup",$_e="handleGetJob",V_e="handleGetJobsByStartDate",dy={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},K_e=[js.createTable.name,js.createAttribute.name,js.dropTable.name,js.dropAttribute.name],Ez={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};ee.set(xP.insert.name,new re(!1,[hc]));ee.set(xP.update.name,new re(!1,[ru]));ee.set(xP.upsert.name,new re(!1,[hc,ru]));ee.set(ly.searchByConditions.name,new re(!1,[Qs]));ee.set(ly.searchByHash.name,new re(!1,[Qs]));ee.set(ly.searchByValue.name,new re(!1,[Qs]));ee.set(ly.search.name,new re(!1,[Qs]));ee.set(js.createSchema.name,new re(!0,[]));ee.set(js.createTable.name,new re(!0,[]));ee.set(js.createAttribute.name,new re(!1,[hc]));ee.set(js.dropSchema.name,new re(!0,[]));ee.set(js.dropTable.name,new re(!0,[]));ee.set(js.dropAttribute.name,new re(!0,[]));ee.set(rE.describeSchema.name,new re(!1,[Qs]));ee.set(rE.describeTable.name,new re(!1,[Qs]));ee.set(BP.deleteRecord.name,new re(!1,[pz]));ee.set(nE.addUser.name,new re(!0,[]));ee.set(nE.alterUser.name,new re(!0,[]));ee.set(nE.dropUser.name,new re(!0,[]));ee.set(nE.listUsersExternal.name,new re(!0,[]));ee.set(uy.listRoles.name,new re(!0,[]));ee.set(uy.addRole.name,new re(!0,[]));ee.set(uy.alterRole.name,new re(!0,[]));ee.set(uy.dropRole.name,new re(!0,[]));ee.set(P_e.name,new re(!0,[]));ee.set(L_e.name,new re(!0,[]));ee.set(D_e.name,new re(!0,[]));ee.set(M_e.name,new re(!0,[]));ee.set(v_e.name,new re(!0,[]));ee.set(U_e.name,new re(!0,[]));ee.set(FP.setRoutes.name,new re(!0,[]));ee.set(FP.getRoutes.name,new re(!0,[]));ee.set(FP.deleteRoutes.name,new re(!0,[]));ee.set(az.setConfiguration.name,new re(!0,[]));ee.set(x_e.clusterStatus.name,new re(!0,[]));ee.set(B_e.name,new re(!0,[]));ee.set(kP.getFingerprint.name,new re(!0,[]));ee.set(kP.setLicense.name,new re(!0,[]));ee.set(BP.deleteFilesBefore.name,new re(!0,[]));ee.set(BP.deleteAuditLogsBefore.name,new re(!0,[]));ee.set(nz.restart.name,new re(!0,[]));ee.set(nz.restartService.name,new re(!0,[]));ee.set(C_e.name,new re(!0,[]));ee.set(O_e.name,new re(!0,[Qs]));ee.set(k_e.systemInformation.name,new re(!0,[]));ee.set(az.getConfiguration.name,new re(!0,[]));ee.set(cz.readTransactionLog.name,new re(!0,[]));ee.set(cz.deleteTransactionLogsBefore.name,new re(!0,[]));ee.set(lz.installModules.name,new re(!0,[]));ee.set(lz.auditModules.name,new re(!0,[]));ee.set(_f.createCsr.name,new re(!0,[]));ee.set(_f.signCertificate.name,new re(!0,[]));ee.set(_f.listCertificates.name,new re(!0,[]));ee.set(_f.addCertificate.name,new re(!0,[]));ee.set(_f.removeCertificate.name,new re(!0,[]));ee.set(_f.getKey.name,new re(!0,[]));ee.set(uz.addNodeBack.name,new re(!0,[]));ee.set(uz.removeNodeBack.name,new re(!0,[]));ee.set(HP.getOp.name,new re(!1,[Qs]));ee.set(HP.listMetricsOp.name,new re(!1,[Qs]));ee.set(HP.describeMetricOp.name,new re(!1,[Qs]));ee.set(GP.clear.name,new re(!0,[]));ee.set(GP.get.name,new re(!0,[]));ee.set(GP.set.name,new re(!0,[]));ee.set(dz.installUsageLicenseOp.name,new re(!0,[]));ee.set(dz.getUsageLicensesOp.name,new re(!0,[]));ee.set(iz.createTokens.name,new re(!1,[]));ee.set(iz.refreshOperationToken.name,new re(!1,[]));ee.set(oz.login.name,new re(!1,[]));ee.set(oz.logout.name,new re(!1,[]));ee.set(_r.customFunctionsStatus.name,new re(!0,[]));ee.set(_r.getCustomFunctions.name,new re(!0,[]));ee.set(_r.getComponents.name,new re(!0,[]));ee.set(_r.getComponentFile.name,new re(!0,[]));ee.set(_r.setComponentFile.name,new re(!0,[]));ee.set(_r.dropComponent.name,new re(!0,[]));ee.set(_r.getCustomFunction.name,new re(!0,[]));ee.set(_r.setCustomFunction.name,new re(!0,[]));ee.set(_r.dropCustomFunction.name,new re(!0,[]));ee.set(_r.addComponent.name,new re(!0,[]));ee.set(_r.dropCustomFunctionProject.name,new re(!0,[]));ee.set(_r.packageComponent.name,new re(!0,[]));ee.set(_r.deployComponent.name,new re(!0,[]));ee.set(_r.addSSHKey.name,new re(!0,[]));ee.set(_r.updateSSHKey.name,new re(!0,[]));ee.set(_r.deleteSSHKey.name,new re(!0,[]));ee.set(_r.listSSHKeys.name,new re(!0,[]));ee.set(_r.setSSHKnownHosts.name,new re(!0,[]));ee.set(_r.getSSHKnownHosts.name,new re(!0,[]));ee.set(kP.getRegistrationInfo.name,new re(!1,[]));ee.set(nE.userInfo.name,new re(!1,[]));ee.set(rE.describeAll.name,new re(!1,[]));ee.set($_e,new re(!1,[]));ee.set(V_e,new re(!0,[]));ee.set(q_e,new re(!0,[]));ee.set(dy.CSV_DATA_LOAD,new re(!1,[hc,ru]));ee.set(dy.CSV_URL_LOAD,new re(!1,[hc,ru]));ee.set(dy.CSV_FILE_LOAD,new re(!1,[hc,ru]));ee.set(dy.IMPORT_FROM_S3,new re(!1,[hc,ru]));ee.set(Ez.EXPORT_TO_S3,new re(!0,[]));ee.set(Ez.EXPORT_LOCAL,new re(!0,[]));ee.set(yn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[pz]));ee.set(yn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[Qs]));ee.set(yn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[hc]));ee.set(yn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[ru]));gz.exports={verifyPerms:W_e,verifyPermsAst:Y_e,verifyBulkLoadAttributePerms:j_e};function Y_e(e,t,r){if(oa.isEmptyOrZeroLength(e))throw Or.info("verify_perms_ast has an empty user parameter"),Vn(new Error);if(oa.isEmptyOrZeroLength(t))throw Or.info("verify_perms_ast has an empty user parameter"),Vn(new Error);if(oa.isEmptyOrZeroLength(r))throw Or.info("verify_perms_ast has a null operation parameter"),Vn(new Error);try{let n=new fz,s=new F_e(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Or.info("No schemas defined in verifyPermsAst(), will not continue."),Vn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&hz[r])throw Vn(new Error,tn.DROP_SYSTEM,eE.FORBIDDEN);if(c&&!l)return null;let u=sz.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof H_e.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=_z(t,r,a,n);return d||(a.forEach((f,m)=>{for(let p=0;p<f.length;p++){let h=s.getAttributesBySchemaTableName(m,f[p]),E=$P(t.role.permission,m,f[p]);qP(h,E,r,f[p],m,n)}}),n.getPermsResponse())}catch(n){throw Vn(n)}}o(Y_e,"verifyPermsAst");function W_e(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Or.info("null required parameter in verifyPerms"),Vn(new Error,tn.DEFAULT_INVALID_REQUEST,eE.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new fz;if(oa.isEmptyOrZeroLength(e.hdb_user?.role)||oa.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Or.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(tn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(yn.SYSTEM_SCHEMA_NAME)||s===yn.SYSTEM_SCHEMA_NAME;if(l&&d&&G_e[e.operation]&&(i===yn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&hz[r])throw Vn(new Error,tn.DROP_SYSTEM,eE.FORBIDDEN);if(l&&!d||u===!0&&(r===js.createSchema.name||r===js.dropSchema.name))return null;if(K_e.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=sz.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===tz||r===rz)&&!f.super_user){if(s===yn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(tn.SCHEMA_PERM_ERROR(s));if(r===tz&&(!f[s]||!f[s][tE]))return c.handleInvalidItem(tn.SCHEMA_NOT_FOUND(s));if(r===rz&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][tE]))return c.handleInvalidItem(tn.TABLE_NOT_FOUND(s,i))}let m=_z(e.hdb_user,r,a,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&yn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[yn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[yn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=E)}let p=z_e(e),h=$P(e.hdb_user?.role?.permission,s,i);return qP(p,h,r,i,s,c,n),c.getPermsResponse()}o(W_e,"verifyPerms");function _z(e,t,r,n,s){if(oa.arrayHasEmptyValues([e,t,r]))throw Or.info("hasPermissions has an invalid parameter"),Vn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Or.info(`operation ${t} not found.`),Vn(new Error,tn.OP_NOT_FOUND(t),eE.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Or.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(tn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][tE]===!1){n.addInvalidItem(tn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(tn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[tE]===!1)n.addInvalidItem(tn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!oa.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Or.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=tn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Or.error(p),Or.error(m),Vn(mz.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(_z,"hasPermissions");function qP(e,t,r,n,s,i,a){if(!e||!t)throw Or.info("no attributes specified in checkAttributePerms."),Vn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Or.info(`no permissions found for ${r} in checkAttributePerms().`),Vn(new Error);if(oa.isEmptyOrZeroLength(t))return Or.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[tE]===!1){i.addInvalidItem(tn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(yn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Qs)throw Vn(new Error,tn.SYSTEM_TIMESTAMP_PERMS_ERR,eE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(tn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(qP,"checkAttributePerms");function z_e(e){let t=new Set;try{if(e.action)return t;if(e.operation===yn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Or.info(r)}return t}o(z_e,"getRecordAttributes");function $P(e,t,r){let n=new Map;if(oa.isEmpty(e))return Or.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{Or.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o($P,"getAttributePermissions");function j_e(e,t,r,n,s,i,a){let c=new Set(i),l=$P(e,n,s);qP(c,l,t,s,n,a,r)}o(j_e,"verifyBulkLoadAttributePerms")});var py=v((WFe,Az)=>{"use strict";Az.exports={evaluateSQL:cge,processAST:Rz,convertSQLToAST:yz,checkASTPermissions:Tz};var Q_e=Fn(),Sz=require("util"),J_e=Sz.callbackify(Q_e.insert),X_e=fn().search,Z_e=Bq().update,ege=Sz.callbackify(Z_e),tge=kq().convertDelete,Ec=require("alasql"),rge=fy(),my=Q(),nge=Bg(),sge=ce(),sE=(q(),M(W)),{hdbErrors:ige,handleHDBError:VP}=Ee(),{HTTP_STATUS_CODES:KP}=ige;nge(Ec);var oge=403,age="There was a problem performing this insert. Please check the logs and try again.",YP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function cge(e,t){let r=e.parsed_sql_object;if(!r){r=yz(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ec.yy.Insert?n=s.into.databaseid:s instanceof Ec.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ec.yy.Update||s instanceof Ec.yy.Delete?n=s.table.databaseid:my.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ec.yy.Select)&&sge.isEmptyOrZeroLength(n))return t("No schema specified",null)}Rz(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(cge,"evaluateSQL");function Tz(e,t){let r;try{r=rge.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(Tz,"checkASTPermissions");function yz(e){let t=new YP;if(!e)throw VP(new Error,"The 'sql' parameter is missing from the request body",KP.BAD_REQUEST);try{let r=e.trim(),n=Ec.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
40
|
-
`);throw n[1]?VP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,KP.BAD_REQUEST):VP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",KP.BAD_REQUEST)}return t}o(yz,"convertSQLToAST");function Rz(e,t,r){try{let n=lge;if(!e.bypass_auth&&!t.permissions_checked){let i=Tz(e,t);if(i&&i.length>0)return r(oge,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case sE.VALID_SQL_OPS_ENUM.SELECT:n=X_e,s=t.ast.statements[0];break;case sE.VALID_SQL_OPS_ENUM.INSERT:n=uge;break;case sE.VALID_SQL_OPS_ENUM.UPDATE:n=ege;break;case sE.VALID_SQL_OPS_ENUM.DELETE:n=tge;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(Rz,"processAST");function lge(e,t){my.info(e),t("unknown sql statement")}o(lge,"nullFunction");function uge({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=dge(i,e.values)}catch(a){return r(a)}J_e(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){my.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(uge,"convertInsert");function dge(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=Ec.compile(`SELECT ${s.toString()} AS [${sE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw my.error(r),new Error(age)}}o(dge,"createDataObjects")});var XP=v((JFe,Nz)=>{var gy=require("clone"),Sy=ft(),fge=ce(),Ey=(q(),M(W)),jFe=Q(),WP=require("fs"),jP=require("joi"),{string:_y}=jP.types(),{hdbErrors:mge,handleHDBError:hy}=Ee(),{HDB_ERROR_MSGS:QFe,HTTP_STATUS_CODES:zP}=mge,{commonValidators:gf}=Vi(),bz=" is required",pge=["insert","update","upsert"],QP={database:{presence:!1,format:gf.schema_format,length:gf.schema_length},schema:{presence:!1,format:gf.schema_format,length:gf.schema_length},table:{presence:!0,format:gf.schema_format,length:gf.schema_length},action:{inclusion:{within:pge,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},hge={schema:_y.required(),table:_y.required(),action:_y.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Ege,AWS_SECRET:_ge,AWS_BUCKET:gge,AWS_FILE_KEY:Sge,REGION:Tge}=Ey.S3_BUCKET_AUTH_KEYS,yge={s3:{presence:!0},[`s3.${Ege}`]:{presence:!0,type:"String"},[`s3.${_ge}`]:{presence:!0,type:"String"},[`s3.${gge}`]:{presence:!0,type:"String"},[`s3.${Sge}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Tge}`]:{presence:!0,type:"String"}},Iz=gy(QP);Iz.data.presence={message:bz};var wz=gy(QP);wz.file_path.presence={message:bz};var Rge=Object.assign(gy(QP),yge),JP=gy(hge);JP.csv_url=_y.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();JP.passthrough_headers=jP.object();function Age(e){let t=Sy.validateObject(e,Iz);return Ty(e,t)}o(Age,"dataObject");function bge(e){let t=Sy.validateBySchema(e,jP.object(JP));return Ty(e,t)}o(bge,"urlObject");function Ige(e){let t=Sy.validateObject(e,wz);return Ty(e,t)}o(Ige,"fileObject");function wge(e){let t=Sy.validateObject(e,Rge);return Ty(e,t)}o(wge,"s3FileObject");function Ty(e,t){if(!t){let r=fge.checkGlobalSchemaTable(e.schema,e.table);if(r)return hy(new Error,r,zP.BAD_REQUEST);if(e.operation===Ey.OPERATIONS_ENUM.CSV_FILE_LOAD)try{WP.accessSync(e.file_path,WP.constants.R_OK|WP.constants.F_OK)}catch(n){return n.code===Ey.NODE_ERROR_CODES.ENOENT?hy(n,`No such file or directory ${n.path}`,zP.BAD_REQUEST):n.code===Ey.NODE_ERROR_CODES.EACCES?hy(n,`Permission denied ${n.path}`,zP.BAD_REQUEST):hy(n)}}return t}o(Ty,"postValidateChecks");Nz.exports={dataObject:Age,urlObject:bge,fileObject:Ige,s3FileObject:wge}});var ZP=v((ZFe,Cz)=>{"use strict";var iE=Q(),yy=(q(),M(W));async function Nge(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===yy.OPERATIONS_ENUM.INSERT||t.operation===yy.OPERATIONS_ENUM.UPDATE||t.operation===yy.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===yy.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(iE.info(i.message),i):i.http_resp_msg?(iE.error(`Error calling operation: ${e.name}`),iE.error(i.http_resp_msg),i):(iE.error(`Error calling operation: ${e.name}`),iE.error(i),i)}}o(Nge,"callOperationFunctionAsAwait");Cz.exports={callOperationFunctionAsAwait:Nge}});var eL=v((tke,Pz)=>{"use strict";var{S3:Cge,GetObjectCommand:Oge}=require("@aws-sdk/client-s3");Pz.exports={getFileStreamFromS3:Pge,getS3AuthObj:Oz};async function Pge(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Oz(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Oge(r))).Body}o(Pge,"getFileStreamFromS3");function Oz(e,t,r){return new Cge({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(Oz,"getS3AuthObj")});var Dz=v((nke,Lz)=>{"use strict";var tL=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},rL=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Lz.exports={BulkLoadFileObject:tL,BulkLoadDataObject:rL}});var sL=v((ike,Mz)=>{"use strict";var nL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Mz.exports=nL});var uL=v((dke,Qz)=>{"use strict";var Ry=Fn(),by=XP(),Lge=require("needle"),Oi=(q(),M(W)),ake=Nt(),Sf=ce(),{handleHDBError:Xt,hdbErrors:qz}=Ee(),{HTTP_STATUS_CODES:rn,HDB_ERROR_MSGS:Pr,CHECK_LOGS_WRAPPER:su}=qz,Tf=Q(),iL=require("papaparse");Sf.promisifyPapaParse();var Pi=require("fs-extra"),Dge=require("path"),{chain:vz}=require("stream-chain"),Uz=require("stream-json/streamers/StreamArray"),xz=require("stream-json/utils/Batch"),Bz=require("stream-chain/utils/comp"),{finished:Fz}=require("stream"),Mge=le(),$z=ZP(),vge=eL(),{BulkLoadFileObject:aL,BulkLoadDataObject:Uge}=Dz(),cL=UP(),{verifyBulkLoadAttributePerms:Vz}=fy(),cke=sL(),lke=pr(),uke=Ji(),{databases:xge}=(Pe(),M(pt)),{coerceType:Bge}=(rg(),M(dG)),kz="No records parsed from csv file.",nu=`${Mge.get("HDB_ROOT")}/tmp`,{schemaRegex:Fge}=Vi(),Hz=1024*1024*2,Gz=5e3,kge={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Qz.exports={csvDataLoad:Hge,csvURLLoad:Gge,csvFileLoad:qge,importFromS3:$ge};async function Hge(e,t){let r=by.dataObject(e);if(r)throw Xt(r,r.message,rn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Wz(e.schema,e.table),i=iL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:oL.bind(null,s),dynamicTyping:!1}),a=new cL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&Vz(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Xt(new Error,c,rn.BAD_REQUEST,void 0,void 0,!0);let l=new Uge(e.action,e.schema,e.table,i.data);return n=await $z.callOperationFunctionAsAwait(zz,l,null),n.message===kz?kz:jz(n.records,n.number_written)}catch(s){throw iu(s)}}o(Hge,"csvDataLoad");async function Gge(e){let t=by.urlObject(e);if(t)throw Xt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${nu}/${r}`;try{await Vge(e,r)}catch(s){throw Tf.error(Pr.DOWNLOAD_FILE_ERR(r)+" - "+s),Xt(s,su(Pr.DOWNLOAD_FILE_ERR(r)))}try{let s=new aL(this.job_operation_function.name,e.action,e.schema,e.table,n,Oi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await lL(s);return await Ay(n),i}catch(s){throw await Ay(n),iu(s)}}o(Gge,"csvURLLoad");async function qge(e){let t=by.fileObject(e);if(t)throw Xt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=new aL(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Oi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await lL(r)}catch(n){throw iu(n)}}o(qge,"csvFileLoad");async function $ge(e){let t=by.s3FileObject(e);if(t)throw Xt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Dge.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${nu}/${s}`;let i=new aL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Kge(s,e);let a=await lL(i);return await Ay(r),a}catch(n){throw await Ay(r),iu(n)}}o($ge,"importFromS3");async function Vge(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Lge("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw Xt(n,s,n.statusCode,Oi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Wge(r,e.csv_url),await Yge(t,r.raw)}o(Vge,"downloadCSVFile");async function Kge(e,t){try{let r=`${nu}/${e}`;await Pi.mkdirp(nu),await Pi.writeFile(`${nu}/${e}`,"",{flag:"a+"});let n=await Pi.createWriteStream(r),s=await vge.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){Tf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Tf.error(Pr.S3_DOWNLOAD_ERR+" - "+r),Xt(r,su(Pr.S3_DOWNLOAD_ERR))}}o(Kge,"downloadFileFromS3");async function Yge(e,t){try{await Pi.mkdirp(nu),await Pi.writeFile(`${nu}/${e}`,t)}catch(r){throw Tf.error(Pr.WRITE_TEMP_FILE_ERR),Xt(r,su(Pr.DEFAULT_BULK_LOAD_ERR))}}o(Yge,"writeFileToTempFolder");async function Ay(e){if(e)try{await Pi.access(e),await Pi.unlink(e)}catch{Tf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(Ay,"deleteTempFile");function Wge(e,t){if(e.statusCode!==qz.HTTP_STATUS_CODES.OK)throw Xt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,rn.BAD_REQUEST);if(!kge[e.headers["content-type"]])throw Xt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,rn.BAD_REQUEST);if(!e.raw)throw Xt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,rn.BAD_REQUEST)}o(Wge,"validateURLResponse");async function lL(e){try{let t;switch(e.file_type){case Oi.VALID_S3_FILE_TYPES.CSV:t=await zge(e);break;case Oi.VALID_S3_FILE_TYPES.JSON:t=await jge(e);break;default:throw Xt(new Error,Pr.DEFAULT_BULK_LOAD_ERR,rn.BAD_REQUEST,Oi.LOG_LEVELS.ERROR,Pr.INVALID_FILE_EXT_ERR(e))}return jz(t.records,t.number_written)}catch(t){throw iu(t)}}o(lL,"fileLoad");async function Kz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Ry.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&Vz(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Xt(c);r(l)}}o(Kz,"validateChunk");async function Yz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Sf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!Sf.isEmpty(c)&&!Sf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await $z.callOperationFunctionAsAwait(zz,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Xt(c,su(Pr.INSERT_CSV_ERR),rn.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Pr.INSERT_CSV_ERR+" - "+c);r(l)}}o(Yz,"insertChunk");async function zge(e){let t={records:0,number_written:0},r=Wz(e.schema,e.table);try{let n=new cL,s=Pi.createReadStream(e.file_path,{highWaterMark:Hz});s.setEncoding("utf8"),await iL.parsePromise(s,Kz.bind(null,e,n),oL.bind(null,r));let i=n.getPermsResponse();if(i)throw Xt(new Error,i,rn.BAD_REQUEST);return s=Pi.createReadStream(e.file_path,{highWaterMark:Hz}),s.setEncoding("utf8"),await iL.parsePromise(s,Yz.bind(null,e,t),oL.bind(null,r)),s.destroy(),t}catch(n){throw Xt(n,su(Pr.PAPA_PARSE_ERR),rn.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Pr.PAPA_PARSE_ERR+n)}}o(zge,"callPapaParse");function Wz(e,t){let r=xge[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>Bge(i,s));return n}o(Wz,"createTransformMap");function oL(e,t,r){let n=e.get(r);return n?n(t):Sf.autoCast(t)}o(oL,"typeFunction");async function jge(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new cL,s=vz([Pi.createReadStream(e.file_path,{encoding:"utf-8"}),Uz.withParser(),c=>c.value,new xz({batchSize:Gz}),Bz(async c=>{await Kz(e,n,r,c)})]);await new Promise((c,l)=>{Fz(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Xt(new Error,i,rn.BAD_REQUEST);let a=vz([Pi.createReadStream(e.file_path,{encoding:"utf-8"}),Uz.withParser(),c=>c.value,new xz({batchSize:Gz}),Bz(async c=>{await Yz(e,t,r,c)})]);return await new Promise((c,l)=>{Fz(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Xt(n,su(Pr.INSERT_JSON_ERR),rn.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Pr.INSERT_JSON_ERR+n)}}o(jge,"insertJson");async function zz(e){let t={};try{e.data&&e.data.length>0&&Qge(e.data[0])?t=await Jge(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Tf.info(t.message))}catch(r){throw iu(r)}return t}o(zz,"callBulkFileLoad");function Qge(e){let t=Object.keys(e);for(let r of t)if(!Fge.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(Qge,"validateColumnNames");async function Jge(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Ry.insert;break;case"update":i=Ry.update;break;case"upsert":i=Ry.upsert;break;default:throw Xt(new Error,Pr.INVALID_ACTION_PARAM_ERR(n),rn.BAD_REQUEST,Oi.LOG_LEVELS.ERROR,Pr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Sf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw iu(a)}}o(Jge,"bulkFileLoad");function jz(e,t){return`successfully loaded ${t} of ${e} records`}o(jz,"buildResponseMsg");function iu(e){return Xt(e,su(Pr.DEFAULT_BULK_LOAD_ERR),rn.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Pr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(iu,"buildTopLevelErrMsg")});var mL=v((mke,sj)=>{"use strict";var fL=fn(),Xge=eL(),{AsyncParser:Zge}=require("json2csv"),Iy=require("stream"),Es=ce(),dL=require("fs-extra"),eSe=require("path"),Js=Q(),{promisify:Zz}=require("util"),oE=ce(),{handleHDBError:gr,hdbErrors:tSe}=Ee(),{HDB_ERROR_MSGS:Kn,HTTP_STATUS_CODES:Sr}=tSe,{streamAsJSON:rSe}=(jA(),M(LU)),{Upload:nSe}=require("@aws-sdk/lib-storage"),{toCsvStream:sSe}=(Do(),M(GU)),Jz=["search_by_value","search_by_hash","sql","search_by_conditions"],Xz=["json","csv"],ej="json",tj="csv",iSe="Successfully exported JSON locally.",oSe="Successfully exported CSV locally.",aSe=1e3,cSe=fL.searchByHash,lSe=fL.searchByValue,uSe=Zz(Iy.finished);sj.exports={export_to_s3:pSe,export_local:dSe};async function dSe(e){Js.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=rj(e);if(!Es.isEmpty(t))throw Js.error(t),gr(new Error,t,Sr.BAD_REQUEST,void 0,void 0,!0);if(Es.isEmpty(e.path))throw Js.error(Kn.MISSING_VALUE("path")),gr(new Error,Kn.MISSING_VALUE("path"),Sr.BAD_REQUEST,void 0,void 0,!0);let r=(Es.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(eSe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Es.buildFolderPath(e.path,r);await fSe(e.path);let s=await nj(e);return await mSe(n,e.format,s)}o(dSe,"export_local");async function fSe(e){if(Js.trace("in confirmPath"),Es.isEmptyOrZeroLength(e))throw gr(new Error,`Invalid path: ${e}`,Sr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await dL.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,Js.error(n),gr(new Error,n,Sr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw Js.error(r),gr(new Error,r,Sr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(fSe,"confirmPath");async function mSe(e,t,r){if(Js.trace("in saveToLocal"),oE.isEmptyOrZeroLength(e))throw gr(new Error,Kn.INVALID_VALUE("file_path"),Sr.BAD_REQUEST,void 0,void 0,!0);if(oE.isEmptyOrZeroLength(t))throw gr(new Error,Kn.INVALID_VALUE("Source format"),Sr.BAD_REQUEST,void 0,void 0,!0);if(oE.isEmpty(r))throw gr(new Error,Kn.NOT_FOUND("Data"),Sr.BAD_REQUEST,void 0,void 0,!0);if(t===ej){let n=dL.createWriteStream(e);return rSe(r).pipe(n),await uSe(n),{message:iSe,path:e}}else if(t===tj){let n=dL.createWriteStream(e),s=Iy.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new Zge(i,c).fromInput(s).toOutput(n).promise(!1),{message:oSe,path:e}}throw gr(new Error,Kn.INVALID_VALUE("format"),Sr.BAD_REQUEST)}o(mSe,"saveToLocal");async function pSe(e){if(!e.s3||Object.keys(e.s3).length===0)throw gr(new Error,Kn.MISSING_VALUE("S3 object"),Sr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw gr(new Error,Kn.MISSING_VALUE("aws_access_key_id"),Sr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw gr(new Error,Kn.MISSING_VALUE("aws_secret_access_key"),Sr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.bucket))throw gr(new Error,Kn.MISSING_VALUE("bucket"),Sr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.key))throw gr(new Error,Kn.MISSING_VALUE("key"),Sr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.region))throw gr(new Error,Kn.MISSING_VALUE("region"),Sr.BAD_REQUEST);let t=rj(e);if(!Es.isEmpty(t))throw gr(new Error,t,Sr.BAD_REQUEST);Js.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await nj(e)}catch(l){throw Js.error(l),l}let n,s=await Xge.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new Iy.PassThrough;if(e.format===tj){i=e.s3.key+".csv";let l=sSe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===ej){i=e.s3.key+".json";let l=new Iy.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%aSe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw gr(new Error,Kn.INVALID_VALUE("format"),Sr.BAD_REQUEST);return new nSe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(pSe,"export_to_s3");function rj(e){if(Js.trace("in exportCoreValidation"),Es.isEmpty(e.format))return"format missing";if(Xz.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Xz.join(", ")}`;let t=e.search_operation.operation;if(Es.isEmpty(t))return"search_operation.operation missing";if(Jz.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${Jz.join(", ")}`}o(rj,"exportCoreValidation");async function nj(e){Js.trace("in getRecords");let t,r;if(oE.isEmpty(e.search_operation)||oE.isEmptyOrZeroLength(e.search_operation.operation))throw gr(new Error,Kn.INVALID_VALUE("Search operation"),Sr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=lSe;break;case"search_by_hash":t=cSe;break;case"search_by_conditions":t=fL.searchByConditions;break;case"sql":{let n=py();t=Zz(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Js.error(r),gr(new Error,r,Sr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(nj,"getRecords")});var oj=v((hke,ij)=>{"use strict";var pL=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};ij.exports=pL});var lj=v((_ke,cj)=>{"use strict";var hSe=(q(),M(W)),aj=require("moment"),ESe=require("uuid").v4,hL=class{static{o(this,"JobObject")}constructor(){this.id=ESe(),this.type=void 0,this.start_datetime=aj().valueOf(),this.created_datetime=aj().valueOf(),this.end_datetime=void 0,this.status=hSe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};cj.exports=hL});var EL=v((Ske,_j)=>{"use strict";var _Se=require("uuid").v4,pj=Fn(),hj=fn(),gSe=hi(),SSe=Xu(),TSe=oj(),Ot=(q(),M(W)),ySe=lj(),RSe=_S(),Li=Q(),ASe=gm(),yf=ce(),{promisify:bSe}=require("util"),ou=require("moment"),ISe=py(),wy=XP(),uj=lw(),{deleteTransactionLogsBeforeValidator:wSe}=uP(),{handleHDBError:dj,hdbErrors:NSe,ClientError:CSe}=Ee(),{HTTP_STATUS_CODES:fj}=NSe,mj=hj.searchByValue,OSe=hj.searchByHash,PSe=pj.insert,LSe=bSe(ISe.evaluateSQL),DSe=pj.update;_j.exports={addJob:USe,updateJob:BSe,handleGetJob:MSe,handleGetJobsByStartDate:vSe,getJobById:Ej};async function MSe(e){if(e.id===void 0)throw new CSe("'id' is required");let t=await Ej(e.id);return yf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(MSe,"handleGetJob");async function vSe(e){try{let t=await xSe(e);if(Li.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=ou(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=ou(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 Li.error(r),new Error(r)}}o(vSe,"handleGetJobsByStartDate");async function USe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||yf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Li.info(d),t.error=d,t}if(!Ot.JOB_TYPE_ENUM[e.operation])return Li.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ot.OPERATIONS_ENUM.CSV_FILE_LOAD:n=wy.fileObject(e);break;case Ot.OPERATIONS_ENUM.CSV_URL_LOAD:n=wy.urlObject(e);break;case Ot.OPERATIONS_ENUM.CSV_DATA_LOAD:n=wy.dataObject(e);break;case Ot.OPERATIONS_ENUM.IMPORT_FROM_S3:n=wy.s3FileObject(e);break;case Ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=uj(e,"date");break;case Ot.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=uj(e,"timestamp");break;case Ot.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=wSe(e);break;case Ot.OPERATIONS_ENUM.RESTART_SERVICE:if(Ot.HDB_PROCESS_SERVICES[e.service]===void 0)throw dj(new Error,"Invalid service",fj.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw dj(n,n.message,fj.BAD_REQUEST,void 0,void 0,!0);let s=new ySe;s.type=e.operation===Ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new gSe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await mj(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Li.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=_Se();try{a=await mj(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Li.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Li.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new ASe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await PSe(l)}catch(d){return Li.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Li.trace(d)}return t}o(USe,"addJob");async function xSe(e){let t=ou(e.from_date,ou.ISO_8601),r=ou(e.to_date,ou.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 TSe(n,e.hdb_user);try{return await LSe(s)}catch(i){throw Li.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(xSe,"getJobsInDateRange");async function Ej(e){if(yf.isEmptyOrZeroLength(e))return yf.errorizeMessage("Invalid job ID specified.");let t=new SSe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await OSe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Li.error(n),yf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(Ej,"getJobById");async function BSe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(yf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ot.JOB_STATUS_ENUM.COMPLETE||e.status===Ot.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=ou().valueOf());let t=new RSe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await DSe(t),r}o(BSe,"updateJob")});var Ij=v((yke,bj)=>{"use strict";var gj=ce(),Lr=(q(),M(W)),FSe=require("moment"),Ny=uL(),aE=Q(),Sj=EL(),Tj=mL(),yj=yl(),Rj=nt(),kSe=ry(),HSe=df(),{parentPort:GSe,isMainThread:Aj}=require("worker_threads"),{onMessageByType:qSe}=nt(),_L=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function $Se(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(gj.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(gj.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Lr.JOB_TYPE_ENUM.csv_file_load:await co(e,Ny.csvFileLoad);break;case Lr.JOB_TYPE_ENUM.csv_url_load:await co(e,Ny.csvURLLoad);break;case Lr.JOB_TYPE_ENUM.csv_data_load:await co(e,Ny.csvDataLoad);break;case Lr.JOB_TYPE_ENUM.import_from_s3:await co(e,Ny.importFromS3);break;case Lr.JOB_TYPE_ENUM.empty_trash:break;case Lr.JOB_TYPE_ENUM.export_local:await co(e,Tj.export_local);break;case Lr.JOB_TYPE_ENUM.export_to_s3:await co(e,Tj.export_to_s3);break;case Lr.JOB_TYPE_ENUM.delete_files_before:case Lr.JOB_TYPE_ENUM.delete_records_before:await co(e,yj.deleteFilesBefore);break;case Lr.JOB_TYPE_ENUM.delete_audit_logs_before:await co(e,yj.deleteAuditLogsBefore);break;case Lr.JOB_TYPE_ENUM.delete_transaction_logs_before:await co(e,kSe.deleteTransactionLogsBefore);break;case Lr.JOB_TYPE_ENUM.restart_service:return await co(e,HSe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o($Se,"parseMessage");async function co(e,t){try{e.job.status=Lr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=FSe().valueOf(),await Sj.updateJob(e.job),await VSe(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):aE.error(`There was an error running ${t.name} job with id ${e.job.id}`),aE.error(n),e.job.message=n,e.job.status=Lr.JOB_STATUS_ENUM.ERROR;try{await Sj.updateJob(e.job)}catch(s){throw aE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(co,"runJob");async function VSe(e){aE.trace("launching job thread:",e),Aj?Rj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):GSe.postMessage({type:Lr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(VSe,"launchJobThread");Aj&&qSe(Lr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Rj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){aE.error(r)}});bj.exports={parseMessage:$Se,RunnerMessage:_L}});var Nj=v((Ake,wj)=>{"use strict";var KSe=ce(),gL=le(),_c=(q(),M(W)),YSe=Nt(),WSe=pr(),lo=Q(),zSe=sL(),jSe=Ji();gL.initSync();wj.exports={postOperationHandler:JSe,sendOperationTransaction:cE};async function cE(e,t,r,n){if(e.schema===_c.SYSTEM_SCHEMA_NAME)return;let s=QSe(e,t,r);s&&(lo.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await WSe.publishToStream(`${YSe.SUBJECT_PREFIXES.TXN}.${e.schema}`,jSe.createNatsTableStreamName(e.schema,e.table),n,s))}o(cE,"sendOperationTransaction");function QSe(e,t,r){if(KSe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===_c.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(QSe,"convertCRUDOperationToTransaction");async function JSe(e,t,r){if(!gL.get(_c.CONFIG_PARAMS.CLUSTERING_ENABLED))return;lo.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=gL.get(_c.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new zSe(t.txn_time,n,s);switch(e.operation){case _c.OPERATIONS_ENUM.INSERT:try{await cE(e,t.inserted_hashes,i,r)}catch(a){lo.error("There was an error calling clustering postOperationHandler for insert."),lo.error(a)}break;case _c.OPERATIONS_ENUM.DELETE:try{await cE(e,t.deleted_hashes,i,r)}catch(a){lo.error("There was an error calling clustering postOperationHandler for delete."),lo.error(a)}break;case _c.OPERATIONS_ENUM.UPDATE:try{await cE(e,t.update_hashes,i,r)}catch(a){lo.error("There was an error calling clustering postOperationHandler for update."),lo.error(a)}break;case _c.OPERATIONS_ENUM.UPSERT:try{await cE(e,t.upserted_hashes,i,r)}catch(a){lo.error("There was an error calling clustering postOperationHandler for upsert."),lo.error(a)}break;default:break}return t}o(JSe,"postOperationHandler")});var Z,Cj=ie(()=>{Z=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var cP={};be(cP,{chooseOperation:()=>Wj,executeJob:()=>Xs,getOperationFunction:()=>zj,operation:()=>NL,processLocalTransaction:()=>Yj});async function Yj(e,t){try{if(e.body.operation!=="read_log"&&(fE.default.log_level===nm.INFO||fE.default.log_level===nm.DEBUG||fE.default.log_level===nm.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;Rn.info(c)}}catch(n){Rn.error(n)}let r=await Vj.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return tTe[e.body.operation]&&Hj.default.setSchemaDataToGlobal(n=>{n&&Rn.error(n)}),r}function Wj(e){let t;try{t=zj(e)}catch(s){throw Rn.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=Py.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=Py.default.checkASTPermissions(e,i);if(a)throw Rn.error(`${Oj.FORBIDDEN} from operation ${e.operation}`),Rn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Zs.handleHDBError)(new Error,a,Zs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==$.CREATE_AUTHENTICATION_TOKENS&&e.operation!==$.LOGIN&&e.operation!==$.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=kj.default.verifyPerms(i,s);if(a)throw Rn.error(`${Oj.FORBIDDEN} from operation ${e.operation}`),Rn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Zs.handleHDBError)(new Error,a,Zs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Zs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function zj(e){if(Rn.trace(`getOperationFunction with operation: ${e.operation}`),Pj.has(e.operation))return Pj.get(e.operation);throw(0,Zs.handleHDBError)(new Error,Zs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Zs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function NL(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=Wj(e);return Yj({body:e},n)}async function rTe(e){Rn.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[AA]=!0;let a;switch(i.operation){case $.INSERT:a=await cu.default.insert(i);break;case $.UPDATE:a=await cu.default.update(i);break;case $.UPSERT:a=await cu.default.upsert(i);break;case $.DELETE:a=await bf.default.deleteRecord(i);break;default:Rn.warn("invalid operation in catchup");break}await XSe.postOperationHandler(i,a,e)}catch(a){Rn.info("Invalid operation in transaction"),Rn.error(a)}}async function Xs(e){(0,$j.transformReq)(e);let t,r;try{if(r=await Ly.default.addJob(e),r){t=r.createdJob,Rn.info("addJob result",r);let n=new RL.default.RunnerMessage(t,e);return{message:await RL.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Rn.error(i),(0,Zs.handleHDBError)(n,i)}}function nTe(){let e=new Map;return e.set($.INSERT,new Z(cu.default.insert)),e.set($.UPDATE,new Z(cu.default.update)),e.set($.UPSERT,new Z(cu.default.upsert)),e.set($.SEARCH_BY_CONDITIONS,new Z(Af.default.searchByConditions)),e.set($.SEARCH_BY_HASH,new Z(Af.default.searchByHash)),e.set($.SEARCH_BY_ID,new Z(Af.default.searchByHash)),e.set($.SEARCH_BY_VALUE,new Z(Af.default.searchByValue)),e.set($.SEARCH,new Z(ZSe)),e.set($.SQL,new Z(eTe)),e.set($.CSV_DATA_LOAD,new Z(Xs,lE.default.csvDataLoad)),e.set($.CSV_FILE_LOAD,new Z(Xs,lE.default.csvFileLoad)),e.set($.CSV_URL_LOAD,new Z(Xs,lE.default.csvURLLoad)),e.set($.IMPORT_FROM_S3,new Z(Xs,lE.default.importFromS3)),e.set($.CREATE_SCHEMA,new Z(uo.default.createSchema)),e.set($.CREATE_DATABASE,new Z(uo.default.createSchema)),e.set($.CREATE_TABLE,new Z(uo.default.createTable)),e.set($.CREATE_ATTRIBUTE,new Z(uo.default.createAttribute)),e.set($.DROP_SCHEMA,new Z(uo.default.dropSchema)),e.set($.DROP_DATABASE,new Z(uo.default.dropSchema)),e.set($.DROP_TABLE,new Z(uo.default.dropTable)),e.set($.DROP_ATTRIBUTE,new Z(uo.default.dropAttribute)),e.set($.DESCRIBE_SCHEMA,new Z(uE.default.describeSchema)),e.set($.DESCRIBE_DATABASE,new Z(uE.default.describeSchema)),e.set($.DESCRIBE_TABLE,new Z(uE.default.describeTable)),e.set($.DESCRIBE_ALL,new Z(uE.default.describeAll)),e.set($.DELETE,new Z(bf.default.deleteRecord)),e.set($.ADD_USER,new Z(Rf.default.addUser)),e.set($.ALTER_USER,new Z(Rf.default.alterUser)),e.set($.DROP_USER,new Z(Rf.default.dropUser)),e.set($.LIST_USERS,new Z(Rf.default.listUsersExternal)),e.set($.LIST_ROLES,new Z(dE.default.listRoles)),e.set($.ADD_ROLE,new Z(dE.default.addRole)),e.set($.ALTER_ROLE,new Z(dE.default.alterRole)),e.set($.DROP_ROLE,new Z(dE.default.dropRole)),e.set($.USER_INFO,new Z(Rf.default.userInfo)),e.set($.READ_LOG,new Z(Dj.default)),e.set($.ADD_NODE,new Z(Mj.default)),e.set($.UPDATE_NODE,new Z(SL.default)),e.set($.SET_NODE_REPLICATION,new Z(SL.default)),e.set($.REMOVE_NODE,new Z(vj.default)),e.set($.CONFIGURE_CLUSTER,new Z(Uj.default)),e.set($.PURGE_STREAM,new Z(xj.default)),e.set($.SET_CONFIGURATION,new Z(AL.default.setConfiguration)),e.set($.CLUSTER_STATUS,new Z(Bj.default.clusterStatus)),e.set($.CLUSTER_NETWORK,new Z(Fj.default)),e.set($.CLUSTER_SET_ROUTES,new Z(Cy.default.setRoutes)),e.set($.CLUSTER_GET_ROUTES,new Z(Cy.default.getRoutes)),e.set($.CLUSTER_DELETE_ROUTES,new Z(Cy.default.deleteRoutes)),e.set($.EXPORT_TO_S3,new Z(Xs,TL.default.export_to_s3)),e.set($.CREATE_CSR,new Z(au.default.createCsr)),e.set($.SIGN_CERTIFICATE,new Z(au.default.signCertificate)),e.set($.LIST_CERTIFICATES,new Z(au.default.listCertificates)),e.set($.ADD_CERTIFICATES,new Z(au.default.addCertificate)),e.set($.REMOVE_CERTIFICATE,new Z(au.default.removeCertificate)),e.set($.GET_KEY,new Z(au.default.getKey)),e.set($.ADD_NODE_BACK,new Z(oO)),e.set($.REMOVE_NODE_BACK,new Z(aO)),e.set($.DELETE_FILES_BEFORE,new Z(Xs,bf.default.deleteFilesBefore)),e.set($.DELETE_RECORDS_BEFORE,new Z(Xs,bf.default.deleteFilesBefore)),e.set($.EXPORT_LOCAL,new Z(Xs,TL.default.export_local)),e.set($.SEARCH_JOBS_BY_START_DATE,new Z(Ly.default.handleGetJobsByStartDate)),e.set($.GET_JOB,new Z(Ly.default.handleGetJob)),e.set($.GET_FINGERPRINT,new Z(Oy.default.getFingerprint)),e.set($.SET_LICENSE,new Z(Oy.default.setLicense)),e.set($.GET_REGISTRATION_INFO,new Z(Oy.default.getRegistrationInfo)),e.set($.RESTART,new Z(yL.default.restart)),e.set($.RESTART_SERVICE,new Z(Xs,yL.default.restartService)),e.set($.CATCHUP,new Z(rTe)),e.set($.SYSTEM_INFORMATION,new Z(Gj.default.systemInformation)),e.set($.DELETE_AUDIT_LOGS_BEFORE,new Z(Xs,bf.default.deleteAuditLogsBefore)),e.set($.READ_AUDIT_LOG,new Z(Lj.default)),e.set($.CREATE_AUTHENTICATION_TOKENS,new Z(PN)),e.set($.REFRESH_OPERATION_TOKEN,new Z(LN)),e.set($.LOGIN,new Z(eP)),e.set($.LOGOUT,new Z(tP)),e.set($.GET_CONFIGURATION,new Z(AL.default.getConfiguration)),e.set($.CUSTOM_FUNCTIONS_STATUS,new Z(Pt.default.customFunctionsStatus)),e.set($.GET_CUSTOM_FUNCTIONS,new Z(Pt.default.getCustomFunctions)),e.set($.GET_COMPONENT_FILE,new Z(Pt.default.getComponentFile)),e.set($.GET_COMPONENTS,new Z(Pt.default.getComponents)),e.set($.SET_COMPONENT_FILE,new Z(Pt.default.setComponentFile)),e.set($.DROP_COMPONENT,new Z(Pt.default.dropComponent)),e.set($.GET_CUSTOM_FUNCTION,new Z(Pt.default.getCustomFunction)),e.set($.SET_CUSTOM_FUNCTION,new Z(Pt.default.setCustomFunction)),e.set($.DROP_CUSTOM_FUNCTION,new Z(Pt.default.dropCustomFunction)),e.set($.ADD_CUSTOM_FUNCTION_PROJECT,new Z(Pt.default.addComponent)),e.set($.ADD_COMPONENT,new Z(Pt.default.addComponent)),e.set($.DROP_CUSTOM_FUNCTION_PROJECT,new Z(Pt.default.dropCustomFunctionProject)),e.set($.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(Pt.default.packageComponent)),e.set($.PACKAGE_COMPONENT,new Z(Pt.default.packageComponent)),e.set($.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(Pt.default.deployComponent)),e.set($.DEPLOY_COMPONENT,new Z(Pt.default.deployComponent)),e.set($.READ_TRANSACTION_LOG,new Z(bL.default.readTransactionLog)),e.set($.DELETE_TRANSACTION_LOGS_BEFORE,new Z(Xs,bL.default.deleteTransactionLogsBefore)),e.set($.INSTALL_NODE_MODULES,new Z(IL.default.installModules)),e.set($.AUDIT_NODE_MODULES,new Z(IL.default.auditModules)),e.set($.GET_BACKUP,new Z(uo.default.getBackup)),e.set($.ADD_SSH_KEY,new Z(Pt.default.addSSHKey)),e.set($.UPDATE_SSH_KEY,new Z(Pt.default.updateSSHKey)),e.set($.DELETE_SSH_KEY,new Z(Pt.default.deleteSSHKey)),e.set($.LIST_SSH_KEYS,new Z(Pt.default.listSSHKeys)),e.set($.SET_SSH_KNOWN_HOSTS,new Z(Pt.default.setSSHKnownHosts)),e.set($.GET_SSH_KNOWN_HOSTS,new Z(Pt.default.getSSHKnownHosts)),e.set($.GET_ANALYTICS,new Z(fP)),e.set($.LIST_METRICS,new Z(mP)),e.set($.DESCRIBE_METRIC,new Z(pP)),e.set($.GET_STATUS,new Z(RP)),e.set($.SET_STATUS,new Z(AP)),e.set($.CLEAR_STATUS,new Z(yP)),e.set($.INSTALL_USAGE_LICENSE,new Z(CP)),e.set($.GET_USAGE_LICENSES,new Z(OP)),e}var Af,Py,lE,uo,uE,bf,Lj,Rf,dE,Pt,fE,Dj,Mj,SL,vj,Uj,xj,Bj,Fj,Cy,TL,kj,Ly,Zs,Oy,yL,wL,cu,Hj,Gj,RL,AL,bL,IL,qj,$j,au,Vj,Kj,Oj,Rn,XSe,ZSe,eTe,tTe,Pj,lP=ie(()=>{Af=I(fn()),Py=I(py()),lE=I(uL()),uo=I(fT()),uE=I(Dl()),bf=I(yl()),Lj=I(vC()),Rf=I(os()),dE=I(qp()),Pt=I(aP()),fE=I(Q()),Dj=I(kC()),Mj=I(bT()),SL=I(fO()),vj=I(wT()),Uj=I(hO()),xj=I(EO()),Bj=I(SO()),Fj=I(yO()),Cy=I(LT()),TL=I(mL()),kj=I(fy()),Ly=I(EL());q();Zs=I(Ee()),Oy=I(vO()),yL=I(df()),wL=I(require("util")),cu=I(Fn()),Hj=I(ji()),Gj=I(Jd()),RL=I(Ij());Nd();WT();AL=I(Rt()),bL=I(ry()),IL=I(Gh()),qj=I(li()),$j=I(ce());Ur();au=I(ds());Zd();EP();Vj=I(ZP()),Kj=I(Nj());jh();LP();Cj();({HTTP_STATUS_CODES:Oj}=Zs.hdbErrors),Rn=fE.default.loggerWithTag("operation"),{transactToClusteringUtils:XSe}=Kj.default,ZSe=wL.promisify(Af.default.search),eTe=wL.promisify(Py.default.evaluateSQL),tTe={[$.CREATE_ATTRIBUTE]:!0,[$.CREATE_TABLE]:!0,[$.CREATE_SCHEMA]:!0,[$.DROP_ATTRIBUTE]:!0,[$.DROP_TABLE]:!0,[$.DROP_SCHEMA]:!0};o(Yj,"processLocalTransaction");Pj=nTe();Ue.operation=NL;o(Wj,"chooseOperation");o(zj,"getOperationFunction");(0,qj._assignPackageExport)("operation",NL);o(NL,"operation");o(rTe,"catchup");o(Xs,"executeJob");o(nTe,"initializeOperationFunctionMap")});var vy=v((Pke,Jj)=>{"use strict";var Dy=(q(),M(W)),sTe=ce(),mE=Q(),{handleHDBError:CL,hdbErrors:My}=Ee(),{isMainThread:iTe}=require("worker_threads"),{Readable:oTe}=require("stream"),jj=require("os"),aTe=require("util"),cTe=MN(),lTe=aTe.promisify(cTe.authorize),Qj=(lP(),M(cP)),{createGzip:uTe,constants:dTe}=require("zlib"),fTe=[Dy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,Dy.OPERATIONS_ENUM.LOGIN,Dy.OPERATIONS_ENUM.LOGOUT];function mTe(e){let t=`Found an uncaught exception with message: ${e.message}. ${jj.EOL}Stack: ${e.stack} ${jj.EOL}Terminating ${iTe?"HDB":"thread"}.`;console.error(t),mE.fatal(t),process.exit(1)}o(mTe,"handleServerUncaughtException");function pTe(e,t,r){if(mE[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:My.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(pTe,"serverErrorHandler");function hTe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=CL(new Error,"Invalid JSON.",My.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(sTe.isEmpty(e.body.operation)){let n=CL(new Error,"Request body must include an 'operation' property.",My.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(hTe,"reqBodyValidationHandler");function ETe(e,t,r){let n;!fTe.includes(e.body.operation)||e.body.operation===Dy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?lTe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{mE.warn(i),mE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(CL(i,a,My.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(ETe,"authHandler");async function _Te(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=Qj.chooseOperation(e.body);let s=await Qj.processLocalTransaction(e,n);if(s instanceof oTe&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(uTe({level:dTe.Z_BEST_SPEED})))}return s}catch(s){throw mE.error(s),s}}o(_Te,"handlePostRequest");Jj.exports={authHandler:ETe,handlePostRequest:_Te,handleServerUncaughtException:mTe,serverErrorHandler:pTe,reqBodyValidationHandler:hTe}});var t2=v((Dke,e2)=>{"use strict";var gTe=require("fastify-plugin"),{handlePostRequest:Xj,authHandler:STe,reqBodyValidationHandler:TTe}=vy();async function yTe(e){e.decorate("hdbCore",{preValidation:[TTe,STe],request:o(t=>Zj(Xj(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>Zj(Xj(t,r,!0)),"requestWithoutAuthentication")})}o(yTe,"hdbCore");async function Zj(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}o(Zj,"convertAsyncIterators");e2.exports=gTe(yTe)});var n2=v((Uke,r2)=>{"use strict";var vke=require("fs"),Uy=le();Uy.initSync();var{CONFIG_PARAMS:OL}=(q(),M(W)),RTe=1024*1024*1024;function ATe(e){let t=Uy.get(OL.HTTP_TIMEOUT),r=Uy.get(OL.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:RTe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:Uy.get(OL.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(ATe,"getServerOptions");r2.exports=ATe});var o2=v((Bke,i2)=>{"use strict";var PL=le();PL.initSync();var{CONFIG_PARAMS:s2}=(q(),M(W));function bTe(){let e=PL.get(s2.HTTP_CORSACCESSLIST),t=PL.get(s2.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(bTe,"getCORSOptions");i2.exports=bTe});var l2=v((kke,c2)=>{"use strict";var a2=le();a2.initSync();var ITe=(q(),M(W));function wTe(){return a2.get(ITe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(wTe,"getHeaderTimeoutConfig");c2.exports=wTe});var DL={};be(DL,{customFunctionsServer:()=>OTe,ready:()=>A2,start:()=>CTe});function CTe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){aa||(aa=R2(t),Ue.http((await aa).server));let a=await aa,c=(0,LL.dirname)(s),l=(0,LL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!u2.has(c)){u2.add(c);try{a.register(LTe(c,l))}catch(u){if(u.message==="Root plugin has already booted")St.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:A2}}async function OTe(){try{St.info("In Custom Functions Fastify server"+process.cwd()),St.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),St.debug(`Custom Functions server process ${process.pid} starting up.`),await PTe();let e=E2.get(x.HTTP_SECUREPORT)>0,t;try{t=aa=await R2(e)}catch(r){throw St.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw St.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){St.error(`Custom Functions ${process.pid} Error: ${e}`),St.error(e),process.exit(1)}}async function PTe(){try{St.info("Custom Functions starting configuration."),await _2.setUsersWithRolesCache(),St.info("Custom Functions completed configuration.")}catch(e){St.error(e)}}function LTe(e,t){return async function(r){try{St.info("Custom Functions starting buildRoutes"),St.trace("Loading fastify routes folder "+e),(0,d2.existsSync)(e)&&r.register(h2.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:St.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?St.error(s.message):s&&St.error(s),a()})}catch(n){St.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function R2(e){St.info("Custom Functions starting buildServer.");let t=(0,g2.default)(e),r=(0,f2.default)(t);r.server.headersTimeout=(0,T2.default)(),r.setErrorHandler(y2.serverErrorHandler);let n=(0,S2.default)();return n&&r.register(m2.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(p2.default),await r.register(NTe),await r.after(),wm(r),St.info("Custom Functions completed buildServer."),r}function A2(){if(aa)return aa.then?aa.then(e=>e.ready()):aa.ready()}var LL,d2,f2,m2,p2,h2,E2,St,NTe,_2,g2,S2,T2,y2,aa,u2,b2=ie(()=>{LL=require("path"),d2=require("fs"),f2=I(require("fastify")),m2=I(require("@fastify/cors")),p2=I(wN()),h2=I(require("@fastify/autoload")),E2=I(le());q();St=I(Q()),NTe=I(t2()),_2=I(os()),g2=I(n2()),S2=I(o2()),T2=I(l2()),y2=I(vy());Do();Ur();u2=new Set;o(CTe,"start");o(OTe,"customFunctionsServer");o(PTe,"setUp");o(LTe,"buildRouteFolder");o(R2,"buildServer");o(A2,"ready")});var vL={};be(vL,{handleApplication:()=>DTe,suppressHandleApplicationWarning:()=>MTe});function DTe(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,wf.join)(n.absolutePath,"index.html");(0,If.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&r.set((0,wf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,wf.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let a=t.get(n.pathname);if(!a){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(a=r.get(n.pathname))}if(!a){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(a=t.get(`${n.pathname}.${f}`),a)break}if(a)return{handlesHeaders:!0,body:(0,ML.default)(n,(0,If.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(vTe(c),!c)return{status:404,body:"File not found"};let l=(0,wf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,If.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,ML.default)(n,(0,If.realpathSync)(l))}},{runFirst:!0})}function vTe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var If,wf,ML,MTe,I2=ie(()=>{If=require("node:fs"),wf=require("node:path"),ML=I(require("send"));o(DTe,"handleApplication");MTe=!0;o(vTe,"validateNotFoundOption")});var UL={};be(UL,{start:()=>UTe});function UTe({override:e}){return{handleFile:o((t,r,n)=>{xy.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,w2.parse)(t))){if(process.env[s]!==void 0)if(xy.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)xy.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var w2,xy,N2=ie(()=>{w2=require("dotenv"),xy=I(Q());o(UTe,"start")});var xL={};be(xL,{DataLoaderError:()=>_s,DataLoaderResult:()=>Nf,EmptyFileError:()=>ky,FileParseError:()=>Fy,InvalidPropertyTypeError:()=>Hy,MissingRequiredPropertyError:()=>pE,RecordProcessingError:()=>hE,SystemDatabaseError:()=>Gy,UnsupportedFileExtensionError:()=>By,handleApplication:()=>BTe,loadDataFile:()=>D2,suppressHandleApplicationWarning:()=>xTe});function BTe(e){if((0,O2.getWorkerIndex)()!==0){fo.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||D2(t,pn,ve).then(r=>{fo.debug?.("Data loader processed file: %s: %s",(0,ca.basename)(t.absolutePath),r.message)})})}async function D2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,ca.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,C2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new By(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof _s?f:new Fy(t,f)}if(!a)throw new ky(t);let{database:c,table:l,records:u}=a;if(!l)throw new pE(t,"table");if(!u)throw new pE(t,"records");if(!Array.isArray(u))throw new Hy(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new Gy(c,l);try{let f;if(c&&s[c]&&s[c][l])fo.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])fo.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{fo.debug?.(`Table ${d} not found, creating new table`);let A=[];if(u.length>0){let S=u[0];Object.keys(S).map(T=>{let w={name:T,type:typeof S[T]};return T==="id"&&(w.isPrimaryKey=!0),w}).forEach(T=>{A.push(T)})}f=await Je({database:c,table:l,attributes:A})}let m=u.length,p=0,h=0,E=0,g=100;for(let A=0;A<u.length;A+=g){let S=u.slice(A,A+g),T=[];for(let w of S)T.push(async()=>{try{let L=null,k=w.id;if(k!==void 0&&(L=await f.get(k)),!L)return p++,f.put(w);let te=L.getUpdatedTime();return a.mtime>te?(h++,f.put(w)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(L){if(L instanceof _s)fo.error?.(`Record processing error: ${L.message}`);else{let k=new hE(d,L);fo.error?.(`Record processing error: ${k.message}`)}return Promise.resolve({inserted:0,updated:0,error:L.message})}});await Promise.all(T.map(w=>w()))}if(p>0||h>0){let A=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(A+=` (${E} records skipped)`),fo.info?.(A),new Nf(t,c,l,"success",p+h,A)}else if(E>0){let A=`All ${E} records in ${d} already up-to-date`;return fo.info?.(A),new Nf(t,c,l,"skipped",m,A)}else{let A=`No records to process in ${d}`;return fo.info?.(A),new Nf(t,c,l,"success",0,A)}}catch(f){throw f instanceof _s?f:new hE(d,f)}}var ca,C2,O2,la,P2,L2,fo,xTe,_s,By,Fy,ky,pE,Hy,Gy,hE,Nf,M2=ie(()=>{ca=require("node:path"),C2=require("yaml");Pe();O2=I(nt()),la=I(Yr()),P2=I(Ee()),L2=I(Q()),fo=L2.default.forComponent("dataLoader"),xTe=!0;o(BTe,"handleApplication");o(D2,"loadDataFile");_s=class extends P2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=la.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},By=class extends _s{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,ca.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,la.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},Fy=class extends _s{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,ca.basename)(t)}: ${r.message}`,la.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},ky=class extends _s{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,ca.basename)(t)} is empty or invalid`,la.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},pE=class extends _s{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,ca.basename)(t)} is missing required "${r}" property`,la.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},Hy=class extends _s{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,ca.basename)(t)} has invalid "${r}" property, expected ${n}`,la.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},Gy=class extends _s{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,la.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},hE=class extends _s{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,la.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Nf=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var FL=v((Jke,v2)=>{"use strict";var EE=le();EE.initSync();var Cf=require("fs-extra"),BL=require("path"),Of=(q(),M(W)),FTe=require("crypto"),kTe=require("uuid").v4;v2.exports=HTe;function HTe(){if(EE.getHdbBasePath()!==void 0){let e=BL.join(EE.getHdbBasePath(),Of.LICENSE_KEY_DIR_NAME,Of.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=BL.join(EE.getHdbBasePath(),Of.LICENSE_KEY_DIR_NAME,Of.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=BL.join(EE.getHdbBasePath(),Of.LICENSE_KEY_DIR_NAME,Of.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Cf.accessSync(r),Cf.accessSync(e),Cf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=kTe(),i=FTe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Cf.writeFileSync(r,s),Cf.writeFileSync(e,i.privateKey),Cf.writeFileSync(t,i.publicKey)}else throw n}}}o(HTe,"checkJWTTokenExist")});var x2=v((Zke,U2)=>{"use strict";var kL=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};U2.exports={HdbInfoInsertObject:kL}});var k2=v((tHe,F2)=>{"use strict";var B2=(q(),M(W)),HL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[B2.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[B2.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};F2.exports={UpgradeObject:HL}});var qy=v((nHe,G2)=>{"use strict";var ei=require("prompt"),Pf=require("chalk"),H2=Q(),Di=require("os"),GL=$c(),qL=["yes","y"];async function GTe(e){let t=`${Di.EOL}`+Pf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Di.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Di.EOL}${Di.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Di.EOL}`;ei.override=GL(["CONFIRM_UPGRADE"]),ei.start(),ei.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Pf.magenta(`${Di.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 ei.get([r])}catch(s){return H2.error("There was an error when prompting user about an upgrade."),H2.error(s),!1}return qL.includes(n.CONFIRM_UPGRADE)}o(GTe,"forceUpdatePrompt");async function qTe(e){let t=`${Di.EOL}`+Pf.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Di.EOL}`);ei.override=GL(["CONFIRM_DOWNGRADE"]),ei.start(),ei.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Pf.magenta(`${Di.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 ei.get([r]);return qL.includes(n.CONFIRM_DOWNGRADE)}o(qTe,"forceDowngradePrompt");async function $Te(){let e=`${Di.EOL}`+Pf.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");ei.override=GL(["GENERATE_CERTS"]),ei.start(),ei.message=e;let t={properties:{GENERATE_CERTS:{description:Pf.magenta(`${Di.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 ei.get([t]);return qL.includes(r.GENERATE_CERTS)}o($Te,"upgradeCertsPrompt");G2.exports={forceUpdatePrompt:GTe,forceDowngradePrompt:qTe,upgradeCertsPrompt:$Te}});var $y=v((iHe,q2)=>{"use strict";var $L=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};q2.exports=$L});var V2=v((dHe,$2)=>{"use strict";var VTe=ce(),KTe=Rt(),aHe=Q(),cHe=require("path"),lHe=require("fs"),uHe=(q(),M(W));$2.exports={getOldPropsValue:YTe};function YTe(e,t,r=!1){let n=t.getRaw(e);return VTe.isNotEmptyAndHasValue(n)?n:r?KTe.getDefaultConfig(e):""}o(YTe,"getOldPropsValue")});var z2=v((mHe,W2)=>{"use strict";var gc=require("path"),Sc=require("fs-extra"),WTe=require("properties-reader"),zTe=$y(),Tr=Q(),{getOldPropsValue:Tt}=V2(),{HDB_SETTINGS_NAMES:ge,CONFIG_PARAMS:lu}=(q(),M(W)),uu=Rt(),Vy=le(),K2=ce(),mo=(q(),M(W)),VL=new zTe("3.1.0"),Y2=[];function jTe(){let e=WTe(Vy.get(ge.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Tr.info(t);let r=` ;Settings for the HarperDB process.
|
|
39
|
+
`}getKey(){return(0,cy.createPublicKey)(this.pem)}toString(){return this.pem}},ay=class extends TypeError{static{o(this,"LicenseEncodingError")}},Ef=class extends TypeError{static{o(this,"InvalidLicenseError")}},wP=class extends Ef{static{o(this,"InvalidLicenseSignatureError")}},Xh=class extends Ef{static{o(this,"InvalidHeaderError")}},Zh=class extends Ef{static{o(this,"InvalidPayloadError")}},y_e=new IP(FW.get(x.LICENSE_MODE));o(R_e,"validateLicenseSignature");o(A_e,"validateLicenseHeader");o(b_e,"validateLicensePayload");o(kW,"validateLicense")});var PP={};be(PP,{getUsageLicenses:()=>zW,getUsageLicensesOp:()=>OP,installUsageLicense:()=>KW,installUsageLicenseOp:()=>CP,isActiveLicense:()=>YW,recordUsage:()=>WW});async function CP(e){let t=e.license;try{await KW(t)}catch(r){let n=new $W.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function KW(e){let t=kW(e),{id:r}=t;if(await ve.system.hdb_license.get(r))throw new NP(`A usage license with ${r} already exists`);return yn.info?.("Installing usage license:",t),ve.system.hdb_license.put(r,t)}function YW(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function WW(e){yn.trace?.("Recording usage into license from analytics");let t,r=new Date().toISOString(),n={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:r}]},s=VW.get(x.LICENSE_REGION);s!==void 0?n.conditions.push({attribute:"region",comparator:"equals",value:s}):yn.warn?.("No region specified for usage license, selecting any valid license");let i=ve.system.hdb_license?.search(n),a;for await(let c of i)if(YW(c)){a=c.id;break}if(a){yn.trace?.("Found license to record usage into:",a);let c={};bt(c,()=>{t=ve.system.hdb_license.update(a,c);for(let l of e)switch(yn.trace?.("Processing analytics record:",l),l.metric){case"db-read":yn.trace?.("Recording read usage into license"),t.addTo("usedReads",l.count),t.addTo("usedReadBytes",l.mean*l.count);break;case"db-write":yn.trace?.("Recording write usage into license"),t.addTo("usedWrites",l.count),t.addTo("usedWriteBytes",l.mean*l.count);break;case"db-message":yn.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",l.count),t.addTo("usedRealTimeBytes",l.mean*l.count);break;case"cpu-usage":l.path==="user"&&(yn.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",l.mean*l.count));break;default:yn.trace?.("Skipping metric:",l.metric)}})}else if(!process.env.DEV_MODE){let c="This server does not have valid usage licenses, this should only be used for educational and development purposes.";GW||(console.error(c),GW=!0),qW===void 0&&(qW=setInterval(()=>{yn.notify(c)},I_e).unref())}}function OP(e){let t={};return e.region&&(t.region=e.region),zW(t)}function zW(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),ve.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}var $W,yn,VW,NP,GW,qW,I_e,LP=ie(()=>{HW();$W=I(Ee()),yn=I(Q());vs();La();VW=I(le());q();Pe();NP=class extends Error{static{o(this,"ExistingLicenseError")}};o(CP,"installUsageLicenseOp");o(KW,"installUsageLicense");GW=!1,I_e=6e5;o(YW,"isActiveLicense");o(WW,"recordUsage");Ob(WW);o(OP,"getUsageLicensesOp");o(zW,"getUsageLicenses")});var QW=v((kFe,jW)=>{"use strict";var DP=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};jW.exports=DP});var XW=v((GFe,JW)=>{"use strict";var MP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};JW.exports=MP});var UP=v(($Fe,ez)=>{"use strict";var ZW=QW(),w_e=XW(),{HDB_ERROR_MSGS:N_e}=Yr(),vP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=N_e.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new ZW(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new w_e(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new ZW(r,n,[],i);this.unauthorized_access[a]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};ez.exports=vP});var fy=v((KFe,gz)=>{"use strict";var xP=kn(),ly=fn(),js=fT(),rE=Dl(),BP=yl(),C_e=vC(),O_e=l1(),nE=as(),uy=qp(),Or=Q(),P_e=kC(),L_e=bT(),D_e=fO(),M_e=wT(),v_e=hO(),U_e=EO(),x_e=SO(),B_e=yO(),FP=LT(),oa=ce(),F_e=GK(),kP=vO(),nz=df(),Rn=(q(),M(W)),sz=UY(),k_e=Jd(),iz=(Nd(),M(zp)),oz=(WT(),M(Bh)),az=Rt(),_r=aP(),H_e=require("alasql"),cz=ry(),lz=Gh(),_f=fs(),uz=(Zd(),M(Xd)),HP=(EP(),M(hP)),GP=(jh(),M(bP)),dz=(LP(),M(PP)),fz=UP(),{handleHDBError:Kn,hdbErrors:mz}=Ee(),{HDB_ERROR_MSGS:tn,HTTP_STATUS_CODES:eE}=mz,ee=new Map,pz="delete",hc="insert",Qs="read",ru="update",tE="describe",tz=rE.describeSchema.name,rz=rE.describeTable.name,hz={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},G_e={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},q_e="catchup",$_e="handleGetJob",V_e="handleGetJobsByStartDate",dy={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},K_e=[js.createTable.name,js.createAttribute.name,js.dropTable.name,js.dropAttribute.name],Ez={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};ee.set(xP.insert.name,new re(!1,[hc]));ee.set(xP.update.name,new re(!1,[ru]));ee.set(xP.upsert.name,new re(!1,[hc,ru]));ee.set(ly.searchByConditions.name,new re(!1,[Qs]));ee.set(ly.searchByHash.name,new re(!1,[Qs]));ee.set(ly.searchByValue.name,new re(!1,[Qs]));ee.set(ly.search.name,new re(!1,[Qs]));ee.set(js.createSchema.name,new re(!0,[]));ee.set(js.createTable.name,new re(!0,[]));ee.set(js.createAttribute.name,new re(!1,[hc]));ee.set(js.dropSchema.name,new re(!0,[]));ee.set(js.dropTable.name,new re(!0,[]));ee.set(js.dropAttribute.name,new re(!0,[]));ee.set(rE.describeSchema.name,new re(!1,[Qs]));ee.set(rE.describeTable.name,new re(!1,[Qs]));ee.set(BP.deleteRecord.name,new re(!1,[pz]));ee.set(nE.addUser.name,new re(!0,[]));ee.set(nE.alterUser.name,new re(!0,[]));ee.set(nE.dropUser.name,new re(!0,[]));ee.set(nE.listUsersExternal.name,new re(!0,[]));ee.set(uy.listRoles.name,new re(!0,[]));ee.set(uy.addRole.name,new re(!0,[]));ee.set(uy.alterRole.name,new re(!0,[]));ee.set(uy.dropRole.name,new re(!0,[]));ee.set(P_e.name,new re(!0,[]));ee.set(L_e.name,new re(!0,[]));ee.set(D_e.name,new re(!0,[]));ee.set(M_e.name,new re(!0,[]));ee.set(v_e.name,new re(!0,[]));ee.set(U_e.name,new re(!0,[]));ee.set(FP.setRoutes.name,new re(!0,[]));ee.set(FP.getRoutes.name,new re(!0,[]));ee.set(FP.deleteRoutes.name,new re(!0,[]));ee.set(az.setConfiguration.name,new re(!0,[]));ee.set(x_e.clusterStatus.name,new re(!0,[]));ee.set(B_e.name,new re(!0,[]));ee.set(kP.getFingerprint.name,new re(!0,[]));ee.set(kP.setLicense.name,new re(!0,[]));ee.set(BP.deleteFilesBefore.name,new re(!0,[]));ee.set(BP.deleteAuditLogsBefore.name,new re(!0,[]));ee.set(nz.restart.name,new re(!0,[]));ee.set(nz.restartService.name,new re(!0,[]));ee.set(C_e.name,new re(!0,[]));ee.set(O_e.name,new re(!0,[Qs]));ee.set(k_e.systemInformation.name,new re(!0,[]));ee.set(az.getConfiguration.name,new re(!0,[]));ee.set(cz.readTransactionLog.name,new re(!0,[]));ee.set(cz.deleteTransactionLogsBefore.name,new re(!0,[]));ee.set(lz.installModules.name,new re(!0,[]));ee.set(lz.auditModules.name,new re(!0,[]));ee.set(_f.createCsr.name,new re(!0,[]));ee.set(_f.signCertificate.name,new re(!0,[]));ee.set(_f.listCertificates.name,new re(!0,[]));ee.set(_f.addCertificate.name,new re(!0,[]));ee.set(_f.removeCertificate.name,new re(!0,[]));ee.set(_f.getKey.name,new re(!0,[]));ee.set(uz.addNodeBack.name,new re(!0,[]));ee.set(uz.removeNodeBack.name,new re(!0,[]));ee.set(HP.getOp.name,new re(!1,[Qs]));ee.set(HP.listMetricsOp.name,new re(!1,[Qs]));ee.set(HP.describeMetricOp.name,new re(!1,[Qs]));ee.set(GP.clear.name,new re(!0,[]));ee.set(GP.get.name,new re(!0,[]));ee.set(GP.set.name,new re(!0,[]));ee.set(dz.installUsageLicenseOp.name,new re(!0,[]));ee.set(dz.getUsageLicensesOp.name,new re(!0,[]));ee.set(iz.createTokens.name,new re(!1,[]));ee.set(iz.refreshOperationToken.name,new re(!1,[]));ee.set(oz.login.name,new re(!1,[]));ee.set(oz.logout.name,new re(!1,[]));ee.set(_r.customFunctionsStatus.name,new re(!0,[]));ee.set(_r.getCustomFunctions.name,new re(!0,[]));ee.set(_r.getComponents.name,new re(!0,[]));ee.set(_r.getComponentFile.name,new re(!0,[]));ee.set(_r.setComponentFile.name,new re(!0,[]));ee.set(_r.dropComponent.name,new re(!0,[]));ee.set(_r.getCustomFunction.name,new re(!0,[]));ee.set(_r.setCustomFunction.name,new re(!0,[]));ee.set(_r.dropCustomFunction.name,new re(!0,[]));ee.set(_r.addComponent.name,new re(!0,[]));ee.set(_r.dropCustomFunctionProject.name,new re(!0,[]));ee.set(_r.packageComponent.name,new re(!0,[]));ee.set(_r.deployComponent.name,new re(!0,[]));ee.set(_r.addSSHKey.name,new re(!0,[]));ee.set(_r.updateSSHKey.name,new re(!0,[]));ee.set(_r.deleteSSHKey.name,new re(!0,[]));ee.set(_r.listSSHKeys.name,new re(!0,[]));ee.set(_r.setSSHKnownHosts.name,new re(!0,[]));ee.set(_r.getSSHKnownHosts.name,new re(!0,[]));ee.set(kP.getRegistrationInfo.name,new re(!1,[]));ee.set(nE.userInfo.name,new re(!1,[]));ee.set(rE.describeAll.name,new re(!1,[]));ee.set($_e,new re(!1,[]));ee.set(V_e,new re(!0,[]));ee.set(q_e,new re(!0,[]));ee.set(dy.CSV_DATA_LOAD,new re(!1,[hc,ru]));ee.set(dy.CSV_URL_LOAD,new re(!1,[hc,ru]));ee.set(dy.CSV_FILE_LOAD,new re(!1,[hc,ru]));ee.set(dy.IMPORT_FROM_S3,new re(!1,[hc,ru]));ee.set(Ez.EXPORT_TO_S3,new re(!0,[]));ee.set(Ez.EXPORT_LOCAL,new re(!0,[]));ee.set(Rn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[pz]));ee.set(Rn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[Qs]));ee.set(Rn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[hc]));ee.set(Rn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[ru]));gz.exports={verifyPerms:W_e,verifyPermsAst:Y_e,verifyBulkLoadAttributePerms:j_e};function Y_e(e,t,r){if(oa.isEmptyOrZeroLength(e))throw Or.info("verify_perms_ast has an empty user parameter"),Kn(new Error);if(oa.isEmptyOrZeroLength(t))throw Or.info("verify_perms_ast has an empty user parameter"),Kn(new Error);if(oa.isEmptyOrZeroLength(r))throw Or.info("verify_perms_ast has a null operation parameter"),Kn(new Error);try{let n=new fz,s=new F_e(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Or.info("No schemas defined in verifyPermsAst(), will not continue."),Kn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&hz[r])throw Kn(new Error,tn.DROP_SYSTEM,eE.FORBIDDEN);if(c&&!l)return null;let u=sz.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof H_e.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=_z(t,r,a,n);return d||(a.forEach((f,m)=>{for(let p=0;p<f.length;p++){let h=s.getAttributesBySchemaTableName(m,f[p]),E=$P(t.role.permission,m,f[p]);qP(h,E,r,f[p],m,n)}}),n.getPermsResponse())}catch(n){throw Kn(n)}}o(Y_e,"verifyPermsAst");function W_e(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Or.info("null required parameter in verifyPerms"),Kn(new Error,tn.DEFAULT_INVALID_REQUEST,eE.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new fz;if(oa.isEmptyOrZeroLength(e.hdb_user?.role)||oa.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Or.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(tn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(Rn.SYSTEM_SCHEMA_NAME)||s===Rn.SYSTEM_SCHEMA_NAME;if(l&&d&&G_e[e.operation]&&(i===Rn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Rn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Rn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&hz[r])throw Kn(new Error,tn.DROP_SYSTEM,eE.FORBIDDEN);if(l&&!d||u===!0&&(r===js.createSchema.name||r===js.dropSchema.name))return null;if(K_e.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=sz.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===tz||r===rz)&&!f.super_user){if(s===Rn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(tn.SCHEMA_PERM_ERROR(s));if(r===tz&&(!f[s]||!f[s][tE]))return c.handleInvalidItem(tn.SCHEMA_NOT_FOUND(s));if(r===rz&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][tE]))return c.handleInvalidItem(tn.TABLE_NOT_FOUND(s,i))}let m=_z(e.hdb_user,r,a,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Rn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[Rn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[Rn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=E)}let p=z_e(e),h=$P(e.hdb_user?.role?.permission,s,i);return qP(p,h,r,i,s,c,n),c.getPermsResponse()}o(W_e,"verifyPerms");function _z(e,t,r,n,s){if(oa.arrayHasEmptyValues([e,t,r]))throw Or.info("hasPermissions has an invalid parameter"),Kn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Or.info(`operation ${t} not found.`),Kn(new Error,tn.OP_NOT_FOUND(t),eE.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Or.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(tn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][tE]===!1){n.addInvalidItem(tn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(tn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[tE]===!1)n.addInvalidItem(tn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!oa.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Or.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=tn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Or.error(p),Or.error(m),Kn(mz.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(_z,"hasPermissions");function qP(e,t,r,n,s,i,a){if(!e||!t)throw Or.info("no attributes specified in checkAttributePerms."),Kn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Or.info(`no permissions found for ${r} in checkAttributePerms().`),Kn(new Error);if(oa.isEmptyOrZeroLength(t))return Or.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[tE]===!1){i.addInvalidItem(tn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Rn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Qs)throw Kn(new Error,tn.SYSTEM_TIMESTAMP_PERMS_ERR,eE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(tn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(qP,"checkAttributePerms");function z_e(e){let t=new Set;try{if(e.action)return t;if(e.operation===Rn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Or.info(r)}return t}o(z_e,"getRecordAttributes");function $P(e,t,r){let n=new Map;if(oa.isEmpty(e))return Or.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{Or.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o($P,"getAttributePermissions");function j_e(e,t,r,n,s,i,a){let c=new Set(i),l=$P(e,n,s);qP(c,l,t,s,n,a,r)}o(j_e,"verifyBulkLoadAttributePerms")});var py=v((WFe,Az)=>{"use strict";Az.exports={evaluateSQL:cge,processAST:Rz,convertSQLToAST:yz,checkASTPermissions:Tz};var Q_e=kn(),Sz=require("util"),J_e=Sz.callbackify(Q_e.insert),X_e=fn().search,Z_e=Bq().update,ege=Sz.callbackify(Z_e),tge=kq().convertDelete,Ec=require("alasql"),rge=fy(),my=Q(),nge=Bg(),sge=ce(),sE=(q(),M(W)),{hdbErrors:ige,handleHDBError:VP}=Ee(),{HTTP_STATUS_CODES:KP}=ige;nge(Ec);var oge=403,age="There was a problem performing this insert. Please check the logs and try again.",YP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function cge(e,t){let r=e.parsed_sql_object;if(!r){r=yz(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ec.yy.Insert?n=s.into.databaseid:s instanceof Ec.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ec.yy.Update||s instanceof Ec.yy.Delete?n=s.table.databaseid:my.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ec.yy.Select)&&sge.isEmptyOrZeroLength(n))return t("No schema specified",null)}Rz(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(cge,"evaluateSQL");function Tz(e,t){let r;try{r=rge.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(Tz,"checkASTPermissions");function yz(e){let t=new YP;if(!e)throw VP(new Error,"The 'sql' parameter is missing from the request body",KP.BAD_REQUEST);try{let r=e.trim(),n=Ec.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
40
|
+
`);throw n[1]?VP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,KP.BAD_REQUEST):VP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",KP.BAD_REQUEST)}return t}o(yz,"convertSQLToAST");function Rz(e,t,r){try{let n=lge;if(!e.bypass_auth&&!t.permissions_checked){let i=Tz(e,t);if(i&&i.length>0)return r(oge,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case sE.VALID_SQL_OPS_ENUM.SELECT:n=X_e,s=t.ast.statements[0];break;case sE.VALID_SQL_OPS_ENUM.INSERT:n=uge;break;case sE.VALID_SQL_OPS_ENUM.UPDATE:n=ege;break;case sE.VALID_SQL_OPS_ENUM.DELETE:n=tge;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(Rz,"processAST");function lge(e,t){my.info(e),t("unknown sql statement")}o(lge,"nullFunction");function uge({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=dge(i,e.values)}catch(a){return r(a)}J_e(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){my.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(uge,"convertInsert");function dge(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=Ec.compile(`SELECT ${s.toString()} AS [${sE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw my.error(r),new Error(age)}}o(dge,"createDataObjects")});var XP=v((JFe,Nz)=>{var gy=require("clone"),Sy=ft(),fge=ce(),Ey=(q(),M(W)),jFe=Q(),WP=require("fs"),jP=require("joi"),{string:_y}=jP.types(),{hdbErrors:mge,handleHDBError:hy}=Ee(),{HDB_ERROR_MSGS:QFe,HTTP_STATUS_CODES:zP}=mge,{commonValidators:gf}=Vi(),bz=" is required",pge=["insert","update","upsert"],QP={database:{presence:!1,format:gf.schema_format,length:gf.schema_length},schema:{presence:!1,format:gf.schema_format,length:gf.schema_length},table:{presence:!0,format:gf.schema_format,length:gf.schema_length},action:{inclusion:{within:pge,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},hge={schema:_y.required(),table:_y.required(),action:_y.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Ege,AWS_SECRET:_ge,AWS_BUCKET:gge,AWS_FILE_KEY:Sge,REGION:Tge}=Ey.S3_BUCKET_AUTH_KEYS,yge={s3:{presence:!0},[`s3.${Ege}`]:{presence:!0,type:"String"},[`s3.${_ge}`]:{presence:!0,type:"String"},[`s3.${gge}`]:{presence:!0,type:"String"},[`s3.${Sge}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Tge}`]:{presence:!0,type:"String"}},Iz=gy(QP);Iz.data.presence={message:bz};var wz=gy(QP);wz.file_path.presence={message:bz};var Rge=Object.assign(gy(QP),yge),JP=gy(hge);JP.csv_url=_y.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();JP.passthrough_headers=jP.object();function Age(e){let t=Sy.validateObject(e,Iz);return Ty(e,t)}o(Age,"dataObject");function bge(e){let t=Sy.validateBySchema(e,jP.object(JP));return Ty(e,t)}o(bge,"urlObject");function Ige(e){let t=Sy.validateObject(e,wz);return Ty(e,t)}o(Ige,"fileObject");function wge(e){let t=Sy.validateObject(e,Rge);return Ty(e,t)}o(wge,"s3FileObject");function Ty(e,t){if(!t){let r=fge.checkGlobalSchemaTable(e.schema,e.table);if(r)return hy(new Error,r,zP.BAD_REQUEST);if(e.operation===Ey.OPERATIONS_ENUM.CSV_FILE_LOAD)try{WP.accessSync(e.file_path,WP.constants.R_OK|WP.constants.F_OK)}catch(n){return n.code===Ey.NODE_ERROR_CODES.ENOENT?hy(n,`No such file or directory ${n.path}`,zP.BAD_REQUEST):n.code===Ey.NODE_ERROR_CODES.EACCES?hy(n,`Permission denied ${n.path}`,zP.BAD_REQUEST):hy(n)}}return t}o(Ty,"postValidateChecks");Nz.exports={dataObject:Age,urlObject:bge,fileObject:Ige,s3FileObject:wge}});var ZP=v((ZFe,Cz)=>{"use strict";var iE=Q(),yy=(q(),M(W));async function Nge(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===yy.OPERATIONS_ENUM.INSERT||t.operation===yy.OPERATIONS_ENUM.UPDATE||t.operation===yy.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===yy.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(iE.info(i.message),i):i.http_resp_msg?(iE.error(`Error calling operation: ${e.name}`),iE.error(i.http_resp_msg),i):(iE.error(`Error calling operation: ${e.name}`),iE.error(i),i)}}o(Nge,"callOperationFunctionAsAwait");Cz.exports={callOperationFunctionAsAwait:Nge}});var eL=v((tke,Pz)=>{"use strict";var{S3:Cge,GetObjectCommand:Oge}=require("@aws-sdk/client-s3");Pz.exports={getFileStreamFromS3:Pge,getS3AuthObj:Oz};async function Pge(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Oz(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Oge(r))).Body}o(Pge,"getFileStreamFromS3");function Oz(e,t,r){return new Cge({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(Oz,"getS3AuthObj")});var Dz=v((nke,Lz)=>{"use strict";var tL=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},rL=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Lz.exports={BulkLoadFileObject:tL,BulkLoadDataObject:rL}});var sL=v((ike,Mz)=>{"use strict";var nL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Mz.exports=nL});var uL=v((dke,Qz)=>{"use strict";var Ry=kn(),by=XP(),Lge=require("needle"),Oi=(q(),M(W)),ake=Nt(),Sf=ce(),{handleHDBError:Xt,hdbErrors:qz}=Ee(),{HTTP_STATUS_CODES:rn,HDB_ERROR_MSGS:Pr,CHECK_LOGS_WRAPPER:su}=qz,Tf=Q(),iL=require("papaparse");Sf.promisifyPapaParse();var Pi=require("fs-extra"),Dge=require("path"),{chain:vz}=require("stream-chain"),Uz=require("stream-json/streamers/StreamArray"),xz=require("stream-json/utils/Batch"),Bz=require("stream-chain/utils/comp"),{finished:Fz}=require("stream"),Mge=le(),$z=ZP(),vge=eL(),{BulkLoadFileObject:aL,BulkLoadDataObject:Uge}=Dz(),cL=UP(),{verifyBulkLoadAttributePerms:Vz}=fy(),cke=sL(),lke=pr(),uke=Ji(),{databases:xge}=(Pe(),M(pt)),{coerceType:Bge}=(rg(),M(dG)),kz="No records parsed from csv file.",nu=`${Mge.get("HDB_ROOT")}/tmp`,{schemaRegex:Fge}=Vi(),Hz=1024*1024*2,Gz=5e3,kge={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Qz.exports={csvDataLoad:Hge,csvURLLoad:Gge,csvFileLoad:qge,importFromS3:$ge};async function Hge(e,t){let r=by.dataObject(e);if(r)throw Xt(r,r.message,rn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Wz(e.schema,e.table),i=iL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:oL.bind(null,s),dynamicTyping:!1}),a=new cL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&Vz(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Xt(new Error,c,rn.BAD_REQUEST,void 0,void 0,!0);let l=new Uge(e.action,e.schema,e.table,i.data);return n=await $z.callOperationFunctionAsAwait(zz,l,null),n.message===kz?kz:jz(n.records,n.number_written)}catch(s){throw iu(s)}}o(Hge,"csvDataLoad");async function Gge(e){let t=by.urlObject(e);if(t)throw Xt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${nu}/${r}`;try{await Vge(e,r)}catch(s){throw Tf.error(Pr.DOWNLOAD_FILE_ERR(r)+" - "+s),Xt(s,su(Pr.DOWNLOAD_FILE_ERR(r)))}try{let s=new aL(this.job_operation_function.name,e.action,e.schema,e.table,n,Oi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await lL(s);return await Ay(n),i}catch(s){throw await Ay(n),iu(s)}}o(Gge,"csvURLLoad");async function qge(e){let t=by.fileObject(e);if(t)throw Xt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=new aL(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Oi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await lL(r)}catch(n){throw iu(n)}}o(qge,"csvFileLoad");async function $ge(e){let t=by.s3FileObject(e);if(t)throw Xt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Dge.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${nu}/${s}`;let i=new aL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Kge(s,e);let a=await lL(i);return await Ay(r),a}catch(n){throw await Ay(r),iu(n)}}o($ge,"importFromS3");async function Vge(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Lge("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw Xt(n,s,n.statusCode,Oi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Wge(r,e.csv_url),await Yge(t,r.raw)}o(Vge,"downloadCSVFile");async function Kge(e,t){try{let r=`${nu}/${e}`;await Pi.mkdirp(nu),await Pi.writeFile(`${nu}/${e}`,"",{flag:"a+"});let n=await Pi.createWriteStream(r),s=await vge.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){Tf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Tf.error(Pr.S3_DOWNLOAD_ERR+" - "+r),Xt(r,su(Pr.S3_DOWNLOAD_ERR))}}o(Kge,"downloadFileFromS3");async function Yge(e,t){try{await Pi.mkdirp(nu),await Pi.writeFile(`${nu}/${e}`,t)}catch(r){throw Tf.error(Pr.WRITE_TEMP_FILE_ERR),Xt(r,su(Pr.DEFAULT_BULK_LOAD_ERR))}}o(Yge,"writeFileToTempFolder");async function Ay(e){if(e)try{await Pi.access(e),await Pi.unlink(e)}catch{Tf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(Ay,"deleteTempFile");function Wge(e,t){if(e.statusCode!==qz.HTTP_STATUS_CODES.OK)throw Xt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,rn.BAD_REQUEST);if(!kge[e.headers["content-type"]])throw Xt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,rn.BAD_REQUEST);if(!e.raw)throw Xt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,rn.BAD_REQUEST)}o(Wge,"validateURLResponse");async function lL(e){try{let t;switch(e.file_type){case Oi.VALID_S3_FILE_TYPES.CSV:t=await zge(e);break;case Oi.VALID_S3_FILE_TYPES.JSON:t=await jge(e);break;default:throw Xt(new Error,Pr.DEFAULT_BULK_LOAD_ERR,rn.BAD_REQUEST,Oi.LOG_LEVELS.ERROR,Pr.INVALID_FILE_EXT_ERR(e))}return jz(t.records,t.number_written)}catch(t){throw iu(t)}}o(lL,"fileLoad");async function Kz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Ry.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&Vz(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Xt(c);r(l)}}o(Kz,"validateChunk");async function Yz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Sf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!Sf.isEmpty(c)&&!Sf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await $z.callOperationFunctionAsAwait(zz,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Xt(c,su(Pr.INSERT_CSV_ERR),rn.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Pr.INSERT_CSV_ERR+" - "+c);r(l)}}o(Yz,"insertChunk");async function zge(e){let t={records:0,number_written:0},r=Wz(e.schema,e.table);try{let n=new cL,s=Pi.createReadStream(e.file_path,{highWaterMark:Hz});s.setEncoding("utf8"),await iL.parsePromise(s,Kz.bind(null,e,n),oL.bind(null,r));let i=n.getPermsResponse();if(i)throw Xt(new Error,i,rn.BAD_REQUEST);return s=Pi.createReadStream(e.file_path,{highWaterMark:Hz}),s.setEncoding("utf8"),await iL.parsePromise(s,Yz.bind(null,e,t),oL.bind(null,r)),s.destroy(),t}catch(n){throw Xt(n,su(Pr.PAPA_PARSE_ERR),rn.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Pr.PAPA_PARSE_ERR+n)}}o(zge,"callPapaParse");function Wz(e,t){let r=xge[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>Bge(i,s));return n}o(Wz,"createTransformMap");function oL(e,t,r){let n=e.get(r);return n?n(t):Sf.autoCast(t)}o(oL,"typeFunction");async function jge(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new cL,s=vz([Pi.createReadStream(e.file_path,{encoding:"utf-8"}),Uz.withParser(),c=>c.value,new xz({batchSize:Gz}),Bz(async c=>{await Kz(e,n,r,c)})]);await new Promise((c,l)=>{Fz(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Xt(new Error,i,rn.BAD_REQUEST);let a=vz([Pi.createReadStream(e.file_path,{encoding:"utf-8"}),Uz.withParser(),c=>c.value,new xz({batchSize:Gz}),Bz(async c=>{await Yz(e,t,r,c)})]);return await new Promise((c,l)=>{Fz(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Xt(n,su(Pr.INSERT_JSON_ERR),rn.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Pr.INSERT_JSON_ERR+n)}}o(jge,"insertJson");async function zz(e){let t={};try{e.data&&e.data.length>0&&Qge(e.data[0])?t=await Jge(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Tf.info(t.message))}catch(r){throw iu(r)}return t}o(zz,"callBulkFileLoad");function Qge(e){let t=Object.keys(e);for(let r of t)if(!Fge.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(Qge,"validateColumnNames");async function Jge(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Ry.insert;break;case"update":i=Ry.update;break;case"upsert":i=Ry.upsert;break;default:throw Xt(new Error,Pr.INVALID_ACTION_PARAM_ERR(n),rn.BAD_REQUEST,Oi.LOG_LEVELS.ERROR,Pr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Sf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw iu(a)}}o(Jge,"bulkFileLoad");function jz(e,t){return`successfully loaded ${t} of ${e} records`}o(jz,"buildResponseMsg");function iu(e){return Xt(e,su(Pr.DEFAULT_BULK_LOAD_ERR),rn.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Pr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(iu,"buildTopLevelErrMsg")});var mL=v((mke,sj)=>{"use strict";var fL=fn(),Xge=eL(),{AsyncParser:Zge}=require("json2csv"),Iy=require("stream"),Es=ce(),dL=require("fs-extra"),eSe=require("path"),Js=Q(),{promisify:Zz}=require("util"),oE=ce(),{handleHDBError:gr,hdbErrors:tSe}=Ee(),{HDB_ERROR_MSGS:Yn,HTTP_STATUS_CODES:Sr}=tSe,{streamAsJSON:rSe}=(jA(),M(LU)),{Upload:nSe}=require("@aws-sdk/lib-storage"),{toCsvStream:sSe}=(Do(),M(GU)),Jz=["search_by_value","search_by_hash","sql","search_by_conditions"],Xz=["json","csv"],ej="json",tj="csv",iSe="Successfully exported JSON locally.",oSe="Successfully exported CSV locally.",aSe=1e3,cSe=fL.searchByHash,lSe=fL.searchByValue,uSe=Zz(Iy.finished);sj.exports={export_to_s3:pSe,export_local:dSe};async function dSe(e){Js.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=rj(e);if(!Es.isEmpty(t))throw Js.error(t),gr(new Error,t,Sr.BAD_REQUEST,void 0,void 0,!0);if(Es.isEmpty(e.path))throw Js.error(Yn.MISSING_VALUE("path")),gr(new Error,Yn.MISSING_VALUE("path"),Sr.BAD_REQUEST,void 0,void 0,!0);let r=(Es.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(eSe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Es.buildFolderPath(e.path,r);await fSe(e.path);let s=await nj(e);return await mSe(n,e.format,s)}o(dSe,"export_local");async function fSe(e){if(Js.trace("in confirmPath"),Es.isEmptyOrZeroLength(e))throw gr(new Error,`Invalid path: ${e}`,Sr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await dL.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,Js.error(n),gr(new Error,n,Sr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw Js.error(r),gr(new Error,r,Sr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(fSe,"confirmPath");async function mSe(e,t,r){if(Js.trace("in saveToLocal"),oE.isEmptyOrZeroLength(e))throw gr(new Error,Yn.INVALID_VALUE("file_path"),Sr.BAD_REQUEST,void 0,void 0,!0);if(oE.isEmptyOrZeroLength(t))throw gr(new Error,Yn.INVALID_VALUE("Source format"),Sr.BAD_REQUEST,void 0,void 0,!0);if(oE.isEmpty(r))throw gr(new Error,Yn.NOT_FOUND("Data"),Sr.BAD_REQUEST,void 0,void 0,!0);if(t===ej){let n=dL.createWriteStream(e);return rSe(r).pipe(n),await uSe(n),{message:iSe,path:e}}else if(t===tj){let n=dL.createWriteStream(e),s=Iy.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new Zge(i,c).fromInput(s).toOutput(n).promise(!1),{message:oSe,path:e}}throw gr(new Error,Yn.INVALID_VALUE("format"),Sr.BAD_REQUEST)}o(mSe,"saveToLocal");async function pSe(e){if(!e.s3||Object.keys(e.s3).length===0)throw gr(new Error,Yn.MISSING_VALUE("S3 object"),Sr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw gr(new Error,Yn.MISSING_VALUE("aws_access_key_id"),Sr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw gr(new Error,Yn.MISSING_VALUE("aws_secret_access_key"),Sr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.bucket))throw gr(new Error,Yn.MISSING_VALUE("bucket"),Sr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.key))throw gr(new Error,Yn.MISSING_VALUE("key"),Sr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.region))throw gr(new Error,Yn.MISSING_VALUE("region"),Sr.BAD_REQUEST);let t=rj(e);if(!Es.isEmpty(t))throw gr(new Error,t,Sr.BAD_REQUEST);Js.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await nj(e)}catch(l){throw Js.error(l),l}let n,s=await Xge.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new Iy.PassThrough;if(e.format===tj){i=e.s3.key+".csv";let l=sSe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===ej){i=e.s3.key+".json";let l=new Iy.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%aSe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw gr(new Error,Yn.INVALID_VALUE("format"),Sr.BAD_REQUEST);return new nSe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(pSe,"export_to_s3");function rj(e){if(Js.trace("in exportCoreValidation"),Es.isEmpty(e.format))return"format missing";if(Xz.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Xz.join(", ")}`;let t=e.search_operation.operation;if(Es.isEmpty(t))return"search_operation.operation missing";if(Jz.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${Jz.join(", ")}`}o(rj,"exportCoreValidation");async function nj(e){Js.trace("in getRecords");let t,r;if(oE.isEmpty(e.search_operation)||oE.isEmptyOrZeroLength(e.search_operation.operation))throw gr(new Error,Yn.INVALID_VALUE("Search operation"),Sr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=lSe;break;case"search_by_hash":t=cSe;break;case"search_by_conditions":t=fL.searchByConditions;break;case"sql":{let n=py();t=Zz(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Js.error(r),gr(new Error,r,Sr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(nj,"getRecords")});var oj=v((hke,ij)=>{"use strict";var pL=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};ij.exports=pL});var lj=v((_ke,cj)=>{"use strict";var hSe=(q(),M(W)),aj=require("moment"),ESe=require("uuid").v4,hL=class{static{o(this,"JobObject")}constructor(){this.id=ESe(),this.type=void 0,this.start_datetime=aj().valueOf(),this.created_datetime=aj().valueOf(),this.end_datetime=void 0,this.status=hSe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};cj.exports=hL});var EL=v((Ske,_j)=>{"use strict";var _Se=require("uuid").v4,pj=kn(),hj=fn(),gSe=hi(),SSe=Xu(),TSe=oj(),Ot=(q(),M(W)),ySe=lj(),RSe=_S(),Li=Q(),ASe=gm(),yf=ce(),{promisify:bSe}=require("util"),ou=require("moment"),ISe=py(),wy=XP(),uj=lw(),{deleteTransactionLogsBeforeValidator:wSe}=uP(),{handleHDBError:dj,hdbErrors:NSe,ClientError:CSe}=Ee(),{HTTP_STATUS_CODES:fj}=NSe,mj=hj.searchByValue,OSe=hj.searchByHash,PSe=pj.insert,LSe=bSe(ISe.evaluateSQL),DSe=pj.update;_j.exports={addJob:USe,updateJob:BSe,handleGetJob:MSe,handleGetJobsByStartDate:vSe,getJobById:Ej};async function MSe(e){if(e.id===void 0)throw new CSe("'id' is required");let t=await Ej(e.id);return yf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(MSe,"handleGetJob");async function vSe(e){try{let t=await xSe(e);if(Li.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=ou(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=ou(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 Li.error(r),new Error(r)}}o(vSe,"handleGetJobsByStartDate");async function USe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||yf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Li.info(d),t.error=d,t}if(!Ot.JOB_TYPE_ENUM[e.operation])return Li.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ot.OPERATIONS_ENUM.CSV_FILE_LOAD:n=wy.fileObject(e);break;case Ot.OPERATIONS_ENUM.CSV_URL_LOAD:n=wy.urlObject(e);break;case Ot.OPERATIONS_ENUM.CSV_DATA_LOAD:n=wy.dataObject(e);break;case Ot.OPERATIONS_ENUM.IMPORT_FROM_S3:n=wy.s3FileObject(e);break;case Ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=uj(e,"date");break;case Ot.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=uj(e,"timestamp");break;case Ot.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=wSe(e);break;case Ot.OPERATIONS_ENUM.RESTART_SERVICE:if(Ot.HDB_PROCESS_SERVICES[e.service]===void 0)throw dj(new Error,"Invalid service",fj.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw dj(n,n.message,fj.BAD_REQUEST,void 0,void 0,!0);let s=new ySe;s.type=e.operation===Ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new gSe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await mj(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Li.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=_Se();try{a=await mj(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Li.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Li.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new ASe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await PSe(l)}catch(d){return Li.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Li.trace(d)}return t}o(USe,"addJob");async function xSe(e){let t=ou(e.from_date,ou.ISO_8601),r=ou(e.to_date,ou.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 TSe(n,e.hdb_user);try{return await LSe(s)}catch(i){throw Li.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(xSe,"getJobsInDateRange");async function Ej(e){if(yf.isEmptyOrZeroLength(e))return yf.errorizeMessage("Invalid job ID specified.");let t=new SSe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await OSe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Li.error(n),yf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(Ej,"getJobById");async function BSe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(yf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ot.JOB_STATUS_ENUM.COMPLETE||e.status===Ot.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=ou().valueOf());let t=new RSe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await DSe(t),r}o(BSe,"updateJob")});var Ij=v((yke,bj)=>{"use strict";var gj=ce(),Lr=(q(),M(W)),FSe=require("moment"),Ny=uL(),aE=Q(),Sj=EL(),Tj=mL(),yj=yl(),Rj=nt(),kSe=ry(),HSe=df(),{parentPort:GSe,isMainThread:Aj}=require("worker_threads"),{onMessageByType:qSe}=nt(),_L=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function $Se(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(gj.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(gj.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Lr.JOB_TYPE_ENUM.csv_file_load:await co(e,Ny.csvFileLoad);break;case Lr.JOB_TYPE_ENUM.csv_url_load:await co(e,Ny.csvURLLoad);break;case Lr.JOB_TYPE_ENUM.csv_data_load:await co(e,Ny.csvDataLoad);break;case Lr.JOB_TYPE_ENUM.import_from_s3:await co(e,Ny.importFromS3);break;case Lr.JOB_TYPE_ENUM.empty_trash:break;case Lr.JOB_TYPE_ENUM.export_local:await co(e,Tj.export_local);break;case Lr.JOB_TYPE_ENUM.export_to_s3:await co(e,Tj.export_to_s3);break;case Lr.JOB_TYPE_ENUM.delete_files_before:case Lr.JOB_TYPE_ENUM.delete_records_before:await co(e,yj.deleteFilesBefore);break;case Lr.JOB_TYPE_ENUM.delete_audit_logs_before:await co(e,yj.deleteAuditLogsBefore);break;case Lr.JOB_TYPE_ENUM.delete_transaction_logs_before:await co(e,kSe.deleteTransactionLogsBefore);break;case Lr.JOB_TYPE_ENUM.restart_service:return await co(e,HSe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o($Se,"parseMessage");async function co(e,t){try{e.job.status=Lr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=FSe().valueOf(),await Sj.updateJob(e.job),await VSe(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):aE.error(`There was an error running ${t.name} job with id ${e.job.id}`),aE.error(n),e.job.message=n,e.job.status=Lr.JOB_STATUS_ENUM.ERROR;try{await Sj.updateJob(e.job)}catch(s){throw aE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(co,"runJob");async function VSe(e){aE.trace("launching job thread:",e),Aj?Rj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):GSe.postMessage({type:Lr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(VSe,"launchJobThread");Aj&&qSe(Lr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Rj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){aE.error(r)}});bj.exports={parseMessage:$Se,RunnerMessage:_L}});var Nj=v((Ake,wj)=>{"use strict";var KSe=ce(),gL=le(),_c=(q(),M(W)),YSe=Nt(),WSe=pr(),lo=Q(),zSe=sL(),jSe=Ji();gL.initSync();wj.exports={postOperationHandler:JSe,sendOperationTransaction:cE};async function cE(e,t,r,n){if(e.schema===_c.SYSTEM_SCHEMA_NAME)return;let s=QSe(e,t,r);s&&(lo.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await WSe.publishToStream(`${YSe.SUBJECT_PREFIXES.TXN}.${e.schema}`,jSe.createNatsTableStreamName(e.schema,e.table),n,s))}o(cE,"sendOperationTransaction");function QSe(e,t,r){if(KSe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===_c.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(QSe,"convertCRUDOperationToTransaction");async function JSe(e,t,r){if(!gL.get(_c.CONFIG_PARAMS.CLUSTERING_ENABLED))return;lo.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=gL.get(_c.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new zSe(t.txn_time,n,s);switch(e.operation){case _c.OPERATIONS_ENUM.INSERT:try{await cE(e,t.inserted_hashes,i,r)}catch(a){lo.error("There was an error calling clustering postOperationHandler for insert."),lo.error(a)}break;case _c.OPERATIONS_ENUM.DELETE:try{await cE(e,t.deleted_hashes,i,r)}catch(a){lo.error("There was an error calling clustering postOperationHandler for delete."),lo.error(a)}break;case _c.OPERATIONS_ENUM.UPDATE:try{await cE(e,t.update_hashes,i,r)}catch(a){lo.error("There was an error calling clustering postOperationHandler for update."),lo.error(a)}break;case _c.OPERATIONS_ENUM.UPSERT:try{await cE(e,t.upserted_hashes,i,r)}catch(a){lo.error("There was an error calling clustering postOperationHandler for upsert."),lo.error(a)}break;default:break}return t}o(JSe,"postOperationHandler")});var Z,Cj=ie(()=>{Z=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var cP={};be(cP,{chooseOperation:()=>Wj,executeJob:()=>Xs,getOperationFunction:()=>zj,operation:()=>NL,processLocalTransaction:()=>Yj});async function Yj(e,t){try{if(e.body.operation!=="read_log"&&(fE.default.log_level===nm.INFO||fE.default.log_level===nm.DEBUG||fE.default.log_level===nm.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;An.info(c)}}catch(n){An.error(n)}let r=await Vj.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return tTe[e.body.operation]&&Hj.default.setSchemaDataToGlobal(n=>{n&&An.error(n)}),r}function Wj(e){let t;try{t=zj(e)}catch(s){throw An.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=Py.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=Py.default.checkASTPermissions(e,i);if(a)throw An.error(`${Oj.FORBIDDEN} from operation ${e.operation}`),An.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Zs.handleHDBError)(new Error,a,Zs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==$.CREATE_AUTHENTICATION_TOKENS&&e.operation!==$.LOGIN&&e.operation!==$.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=kj.default.verifyPerms(i,s);if(a)throw An.error(`${Oj.FORBIDDEN} from operation ${e.operation}`),An.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Zs.handleHDBError)(new Error,a,Zs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Zs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function zj(e){if(An.trace(`getOperationFunction with operation: ${e.operation}`),Pj.has(e.operation))return Pj.get(e.operation);throw(0,Zs.handleHDBError)(new Error,Zs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Zs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function NL(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=Wj(e);return Yj({body:e},n)}async function rTe(e){An.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[AA]=!0;let a;switch(i.operation){case $.INSERT:a=await cu.default.insert(i);break;case $.UPDATE:a=await cu.default.update(i);break;case $.UPSERT:a=await cu.default.upsert(i);break;case $.DELETE:a=await bf.default.deleteRecord(i);break;default:An.warn("invalid operation in catchup");break}await XSe.postOperationHandler(i,a,e)}catch(a){An.info("Invalid operation in transaction"),An.error(a)}}async function Xs(e){(0,$j.transformReq)(e);let t,r;try{if(r=await Ly.default.addJob(e),r){t=r.createdJob,An.info("addJob result",r);let n=new RL.default.RunnerMessage(t,e);return{message:await RL.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw An.error(i),(0,Zs.handleHDBError)(n,i)}}function nTe(){let e=new Map;return e.set($.INSERT,new Z(cu.default.insert)),e.set($.UPDATE,new Z(cu.default.update)),e.set($.UPSERT,new Z(cu.default.upsert)),e.set($.SEARCH_BY_CONDITIONS,new Z(Af.default.searchByConditions)),e.set($.SEARCH_BY_HASH,new Z(Af.default.searchByHash)),e.set($.SEARCH_BY_ID,new Z(Af.default.searchByHash)),e.set($.SEARCH_BY_VALUE,new Z(Af.default.searchByValue)),e.set($.SEARCH,new Z(ZSe)),e.set($.SQL,new Z(eTe)),e.set($.CSV_DATA_LOAD,new Z(Xs,lE.default.csvDataLoad)),e.set($.CSV_FILE_LOAD,new Z(Xs,lE.default.csvFileLoad)),e.set($.CSV_URL_LOAD,new Z(Xs,lE.default.csvURLLoad)),e.set($.IMPORT_FROM_S3,new Z(Xs,lE.default.importFromS3)),e.set($.CREATE_SCHEMA,new Z(uo.default.createSchema)),e.set($.CREATE_DATABASE,new Z(uo.default.createSchema)),e.set($.CREATE_TABLE,new Z(uo.default.createTable)),e.set($.CREATE_ATTRIBUTE,new Z(uo.default.createAttribute)),e.set($.DROP_SCHEMA,new Z(uo.default.dropSchema)),e.set($.DROP_DATABASE,new Z(uo.default.dropSchema)),e.set($.DROP_TABLE,new Z(uo.default.dropTable)),e.set($.DROP_ATTRIBUTE,new Z(uo.default.dropAttribute)),e.set($.DESCRIBE_SCHEMA,new Z(uE.default.describeSchema)),e.set($.DESCRIBE_DATABASE,new Z(uE.default.describeSchema)),e.set($.DESCRIBE_TABLE,new Z(uE.default.describeTable)),e.set($.DESCRIBE_ALL,new Z(uE.default.describeAll)),e.set($.DELETE,new Z(bf.default.deleteRecord)),e.set($.ADD_USER,new Z(Rf.default.addUser)),e.set($.ALTER_USER,new Z(Rf.default.alterUser)),e.set($.DROP_USER,new Z(Rf.default.dropUser)),e.set($.LIST_USERS,new Z(Rf.default.listUsersExternal)),e.set($.LIST_ROLES,new Z(dE.default.listRoles)),e.set($.ADD_ROLE,new Z(dE.default.addRole)),e.set($.ALTER_ROLE,new Z(dE.default.alterRole)),e.set($.DROP_ROLE,new Z(dE.default.dropRole)),e.set($.USER_INFO,new Z(Rf.default.userInfo)),e.set($.READ_LOG,new Z(Dj.default)),e.set($.ADD_NODE,new Z(Mj.default)),e.set($.UPDATE_NODE,new Z(SL.default)),e.set($.SET_NODE_REPLICATION,new Z(SL.default)),e.set($.REMOVE_NODE,new Z(vj.default)),e.set($.CONFIGURE_CLUSTER,new Z(Uj.default)),e.set($.PURGE_STREAM,new Z(xj.default)),e.set($.SET_CONFIGURATION,new Z(AL.default.setConfiguration)),e.set($.CLUSTER_STATUS,new Z(Bj.default.clusterStatus)),e.set($.CLUSTER_NETWORK,new Z(Fj.default)),e.set($.CLUSTER_SET_ROUTES,new Z(Cy.default.setRoutes)),e.set($.CLUSTER_GET_ROUTES,new Z(Cy.default.getRoutes)),e.set($.CLUSTER_DELETE_ROUTES,new Z(Cy.default.deleteRoutes)),e.set($.EXPORT_TO_S3,new Z(Xs,TL.default.export_to_s3)),e.set($.CREATE_CSR,new Z(au.default.createCsr)),e.set($.SIGN_CERTIFICATE,new Z(au.default.signCertificate)),e.set($.LIST_CERTIFICATES,new Z(au.default.listCertificates)),e.set($.ADD_CERTIFICATES,new Z(au.default.addCertificate)),e.set($.REMOVE_CERTIFICATE,new Z(au.default.removeCertificate)),e.set($.GET_KEY,new Z(au.default.getKey)),e.set($.ADD_NODE_BACK,new Z(oO)),e.set($.REMOVE_NODE_BACK,new Z(aO)),e.set($.DELETE_FILES_BEFORE,new Z(Xs,bf.default.deleteFilesBefore)),e.set($.DELETE_RECORDS_BEFORE,new Z(Xs,bf.default.deleteFilesBefore)),e.set($.EXPORT_LOCAL,new Z(Xs,TL.default.export_local)),e.set($.SEARCH_JOBS_BY_START_DATE,new Z(Ly.default.handleGetJobsByStartDate)),e.set($.GET_JOB,new Z(Ly.default.handleGetJob)),e.set($.GET_FINGERPRINT,new Z(Oy.default.getFingerprint)),e.set($.SET_LICENSE,new Z(Oy.default.setLicense)),e.set($.GET_REGISTRATION_INFO,new Z(Oy.default.getRegistrationInfo)),e.set($.RESTART,new Z(yL.default.restart)),e.set($.RESTART_SERVICE,new Z(Xs,yL.default.restartService)),e.set($.CATCHUP,new Z(rTe)),e.set($.SYSTEM_INFORMATION,new Z(Gj.default.systemInformation)),e.set($.DELETE_AUDIT_LOGS_BEFORE,new Z(Xs,bf.default.deleteAuditLogsBefore)),e.set($.READ_AUDIT_LOG,new Z(Lj.default)),e.set($.CREATE_AUTHENTICATION_TOKENS,new Z(PN)),e.set($.REFRESH_OPERATION_TOKEN,new Z(LN)),e.set($.LOGIN,new Z(eP)),e.set($.LOGOUT,new Z(tP)),e.set($.GET_CONFIGURATION,new Z(AL.default.getConfiguration)),e.set($.CUSTOM_FUNCTIONS_STATUS,new Z(Pt.default.customFunctionsStatus)),e.set($.GET_CUSTOM_FUNCTIONS,new Z(Pt.default.getCustomFunctions)),e.set($.GET_COMPONENT_FILE,new Z(Pt.default.getComponentFile)),e.set($.GET_COMPONENTS,new Z(Pt.default.getComponents)),e.set($.SET_COMPONENT_FILE,new Z(Pt.default.setComponentFile)),e.set($.DROP_COMPONENT,new Z(Pt.default.dropComponent)),e.set($.GET_CUSTOM_FUNCTION,new Z(Pt.default.getCustomFunction)),e.set($.SET_CUSTOM_FUNCTION,new Z(Pt.default.setCustomFunction)),e.set($.DROP_CUSTOM_FUNCTION,new Z(Pt.default.dropCustomFunction)),e.set($.ADD_CUSTOM_FUNCTION_PROJECT,new Z(Pt.default.addComponent)),e.set($.ADD_COMPONENT,new Z(Pt.default.addComponent)),e.set($.DROP_CUSTOM_FUNCTION_PROJECT,new Z(Pt.default.dropCustomFunctionProject)),e.set($.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(Pt.default.packageComponent)),e.set($.PACKAGE_COMPONENT,new Z(Pt.default.packageComponent)),e.set($.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(Pt.default.deployComponent)),e.set($.DEPLOY_COMPONENT,new Z(Pt.default.deployComponent)),e.set($.READ_TRANSACTION_LOG,new Z(bL.default.readTransactionLog)),e.set($.DELETE_TRANSACTION_LOGS_BEFORE,new Z(Xs,bL.default.deleteTransactionLogsBefore)),e.set($.INSTALL_NODE_MODULES,new Z(IL.default.installModules)),e.set($.AUDIT_NODE_MODULES,new Z(IL.default.auditModules)),e.set($.GET_BACKUP,new Z(uo.default.getBackup)),e.set($.ADD_SSH_KEY,new Z(Pt.default.addSSHKey)),e.set($.UPDATE_SSH_KEY,new Z(Pt.default.updateSSHKey)),e.set($.DELETE_SSH_KEY,new Z(Pt.default.deleteSSHKey)),e.set($.LIST_SSH_KEYS,new Z(Pt.default.listSSHKeys)),e.set($.SET_SSH_KNOWN_HOSTS,new Z(Pt.default.setSSHKnownHosts)),e.set($.GET_SSH_KNOWN_HOSTS,new Z(Pt.default.getSSHKnownHosts)),e.set($.GET_ANALYTICS,new Z(fP)),e.set($.LIST_METRICS,new Z(mP)),e.set($.DESCRIBE_METRIC,new Z(pP)),e.set($.GET_STATUS,new Z(RP)),e.set($.SET_STATUS,new Z(AP)),e.set($.CLEAR_STATUS,new Z(yP)),e.set($.INSTALL_USAGE_LICENSE,new Z(CP)),e.set($.GET_USAGE_LICENSES,new Z(OP)),e}var Af,Py,lE,uo,uE,bf,Lj,Rf,dE,Pt,fE,Dj,Mj,SL,vj,Uj,xj,Bj,Fj,Cy,TL,kj,Ly,Zs,Oy,yL,wL,cu,Hj,Gj,RL,AL,bL,IL,qj,$j,au,Vj,Kj,Oj,An,XSe,ZSe,eTe,tTe,Pj,lP=ie(()=>{Af=I(fn()),Py=I(py()),lE=I(uL()),uo=I(fT()),uE=I(Dl()),bf=I(yl()),Lj=I(vC()),Rf=I(as()),dE=I(qp()),Pt=I(aP()),fE=I(Q()),Dj=I(kC()),Mj=I(bT()),SL=I(fO()),vj=I(wT()),Uj=I(hO()),xj=I(EO()),Bj=I(SO()),Fj=I(yO()),Cy=I(LT()),TL=I(mL()),kj=I(fy()),Ly=I(EL());q();Zs=I(Ee()),Oy=I(vO()),yL=I(df()),wL=I(require("util")),cu=I(kn()),Hj=I(ji()),Gj=I(Jd()),RL=I(Ij());Nd();WT();AL=I(Rt()),bL=I(ry()),IL=I(Gh()),qj=I(li()),$j=I(ce());Ur();au=I(fs());Zd();EP();Vj=I(ZP()),Kj=I(Nj());jh();LP();Cj();({HTTP_STATUS_CODES:Oj}=Zs.hdbErrors),An=fE.default.loggerWithTag("operation"),{transactToClusteringUtils:XSe}=Kj.default,ZSe=wL.promisify(Af.default.search),eTe=wL.promisify(Py.default.evaluateSQL),tTe={[$.CREATE_ATTRIBUTE]:!0,[$.CREATE_TABLE]:!0,[$.CREATE_SCHEMA]:!0,[$.DROP_ATTRIBUTE]:!0,[$.DROP_TABLE]:!0,[$.DROP_SCHEMA]:!0};o(Yj,"processLocalTransaction");Pj=nTe();Ue.operation=NL;o(Wj,"chooseOperation");o(zj,"getOperationFunction");(0,qj._assignPackageExport)("operation",NL);o(NL,"operation");o(rTe,"catchup");o(Xs,"executeJob");o(nTe,"initializeOperationFunctionMap")});var vy=v((Pke,Jj)=>{"use strict";var Dy=(q(),M(W)),sTe=ce(),mE=Q(),{handleHDBError:CL,hdbErrors:My}=Ee(),{isMainThread:iTe}=require("worker_threads"),{Readable:oTe}=require("stream"),jj=require("os"),aTe=require("util"),cTe=MN(),lTe=aTe.promisify(cTe.authorize),Qj=(lP(),M(cP)),{createGzip:uTe,constants:dTe}=require("zlib"),fTe=[Dy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,Dy.OPERATIONS_ENUM.LOGIN,Dy.OPERATIONS_ENUM.LOGOUT];function mTe(e){let t=`Found an uncaught exception with message: ${e.message}. ${jj.EOL}Stack: ${e.stack} ${jj.EOL}Terminating ${iTe?"HDB":"thread"}.`;console.error(t),mE.fatal(t),process.exit(1)}o(mTe,"handleServerUncaughtException");function pTe(e,t,r){if(mE[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:My.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(pTe,"serverErrorHandler");function hTe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=CL(new Error,"Invalid JSON.",My.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(sTe.isEmpty(e.body.operation)){let n=CL(new Error,"Request body must include an 'operation' property.",My.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(hTe,"reqBodyValidationHandler");function ETe(e,t,r){let n;!fTe.includes(e.body.operation)||e.body.operation===Dy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?lTe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{mE.warn(i),mE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(CL(i,a,My.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(ETe,"authHandler");async function _Te(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=Qj.chooseOperation(e.body);let s=await Qj.processLocalTransaction(e,n);if(s instanceof oTe&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(uTe({level:dTe.Z_BEST_SPEED})))}return s}catch(s){throw mE.error(s),s}}o(_Te,"handlePostRequest");Jj.exports={authHandler:ETe,handlePostRequest:_Te,handleServerUncaughtException:mTe,serverErrorHandler:pTe,reqBodyValidationHandler:hTe}});var t2=v((Dke,e2)=>{"use strict";var gTe=require("fastify-plugin"),{handlePostRequest:Xj,authHandler:STe,reqBodyValidationHandler:TTe}=vy();async function yTe(e){e.decorate("hdbCore",{preValidation:[TTe,STe],request:o(t=>Zj(Xj(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>Zj(Xj(t,r,!0)),"requestWithoutAuthentication")})}o(yTe,"hdbCore");async function Zj(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}o(Zj,"convertAsyncIterators");e2.exports=gTe(yTe)});var n2=v((Uke,r2)=>{"use strict";var vke=require("fs"),Uy=le();Uy.initSync();var{CONFIG_PARAMS:OL}=(q(),M(W)),RTe=1024*1024*1024;function ATe(e){let t=Uy.get(OL.HTTP_TIMEOUT),r=Uy.get(OL.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:RTe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:Uy.get(OL.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(ATe,"getServerOptions");r2.exports=ATe});var o2=v((Bke,i2)=>{"use strict";var PL=le();PL.initSync();var{CONFIG_PARAMS:s2}=(q(),M(W));function bTe(){let e=PL.get(s2.HTTP_CORSACCESSLIST),t=PL.get(s2.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(bTe,"getCORSOptions");i2.exports=bTe});var l2=v((kke,c2)=>{"use strict";var a2=le();a2.initSync();var ITe=(q(),M(W));function wTe(){return a2.get(ITe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(wTe,"getHeaderTimeoutConfig");c2.exports=wTe});var DL={};be(DL,{customFunctionsServer:()=>OTe,ready:()=>A2,start:()=>CTe});function CTe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){aa||(aa=R2(t),Ue.http((await aa).server));let a=await aa,c=(0,LL.dirname)(s),l=(0,LL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!u2.has(c)){u2.add(c);try{a.register(LTe(c,l))}catch(u){if(u.message==="Root plugin has already booted")St.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:A2}}async function OTe(){try{St.info("In Custom Functions Fastify server"+process.cwd()),St.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),St.debug(`Custom Functions server process ${process.pid} starting up.`),await PTe();let e=E2.get(x.HTTP_SECUREPORT)>0,t;try{t=aa=await R2(e)}catch(r){throw St.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw St.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){St.error(`Custom Functions ${process.pid} Error: ${e}`),St.error(e),process.exit(1)}}async function PTe(){try{St.info("Custom Functions starting configuration."),await _2.setUsersWithRolesCache(),St.info("Custom Functions completed configuration.")}catch(e){St.error(e)}}function LTe(e,t){return async function(r){try{St.info("Custom Functions starting buildRoutes"),St.trace("Loading fastify routes folder "+e),(0,d2.existsSync)(e)&&r.register(h2.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:St.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?St.error(s.message):s&&St.error(s),a()})}catch(n){St.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function R2(e){St.info("Custom Functions starting buildServer.");let t=(0,g2.default)(e),r=(0,f2.default)(t);r.server.headersTimeout=(0,T2.default)(),r.setErrorHandler(y2.serverErrorHandler);let n=(0,S2.default)();return n&&r.register(m2.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(p2.default),await r.register(NTe),await r.after(),wm(r),St.info("Custom Functions completed buildServer."),r}function A2(){if(aa)return aa.then?aa.then(e=>e.ready()):aa.ready()}var LL,d2,f2,m2,p2,h2,E2,St,NTe,_2,g2,S2,T2,y2,aa,u2,b2=ie(()=>{LL=require("path"),d2=require("fs"),f2=I(require("fastify")),m2=I(require("@fastify/cors")),p2=I(wN()),h2=I(require("@fastify/autoload")),E2=I(le());q();St=I(Q()),NTe=I(t2()),_2=I(as()),g2=I(n2()),S2=I(o2()),T2=I(l2()),y2=I(vy());Do();Ur();u2=new Set;o(CTe,"start");o(OTe,"customFunctionsServer");o(PTe,"setUp");o(LTe,"buildRouteFolder");o(R2,"buildServer");o(A2,"ready")});var vL={};be(vL,{handleApplication:()=>DTe,suppressHandleApplicationWarning:()=>MTe});function DTe(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,wf.join)(n.absolutePath,"index.html");(0,If.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&r.set((0,wf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,wf.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let a=t.get(n.pathname);if(!a){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(a=r.get(n.pathname))}if(!a){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(a=t.get(`${n.pathname}.${f}`),a)break}if(a)return{handlesHeaders:!0,body:(0,ML.default)(n,(0,If.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(vTe(c),!c)return{status:404,body:"File not found"};let l=(0,wf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,If.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,ML.default)(n,(0,If.realpathSync)(l))}},{runFirst:!0})}function vTe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var If,wf,ML,MTe,I2=ie(()=>{If=require("node:fs"),wf=require("node:path"),ML=I(require("send"));o(DTe,"handleApplication");MTe=!0;o(vTe,"validateNotFoundOption")});var UL={};be(UL,{start:()=>UTe});function UTe({override:e}){return{handleFile:o((t,r,n)=>{xy.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,w2.parse)(t))){if(process.env[s]!==void 0)if(xy.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)xy.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var w2,xy,N2=ie(()=>{w2=require("dotenv"),xy=I(Q());o(UTe,"start")});var xL={};be(xL,{DataLoaderError:()=>_s,DataLoaderResult:()=>Nf,EmptyFileError:()=>ky,FileParseError:()=>Fy,InvalidPropertyTypeError:()=>Hy,MissingRequiredPropertyError:()=>pE,RecordProcessingError:()=>hE,SystemDatabaseError:()=>Gy,UnsupportedFileExtensionError:()=>By,handleApplication:()=>BTe,loadDataFile:()=>D2,suppressHandleApplicationWarning:()=>xTe});function BTe(e){if((0,O2.getWorkerIndex)()!==0){fo.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||D2(t,pn,ve).then(r=>{fo.debug?.("Data loader processed file: %s: %s",(0,ca.basename)(t.absolutePath),r.message)})})}async function D2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,ca.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,C2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new By(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof _s?f:new Fy(t,f)}if(!a)throw new ky(t);let{database:c,table:l,records:u}=a;if(!l)throw new pE(t,"table");if(!u)throw new pE(t,"records");if(!Array.isArray(u))throw new Hy(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new Gy(c,l);try{let f;if(c&&s[c]&&s[c][l])fo.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])fo.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{fo.debug?.(`Table ${d} not found, creating new table`);let A=[];if(u.length>0){let S=u[0];Object.keys(S).map(T=>{let w={name:T,type:typeof S[T]};return T==="id"&&(w.isPrimaryKey=!0),w}).forEach(T=>{A.push(T)})}f=await Je({database:c,table:l,attributes:A})}let m=u.length,p=0,h=0,E=0,g=100;for(let A=0;A<u.length;A+=g){let S=u.slice(A,A+g),T=[];for(let w of S)T.push(async()=>{try{let L=null,k=w.id;if(k!==void 0&&(L=await f.get(k)),!L)return p++,f.put(w);let te=L.getUpdatedTime();return a.mtime>te?(h++,f.put(w)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(L){if(L instanceof _s)fo.error?.(`Record processing error: ${L.message}`);else{let k=new hE(d,L);fo.error?.(`Record processing error: ${k.message}`)}return Promise.resolve({inserted:0,updated:0,error:L.message})}});await Promise.all(T.map(w=>w()))}if(p>0||h>0){let A=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(A+=` (${E} records skipped)`),fo.info?.(A),new Nf(t,c,l,"success",p+h,A)}else if(E>0){let A=`All ${E} records in ${d} already up-to-date`;return fo.info?.(A),new Nf(t,c,l,"skipped",m,A)}else{let A=`No records to process in ${d}`;return fo.info?.(A),new Nf(t,c,l,"success",0,A)}}catch(f){throw f instanceof _s?f:new hE(d,f)}}var ca,C2,O2,la,P2,L2,fo,xTe,_s,By,Fy,ky,pE,Hy,Gy,hE,Nf,M2=ie(()=>{ca=require("node:path"),C2=require("yaml");Pe();O2=I(nt()),la=I(Yr()),P2=I(Ee()),L2=I(Q()),fo=L2.default.forComponent("dataLoader"),xTe=!0;o(BTe,"handleApplication");o(D2,"loadDataFile");_s=class extends P2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=la.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},By=class extends _s{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,ca.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,la.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},Fy=class extends _s{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,ca.basename)(t)}: ${r.message}`,la.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},ky=class extends _s{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,ca.basename)(t)} is empty or invalid`,la.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},pE=class extends _s{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,ca.basename)(t)} is missing required "${r}" property`,la.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},Hy=class extends _s{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,ca.basename)(t)} has invalid "${r}" property, expected ${n}`,la.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},Gy=class extends _s{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,la.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},hE=class extends _s{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,la.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Nf=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var FL=v((Jke,v2)=>{"use strict";var EE=le();EE.initSync();var Cf=require("fs-extra"),BL=require("path"),Of=(q(),M(W)),FTe=require("crypto"),kTe=require("uuid").v4;v2.exports=HTe;function HTe(){if(EE.getHdbBasePath()!==void 0){let e=BL.join(EE.getHdbBasePath(),Of.LICENSE_KEY_DIR_NAME,Of.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=BL.join(EE.getHdbBasePath(),Of.LICENSE_KEY_DIR_NAME,Of.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=BL.join(EE.getHdbBasePath(),Of.LICENSE_KEY_DIR_NAME,Of.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Cf.accessSync(r),Cf.accessSync(e),Cf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=kTe(),i=FTe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Cf.writeFileSync(r,s),Cf.writeFileSync(e,i.privateKey),Cf.writeFileSync(t,i.publicKey)}else throw n}}}o(HTe,"checkJWTTokenExist")});var x2=v((Zke,U2)=>{"use strict";var kL=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};U2.exports={HdbInfoInsertObject:kL}});var k2=v((tHe,F2)=>{"use strict";var B2=(q(),M(W)),HL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[B2.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[B2.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};F2.exports={UpgradeObject:HL}});var qy=v((nHe,G2)=>{"use strict";var ei=require("prompt"),Pf=require("chalk"),H2=Q(),Di=require("os"),GL=$c(),qL=["yes","y"];async function GTe(e){let t=`${Di.EOL}`+Pf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Di.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Di.EOL}${Di.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Di.EOL}`;ei.override=GL(["CONFIRM_UPGRADE"]),ei.start(),ei.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Pf.magenta(`${Di.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 ei.get([r])}catch(s){return H2.error("There was an error when prompting user about an upgrade."),H2.error(s),!1}return qL.includes(n.CONFIRM_UPGRADE)}o(GTe,"forceUpdatePrompt");async function qTe(e){let t=`${Di.EOL}`+Pf.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Di.EOL}`);ei.override=GL(["CONFIRM_DOWNGRADE"]),ei.start(),ei.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Pf.magenta(`${Di.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 ei.get([r]);return qL.includes(n.CONFIRM_DOWNGRADE)}o(qTe,"forceDowngradePrompt");async function $Te(){let e=`${Di.EOL}`+Pf.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");ei.override=GL(["GENERATE_CERTS"]),ei.start(),ei.message=e;let t={properties:{GENERATE_CERTS:{description:Pf.magenta(`${Di.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 ei.get([t]);return qL.includes(r.GENERATE_CERTS)}o($Te,"upgradeCertsPrompt");G2.exports={forceUpdatePrompt:GTe,forceDowngradePrompt:qTe,upgradeCertsPrompt:$Te}});var $y=v((iHe,q2)=>{"use strict";var $L=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};q2.exports=$L});var V2=v((dHe,$2)=>{"use strict";var VTe=ce(),KTe=Rt(),aHe=Q(),cHe=require("path"),lHe=require("fs"),uHe=(q(),M(W));$2.exports={getOldPropsValue:YTe};function YTe(e,t,r=!1){let n=t.getRaw(e);return VTe.isNotEmptyAndHasValue(n)?n:r?KTe.getDefaultConfig(e):""}o(YTe,"getOldPropsValue")});var z2=v((mHe,W2)=>{"use strict";var gc=require("path"),Sc=require("fs-extra"),WTe=require("properties-reader"),zTe=$y(),Tr=Q(),{getOldPropsValue:Tt}=V2(),{HDB_SETTINGS_NAMES:ge,CONFIG_PARAMS:lu}=(q(),M(W)),uu=Rt(),Vy=le(),K2=ce(),mo=(q(),M(W)),VL=new zTe("3.1.0"),Y2=[];function jTe(){let e=WTe(Vy.get(ge.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Tr.info(t);let r=` ;Settings for the HarperDB process.
|
|
41
41
|
|
|
42
42
|
;The directory selected during install where the database files reside.
|
|
43
43
|
${ge.HDB_ROOT_KEY} = ${Tt(ge.HDB_ROOT_KEY,e)}
|
|
@@ -106,12 +106,12 @@ ${ge.CUSTOM_FUNCTIONS_PORT_KEY} = ${uu.getDefaultConfig(lu.HTTP_PORT)}
|
|
|
106
106
|
${ge.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${gc.join(Tt(ge.HDB_ROOT_KEY,e),"custom_functions")}
|
|
107
107
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
108
108
|
${ge.MAX_CUSTOM_FUNCTION_PROCESSES} = ${uu.getDefaultConfig(lu.HTTP_THREADS)}
|
|
109
|
-
`,n=Vy.get("settings_path"),s=gc.dirname(n),i=gc.join(s,"3_1_0_upgrade_settings.bak");try{Tr.info(`Backing up old settings file to: ${i}`),Sc.copySync(n,i)}catch(c){throw Tr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Tr.info("New settings file values for 3.1.0 upgrade:",r),Tr.info(`Creating new/upgraded settings file at '${n}'`),Sc.writeFileSync(n,r),Tr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Tr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Tr.error(c),Sc.copySync(i,n),c}Vy.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Tr.info(a),a}o(jTe,"updateSettingsFile310");function QTe(){let e=gc.join(K2.getHomeDir(),mo.HDB_HOME_DIR_NAME,mo.LICENSE_KEY_DIR_NAME,mo.LICENSE_FILE_NAME),t=gc.join(K2.getHomeDir(),mo.HDB_HOME_DIR_NAME,mo.LICENSE_KEY_DIR_NAME,mo.REG_KEY_FILE_NAME),r=gc.join(Vy.getHdbBasePath(),mo.LICENSE_KEY_DIR_NAME,mo.LICENSE_FILE_NAME),n=gc.join(r,mo.LICENSE_FILE_NAME),s=gc.join(r,mo.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Tr.info(i);let a="Creating .license directory";console.log(a),Tr.info(a),Sc.mkdirpSync(r);try{Sc.accessSync(e);try{let c="Moving licence file";console.log(c),Tr.info(c),Sc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving license file failed";console.error(l),Tr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Tr.warn(l)}try{Sc.accessSync(t);try{let c="Moving registration file";console.log(c),Tr.info(c),Sc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving registration file failed";console.error(l),Tr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Tr.warn(l)}}o(QTe,"moveLicenseFiles");VL.sync_functions.push(jTe);VL.sync_functions.push(QTe);Y2.push(VL);W2.exports=Y2});var Z2=v((hHe,X2)=>{"use strict";var gs=gt(),{insertRecords:JTe}=ul(),XTe=
|
|
109
|
+
`,n=Vy.get("settings_path"),s=gc.dirname(n),i=gc.join(s,"3_1_0_upgrade_settings.bak");try{Tr.info(`Backing up old settings file to: ${i}`),Sc.copySync(n,i)}catch(c){throw Tr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Tr.info("New settings file values for 3.1.0 upgrade:",r),Tr.info(`Creating new/upgraded settings file at '${n}'`),Sc.writeFileSync(n,r),Tr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Tr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Tr.error(c),Sc.copySync(i,n),c}Vy.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Tr.info(a),a}o(jTe,"updateSettingsFile310");function QTe(){let e=gc.join(K2.getHomeDir(),mo.HDB_HOME_DIR_NAME,mo.LICENSE_KEY_DIR_NAME,mo.LICENSE_FILE_NAME),t=gc.join(K2.getHomeDir(),mo.HDB_HOME_DIR_NAME,mo.LICENSE_KEY_DIR_NAME,mo.REG_KEY_FILE_NAME),r=gc.join(Vy.getHdbBasePath(),mo.LICENSE_KEY_DIR_NAME,mo.LICENSE_FILE_NAME),n=gc.join(r,mo.LICENSE_FILE_NAME),s=gc.join(r,mo.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Tr.info(i);let a="Creating .license directory";console.log(a),Tr.info(a),Sc.mkdirpSync(r);try{Sc.accessSync(e);try{let c="Moving licence file";console.log(c),Tr.info(c),Sc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving license file failed";console.error(l),Tr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Tr.warn(l)}try{Sc.accessSync(t);try{let c="Moving registration file";console.log(c),Tr.info(c),Sc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving registration file failed";console.error(l),Tr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Tr.warn(l)}}o(QTe,"moveLicenseFiles");VL.sync_functions.push(jTe);VL.sync_functions.push(QTe);Y2.push(VL);W2.exports=Y2});var Z2=v((hHe,X2)=>{"use strict";var gs=gt(),{insertRecords:JTe}=ul(),XTe=Pn(),Tc=Vt(),ZTe=ce(),ua=Q(),eye=ce(),po=require("fs-extra"),da=require("path"),tye=require("cli-progress"),_E=require("assert"),rye=require("pino"),nye=le();X2.exports=sye;var Ky,j2,Yy,KL,bn,gE=!1;async function sye(e=!0){return Ky=nye.getHdbBasePath(),j2=da.join(Ky,"schema"),Yy=da.join(Ky,"4_0_0_upgrade_tmp"),KL=da.join(Ky,"transactions"),console.info("Reindexing upgrade started for schemas"),ua.notify("Reindexing upgrade started for schemas"),await Q2(j2,!1,e),await po.pathExists(KL)&&(console.info(`
|
|
110
110
|
|
|
111
|
-
Reindexing upgrade started for transaction logs`),ua.notify("Reindexing upgrade started for transaction logs"),await Q2(KL,!0,e)),ua.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(gE?", but errors occurred":"")}o(sye,"reindexUpgrade");async function Q2(e,t,r){let n=await po.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=da.join(e,a.toString());if(a===".DS_Store")continue;let l=await po.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&po.statSync(da.join(c,f)).isDirectory())try{await iye(a,f,t),
|
|
112
|
-
install_user = ${l}`;try{yc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{YL.initSync(!0)}catch(f){throw console.error("Unable to initialize new properties. Please check the log for details."),f}let d="New settings file for 4.0.0 upgrade successfully created.";try{yc.removeSync(r),console.log(d),du.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(bye,"updateSettingsFile400");yE.async_functions.push(bye);yE.async_functions.push(Rye);yE.async_functions.push(Tye);yE.async_functions.push(Aye);r4.push(yE);n4.exports=r4});var c4=v((THe,a4)=>{var Iye=$y(),{databases:wye,table:Nye}=(Pe(),M(pt)),Cye=Yi(),WL=Q(),i4=new Iye("4.7.0"),o4=[];async function Oye(){let e=wye.system?.hdb_license;if(!e){WL.debug?.("system.hdb_license table not found; no migration necessary");return}return WL.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),WL.debug?.("Creating new usage block system.hdb_license table"),Nye(Cye.hdb_license)}o(Oye,"convertToUsageBlockLicenses");i4.async_functions.push(Oye);o4.push(i4);a4.exports=o4});var zL=v((RHe,m4)=>{"use strict";var fu=ce(),Pye=(q(),M(W)),l4=Q(),{DATA_VERSION:Lye,UPGRADE_VERSION:Dye}=Pye.UPGRADE_JSON_FIELD_NAMES_ENUM,u4=z2(),jy=s4(),d4=c4(),Rc=new Map;u4&&u4.forEach(e=>{Rc.set(e.version,e)});jy&&jy.forEach(e=>{Rc.set(e.version,e)});jy&&jy.forEach(e=>{Rc.set(e.version,e)});d4&&d4.forEach(e=>{Rc.set(e.version,e)});function Mye(){return[...Rc.keys()].sort(fu.compareVersions)}o(Mye,"getSortedVersions");function f4(e){let t=e[Lye],r=e[Dye];return fu.isEmptyOrZeroLength(t)||fu.isEmptyOrZeroLength(r)?(l4.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),l4.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."),[]):[...Rc.keys()].sort(fu.compareVersions).filter(function(n){return fu.compareVersions(n,t)>0&&fu.compareVersions(n,r)<=0})}o(f4,"getVersionsForUpgrade");function vye(e){return f4(e).length>0}o(vye,"hasUpgradesRequired");function Uye(e){return fu.isEmptyOrZeroLength(e)?null:Rc.has(e)?Rc.get(e):null}o(Uye,"getDirectiveByVersion");m4.exports={getSortedVersions:Mye,getDirectiveByVersion:Uye,getVersionsForUpgrade:f4,hasUpgradesRequired:vye}});var Jy=v((bHe,g4)=>{"use strict";var xye=require("util"),jL=require("chalk"),Bye=require("os"),h4=Fn(),Fye=fn(),Ss=(q(),M(W)),E4=x2(),JL=pw(),{UpgradeObject:p4}=k2(),{forceDowngradePrompt:kye}=qy(),{packageJson:Hye}=yt(),Qy=Q(),Lf=ce(),XL=ji(),Gye=(Pe(),M(pt)),qye=zL(),$ye=xye.promisify(XL.setSchemaDataToGlobal),Vye=Fye.searchByValue,Kye="info_id",Yye="2.9.9",Wye="3.0.0";async function zye(e){let t=new E4.HdbInfoInsertObject(1,e,e),r=new JL.InsertObject(Ss.OPERATIONS_ENUM.INSERT,Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ss.INFO_TABLE_HASH_ATTRIBUTE,[t]);return XL.setSchemaDataToGlobal(),h4.insert(r)}o(zye,"insertHdbInstallInfo");async function QL(e){let t,r=await _4(),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 E4.HdbInfoInsertObject(i,e,e);let a=new JL.InsertObject(Ss.OPERATIONS_ENUM.INSERT,Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ss.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await $ye(),h4.insert(a)}o(QL,"insertHdbUpgradeInfo");async function _4(){let e=new JL.NoSQLSeachObject(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Kye,Ss.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Vye(e))}catch(r){console.error(r)}return t}o(_4,"getAllHdbInfoRecords");async function jye(){let e=await _4();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}o(jye,"getLatestHdbInfoRecord");async function Qye(){Qy.info("Checking if HDB software has been updated");try{let e=Hye.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await jye(),r;if(Lf.isEmpty(t))r=Yye;else if(r=t.data_version_num,Lf.compareVersions(r.toString(),e.toString())>0){if(!Lf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(jL.yellow(`This instance's data was last run on version ${r}`)),console.error(jL.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.${Bye.EOL}${Ss.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Lf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(jL.yellow(`This instance's data was last run on version ${r}`)),await kye(new p4(r,e))?await QL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(XL.setSchemaDataToGlobal(),Jye(r),e.toString()===r.toString())return;let n=new p4(r,e);if(qye.hasUpgradesRequired(n))return n;Lf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await QL(n.upgrade_version),Qy.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Qy.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Qy.fatal(e),e}}o(Qye,"getVersionUpdateInfo");function Jye(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 ${Ss.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Gye.databases.system))throw console.log(t),new Error(t);if(!Lf.isEmpty(e)&&e<Wye)throw console.log(t),new Error(t)}o(Jye,"checkIfInstallIsSupported");g4.exports={insertHdbInstallInfo:zye,insertHdbUpgradeInfo:QL,getVersionUpdateInfo:Qye}});var R4=v((wHe,y4)=>{"use strict";var Xy=require("joi"),{boolean:Xye,string:ZL,number:Zye}=Xy.types(),S4=require("fs-extra"),RE=(q(),M(W)),T4=require("path"),eRe=ft();y4.exports=tRe;function tRe(e){let t=ZL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Xy.object({[RE.INSTALL_PROMPTS.ROOTPATH]:Xy.custom(rRe),[RE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Xy.alternatives([Zye.min(0),ZL]).allow("null",null),[RE.INSTALL_PROMPTS.TC_AGREEMENT]:ZL.valid("yes","YES","Yes"),[RE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[RE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Xye});return eRe.validateBySchema(e,r)}o(tRe,"installValidator");function rRe(e,t){if(S4.existsSync(T4.join(e,"system/hdb_user/data.mdb"))||S4.existsSync(T4.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(rRe,"validateRootAvailable")});var b4=v((CHe,A4)=>{"use strict";var{mkdirpSync:nRe,copySync:sRe}=require("fs-extra"),Ac=require("path"),AE=(q(),M(W)),{PACKAGE_ROOT:iRe}=yt(),tD=Q(),oRe=ss(),eD=Yi(),aRe=At();A4.exports=cRe;async function cRe(e){tD.trace("Mounting HarperDB"),mu(e),mu(Ac.join(e,"backup")),mu(Ac.join(e,"keys")),mu(Ac.join(e,"keys",AE.LICENSE_FILE_NAME)),mu(Ac.join(e,"log")),mu(Ac.join(e,"database")),mu(Ac.join(e,"components")),sRe(Ac.resolve(iRe,"./utility/install/README.md"),Ac.join(e,"README.md")),await lRe()}o(cRe,"mountHdb");async function lRe(){let e=cp(),t=Object.keys(eD);for(let r of t){let n=eD[r].hash_attribute;try{aRe.initSystemSchemaPaths(AE.SYSTEM_SCHEMA_NAME,r);let s=new e(AE.SYSTEM_SCHEMA_NAME,r,n);s.attributes=eD[r].attributes;let i=s.attributes.find(({attribute:a})=>a===n);i.isPrimaryKey=!0,["hdb_user","hdb_role","hdb_nodes"].includes(r)&&(s.audit=!0),await oRe.createTable(r,s)}catch(s){throw tD.error(`issue creating environment for ${AE.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}o(lRe,"createLMDBTables");function mu(e){nRe(e,{mode:AE.HDB_FILE_PERMISSIONS}),tD.info(`Directory ${e} created`)}o(mu,"makeDirectory")});var F4=v((DHe,B4)=>{"use strict";var sD=require("os"),O4=require("inquirer"),ri=require("fs-extra"),uRe=require("properties-reader"),hu=require("chalk"),Eo=require("path"),dRe=require("human-readable-ids").hri,rD,fRe=require("yaml"),yr=Q(),bc=le(),bE=ce(),eR=$c(),P4=Jy(),{packageJson:L4}=yt(),he=(q(),M(W)),{CONFIG_PARAM_MAP:PHe,CONFIG_PARAMS:Ht}=he,mRe=R4(),pRe=b4(),iD=Rt(),hRe=os(),ERe=qp(),_Re=FL(),gRe=ji(),SRe=require("util").promisify,TRe=SRe(gRe.setSchemaDataToGlobal),I4=ds(),pu=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),sn=o(e=>hu.magenta.bold(e),"HDB_PROMPT_MSG"),yRe="https://harperdb.io/legal/end-user-license-agreement",Ic=sD.EOL,fa="",RRe="yes",w4="Starting HarperDB install...",N4="HarperDB installation was successful.",C4="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",ARe="An out of date version of HarperDB is already installed.",nD="It appears that HarperDB is already installed. Exiting install...",bRe="Aborting install",LHe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),IRe=new RegExp(/^[^\s.,*>]+$/),wRe=sD.homedir(),NRe=Eo.join(wRe,he.HDB_ROOT_DIR_NAME),CRe="HDB_ADMIN",ORe="CLUSTER_USER",PRe="dev",LRe="localhost",Zy={[Ht.HTTP_CORS]:!0,[Ht.HTTP_CORSACCESSLIST]:["*"],[Ht.HTTP_PORT]:9926,[Ht.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Ht.THREADS_COUNT]:1,[Ht.THREADS_DEBUG]:!0,[Ht.LOGGING_STDSTREAMS]:!0,[Ht.LOGGING_LEVEL]:"info",[Ht.OPERATIONSAPI_NETWORK_PORT]:9925,[Ht.LOCALSTUDIO_ENABLED]:!0},nn={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:"},wc=eR([he.INSTALL_PROMPTS.HDB_CONFIG]),ho,D4=!1,oD=!1,M4=!1;B4.exports={install:v4,updateConfigEnv:qRe,setIgnoreExisting:$Re};v4.createSuperUser=x4;async function v4(){console.log(sn(Ic+w4+Ic)),yr.notify(w4);let e;wc[he.INSTALL_PROMPTS.HDB_CONFIG]&&(e=DRe());let t=vRe();Object.assign(t,e),t[he.INSTALL_PROMPTS.TC_AGREEMENT]&&t[he.INSTALL_PROMPTS.ROOTPATH]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[he.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(M4=!0,t[he.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=mRe(t);if(r)throw r.message;await URe(),await xRe(t);let n=await MRe(t);ho=n[he.INSTALL_PROMPTS.ROOTPATH],wc[he.INSTALL_PROMPTS.HDB_CONFIG]&&Eo.dirname(wc[he.INSTALL_PROMPTS.HDB_CONFIG])===ho&&(D4=!0),!oD&&!wc[he.INSTALL_PROMPTS.HDB_CONFIG]&&await ri.pathExists(Eo.join(ho,he.HDB_CONFIG_FILE))&&(console.error(nD),process.exit()),rD||(rD=(await import("ora")).default);let s=rD({prefixText:sn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),bE.isEmpty(ho))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");bc.setHdbBasePath(ho),await pRe(ho),await BRe(),await FRe(n),yr.initLogSettings(!0),await x4(n),await HRe(n),await I4.updateConfigCert(),await I4.generateCertsKeys(),await GRe(),_Re(),s.stop(),console.log(sn(Ic+N4+Ic)),yr.notify(N4)}o(v4,"install");function DRe(){let e=fRe.parseDocument(ri.readFileSync(wc[he.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=iD.flattenConfig(e.toJSON());return t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(DRe,"getConfigFromFile");async function MRe(e){yr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:pu,when:ma(e[he.INSTALL_PROMPTS.ROOTPATH],nn.DESTINATION),name:he.INSTALL_PROMPTS.ROOTPATH,prefix:fa,default:NRe,validate:o(async s=>ti(s)?ti(s):await ri.pathExists(Eo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:sn(nn.DESTINATION)},{type:"input",transformer:pu,when:ma(e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],nn.HDB_USERNAME),name:he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:fa,default:CRe,validate:o(s=>ti(s)?ti(s):(t=s,!0),"validate"),message:sn(nn.HDB_USERNAME)},{type:"password",when:ma(e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],nn.HDB_PASS),name:he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:fa,validate:o(s=>ti(s)?ti(s):!0,"validate"),message:sn(nn.HDB_PASS)},{type:"input",transformer:pu,when:ma(e[he.INSTALL_PROMPTS.DEFAULTS_MODE],nn.DEFAULTS_MODE),name:he.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:fa,default:PRe,validate:o(s=>ti(s)?ti(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:sn(nn.DEFAULTS_MODE)}];if(M4||r.push({type:"input",name:he.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:pu,when:ma(e[he.INSTALL_PROMPTS.REPLICATION_HOSTNAME],nn.REPLICATION_HOSTNAME),prefix:fa,default:LRe,message:sn(nn.REPLICATION_HOSTNAME)}),bE.autoCastBoolean(e[he.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:pu,when:ma(e[he.INSTALL_PROMPTS.CLUSTERING_NODENAME],nn.NODE_NAME),name:he.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:fa,default:dRe.random(),validate:o(i=>IRe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:sn(nn.NODE_NAME)},{type:"input",transformer:pu,when:ma(e[he.INSTALL_PROMPTS.CLUSTERING_USER],nn.CLUSTER_USERNAME),name:he.INSTALL_PROMPTS.CLUSTERING_USER,prefix:fa,default:ORe,validate:o(i=>ti(i)?ti(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:sn(nn.CLUSTER_USERNAME)},{type:"password",when:ma(e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD],nn.CLUSTER_PASS),name:he.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:fa,validate:o(i=>ti(i)?ti(i):!0,"validate"),message:sn(nn.CLUSTER_PASS)}];r.push(...s)}let n=await O4.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}o(MRe,"installPrompts");function ma(e,t){return e!==void 0?(t.includes("password")?(console.log(`${sn(t)} ${hu.gray("[hidden]")}`),yr.trace(`${sn(t)} [hidden]`)):(console.log(`${sn(t)} ${e}`),yr.trace(`${sn(t)} ${e}`)),!1):!0}o(ma,"displayCmdEnvVar");function ti(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(ti,"checkForEmptyValue");function vRe(){let e=Object.keys(he.INSTALL_PROMPTS),t=eR(e),r=eR(Object.keys(he.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=he.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}o(vRe,"checkForPromptOverride");async function URe(){yr.trace("Checking for existing install.");let e=bE.getPropsFilePath(),t=await ri.pathExists(e),r;if(t){yr.trace(`Install found an existing boot prop file at:${e}`);let n=uRe(e),s=iD.getConfigValue(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await ri.pathExists(s)}if(!t&&bE.noBootFile()&&(r=!0),r&&!oD){if(yr.trace(`Install found existing HDB config at:${e}`),await P4.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${L4.version}. Exiting install...`;console.log(Ic+hu.magenta.bold(ARe)),console.log(hu.magenta.bold(s)),yr.error(s)}else console.log(Ic+hu.magenta.bold(nD)),yr.error(nD);process.exit(0)}}o(URe,"checkForExistingInstall");async function xRe(e){yr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${yRe}${Ic}and can be viewed by typing or copying and pasting the URL into your web browser.${Ic}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:fa,transformer:pu,when:ma(e[he.INSTALL_PROMPTS.TC_AGREEMENT],t),name:he.INSTALL_PROMPTS.TC_AGREEMENT,message:sn(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:hu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await O4.prompt([r]);n[he.INSTALL_PROMPTS.TC_AGREEMENT]&&n[he.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==RRe&&(console.log(hu.yellow(C4)),yr.error(C4),process.exit(0))}o(xRe,"termsAgreement");async function BRe(){let e=Eo.join(ho,he.HDB_CONFIG_FILE),t;try{t=sD.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
|
+
Reindexing upgrade started for transaction logs`),ua.notify("Reindexing upgrade started for transaction logs"),await Q2(KL,!0,e)),ua.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(gE?", but errors occurred":"")}o(sye,"reindexUpgrade");async function Q2(e,t,r){let n=await po.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=da.join(e,a.toString());if(a===".DS_Store")continue;let l=await po.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&po.statSync(da.join(c,f)).isDirectory())try{await iye(a,f,t),bn.info(`Reindexing started for ${a}.${f}`),ua.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await aye(a,f,c,t,r),bn.info(`Reindexing completed for ${a}.${f}`),ua.notify(`Reindexing completed for ${a}.${f}`)}catch(m){gE=!0,m.schema_path=c,m.table_name=f,ua.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),ua.error(m),bn.error(m),console.error(m)}}}if(!gE)try{await po.rm(Yy,{recursive:!0})}catch{}}o(Q2,"processTables");async function iye(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=da.join(Yy,s);await po.ensureDir(Yy),await po.writeFile(i,""),bn=rye({level:"debug",formatters:{bindings(){}}},i)}o(iye,"initPinoLogger");var oye=20;async function aye(e,t,r,n,s){let i;try{i=await gs.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){ua.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),bn.error(S);return}throw S}let a=uye(i.dbis),c=gs.openDBI(i,a),l=Object.keys(i.dbis),u=gs.statDBI(i,a);bn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new tye.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let f=await gs.createEnvironment(r,t,!1);gs.createDBI(f,a,!1,!0);let m=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},m.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),m.length>oye&&await p();await p()}catch(S){throw gE=!0,bn.error(S),S}async function p(){let S,T=m.map(({value:L})=>L);n?S=await Promise.all(T.map(L=>cye(f,L))):S=await JTe(f,a,l.filter(L=>L!=="__blob__"),T,!1);for(let L=0,k=m.length;L<k;L++){let{key:te,value:F}=m[L];bn.info(`Record hash value: ${te} hash: ${a}`);let V;n?V=S[L]:V=S.written_hashes.indexOf(te)>-1,_E(V,!0),lye(f,a,F[a],n),bn.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&ua.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),bn.info(`${d.value}/${d.total} records inserted`)}o(p,"finishOutstanding"),d.stop();let h=gs.statDBI(i,a),E=gs.statDBI(f,a);if(bn.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),_E.deepStrictEqual(h.entryCount,E.entryCount),await gs.closeEnvironment(i),await gs.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=da.join(r,t),T=da.join(S,"data.mdb"),w=da.join(S,"lock.mdb");await po.unlink(T),await po.unlink(w),await po.rmdir(S),bn.info(`Deleted old environment files from schema folder: ${T}, ${w}`)}let g=await gs.openEnvironment(r,t),A=gs.statDBI(g,a);bn.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(A)}`),_E.deepStrictEqual(A.entryCount,E.entryCount),await gs.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(aye,"processTable");async function cye(e,t){gs.initializeDBIs(e,Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Tc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),eye.isEmpty(t.user_name)||e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(cye,"insertTransaction");function lye(e,t,r,n){let i=e.dbis[t].get(r);_E.deepStrictEqual(typeof i,"object");let a;if(n){let c={[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(c)}else a=Object.entries(i);for(let[c,l]of a)if(c!==t&&e.dbis[c]!==void 0&&!ZTe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];J2(e,c,f,r)}else J2(e,c,l,r)}o(lye,"validateIndices");function J2(e,t,r,n){try{let s=!1,i=XTe.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||bn.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),_E.deepStrictEqual(s,!0)}catch(s){gE=!0,bn.error(s),console.error(s)}}o(J2,"validateIndex");function uye(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(uye,"getHashDBI")});var s4=v((gHe,n4)=>{"use strict";var Wy=require("path"),yc=require("fs-extra"),dye=$y(),du=Q(),e4=Rt(),YL=le(),Mi=(q(),M(W)),zy=ce(),fye=require("properties-reader"),mye=hi(),pye=_S(),hye=fn(),_He=require("util"),Eye=hye.searchByValue,_ye=kn(),gye=LT(),Sye=Nt(),Tye=Z2(),t4=fs(),yye=qy(),yE=new dye("4.0.0"),r4=[],SE,TE;async function Rye(){try{if(await yye.upgradeCertsPrompt()){if(console.log("Generating new certificates."),SE){let t=zy.changeExtension(SE,".bak");await yc.move(SE,t)}if(TE){let t=zy.changeExtension(TE,".bak");await yc.move(TE,t)}await t4.generateKeys()}else console.log("Using existing certificates."),t4.updateConfigCert(SE,TE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(Rye,"generateNewKeys");async function Aye(){console.log("Updating HarperDB nodes."),du.info("Updating HarperDB nodes.");let e=[];try{let t=new mye(Mi.SYSTEM_SCHEMA_NAME,Mi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Eye(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!Sye.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${node_record.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],p=m.channel.split(":");u.push({schema:p[0],table:p[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Mi.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(zy.isEmptyOrZeroLength(n))return;let s=new pye(Mi.SYSTEM_SCHEMA_NAME,Mi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await _ye.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{gye.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(Aye,"updateNodes");async function bye(){let e=YL.get(Mi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Wy.join("config","settings.js"))){du.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),du.info(t);let r=Wy.dirname(e),n=YL.get(Mi.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Wy.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Wy.join(n,Mi.HDB_CONFIG_FILE);try{du.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),yc.copySync(e,s)}catch(f){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),f}try{du.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),du.info("Updating env variables with new settings values");let f=e4.initOldConfig(e);SE=f[Mi.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],TE=f[Mi.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],e4.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let a=zy.getPropsFilePath();yc.accessSync(a,yc.constants.F_OK|yc.constants.R_OK);let l=fye(a).get(Mi.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
112
|
+
install_user = ${l}`;try{yc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{YL.initSync(!0)}catch(f){throw console.error("Unable to initialize new properties. Please check the log for details."),f}let d="New settings file for 4.0.0 upgrade successfully created.";try{yc.removeSync(r),console.log(d),du.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(bye,"updateSettingsFile400");yE.async_functions.push(bye);yE.async_functions.push(Rye);yE.async_functions.push(Tye);yE.async_functions.push(Aye);r4.push(yE);n4.exports=r4});var c4=v((THe,a4)=>{var Iye=$y(),{databases:wye,table:Nye}=(Pe(),M(pt)),Cye=Yi(),WL=Q(),i4=new Iye("4.7.0"),o4=[];async function Oye(){let e=wye.system?.hdb_license;if(!e){WL.debug?.("system.hdb_license table not found; no migration necessary");return}return WL.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),WL.debug?.("Creating new usage block system.hdb_license table"),Nye(Cye.hdb_license)}o(Oye,"convertToUsageBlockLicenses");i4.async_functions.push(Oye);o4.push(i4);a4.exports=o4});var zL=v((RHe,m4)=>{"use strict";var fu=ce(),Pye=(q(),M(W)),l4=Q(),{DATA_VERSION:Lye,UPGRADE_VERSION:Dye}=Pye.UPGRADE_JSON_FIELD_NAMES_ENUM,u4=z2(),jy=s4(),d4=c4(),Rc=new Map;u4&&u4.forEach(e=>{Rc.set(e.version,e)});jy&&jy.forEach(e=>{Rc.set(e.version,e)});jy&&jy.forEach(e=>{Rc.set(e.version,e)});d4&&d4.forEach(e=>{Rc.set(e.version,e)});function Mye(){return[...Rc.keys()].sort(fu.compareVersions)}o(Mye,"getSortedVersions");function f4(e){let t=e[Lye],r=e[Dye];return fu.isEmptyOrZeroLength(t)||fu.isEmptyOrZeroLength(r)?(l4.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),l4.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."),[]):[...Rc.keys()].sort(fu.compareVersions).filter(function(n){return fu.compareVersions(n,t)>0&&fu.compareVersions(n,r)<=0})}o(f4,"getVersionsForUpgrade");function vye(e){return f4(e).length>0}o(vye,"hasUpgradesRequired");function Uye(e){return fu.isEmptyOrZeroLength(e)?null:Rc.has(e)?Rc.get(e):null}o(Uye,"getDirectiveByVersion");m4.exports={getSortedVersions:Mye,getDirectiveByVersion:Uye,getVersionsForUpgrade:f4,hasUpgradesRequired:vye}});var Jy=v((bHe,g4)=>{"use strict";var xye=require("util"),jL=require("chalk"),Bye=require("os"),h4=kn(),Fye=fn(),Ss=(q(),M(W)),E4=x2(),JL=pw(),{UpgradeObject:p4}=k2(),{forceDowngradePrompt:kye}=qy(),{packageJson:Hye}=yt(),Qy=Q(),Lf=ce(),XL=ji(),Gye=(Pe(),M(pt)),qye=zL(),$ye=xye.promisify(XL.setSchemaDataToGlobal),Vye=Fye.searchByValue,Kye="info_id",Yye="2.9.9",Wye="3.0.0";async function zye(e){let t=new E4.HdbInfoInsertObject(1,e,e),r=new JL.InsertObject(Ss.OPERATIONS_ENUM.INSERT,Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ss.INFO_TABLE_HASH_ATTRIBUTE,[t]);return XL.setSchemaDataToGlobal(),h4.insert(r)}o(zye,"insertHdbInstallInfo");async function QL(e){let t,r=await _4(),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 E4.HdbInfoInsertObject(i,e,e);let a=new JL.InsertObject(Ss.OPERATIONS_ENUM.INSERT,Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ss.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await $ye(),h4.insert(a)}o(QL,"insertHdbUpgradeInfo");async function _4(){let e=new JL.NoSQLSeachObject(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Kye,Ss.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Vye(e))}catch(r){console.error(r)}return t}o(_4,"getAllHdbInfoRecords");async function jye(){let e=await _4();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}o(jye,"getLatestHdbInfoRecord");async function Qye(){Qy.info("Checking if HDB software has been updated");try{let e=Hye.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await jye(),r;if(Lf.isEmpty(t))r=Yye;else if(r=t.data_version_num,Lf.compareVersions(r.toString(),e.toString())>0){if(!Lf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(jL.yellow(`This instance's data was last run on version ${r}`)),console.error(jL.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.${Bye.EOL}${Ss.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Lf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(jL.yellow(`This instance's data was last run on version ${r}`)),await kye(new p4(r,e))?await QL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(XL.setSchemaDataToGlobal(),Jye(r),e.toString()===r.toString())return;let n=new p4(r,e);if(qye.hasUpgradesRequired(n))return n;Lf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await QL(n.upgrade_version),Qy.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Qy.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Qy.fatal(e),e}}o(Qye,"getVersionUpdateInfo");function Jye(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 ${Ss.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Gye.databases.system))throw console.log(t),new Error(t);if(!Lf.isEmpty(e)&&e<Wye)throw console.log(t),new Error(t)}o(Jye,"checkIfInstallIsSupported");g4.exports={insertHdbInstallInfo:zye,insertHdbUpgradeInfo:QL,getVersionUpdateInfo:Qye}});var R4=v((wHe,y4)=>{"use strict";var Xy=require("joi"),{boolean:Xye,string:ZL,number:Zye}=Xy.types(),S4=require("fs-extra"),RE=(q(),M(W)),T4=require("path"),eRe=ft();y4.exports=tRe;function tRe(e){let t=ZL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Xy.object({[RE.INSTALL_PROMPTS.ROOTPATH]:Xy.custom(rRe),[RE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Xy.alternatives([Zye.min(0),ZL]).allow("null",null),[RE.INSTALL_PROMPTS.TC_AGREEMENT]:ZL.valid("yes","YES","Yes"),[RE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[RE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Xye});return eRe.validateBySchema(e,r)}o(tRe,"installValidator");function rRe(e,t){if(S4.existsSync(T4.join(e,"system/hdb_user/data.mdb"))||S4.existsSync(T4.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(rRe,"validateRootAvailable")});var b4=v((CHe,A4)=>{"use strict";var{mkdirpSync:nRe,copySync:sRe}=require("fs-extra"),Ac=require("path"),AE=(q(),M(W)),{PACKAGE_ROOT:iRe}=yt(),tD=Q(),oRe=is(),eD=Yi(),aRe=At();A4.exports=cRe;async function cRe(e){tD.trace("Mounting HarperDB"),mu(e),mu(Ac.join(e,"backup")),mu(Ac.join(e,"keys")),mu(Ac.join(e,"keys",AE.LICENSE_FILE_NAME)),mu(Ac.join(e,"log")),mu(Ac.join(e,"database")),mu(Ac.join(e,"components")),sRe(Ac.resolve(iRe,"./utility/install/README.md"),Ac.join(e,"README.md")),await lRe()}o(cRe,"mountHdb");async function lRe(){let e=cp(),t=Object.keys(eD);for(let r of t){let n=eD[r].hash_attribute;try{aRe.initSystemSchemaPaths(AE.SYSTEM_SCHEMA_NAME,r);let s=new e(AE.SYSTEM_SCHEMA_NAME,r,n);s.attributes=eD[r].attributes;let i=s.attributes.find(({attribute:a})=>a===n);i.isPrimaryKey=!0,["hdb_user","hdb_role","hdb_nodes"].includes(r)&&(s.audit=!0),await oRe.createTable(r,s)}catch(s){throw tD.error(`issue creating environment for ${AE.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}o(lRe,"createLMDBTables");function mu(e){nRe(e,{mode:AE.HDB_FILE_PERMISSIONS}),tD.info(`Directory ${e} created`)}o(mu,"makeDirectory")});var F4=v((DHe,B4)=>{"use strict";var sD=require("os"),O4=require("inquirer"),ri=require("fs-extra"),uRe=require("properties-reader"),hu=require("chalk"),Eo=require("path"),dRe=require("human-readable-ids").hri,rD,fRe=require("yaml"),yr=Q(),bc=le(),bE=ce(),eR=$c(),P4=Jy(),{packageJson:L4}=yt(),he=(q(),M(W)),{CONFIG_PARAM_MAP:PHe,CONFIG_PARAMS:Ht}=he,mRe=R4(),pRe=b4(),iD=Rt(),hRe=as(),ERe=qp(),_Re=FL(),gRe=ji(),SRe=require("util").promisify,TRe=SRe(gRe.setSchemaDataToGlobal),I4=fs(),pu=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),sn=o(e=>hu.magenta.bold(e),"HDB_PROMPT_MSG"),yRe="https://harperdb.io/legal/end-user-license-agreement",Ic=sD.EOL,fa="",RRe="yes",w4="Starting HarperDB install...",N4="HarperDB installation was successful.",C4="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",ARe="An out of date version of HarperDB is already installed.",nD="It appears that HarperDB is already installed. Exiting install...",bRe="Aborting install",LHe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),IRe=new RegExp(/^[^\s.,*>]+$/),wRe=sD.homedir(),NRe=Eo.join(wRe,he.HDB_ROOT_DIR_NAME),CRe="HDB_ADMIN",ORe="CLUSTER_USER",PRe="dev",LRe="localhost",Zy={[Ht.HTTP_CORS]:!0,[Ht.HTTP_CORSACCESSLIST]:["*"],[Ht.HTTP_PORT]:9926,[Ht.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Ht.THREADS_COUNT]:1,[Ht.THREADS_DEBUG]:!0,[Ht.LOGGING_STDSTREAMS]:!0,[Ht.LOGGING_LEVEL]:"info",[Ht.OPERATIONSAPI_NETWORK_PORT]:9925,[Ht.LOCALSTUDIO_ENABLED]:!0},nn={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:"},wc=eR([he.INSTALL_PROMPTS.HDB_CONFIG]),ho,D4=!1,oD=!1,M4=!1;B4.exports={install:v4,updateConfigEnv:qRe,setIgnoreExisting:$Re};v4.createSuperUser=x4;async function v4(){console.log(sn(Ic+w4+Ic)),yr.notify(w4);let e;wc[he.INSTALL_PROMPTS.HDB_CONFIG]&&(e=DRe());let t=vRe();Object.assign(t,e),t[he.INSTALL_PROMPTS.TC_AGREEMENT]&&t[he.INSTALL_PROMPTS.ROOTPATH]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[he.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(M4=!0,t[he.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=mRe(t);if(r)throw r.message;await URe(),await xRe(t);let n=await MRe(t);ho=n[he.INSTALL_PROMPTS.ROOTPATH],wc[he.INSTALL_PROMPTS.HDB_CONFIG]&&Eo.dirname(wc[he.INSTALL_PROMPTS.HDB_CONFIG])===ho&&(D4=!0),!oD&&!wc[he.INSTALL_PROMPTS.HDB_CONFIG]&&await ri.pathExists(Eo.join(ho,he.HDB_CONFIG_FILE))&&(console.error(nD),process.exit()),rD||(rD=(await import("ora")).default);let s=rD({prefixText:sn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),bE.isEmpty(ho))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");bc.setHdbBasePath(ho),await pRe(ho),await BRe(),await FRe(n),yr.initLogSettings(!0),await x4(n),await HRe(n),await I4.updateConfigCert(),await I4.generateCertsKeys(),await GRe(),_Re(),s.stop(),console.log(sn(Ic+N4+Ic)),yr.notify(N4)}o(v4,"install");function DRe(){let e=fRe.parseDocument(ri.readFileSync(wc[he.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=iD.flattenConfig(e.toJSON());return t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(DRe,"getConfigFromFile");async function MRe(e){yr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:pu,when:ma(e[he.INSTALL_PROMPTS.ROOTPATH],nn.DESTINATION),name:he.INSTALL_PROMPTS.ROOTPATH,prefix:fa,default:NRe,validate:o(async s=>ti(s)?ti(s):await ri.pathExists(Eo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:sn(nn.DESTINATION)},{type:"input",transformer:pu,when:ma(e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],nn.HDB_USERNAME),name:he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:fa,default:CRe,validate:o(s=>ti(s)?ti(s):(t=s,!0),"validate"),message:sn(nn.HDB_USERNAME)},{type:"password",when:ma(e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],nn.HDB_PASS),name:he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:fa,validate:o(s=>ti(s)?ti(s):!0,"validate"),message:sn(nn.HDB_PASS)},{type:"input",transformer:pu,when:ma(e[he.INSTALL_PROMPTS.DEFAULTS_MODE],nn.DEFAULTS_MODE),name:he.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:fa,default:PRe,validate:o(s=>ti(s)?ti(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:sn(nn.DEFAULTS_MODE)}];if(M4||r.push({type:"input",name:he.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:pu,when:ma(e[he.INSTALL_PROMPTS.REPLICATION_HOSTNAME],nn.REPLICATION_HOSTNAME),prefix:fa,default:LRe,message:sn(nn.REPLICATION_HOSTNAME)}),bE.autoCastBoolean(e[he.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:pu,when:ma(e[he.INSTALL_PROMPTS.CLUSTERING_NODENAME],nn.NODE_NAME),name:he.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:fa,default:dRe.random(),validate:o(i=>IRe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:sn(nn.NODE_NAME)},{type:"input",transformer:pu,when:ma(e[he.INSTALL_PROMPTS.CLUSTERING_USER],nn.CLUSTER_USERNAME),name:he.INSTALL_PROMPTS.CLUSTERING_USER,prefix:fa,default:ORe,validate:o(i=>ti(i)?ti(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:sn(nn.CLUSTER_USERNAME)},{type:"password",when:ma(e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD],nn.CLUSTER_PASS),name:he.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:fa,validate:o(i=>ti(i)?ti(i):!0,"validate"),message:sn(nn.CLUSTER_PASS)}];r.push(...s)}let n=await O4.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}o(MRe,"installPrompts");function ma(e,t){return e!==void 0?(t.includes("password")?(console.log(`${sn(t)} ${hu.gray("[hidden]")}`),yr.trace(`${sn(t)} [hidden]`)):(console.log(`${sn(t)} ${e}`),yr.trace(`${sn(t)} ${e}`)),!1):!0}o(ma,"displayCmdEnvVar");function ti(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(ti,"checkForEmptyValue");function vRe(){let e=Object.keys(he.INSTALL_PROMPTS),t=eR(e),r=eR(Object.keys(he.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=he.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}o(vRe,"checkForPromptOverride");async function URe(){yr.trace("Checking for existing install.");let e=bE.getPropsFilePath(),t=await ri.pathExists(e),r;if(t){yr.trace(`Install found an existing boot prop file at:${e}`);let n=uRe(e),s=iD.getConfigValue(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await ri.pathExists(s)}if(!t&&bE.noBootFile()&&(r=!0),r&&!oD){if(yr.trace(`Install found existing HDB config at:${e}`),await P4.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${L4.version}. Exiting install...`;console.log(Ic+hu.magenta.bold(ARe)),console.log(hu.magenta.bold(s)),yr.error(s)}else console.log(Ic+hu.magenta.bold(nD)),yr.error(nD);process.exit(0)}}o(URe,"checkForExistingInstall");async function xRe(e){yr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${yRe}${Ic}and can be viewed by typing or copying and pasting the URL into your web browser.${Ic}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:fa,transformer:pu,when:ma(e[he.INSTALL_PROMPTS.TC_AGREEMENT],t),name:he.INSTALL_PROMPTS.TC_AGREEMENT,message:sn(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:hu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await O4.prompt([r]);n[he.INSTALL_PROMPTS.TC_AGREEMENT]&&n[he.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==RRe&&(console.log(hu.yellow(C4)),yr.error(C4),process.exit(0))}o(xRe,"termsAgreement");async function BRe(){let e=Eo.join(ho,he.HDB_CONFIG_FILE),t;try{t=sD.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}
|
|
113
113
|
install_user = ${t}`,n=bE.getHomeDir(),s=Eo.join(n,he.HDB_HOME_DIR_NAME),i=Eo.join(s,he.LICENSE_KEY_DIR_NAME);try{ri.mkdirpSync(s,{mode:he.HDB_FILE_PERMISSIONS}),ri.mkdirpSync(i,{mode:he.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${he.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=Eo.join(s,he.BOOT_PROPS_FILE_NAME);try{await ri.writeFile(a,r)}catch(c){throw yr.error(`There was an error creating the boot file at path: ${a}`),c}bc.setProperty(he.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),bc.setProperty(he.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),bc.setProperty(bc.BOOT_PROPS_FILE_PATH,a)}}o(BRe,"createBootPropertiesFile");async function FRe(e){yr.trace("Creating HarperDB config file");let t=eR(Object.keys(he.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[he.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in Zy){if(r===Ht.HTTP_PORT&&t[Ht.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??Zy[r],t[Ht.HTTP_SECUREPORT]=null;continue}else if(r===Ht.HTTP_PORT)continue;if(r===Ht.OPERATIONSAPI_NETWORK_PORT&&t[Ht.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??Zy[r],t[Ht.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Ht.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=Zy[r])}}else t[Ht.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Ht.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Ht.HTTP_PORT.toLowerCase()]&&(t[Ht.HTTP_SECUREPORT]=null);try{wc[he.INSTALL_PROMPTS.HDB_CONFIG]||iD.createConfigFile(t),bc.initSync()}catch(r){kRe(r)}}o(FRe,"createConfigFile");function kRe(e){yr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(bRe);let t=Eo.resolve(bc.get(bc.BOOT_PROPS_FILE_PATH),"../");t&&ri.removeSync(t),ho&&(D4?ri.readdirSync(ho,{withFileTypes:!0}).forEach(n=>{let s=Eo.join(n.path,n.name);s!==wc[he.INSTALL_PROMPTS.HDB_CONFIG]&&ri.removeSync(s)}):ri.removeSync(ho)),process.exit(1)}o(kRe,"rollbackInstall");async function U4(e,t){yr.trace("Creating admin user"),await TRe();let r;try{r=await ERe.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 hRe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(U4,"createAdminUser");async function x4(e){yr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await U4(t,r),delete e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(x4,"createSuperUser");async function HRe(e){yr.trace("Creating Cluster user.");let t;e[he.INSTALL_PROMPTS.CLUSTERING_USER]&&e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[he.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await U4({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[he.INSTALL_PROMPTS.CLUSTERING_USER],delete e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(HRe,"createClusterUser");async function GRe(){let e=L4.version;if(e)await P4.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(GRe,"insertHdbVersionInfo");function qRe(e){wc[he.INSTALL_PROMPTS.HDB_CONFIG]=e}o(qRe,"updateConfigEnv");function $Re(e){oD=e}o($Re,"setIgnoreExisting")});var cD={};be(cD,{isHdbInstalled:()=>VRe});function VRe(e,t){try{aD.default.statSync((0,tR.getPropsFilePath)()),aD.default.statSync(e.get(im.SETTINGS_PATH_KEY))}catch(r){if((0,tR.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var aD,tR,lD=ie(()=>{q();aD=I(require("node:fs")),tR=I(ce());o(VRe,"isHdbInstalled")});var G4=v((UHe,H4)=>{"use strict";var uD=ce(),Ts=Q(),k4=zL();H4.exports={processDirectives:KRe};async function KRe(e){console.log("Starting upgrade process...");let t=k4.getVersionsForUpgrade(e),r=zRe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;Ts.notify(c),console.log(c);let l=[],u=[];try{l=YRe(a.sync_functions)}catch(d){throw Ts.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await WRe(a.async_functions)}catch(d){throw Ts.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(KRe,"processDirectives");function YRe(e){if(uD.isEmptyOrZeroLength(e))return Ts.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Ts.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Ts.info(`Running function ${r.name}`),!(r instanceof Function)){Ts.info("Variable being processed is not a function");continue}let n=r();Ts.info(n),t.push(n)}return t}o(YRe,"runSyncFunctions");async function WRe(e){if(uD.isEmptyOrZeroLength(e))return Ts.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Ts.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Ts.info(`Running function ${s.name}`),!(s instanceof Function)){Ts.info("Variable being processed is not a function");continue}let i=await s();Ts.info(i),t.push(i)}return t}o(WRe,"runAsyncFunctions");function zRe(e){if(uD.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=k4.getDirectiveByVersion(r);n&&t.push(n)}return t}o(zRe,"getUpgradeDirectivesToInstall")});var dD=v((BHe,q4)=>{"use strict";var jRe=require("util"),QRe=require("path"),JRe=require("child_process"),XRe=jRe.promisify(JRe.execFile),ZRe=1e3*1e3*10;q4.exports={findPs:eAe};async function eAe(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await XRe("ps",["wwxo",`pid,${r}`],{maxBuffer:ZRe});for(let s of n.trim().split(`
|
|
114
|
-
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:QRe.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(eAe,"findPs")});var j4=v((kHe,z4)=>{"use strict";var K4=le();K4.initSync();var Y4=require("chalk"),_o=Q(),Eu=(q(),M(W)),tAe=G4(),fD=ce(),rAe=(lD(),M(cD)),W4=Jy(),nAe=qy(),$4=dD(),sAe=ji(),{packageJson:V4}=yt(),iAe=require("util").promisify,oAe=iAe(sAe.setSchemaDataToGlobal),mD,{UPGRADE_VERSION:pD}=Eu.UPGRADE_JSON_FIELD_NAMES_ENUM;z4.exports={upgrade:aAe};async function aAe(e){await oAe(),mD===void 0&&(mD=ff()),rAe.isHdbInstalled(K4,_o)||(rR("Harper is not installed. Harper must be installed before running an upgrade.",Eu.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await W4.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),rR(`This version of HarperDB is ${V4.version}`,Eu.LOG_LEVELS.INFO);let n=r[pD]??V4.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Eu.HDB_SUPPORT_ADDRESS}`),_o.notify("Missing new version field from upgrade info object"),process.exit(1)),await cAe();let s,i=0;try{s=await nAe.forceUpdatePrompt(r)}catch(a){_o.error("There was an error when prompting user about upgrade."),_o.error(a),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),_o.info(`Starting upgrade to version ${n}`),await lAe(r),rR(`HarperDB was successfully upgraded to version ${r[pD]}`,Eu.LOG_LEVELS.INFO)}o(aAe,"upgrade");async function cAe(){let e=!1,t=await $4.findPs(Eu.HDB_PROC_NAME);if(fD.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await $4.findPs("hdb_express");fD.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await mD.list();fD.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(Y4.red(r)),_o.error(r),process.exit(1)}}o(cAe,"checkIfRunning");async function lAe(e){try{await tAe.processDirectives(e)}catch(t){throw rR("There was an error during the data upgrade. Please check the logs.",Eu.LOG_LEVELS.ERROR),t}try{await W4.insertHdbUpgradeInfo(e[pD])}catch(t){_o.error("Error updating the 'hdb_info' system table."),_o.error(t)}}o(lAe,"runUpgrade");function rR(e,t=void 0){t||(t=_o.info),_o[t](e),console.log(Y4.magenta(e))}o(rR,"printToLogAndConsole")});var tQ=v(sR=>{"use strict";var Te=le();Te.initSync();df();var Rr=(q(),M(W)),{CONFIG_PARAMS:Be}=Rr,
|
|
114
|
+
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:QRe.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(eAe,"findPs")});var j4=v((kHe,z4)=>{"use strict";var K4=le();K4.initSync();var Y4=require("chalk"),_o=Q(),Eu=(q(),M(W)),tAe=G4(),fD=ce(),rAe=(lD(),M(cD)),W4=Jy(),nAe=qy(),$4=dD(),sAe=ji(),{packageJson:V4}=yt(),iAe=require("util").promisify,oAe=iAe(sAe.setSchemaDataToGlobal),mD,{UPGRADE_VERSION:pD}=Eu.UPGRADE_JSON_FIELD_NAMES_ENUM;z4.exports={upgrade:aAe};async function aAe(e){await oAe(),mD===void 0&&(mD=ff()),rAe.isHdbInstalled(K4,_o)||(rR("Harper is not installed. Harper must be installed before running an upgrade.",Eu.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await W4.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),rR(`This version of HarperDB is ${V4.version}`,Eu.LOG_LEVELS.INFO);let n=r[pD]??V4.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Eu.HDB_SUPPORT_ADDRESS}`),_o.notify("Missing new version field from upgrade info object"),process.exit(1)),await cAe();let s,i=0;try{s=await nAe.forceUpdatePrompt(r)}catch(a){_o.error("There was an error when prompting user about upgrade."),_o.error(a),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),_o.info(`Starting upgrade to version ${n}`),await lAe(r),rR(`HarperDB was successfully upgraded to version ${r[pD]}`,Eu.LOG_LEVELS.INFO)}o(aAe,"upgrade");async function cAe(){let e=!1,t=await $4.findPs(Eu.HDB_PROC_NAME);if(fD.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await $4.findPs("hdb_express");fD.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await mD.list();fD.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(Y4.red(r)),_o.error(r),process.exit(1)}}o(cAe,"checkIfRunning");async function lAe(e){try{await tAe.processDirectives(e)}catch(t){throw rR("There was an error during the data upgrade. Please check the logs.",Eu.LOG_LEVELS.ERROR),t}try{await W4.insertHdbUpgradeInfo(e[pD])}catch(t){_o.error("Error updating the 'hdb_info' system table."),_o.error(t)}}o(lAe,"runUpgrade");function rR(e,t=void 0){t||(t=_o.info),_o[t](e),console.log(Y4.magenta(e))}o(rR,"printToLogAndConsole")});var tQ=v(sR=>{"use strict";var Te=le();Te.initSync();df();var Rr=(q(),M(W)),{CONFIG_PARAMS:Be}=Rr,Wn=Q(),_u=require("fs-extra"),pa=require("path"),uAe=FL(),{install:dAe}=F4(),hD=require("chalk"),{packageJson:fAe,PACKAGE_ROOT:mAe}=yt(),gu=ce(),pAe=(lD(),M(cD)),ED=Rt(),J4=$c(),Q4=kT(),hAe=j4(),{compactOnStart:EAe}=(VO(),M($O)),_Ae=require("minimist"),gAe=fs(),{startHTTPThreads:SAe}=(_D(),M(rQ)),TAe=Jy(),{isMainThread:yAe}=require("worker_threads"),GHe=Yi(),qHe=Dl(),$He=GI(),VHe=cp(),nR=(q(),M(W)),go,Df,X4=!1,RAe="Upgrade complete. Starting HarperDB.",AAe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",bAe="HarperDB not found, starting install process.",IAe="There was an error during install, check install_log.log for more details. Exiting.",wAe="HarperDB successfully started.";function NAe(){process.on("unhandledRejection",(e,t)=>{Wn.error("Unhandled promise rejection: Promise",t,"reason:",e)})}o(NAe,"addUnhandleRejectionListener");function CAe(){if(!X4){let e=o(()=>{_u.removeSync(pa.join(Te.get(Rr.CONFIG_PARAMS.ROOTPATH),Rr.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(CAe,"addExitListeners");async function Z4(e=!1,t=!1){if(console.log(hD.magenta("Starting HarperDB...")),NAe(),Wn.suppressLogging?.(()=>{console.log(hD.magenta(""+_u.readFileSync(pa.join(mAe,"utility/install/ascii_logo.txt"))))}),pAe.isHdbInstalled(Te,Wn)===!1){console.log(bAe);try{await dAe()}catch(l){console.error(IAe,l),Wn.error(l),process.exit(1)}}if(!e){let l=J4(Object.keys(Rr.CONFIG_PARAM_MAP),!0);!gu.isEmpty(l)&&!gu.isEmptyOrZeroLength(Object.keys(l))&&ED.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Df?.service==="clustering";Df?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=pa.join(Te.get(Rr.CONFIG_PARAMS.ROOTPATH),Rr.HDB_PID_FILE),i=MAe(s);i&&i!==1&&vAe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),go===void 0&&(go=ff()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Te.get(Rr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await Q4.generateNatsConfig(),await go.startClusteringProcesses(!0),process.exit()),CAe(),await _u.writeFile(pa.join(Te.get(nR.CONFIG_PARAMS.ROOTPATH),nR.HDB_PID_FILE),`${process.pid}`),Wn.info("HarperDB PID",process.pid);let a;try{let l=await TAe.getVersionUpdateInfo();l!==void 0&&(a=l[Rr.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await hAe.upgrade(l),console.log(RAe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),Wn.error(l)):(console.error(AAe,l),Wn.error(l)),process.exit(1)}uAe(),LAe(),await gAe.reviewSelfSignedCert(),gu.autoCastBoolean(Te.get(Rr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&yAe&&await Q4.generateNatsConfig(t)}o(Z4,"initialize");async function OAe(e=!1){try{Df=_Ae(process.argv),Df.ROOTPATH&&ED.updateConfigObject("settings_path",pa.join(Df.ROOTPATH,Rr.HDB_CONFIG_FILE)),await Z4(e,!0),Te.get(Rr.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await EAe();let t=process.env.IS_SCRIPTED_SERVICE&&!Df.service;gu.autoCastBoolean(Te.get(Rr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await go.startClusteringProcesses(),await go.startClusteringThreads()),await SAe(process.env.DEV_MODE?1:Te.get(nR.CONFIG_PARAMS.THREADS_COUNT)??Te.get(nR.CONFIG_PARAMS.THREADS)),t||eQ()}catch(t){console.error(t),Wn.error(t),process.exit(1)}}o(OAe,"main");function eQ(){Wn.suppressLogging(()=>{console.log(hD.magenta(`HarperDB ${fAe.version} successfully started`))}),Wn.notify(wAe)}o(eQ,"started");async function PAe(e=!0){X4=!e;try{go===void 0&&(go=ff()),go.enterPM2Mode(),await Z4(),gu.autoCastBoolean(Te.get(Rr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await go.startClusteringProcesses(),await go.startService(Rr.PROCESS_DESCRIPTORS.HDB),eQ(),e&&process.exit(0)}catch(t){console.error(t),Wn.error(t),process.exit(1)}}o(PAe,"launch");function LAe(){let e=pa.join(Te.get(Rr.CONFIG_PARAMS.ROOTPATH),Rr.LICENSE_KEY_DIR_NAME,Rr.LICENSE_FILE_NAME),t=pa.join(e,Rr.LICENSE_FILE_NAME),r=pa.join(e,Rr.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=J4(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(gu.isEmpty(n)||gu.isEmpty(s))return;_u.mkdirpSync(e),_u.writeFileSync(r,n),_u.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),Wn.error(s)}}o(LAe,"writeLicenseFromVars");sR.launch=PAe;sR.main=OAe;sR.startupLog=DAe;function DAe(e){let r=o(p=>p.padEnd(20),"pad"),n=`
|
|
115
115
|
`;Te.get(Be.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${Te.get(Be.REPLICATION_HOSTNAME)}
|
|
116
116
|
`),Te.get(Be.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${Te.get(Be.REPLICATION_URL)}
|
|
117
117
|
`),n+=`${r("Worker Threads:")}${Te.get(Be.THREADS_COUNT)}
|
|
@@ -127,13 +127,13 @@ Reindexing upgrade started for transaction logs`),ua.notify("Reindexing upgrade
|
|
|
127
127
|
`;let l=[],u=ED.getConfigObj();for(let p in u)u[p].package&&l.push(p);let d={},f=`${r("REST:")}`;for(let[p,h]of e)for(let E of h){let g=E.name;g==="rest"&&(f+=`${E.protocol_name}: ${p}, `),l.includes(g)&&(d[g]?d[g]+=`${E.protocol_name}: ${p}, `:d[g]=`${E.protocol_name}: ${p}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
|
|
128
128
|
`);let m=Te.get(Be.HTTP_PORT)?`HTTP: ${Te.get(Be.HTTP_PORT)}, `:"";m+=Te.get(Be.HTTP_SECUREPORT)?`HTTPS: ${Te.get(Be.HTTP_SECUREPORT)}, `:"",m.length>21&&(m=m.slice(0,-2));for(let p of l)d[p]?n+=`${r(p+": ")}${d[p].slice(0,-2)}
|
|
129
129
|
`:n+=`${r(p+": ")}${m}
|
|
130
|
-
`;console.log(n),Te.get(Be.LOGGING_STDSTREAMS)&&
|
|
131
|
-
`),NE(e,404,0,e.requestId)}function NE(e,t,r,n){let s=CE.logging;if(s){yD||(yD=ha.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";yD[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+qAe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function qAe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function TQ(){return wE||(wE=new BigInt64Array([1n]),wE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",wE.buffer))),Number(Atomics.add(wE,0,1n))}var cQ,ha,aR,qr,lQ,uQ,dQ,fQ,mQ,pQ,uR,RD,hQ,UAe,IE,oR,cR,AD,CE,xAe,sQ,iQ,bD,TD,oQ,yD,wE,CD=ie(()=>{cQ=require("node:net"),ha=I(Q()),aR=require("node:worker_threads"),qr=I(le());q();lQ=I(Rt()),uQ=I(nt()),dQ=I(
|
|
130
|
+
`;console.log(n),Te.get(Be.LOGGING_STDSTREAMS)&&Wn.logsAtLevel("info")&&Wn.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}o(DAe,"startupLog");function MAe(e){try{return Number.parseInt(_u.readFileSync(e,"utf8"),10)}catch{return null}}o(MAe,"readPidFile");function vAe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(vAe,"isProcessRunning")});var nQ={};be(nQ,{SERVERS:()=>Mf,portServer:()=>gD,setPortServerMap:()=>iR});function iR(e,t){let r=gD.get(e)??[];gD.set(e,[...r,t])}var Mf,gD,SD=ie(()=>{Mf={},gD=new Map;o(iR,"setPortServerMap")});var dR={};be(dR,{deliverSocket:()=>EQ,getHttpOptions:()=>FAe,getRequestId:()=>TQ,handleApplication:()=>BAe,httpServer:()=>ND,logRequest:()=>NE,proxyRequest:()=>kAe,registerServer:()=>ID,suppressHandleApplicationWarning:()=>xAe});function BAe(e){CE=e.options.getAll(),e.options.on("change",t=>{CE=e.options.getAll()})}function FAe(){return CE}function EQ(e,t,r){let n=e?.read?e:new cQ.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Mf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=o(a=>{setTimeout(()=>{let c=Mf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(ha.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function kAe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=sQ.get(s),r){case"connection":i=EQ(void 0,t),sQ.set(s,i),i.write=(c,l,u)=>(aR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(aR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),aR.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function ID(e,t,r=!0){t||(t=qr.default.get(x.HTTP_PORT));let n=Mf[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",aQ),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else Mf[t]=e;e.on("unhandled",aQ)}function wD(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=[],qr.default.get(x.HTTP_PORT)!=null&&t.push({port:qr.default.get(x.HTTP_PORT),secure:qr.default.get(x.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),qr.default.get(x.HTTP_SECUREPORT)!=null&&t.push({port:qr.default.get(x.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&qr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,lQ.resolvePath)(qr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function ND(e,t){let r=[];for(let{port:n,secure:s}of wD(t))r.push(_Q(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?AD[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,ID(e,n,!1)),cR[n]=lR(AD,n);return r}function _Q(e,t,r,n){if(iR(e,{protocol_name:t?"HTTPS":"HTTP",name:fR()}),!oR[e]){let s=r?"operationsApi_network":"http",i=qr.default.get(s+"_keepAliveTimeout"),a=qr.default.get(s+"_timeout"),c=qr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:qr.default.get(x.HTTP_MAXHEADERSIZE)},u=qr.default.get(s+"_mtls"),d=qr.default.get(s+"_mtls_required"),f;if(t){let h=qr.default.get("tls");f=qr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,uQ.getTicketKeys)(),SNICallback:(0,dQ.createTLSSelector)(r?"operations-api":"server",u),ciphers:h.ciphers??h[0]?.ciphers})}let m=(0,fQ.checkMemoryLimit)(),p=oR[e]=(t?f?mQ.createSecureServer:pQ.createServer:uR.createServer)(l,async(h,E)=>{let g=performance.now(),A=0;try{let T=new Xa(h,E);r&&(T.isOperationsServer=!0),CE.logging?.id&&(T.requestId=A=TQ());let w=await cR[e](T);if(!w){if(T._nodeResponse.statusCode){NE(h,T._nodeResponse.statusCode,A,performance.now()-g);return}w=gQ(T)}if(w.headers?.set||(w.headers=new ks(w.headers)),m?w.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):w.headers?.set?.("Server","HarperDB"),w.status===-1){for(let ne of w.headers||[])E.setHeader(ne[0],ne[1]);return h.baseRequest=T,E.baseResponse=w,oR[e].emit("unhandled",h,E)}let L=w.status||200;E.statusCode=L;let k=performance.now(),te=k-g,F=w.body,V,X=!1;if(!w.handlesHeaders){let ne=w.headers||new ks;F?F.length>=0?(typeof F=="string"?ne.set("Content-Length",Buffer.byteLength(F)):ne.set("Content-Length",F.length),V=!0):F instanceof Ps&&(F.size?ne.set("Content-Length",F.size):F.on&&(X=!0,F.on("size",ye=>{E.headersSent||E.setHeader("Content-Length",ye)})),F=F.stream()):(ne.set("Content-Length","0"),V=!0);let ae=`hdb;dur=${te.toFixed(2)}`;if(w.wasCacheMiss&&(ae+=", miss"),Op(ne,"Server-Timing",ae,!0),!E.headersSent)if(X){if(ne)if(ne[Symbol.iterator])for(let[ye,Ae]of ne)E.setHeader(ye,Ae);else for(let ye in ne)E.setHeader(ye,ne[ye])}else E.writeHead(L,ne&&(ne[Symbol.iterator]?Array.from(ne):ne));V&&E.end(F)}let Y=T.handlerPath,de=T.method;if(Xe(te,"duration",Y,de,w.wasCacheMiss==null?void 0:w.wasCacheMiss?"cache-miss":"cache-hit"),jr(L<400,"success",Y,de),jr(1,"response_"+L,Y,de),NE(h,L,A,te),!V)if(F instanceof ReadableStream&&(F=RD.Readable.fromWeb(F)),(F[Symbol.iterator]||F[Symbol.asyncIterator])&&(F=RD.Readable.from(F)),F?.pipe){F.pipe(E),F.destroy&&E.on("close",()=>{F.destroy()});let ne=0;F.on("data",ae=>{ne+=ae.length}),F.on("end",()=>{Xe(performance.now()-k,"transfer",Y,de),Xe(ne,"bytes-sent",Y,de)})}else F?.then?F.then(ne=>{E.end(ne)},S):E.end(F)}catch(T){S(T)}function S(T){let w=T.headers,L=T.statusCode||500;E.writeHead(L,w&&(w[Symbol.iterator]?Array.from(w):w)),E.end(UAe(T)),NE(h,L,A,performance.now()-g),T.statusCode?T.statusCode===500?ha.default.warn(T):ha.default.info(T):ha.default.error(T)}o(S,"onError")});i>=0&&(p.keepAliveTimeout=i),c>=0&&(p.headersTimeout=c),t&&(p.ports||(p.ports=[]),p.ports.push(e),l.SNICallback.initialize(p),u&&(p.mtlsConfig=u),p.on("secureConnection",h=>{h._parent.startTime&&Xe(performance.now()-h._parent.startTime,"tls-handshake",e),Xe(h.isSessionReused(),"tls-reused",e)}),p.isSecure=!0),ID(p,e)}return oR[e]}function lR(e,t){let r=gQ;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let a=r;r=o((...c)=>s(...c,a),"nextCallback")}}return r}function gQ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new ks}}function HAe(e,t){ND(e,{requestOnly:!0,...t})}function SQ(e,t){for(let{port:r}of wD(t))iQ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),bD[r]=lR(iQ,r)}function GAe(e,t){let r=[];for(let{port:n,secure:s}of wD(t)){iR(n,{protocol_name:s?"WSS":"WS",name:fR()});let i=_Q(n,s,t?.isOperationsServer,t?.mtls);IE[n]||(IE[n]=new hQ.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),IE[n].on("connection",(a,c)=>{try{let l=new Xa(c);l.isWebSocket=!0;let u=cR[n](l);ha.default.debug("Received WS connection, calling listeners",TD),oQ[n](a,l,u)}catch(l){ha.default.warn("Error in handling WS connection",l)}}),SQ((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):IE[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),IE[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{bD[n]&&bD[n](a,c,l)})),r.push(i),TD[t?.runFirst?"unshift":"push"]({listener:e,port:n}),oQ[n]=lR(TD,n),cR[n]=lR(AD,n)}return r}function aQ(e,t){t.writeHead(404),t.end(`Not found
|
|
131
|
+
`),NE(e,404,0,e.requestId)}function NE(e,t,r,n){let s=CE.logging;if(s){yD||(yD=ha.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";yD[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+qAe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function qAe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function TQ(){return wE||(wE=new BigInt64Array([1n]),wE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",wE.buffer))),Number(Atomics.add(wE,0,1n))}var cQ,ha,aR,qr,lQ,uQ,dQ,fQ,mQ,pQ,uR,RD,hQ,UAe,IE,oR,cR,AD,CE,xAe,sQ,iQ,bD,TD,oQ,yD,wE,CD=ie(()=>{cQ=require("node:net"),ha=I(Q()),aR=require("node:worker_threads"),qr=I(le());q();lQ=I(Rt()),uQ=I(nt()),dQ=I(fs()),fQ=I(of()),mQ=require("node:http2"),pQ=require("node:https"),uR=require("node:http");Vp();Pp();Ls();vs();RD=require("node:stream");Ur();SD();Vh();hQ=require("ws"),{errorToString:UAe}=ha.default;Ue.http=ND;Ue.request=HAe;Ue.ws=GAe;Ue.upgrade=SQ;IE={},oR={},cR={},AD=[],CE={},xAe=!0;o(BAe,"handleApplication");o(FAe,"getHttpOptions");o(EQ,"deliverSocket");sQ=new Map;o(kAe,"proxyRequest");o(ID,"registerServer");o(wD,"getPorts");o(ND,"httpServer");o(_Q,"getHTTPServer");o(lR,"makeCallbackChain");o(gQ,"unhandled");o(HAe,"onRequest");Object.defineProperty(uR.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});iQ=[],bD={};o(SQ,"onUpgrade");TD=[],oQ={};o(GAe,"onWebSocket");o(aQ,"defaultNotFound");o(NE,"logRequest");o(qAe,"headersToString");o(TQ,"getRequestId")});var PD=v(PE=>{"use strict";BA();var{isMainThread:OD,parentPort:yQ,threadId:mR,workerData:$Ae}=require("node:worker_threads"),{createServer:VAe}=require("node:net"),{unlinkSync:AQ,existsSync:KAe}=require("fs"),bQ;PE.whenComponentsLoaded=new Promise(e=>{bQ=e});var vi=Q(),ni=le(),ys=(q(),M(W)),{server:YAe}=(Ur(),M(cm)),{createServer:WAe}=require("node:tls"),{restartNumber:zAe,getWorkerIndex:vf}=nt(),{createReuseportFd:OE}=(Vp(),M(mq)),{createTLSSelector:jAe}=fs(),{resolvePath:QAe}=Rt(),{startupLog:JAe}=tQ(),{SERVERS:Uf,setPortServerMap:RQ,portServer:XAe}=(SD(),M(nQ)),ZAe=(CD(),M(dR)),ebe=li(),IQ=ni.get(ys.CONFIG_PARAMS.THREADS_DEBUG),tbe=ni.get(ys.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);YAe.socket=rbe;if(IQ){let e;if(OD)e=ni.get(ys.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){vi.info("Could not close debugger",t)}});else{let t=ni.get(ys.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&vf()>=0&&(e=t+vf())}if(e){let t=ni.get(ys.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ni.get(ys.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){vi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&OD)try{require("inspector").open(9229)}catch(e){zAe<=1&&vi.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"&&vi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:rGe,CONFIG_PARAMS:nGe}=ys;ni.initSync();PE.globals=ebe;PE.listenOnPorts=NQ;PE.startServers=wQ;function wQ(){let e=ni.get(ys.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=pR().loadRootComponents(!0).then(()=>{yQ?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)deliverSocket(i,s,a);else if(n.requestId)ZAe.proxyRequest(n);else if(n.type===ys.ITC_EVENT_TYPES.SHUTDOWN){vi.trace("received shutdown request",mR);for(let c in Uf){let l=Uf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100,E=l[f][h?"all":"idle"]();if(E.length===0){h&&clearInterval(p);return}m===1?vi.info(`Closing ${E.length} idle connections`):h&&vi.warn(`Forcefully closing ${E.length} active connections`);for(let g=0,A=E.length;g<A;g++){let S=E[g].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
132
132
|
Connection: close\r
|
|
133
133
|
\r
|
|
134
|
-
`))}},25).unref()}l.close?.(()=>{if(ni.get(ys.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&vf()==0)try{AQ(QAe(ni.get(ys.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,mR),l.cantCleanupProperly||vi.warn("Had to forcefully exit the thread",mR),process.exit(0)},5e3).unref()})}if(IQ||process.env.DEV_MODE)try{require("inspector").close()}catch(c){vi.info("Could not close debugger",c)}}}).ref();let r;OE&&!tbe&&(r=NQ()),Promise.resolve(r).then(()=>{if(vf()===0)try{JAe(XAe)}catch(n){console.error("Error displaying start-up log",n)}yQ?.postMessage({type:ys.ITC_EVENT_TYPES.CHILD_STARTED})})});return bQ(t),t}o(wQ,"startServers");function NQ(){let e=[];for(let t in Uf){let r=Uf[t];if(t.includes?.("/")&&vf()==0){KAe(t)&&AQ(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),vi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ni.get(ys.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=vf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?OE?n={fd:OE(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:OE?n={fd:OE(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),vi.trace("Listening on port "+t,mR)}).on("error",c)}))}return Promise.all(e)}o(NQ,"listenOnPorts");!OD&&!$Ae?.noServerStart&&wQ();function rbe(e,t){let r=(Vh(),M(ZT)).getComponentName,n;if(t.securePort){RQ(t.securePort,{protocol_name:"TLS",name:r()});let s=jAe("server",t.mtls),i=ni.get("tls");n=WAe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),Uf[t.securePort]=n}return t.port&&(RQ(t.port,{protocol_name:"TCP",name:r()}),n=VAe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Uf[t.port]=n),n}o(rbe,"onSocket")});var rQ={};be(rQ,{startHTTPThreads:()=>sbe,startSocketServer:()=>UD,updateWorkerIdleness:()=>xQ});async function sbe(e=2,t){Nb().catch(r=>Hf.error?.("Error recording hostname for analytics:",r));try{if(t)MD(0,1,!0);else{let{loadRootComponents:r}=pR();if(e===0)return(0,si.setMainIsWorker)(!0),await PD().startServers(),Promise.resolve([]);await r()}UQ();for(let r=0;r<e;r++)MD(r,e);return Promise.all(vQ)}finally{(0,si.threadsHaveStarted)()}}function UQ(){let e=(0,LQ.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),DD=setInterval(()=>{Hf.notify(e)},nbe).unref())}function MD(e,t=1,r){if(LD++,(0,si.startWorker)("server/threads/threadServer.js",{name:IA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===RA.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});vQ.push(s),await s,xf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=ER.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=xf.indexOf(n);a>-1&&xf.splice(a,1)}if(o(i,"removeWorker"),Bf){let a=Bf;Bf=[];for(let c of a)MQ[c.localPort](null,c)}}}),r){let n=setInterval(()=>{vD?vD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,si.shutdownWorkers)(),LD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function UD(e=0,t){if(typeof e=="string")try{(0,_R.existsSync)(e)&&(0,_R.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=ibe:r=obe(t):r=xD;let n=(0,Ff.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=MQ[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),vD=!0,r(i,(a,c)=>{if(!a){if(CQ){let u=i._socket||new Ff.Socket({handle:i,writable:!0,readable:!0});CQ.deliverSocket(u,e,c),u.resume()}else LD>0?(Bf.length===0&&setTimeout(()=>{Bf.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),i.localPort=e,Bf.push(i)):(console.log("start up a dynamic thread to handle request"),MD(0));Xe(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new Ff.Socket({handle:i,writable:!0,readable:!0});lbe(u,a,e)}Xe(!0,"socket-routed")})},Hf.info(`HarperDB ${DQ.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 xD(e,t){let r,n=0;for(let s of xf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=hR)return hR=i,t(r);n=i}hR=0,t(r)}function ibe(e,t){let r={};e.getpeername(r);let n=r.address,s=kf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);xD(e,a=>{kf.set(n,{worker:a,lastUsed:i}),t(a)})}function obe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Ff.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=kf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);xD(n,f=>{kf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function xQ(){hR=0;for(let e of xf)e.expectedIdle=e.recentELU.idle+abe,e.requests=1;xf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function lbe(e,t,r){let n=cbe++;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(),ER.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")),ER.delete(n)),s.event=="destroy"&&(e.destroy(),ER.delete(n))})}var si,Ff,Hf,_R,PQ,LQ,DQ,xf,Bf,MQ,CQ,LD,vQ,DD,nbe,vD,hR,OQ,kf,abe,ER,cbe,_D=ie(()=>{si=I(nt()),Ff=require("net");q();Hf=I(Q()),_R=require("fs");vs();PQ=require("worker_threads"),LQ=I(of()),DQ=I(yt()),xf=[],Bf=[],MQ=[],LD=0,vQ=[];PQ.isMainThread&&(process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,si.onMessageFromWorkers)(e=>{e.type===bu.RESTART&&DD&&(clearInterval(DD),UQ())}));nbe=6e5;o(sbe,"startHTTPThreads");o(UQ,"licenseWarning");o(MD,"startHTTPWorker");o(UD,"startSocketServer");hR=0;o(xD,"findMostIdleWorker");OQ=36e5,kf=new Map;o(ibe,"findByRemoteAddressAffinity");o(obe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of kf)r.lastUsed+OQ<e&&kf.delete(t)},OQ).unref();abe=1e3;o(xQ,"updateWorkerIdleness");(0,si.setMonitorListener)(xQ);ER=new Map,cbe=1;o(lbe,"proxySocket")});var BD={};be(BD,{hdbServer:()=>mbe,start:()=>mbe});async function mbe(e){try{So.default.debug("In Fastify server"+process.cwd()),So.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),So.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=BQ.default.isMaster,await pbe();let t=e.securePort>0;Gf=hbe(t),await Gf.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(Gf.server,e),Gf.server.closeIdleConnections||await Gf.listen({port:0,host:"::"})}catch(r){throw Gf.close(),So.default.error(r),So.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),So.default.fatal(t),process.exit(1)}}async function pbe(){So.default.trace("Configuring HarperDB process."),KQ.default.setSchemaDataToGlobal(),await WQ.default.setUsersWithRolesCache(),await zQ.default.getLicense()}function hbe(e){So.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Ebe(e),r=(0,FQ.default)(t);r.server.headersTimeout=gbe(),r.setErrorHandler(Cc.serverErrorHandler);let n=_be();n&&r.register(kQ.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(qQ.default),r.register(HQ.default),r.register(GQ.default,{root:$Q.default.join(VQ.PACKAGE_ROOT,"studio/build-local")}),wm(r);let s=Nc.default.get(im.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!YQ.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Cc.reqBodyValidationHandler,Cc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Cc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),So.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function Ebe(e){let t=Nc.default.get(LE.OPERATIONSAPI_NETWORK_TIMEOUT),r=Nc.default.get(LE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:dbe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function _be(){let e=Nc.default.get(LE.OPERATIONSAPI_NETWORK_CORS),t=Nc.default.get(LE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===fbe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function gbe(){return Nc.default.get(LE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??ube}var BQ,Nc,So,FQ,kQ,HQ,GQ,qQ,$Q,VQ,KQ,YQ,WQ,zQ,Cc,ube,dbe,fbe,LE,Gf,jQ=ie(()=>{BQ=I(require("cluster")),Nc=I(le());q();So=I(Q()),FQ=I(require("fastify")),kQ=I(require("@fastify/cors")),HQ=I(require("@fastify/compress")),GQ=I(require("@fastify/static")),qQ=I(wN()),$Q=I(require("path")),VQ=I(yt()),KQ=I(ji()),YQ=I(ce()),WQ=I(os()),zQ=I(of());Ur();Cc=I(vy());Do();Nc.default.initSync();ube=6e4,dbe=1024*1024*1024,fbe="TRUE",{CONFIG_PARAMS:LE}=W;o(mbe,"operationsServer");o(pbe,"setUp");o(hbe,"buildServer");o(Ebe,"getServerOptions");o(_be,"getCORSOpts");o(gbe,"getHeaderTimeoutConfig")});var $D={};be($D,{disableNATS:()=>Tbe,publishToStream:()=>TR,setNATSReplicator:()=>FD,setPublishToStream:()=>ybe,setSubscription:()=>qD,start:()=>Sbe});function Sbe(){DE.default.get(x.CLUSTERING_ENABLED)&&Abe()}function Tbe(e=!0){eJ=e}function ybe(e,t){TR=e,qD=t}function Abe(){if(eJ||process.env._DISABLE_NATS)return;let e=ct(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];FD(s,r,i)}}Ol((r,n)=>{FD(r.tableName,r.databaseName,r),n&&rJ(r)}),!QQ&&(QQ=!0)}function FD(e,t,r){if(t==="system"&&bbe.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 Br{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){rJ(i)}static subscribe(){let i=new Jn;return qD(t,e,i),i}static subscribeOnThisThread(i){return i<(DE.default.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Rbe)}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 gR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=tJ;return i}o(n,"getNATSTransaction")}function rJ(e){let t=DE.default.get(x.CLUSTERING_NODENAME);TR(`${HD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,GD.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 JQ,HD,GD,XQ,ZQ,DE,SR,eJ,TR,qD,Rbe,tJ,QQ,bbe,gR,kD,nJ=ie(()=>{Pe();Fa();JQ=I(pr()),HD=I(Nt()),GD=I(Ji());Ou();XQ=I(VN()),ZQ=I(On()),DE=I(le());q();SR=I(Q());o(Sbe,"start");o(Tbe,"disableNATS");TR=JQ.publishToStream,qD=XQ.setSubscription;o(ybe,"setPublishToStream");Rbe=2;o(Abe,"assignReplicationSource");bbe=["hdb_job","hdb_raw_analytics","hdb_info"];o(FD,"setNATSReplicator");o(rJ,"publishSchema");gR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=DE.default.get(x.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(SR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(TR(`${HD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,GD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw SR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},kD=class extends gR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,ZQ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};tJ=new kD});async function cJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await VD.get(e,{returnNonexistent:!0});i=new WD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await VD.get(e);a&&a.delete()}i=new RR(e,t)}return n&&(n.id=e,n.user={username:t?.username},ME.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function KD(){return yR++,yR>65500&&(yR=1),yR}function YD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=xs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new fi(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return bt(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var iJ,Oc,oJ,aJ,sJ,VD,ME,yR,RR,WD,lJ=ie(()=>{Pe();ka();iJ=I(On()),Oc=I(Q());La();oJ=I(nt()),aJ=I(PD());Ur();ng();sJ=100,VD=Je({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),ME=Je({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,oJ.getWorkerIndex)()===0&&(async()=>{await aJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of ME.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await YD(r,t,r)}catch{(0,Oc.warn)("Failed to publish will",t)}ME.delete(e.id)}})();o(cJ,"getSession");yR=1;o(KD,"getNextMessageId");RR=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Oc.trace)("Resuming subscription from",s,"from",a);let p=xs.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let T=S.split("/"),w;for(let te=0;te<T.length;te++)if(T[te].indexOf("+")>-1)if(T[te]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&w)throw new Error("Filters can not be combined");let L=!0;T[T.length-1]==="#"&&(T.length--,L=!1),w&&(n=o(te=>{let F=te.id;if(!Array.isArray(F))if(F?.indexOf?.("/")>-1)F=F.split("/");else return!1;if(L&&F.length!==T.length)return!1;for(let V=0;V<T.length;V++)if(T[V]!=="+"&&T[V]!==F[V])return!1;return!0},"filter"));let k=T.indexOf("+");m.url="/"+(k>-1?T.slice(0,k):T).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,A=await bt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let T=await g.subscribe(m,S);if(!T)return;if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let w=(async()=>{for await(let L of T)try{let k;if(L.type&&L.type!=="put"&&L.type!=="delete"&&L.type!=="message"&&L.type!=="patch"||n&&!n(L))continue;r?(L.topic=s,k=this.needsAcknowledge(L)):(L.acknowledge?.(),k=KD());let te=L.id;if(Array.isArray(te)&&(te=Ku(te)),te==null&&(te=""),await this.listener(E+"/"+te,L.value,k,t)===!1)break;this.awaitingAcks?.size>sJ?await new Promise(V=>setTimeout(V,this.awaitingAcks.size-sJ)):await new Promise(setImmediate)}catch(k){(0,Oc.warn)(k)}})();return T});if(A)return A.topic=s,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=KD();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 YD(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();bt(r,async()=>{try{if(!t){let n=await ME.get(this.sessionId);n?.doesExist()&&await YD(n,n.data,r)}}finally{await ME.delete(this.sessionId)}}).catch(n=>{(0,Oc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(YD,"publish");WD=class extends RR{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=KD(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Oc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,iJ.getNextMonotonicTime)()),(0,Oc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),VD.put(this.sessionRecord)}}});var zD={};be(zD,{bypassAuth:()=>Ibe,start:()=>Nbe});function Ibe(){EJ=!0}function Nbe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new hJ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),Zt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=dJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",p),u.on("close",h),u.on("error",E=>{Zt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),Zt.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await $d(p,l);if(!E.valid)throw Zt.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,qf.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&bR.notify?.({username:d?.username,status:ci.SUCCESS,type:Na.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,qf.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&bR.error?.({username:h,status:ci.FAILURE,type:Na.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Zt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){a.events.emit("error",p,u),Zt.error?.(p)}else if(l.required)return Zt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&wbe(u.remoteAddress)&&(d=await(0,fJ.getSuperUser)(),Zt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=dJ(u,p=>u.write(p),null,d,a);u.on("data",f),u.on("close",m),u.on("error",p=>{Zt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function dJ(e,t,r,n,s){uJ||(uJ=!0,$m(f=>{AR>0&&f.push({metric:"mqtt-connections",connections:AR,byThread:!0})}));let i;AR++;let a,c={protocolVersion:4},l=(0,IR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){AR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),jr(!1,"connection","mqtt","disconnect"),Zt.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(T){e.close?.(1008,"Unauthorized"),Zt.info?.(T);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){Zt.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Xe(f.length,"bytes-received",E,A(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Ue.getUser(f.username,f.password.toString(),r),(0,qf.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&bR.notify?.({username:n?.username,status:ci.SUCCESS,type:Na.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(X){return(0,qf.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&bR.error?.({username:f.username,status:ci.FAILURE,type:Na.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,X),jr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),jr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let X=e.deserialize||(e.deserialize=Lo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?X(f.will.payload):void 0,delete f.will.payload}a=cJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(X){return Zt.error?.(X),s.events.emit("auth-failed",f,e,X),jr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:X.code||5,returnCode:X.code||128})}s.events.emit("connected",a,e),jr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let T=o(async(X,Y,de,ne)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",X);let ae=X.indexOf("/",1),ye=ae>0?X.slice(0,ae):X;g({cmd:"publish",topic:X,payload:await S(Y),messageId:de||Math.floor(Math.random()*1e8),qos:ne.qos},ye);let Ae=e._socket??e;return Ae.writableNeedDrain?new Promise(He=>Ae.once("drain",He)):!Ae.closed}catch(ae){return Zt.error?.(ae),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(T),a.sessionWasPresent&&await a.resume();break;case"subscribe":let w=[];for(let X of f.subscriptions){let Y;try{let de=await a.addSubscription(X,X.qos>=1);Y=de?de.qos||0:c.protocolVersion<5?128:143}catch(de){s.events.emit("error",de,e,X,a),de.statusCode?de.statusCode===500?Zt.warn?.(de):Zt.info?.(de):Zt.error?.(de),Y=c.protocolVersion<5?128:de.statusCode===403?135:de.statusCode===404?143:128}w.push(Y)}await a.committed,g({cmd:"suback",granted:w,messageId:f.messageId});break;case"unsubscribe":{let X=[];for(let Y of f.unsubscriptions)X.push(a.removeSubscription(Y)?0:17);g({cmd:"unsuback",granted:X,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let L=f.qos===2?"pubrec":"puback",k=e.deserialize||(e.deserialize=Lo(r?.headers.get?.("content-type"))),F=(f.payload?.length||0)>0?k(f.payload):void 0,V;try{V=await a.publish(f,F)}catch(X){s.events.emit("error",X,e,f,a),Zt.warn?.(X),f.qos>0&&g({cmd:L,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:L,messageId:f.messageId,reasonCode:V===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),jr(!0,"connection","mqtt","disconnect"),Zt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(T){s.events.emit("error",T,e,f,a),Zt.error?.(T),g({cmd:"disconnect"})}function g(T,w){let L=(0,IR.generate)(T,c);t(L),Xe(L.length,"bytes-sent",w,A(T),"mqtt")}o(g,"sendPacket");function A(T){return T.qos>0?T.cmd+",qos="+T.qos:T.cmd}o(A,"packetMethodName");function S(T){return Po(T,r)}o(S,"serialize")}),l.on("error",f=>{Zt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var IR,fJ,qf,mJ,pJ,hJ,bR,Zt,EJ,wbe,uJ,AR,_J=ie(()=>{IR=require("mqtt-packet");lJ();fJ=I(os());Do();vs();Ur();qf=I(le());q();mJ=I(Os()),pJ=I(Q()),hJ=require("events");nT();bR=(0,mJ.loggerWithTag)("auth-event"),Zt=(0,pJ.forComponent)("mqtt"),EJ=(0,qf.get)(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(Ibe,"bypassAuth");wbe=o(e=>EJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(Nbe,"start");AR=0;o(dJ,"onSocket")});function wR(e,t){if(t?.includes(".."))throw new jD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var jD,QD=ie(()=>{jD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(wR,"resolveBaseURLPath")});function gJ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var SJ=ie(()=>{o(gJ,"deriveCommonPatternBase")});function NR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var JD=ie(()=>{o(NR,"deriveGlobOptions")});var TJ,XD,vE,yJ=ie(()=>{QD();SJ();JD();TJ=require("micromatch"),XD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},vE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=wR(this.name,this.config.urlPath),this.globOptions=NR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new XD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,TJ.scan)(s).base),this.commonPatternBase=gJ(this.patternBases)}}});function RJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Su(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(RJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(RJ(n,t)){t=t.slice(n.length+1);break}}}return(0,AJ.join)(e.baseURLPath,t)}var AJ,ZD=ie(()=>{AJ=require("node:path");o(RJ,"pathStartsWithBase");o(Su,"deriveURLPath")});function bJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var OR,IJ,wJ,eM,NJ,CJ,CR,OJ=ie(()=>{OR=require("node:events");yJ();IJ=I(Q()),wJ=I(require("chokidar")),eM=require("node:path"),NJ=require("node:fs/promises");ZD();CJ=require("micromatch"),CR=class extends OR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new vE(t,r,bJ(n)),this.#r=s||IJ.default.loggerWithTag(t),this.ready=(0,OR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,CJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,eM.join)(this.directory,r);switch(t){case"add":case"change":{let i=Su(this.#e,r,"file");(0,NJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=Su(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=Su(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,eM.join)(this.#e.directory,r));return this.#t=wJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new vE(this.name,this.directory,bJ(t)),this.#a()}};o(bJ,"castConfig")});var PR,tM=ie(()=>{PR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var DR,PJ,LJ,DJ,MJ,vJ,rM,nM,sM,iM,oM,LR,UJ=ie(()=>{DR=require("events"),PJ=I(require("yaml")),LJ=I(require("chokidar")),DJ=require("node:fs/promises"),MJ=require("util"),vJ=I(Q());tM();rM=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},nM=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},sM=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},iM=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},oM=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},LR=class extends DR.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||vJ.default.loggerWithTag(t),this.ready=(0,DR.once)(this,"ready"),this.#t=LJ.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,DJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=PJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new rM(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=PR,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,MJ.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new nM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new sM(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new iM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new oM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var UR,xJ,MR,vR,BJ=ie(()=>{UR=require("node:events");OJ();UJ();xJ=I(Q());SP();MR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},vR=class extends UR.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,xJ.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,UR.once)(this,"ready"),this.options=new LR(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new CR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new MR);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new MR);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),UW()}}});function Tu(e){return typeof e=="string"&&e.trim()!==""}function aM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>Tu(t))}function GJ(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function Cbe(e){e.config.root&&UE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new pM(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(GJ(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,xE.join)(e.directory,i);xR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function qJ(e){let t=!1;if(t=await Cbe(e),t)return t;let r=await(0,FJ.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,xE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Su(e,n.path,"directory");xR.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=Su(e,n.path,"file"),a=await(0,kJ.readFile)(s);xR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else UE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var xR,FJ,UE,xE,kJ,HJ,BR,Ui,cM,lM,uM,dM,fM,mM,pM,hM,EM,$J=ie(()=>{xR=require("node:worker_threads"),FJ=I(require("fast-glob")),UE=I(Q());QD();JD();xE=require("node:path"),kJ=require("node:fs/promises");ZD();HJ=require("micromatch"),BR=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!Tu(this.config.files)&&!aM(this.config.files)&&!GJ(this.config.files))throw new cM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!aM(this.config.files.source)&&!Tu(this.config.files.source))throw new lM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new uM(this);if(this.config.files.ignore!==void 0&&!aM(this.config.files.ignore)&&!Tu(this.config.files.ignore))throw new dM(this)}if(this.config.root!==void 0&&!Tu(this.config.root))throw new mM(this);if(this.config.path!==void 0&&!Tu(this.config.path))throw new hM(this);if(this.config.path&&(UE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!Tu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new EM(this);this.globOptions=NR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new fM(this,r);return r.startsWith("/")&&(UE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,HJ.scan)(r).base),this.baseURLPath=wR(this.name,this.config.urlPath)}},Ui=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,xE.basename)(r.directory)}) ${t}`)}},cM=class extends Ui{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},lM=class extends Ui{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},uM=class extends Ui{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},dM=class extends Ui{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},fM=class extends Ui{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},mM=class extends Ui{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},pM=class extends Ui{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},hM=class extends Ui{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},EM=class extends Ui{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(Tu,"isNonEmptyString");o(aM,"isArrayOfNonEmptyStrings");o(GJ,"isObject");o(Cbe,"handleRoots");o(qJ,"processResourceExtensionComponent")});var ZT={};be(ZT,{getComponentName:()=>fR,loadComponent:()=>GR,loadComponentDirectories:()=>YJ,setErrorReporter:()=>Pbe});function YJ(e,t){t&&(gM=t),e&&(RM=e);let r=[];if((0,Lt.existsSync)(_M)){let s=(0,Lt.readdirSync)(_M,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,on.join)(_M,a);r.push(GR(c,gM,gA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(GR(n,gM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{KJ=!0})}function Pbe(e){kR=e}function Lbe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{ia.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(ia.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Lt.rmSync)(t,{recursive:!0,force:!0}),(0,Lt.existsSync)((0,on.join)(e,"node_modules"))||(0,Lt.mkdirSync)((0,on.join)(e,"node_modules")),(0,Lt.symlinkSync)(bM.PACKAGE_ROOT,t,"dir"),r()}finally{ia.primaryStore.unlock(e,0)}})}function WJ(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return ia.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(WJ(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{ia.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function GR(e,t,r,n,s,i){let a=(0,Lt.realpathSync)(e);if(FR.has(a))return FR.get(a);FR.set(a,!0),s&&(RM=s);try{let c,l=(0,on.join)(e,"harperdb-config.yaml");(0,Lt.existsSync)(l)?c=n?(0,qR.getConfigObj)():(0,TM.parseDocument)((0,Lt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Lt.existsSync)(l=(0,on.join)(e,"config.yaml"))?c=(0,TM.parseDocument)((0,Lt.readFileSync)(l,"utf8")).toJSON():c=PR;try{let m=(0,on.join)(e,"node_modules","harperdb");(n||((0,Lt.existsSync)(m)||!e.startsWith((0,yM.getHdbBasePath)()))&&(!(0,Lt.existsSync)(m)||(0,Lt.realpathSync)(bM.PACKAGE_ROOT)!==(0,Lt.realpathSync)(m)))&&await Lbe(e,m)}catch(m){Ea.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Ea.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=HR,d={};for(let m in c){let p=`${(0,on.basename)(e)}.${m}`;HR=m;let h=c[m];if(!h)continue;let E,g=h.package;try{if(g){let L=e,k;for(;!(0,Lt.existsSync)(k=(0,on.join)(L,"node_modules",m));)if(L=(0,on.dirname)(L),L.length<(0,yM.getHdbBasePath)().length){k=null;break}if(k)E=await GR(k,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=Obe[m];if(!E)continue;Yo.loading(p);let A=o(L=>(L.origin=r,Je(L)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,T=S?.securePort||S?.https&&S.port,w=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let L=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw Yo.failed(p,L,`Component '${p}' failed to load`),L}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Ea.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let L=new vR(m,e,l,t,Ue);await WJ(L,E),Yo.loaded(p,`Component '${p}' loaded successfully`);continue}if(SM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:A,port:w,securePort:T,resources:t,...h})||E,n&&S))for(let L of[w,T])try{if(+L&&!VJ.includes(L)){let k=AM.get(x.HTTP_SESSIONAFFINITY);k&&Ea.default.warn("Session affinity is not recommended and may cause memory leaks"),(k||!mS)&&(VJ.push(L),UD(L,k))}}catch(k){console.error("Error listening on socket",L,k,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:A,port:w,securePort:T,resources:t,...h})||E),RM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let L=new BR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await qJ(L)}Yo.loaded(p,`Component '${p}' loaded successfully`)}catch(A){A.message=`Could not load component '${m}' for application '${(0,on.basename)(e)}' due to: ${A.message}`,kR?.(A),((0,BE.getWorkerIndex)()===0?console:Ea.default).error(A),t.set(h.path||"/",new cl(A),null,!0),Yo.failed(p,A,`Could not load component '${p}'`)}}if(HR=u,SM.isMainThread&&!KJ&&i&&(0,BE.watchDir)(e,async()=>YJ()),c.extensionModule||c.pluginModule){let m=await uS((0,on.join)(e,c.extensionModule||c.pluginModule));return FR.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;kR?.(new Error(m)),((0,BE.getWorkerIndex)()===0?console:Ea.default).error(m),Yo.failed((0,on.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Ea.default.warn(`Component ${m} from (${(0,on.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,kR?.(c),t.set("",new cl(c))}}var Lt,on,SM,TM,AM,bM,Ea,BE,yM,qR,_M,RM,KJ,gM,Obe,VJ,FR,kR,HR,fR,Vh=ie(()=>{Lt=require("node:fs"),on=require("node:path"),SM=require("node:worker_threads"),TM=require("yaml"),AM=I(le()),bM=I(yt());q();wG();xG();QG();rq();nq();gq();b2();I2();N2();Ea=I(Q());M2();BE=I(nt());hN();Ur();Pe();_D();yM=I(le());jQ();WT();nJ();ls();_J();qR=I(Rt());Vp();$b();BJ();$J();CD();jh();Ip();tM();_M=(0,qR.resolvePath)(AM.get(x.COMPONENTSROOT)),RM=new Map;o(YJ,"loadComponentDirectories");Obe={REST:hS,rest:hS,graphql:aN,graphqlSchema:iN,roles:pN,jsResource:EN,fastifyRoutes:DL,login:gN,static:vL,operationsApi:BD,customFunctions:{},http:dR,clustering:$D,replication:Qo,authentication:Bh,mqtt:zD,loadEnv:UL,logging:Ea.default,dataLoader:xL},VJ=[],FR=new Map;o(Pbe,"setErrorReporter");fR=o(()=>HR,"getComponentName");o(Lbe,"symlinkHarperModule");o(WJ,"sequentiallyHandleApplication");o(GR,"loadComponent")});var pR=v((Dqe,jJ)=>{var{isMainThread:zJ}=require("worker_threads"),{getTables:Dbe,getDatabases:Pqe,table:Lqe}=(Pe(),M(pt)),{loadComponentDirectories:Mbe,loadComponent:vbe}=(Vh(),M(ZT)),{resetResources:Ube}=(ka(),M(Vb)),xbe=sP(),Bbe=Rt(),{dirname:Fbe}=require("path"),{getConnection:kbe}=pr(),Hbe=le(),{CONFIG_PARAMS:Gbe}=(q(),M(W)),{loadCertificates:qbe}=ds(),IM=new Map;async function $be(e=!1){!zJ&&Hbe.get(Gbe.CLUSTERING_ENABLED)&&kbe();try{zJ&&await xbe()}catch(n){console.error(n)}let t=Ube();Dbe(),t.isWorker=e,await qbe(),await vbe(Fbe(Bbe.getConfigFilePath()),t,"hdb",!0,IM),await Mbe(IM,t);let r=[];for(let[n]of IM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o($be,"loadRootComponents");jJ.exports.loadRootComponents=$be});var nt=v((vqe,Bi)=>{"use strict";BA();var{Worker:Vbe,MessageChannel:Kbe,parentPort:To,isMainThread:PM,threadId:Ybe,workerData:yo}=require("worker_threads"),{PACKAGE_ROOT:Wbe}=yt(),{join:ZJ,isAbsolute:zbe,extname:jbe}=require("path"),{server:e3}=(Ur(),M(cm)),{watch:Qbe,readdir:Jbe}=require("fs/promises"),{totalmem:QJ}=require("os"),$f=(q(),M(W)),t3=le(),xi=Q(),{randomBytes:Xbe}=require("crypto"),{_assignPackageExport:Zbe}=li(),JJ=1024*1024,Pc=[],ii=[],eIe=50,LM=1e4,tIe="restart",r3="request_thread_info",n3="resource_report",s3="thread_info",i3="added-port",rIe="ack",wM;Zbe("threads",ii);Bi.exports={startWorker:NM,restartWorkers:MM,shutdownWorkers:aIe,workers:Pc,setMonitorListener:hIe,onMessageFromWorkers:cIe,onMessageByType:f3,broadcast:uIe,broadcastWithAcknowledgement:fIe,setChildListenerByType:oIe,getWorkerIndex:o3,getWorkerCount:a3,getTicketKeys:l3,setMainIsWorker:sIe,setTerminateTimeout:nIe,restartNumber:yo?.restartNumber||1};ii.onMessageByType=f3;ii.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ii.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Bi.exports.whenThreadsStarted=new Promise(e=>{Bi.exports.threadsHaveStarted=e});var DM;function nIe(e){LM=e}o(nIe,"setTerminateTimeout");function o3(){return yo?yo.workerIndex:DM?0:void 0}o(o3,"getWorkerIndex");function a3(){return yo?yo.workerCount:DM?1:void 0}o(a3,"getWorkerCount");function sIe(e){DM=e,Bi.exports.threadsHaveStarted()}o(sIe,"setMainIsWorker");var c3=1,$R;function l3(){return $R||($R=PM?Xbe(48):yo.ticketKeys,$R)}o(l3,"getTicketKeys");Object.defineProperty(e3,"workerIndex",{get(){return o3()}});Object.defineProperty(e3,"workerCount",{get(){return a3()}});var u3={[r3](e,t){mIe(t)},[n3](e,t){pIe(t,e)}};function NM(e,t={}){let r=process.constrainedMemory?.()||QJ();r=Math.min(r,QJ(),2e4*JJ);let n=t3.get($f.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/JJ/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of ii){let u=new Kbe;u.existingPort=l,i.push(u),a.push(u.port2)}jbe(e)||(e+=".js");let c=new Vbe(zbe(e)?e:ZJ(Wbe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:c3=t.threadCount,name:t.name,restartNumber:Bi.exports.restartNumber,ticketKeys:l3()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:i3,port:l,threadId:c.threadId},[l]);return KR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>NM(e,t),c.on("error",l=>{xi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Pc.splice(Pc.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<eIe?(t.unexpectedRestarts=c.unexpectedRestarts+1,NM(e,t)):xi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{u3[l.type]?.(l,c)}),Pc.push(c),_Ie(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(NM,"startWorker");var iIe=[$f.THREAD_TYPES.HTTP];async function MM(e=null,t=Math.max(c3>3,1),r=!0){if(PM){try{process.chdir(process.cwd())}catch(a){xi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=pR();await a()}Bi.exports.restartNumber++,t<1&&(t=t*Pc.length);let n=[],s=[];for(let a of Pc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;xi.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Bi.exports.restartNumber,type:$f.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=iIe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{xi.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},LM*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===$f.ITC_EVENT_TYPES.CHILD_STARTED&&(xi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");xi.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=df();r&&(e==="http"||!e)&&t3.get($f.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else To.postMessage({type:tIe,workerType:e})}o(MM,"restartWorkers");function oIe(e,t){u3[e]=t}o(oIe,"setChildListenerByType");function aIe(e){return MM(e,1/0,!1)}o(aIe,"shutdownWorkers");var d3=[];function cIe(e){d3.push(e)}o(cIe,"onMessageFromWorkers");var CM=new Map;function f3(e,t){let r=CM.get(e);r||CM.set(e,r=[]),r.push(t)}o(f3,"onMessageByType");var lIe=10;async function uIe(e,t){let r=0;for(let n of ii)try{n.postMessage(e),r++>lIe&&(r=0,await new Promise(setImmediate))}catch(s){xi.error("Unable to send message to worker",s)}t&&p3(e,null)}o(uIe,"broadcast");var VR=new Map,dIe=1;function fIe(e){return new Promise(t=>{let r=0;for(let n of ii)try{let s=dIe++,i=o(()=>{VR.delete(s),--r===0&&t(),n!==To&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,VR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of VR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){xi.error("Unable to send message to worker",s)}r===0&&t()})}o(fIe,"broadcastWithAcknowledgement");function mIe(e){e.postMessage({type:s3,workers:m3()})}o(mIe,"sendThreadInfo");function m3(){let e=Date.now();return Pc.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(m3,"getChildWorkerInfo");function pIe(e,t){e.resources=t,e.resources.updated=Date.now()}o(pIe,"recordResourceReport");var OM;function hIe(e){OM=e}o(hIe,"setMonitorListener");var EIe=1e3,XJ=!1;function _Ie(){XJ||(XJ=!0,setInterval(()=>{for(let e of Pc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}OM&&OM()},EIe).unref())}o(_Ie,"startMonitoring");var gIe=1e3;if(To&&yo?.addPorts){KR(To);for(let e=0,t=yo.addPorts.length;e<t;e++){let r=yo.addPorts[e];r.threadId=yo.addThreadIds[e],KR(r)}setInterval(()=>{let e=process.memoryUsage();To.postMessage({type:n3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},gIe).unref(),wM=o(()=>new Promise((e,t)=>{To.on("message",r),To.postMessage({type:r3});function r(n){n.type===s3&&(To.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else wM=m3;Bi.exports.getThreadInfo=wM;function KR(e,t){ii.push(e),e.on("message",r=>{if(r.type===i3)r.port.threadId=r.threadId,KR(r.port);else if(r.type===rIe){let n=VR.get(r.id);n&&n()}else p3(r,e)}).on("close",()=>{ii.splice(ii.indexOf(e),1)}).on("exit",()=>{ii.splice(ii.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(KR,"addPort");function p3(e,t){for(let n of d3)n(e,t);let r=CM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){xi.error(s)}}o(p3,"notifyMessageListeners");if(PM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await Jbe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(ZJ(s,a.name));try{for await(let{filename:a}of Qbe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await MM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Bi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else To.on("message",async e=>{let{type:t}=e;t===$f.ITC_EVENT_TYPES.SHUTDOWN&&(Bi.exports.restartNumber=e.restartNumber,To.unref(),setTimeout(()=>{xi.warn("Thread did not voluntarily terminate",Ybe),process.exit(0)},LM).unref())})});var T3=v((Fqe,S3)=>{"use strict";var{promises:Vf,createReadStream:SIe,createWriteStream:TIe}=require("fs"),{createGzip:yIe}=require("zlib"),{promisify:RIe}=require("util"),{pipeline:AIe}=require("stream"),bIe=RIe(AIe),UM=require("path"),g3=le();g3.initSync();var YR=Q(),{CONFIG_PARAMS:IIe,ITC_EVENT_TYPES:xqe}=(q(),M(W)),{onMessageFromWorkers:Bqe}=nt(),{convertToMS:h3}=ce(),{onStorageReclamation:wIe}=(x_(),M(rx)),NIe=6e4,CIe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",OIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",vM,E3;S3.exports=PIe;function PIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(wIe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(CIe);if(!i)throw new Error(OIe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=h3(r));let d;return vM=Date.now(),YR.trace("Log rotate enabled, maxSize:",t,"interval:",r),E3=setInterval(async()=>{if(l){let f;f=await Vf.stat(e.path),f.size>=l&&(d=await _3(e.path,i))}if(u&&Date.now()-vM>=u&&(d=await _3(e.path,i),vM=Date.now()),n||c){let f=h3(n??"1M")/(1+c);c=0;let m=await Vf.readdir(i);for(let p of m)try{let h=await Vf.stat(UM.join(i,p));Date.now()-h.mtimeMs>f&&await Vf.unlink(UM.join(i,p))}catch(h){YR.error("Error trying to remove log",p,h)}}},a??NIe).unref(),{end(){clearInterval(E3)},getLastRotatedLogPath(){return d}}}o(PIe,"logRotator");async function _3(e,t){let r=g3.get(IIe.LOGGING_ROTATION_COMPRESS),n=UM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Vf.rename(e,n),r&&(e=n,n+=".gz",await bIe(SIe(e),yIe(),TIe(n)),await Vf.unlink(e)),YR.closeLogFile(),YR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(_3,"moveLogFile")});var I3={};be(I3,{RootConfigWatcher:()=>xM});var y3,R3,A3,WR,b3,xM,w3=ie(()=>{y3=I(require("chokidar")),R3=require("node:fs/promises"),A3=I(Rt()),WR=require("node:stream"),b3=require("yaml"),xM=class extends WR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,A3.getConfigFilePath)(),this.ready=(0,WR.once)(this,"ready"),this.#t=y3.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,R3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,b3.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=v(($qe,tA)=>{"use strict";var ga=require("fs-extra"),{workerData:LIe,threadId:DIe,isMainThread:M3}=require("worker_threads"),HE=require("path"),v3=require("yaml"),U3=require("properties-reader"),$r=(q(),M(W)),N3=$c(),MIe=require("os"),{PACKAGE_ROOT:$M}=yt(),{_assignPackageExport:vIe}=li(),{Console:UIe}=require("console"),C3=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),O3=new Map,{join:Sa}=HE,P3=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},xIe={STDOUT:"stdOut",STDERR:"stdErr"},qqe=Sa($M,"logs"),BIe=Sa($M,"config/yaml/",$r.HDB_DEFAULT_CONFIG_FILE),FIe=1e4,GE,qE,zR,_a,FM,BM,QR,Dt,Rs,JR,XR,Kf,kE,FE;function jR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=HE.dirname(n)):t.root?n=Sa(t.root,FM):(n=Dt.path,t.root||(t.root=HE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Dt?.level??cr.info,x3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Dt.path===e.path&&r)}o(jR,"updateLogger");function x3(e){let t=e.conditional??(e.conditional={});t.notify=cr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=cr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=cr.error>=e.level?e.error.bind(e):void 0,t.warn=cr.warn>=e.level?e.warn.bind(e):void 0,t.info=cr.info>=e.level?e.info.bind(e):void 0,t.debug=cr.debug>=e.level?e.debug.bind(e):void 0,t.trace=cr.trace>=e.level?e.trace.bind(e):void 0}o(x3,"updateConditional");async function kM(){FE||(FE=new rwe,await FE.ready,FE.on("change",kM));let e=FE.config,t=e.logging??{};jR(Dt,t),QR=Dt.path,GE=t.console??!1,t.external&&jR(Rs,t.external);for(let r in e){let n=e[r];n.logging?jR(Dt.forComponent(r),n.logging,r):Dt.hasComponent(r)&&jR(Dt.forComponent(r),t,r)}}o(kM,"updateLogSettings");var HM=class extends UIe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){bn="trace",this.level<=cr.trace&&super.info(...t),bn="info"}debug(...t){bn="debug",this.level<=cr.debug&&super.info(...t),bn="info"}info(...t){bn="info",this.level<=cr.info&&super.info(...t),bn="info"}warn(...t){bn="warn",this.level<=cr.warn&&super.warn(...t),bn="info"}error(...t){bn="error",this.level<=cr.error&&super.error(...t),bn="info"}fatal(...t){Kf=!0;try{bn="fatal",this.level<=cr.fatal&&super.error(...t),bn="info"}finally{Kf=!1}}notify(...t){Kf=!0;try{bn="notify",this.level<=cr.notify&&super.info(...t),bn="info"}finally{Kf=!1}}withTag(t){return F3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};kE===void 0&&B3();tA.exports={notify:YIe,fatal:WIe,error:qM,warn:zIe,info:$Ie,debug:KIe,trace:VIe,logLevel:_a,loggerWithTag:F3,suppressLogging:GIe,initLogSettings:B3,logCustomLevel:jIe,closeLogFile:k3,createLogger:eA,logsAtLevel:kIe,getLogFilePath:o(()=>QR,"getLogFilePath"),forComponent:o(e=>Dt.forComponent(e),"forComponent"),setMainLogger:ewe,OUTPUTS:xIe,AuthAuditLog:twe,start:kM,startOnMainThread:kM,errorToString:ZIe};tA.exports.externalLogger={notify(...e){Rs.notify(...e)},fatal(...e){Rs.fatal(...e)},error(...e){Rs.error(...e)},warn(...e){Rs.warn(...e)},info(...e){Rs.info(...e)},debug(...e){Rs.debug(...e)},trace(...e){Rs.trace(...e)},withTag(e){return Rs.withTag(e)}};vIe("logger",tA.exports.externalLogger);function kIe(e){return cr[_a]<=cr[e]}o(kIe,"logsAtLevel");function B3(e=!1){try{if(kE===void 0||e){k3();let t=QIe(),r=N3(["ROOTPATH"]);try{kE=U3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ga.pathExistsSync(Sa(r.ROOTPATH,$r.HDB_CONFIG_FILE)))throw s}let n;if({level:_a,configLogPath:BM,toFile:qE,logConsole:GE,rotation:n,toStream:zR}=JIe(r.ROOTPATH?Sa(r.ROOTPATH,$r.HDB_CONFIG_FILE):kE.get("settings_path")),FM=$r.LOG_NAMES.HDB,QR=Sa(BM,FM),Dt=eA({path:QR,level:_a,stdStreams:zR,rotation:n}),Rs=Dt.forComponent("external"),Rs.tag=null,M3)try{require("segfault-handler").registerHandler(Sa(BM,"crash.log"))}catch{}}}catch(t){if(kE=void 0,t.code===$r.NODE_ERROR_CODES.ENOENT||t.code===$r.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=N3(Object.keys($r.CONFIG_PARAM_MAP),!0);for(let s in r){let i=$r.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===$r.CONFIG_PARAMS.LOGGING_LEVEL){_a=a;continue}i===$r.CONFIG_PARAMS.LOGGING_CONSOLE&&(GE=i)}let{defaultLevel:n}=XIe();qE=!1,zR=!0,_a=_a===void 0?n:_a,Dt=eA({level:_a}),Rs=Dt.forComponent("external"),Rs.tag=null;return}throw qM("Error initializing log settings"),qM(t),t}process.env.DEV_MODE&&(zR=!0),HIe()}o(B3,"initLogSettings");var Lc=!0;function HIe(){qE&&(process.stdout.write=function(e){return typeof e=="string"&&Lc&&GE&&(e=e.toString(),e[e.length-1]===`
|
|
134
|
+
`))}},25).unref()}l.close?.(()=>{if(ni.get(ys.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&vf()==0)try{AQ(QAe(ni.get(ys.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,mR),l.cantCleanupProperly||vi.warn("Had to forcefully exit the thread",mR),process.exit(0)},5e3).unref()})}if(IQ||process.env.DEV_MODE)try{require("inspector").close()}catch(c){vi.info("Could not close debugger",c)}}}).ref();let r;OE&&!tbe&&(r=NQ()),Promise.resolve(r).then(()=>{if(vf()===0)try{JAe(XAe)}catch(n){console.error("Error displaying start-up log",n)}yQ?.postMessage({type:ys.ITC_EVENT_TYPES.CHILD_STARTED})})});return bQ(t),t}o(wQ,"startServers");function NQ(){let e=[];for(let t in Uf){let r=Uf[t];if(t.includes?.("/")&&vf()==0){KAe(t)&&AQ(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),vi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ni.get(ys.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=vf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?OE?n={fd:OE(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:OE?n={fd:OE(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),vi.trace("Listening on port "+t,mR)}).on("error",c)}))}return Promise.all(e)}o(NQ,"listenOnPorts");!OD&&!$Ae?.noServerStart&&wQ();function rbe(e,t){let r=(Vh(),M(ZT)).getComponentName,n;if(t.securePort){RQ(t.securePort,{protocol_name:"TLS",name:r()});let s=jAe("server",t.mtls),i=ni.get("tls");n=WAe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),Uf[t.securePort]=n}return t.port&&(RQ(t.port,{protocol_name:"TCP",name:r()}),n=VAe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Uf[t.port]=n),n}o(rbe,"onSocket")});var rQ={};be(rQ,{startHTTPThreads:()=>sbe,startSocketServer:()=>UD,updateWorkerIdleness:()=>xQ});async function sbe(e=2,t){Nb().catch(r=>Hf.error?.("Error recording hostname for analytics:",r));try{if(t)MD(0,1,!0);else{let{loadRootComponents:r}=pR();if(e===0)return(0,si.setMainIsWorker)(!0),await PD().startServers(),Promise.resolve([]);await r()}UQ();for(let r=0;r<e;r++)MD(r,e);return Promise.all(vQ)}finally{(0,si.threadsHaveStarted)()}}function UQ(){let e=(0,LQ.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),DD=setInterval(()=>{Hf.notify(e)},nbe).unref())}function MD(e,t=1,r){if(LD++,(0,si.startWorker)("server/threads/threadServer.js",{name:IA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===RA.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});vQ.push(s),await s,xf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=ER.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=xf.indexOf(n);a>-1&&xf.splice(a,1)}if(o(i,"removeWorker"),Bf){let a=Bf;Bf=[];for(let c of a)MQ[c.localPort](null,c)}}}),r){let n=setInterval(()=>{vD?vD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,si.shutdownWorkers)(),LD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function UD(e=0,t){if(typeof e=="string")try{(0,_R.existsSync)(e)&&(0,_R.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=ibe:r=obe(t):r=xD;let n=(0,Ff.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=MQ[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),vD=!0,r(i,(a,c)=>{if(!a){if(CQ){let u=i._socket||new Ff.Socket({handle:i,writable:!0,readable:!0});CQ.deliverSocket(u,e,c),u.resume()}else LD>0?(Bf.length===0&&setTimeout(()=>{Bf.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),i.localPort=e,Bf.push(i)):(console.log("start up a dynamic thread to handle request"),MD(0));Xe(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new Ff.Socket({handle:i,writable:!0,readable:!0});lbe(u,a,e)}Xe(!0,"socket-routed")})},Hf.info(`HarperDB ${DQ.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 xD(e,t){let r,n=0;for(let s of xf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=hR)return hR=i,t(r);n=i}hR=0,t(r)}function ibe(e,t){let r={};e.getpeername(r);let n=r.address,s=kf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);xD(e,a=>{kf.set(n,{worker:a,lastUsed:i}),t(a)})}function obe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Ff.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=kf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);xD(n,f=>{kf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function xQ(){hR=0;for(let e of xf)e.expectedIdle=e.recentELU.idle+abe,e.requests=1;xf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function lbe(e,t,r){let n=cbe++;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(),ER.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")),ER.delete(n)),s.event=="destroy"&&(e.destroy(),ER.delete(n))})}var si,Ff,Hf,_R,PQ,LQ,DQ,xf,Bf,MQ,CQ,LD,vQ,DD,nbe,vD,hR,OQ,kf,abe,ER,cbe,_D=ie(()=>{si=I(nt()),Ff=require("net");q();Hf=I(Q()),_R=require("fs");vs();PQ=require("worker_threads"),LQ=I(of()),DQ=I(yt()),xf=[],Bf=[],MQ=[],LD=0,vQ=[];PQ.isMainThread&&(process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,si.onMessageFromWorkers)(e=>{e.type===bu.RESTART&&DD&&(clearInterval(DD),UQ())}));nbe=6e5;o(sbe,"startHTTPThreads");o(UQ,"licenseWarning");o(MD,"startHTTPWorker");o(UD,"startSocketServer");hR=0;o(xD,"findMostIdleWorker");OQ=36e5,kf=new Map;o(ibe,"findByRemoteAddressAffinity");o(obe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of kf)r.lastUsed+OQ<e&&kf.delete(t)},OQ).unref();abe=1e3;o(xQ,"updateWorkerIdleness");(0,si.setMonitorListener)(xQ);ER=new Map,cbe=1;o(lbe,"proxySocket")});var BD={};be(BD,{hdbServer:()=>mbe,start:()=>mbe});async function mbe(e){try{So.default.debug("In Fastify server"+process.cwd()),So.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),So.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=BQ.default.isMaster,await pbe();let t=e.securePort>0;Gf=hbe(t),await Gf.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(Gf.server,e),Gf.server.closeIdleConnections||await Gf.listen({port:0,host:"::"})}catch(r){throw Gf.close(),So.default.error(r),So.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),So.default.fatal(t),process.exit(1)}}async function pbe(){So.default.trace("Configuring HarperDB process."),KQ.default.setSchemaDataToGlobal(),await WQ.default.setUsersWithRolesCache(),await zQ.default.getLicense()}function hbe(e){So.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Ebe(e),r=(0,FQ.default)(t);r.server.headersTimeout=gbe(),r.setErrorHandler(Cc.serverErrorHandler);let n=_be();n&&r.register(kQ.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(qQ.default),r.register(HQ.default),r.register(GQ.default,{root:$Q.default.join(VQ.PACKAGE_ROOT,"studio/build-local")}),wm(r);let s=Nc.default.get(im.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!YQ.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Cc.reqBodyValidationHandler,Cc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Cc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),So.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function Ebe(e){let t=Nc.default.get(LE.OPERATIONSAPI_NETWORK_TIMEOUT),r=Nc.default.get(LE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:dbe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function _be(){let e=Nc.default.get(LE.OPERATIONSAPI_NETWORK_CORS),t=Nc.default.get(LE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===fbe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function gbe(){return Nc.default.get(LE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??ube}var BQ,Nc,So,FQ,kQ,HQ,GQ,qQ,$Q,VQ,KQ,YQ,WQ,zQ,Cc,ube,dbe,fbe,LE,Gf,jQ=ie(()=>{BQ=I(require("cluster")),Nc=I(le());q();So=I(Q()),FQ=I(require("fastify")),kQ=I(require("@fastify/cors")),HQ=I(require("@fastify/compress")),GQ=I(require("@fastify/static")),qQ=I(wN()),$Q=I(require("path")),VQ=I(yt()),KQ=I(ji()),YQ=I(ce()),WQ=I(as()),zQ=I(of());Ur();Cc=I(vy());Do();Nc.default.initSync();ube=6e4,dbe=1024*1024*1024,fbe="TRUE",{CONFIG_PARAMS:LE}=W;o(mbe,"operationsServer");o(pbe,"setUp");o(hbe,"buildServer");o(Ebe,"getServerOptions");o(_be,"getCORSOpts");o(gbe,"getHeaderTimeoutConfig")});var $D={};be($D,{disableNATS:()=>Tbe,publishToStream:()=>TR,setNATSReplicator:()=>FD,setPublishToStream:()=>ybe,setSubscription:()=>qD,start:()=>Sbe});function Sbe(){DE.default.get(x.CLUSTERING_ENABLED)&&Abe()}function Tbe(e=!0){eJ=e}function ybe(e,t){TR=e,qD=t}function Abe(){if(eJ||process.env._DISABLE_NATS)return;let e=ct(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];FD(s,r,i)}}Ol((r,n)=>{FD(r.tableName,r.databaseName,r),n&&rJ(r)}),!QQ&&(QQ=!0)}function FD(e,t,r){if(t==="system"&&bbe.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 Br{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){rJ(i)}static subscribe(){let i=new Xn;return qD(t,e,i),i}static subscribeOnThisThread(i){return i<(DE.default.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Rbe)}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 gR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=tJ;return i}o(n,"getNATSTransaction")}function rJ(e){let t=DE.default.get(x.CLUSTERING_NODENAME);TR(`${HD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,GD.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 JQ,HD,GD,XQ,ZQ,DE,SR,eJ,TR,qD,Rbe,tJ,QQ,bbe,gR,kD,nJ=ie(()=>{Pe();Fa();JQ=I(pr()),HD=I(Nt()),GD=I(Ji());Ou();XQ=I(VN()),ZQ=I(Pn()),DE=I(le());q();SR=I(Q());o(Sbe,"start");o(Tbe,"disableNATS");TR=JQ.publishToStream,qD=XQ.setSubscription;o(ybe,"setPublishToStream");Rbe=2;o(Abe,"assignReplicationSource");bbe=["hdb_job","hdb_raw_analytics","hdb_info"];o(FD,"setNATSReplicator");o(rJ,"publishSchema");gR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=DE.default.get(x.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(SR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(TR(`${HD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,GD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw SR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},kD=class extends gR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,ZQ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};tJ=new kD});async function cJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await VD.get(e,{returnNonexistent:!0});i=new WD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await VD.get(e);a&&a.delete()}i=new RR(e,t)}return n&&(n.id=e,n.user={username:t?.username},ME.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function KD(){return yR++,yR>65500&&(yR=1),yR}function YD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=xs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new fi(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return bt(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var iJ,Oc,oJ,aJ,sJ,VD,ME,yR,RR,WD,lJ=ie(()=>{Pe();ka();iJ=I(Pn()),Oc=I(Q());La();oJ=I(nt()),aJ=I(PD());Ur();ng();sJ=100,VD=Je({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),ME=Je({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,oJ.getWorkerIndex)()===0&&(async()=>{await aJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of ME.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await YD(r,t,r)}catch{(0,Oc.warn)("Failed to publish will",t)}ME.delete(e.id)}})();o(cJ,"getSession");yR=1;o(KD,"getNextMessageId");RR=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Oc.trace)("Resuming subscription from",s,"from",a);let p=xs.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let T=S.split("/"),w;for(let te=0;te<T.length;te++)if(T[te].indexOf("+")>-1)if(T[te]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&w)throw new Error("Filters can not be combined");let L=!0;T[T.length-1]==="#"&&(T.length--,L=!1),w&&(n=o(te=>{let F=te.id;if(!Array.isArray(F))if(F?.indexOf?.("/")>-1)F=F.split("/");else return!1;if(L&&F.length!==T.length)return!1;for(let V=0;V<T.length;V++)if(T[V]!=="+"&&T[V]!==F[V])return!1;return!0},"filter"));let k=T.indexOf("+");m.url="/"+(k>-1?T.slice(0,k):T).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,A=await bt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let T=await g.subscribe(m,S);if(!T)return;if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let w=(async()=>{for await(let L of T)try{let k;if(L.type&&L.type!=="put"&&L.type!=="delete"&&L.type!=="message"&&L.type!=="patch"||n&&!n(L))continue;r?(L.topic=s,k=this.needsAcknowledge(L)):(L.acknowledge?.(),k=KD());let te=L.id;if(Array.isArray(te)&&(te=Ku(te)),te==null&&(te=""),await this.listener(E+"/"+te,L.value,k,t)===!1)break;this.awaitingAcks?.size>sJ?await new Promise(V=>setTimeout(V,this.awaitingAcks.size-sJ)):await new Promise(setImmediate)}catch(k){(0,Oc.warn)(k)}})();return T});if(A)return A.topic=s,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=KD();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 YD(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();bt(r,async()=>{try{if(!t){let n=await ME.get(this.sessionId);n?.doesExist()&&await YD(n,n.data,r)}}finally{await ME.delete(this.sessionId)}}).catch(n=>{(0,Oc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(YD,"publish");WD=class extends RR{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=KD(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Oc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,iJ.getNextMonotonicTime)()),(0,Oc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),VD.put(this.sessionRecord)}}});var zD={};be(zD,{bypassAuth:()=>Ibe,start:()=>Nbe});function Ibe(){EJ=!0}function Nbe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new hJ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),Zt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=dJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",p),u.on("close",h),u.on("error",E=>{Zt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),Zt.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await $d(p,l);if(!E.valid)throw Zt.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,qf.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&bR.notify?.({username:d?.username,status:ci.SUCCESS,type:Na.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,qf.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&bR.error?.({username:h,status:ci.FAILURE,type:Na.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Zt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){a.events.emit("error",p,u),Zt.error?.(p)}else if(l.required)return Zt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&wbe(u.remoteAddress)&&(d=await(0,fJ.getSuperUser)(),Zt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=dJ(u,p=>u.write(p),null,d,a);u.on("data",f),u.on("close",m),u.on("error",p=>{Zt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function dJ(e,t,r,n,s){uJ||(uJ=!0,$m(f=>{AR>0&&f.push({metric:"mqtt-connections",connections:AR,byThread:!0})}));let i;AR++;let a,c={protocolVersion:4},l=(0,IR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){AR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),jr(!1,"connection","mqtt","disconnect"),Zt.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(T){e.close?.(1008,"Unauthorized"),Zt.info?.(T);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){Zt.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Xe(f.length,"bytes-received",E,A(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Ue.getUser(f.username,f.password.toString(),r),(0,qf.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&bR.notify?.({username:n?.username,status:ci.SUCCESS,type:Na.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(X){return(0,qf.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&bR.error?.({username:f.username,status:ci.FAILURE,type:Na.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,X),jr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),jr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let X=e.deserialize||(e.deserialize=Lo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?X(f.will.payload):void 0,delete f.will.payload}a=cJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(X){return Zt.error?.(X),s.events.emit("auth-failed",f,e,X),jr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:X.code||5,returnCode:X.code||128})}s.events.emit("connected",a,e),jr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let T=o(async(X,Y,de,ne)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",X);let ae=X.indexOf("/",1),ye=ae>0?X.slice(0,ae):X;g({cmd:"publish",topic:X,payload:await S(Y),messageId:de||Math.floor(Math.random()*1e8),qos:ne.qos},ye);let Ae=e._socket??e;return Ae.writableNeedDrain?new Promise(He=>Ae.once("drain",He)):!Ae.closed}catch(ae){return Zt.error?.(ae),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(T),a.sessionWasPresent&&await a.resume();break;case"subscribe":let w=[];for(let X of f.subscriptions){let Y;try{let de=await a.addSubscription(X,X.qos>=1);Y=de?de.qos||0:c.protocolVersion<5?128:143}catch(de){s.events.emit("error",de,e,X,a),de.statusCode?de.statusCode===500?Zt.warn?.(de):Zt.info?.(de):Zt.error?.(de),Y=c.protocolVersion<5?128:de.statusCode===403?135:de.statusCode===404?143:128}w.push(Y)}await a.committed,g({cmd:"suback",granted:w,messageId:f.messageId});break;case"unsubscribe":{let X=[];for(let Y of f.unsubscriptions)X.push(a.removeSubscription(Y)?0:17);g({cmd:"unsuback",granted:X,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let L=f.qos===2?"pubrec":"puback",k=e.deserialize||(e.deserialize=Lo(r?.headers.get?.("content-type"))),F=(f.payload?.length||0)>0?k(f.payload):void 0,V;try{V=await a.publish(f,F)}catch(X){s.events.emit("error",X,e,f,a),Zt.warn?.(X),f.qos>0&&g({cmd:L,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:L,messageId:f.messageId,reasonCode:V===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),jr(!0,"connection","mqtt","disconnect"),Zt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(T){s.events.emit("error",T,e,f,a),Zt.error?.(T),g({cmd:"disconnect"})}function g(T,w){let L=(0,IR.generate)(T,c);t(L),Xe(L.length,"bytes-sent",w,A(T),"mqtt")}o(g,"sendPacket");function A(T){return T.qos>0?T.cmd+",qos="+T.qos:T.cmd}o(A,"packetMethodName");function S(T){return Po(T,r)}o(S,"serialize")}),l.on("error",f=>{Zt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var IR,fJ,qf,mJ,pJ,hJ,bR,Zt,EJ,wbe,uJ,AR,_J=ie(()=>{IR=require("mqtt-packet");lJ();fJ=I(as());Do();vs();Ur();qf=I(le());q();mJ=I(Os()),pJ=I(Q()),hJ=require("events");nT();bR=(0,mJ.loggerWithTag)("auth-event"),Zt=(0,pJ.forComponent)("mqtt"),EJ=(0,qf.get)(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(Ibe,"bypassAuth");wbe=o(e=>EJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(Nbe,"start");AR=0;o(dJ,"onSocket")});function wR(e,t){if(t?.includes(".."))throw new jD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var jD,QD=ie(()=>{jD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(wR,"resolveBaseURLPath")});function gJ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var SJ=ie(()=>{o(gJ,"deriveCommonPatternBase")});function NR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var JD=ie(()=>{o(NR,"deriveGlobOptions")});var TJ,XD,vE,yJ=ie(()=>{QD();SJ();JD();TJ=require("micromatch"),XD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},vE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=wR(this.name,this.config.urlPath),this.globOptions=NR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new XD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,TJ.scan)(s).base),this.commonPatternBase=gJ(this.patternBases)}}});function RJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Su(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(RJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(RJ(n,t)){t=t.slice(n.length+1);break}}}return(0,AJ.join)(e.baseURLPath,t)}var AJ,ZD=ie(()=>{AJ=require("node:path");o(RJ,"pathStartsWithBase");o(Su,"deriveURLPath")});function bJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var OR,IJ,wJ,eM,NJ,CJ,CR,OJ=ie(()=>{OR=require("node:events");yJ();IJ=I(Q()),wJ=I(require("chokidar")),eM=require("node:path"),NJ=require("node:fs/promises");ZD();CJ=require("micromatch"),CR=class extends OR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new vE(t,r,bJ(n)),this.#r=s||IJ.default.loggerWithTag(t),this.ready=(0,OR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,CJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,eM.join)(this.directory,r);switch(t){case"add":case"change":{let i=Su(this.#e,r,"file");(0,NJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=Su(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=Su(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,eM.join)(this.#e.directory,r));return this.#t=wJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new vE(this.name,this.directory,bJ(t)),this.#a()}};o(bJ,"castConfig")});var PR,tM=ie(()=>{PR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var DR,PJ,LJ,DJ,MJ,vJ,rM,nM,sM,iM,oM,LR,UJ=ie(()=>{DR=require("events"),PJ=I(require("yaml")),LJ=I(require("chokidar")),DJ=require("node:fs/promises"),MJ=require("util"),vJ=I(Q());tM();rM=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},nM=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},sM=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},iM=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},oM=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},LR=class extends DR.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||vJ.default.loggerWithTag(t),this.ready=(0,DR.once)(this,"ready"),this.#t=LJ.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,DJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=PJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new rM(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=PR,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,MJ.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new nM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new sM(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new iM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new oM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var UR,xJ,MR,vR,BJ=ie(()=>{UR=require("node:events");OJ();UJ();xJ=I(Q());SP();MR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},vR=class extends UR.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,xJ.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,UR.once)(this,"ready"),this.options=new LR(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new CR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new MR);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new MR);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),UW()}}});function Tu(e){return typeof e=="string"&&e.trim()!==""}function aM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>Tu(t))}function GJ(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function Cbe(e){e.config.root&&UE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new pM(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(GJ(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,xE.join)(e.directory,i);xR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function qJ(e){let t=!1;if(t=await Cbe(e),t)return t;let r=await(0,FJ.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,xE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Su(e,n.path,"directory");xR.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=Su(e,n.path,"file"),a=await(0,kJ.readFile)(s);xR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else UE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var xR,FJ,UE,xE,kJ,HJ,BR,Ui,cM,lM,uM,dM,fM,mM,pM,hM,EM,$J=ie(()=>{xR=require("node:worker_threads"),FJ=I(require("fast-glob")),UE=I(Q());QD();JD();xE=require("node:path"),kJ=require("node:fs/promises");ZD();HJ=require("micromatch"),BR=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!Tu(this.config.files)&&!aM(this.config.files)&&!GJ(this.config.files))throw new cM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!aM(this.config.files.source)&&!Tu(this.config.files.source))throw new lM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new uM(this);if(this.config.files.ignore!==void 0&&!aM(this.config.files.ignore)&&!Tu(this.config.files.ignore))throw new dM(this)}if(this.config.root!==void 0&&!Tu(this.config.root))throw new mM(this);if(this.config.path!==void 0&&!Tu(this.config.path))throw new hM(this);if(this.config.path&&(UE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!Tu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new EM(this);this.globOptions=NR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new fM(this,r);return r.startsWith("/")&&(UE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,HJ.scan)(r).base),this.baseURLPath=wR(this.name,this.config.urlPath)}},Ui=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,xE.basename)(r.directory)}) ${t}`)}},cM=class extends Ui{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},lM=class extends Ui{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},uM=class extends Ui{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},dM=class extends Ui{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},fM=class extends Ui{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},mM=class extends Ui{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},pM=class extends Ui{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},hM=class extends Ui{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},EM=class extends Ui{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(Tu,"isNonEmptyString");o(aM,"isArrayOfNonEmptyStrings");o(GJ,"isObject");o(Cbe,"handleRoots");o(qJ,"processResourceExtensionComponent")});var ZT={};be(ZT,{getComponentName:()=>fR,loadComponent:()=>GR,loadComponentDirectories:()=>YJ,setErrorReporter:()=>Pbe});function YJ(e,t){t&&(gM=t),e&&(RM=e);let r=[];if((0,Lt.existsSync)(_M)){let s=(0,Lt.readdirSync)(_M,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,on.join)(_M,a);r.push(GR(c,gM,gA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(GR(n,gM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{KJ=!0})}function Pbe(e){kR=e}function Lbe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{ia.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(ia.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Lt.rmSync)(t,{recursive:!0,force:!0}),(0,Lt.existsSync)((0,on.join)(e,"node_modules"))||(0,Lt.mkdirSync)((0,on.join)(e,"node_modules")),(0,Lt.symlinkSync)(bM.PACKAGE_ROOT,t,"dir"),r()}finally{ia.primaryStore.unlock(e,0)}})}function WJ(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return ia.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(WJ(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{ia.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function GR(e,t,r,n,s,i){let a=(0,Lt.realpathSync)(e);if(FR.has(a))return FR.get(a);FR.set(a,!0),s&&(RM=s);try{let c,l=(0,on.join)(e,"harperdb-config.yaml");(0,Lt.existsSync)(l)?c=n?(0,qR.getConfigObj)():(0,TM.parseDocument)((0,Lt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Lt.existsSync)(l=(0,on.join)(e,"config.yaml"))?c=(0,TM.parseDocument)((0,Lt.readFileSync)(l,"utf8")).toJSON():c=PR;try{let m=(0,on.join)(e,"node_modules","harperdb");(n||((0,Lt.existsSync)(m)||!e.startsWith((0,yM.getHdbBasePath)()))&&(!(0,Lt.existsSync)(m)||(0,Lt.realpathSync)(bM.PACKAGE_ROOT)!==(0,Lt.realpathSync)(m)))&&await Lbe(e,m)}catch(m){Ea.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Ea.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=HR,d={};for(let m in c){let p=`${(0,on.basename)(e)}.${m}`;HR=m;let h=c[m];if(!h)continue;let E,g=h.package;try{if(g){let L=e,k;for(;!(0,Lt.existsSync)(k=(0,on.join)(L,"node_modules",m));)if(L=(0,on.dirname)(L),L.length<(0,yM.getHdbBasePath)().length){k=null;break}if(k)E=await GR(k,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=Obe[m];if(!E)continue;Yo.loading(p);let A=o(L=>(L.origin=r,Je(L)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,T=S?.securePort||S?.https&&S.port,w=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let L=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw Yo.failed(p,L,`Component '${p}' failed to load`),L}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Ea.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let L=new vR(m,e,l,t,Ue);await WJ(L,E),Yo.loaded(p,`Component '${p}' loaded successfully`);continue}if(SM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:A,port:w,securePort:T,resources:t,...h})||E,n&&S))for(let L of[w,T])try{if(+L&&!VJ.includes(L)){let k=AM.get(x.HTTP_SESSIONAFFINITY);k&&Ea.default.warn("Session affinity is not recommended and may cause memory leaks"),(k||!mS)&&(VJ.push(L),UD(L,k))}}catch(k){console.error("Error listening on socket",L,k,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:A,port:w,securePort:T,resources:t,...h})||E),RM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let L=new BR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await qJ(L)}Yo.loaded(p,`Component '${p}' loaded successfully`)}catch(A){A.message=`Could not load component '${m}' for application '${(0,on.basename)(e)}' due to: ${A.message}`,kR?.(A),((0,BE.getWorkerIndex)()===0?console:Ea.default).error(A),t.set(h.path||"/",new cl(A),null,!0),Yo.failed(p,A,`Could not load component '${p}'`)}}if(HR=u,SM.isMainThread&&!KJ&&i&&(0,BE.watchDir)(e,async()=>YJ()),c.extensionModule||c.pluginModule){let m=await uS((0,on.join)(e,c.extensionModule||c.pluginModule));return FR.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;kR?.(new Error(m)),((0,BE.getWorkerIndex)()===0?console:Ea.default).error(m),Yo.failed((0,on.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Ea.default.warn(`Component ${m} from (${(0,on.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,kR?.(c),t.set("",new cl(c))}}var Lt,on,SM,TM,AM,bM,Ea,BE,yM,qR,_M,RM,KJ,gM,Obe,VJ,FR,kR,HR,fR,Vh=ie(()=>{Lt=require("node:fs"),on=require("node:path"),SM=require("node:worker_threads"),TM=require("yaml"),AM=I(le()),bM=I(yt());q();wG();xG();QG();rq();nq();gq();b2();I2();N2();Ea=I(Q());M2();BE=I(nt());hN();Ur();Pe();_D();yM=I(le());jQ();WT();nJ();us();_J();qR=I(Rt());Vp();$b();BJ();$J();CD();jh();Ip();tM();_M=(0,qR.resolvePath)(AM.get(x.COMPONENTSROOT)),RM=new Map;o(YJ,"loadComponentDirectories");Obe={REST:hS,rest:hS,graphql:aN,graphqlSchema:iN,roles:pN,jsResource:EN,fastifyRoutes:DL,login:gN,static:vL,operationsApi:BD,customFunctions:{},http:dR,clustering:$D,replication:Qo,authentication:Bh,mqtt:zD,loadEnv:UL,logging:Ea.default,dataLoader:xL},VJ=[],FR=new Map;o(Pbe,"setErrorReporter");fR=o(()=>HR,"getComponentName");o(Lbe,"symlinkHarperModule");o(WJ,"sequentiallyHandleApplication");o(GR,"loadComponent")});var pR=v((Dqe,jJ)=>{var{isMainThread:zJ}=require("worker_threads"),{getTables:Dbe,getDatabases:Pqe,table:Lqe}=(Pe(),M(pt)),{loadComponentDirectories:Mbe,loadComponent:vbe}=(Vh(),M(ZT)),{resetResources:Ube}=(ka(),M(Vb)),xbe=sP(),Bbe=Rt(),{dirname:Fbe}=require("path"),{getConnection:kbe}=pr(),Hbe=le(),{CONFIG_PARAMS:Gbe}=(q(),M(W)),{loadCertificates:qbe}=fs(),IM=new Map;async function $be(e=!1){!zJ&&Hbe.get(Gbe.CLUSTERING_ENABLED)&&kbe();try{zJ&&await xbe()}catch(n){console.error(n)}let t=Ube();Dbe(),t.isWorker=e,await qbe(),await vbe(Fbe(Bbe.getConfigFilePath()),t,"hdb",!0,IM),await Mbe(IM,t);let r=[];for(let[n]of IM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o($be,"loadRootComponents");jJ.exports.loadRootComponents=$be});var nt=v((vqe,Bi)=>{"use strict";BA();var{Worker:Vbe,MessageChannel:Kbe,parentPort:To,isMainThread:PM,threadId:Ybe,workerData:yo}=require("worker_threads"),{PACKAGE_ROOT:Wbe}=yt(),{join:ZJ,isAbsolute:zbe,extname:jbe}=require("path"),{server:e3}=(Ur(),M(cm)),{watch:Qbe,readdir:Jbe}=require("fs/promises"),{totalmem:QJ}=require("os"),$f=(q(),M(W)),t3=le(),xi=Q(),{randomBytes:Xbe}=require("crypto"),{_assignPackageExport:Zbe}=li(),JJ=1024*1024,Pc=[],ii=[],eIe=50,LM=1e4,tIe="restart",r3="request_thread_info",n3="resource_report",s3="thread_info",i3="added-port",rIe="ack",wM;Zbe("threads",ii);Bi.exports={startWorker:NM,restartWorkers:MM,shutdownWorkers:aIe,workers:Pc,setMonitorListener:hIe,onMessageFromWorkers:cIe,onMessageByType:f3,broadcast:uIe,broadcastWithAcknowledgement:fIe,setChildListenerByType:oIe,getWorkerIndex:o3,getWorkerCount:a3,getTicketKeys:l3,setMainIsWorker:sIe,setTerminateTimeout:nIe,restartNumber:yo?.restartNumber||1};ii.onMessageByType=f3;ii.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ii.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Bi.exports.whenThreadsStarted=new Promise(e=>{Bi.exports.threadsHaveStarted=e});var DM;function nIe(e){LM=e}o(nIe,"setTerminateTimeout");function o3(){return yo?yo.workerIndex:DM?0:void 0}o(o3,"getWorkerIndex");function a3(){return yo?yo.workerCount:DM?1:void 0}o(a3,"getWorkerCount");function sIe(e){DM=e,Bi.exports.threadsHaveStarted()}o(sIe,"setMainIsWorker");var c3=1,$R;function l3(){return $R||($R=PM?Xbe(48):yo.ticketKeys,$R)}o(l3,"getTicketKeys");Object.defineProperty(e3,"workerIndex",{get(){return o3()}});Object.defineProperty(e3,"workerCount",{get(){return a3()}});var u3={[r3](e,t){mIe(t)},[n3](e,t){pIe(t,e)}};function NM(e,t={}){let r=process.constrainedMemory?.()||QJ();r=Math.min(r,QJ(),2e4*JJ);let n=t3.get($f.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/JJ/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of ii){let u=new Kbe;u.existingPort=l,i.push(u),a.push(u.port2)}jbe(e)||(e+=".js");let c=new Vbe(zbe(e)?e:ZJ(Wbe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:c3=t.threadCount,name:t.name,restartNumber:Bi.exports.restartNumber,ticketKeys:l3()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:i3,port:l,threadId:c.threadId},[l]);return KR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>NM(e,t),c.on("error",l=>{xi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Pc.splice(Pc.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<eIe?(t.unexpectedRestarts=c.unexpectedRestarts+1,NM(e,t)):xi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{u3[l.type]?.(l,c)}),Pc.push(c),_Ie(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(NM,"startWorker");var iIe=[$f.THREAD_TYPES.HTTP];async function MM(e=null,t=Math.max(c3>3,1),r=!0){if(PM){try{process.chdir(process.cwd())}catch(a){xi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=pR();await a()}Bi.exports.restartNumber++,t<1&&(t=t*Pc.length);let n=[],s=[];for(let a of Pc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;xi.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Bi.exports.restartNumber,type:$f.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=iIe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{xi.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},LM*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===$f.ITC_EVENT_TYPES.CHILD_STARTED&&(xi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");xi.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=df();r&&(e==="http"||!e)&&t3.get($f.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else To.postMessage({type:tIe,workerType:e})}o(MM,"restartWorkers");function oIe(e,t){u3[e]=t}o(oIe,"setChildListenerByType");function aIe(e){return MM(e,1/0,!1)}o(aIe,"shutdownWorkers");var d3=[];function cIe(e){d3.push(e)}o(cIe,"onMessageFromWorkers");var CM=new Map;function f3(e,t){let r=CM.get(e);r||CM.set(e,r=[]),r.push(t)}o(f3,"onMessageByType");var lIe=10;async function uIe(e,t){let r=0;for(let n of ii)try{n.postMessage(e),r++>lIe&&(r=0,await new Promise(setImmediate))}catch(s){xi.error("Unable to send message to worker",s)}t&&p3(e,null)}o(uIe,"broadcast");var VR=new Map,dIe=1;function fIe(e){return new Promise(t=>{let r=0;for(let n of ii)try{let s=dIe++,i=o(()=>{VR.delete(s),--r===0&&t(),n!==To&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,VR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of VR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){xi.error("Unable to send message to worker",s)}r===0&&t()})}o(fIe,"broadcastWithAcknowledgement");function mIe(e){e.postMessage({type:s3,workers:m3()})}o(mIe,"sendThreadInfo");function m3(){let e=Date.now();return Pc.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(m3,"getChildWorkerInfo");function pIe(e,t){e.resources=t,e.resources.updated=Date.now()}o(pIe,"recordResourceReport");var OM;function hIe(e){OM=e}o(hIe,"setMonitorListener");var EIe=1e3,XJ=!1;function _Ie(){XJ||(XJ=!0,setInterval(()=>{for(let e of Pc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}OM&&OM()},EIe).unref())}o(_Ie,"startMonitoring");var gIe=1e3;if(To&&yo?.addPorts){KR(To);for(let e=0,t=yo.addPorts.length;e<t;e++){let r=yo.addPorts[e];r.threadId=yo.addThreadIds[e],KR(r)}setInterval(()=>{let e=process.memoryUsage();To.postMessage({type:n3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},gIe).unref(),wM=o(()=>new Promise((e,t)=>{To.on("message",r),To.postMessage({type:r3});function r(n){n.type===s3&&(To.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else wM=m3;Bi.exports.getThreadInfo=wM;function KR(e,t){ii.push(e),e.on("message",r=>{if(r.type===i3)r.port.threadId=r.threadId,KR(r.port);else if(r.type===rIe){let n=VR.get(r.id);n&&n()}else p3(r,e)}).on("close",()=>{ii.splice(ii.indexOf(e),1)}).on("exit",()=>{ii.splice(ii.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(KR,"addPort");function p3(e,t){for(let n of d3)n(e,t);let r=CM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){xi.error(s)}}o(p3,"notifyMessageListeners");if(PM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await Jbe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(ZJ(s,a.name));try{for await(let{filename:a}of Qbe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await MM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Bi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else To.on("message",async e=>{let{type:t}=e;t===$f.ITC_EVENT_TYPES.SHUTDOWN&&(Bi.exports.restartNumber=e.restartNumber,To.unref(),setTimeout(()=>{xi.warn("Thread did not voluntarily terminate",Ybe),process.exit(0)},LM).unref())})});var T3=v((Fqe,S3)=>{"use strict";var{promises:Vf,createReadStream:SIe,createWriteStream:TIe}=require("fs"),{createGzip:yIe}=require("zlib"),{promisify:RIe}=require("util"),{pipeline:AIe}=require("stream"),bIe=RIe(AIe),UM=require("path"),g3=le();g3.initSync();var YR=Q(),{CONFIG_PARAMS:IIe,ITC_EVENT_TYPES:xqe}=(q(),M(W)),{onMessageFromWorkers:Bqe}=nt(),{convertToMS:h3}=ce(),{onStorageReclamation:wIe}=(x_(),M(rx)),NIe=6e4,CIe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",OIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",vM,E3;S3.exports=PIe;function PIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(wIe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(CIe);if(!i)throw new Error(OIe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=h3(r));let d;return vM=Date.now(),YR.trace("Log rotate enabled, maxSize:",t,"interval:",r),E3=setInterval(async()=>{if(l){let f;f=await Vf.stat(e.path),f.size>=l&&(d=await _3(e.path,i))}if(u&&Date.now()-vM>=u&&(d=await _3(e.path,i),vM=Date.now()),n||c){let f=h3(n??"1M")/(1+c);c=0;let m=await Vf.readdir(i);for(let p of m)try{let h=await Vf.stat(UM.join(i,p));Date.now()-h.mtimeMs>f&&await Vf.unlink(UM.join(i,p))}catch(h){YR.error("Error trying to remove log",p,h)}}},a??NIe).unref(),{end(){clearInterval(E3)},getLastRotatedLogPath(){return d}}}o(PIe,"logRotator");async function _3(e,t){let r=g3.get(IIe.LOGGING_ROTATION_COMPRESS),n=UM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Vf.rename(e,n),r&&(e=n,n+=".gz",await bIe(SIe(e),yIe(),TIe(n)),await Vf.unlink(e)),YR.closeLogFile(),YR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(_3,"moveLogFile")});var I3={};be(I3,{RootConfigWatcher:()=>xM});var y3,R3,A3,WR,b3,xM,w3=ie(()=>{y3=I(require("chokidar")),R3=require("node:fs/promises"),A3=I(Rt()),WR=require("node:stream"),b3=require("yaml"),xM=class extends WR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,A3.getConfigFilePath)(),this.ready=(0,WR.once)(this,"ready"),this.#t=y3.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,R3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,b3.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=v(($qe,tA)=>{"use strict";var ga=require("fs-extra"),{workerData:LIe,threadId:DIe,isMainThread:M3}=require("worker_threads"),HE=require("path"),v3=require("yaml"),U3=require("properties-reader"),$r=(q(),M(W)),N3=$c(),MIe=require("os"),{PACKAGE_ROOT:$M}=yt(),{_assignPackageExport:vIe}=li(),{Console:UIe}=require("console"),C3=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),O3=new Map,{join:Sa}=HE,P3=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},xIe={STDOUT:"stdOut",STDERR:"stdErr"},qqe=Sa($M,"logs"),BIe=Sa($M,"config/yaml/",$r.HDB_DEFAULT_CONFIG_FILE),FIe=1e4,GE,qE,zR,_a,FM,BM,QR,Dt,Rs,JR,XR,Kf,kE,FE;function jR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=HE.dirname(n)):t.root?n=Sa(t.root,FM):(n=Dt.path,t.root||(t.root=HE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Dt?.level??cr.info,x3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Dt.path===e.path&&r)}o(jR,"updateLogger");function x3(e){let t=e.conditional??(e.conditional={});t.notify=cr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=cr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=cr.error>=e.level?e.error.bind(e):void 0,t.warn=cr.warn>=e.level?e.warn.bind(e):void 0,t.info=cr.info>=e.level?e.info.bind(e):void 0,t.debug=cr.debug>=e.level?e.debug.bind(e):void 0,t.trace=cr.trace>=e.level?e.trace.bind(e):void 0}o(x3,"updateConditional");async function kM(){FE||(FE=new rwe,await FE.ready,FE.on("change",kM));let e=FE.config,t=e.logging??{};jR(Dt,t),QR=Dt.path,GE=t.console??!1,t.external&&jR(Rs,t.external);for(let r in e){let n=e[r];n.logging?jR(Dt.forComponent(r),n.logging,r):Dt.hasComponent(r)&&jR(Dt.forComponent(r),t,r)}}o(kM,"updateLogSettings");var HM=class extends UIe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){In="trace",this.level<=cr.trace&&super.info(...t),In="info"}debug(...t){In="debug",this.level<=cr.debug&&super.info(...t),In="info"}info(...t){In="info",this.level<=cr.info&&super.info(...t),In="info"}warn(...t){In="warn",this.level<=cr.warn&&super.warn(...t),In="info"}error(...t){In="error",this.level<=cr.error&&super.error(...t),In="info"}fatal(...t){Kf=!0;try{In="fatal",this.level<=cr.fatal&&super.error(...t),In="info"}finally{Kf=!1}}notify(...t){Kf=!0;try{In="notify",this.level<=cr.notify&&super.info(...t),In="info"}finally{Kf=!1}}withTag(t){return F3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};kE===void 0&&B3();tA.exports={notify:YIe,fatal:WIe,error:qM,warn:zIe,info:$Ie,debug:KIe,trace:VIe,logLevel:_a,loggerWithTag:F3,suppressLogging:GIe,initLogSettings:B3,logCustomLevel:jIe,closeLogFile:k3,createLogger:eA,logsAtLevel:kIe,getLogFilePath:o(()=>QR,"getLogFilePath"),forComponent:o(e=>Dt.forComponent(e),"forComponent"),setMainLogger:ewe,OUTPUTS:xIe,AuthAuditLog:twe,start:kM,startOnMainThread:kM,errorToString:ZIe};tA.exports.externalLogger={notify(...e){Rs.notify(...e)},fatal(...e){Rs.fatal(...e)},error(...e){Rs.error(...e)},warn(...e){Rs.warn(...e)},info(...e){Rs.info(...e)},debug(...e){Rs.debug(...e)},trace(...e){Rs.trace(...e)},withTag(e){return Rs.withTag(e)}};vIe("logger",tA.exports.externalLogger);function kIe(e){return cr[_a]<=cr[e]}o(kIe,"logsAtLevel");function B3(e=!1){try{if(kE===void 0||e){k3();let t=QIe(),r=N3(["ROOTPATH"]);try{kE=U3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ga.pathExistsSync(Sa(r.ROOTPATH,$r.HDB_CONFIG_FILE)))throw s}let n;if({level:_a,configLogPath:BM,toFile:qE,logConsole:GE,rotation:n,toStream:zR}=JIe(r.ROOTPATH?Sa(r.ROOTPATH,$r.HDB_CONFIG_FILE):kE.get("settings_path")),FM=$r.LOG_NAMES.HDB,QR=Sa(BM,FM),Dt=eA({path:QR,level:_a,stdStreams:zR,rotation:n}),Rs=Dt.forComponent("external"),Rs.tag=null,M3)try{require("segfault-handler").registerHandler(Sa(BM,"crash.log"))}catch{}}}catch(t){if(kE=void 0,t.code===$r.NODE_ERROR_CODES.ENOENT||t.code===$r.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=N3(Object.keys($r.CONFIG_PARAM_MAP),!0);for(let s in r){let i=$r.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===$r.CONFIG_PARAMS.LOGGING_LEVEL){_a=a;continue}i===$r.CONFIG_PARAMS.LOGGING_CONSOLE&&(GE=i)}let{defaultLevel:n}=XIe();qE=!1,zR=!0,_a=_a===void 0?n:_a,Dt=eA({level:_a}),Rs=Dt.forComponent("external"),Rs.tag=null;return}throw qM("Error initializing log settings"),qM(t),t}process.env.DEV_MODE&&(zR=!0),HIe()}o(B3,"initLogSettings");var Lc=!0;function HIe(){qE&&(process.stdout.write=function(e){return typeof e=="string"&&Lc&&GE&&(e=e.toString(),e[e.length-1]===`
|
|
135
135
|
`&&(e=e.slice(0,-1)),XR(e)),C3.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Lc&&GE&&(e[e.length-1]===`
|
|
136
|
-
`&&(e=e.slice(0,-1)),XR(e)),C3.apply(process.stderr,arguments)})}o(HIe,"stdioLogging");function F3(e,t,r=Dt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=cr[i]?function(...a){ZR=e;try{return s.call(r,...a)}finally{ZR=void 0}}:null}o(n,"logWithTag")}o(F3,"loggerWithTag");function GIe(e){try{Lc=!1,e()}finally{Lc=!0}}o(GIe,"suppressLogging");var qIe=LIe?.name?.replace(/ /g,"-")||"main",
|
|
136
|
+
`&&(e=e.slice(0,-1)),XR(e)),C3.apply(process.stderr,arguments)})}o(HIe,"stdioLogging");function F3(e,t,r=Dt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=cr[i]?function(...a){ZR=e;try{return s.call(r,...a)}finally{ZR=void 0}}:null}o(n,"logWithTag")}o(F3,"loggerWithTag");function GIe(e){try{Lc=!1,e()}finally{Lc=!0}}o(GIe,"suppressLogging");var qIe=LIe?.name?.replace(/ /g,"-")||"main",In="info",GM,ZR;function eA({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=cr[t],l;function u(p){if(qE)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),Lc=!1;try{process.stdout.write(p)}finally{Lc=!0}}else f(p);else r&&process.stdout.write(p)}o(u,"logStdOut");function d(p){if(qE){if(f(p),r){Lc=!1;try{process.stderr.write(p)}finally{Lc=!0}}}else r&&process.stderr.write(p)}o(d,"logStdErr");let f=e&&D3(e,n,s);function m(p){return{write(h){let E=[In];E.unshift(GM||qIe+"/"+DIe),ZR&&E.push(ZR),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(o(m,"logPrepend"),s&&(XR=f),l=new HM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),x3(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=D3(e,l.rotation,s),s&&(XR=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=eA({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}o(eA,"createLogger");var L3=100;function D3(e,t,r){let n=O3.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,O3.set(e,n)),M3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=T3();try{n.rotator=h({logger:n,...t})}catch(E){n("Error initializing log rotator",E)}},100));let u=0;return n;function d(h){u++;let E=`${new Date().toISOString()} ${h}${h.endsWith(`
|
|
137
137
|
`)?"":`
|
|
138
138
|
`}`;c?(c.length<P3?c.push(E):c.length===P3&&c.push(`Maximum log buffer rate reached, logs will be throttled
|
|
139
|
-
`),Kf&&(clearTimeout(a),f())):Kf||l<performance.now()+L3?f(E):(l=Math.min(l,performance.now()+L3),c=[E],a=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();ga.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{ga.closeSync(s)}catch{}s=null,r&&(JR=null)}function p(h){if(!s){try{s=ga.openSync(e,"a"),r&&(JR=s)}catch(E){if(E.code==="ENOENT"&&!h)return ga.mkdirpSync(HE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},FIe).unref()}}}o(D3,"getFileLogger");function $Ie(...e){Dt.info(...e)}o($Ie,"info");function VIe(...e){Dt.trace(...e)}o(VIe,"trace");function qM(...e){Dt.error(...e)}o(qM,"error");function KIe(...e){Dt.debug(...e)}o(KIe,"debug");function YIe(...e){Dt.notify(...e)}o(YIe,"notify");function WIe(...e){Dt.fatal(...e)}o(WIe,"fatal");function zIe(...e){Dt.warn(...e)}o(zIe,"warn");function jIe(e,t,r,...n){GM=r.service_name;try{Dt[e](...n)}finally{GM=void 0}}o(jIe,"logCustomLevel");function QIe(){let e;try{e=MIe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Sa(e,$r.HDB_HOME_DIR_NAME,$r.BOOT_PROPS_FILE_NAME);return ga.existsSync(t)||(t=Sa($M,"utility/hdb_boot_properties.file")),t}o(QIe,"getPropsFilePath");function JIe(e){try{if(e.includes("config/settings.js")){let l=U3(e);return{level:l.get($r.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:HE.dirname(l.get($r.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=v3.parseDocument(ga.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===$r.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(JIe,"getLogConfig");function XIe(){try{let e=v3.parseDocument(ga.readFileSync(BIe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(XIe,"getDefaultConfig");function ZIe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(ZIe,"errorToString");function ewe(e){Dt=e}o(ewe,"setMainLogger");function k3(){try{ga.closeSync(JR)}catch{}JR=null}o(k3,"closeLogFile");function twe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(twe,"AuthAuditLog");var{RootConfigWatcher:rwe}=(w3(),M(I3))});var ce=v(Re=>{"use strict";var Dc=require("path"),V3=require("fs-extra"),Wn=Q(),H3=require("fs-extra"),rA=require("os"),nwe=require("net"),swe=require("recursive-iterator"),Dr=(q(),M(W)),{PACKAGE_ROOT:iwe}=yt(),owe=dD(),G3=require("papaparse"),nA=require("moment"),{inspect:awe}=require("util"),q3=require("is-number"),cwe=require("minimist"),lwe=require("https"),uwe=require("http"),dwe=/^((\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)))$/,K3=require("util").promisify(setTimeout),fwe=100,mwe=5,pwe="",hwe=4,$3={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Re.isEmpty=As;Re.isEmptyOrZeroLength=Ro;Re.arrayHasEmptyValues=gwe;Re.arrayHasEmptyOrZeroLengthValues=Swe;Re.buildFolderPath=Twe;Re.isBoolean=Y3;Re.errorizeMessage=Ewe;Re.stripFileExtension=Rwe;Re.autoCast=Awe;Re.autoCastJSON=W3;Re.autoCastJSONDeep=KM;Re.removeDir=bwe;Re.compareVersions=Iwe;Re.isCompatibleDataVersion=wwe;Re.escapeRawValue=Nwe;Re.unescapeValue=Cwe;Re.stringifyProps=Owe;Re.timeoutPromise=Lwe;Re.isClusterOperation=Mwe;Re.getClusterUser=Uwe;Re.checkGlobalSchemaTable=vwe;Re.getHomeDir=j3;Re.getPropsFilePath=Pwe;Re.promisifyPapaParse=xwe;Re.removeBOM=Q3;Re.createEventPromise=Bwe;Re.checkProcessRunning=Fwe;Re.checkSchemaTableExist=kwe;Re.checkSchemaExists=J3;Re.checkTableExists=X3;Re.getStartOfTomorrowInSeconds=Hwe;Re.getLimitKey=Gwe;Re.isObject=ywe;Re.isNotEmptyAndHasValue=_we;Re.autoCasterIsNumberCheck=z3;Re.backtickASTSchemaItems=qwe;Re.isPortTaken=Dwe;Re.createForkArgs=$we;Re.autoCastBoolean=Vwe;Re.asyncSetTimeout=K3;Re.getTableHashAttribute=Kwe;Re.doesSchemaExist=Ywe;Re.doesTableExist=Wwe;Re.stringifyObj=zwe;Re.ms_to_time=jwe;Re.changeExtension=Qwe;Re.getEnvCliRootPath=YM;Re.noBootFile=Jwe;Re.httpRequest=Xwe;Re.transformReq=Zwe;Re.convertToMS=eNe;Re.PACKAGE_ROOT=iwe;function Ewe(e){return e instanceof Error?e:new Error(e)}o(Ewe,"errorizeMessage");function As(e){return e==null}o(As,"isEmpty");function _we(e){return!As(e)&&(e||e===0||e===""||Y3(e))}o(_we,"isNotEmptyAndHasValue");function Ro(e){return As(e)||e.length===0||e.size===0}o(Ro,"isEmptyOrZeroLength");function gwe(e){if(As(e))return!0;for(let t=0;t<e.length;t++)if(As(e[t]))return!0;return!1}o(gwe,"arrayHasEmptyValues");function Swe(e){if(Ro(e))return!0;for(let t=0;t<e.length;t++)if(Ro(e[t]))return!0;return!1}o(Swe,"arrayHasEmptyOrZeroLengthValues");function Twe(...e){try{return e.join(Dc.sep)}catch{console.error(e)}}o(Twe,"buildFolderPath");function Y3(e){return As(e)?!1:e===!0||e===!1}o(Y3,"isBoolean");function ywe(e){return As(e)?!1:typeof e=="object"}o(ywe,"isObject");function Rwe(e){return Ro(e)?pwe:e.slice(0,-hwe)}o(Rwe,"stripFileExtension");function Awe(e){return As(e)||e===""||typeof e!="string"?e:$3[e]!==void 0?$3[e]:z3(e)===!0?Number(e):dwe.test(e)?new Date(e):e}o(Awe,"autoCast");function W3(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(W3,"autoCastJSON");function KM(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=KM(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=KM(r);n!==r&&(e[t]=n)}return e}else return W3(e)}o(KM,"autoCastJSONDeep");function z3(e){if(e.startsWith("0.")&&q3(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&q3(e))}o(z3,"autoCasterIsNumberCheck");async function bwe(e){if(Ro(e))throw new Error(`Directory path: ${e} does not exist`);try{await H3.emptyDir(e),await H3.remove(e)}catch(t){throw Wn.error(`Error removing files in ${e} -- ${t}`),t}}o(bwe,"removeDir");function Iwe(e,t){if(Ro(e)){Wn.info("Invalid current version sent as parameter.");return}if(Ro(t)){Wn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(Iwe,"compareVersions");function wwe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(wwe,"isCompatibleDataVersion");function Nwe(e){if(As(e))return e;let t=String(e);return t==="."?Dr.UNICODE_PERIOD:t===".."?Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD:t.replace(Dr.FORWARD_SLASH_REGEX,Dr.UNICODE_FORWARD_SLASH)}o(Nwe,"escapeRawValue");function Cwe(e){if(As(e))return e;let t=String(e);return t===Dr.UNICODE_PERIOD?".":t===Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD?"..":String(e).replace(Dr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(Cwe,"unescapeValue");function Owe(e,t){if(As(e))return Wn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+rA.EOL}!Ro(n)&&n[0]===";"?r+=" "+n+s+rA.EOL:Ro(n)||(r+=n+"="+s+rA.EOL)}catch{Wn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(Owe,"stringifyProps");function j3(){let e;try{e=rA.homedir()}catch{e=process.env.HOME}return e}o(j3,"getHomeDir");function Pwe(){let e=Dc.join(j3(),Dr.HDB_HOME_DIR_NAME,Dr.BOOT_PROPS_FILE_NAME);return V3.existsSync(e)||(e=Dc.join(__dirname,"../","hdb_boot_properties.file")),e}o(Pwe,"getPropsFilePath");function Lwe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(Lwe,"timeoutPromise");async function Dwe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=nwe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(Dwe,"isPortTaken");function Mwe(e){try{return Dr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Wn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(Mwe,"isClusterOperation");function vwe(e,t){let r=(Pe(),M(pt)).getDatabases();if(!r[e])return sA.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return sA.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(vwe,"checkGlobalSchemaTable");function Uwe(e,t){if(As(t)){Wn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(As(e)||Ro(e)){Wn.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){Wn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Wn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(Uwe,"getClusterUser");function xwe(){G3.parsePromise=function(e,t,r){return new Promise(function(n,s){G3.parse(e,{header:!0,transformHeader:Q3,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(xwe,"promisifyPapaParse");function Q3(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(Q3,"removeBOM");function Bwe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Wn.info(`Got cluster status event response: ${awe(s)}`);try{i.cancel()}catch{Wn.error("Error trying to cancel timeout.")}n(s)})})}o(Bwe,"createEventPromise");async function Fwe(e){let t=!0,r=0;do await K3(fwe*r++),(await owe.findPs(e)).length>0&&(t=!1);while(t&&r<mwe);if(t)throw new Error(`process ${e} was not started`)}o(Fwe,"checkProcessRunning");function kwe(e,t){let r=J3(e);if(r)return r;let n=X3(e,t);if(n)return n}o(kwe,"checkSchemaTableExist");function J3(e){let{getDatabases:t}=(Pe(),M(pt));if(!t()[e])return sA.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(J3,"checkSchemaExists");function X3(e,t){let{getDatabases:r}=(Pe(),M(pt));if(!r()[e][t])return sA.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(X3,"checkTableExists");function Hwe(){let e=nA().utc().add(1,"d").startOf("d").unix(),t=nA().utc().unix();return e-t}o(Hwe,"getStartOfTomorrowInSeconds");function Gwe(){return nA().utc().format("DD-MM-YYYY")}o(Gwe,"getLimitKey");function qwe(e){try{let t=new swe(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){Wn.error("Got an error back ticking items."),Wn.error(t)}}o(qwe,"backtickASTSchemaItems");function $we(e){return[e]}o($we,"createForkArgs");function Vwe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Vwe,"autoCastBoolean");function Kwe(e,t){let{getDatabases:r}=(Pe(),M(pt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(Kwe,"getTableHashAttribute");function Ywe(e){let{getDatabases:t}=(Pe(),M(pt));return t()[e]!==void 0}o(Ywe,"doesSchemaExist");function Wwe(e,t){let{getDatabases:r}=(Pe(),M(pt));return r()[e]?.[t]!==void 0}o(Wwe,"doesTableExist");function zwe(e){try{return JSON.stringify(e)}catch{return e}}o(zwe,"stringifyObj");function jwe(e){let t=nA.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(jwe,"ms_to_time");function Qwe(e,t){let r=Dc.basename(e,Dc.extname(e));return Dc.join(Dc.dirname(e),r+t)}o(Qwe,"changeExtension");function YM(){if(process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=cwe(process.argv);if(e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(YM,"getEnvCliRootPath");var VM;function Jwe(){if(VM)return VM;let e=YM();if(YM()&&V3.pathExistsSync(Dc.join(e,Dr.HDB_CONFIG_FILE)))return VM=!0,!0}o(Jwe,"noBootFile");function Xwe(e,t){let r;return e.protocol==="http:"?r=uwe:r=lwe,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(Xwe,"httpRequest");function Zwe(e){if(!e.schema&&!e.database){e.schema=Dr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(Zwe,"transformReq");function eNe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}o(eNe,"convertToMS");var sA=Yr()});var sX=v((Wqe,nX)=>{"use strict";var bs=le(),tNe=of(),We=(q(),M(W)),$E=Nt(),Ta=require("path"),{PACKAGE_ROOT:oA}=yt(),Z3=le(),iA=ce(),Yf="/dev/null",rNe=Ta.join(oA,"launchServiceScripts"),eX=Ta.join(oA,"utility/scripts"),nNe=Ta.join(eX,We.HDB_RESTART_SCRIPT),tX=Ta.resolve(oA,"dependencies",`${process.platform}-${process.arch}`,$E.NATS_BINARY_NAME);function rX(){let t=tNe.licenseSearch().ram_allocation||We.RAM_ALLOCATION_ENUM.DEFAULT,r=We.MEM_SETTING_KEY+t,n={[We.PROCESS_NAME_ENV_PROP]:We.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return iA.noBootFile()&&(n[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=iA.getEnvCliRootPath()),{name:We.PROCESS_DESCRIPTORS.HDB,script:We.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:oA}}o(rX,"generateMainServerConfig");var sNe=9930;function iNe(){bs.initSync(!0);let e=bs.get(We.CONFIG_PARAMS.ROOTPATH),t=Ta.join(e,"clustering",$E.NATS_CONFIG_FILES.HUB_SERVER),r=Ta.join(bs.get(We.HDB_SETTINGS_NAMES.LOG_PATH_KEY),We.LOG_NAMES.HDB),n=Z3.get(We.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$E.LOG_LEVEL_FLAGS[bs.get(We.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:We.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==sNe?"-"+n:""),script:tX,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[We.PROCESS_NAME_ENV_PROP]:We.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(We.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Yf,i.error_file=Yf),i}o(iNe,"generateNatsHubServerConfig");var oNe=9940;function aNe(){bs.initSync(!0);let e=bs.get(We.CONFIG_PARAMS.ROOTPATH),t=Ta.join(e,"clustering",$E.NATS_CONFIG_FILES.LEAF_SERVER),r=Ta.join(bs.get(We.HDB_SETTINGS_NAMES.LOG_PATH_KEY),We.LOG_NAMES.HDB),n=Z3.get(We.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$E.LOG_LEVEL_FLAGS[bs.get(We.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:We.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==oNe?"-"+n:""),script:tX,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[We.PROCESS_NAME_ENV_PROP]:We.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(We.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Yf,i.error_file=Yf),i}o(aNe,"generateNatsLeafServerConfig");function cNe(){bs.initSync();let e=Ta.join(bs.get(We.CONFIG_PARAMS.LOGGING_ROOT),We.LOG_NAMES.HDB),t={name:We.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:We.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[We.PROCESS_NAME_ENV_PROP]:We.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:rNe,autorestart:!1};return bs.get(We.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Yf,t.error_file=Yf),t}o(cNe,"generateClusteringUpgradeV4ServiceConfig");function lNe(){let e={[We.PROCESS_NAME_ENV_PROP]:We.PROCESS_DESCRIPTORS.RESTART_HDB};return iA.noBootFile()&&(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=iA.getEnvCliRootPath()),{...{name:We.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:eX},script:nNe}}o(lNe,"generateRestart");function uNe(){return{apps:[rX()]}}o(uNe,"generateAllServiceConfigs");nX.exports={generateAllServiceConfigs:uNe,generateMainServerConfig:rX,generateRestart:lNe,generateNatsHubServerConfig:iNe,generateNatsLeafServerConfig:aNe,generateClusteringUpgradeV4ServiceConfig:cNe}});var ff=v((Qqe,gX)=>{"use strict";var dt=(q(),M(W)),dNe=ce(),Ra=kT(),aA=pr(),ya=Nt(),Mc=sX(),cA=le(),yu=Q(),fNe=ea(),{startWorker:iX,onMessageFromWorkers:mNe}=nt(),pNe=Jd(),jqe=require("util"),hNe=require("child_process"),ENe=require("fs"),{execFile:_Ne}=hNe,tt;gX.exports={enterPM2Mode:gNe,start:vc,stop:WM,reload:aX,restart:cX,list:zM,describe:dX,connect:Aa,kill:ANe,startAllServices:bNe,startService:jM,getUniqueServicesList:fX,restartAllServices:INe,isServiceRegistered:mX,reloadStopStart:pX,restartHdb:uX,deleteProcess:yNe,startClusteringProcesses:EX,startClusteringThreads:_X,isHdbRestartRunning:RNe,isClusteringRunning:NNe,stopClustering:wNe,reloadClustering:CNe,expectedRestartOfChildren:lX};var VE=!1;mNe(e=>{e.type==="restart"&&cA.initSync(!0)});function gNe(){VE=!0}o(gNe,"enterPM2Mode");function Aa(){return tt||(tt=require("pm2")),new Promise((e,t)=>{tt.connect((r,n)=>{r&&t(r),e(n)})})}o(Aa,"connect");var In,SNe=10,oX;function vc(e,t=!1){if(VE)return TNe(e);let r=_Ne(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=In.indexOf(r);a>-1&&In.splice(a,1),!oX&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<SNe&&(ENe.existsSync(Ra.getHubConfigPath())?vc(e):(await Ra.generateNatsConfig(!0),vc(e),await new Promise(c=>setTimeout(c,3e3)),await Ra.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ra.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=cA.get(dt.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&ya.LOG_LEVEL_HIERARCHY[a]>=ya.LOG_LEVEL_HIERARCHY[d||"info"]){let p=d===ya.LOG_LEVELS.ERR||d===ya.LOG_LEVELS.WRN?yu.OUTPUTS.STDERR:yu.OUTPUTS.STDOUT;yu.logCustomLevel(d||"info",p,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=ya.LOG_LEVELS[m]}if(ya.LOG_LEVEL_HIERARCHY[a]>=ya.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===ya.LOG_LEVELS.ERR||d===ya.LOG_LEVELS.WRN?yu.OUTPUTS.STDERR:yu.OUTPUTS.STDOUT;yu.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!In&&(In=[],!t)){let i=o(()=>{oX=!0,In&&(In.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}In.push(r)}o(vc,"start");function TNe(e){return new Promise(async(t,r)=>{try{await Aa()}catch(n){r(n)}tt.start(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(TNe,"startWithPM2");function WM(e){if(!VE){for(let t of In||[])t.name===e&&(In.splice(In.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Aa()}catch(n){r(n)}tt.stop(e,async(n,s)=>{n&&(tt.disconnect(),r(n)),tt.delete(e,(i,a)=>{i&&(tt.disconnect(),r(n)),tt.disconnect(),t(a)})})})}o(WM,"stop");function aX(e){return new Promise(async(t,r)=>{try{await Aa()}catch(n){r(n)}tt.reload(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(aX,"reload");function cX(e){if(!VE){lX();for(let t of In||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Aa()}catch(n){r(n)}tt.restart(e,(n,s)=>{tt.disconnect(),t(s)})})}o(cX,"restart");function lX(){for(let e of In||[])e.config&&(e.config.restarts=0)}o(lX,"expectedRestartOfChildren");function yNe(e){return new Promise(async(t,r)=>{try{await Aa()}catch(n){r(n)}tt.delete(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(yNe,"deleteProcess");async function uX(){await vc(Mc.generateRestart())}o(uX,"restartHdb");async function RNe(){let e=await zM();for(let t in e)if(e[t].name===dt.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(RNe,"isHdbRestartRunning");function zM(){return new Promise(async(e,t)=>{try{await Aa()}catch(r){t(r)}tt.list((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(zM,"list");function dX(e){return new Promise(async(t,r)=>{try{await Aa()}catch(n){r(n)}tt.describe(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(dX,"describe");function ANe(){if(!VE){for(let e of In||[])e.kill();In=[];return}return new Promise(async(e,t)=>{try{await Aa()}catch(r){t(r)}tt.killDaemon((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(ANe,"kill");async function bNe(){try{await EX(),await _X(),await vc(Mc.generateAllServiceConfigs())}catch(e){throw tt?.disconnect(),e}}o(bNe,"startAllServices");async function jM(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case dt.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Mc.generateMainServerConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Mc.generateNatsIngestServiceConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Mc.generateNatsReplyServiceConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Mc.generateNatsHubServerConfig(),await vc(r,t),await Ra.removeNatsConfig(e);return;case dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Mc.generateNatsLeafServerConfig(),await vc(r,t),await Ra.removeNatsConfig(e);return;case dt.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Mc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await vc(r)}catch(r){throw tt?.disconnect(),r}}o(jM,"startService");async function fX(){try{let e=await zM(),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 tt?.disconnect(),e}}o(fX,"getUniqueServicesList");async function INe(e=[]){try{let t=!1,r=await fX();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===dt.PROCESS_DESCRIPTORS.HDB?t=!0:await cX(a))}t&&await pX(dt.PROCESS_DESCRIPTORS.HDB)}catch(t){throw tt?.disconnect(),t}}o(INe,"restartAllServices");async function mX(e){if(In?.find(r=>r.name===e))return!0;let t=await pNe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(mX,"isServiceRegistered");async function pX(e){let t=cA.get(dt.CONFIG_PARAMS.THREADS_COUNT)??cA.get(dt.CONFIG_PARAMS.THREADS),r=await dX(e),n=dNe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await WM(e),await jM(e)):e===dt.PROCESS_DESCRIPTORS.HDB?await uX():await aX(e)}o(pX,"reloadStopStart");var hX;async function EX(e=!1){for(let t in dt.CLUSTERING_PROCESSES){let r=dt.CLUSTERING_PROCESSES[t];await jM(r,e)}}o(EX,"startClusteringProcesses");async function _X(){hX=iX(dt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:dt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await aA.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await aA.updateLocalStreams();let e=await fNe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===dt.PRE_4_0_0_VERSION){yu.info("Starting clustering upgrade 4.0.0 process"),iX(dt.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(_X,"startClusteringThreads");async function wNe(){for(let e in dt.CLUSTERING_PROCESSES)if(e!==dt.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===dt.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await hX.terminate();else{let t=dt.CLUSTERING_PROCESSES[e];await WM(t)}}o(wNe,"stopClustering");async function NNe(){for(let e in dt.CLUSTERING_PROCESSES){let t=dt.CLUSTERING_PROCESSES[e];if(await mX(t)===!1)return!1}return!0}o(NNe,"isClusteringRunning");async function CNe(){await Ra.generateNatsConfig(!0),await aA.reloadNATSHub(),await aA.reloadNATSLeaf(),await Ra.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ra.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(CNe,"reloadClustering")});var QM=ff(),SX=(q(),M(W));o((async function(){try{let t=await QM.describe(SX.PROCESS_DESCRIPTORS.HDB);for(let r of t)await QM.reload(r.pm_id);await QM.deleteProcess(SX.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}}),"restartHdb")();
|
|
139
|
+
`),Kf&&(clearTimeout(a),f())):Kf||l<performance.now()+L3?f(E):(l=Math.min(l,performance.now()+L3),c=[E],a=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();ga.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{ga.closeSync(s)}catch{}s=null,r&&(JR=null)}function p(h){if(!s){try{s=ga.openSync(e,"a"),r&&(JR=s)}catch(E){if(E.code==="ENOENT"&&!h)return ga.mkdirpSync(HE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},FIe).unref()}}}o(D3,"getFileLogger");function $Ie(...e){Dt.info(...e)}o($Ie,"info");function VIe(...e){Dt.trace(...e)}o(VIe,"trace");function qM(...e){Dt.error(...e)}o(qM,"error");function KIe(...e){Dt.debug(...e)}o(KIe,"debug");function YIe(...e){Dt.notify(...e)}o(YIe,"notify");function WIe(...e){Dt.fatal(...e)}o(WIe,"fatal");function zIe(...e){Dt.warn(...e)}o(zIe,"warn");function jIe(e,t,r,...n){GM=r.service_name;try{Dt[e](...n)}finally{GM=void 0}}o(jIe,"logCustomLevel");function QIe(){let e;try{e=MIe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Sa(e,$r.HDB_HOME_DIR_NAME,$r.BOOT_PROPS_FILE_NAME);return ga.existsSync(t)||(t=Sa($M,"utility/hdb_boot_properties.file")),t}o(QIe,"getPropsFilePath");function JIe(e){try{if(e.includes("config/settings.js")){let l=U3(e);return{level:l.get($r.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:HE.dirname(l.get($r.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=v3.parseDocument(ga.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===$r.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(JIe,"getLogConfig");function XIe(){try{let e=v3.parseDocument(ga.readFileSync(BIe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(XIe,"getDefaultConfig");function ZIe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(ZIe,"errorToString");function ewe(e){Dt=e}o(ewe,"setMainLogger");function k3(){try{ga.closeSync(JR)}catch{}JR=null}o(k3,"closeLogFile");function twe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(twe,"AuthAuditLog");var{RootConfigWatcher:rwe}=(w3(),M(I3))});var ce=v(Re=>{"use strict";var Dc=require("path"),V3=require("fs-extra"),zn=Q(),H3=require("fs-extra"),rA=require("os"),nwe=require("net"),swe=require("recursive-iterator"),Dr=(q(),M(W)),{PACKAGE_ROOT:iwe}=yt(),owe=dD(),G3=require("papaparse"),nA=require("moment"),{inspect:awe}=require("util"),q3=require("is-number"),cwe=require("minimist"),lwe=require("https"),uwe=require("http"),dwe=/^((\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)))$/,K3=require("util").promisify(setTimeout),fwe=100,mwe=5,pwe="",hwe=4,$3={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Re.isEmpty=As;Re.isEmptyOrZeroLength=Ro;Re.arrayHasEmptyValues=gwe;Re.arrayHasEmptyOrZeroLengthValues=Swe;Re.buildFolderPath=Twe;Re.isBoolean=Y3;Re.errorizeMessage=Ewe;Re.stripFileExtension=Rwe;Re.autoCast=Awe;Re.autoCastJSON=W3;Re.autoCastJSONDeep=KM;Re.removeDir=bwe;Re.compareVersions=Iwe;Re.isCompatibleDataVersion=wwe;Re.escapeRawValue=Nwe;Re.unescapeValue=Cwe;Re.stringifyProps=Owe;Re.timeoutPromise=Lwe;Re.isClusterOperation=Mwe;Re.getClusterUser=Uwe;Re.checkGlobalSchemaTable=vwe;Re.getHomeDir=j3;Re.getPropsFilePath=Pwe;Re.promisifyPapaParse=xwe;Re.removeBOM=Q3;Re.createEventPromise=Bwe;Re.checkProcessRunning=Fwe;Re.checkSchemaTableExist=kwe;Re.checkSchemaExists=J3;Re.checkTableExists=X3;Re.getStartOfTomorrowInSeconds=Hwe;Re.getLimitKey=Gwe;Re.isObject=ywe;Re.isNotEmptyAndHasValue=_we;Re.autoCasterIsNumberCheck=z3;Re.backtickASTSchemaItems=qwe;Re.isPortTaken=Dwe;Re.createForkArgs=$we;Re.autoCastBoolean=Vwe;Re.asyncSetTimeout=K3;Re.getTableHashAttribute=Kwe;Re.doesSchemaExist=Ywe;Re.doesTableExist=Wwe;Re.stringifyObj=zwe;Re.ms_to_time=jwe;Re.changeExtension=Qwe;Re.getEnvCliRootPath=YM;Re.noBootFile=Jwe;Re.httpRequest=Xwe;Re.transformReq=Zwe;Re.convertToMS=eNe;Re.PACKAGE_ROOT=iwe;function Ewe(e){return e instanceof Error?e:new Error(e)}o(Ewe,"errorizeMessage");function As(e){return e==null}o(As,"isEmpty");function _we(e){return!As(e)&&(e||e===0||e===""||Y3(e))}o(_we,"isNotEmptyAndHasValue");function Ro(e){return As(e)||e.length===0||e.size===0}o(Ro,"isEmptyOrZeroLength");function gwe(e){if(As(e))return!0;for(let t=0;t<e.length;t++)if(As(e[t]))return!0;return!1}o(gwe,"arrayHasEmptyValues");function Swe(e){if(Ro(e))return!0;for(let t=0;t<e.length;t++)if(Ro(e[t]))return!0;return!1}o(Swe,"arrayHasEmptyOrZeroLengthValues");function Twe(...e){try{return e.join(Dc.sep)}catch{console.error(e)}}o(Twe,"buildFolderPath");function Y3(e){return As(e)?!1:e===!0||e===!1}o(Y3,"isBoolean");function ywe(e){return As(e)?!1:typeof e=="object"}o(ywe,"isObject");function Rwe(e){return Ro(e)?pwe:e.slice(0,-hwe)}o(Rwe,"stripFileExtension");function Awe(e){return As(e)||e===""||typeof e!="string"?e:$3[e]!==void 0?$3[e]:z3(e)===!0?Number(e):dwe.test(e)?new Date(e):e}o(Awe,"autoCast");function W3(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(W3,"autoCastJSON");function KM(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=KM(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=KM(r);n!==r&&(e[t]=n)}return e}else return W3(e)}o(KM,"autoCastJSONDeep");function z3(e){if(e.startsWith("0.")&&q3(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&q3(e))}o(z3,"autoCasterIsNumberCheck");async function bwe(e){if(Ro(e))throw new Error(`Directory path: ${e} does not exist`);try{await H3.emptyDir(e),await H3.remove(e)}catch(t){throw zn.error(`Error removing files in ${e} -- ${t}`),t}}o(bwe,"removeDir");function Iwe(e,t){if(Ro(e)){zn.info("Invalid current version sent as parameter.");return}if(Ro(t)){zn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(Iwe,"compareVersions");function wwe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(wwe,"isCompatibleDataVersion");function Nwe(e){if(As(e))return e;let t=String(e);return t==="."?Dr.UNICODE_PERIOD:t===".."?Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD:t.replace(Dr.FORWARD_SLASH_REGEX,Dr.UNICODE_FORWARD_SLASH)}o(Nwe,"escapeRawValue");function Cwe(e){if(As(e))return e;let t=String(e);return t===Dr.UNICODE_PERIOD?".":t===Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD?"..":String(e).replace(Dr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(Cwe,"unescapeValue");function Owe(e,t){if(As(e))return zn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+rA.EOL}!Ro(n)&&n[0]===";"?r+=" "+n+s+rA.EOL:Ro(n)||(r+=n+"="+s+rA.EOL)}catch{zn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(Owe,"stringifyProps");function j3(){let e;try{e=rA.homedir()}catch{e=process.env.HOME}return e}o(j3,"getHomeDir");function Pwe(){let e=Dc.join(j3(),Dr.HDB_HOME_DIR_NAME,Dr.BOOT_PROPS_FILE_NAME);return V3.existsSync(e)||(e=Dc.join(__dirname,"../","hdb_boot_properties.file")),e}o(Pwe,"getPropsFilePath");function Lwe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(Lwe,"timeoutPromise");async function Dwe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=nwe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(Dwe,"isPortTaken");function Mwe(e){try{return Dr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){zn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(Mwe,"isClusterOperation");function vwe(e,t){let r=(Pe(),M(pt)).getDatabases();if(!r[e])return sA.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return sA.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(vwe,"checkGlobalSchemaTable");function Uwe(e,t){if(As(t)){zn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(As(e)||Ro(e)){zn.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){zn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){zn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(Uwe,"getClusterUser");function xwe(){G3.parsePromise=function(e,t,r){return new Promise(function(n,s){G3.parse(e,{header:!0,transformHeader:Q3,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(xwe,"promisifyPapaParse");function Q3(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(Q3,"removeBOM");function Bwe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;zn.info(`Got cluster status event response: ${awe(s)}`);try{i.cancel()}catch{zn.error("Error trying to cancel timeout.")}n(s)})})}o(Bwe,"createEventPromise");async function Fwe(e){let t=!0,r=0;do await K3(fwe*r++),(await owe.findPs(e)).length>0&&(t=!1);while(t&&r<mwe);if(t)throw new Error(`process ${e} was not started`)}o(Fwe,"checkProcessRunning");function kwe(e,t){let r=J3(e);if(r)return r;let n=X3(e,t);if(n)return n}o(kwe,"checkSchemaTableExist");function J3(e){let{getDatabases:t}=(Pe(),M(pt));if(!t()[e])return sA.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(J3,"checkSchemaExists");function X3(e,t){let{getDatabases:r}=(Pe(),M(pt));if(!r()[e][t])return sA.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(X3,"checkTableExists");function Hwe(){let e=nA().utc().add(1,"d").startOf("d").unix(),t=nA().utc().unix();return e-t}o(Hwe,"getStartOfTomorrowInSeconds");function Gwe(){return nA().utc().format("DD-MM-YYYY")}o(Gwe,"getLimitKey");function qwe(e){try{let t=new swe(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){zn.error("Got an error back ticking items."),zn.error(t)}}o(qwe,"backtickASTSchemaItems");function $we(e){return[e]}o($we,"createForkArgs");function Vwe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Vwe,"autoCastBoolean");function Kwe(e,t){let{getDatabases:r}=(Pe(),M(pt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(Kwe,"getTableHashAttribute");function Ywe(e){let{getDatabases:t}=(Pe(),M(pt));return t()[e]!==void 0}o(Ywe,"doesSchemaExist");function Wwe(e,t){let{getDatabases:r}=(Pe(),M(pt));return r()[e]?.[t]!==void 0}o(Wwe,"doesTableExist");function zwe(e){try{return JSON.stringify(e)}catch{return e}}o(zwe,"stringifyObj");function jwe(e){let t=nA.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(jwe,"ms_to_time");function Qwe(e,t){let r=Dc.basename(e,Dc.extname(e));return Dc.join(Dc.dirname(e),r+t)}o(Qwe,"changeExtension");function YM(){if(process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=cwe(process.argv);if(e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(YM,"getEnvCliRootPath");var VM;function Jwe(){if(VM)return VM;let e=YM();if(YM()&&V3.pathExistsSync(Dc.join(e,Dr.HDB_CONFIG_FILE)))return VM=!0,!0}o(Jwe,"noBootFile");function Xwe(e,t){let r;return e.protocol==="http:"?r=uwe:r=lwe,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(Xwe,"httpRequest");function Zwe(e){if(!e.schema&&!e.database){e.schema=Dr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(Zwe,"transformReq");function eNe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}o(eNe,"convertToMS");var sA=Yr()});var sX=v((Wqe,nX)=>{"use strict";var bs=le(),tNe=of(),We=(q(),M(W)),$E=Nt(),Ta=require("path"),{PACKAGE_ROOT:oA}=yt(),Z3=le(),iA=ce(),Yf="/dev/null",rNe=Ta.join(oA,"launchServiceScripts"),eX=Ta.join(oA,"utility/scripts"),nNe=Ta.join(eX,We.HDB_RESTART_SCRIPT),tX=Ta.resolve(oA,"dependencies",`${process.platform}-${process.arch}`,$E.NATS_BINARY_NAME);function rX(){let t=tNe.licenseSearch().ram_allocation||We.RAM_ALLOCATION_ENUM.DEFAULT,r=We.MEM_SETTING_KEY+t,n={[We.PROCESS_NAME_ENV_PROP]:We.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return iA.noBootFile()&&(n[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=iA.getEnvCliRootPath()),{name:We.PROCESS_DESCRIPTORS.HDB,script:We.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:oA}}o(rX,"generateMainServerConfig");var sNe=9930;function iNe(){bs.initSync(!0);let e=bs.get(We.CONFIG_PARAMS.ROOTPATH),t=Ta.join(e,"clustering",$E.NATS_CONFIG_FILES.HUB_SERVER),r=Ta.join(bs.get(We.HDB_SETTINGS_NAMES.LOG_PATH_KEY),We.LOG_NAMES.HDB),n=Z3.get(We.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$E.LOG_LEVEL_FLAGS[bs.get(We.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:We.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==sNe?"-"+n:""),script:tX,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[We.PROCESS_NAME_ENV_PROP]:We.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(We.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Yf,i.error_file=Yf),i}o(iNe,"generateNatsHubServerConfig");var oNe=9940;function aNe(){bs.initSync(!0);let e=bs.get(We.CONFIG_PARAMS.ROOTPATH),t=Ta.join(e,"clustering",$E.NATS_CONFIG_FILES.LEAF_SERVER),r=Ta.join(bs.get(We.HDB_SETTINGS_NAMES.LOG_PATH_KEY),We.LOG_NAMES.HDB),n=Z3.get(We.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$E.LOG_LEVEL_FLAGS[bs.get(We.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:We.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==oNe?"-"+n:""),script:tX,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[We.PROCESS_NAME_ENV_PROP]:We.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(We.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Yf,i.error_file=Yf),i}o(aNe,"generateNatsLeafServerConfig");function cNe(){bs.initSync();let e=Ta.join(bs.get(We.CONFIG_PARAMS.LOGGING_ROOT),We.LOG_NAMES.HDB),t={name:We.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:We.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[We.PROCESS_NAME_ENV_PROP]:We.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:rNe,autorestart:!1};return bs.get(We.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Yf,t.error_file=Yf),t}o(cNe,"generateClusteringUpgradeV4ServiceConfig");function lNe(){let e={[We.PROCESS_NAME_ENV_PROP]:We.PROCESS_DESCRIPTORS.RESTART_HDB};return iA.noBootFile()&&(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=iA.getEnvCliRootPath()),{...{name:We.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:eX},script:nNe}}o(lNe,"generateRestart");function uNe(){return{apps:[rX()]}}o(uNe,"generateAllServiceConfigs");nX.exports={generateAllServiceConfigs:uNe,generateMainServerConfig:rX,generateRestart:lNe,generateNatsHubServerConfig:iNe,generateNatsLeafServerConfig:aNe,generateClusteringUpgradeV4ServiceConfig:cNe}});var ff=v((Qqe,gX)=>{"use strict";var dt=(q(),M(W)),dNe=ce(),Ra=kT(),aA=pr(),ya=Nt(),Mc=sX(),cA=le(),yu=Q(),fNe=ea(),{startWorker:iX,onMessageFromWorkers:mNe}=nt(),pNe=Jd(),jqe=require("util"),hNe=require("child_process"),ENe=require("fs"),{execFile:_Ne}=hNe,tt;gX.exports={enterPM2Mode:gNe,start:vc,stop:WM,reload:aX,restart:cX,list:zM,describe:dX,connect:Aa,kill:ANe,startAllServices:bNe,startService:jM,getUniqueServicesList:fX,restartAllServices:INe,isServiceRegistered:mX,reloadStopStart:pX,restartHdb:uX,deleteProcess:yNe,startClusteringProcesses:EX,startClusteringThreads:_X,isHdbRestartRunning:RNe,isClusteringRunning:NNe,stopClustering:wNe,reloadClustering:CNe,expectedRestartOfChildren:lX};var VE=!1;mNe(e=>{e.type==="restart"&&cA.initSync(!0)});function gNe(){VE=!0}o(gNe,"enterPM2Mode");function Aa(){return tt||(tt=require("pm2")),new Promise((e,t)=>{tt.connect((r,n)=>{r&&t(r),e(n)})})}o(Aa,"connect");var wn,SNe=10,oX;function vc(e,t=!1){if(VE)return TNe(e);let r=_Ne(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=wn.indexOf(r);a>-1&&wn.splice(a,1),!oX&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<SNe&&(ENe.existsSync(Ra.getHubConfigPath())?vc(e):(await Ra.generateNatsConfig(!0),vc(e),await new Promise(c=>setTimeout(c,3e3)),await Ra.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ra.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=cA.get(dt.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&ya.LOG_LEVEL_HIERARCHY[a]>=ya.LOG_LEVEL_HIERARCHY[d||"info"]){let p=d===ya.LOG_LEVELS.ERR||d===ya.LOG_LEVELS.WRN?yu.OUTPUTS.STDERR:yu.OUTPUTS.STDOUT;yu.logCustomLevel(d||"info",p,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=ya.LOG_LEVELS[m]}if(ya.LOG_LEVEL_HIERARCHY[a]>=ya.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===ya.LOG_LEVELS.ERR||d===ya.LOG_LEVELS.WRN?yu.OUTPUTS.STDERR:yu.OUTPUTS.STDOUT;yu.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!wn&&(wn=[],!t)){let i=o(()=>{oX=!0,wn&&(wn.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}wn.push(r)}o(vc,"start");function TNe(e){return new Promise(async(t,r)=>{try{await Aa()}catch(n){r(n)}tt.start(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(TNe,"startWithPM2");function WM(e){if(!VE){for(let t of wn||[])t.name===e&&(wn.splice(wn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Aa()}catch(n){r(n)}tt.stop(e,async(n,s)=>{n&&(tt.disconnect(),r(n)),tt.delete(e,(i,a)=>{i&&(tt.disconnect(),r(n)),tt.disconnect(),t(a)})})})}o(WM,"stop");function aX(e){return new Promise(async(t,r)=>{try{await Aa()}catch(n){r(n)}tt.reload(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(aX,"reload");function cX(e){if(!VE){lX();for(let t of wn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Aa()}catch(n){r(n)}tt.restart(e,(n,s)=>{tt.disconnect(),t(s)})})}o(cX,"restart");function lX(){for(let e of wn||[])e.config&&(e.config.restarts=0)}o(lX,"expectedRestartOfChildren");function yNe(e){return new Promise(async(t,r)=>{try{await Aa()}catch(n){r(n)}tt.delete(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(yNe,"deleteProcess");async function uX(){await vc(Mc.generateRestart())}o(uX,"restartHdb");async function RNe(){let e=await zM();for(let t in e)if(e[t].name===dt.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(RNe,"isHdbRestartRunning");function zM(){return new Promise(async(e,t)=>{try{await Aa()}catch(r){t(r)}tt.list((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(zM,"list");function dX(e){return new Promise(async(t,r)=>{try{await Aa()}catch(n){r(n)}tt.describe(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(dX,"describe");function ANe(){if(!VE){for(let e of wn||[])e.kill();wn=[];return}return new Promise(async(e,t)=>{try{await Aa()}catch(r){t(r)}tt.killDaemon((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(ANe,"kill");async function bNe(){try{await EX(),await _X(),await vc(Mc.generateAllServiceConfigs())}catch(e){throw tt?.disconnect(),e}}o(bNe,"startAllServices");async function jM(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case dt.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Mc.generateMainServerConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Mc.generateNatsIngestServiceConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Mc.generateNatsReplyServiceConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Mc.generateNatsHubServerConfig(),await vc(r,t),await Ra.removeNatsConfig(e);return;case dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Mc.generateNatsLeafServerConfig(),await vc(r,t),await Ra.removeNatsConfig(e);return;case dt.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Mc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await vc(r)}catch(r){throw tt?.disconnect(),r}}o(jM,"startService");async function fX(){try{let e=await zM(),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 tt?.disconnect(),e}}o(fX,"getUniqueServicesList");async function INe(e=[]){try{let t=!1,r=await fX();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===dt.PROCESS_DESCRIPTORS.HDB?t=!0:await cX(a))}t&&await pX(dt.PROCESS_DESCRIPTORS.HDB)}catch(t){throw tt?.disconnect(),t}}o(INe,"restartAllServices");async function mX(e){if(wn?.find(r=>r.name===e))return!0;let t=await pNe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(mX,"isServiceRegistered");async function pX(e){let t=cA.get(dt.CONFIG_PARAMS.THREADS_COUNT)??cA.get(dt.CONFIG_PARAMS.THREADS),r=await dX(e),n=dNe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await WM(e),await jM(e)):e===dt.PROCESS_DESCRIPTORS.HDB?await uX():await aX(e)}o(pX,"reloadStopStart");var hX;async function EX(e=!1){for(let t in dt.CLUSTERING_PROCESSES){let r=dt.CLUSTERING_PROCESSES[t];await jM(r,e)}}o(EX,"startClusteringProcesses");async function _X(){hX=iX(dt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:dt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await aA.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await aA.updateLocalStreams();let e=await fNe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===dt.PRE_4_0_0_VERSION){yu.info("Starting clustering upgrade 4.0.0 process"),iX(dt.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(_X,"startClusteringThreads");async function wNe(){for(let e in dt.CLUSTERING_PROCESSES)if(e!==dt.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===dt.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await hX.terminate();else{let t=dt.CLUSTERING_PROCESSES[e];await WM(t)}}o(wNe,"stopClustering");async function NNe(){for(let e in dt.CLUSTERING_PROCESSES){let t=dt.CLUSTERING_PROCESSES[e];if(await mX(t)===!1)return!1}return!0}o(NNe,"isClusteringRunning");async function CNe(){await Ra.generateNatsConfig(!0),await aA.reloadNATSHub(),await aA.reloadNATSLeaf(),await Ra.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ra.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(CNe,"reloadClustering")});var QM=ff(),SX=(q(),M(W));o((async function(){try{let t=await QM.describe(SX.PROCESS_DESCRIPTORS.HDB);for(let r of t)await QM.reload(r.pm_id);await QM.deleteProcess(SX.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}}),"restartHdb")();
|