harperdb 4.7.0-alpha.5 → 4.7.0-alpha.6
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 +31 -31
- package/bin/lite.js +29 -29
- package/launchServiceScripts/launchNatsIngestService.js +29 -29
- package/launchServiceScripts/launchNatsReplyService.js +29 -29
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +29 -29
- package/npm-shrinkwrap.json +293 -293
- package/package.json +1 -1
- package/resources/registrationDeprecated.d.ts +4 -0
- package/server/jobs/jobProcess.js +29 -29
- package/server/threads/threadServer.js +29 -29
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.9f5f17c8.js → main.1577832c.js} +2 -2
- package/utility/hdbTerms.d.ts +1 -0
- package/utility/scripts/restartHdb.js +29 -29
- /package/studio/build-local/static/js/{main.9f5f17c8.js.LICENSE.txt → main.1577832c.js.LICENSE.txt} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";var FX=Object.create;var em=Object.defineProperty;var kX=Object.getOwnPropertyDescriptor;var HX=Object.getOwnPropertyNames;var qX=Object.getPrototypeOf,GX=Object.prototype.hasOwnProperty;var o=(e,t)=>em(e,"name",{value:t,configurable:!0});var ie=(e,t)=>()=>(e&&(t=e(e=0)),t);var D=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ie=(e,t)=>{for(var r in t)em(e,r,{get:t[r],enumerable:!0})},iv=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of HX(t))!GX.call(e,s)&&s!==r&&em(e,s,{get:()=>t[s],enumerable:!(n=kX(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?FX(qX(e)):{},iv(t||!e||!e.__esModule?em(r,"default",{value:e,enumerable:!0}):r,e)),M=e=>iv(em({},"__esModule",{value:!0}),e);var It=D((gCe,cv)=>{var{join:$X,dirname:ov}=require("node:path"),{existsSync:VX,readFileSync:KX}=require("node:fs");function YX(){let t=__dirname,r,n=0;for(;!VX(r=$X(t,"package.json"));)if(t===(t=ov(t))||n++>10)throw new Error("Could not find package root");return r}o(YX,"findPackageJson");var av=YX(),WX=JSON.parse(KX(av,"utf8")),zX=ov(av);cv.exports={packageJson:WX,PACKAGE_ROOT:zX}});var Y={};Ie(Y,{AUTH_AUDIT_STATUS:()=>ii,AUTH_AUDIT_TYPES:()=>Ia,BOOT_PROPS_FILE_NAME:()=>_5,BOOT_PROP_PARAMS:()=>dv,CLUSTERING_FLAG:()=>bA,CLUSTERING_PROCESSES:()=>s5,CLUSTER_MESSAGE_TYPE_ENUM:()=>AA,CLUSTER_OPERATIONS:()=>M5,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>fv,DATABASES_DIR_NAME:()=>Gc,DATABASES_PARAM_CONFIG:()=>B5,DEFAULT_DATABASE_NAME:()=>o5,ESCAPED_FORWARD_SLASH_REGEX:()=>h5,FORWARD_SLASH_REGEX:()=>m5,FUNC_VAL:()=>z5,GEO_CONVERSION_ENUM:()=>U5,HDB_COMPONENT_CONFIG_FILE:()=>JX,HDB_CONFIG_FILE:()=>jX,HDB_DEFAULT_CONFIG_FILE:()=>QX,HDB_FILE_PERMISSIONS:()=>S5,HDB_HOME_DIR_NAME:()=>E5,HDB_PID_FILE:()=>i5,HDB_PROCESS_SERVICES:()=>n5,HDB_PROC_NAME:()=>XX,HDB_RESTART_SCRIPT:()=>ZX,HDB_ROOT_DIR_NAME:()=>SA,HDB_SETTINGS_NAMES:()=>nm,HDB_SUPPORT_ADDRESS:()=>uv,INFO_TABLE_HASH_ATTRIBUTE:()=>I5,INSERT_MAX_CHARACTER_SIZE:()=>A5,INSTALL_PROMPTS:()=>R5,ITC_EVENT_TYPES:()=>i_,JOB_STATUS_ENUM:()=>O5,JOB_TYPE_ENUM:()=>F5,JWT_ENUM:()=>sm,LAUNCH_SERVICE_SCRIPTS:()=>c5,LEGACY_CONFIG_PARAMS:()=>x5,LEGACY_DATABASES_DIR_NAME:()=>r_,LICENSE_FILE_NAME:()=>C5,LICENSE_KEY_DIR_NAME:()=>RA,LICENSE_VALUES:()=>k5,LOG_LEVELS:()=>tm,LOG_NAMES:()=>a5,METADATA_PROPERTY:()=>G5,NODE_ERROR_CODES:()=>q5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>Y5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>K5,PRE_4_0_0_VERSION:()=>j5,PROCESS_DESCRIPTORS:()=>r5,PROCESS_NAME_ENV_PROP:()=>y5,RAM_ALLOCATION_ENUM:()=>H5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>s_,REG_KEY_FILE_NAME:()=>N5,RESTART_TIMEOUT_MS:()=>g5,ROLE_TYPES_ENUM:()=>l5,S3_BUCKET_AUTH_KEYS:()=>L5,SEARCH_NOT_FOUND_MESSAGE:()=>d5,SEARCH_WILDCARDS:()=>W5,SERVICE_ACTIONS_ENUM:()=>v5,SUPPORT_HELP_MSG:()=>u5,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>w5,SYSTEM_SCHEMA_NAME:()=>rm,SYSTEM_TABLE_NAMES:()=>bu,THREAD_TYPES:()=>wA,TIME_STAMP_NAMES:()=>V5,TIME_STAMP_NAMES_ENUM:()=>$5,TRANSACTIONS_DIR_NAME:()=>T5,UNICODE_FORWARD_SLASH:()=>p5,UNICODE_PERIOD:()=>f5,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>b5,VALID_S3_FILE_TYPES:()=>P5,VALID_SQL_OPS_ENUM:()=>D5,VALUE_SEARCH_COMPARATORS:()=>n_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>IA});var e_,t_,jX,QX,SA,JX,XX,ZX,lv,gA,TA,yA,e5,t5,r5,n5,s5,i5,o5,a5,tm,c5,l5,uv,u5,d5,f5,m5,p5,h5,rm,E5,RA,_5,g5,S5,Gc,r_,T5,y5,dv,R5,A5,b5,bu,I5,w5,N5,C5,O5,V,P5,L5,D5,M5,v5,U5,nm,x5,B,fv,B5,F5,AA,k5,H5,q5,G5,bA,mv,pv,$5,V5,K5,n_,IA,Y5,W5,z5,s_,sm,i_,wA,j5,ii,Ia,H=ie(()=>{e_=require("node:path"),t_=w(It()),jX="harperdb-config.yaml",QX="defaultConfig.yaml",SA="hdb",JX="config.yaml",XX="harperdb.js",ZX="restartHdb.js",lv="HarperDB",gA="Custom Functions",TA="Clustering Hub",yA="Clustering Leaf",e5="Clustering Ingest Service",t5="Clustering Reply Service",r5={HDB:lv,CLUSTERING_HUB:TA,CLUSTERING_LEAF:yA,CLUSTERING_INGEST_SERVICE:e5,CLUSTERING_REPLY_SERVICE:t5,CUSTOM_FUNCTIONS:gA,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"},n5={harperdb:lv,"clustering hub":TA,"clustering leaf":yA,"custom functions":gA,custom_functions:gA,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},s5={CLUSTERING_HUB_PROC_DESCRIPTOR:TA,CLUSTERING_LEAF_PROC_DESCRIPTOR:yA},i5="hdb.pid",o5="data",a5={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},tm={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},c5={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,e_.join)(t_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,e_.join)(t_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,e_.join)(t_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},l5={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},uv="support@harperdb.io",u5=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${uv}`,d5="None of the specified records were found.",f5="U+002E",m5=/\//g,p5="U+002F",h5=/U\+002F/g,rm="system",E5=".harperdb",RA="keys",_5="hdb_boot_properties.file",g5=6e4,S5=448,Gc="database",r_="schema",T5="transactions",y5="PROCESS_NAME",dv={SETTINGS_PATH_KEY:"settings_path"},R5={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"},A5=250,b5={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},bu={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"},I5="info_id",w5={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"},N5="060493.ks",C5=".license",O5={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",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"},P5={CSV:".csv",JSON:".json"},L5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},D5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},M5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},v5={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},U5={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},nm={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"},x5={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",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_REQUESTQUEUELIMIT:"http_requestQueueLimit",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"},fv={settings_path:dv.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];fv[t.toLowerCase()]=t}B5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},F5={csv_file_load:"csv_file_load",csv_data_load:V.CSV_DATA_LOAD,csv_url_load:V.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},AA={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"},k5={VERSION_DEFAULT:"2.2.0"},H5={DEVELOPMENT:8192,DEFAULT:512},q5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},G5=Symbol("metadata"),bA="__clustering__",mv="__createdtime__",pv="__updatedtime__",$5={CREATED_TIME:mv,UPDATED_TIME:pv},V5=[mv,pv],K5=15984864e5,n_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},IA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},Y5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},W5=["*","%"],z5="func_val",s_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},sm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},i_={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"},wA={HTTP:"http"},j5="3.x.x",ii={SUCCESS:"success",FAILURE:"failure"},Ia={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var $c=D((TCe,_v)=>{"use strict";var hv=require("minimist");_v.exports=Q5;function Q5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Ev(process.env),n=Ev(hv(process.argv))):(r=process.env,n=hv(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(Q5,"assignCMDENVVariables");function Ev(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(Ev,"objKeysToLowerCase")});var oi=D(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 NA=D((ACe,gv)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=It(),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 R=new Set;e.sync(p.map(N=>`${N}/**/*.ts`),{cwd:m}).forEach(N=>{let O=0,F=0;try{R.add(N),O=i(n(m,N)).mtimeMs-5e3,F=i(n(m,h,N.replace(/.ts$/,".js"))).mtimeMs}catch{}O>F&&(A=!0)}),e.sync(p.map(N=>`${N}/**/*.js`),{cwd:n(m,h)}).forEach(N=>{if(!R.has(N.replace(/.js$/,".ts")))try{l(n(m,h,N))}catch{}})}else A=!0;if(A){console.log("Compiling TypeScript...");let R=d("npx",["tsc"],{cwd:m});if(R.stdout?.length&&console.log(R.stdout.toString()),R.stderr?.length&&console.log(R.stderr.toString()),S){let N=n(t(),"harperdb-tsc.pid"),O=!1;if(s(N))try{process.kill(+a(N,"utf8"),0),O=!0}catch{}if(!O){console.log("Starting background TypeScript compilation...");let F=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});F.on("error",ee=>{console.error("Error trying to compile TypeScript",ee)}),F.pid&&c(N,String(F.pid),"utf-8"),F.unref()}}}}let E=gv.constructor,g=E._findPath;E._findPath=function(A,S,R){if(A.startsWith(".")&&!R&&S.length===1&&S[0].startsWith(m)&&!S[0].includes("node_modules")){let N=r(m,S[0]),O;N.startsWith(h)?O=n(m,r(h,N)):O=n(m,h,N),(A.endsWith(".js")||A.endsWith(".ts"))&&(A=A.slice(0,-3));let F=n(O,A),ee=F+".js";if(s(ee))return ee;if(F.includes(".")&&s(F))return F}return g(A,S,R)}}});var im={};Ie(im,{server:()=>Ue});var Sv,Ue,xr=ie(()=>{Sv=w(oi()),Ue={};(0,Sv._assignPackageExport)("server",Ue)});var Vt=D((bCe,yv)=>{"use strict";var J5="__dbis__",X5="__txns__",Z5="__environment_name__",e6="__dbi_defintion__",t6={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"},r6=["__createdtime__","__updatedtime__"],n6="\uFFFF",Tv={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},s6=Object.values(Tv);yv.exports={AUDIT_STORE_NAME:X5,INTERNAL_DBIS_NAME:J5,DBI_DEFINITION_NAME:e6,SEARCH_TYPES:t6,TIMESTAMP_NAMES:r6,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Z5,TRANSACTIONS_DBI_NAMES_ENUM:Tv,TRANSACTIONS_DBIS:s6,OVERFLOW_MARKER:n6}});var CA=D((ICe,Rv)=>{"use strict";var i6=require("util"),o6=require("path"),a6=require("child_process"),c6=i6.promisify(a6.execFile),l6=1e3*1e3*10;Rv.exports={findPs:u6};async function u6(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await c6("ps",["wwxo",`pid,${r}`],{maxBuffer:l6});for(let s of n.trim().split(`
|
|
2
|
-
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:o6.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(u6,"findPs")});var Kr=D((NCe,Lv)=>{"use strict";var Av=(H(),M(Y)),bv=Vt(),Iv={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},wv=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Nv={500:wv("There was an error processing your request."),400:"Invalid request"},d6=Nv[Iv.INTERNAL_SERVER_ERROR],f6={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")},m6={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},p6={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},h6={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 ${bv.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${bv.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"},E6={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Av.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 ${Av.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"},Cv={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"},_6={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."},g6={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")},S6={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"},T6={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},y6={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},Ov={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")},Pv={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")},R6={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"},A6={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},b6={...Cv,...p6,...f6,..._6,...g6,...S6,...T6,...y6,...E6,...Ov,...Pv,...R6,...A6,...m6};Lv.exports={CHECK_LOGS_WRAPPER:wv,HDB_ERROR_MSGS:b6,DEFAULT_ERROR_MSGS:Nv,DEFAULT_ERROR_RESP:d6,HTTP_STATUS_CODES:Iv,LMDB_ERRORS_ENUM:h6,AUTHENTICATION_ERROR_MSGS:Cv,VALIDATION_ERROR_MSGS:Ov,ITC_ERRORS:Pv}});var oe=D(Ae=>{"use strict";var wa=require("path"),xv=require("fs-extra"),wn=j(),Dv=require("fs-extra"),o_=require("os"),I6=require("net"),w6=require("recursive-iterator"),Ir=(H(),M(Y)),{PACKAGE_ROOT:N6}=It(),C6=CA(),Mv=require("papaparse"),a_=require("moment"),{inspect:O6}=require("util"),vv=require("is-number"),P6=require("minimist"),L6=require("https"),D6=require("http"),M6=/^((\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)))$/,Bv=require("util").promisify(setTimeout),v6=100,U6=5,x6="",B6=4,Uv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=jn;Ae.isEmptyOrZeroLength=xi;Ae.arrayHasEmptyValues=H6;Ae.arrayHasEmptyOrZeroLengthValues=q6;Ae.buildFolderPath=G6;Ae.isBoolean=Fv;Ae.errorizeMessage=F6;Ae.stripFileExtension=V6;Ae.autoCast=K6;Ae.autoCastJSON=kv;Ae.autoCastJSONDeep=PA;Ae.removeDir=Y6;Ae.compareVersions=W6;Ae.isCompatibleDataVersion=z6;Ae.escapeRawValue=j6;Ae.unescapeValue=Q6;Ae.stringifyProps=J6;Ae.timeoutPromise=Z6;Ae.isClusterOperation=t8;Ae.getClusterUser=n8;Ae.checkGlobalSchemaTable=r8;Ae.getHomeDir=qv;Ae.getPropsFilePath=X6;Ae.promisifyPapaParse=s8;Ae.removeBOM=Gv;Ae.createEventPromise=i8;Ae.checkProcessRunning=o8;Ae.checkSchemaTableExist=a8;Ae.checkSchemaExists=$v;Ae.checkTableExists=Vv;Ae.getStartOfTomorrowInSeconds=c8;Ae.getLimitKey=l8;Ae.isObject=$6;Ae.isNotEmptyAndHasValue=k6;Ae.autoCasterIsNumberCheck=Hv;Ae.backtickASTSchemaItems=u8;Ae.isPortTaken=e8;Ae.createForkArgs=d8;Ae.autoCastBoolean=f8;Ae.asyncSetTimeout=Bv;Ae.getTableHashAttribute=m8;Ae.doesSchemaExist=p8;Ae.doesTableExist=h8;Ae.stringifyObj=E8;Ae.ms_to_time=_8;Ae.changeExtension=g8;Ae.getEnvCliRootPath=LA;Ae.noBootFile=S8;Ae.httpRequest=T8;Ae.transformReq=y8;Ae.convertToMS=R8;Ae.PACKAGE_ROOT=N6;function F6(e){return e instanceof Error?e:new Error(e)}o(F6,"errorizeMessage");function jn(e){return e==null}o(jn,"isEmpty");function k6(e){return!jn(e)&&(e||e===0||e===""||Fv(e))}o(k6,"isNotEmptyAndHasValue");function xi(e){return jn(e)||e.length===0||e.size===0}o(xi,"isEmptyOrZeroLength");function H6(e){if(jn(e))return!0;for(let t=0;t<e.length;t++)if(jn(e[t]))return!0;return!1}o(H6,"arrayHasEmptyValues");function q6(e){if(xi(e))return!0;for(let t=0;t<e.length;t++)if(xi(e[t]))return!0;return!1}o(q6,"arrayHasEmptyOrZeroLengthValues");function G6(...e){try{return e.join(wa.sep)}catch{console.error(e)}}o(G6,"buildFolderPath");function Fv(e){return jn(e)?!1:e===!0||e===!1}o(Fv,"isBoolean");function $6(e){return jn(e)?!1:typeof e=="object"}o($6,"isObject");function V6(e){return xi(e)?x6:e.slice(0,-B6)}o(V6,"stripFileExtension");function K6(e){return jn(e)||e===""||typeof e!="string"?e:Uv[e]!==void 0?Uv[e]:Hv(e)===!0?Number(e):M6.test(e)?new Date(e):e}o(K6,"autoCast");function kv(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(kv,"autoCastJSON");function PA(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=PA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=PA(r);n!==r&&(e[t]=n)}return e}else return kv(e)}o(PA,"autoCastJSONDeep");function Hv(e){if(e.startsWith("0.")&&vv(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&vv(e))}o(Hv,"autoCasterIsNumberCheck");async function Y6(e){if(xi(e))throw new Error(`Directory path: ${e} does not exist`);try{await Dv.emptyDir(e),await Dv.remove(e)}catch(t){throw wn.error(`Error removing files in ${e} -- ${t}`),t}}o(Y6,"removeDir");function W6(e,t){if(xi(e)){wn.info("Invalid current version sent as parameter.");return}if(xi(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(W6,"compareVersions");function z6(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(z6,"isCompatibleDataVersion");function j6(e){if(jn(e))return e;let t=String(e);return t==="."?Ir.UNICODE_PERIOD:t===".."?Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD:t.replace(Ir.FORWARD_SLASH_REGEX,Ir.UNICODE_FORWARD_SLASH)}o(j6,"escapeRawValue");function Q6(e){if(jn(e))return e;let t=String(e);return t===Ir.UNICODE_PERIOD?".":t===Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD?"..":String(e).replace(Ir.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(Q6,"unescapeValue");function J6(e,t){if(jn(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+o_.EOL}!xi(n)&&n[0]===";"?r+=" "+n+s+o_.EOL:xi(n)||(r+=n+"="+s+o_.EOL)}catch{wn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(J6,"stringifyProps");function qv(){let e;try{e=o_.homedir()}catch{e=process.env.HOME}return e}o(qv,"getHomeDir");function X6(){let e=wa.join(qv(),Ir.HDB_HOME_DIR_NAME,Ir.BOOT_PROPS_FILE_NAME);return xv.existsSync(e)||(e=wa.join(__dirname,"../","hdb_boot_properties.file")),e}o(X6,"getPropsFilePath");function Z6(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(Z6,"timeoutPromise");async function e8(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=I6.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(e8,"isPortTaken");function t8(e){try{return Ir.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){wn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(t8,"isClusterOperation");function r8(e,t){let r=(Oe(),M(mt)).getDatabases();if(!r[e])return c_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return c_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(r8,"checkGlobalSchemaTable");function n8(e,t){if(jn(t)){wn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(jn(e)||xi(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(n8,"getClusterUser");function s8(){Mv.parsePromise=function(e,t,r){return new Promise(function(n,s){Mv.parse(e,{header:!0,transformHeader:Gv,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(s8,"promisifyPapaParse");function Gv(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(Gv,"removeBOM");function i8(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;wn.info(`Got cluster status event response: ${O6(s)}`);try{i.cancel()}catch{wn.error("Error trying to cancel timeout.")}n(s)})})}o(i8,"createEventPromise");async function o8(e){let t=!0,r=0;do await Bv(v6*r++),(await C6.findPs(e)).length>0&&(t=!1);while(t&&r<U6);if(t)throw new Error(`process ${e} was not started`)}o(o8,"checkProcessRunning");function a8(e,t){let r=$v(e);if(r)return r;let n=Vv(e,t);if(n)return n}o(a8,"checkSchemaTableExist");function $v(e){let{getDatabases:t}=(Oe(),M(mt));if(!t()[e])return c_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o($v,"checkSchemaExists");function Vv(e,t){let{getDatabases:r}=(Oe(),M(mt));if(!r()[e][t])return c_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Vv,"checkTableExists");function c8(){let e=a_().utc().add(1,"d").startOf("d").unix(),t=a_().utc().unix();return e-t}o(c8,"getStartOfTomorrowInSeconds");function l8(){return a_().utc().format("DD-MM-YYYY")}o(l8,"getLimitKey");function u8(e){try{let t=new w6(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){wn.error("Got an error back ticking items."),wn.error(t)}}o(u8,"backtickASTSchemaItems");function d8(e){return[e]}o(d8,"createForkArgs");function f8(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(f8,"autoCastBoolean");function m8(e,t){let{getDatabases:r}=(Oe(),M(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(m8,"getTableHashAttribute");function p8(e){let{getDatabases:t}=(Oe(),M(mt));return t()[e]!==void 0}o(p8,"doesSchemaExist");function h8(e,t){let{getDatabases:r}=(Oe(),M(mt));return r()[e]?.[t]!==void 0}o(h8,"doesTableExist");function E8(e){try{return JSON.stringify(e)}catch{return e}}o(E8,"stringifyObj");function _8(e){let t=a_.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(_8,"ms_to_time");function g8(e,t){let r=wa.basename(e,wa.extname(e));return wa.join(wa.dirname(e),r+t)}o(g8,"changeExtension");function LA(){if(process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=P6(process.argv);if(e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(LA,"getEnvCliRootPath");var OA;function S8(){if(OA)return OA;let e=LA();if(LA()&&xv.pathExistsSync(wa.join(e,Ir.HDB_CONFIG_FILE)))return OA=!0,!0}o(S8,"noBootFile");function T8(e,t){let r;return e.protocol==="http:"?r=D6:r=L6,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(T8,"httpRequest");function y8(e){if(!e.schema&&!e.database){e.schema=Ir.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(y8,"transformReq");function R8(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(R8,"convertToMS");var c_=Kr()});var yt=D((LCe,Jv)=>{"use strict";var um=(H(),M(Y)),A8=oe(),Nn=ae(),dm=require("path"),b8=require("minimist"),Kv=require("fs-extra"),Yv=require("lodash");Nn.initSync();var{CONFIG_PARAMS:Na,DATABASES_PARAM_CONFIG:om,SYSTEM_SCHEMA_NAME:l_}=um,am,cm,lm;function Wv(){if(am!==void 0)return am;if(Nn.getHdbBasePath()!==void 0)return am=Nn.get(Na.STORAGE_PATH)||dm.join(Nn.getHdbBasePath(),um.DATABASES_DIR_NAME),am}o(Wv,"getBaseSchemaPath");function zv(){if(cm!==void 0)return cm;if(Nn.getHdbBasePath()!==void 0)return cm=Qv(l_),cm}o(zv,"getSystemSchemaPath");function jv(){if(lm!==void 0)return lm;if(Nn.getHdbBasePath()!==void 0)return lm=Nn.get(um.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||dm.join(Nn.getHdbBasePath(),um.TRANSACTIONS_DIR_NAME),lm}o(jv,"getTransactionAuditStoreBasePath");function I8(e,t){let r=Nn.get(Na.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||dm.join(jv(),e.toString())}o(I8,"getTransactionAuditStorePath");function Qv(e,t){e=e.toString(),t=t&&t.toString();let r=Nn.get(um.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||dm.join(Wv(),e)}o(Qv,"getSchemaPath");function w8(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,b8(process.argv));let n=r[Na.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!A8.isObject(n))throw a;i=n}for(let a of i){let c=a[l_];if(!c)continue;let l=Nn.get(Na.DATABASES);l=l??{};let u=c?.tables?.[t]?.[om.PATH];if(u)return Yv.set(l,[l_,om.TABLES,t,om.PATH],u),Nn.setProperty(Na.DATABASES,l),u;let d=c?.[om.PATH];if(d)return Yv.set(l,[l_,om.PATH],d),Nn.setProperty(Na.DATABASES,l),d}}let s=r[Na.STORAGE_PATH.toUpperCase()];if(s){if(!Kv.pathExistsSync(s))throw new Error(s+" does not exist");let i=dm.join(s,e);return Kv.mkdirsSync(i),Nn.setProperty(Na.STORAGE_PATH,s),i}return zv()}o(w8,"initSystemSchemaPaths");function N8(){am=void 0,cm=void 0,lm=void 0}o(N8,"resetPaths");Jv.exports={getBaseSchemaPath:Wv,getSystemSchemaPath:zv,getTransactionAuditStorePath:I8,getTransactionAuditStoreBasePath:jv,getSchemaPath:Qv,initSystemSchemaPaths:w8,resetPaths:N8}});var Cn=D((UCe,rU)=>{"use strict";var C8=Kr().LMDB_ERRORS_ENUM,MCe=require("lmdb"),O8=Vt(),vCe=require("buffer").Buffer,{OVERFLOW_MARKER:Xv,MAX_SEARCH_KEY_LENGTH:u_}=O8,Zv=["number","string","symbol","boolean","bigint"];function P8(e){if(e=e?.primaryStore||e,!e)throw new Error(C8.ENV_REQUIRED)}o(P8,"validateEnv");function L8(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(L8,"stringifyData");function D8(e){return e instanceof Date?e.valueOf():e}o(D8,"convertKeyValueToWrite");function M8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Zv.includes(typeof e))return e.length>u_?[e.slice(0,u_)+Xv]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Zv.includes(typeof i))i.length>u_?r.push(i.slice(0,u_)+Xv):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(M8,"getIndexedValues");var d_=0,eU=0;function tU(){eU=Date.now()-performance.now()}o(tU,"adjustStartTime");tU();var v8=6e4;setInterval(tU,v8).unref();function U8(){let e=performance.now()+eU;return e>d_?(d_=e,e):(d_+=488e-6,d_)}o(U8,"getNextMonotonicTime");rU.exports={validateEnv:P8,stringifyData:L8,convertKeyValueToWrite:D8,getNextMonotonicTime:U8,getIndexedValues:M8}});var fm=D((BCe,nU)=>{"use strict";var x8=(H(),M(Y)).OPERATIONS_ENUM,DA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=x8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};nU.exports=DA});var _e=D((kCe,oU)=>{"use strict";var Iu=Kr(),B8=j(),F8=(H(),M(Y)),f_=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,sU),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&&B8[s](i)}},MA=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}},vA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function sU(e,t,r,n=F8.LOG_LEVELS.ERROR,s=null,i=!1){if(iU(e))return e;let a=new f_(e,t,r,n,s);return i&&delete a.stack,a}o(sU,"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 UA=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 iU(e){return e.__proto__.constructor.name===f_.name}o(iU,"isHDBError");oU.exports={isHDBError:iU,handleHDBError:sU,ClientError:MA,ServerError:vA,AccessViolation:UA,Violation:wu,hdbErrors:Iu}});var mm=D((GCe,uU)=>{"use strict";var qCe=fm(),m_=(H(),M(Y)),xA=oe(),aU=j(),k8=require("uuid"),{handleHDBError:p_,hdbErrors:H8}=_e(),{HDB_ERROR_MSGS:h_,HTTP_STATUS_CODES:E_}=H8;uU.exports=cU;function cU(e,t,r){for(let s=0;s<t.length;s++)lU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];q8(i,r,e.operation)}}o(cU,"processRows");cU.validateAttribute=lU;function lU(e){if(Buffer.byteLength(String(e))>m_.INSERT_MAX_CHARACTER_SIZE)throw p_(new Error,h_.ATTR_NAME_LENGTH_ERR(e),E_.BAD_REQUEST,void 0,void 0,!0);if(xA.isEmptyOrZeroLength(e)||xA.isEmpty(e.trim()))throw p_(new Error,h_.ATTR_NAME_NULLISH_ERR,E_.BAD_REQUEST,void 0,void 0,!0)}o(lU,"validateAttribute");function q8(e,t,r){if(!e.hasOwnProperty(t)||xA.isEmptyOrZeroLength(e[t])){if(r===m_.OPERATIONS_ENUM.INSERT||r===m_.OPERATIONS_ENUM.UPSERT){e[t]=k8.v4();return}throw aU.error("Update transaction aborted due to record with no hash value:",e),p_(new Error,h_.RECORD_MISSING_HASH_ERR,E_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>m_.INSERT_MAX_CHARACTER_SIZE)throw aU.error(e),p_(new Error,h_.HASH_VAL_LENGTH_ERR,E_.BAD_REQUEST,void 0,void 0,!0)}o(q8,"validateHash")});function _U(e){FA=e}function K8(){V8=setInterval(function(){for(let e of BA)if(e.stale){let t=e.getContext()?.url;pU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},$8).unref()}var kA,mU,pU,hU,EU,dU,BA,G8,Ao,pm,fU,FA,bo,__,$8,V8,hm=ie(()=>{kA=w(Cn()),mU=w(_e()),pU=w(j()),hU=w(ae());H();EU=w(oe()),dU=100,BA=new Set,G8=(0,EU.convertToMS)(hU.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Ao={CLOSED:0,OPEN:1,LINGERING:2};o(_U,"replicationConfirmation");bo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Ao.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===Ao.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),BA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(BA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(pm&&!this.overloadChecked&&performance.now()-fU>G8)throw new mU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Ao.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Ao.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,kA.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?Ao.LINGERING:Ao.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)<dU>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return pm||(pm=s,fU=performance.now(),pm.then(()=>{pm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];FA&&p&&i.push(FA(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)+dU/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=Ao.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},__=class extends bo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,kA.getNextMonotonicTime)())}getReadTxn(){}},$8=3e4;o(K8,"startMonitoringTxns");K8()});var gU,Qn,HA,Nu=ie(()=>{gU=require("events"),Qn=class extends gU.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new HA;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)}},HA=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 Rt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Ao.OPEN&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new bo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,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 SU,Ca=ie(()=>{SU=w(oi());hm();o(Rt,"transaction");(0,SU._assignPackageExport)("transaction",Rt);Rt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Rt.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 GA={};Ie(GA,{add:()=>g_,applyReverse:()=>TU,getRecordAtTime:()=>qA,rebuildUpdateBefore:()=>S_});function g_(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 S_(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,g_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function TU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Y8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=yU}}function qA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Ut(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":TU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===yU&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Ut(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var Y8,yU,T_=ie(()=>{Io();o(g_,"add");g_.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)};Y8={add:g_};o(S_,"rebuildUpdateBefore");o(TU,"applyReverse");yU={};o(qA,"getRecordAtTime")});var Jn=D(R_=>{var y_=j();for(let e of["trace","debug","info","warn","error","fatal","notify"])y_.logsAtLevel(e)&&(R_[e]=y_[e]);R_.loggerWithTag=e=>y_.loggerWithTag(e,!0);R_.setLogLevel=y_.setLogLevel});var CU={};Ie(CU,{parse:()=>KA,streamAsJSON:()=>_m,stringify:()=>Vc});function _m(e){return new $A({value:e})}function RU(e){return console.error(e),JSON.stringify(Em(e))}function AU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Vc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===wU)return NU(e);if(t.resolution)return t.resolution.then(()=>Vc(e));throw t}}function NU(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+=NU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Vc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function KA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),j8.test(e)?W8.parse(e):JSON.parse(e)):null}var bU,VA,IU,W8,z8,wU,Em,$A,j8,YA=ie(()=>{bU=require("stream"),VA=w(j()),IU=w(require("json-bigint-fixes")),W8=(0,IU.default)({useNativeBigInt:!0}),z8=1e4,wU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw wU};({errorToString:Em}=VA);o(_m,"streamAsJSON");$A=class extends bU.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=>(VA.warn("Error serializing in stream",c),a={done:!1,value:{error:Em(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:Em(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),RU)}catch(s){yield RU(s)}else yield Vc(t)}else yield Vc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);AU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Em(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>z8?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 AU(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(Em(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(RU,"handleError");o(AU,"when");o(Vc,"stringify");o(NU,"jsStringify");j8=/[[,:]\s*-?\d{16,}/;o(KA,"parse")});var FU={};Ie(FU,{asyncSerialization:()=>JA,contentTypes:()=>QA,findBestSerializer:()=>b_,getDeserializer:()=>Oo,hasAsyncSerialization:()=>XA,registerContentHandlers:()=>Tm,serialize:()=>ym,serializeMessage:()=>Co,toCsvStream:()=>A_});function Q8(e){try{return e?.[0]===123?jA(e):e}catch{return e}}function Tm(e){e.register(J8,{serializers:[{regex:/^application\/json$/,serializer:_m},{regex:/^application\/cbor$/,serializer:o(function(t){return new Kc.EncoderStream(Sm).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Yc.Readable.from((0,Bi.encodeIter)(t,Sm)):(0,Bi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),A_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Bi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Kc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function b_(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=an.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 LU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(an.keys()).join(", "),406);n=an.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function ym(e,t,r){let n=PU&&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 Is)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=b_(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&e&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),zA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,No.createBrotliCompress)({params:{[No.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?No.constants.BROTLI_MODE_TEXT:No.constants.BROTLI_MODE_GENERIC,[No.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>PU?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,No.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function Co(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;wo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=b_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=gm(e);return wo?.length>0?(wo.length===1?wo[0]:Promise.all(wo)).then(()=>Co(e,t,!0)):n}finally{wo=void 0}}function JA(e){if(wo)wo.push(e);else throw new Error("Unable to serialize asynchronously")}function XA(){return!!wo}function X8(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 eZ(e){return Z8.includes(e)}function tZ(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 Oo(e="",t=!1){let r=tZ(e),n=r.type&&an.get(r.type)?.deserialize||rZ(r);return t?s=>X8(s).then(n):n}function rZ(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!eZ(e.parameters.charset)&&zA.default.info(`Unknown Buffer encoding ${e.parameters.charset} in content-type. Proceeding anyways.`),t=>({contentType:e.type,data:t.toString(e.parameters?.charset||"utf-8")})):e.type==="application/octet-stream"?t=>t:t=>{if(e.type==="")try{if(t?.[0]===123)return jA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function nZ(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}function A_(e,t){let r=Yc.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 vU.Transform(n,s);return r.pipe(i)}var Bi,Kc,No,LU,Yc,DU,WA,MU,zA,vU,UU,xU,gm,jA,Sm,an,QA,OU,BU,J8,PU,wo,Z8,Po=ie(()=>{YA();Bi=require("msgpackr"),Kc=require("cbor-x"),No=require("zlib"),LU=w(_e()),Yc=w(require("stream"));xr();DU=w(oi()),WA=w(ae());H();MU=w(require("yaml")),zA=w(Jn());ws();vU=require("json2csv"),UU=w(require("fastify-plugin")),xU=WA.default.get(B.SERIALIZATION_BIGINT)!==!1,gm=xU?Vc:JSON.stringify,jA=xU?KA:JSON.parse,Sm={useRecords:!1,useToJSON:!0},an=new Map,QA=an;Ue.contentTypes=QA;(0,DU._assignPackageExport)("contentTypes",QA);an.set("application/json",{serializeStream:_m,serialize:gm,deserialize(e){return jA(e)},q:.8});OU=new Kc.Encoder(Sm);an.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Kc.EncoderStream(Sm).end(e)},serialize:OU.encode,deserialize:OU.decode,q:1});an.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Yc.Readable.from((0,Bi.encodeIter)(e,Sm)):(0,Bi.pack)(e)},serialize:Bi.pack,deserialize:Bi.unpack,q:.9});an.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),A_(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),A_(e,e?.getColumns?.())},q:.1});an.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Yc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});an.set("text/yaml",{serialize(e){return MU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});an.set("text/event-stream",{serializeStream:o(function(e){return Yc.Readable.from(nZ(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
1
|
+
"use strict";var GX=Object.create;var em=Object.defineProperty;var $X=Object.getOwnPropertyDescriptor;var VX=Object.getOwnPropertyNames;var KX=Object.getPrototypeOf,YX=Object.prototype.hasOwnProperty;var o=(e,t)=>em(e,"name",{value:t,configurable:!0});var ie=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ie=(e,t)=>{for(var r in t)em(e,r,{get:t[r],enumerable:!0})},cv=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of VX(t))!YX.call(e,s)&&s!==r&&em(e,s,{get:()=>t[s],enumerable:!(n=$X(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?GX(KX(e)):{},cv(t||!e||!e.__esModule?em(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>cv(em({},"__esModule",{value:!0}),e);var yt=M((ACe,dv)=>{var{join:WX,dirname:lv}=require("node:path"),{existsSync:zX,readFileSync:jX}=require("node:fs");function QX(){let t=__dirname,r,n=0;for(;!zX(r=WX(t,"package.json"));)if(t===(t=lv(t))||n++>10)throw new Error("Could not find package root");return r}o(QX,"findPackageJson");var uv=QX(),JX=JSON.parse(jX(uv,"utf8")),XX=lv(uv);dv.exports={packageJson:JX,PACKAGE_ROOT:XX}});var Y={};Ie(Y,{AUTH_AUDIT_STATUS:()=>ii,AUTH_AUDIT_TYPES:()=>Ia,BOOT_PROPS_FILE_NAME:()=>y5,BOOT_PROP_PARAMS:()=>pv,CLUSTERING_FLAG:()=>bA,CLUSTERING_PROCESSES:()=>c5,CLUSTER_MESSAGE_TYPE_ENUM:()=>AA,CLUSTER_OPERATIONS:()=>B5,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>hv,DATABASES_DIR_NAME:()=>Gc,DATABASES_PARAM_CONFIG:()=>q5,DEFAULT_DATABASE_NAME:()=>u5,ESCAPED_FORWARD_SLASH_REGEX:()=>S5,FORWARD_SLASH_REGEX:()=>_5,FUNC_VAL:()=>X5,GEO_CONVERSION_ENUM:()=>k5,HDB_COMPONENT_CONFIG_FILE:()=>t5,HDB_CONFIG_FILE:()=>ZX,HDB_DEFAULT_CONFIG_FILE:()=>e5,HDB_FILE_PERMISSIONS:()=>A5,HDB_HOME_DIR_NAME:()=>T5,HDB_PID_FILE:()=>l5,HDB_PROCESS_SERVICES:()=>a5,HDB_PROC_NAME:()=>r5,HDB_RESTART_SCRIPT:()=>n5,HDB_ROOT_DIR_NAME:()=>SA,HDB_SETTINGS_NAMES:()=>nm,HDB_SUPPORT_ADDRESS:()=>mv,INFO_TABLE_HASH_ATTRIBUTE:()=>O5,INSERT_MAX_CHARACTER_SIZE:()=>N5,INSTALL_PROMPTS:()=>w5,ITC_EVENT_TYPES:()=>i_,JOB_STATUS_ENUM:()=>M5,JOB_TYPE_ENUM:()=>G5,JWT_ENUM:()=>sm,LAUNCH_SERVICE_SCRIPTS:()=>f5,LEGACY_CONFIG_PARAMS:()=>H5,LEGACY_DATABASES_DIR_NAME:()=>r_,LICENSE_FILE_NAME:()=>D5,LICENSE_KEY_DIR_NAME:()=>RA,LICENSE_VALUES:()=>$5,LOG_LEVELS:()=>tm,LOG_NAMES:()=>d5,METADATA_PROPERTY:()=>Y5,NODE_ERROR_CODES:()=>K5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>Q5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>j5,PRE_4_0_0_VERSION:()=>Z5,PROCESS_DESCRIPTORS:()=>o5,PROCESS_NAME_ENV_PROP:()=>I5,RAM_ALLOCATION_ENUM:()=>V5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>s_,REG_KEY_FILE_NAME:()=>L5,RESTART_TIMEOUT_MS:()=>R5,ROLE_TYPES_ENUM:()=>m5,S3_BUCKET_AUTH_KEYS:()=>U5,SEARCH_NOT_FOUND_MESSAGE:()=>h5,SEARCH_WILDCARDS:()=>J5,SERVICE_ACTIONS_ENUM:()=>F5,SUPPORT_HELP_MSG:()=>p5,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>P5,SYSTEM_SCHEMA_NAME:()=>rm,SYSTEM_TABLE_NAMES:()=>bu,THREAD_TYPES:()=>wA,TIME_STAMP_NAMES:()=>z5,TIME_STAMP_NAMES_ENUM:()=>W5,TRANSACTIONS_DIR_NAME:()=>b5,UNICODE_FORWARD_SLASH:()=>g5,UNICODE_PERIOD:()=>E5,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>C5,VALID_S3_FILE_TYPES:()=>v5,VALID_SQL_OPS_ENUM:()=>x5,VALUE_SEARCH_COMPARATORS:()=>n_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>IA});var e_,t_,ZX,e5,SA,t5,r5,n5,fv,gA,TA,yA,s5,i5,o5,a5,c5,l5,u5,d5,tm,f5,m5,mv,p5,h5,E5,_5,g5,S5,rm,T5,RA,y5,R5,A5,Gc,r_,b5,I5,pv,w5,N5,C5,bu,O5,P5,L5,D5,M5,V,v5,U5,x5,B5,F5,k5,nm,H5,B,hv,q5,G5,AA,$5,V5,K5,Y5,bA,Ev,_v,W5,z5,j5,n_,IA,Q5,J5,X5,s_,sm,i_,wA,Z5,ii,Ia,H=ie(()=>{e_=require("node:path"),t_=w(yt()),ZX="harperdb-config.yaml",e5="defaultConfig.yaml",SA="hdb",t5="config.yaml",r5="harperdb.js",n5="restartHdb.js",fv="HarperDB",gA="Custom Functions",TA="Clustering Hub",yA="Clustering Leaf",s5="Clustering Ingest Service",i5="Clustering Reply Service",o5={HDB:fv,CLUSTERING_HUB:TA,CLUSTERING_LEAF:yA,CLUSTERING_INGEST_SERVICE:s5,CLUSTERING_REPLY_SERVICE:i5,CUSTOM_FUNCTIONS:gA,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"},a5={harperdb:fv,"clustering hub":TA,"clustering leaf":yA,"custom functions":gA,custom_functions:gA,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},c5={CLUSTERING_HUB_PROC_DESCRIPTOR:TA,CLUSTERING_LEAF_PROC_DESCRIPTOR:yA},l5="hdb.pid",u5="data",d5={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},tm={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},f5={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,e_.join)(t_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,e_.join)(t_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,e_.join)(t_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},m5={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},mv="support@harperdb.io",p5=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${mv}`,h5="None of the specified records were found.",E5="U+002E",_5=/\//g,g5="U+002F",S5=/U\+002F/g,rm="system",T5=".harperdb",RA="keys",y5="hdb_boot_properties.file",R5=6e4,A5=448,Gc="database",r_="schema",b5="transactions",I5="PROCESS_NAME",pv={SETTINGS_PATH_KEY:"settings_path"},w5={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"},N5=250,C5={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},bu={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"},O5="info_id",P5={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"},L5="060493.ks",D5=".license",M5={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_REGISTRATION_INFO:"registration_info",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"},v5={CSV:".csv",JSON:".json"},U5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},x5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},B5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},F5={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},k5={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},nm={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"},H5={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",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_REQUESTQUEUELIMIT:"http_requestQueueLimit",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"},hv={settings_path:pv.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];hv[t.toLowerCase()]=t}q5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},G5={csv_file_load:"csv_file_load",csv_data_load:V.CSV_DATA_LOAD,csv_url_load:V.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},AA={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"},$5={VERSION_DEFAULT:"2.2.0"},V5={DEVELOPMENT:8192,DEFAULT:512},K5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},Y5=Symbol("metadata"),bA="__clustering__",Ev="__createdtime__",_v="__updatedtime__",W5={CREATED_TIME:Ev,UPDATED_TIME:_v},z5=[Ev,_v],j5=15984864e5,n_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},IA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},Q5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},J5=["*","%"],X5="func_val",s_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},sm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},i_={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"},wA={HTTP:"http"},Z5="3.x.x",ii={SUCCESS:"success",FAILURE:"failure"},Ia={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var $c=M((ICe,Tv)=>{"use strict";var gv=require("minimist");Tv.exports=e6;function e6(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Sv(process.env),n=Sv(gv(process.argv))):(r=process.env,n=gv(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(e6,"assignCMDENVVariables");function Sv(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(Sv,"objKeysToLowerCase")});var oi=M(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 NA=M((CCe,yv)=>{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 R=new Set;e.sync(p.map(N=>`${N}/**/*.ts`),{cwd:m}).forEach(N=>{let O=0,F=0;try{R.add(N),O=i(n(m,N)).mtimeMs-5e3,F=i(n(m,h,N.replace(/.ts$/,".js"))).mtimeMs}catch{}O>F&&(A=!0)}),e.sync(p.map(N=>`${N}/**/*.js`),{cwd:n(m,h)}).forEach(N=>{if(!R.has(N.replace(/.js$/,".ts")))try{l(n(m,h,N))}catch{}})}else A=!0;if(A){console.log("Compiling TypeScript...");let R=d("npx",["tsc"],{cwd:m});if(R.stdout?.length&&console.log(R.stdout.toString()),R.stderr?.length&&console.log(R.stderr.toString()),S){let N=n(t(),"harperdb-tsc.pid"),O=!1;if(s(N))try{process.kill(+a(N,"utf8"),0),O=!0}catch{}if(!O){console.log("Starting background TypeScript compilation...");let F=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});F.on("error",te=>{console.error("Error trying to compile TypeScript",te)}),F.pid&&c(N,String(F.pid),"utf-8"),F.unref()}}}}let E=yv.constructor,g=E._findPath;E._findPath=function(A,S,R){if(A.startsWith(".")&&!R&&S.length===1&&S[0].startsWith(m)&&!S[0].includes("node_modules")){let N=r(m,S[0]),O;N.startsWith(h)?O=n(m,r(h,N)):O=n(m,h,N),(A.endsWith(".js")||A.endsWith(".ts"))&&(A=A.slice(0,-3));let F=n(O,A),te=F+".js";if(s(te))return te;if(F.includes(".")&&s(F))return F}return g(A,S,R)}}});var im={};Ie(im,{server:()=>Ue});var Rv,Ue,xr=ie(()=>{Rv=w(oi()),Ue={};(0,Rv._assignPackageExport)("server",Ue)});var Vt=M((OCe,bv)=>{"use strict";var t6="__dbis__",r6="__txns__",n6="__environment_name__",s6="__dbi_defintion__",i6={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},o6=["__createdtime__","__updatedtime__"],a6="\uFFFF",Av={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},c6=Object.values(Av);bv.exports={AUDIT_STORE_NAME:r6,INTERNAL_DBIS_NAME:t6,DBI_DEFINITION_NAME:s6,SEARCH_TYPES:i6,TIMESTAMP_NAMES:o6,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:n6,TRANSACTIONS_DBI_NAMES_ENUM:Av,TRANSACTIONS_DBIS:c6,OVERFLOW_MARKER:a6}});var CA=M((PCe,Iv)=>{"use strict";var l6=require("util"),u6=require("path"),d6=require("child_process"),f6=l6.promisify(d6.execFile),m6=1e3*1e3*10;Iv.exports={findPs:p6};async function p6(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await f6("ps",["wwxo",`pid,${r}`],{maxBuffer:m6});for(let s of n.trim().split(`
|
|
2
|
+
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:u6.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(p6,"findPs")});var Kr=M((DCe,vv)=>{"use strict";var wv=(H(),D(Y)),Nv=Vt(),Cv={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},Ov=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Pv={500:Ov("There was an error processing your request."),400:"Invalid request"},h6=Pv[Cv.INTERNAL_SERVER_ERROR],E6={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},_6={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},g6={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},S6={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"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 ${Nv.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Nv.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},T6={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${wv.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 ${wv.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"},Lv={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"},y6={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."},R6={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},A6={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},b6={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},I6={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},Dv={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")},Mv={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")},w6={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"},N6={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},C6={...Lv,...g6,...E6,...y6,...R6,...A6,...b6,...I6,...T6,...Dv,...Mv,...w6,...N6,..._6};vv.exports={CHECK_LOGS_WRAPPER:Ov,HDB_ERROR_MSGS:C6,DEFAULT_ERROR_MSGS:Pv,DEFAULT_ERROR_RESP:h6,HTTP_STATUS_CODES:Cv,LMDB_ERRORS_ENUM:S6,AUTHENTICATION_ERROR_MSGS:Lv,VALIDATION_ERROR_MSGS:Dv,ITC_ERRORS:Mv}});var oe=M(Ae=>{"use strict";var wa=require("path"),kv=require("fs-extra"),wn=j(),Uv=require("fs-extra"),o_=require("os"),O6=require("net"),P6=require("recursive-iterator"),Ir=(H(),D(Y)),{PACKAGE_ROOT:L6}=yt(),D6=CA(),xv=require("papaparse"),a_=require("moment"),{inspect:M6}=require("util"),Bv=require("is-number"),v6=require("minimist"),U6=require("https"),x6=require("http"),B6=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,Hv=require("util").promisify(setTimeout),F6=100,k6=5,H6="",q6=4,Fv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=jn;Ae.isEmptyOrZeroLength=xi;Ae.arrayHasEmptyValues=V6;Ae.arrayHasEmptyOrZeroLengthValues=K6;Ae.buildFolderPath=Y6;Ae.isBoolean=qv;Ae.errorizeMessage=G6;Ae.stripFileExtension=z6;Ae.autoCast=j6;Ae.autoCastJSON=Gv;Ae.autoCastJSONDeep=PA;Ae.removeDir=Q6;Ae.compareVersions=J6;Ae.isCompatibleDataVersion=X6;Ae.escapeRawValue=Z6;Ae.unescapeValue=e8;Ae.stringifyProps=t8;Ae.timeoutPromise=n8;Ae.isClusterOperation=i8;Ae.getClusterUser=a8;Ae.checkGlobalSchemaTable=o8;Ae.getHomeDir=Vv;Ae.getPropsFilePath=r8;Ae.promisifyPapaParse=c8;Ae.removeBOM=Kv;Ae.createEventPromise=l8;Ae.checkProcessRunning=u8;Ae.checkSchemaTableExist=d8;Ae.checkSchemaExists=Yv;Ae.checkTableExists=Wv;Ae.getStartOfTomorrowInSeconds=f8;Ae.getLimitKey=m8;Ae.isObject=W6;Ae.isNotEmptyAndHasValue=$6;Ae.autoCasterIsNumberCheck=$v;Ae.backtickASTSchemaItems=p8;Ae.isPortTaken=s8;Ae.createForkArgs=h8;Ae.autoCastBoolean=E8;Ae.asyncSetTimeout=Hv;Ae.getTableHashAttribute=_8;Ae.doesSchemaExist=g8;Ae.doesTableExist=S8;Ae.stringifyObj=T8;Ae.ms_to_time=y8;Ae.changeExtension=R8;Ae.getEnvCliRootPath=LA;Ae.noBootFile=A8;Ae.httpRequest=b8;Ae.transformReq=I8;Ae.convertToMS=w8;Ae.PACKAGE_ROOT=L6;function G6(e){return e instanceof Error?e:new Error(e)}o(G6,"errorizeMessage");function jn(e){return e==null}o(jn,"isEmpty");function $6(e){return!jn(e)&&(e||e===0||e===""||qv(e))}o($6,"isNotEmptyAndHasValue");function xi(e){return jn(e)||e.length===0||e.size===0}o(xi,"isEmptyOrZeroLength");function V6(e){if(jn(e))return!0;for(let t=0;t<e.length;t++)if(jn(e[t]))return!0;return!1}o(V6,"arrayHasEmptyValues");function K6(e){if(xi(e))return!0;for(let t=0;t<e.length;t++)if(xi(e[t]))return!0;return!1}o(K6,"arrayHasEmptyOrZeroLengthValues");function Y6(...e){try{return e.join(wa.sep)}catch{console.error(e)}}o(Y6,"buildFolderPath");function qv(e){return jn(e)?!1:e===!0||e===!1}o(qv,"isBoolean");function W6(e){return jn(e)?!1:typeof e=="object"}o(W6,"isObject");function z6(e){return xi(e)?H6:e.slice(0,-q6)}o(z6,"stripFileExtension");function j6(e){return jn(e)||e===""||typeof e!="string"?e:Fv[e]!==void 0?Fv[e]:$v(e)===!0?Number(e):B6.test(e)?new Date(e):e}o(j6,"autoCast");function Gv(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(Gv,"autoCastJSON");function PA(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=PA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=PA(r);n!==r&&(e[t]=n)}return e}else return Gv(e)}o(PA,"autoCastJSONDeep");function $v(e){if(e.startsWith("0.")&&Bv(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Bv(e))}o($v,"autoCasterIsNumberCheck");async function Q6(e){if(xi(e))throw new Error(`Directory path: ${e} does not exist`);try{await Uv.emptyDir(e),await Uv.remove(e)}catch(t){throw wn.error(`Error removing files in ${e} -- ${t}`),t}}o(Q6,"removeDir");function J6(e,t){if(xi(e)){wn.info("Invalid current version sent as parameter.");return}if(xi(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(J6,"compareVersions");function X6(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(X6,"isCompatibleDataVersion");function Z6(e){if(jn(e))return e;let t=String(e);return t==="."?Ir.UNICODE_PERIOD:t===".."?Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD:t.replace(Ir.FORWARD_SLASH_REGEX,Ir.UNICODE_FORWARD_SLASH)}o(Z6,"escapeRawValue");function e8(e){if(jn(e))return e;let t=String(e);return t===Ir.UNICODE_PERIOD?".":t===Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD?"..":String(e).replace(Ir.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(e8,"unescapeValue");function t8(e,t){if(jn(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+o_.EOL}!xi(n)&&n[0]===";"?r+=" "+n+s+o_.EOL:xi(n)||(r+=n+"="+s+o_.EOL)}catch{wn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(t8,"stringifyProps");function Vv(){let e;try{e=o_.homedir()}catch{e=process.env.HOME}return e}o(Vv,"getHomeDir");function r8(){let e=wa.join(Vv(),Ir.HDB_HOME_DIR_NAME,Ir.BOOT_PROPS_FILE_NAME);return kv.existsSync(e)||(e=wa.join(__dirname,"../","hdb_boot_properties.file")),e}o(r8,"getPropsFilePath");function n8(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(n8,"timeoutPromise");async function s8(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=O6.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(s8,"isPortTaken");function i8(e){try{return Ir.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){wn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(i8,"isClusterOperation");function o8(e,t){let r=(Oe(),D(mt)).getDatabases();if(!r[e])return c_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return c_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(o8,"checkGlobalSchemaTable");function a8(e,t){if(jn(t)){wn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(jn(e)||xi(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(a8,"getClusterUser");function c8(){xv.parsePromise=function(e,t,r){return new Promise(function(n,s){xv.parse(e,{header:!0,transformHeader:Kv,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(c8,"promisifyPapaParse");function Kv(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(Kv,"removeBOM");function l8(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;wn.info(`Got cluster status event response: ${M6(s)}`);try{i.cancel()}catch{wn.error("Error trying to cancel timeout.")}n(s)})})}o(l8,"createEventPromise");async function u8(e){let t=!0,r=0;do await Hv(F6*r++),(await D6.findPs(e)).length>0&&(t=!1);while(t&&r<k6);if(t)throw new Error(`process ${e} was not started`)}o(u8,"checkProcessRunning");function d8(e,t){let r=Yv(e);if(r)return r;let n=Wv(e,t);if(n)return n}o(d8,"checkSchemaTableExist");function Yv(e){let{getDatabases:t}=(Oe(),D(mt));if(!t()[e])return c_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Yv,"checkSchemaExists");function Wv(e,t){let{getDatabases:r}=(Oe(),D(mt));if(!r()[e][t])return c_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Wv,"checkTableExists");function f8(){let e=a_().utc().add(1,"d").startOf("d").unix(),t=a_().utc().unix();return e-t}o(f8,"getStartOfTomorrowInSeconds");function m8(){return a_().utc().format("DD-MM-YYYY")}o(m8,"getLimitKey");function p8(e){try{let t=new P6(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){wn.error("Got an error back ticking items."),wn.error(t)}}o(p8,"backtickASTSchemaItems");function h8(e){return[e]}o(h8,"createForkArgs");function E8(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(E8,"autoCastBoolean");function _8(e,t){let{getDatabases:r}=(Oe(),D(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(_8,"getTableHashAttribute");function g8(e){let{getDatabases:t}=(Oe(),D(mt));return t()[e]!==void 0}o(g8,"doesSchemaExist");function S8(e,t){let{getDatabases:r}=(Oe(),D(mt));return r()[e]?.[t]!==void 0}o(S8,"doesTableExist");function T8(e){try{return JSON.stringify(e)}catch{return e}}o(T8,"stringifyObj");function y8(e){let t=a_.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(y8,"ms_to_time");function R8(e,t){let r=wa.basename(e,wa.extname(e));return wa.join(wa.dirname(e),r+t)}o(R8,"changeExtension");function LA(){if(process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=v6(process.argv);if(e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(LA,"getEnvCliRootPath");var OA;function A8(){if(OA)return OA;let e=LA();if(LA()&&kv.pathExistsSync(wa.join(e,Ir.HDB_CONFIG_FILE)))return OA=!0,!0}o(A8,"noBootFile");function b8(e,t){let r;return e.protocol==="http:"?r=x6:r=U6,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(b8,"httpRequest");function I8(e){if(!e.schema&&!e.database){e.schema=Ir.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(I8,"transformReq");function w8(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(w8,"convertToMS");var c_=Kr()});var Rt=M((xCe,eU)=>{"use strict";var um=(H(),D(Y)),N8=oe(),Nn=ae(),dm=require("path"),C8=require("minimist"),zv=require("fs-extra"),jv=require("lodash");Nn.initSync();var{CONFIG_PARAMS:Na,DATABASES_PARAM_CONFIG:om,SYSTEM_SCHEMA_NAME:l_}=um,am,cm,lm;function Qv(){if(am!==void 0)return am;if(Nn.getHdbBasePath()!==void 0)return am=Nn.get(Na.STORAGE_PATH)||dm.join(Nn.getHdbBasePath(),um.DATABASES_DIR_NAME),am}o(Qv,"getBaseSchemaPath");function Jv(){if(cm!==void 0)return cm;if(Nn.getHdbBasePath()!==void 0)return cm=Zv(l_),cm}o(Jv,"getSystemSchemaPath");function Xv(){if(lm!==void 0)return lm;if(Nn.getHdbBasePath()!==void 0)return lm=Nn.get(um.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||dm.join(Nn.getHdbBasePath(),um.TRANSACTIONS_DIR_NAME),lm}o(Xv,"getTransactionAuditStoreBasePath");function O8(e,t){let r=Nn.get(Na.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||dm.join(Xv(),e.toString())}o(O8,"getTransactionAuditStorePath");function Zv(e,t){e=e.toString(),t=t&&t.toString();let r=Nn.get(um.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||dm.join(Qv(),e)}o(Zv,"getSchemaPath");function P8(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,C8(process.argv));let n=r[Na.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!N8.isObject(n))throw a;i=n}for(let a of i){let c=a[l_];if(!c)continue;let l=Nn.get(Na.DATABASES);l=l??{};let u=c?.tables?.[t]?.[om.PATH];if(u)return jv.set(l,[l_,om.TABLES,t,om.PATH],u),Nn.setProperty(Na.DATABASES,l),u;let d=c?.[om.PATH];if(d)return jv.set(l,[l_,om.PATH],d),Nn.setProperty(Na.DATABASES,l),d}}let s=r[Na.STORAGE_PATH.toUpperCase()];if(s){if(!zv.pathExistsSync(s))throw new Error(s+" does not exist");let i=dm.join(s,e);return zv.mkdirsSync(i),Nn.setProperty(Na.STORAGE_PATH,s),i}return Jv()}o(P8,"initSystemSchemaPaths");function L8(){am=void 0,cm=void 0,lm=void 0}o(L8,"resetPaths");eU.exports={getBaseSchemaPath:Qv,getSystemSchemaPath:Jv,getTransactionAuditStorePath:O8,getTransactionAuditStoreBasePath:Xv,getSchemaPath:Zv,initSystemSchemaPaths:P8,resetPaths:L8}});var Cn=M((HCe,iU)=>{"use strict";var D8=Kr().LMDB_ERRORS_ENUM,FCe=require("lmdb"),M8=Vt(),kCe=require("buffer").Buffer,{OVERFLOW_MARKER:tU,MAX_SEARCH_KEY_LENGTH:u_}=M8,rU=["number","string","symbol","boolean","bigint"];function v8(e){if(e=e?.primaryStore||e,!e)throw new Error(D8.ENV_REQUIRED)}o(v8,"validateEnv");function U8(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(U8,"stringifyData");function x8(e){return e instanceof Date?e.valueOf():e}o(x8,"convertKeyValueToWrite");function B8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(rU.includes(typeof e))return e.length>u_?[e.slice(0,u_)+tU]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(rU.includes(typeof i))i.length>u_?r.push(i.slice(0,u_)+tU):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(B8,"getIndexedValues");var d_=0,nU=0;function sU(){nU=Date.now()-performance.now()}o(sU,"adjustStartTime");sU();var F8=6e4;setInterval(sU,F8).unref();function k8(){let e=performance.now()+nU;return e>d_?(d_=e,e):(d_+=488e-6,d_)}o(k8,"getNextMonotonicTime");iU.exports={validateEnv:v8,stringifyData:U8,convertKeyValueToWrite:x8,getNextMonotonicTime:k8,getIndexedValues:B8}});var fm=M((GCe,oU)=>{"use strict";var H8=(H(),D(Y)).OPERATIONS_ENUM,DA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=H8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};oU.exports=DA});var _e=M((VCe,lU)=>{"use strict";var Iu=Kr(),q8=j(),G8=(H(),D(Y)),f_=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,aU),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&&q8[s](i)}},MA=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}},vA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function aU(e,t,r,n=G8.LOG_LEVELS.ERROR,s=null,i=!1){if(cU(e))return e;let a=new f_(e,t,r,n,s);return i&&delete a.stack,a}o(aU,"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 UA=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 cU(e){return e.__proto__.constructor.name===f_.name}o(cU,"isHDBError");lU.exports={isHDBError:cU,handleHDBError:aU,ClientError:MA,ServerError:vA,AccessViolation:UA,Violation:wu,hdbErrors:Iu}});var mm=M((WCe,mU)=>{"use strict";var YCe=fm(),m_=(H(),D(Y)),xA=oe(),uU=j(),$8=require("uuid"),{handleHDBError:p_,hdbErrors:V8}=_e(),{HDB_ERROR_MSGS:h_,HTTP_STATUS_CODES:E_}=V8;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];K8(i,r,e.operation)}}o(dU,"processRows");dU.validateAttribute=fU;function fU(e){if(Buffer.byteLength(String(e))>m_.INSERT_MAX_CHARACTER_SIZE)throw p_(new Error,h_.ATTR_NAME_LENGTH_ERR(e),E_.BAD_REQUEST,void 0,void 0,!0);if(xA.isEmptyOrZeroLength(e)||xA.isEmpty(e.trim()))throw p_(new Error,h_.ATTR_NAME_NULLISH_ERR,E_.BAD_REQUEST,void 0,void 0,!0)}o(fU,"validateAttribute");function K8(e,t,r){if(!e.hasOwnProperty(t)||xA.isEmptyOrZeroLength(e[t])){if(r===m_.OPERATIONS_ENUM.INSERT||r===m_.OPERATIONS_ENUM.UPSERT){e[t]=$8.v4();return}throw uU.error("Update transaction aborted due to record with no hash value:",e),p_(new Error,h_.RECORD_MISSING_HASH_ERR,E_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>m_.INSERT_MAX_CHARACTER_SIZE)throw uU.error(e),p_(new Error,h_.HASH_VAL_LENGTH_ERR,E_.BAD_REQUEST,void 0,void 0,!0)}o(K8,"validateHash")});function TU(e){FA=e}function j8(){z8=setInterval(function(){for(let e of BA)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},W8).unref()}var kA,EU,_U,gU,SU,pU,BA,Y8,Ao,pm,hU,FA,bo,__,W8,z8,hm=ie(()=>{kA=w(Cn()),EU=w(_e()),_U=w(j()),gU=w(ae());H();SU=w(oe()),pU=100,BA=new Set,Y8=(0,SU.convertToMS)(gU.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Ao={CLOSED:0,OPEN:1,LINGERING:2};o(TU,"replicationConfirmation");bo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Ao.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===Ao.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),BA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(BA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(pm&&!this.overloadChecked&&performance.now()-hU>Y8)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===Ao.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Ao.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,kA.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?Ao.LINGERING:Ao.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 pm||(pm=s,hU=performance.now(),pm.then(()=>{pm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];FA&&p&&i.push(FA(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=Ao.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},__=class extends bo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,kA.getNextMonotonicTime)())}getReadTxn(){}},W8=3e4;o(j8,"startMonitoringTxns");j8()});var yU,Qn,HA,Nu=ie(()=>{yU=require("events"),Qn=class extends yU.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new HA;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)}},HA=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 At(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Ao.OPEN&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new bo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,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,Ca=ie(()=>{RU=w(oi());hm();o(At,"transaction");(0,RU._assignPackageExport)("transaction",At);At.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};At.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 GA={};Ie(GA,{add:()=>g_,applyReverse:()=>AU,getRecordAtTime:()=>qA,rebuildUpdateBefore:()=>S_});function g_(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 S_(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,g_(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=Q8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=bU}}function qA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Ut(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":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=Ut(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var Q8,bU,T_=ie(()=>{Io();o(g_,"add");g_.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)};Q8={add:g_};o(S_,"rebuildUpdateBefore");o(AU,"applyReverse");bU={};o(qA,"getRecordAtTime")});var Jn=M(R_=>{var y_=j();for(let e of["trace","debug","info","warn","error","fatal","notify"])y_.logsAtLevel(e)&&(R_[e]=y_[e]);R_.loggerWithTag=e=>y_.loggerWithTag(e,!0);R_.setLogLevel=y_.setLogLevel});var LU={};Ie(LU,{parse:()=>KA,streamAsJSON:()=>_m,stringify:()=>Vc});function _m(e){return new $A({value:e})}function IU(e){return console.error(e),JSON.stringify(Em(e))}function wU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Vc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===OU)return PU(e);if(t.resolution)return t.resolution.then(()=>Vc(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)+":"+Vc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function KA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),Z8.test(e)?J8.parse(e):JSON.parse(e)):null}var NU,VA,CU,J8,X8,OU,Em,$A,Z8,YA=ie(()=>{NU=require("stream"),VA=w(j()),CU=w(require("json-bigint-fixes")),J8=(0,CU.default)({useNativeBigInt:!0}),X8=1e4,OU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw OU};({errorToString:Em}=VA);o(_m,"streamAsJSON");$A=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=>(VA.warn("Error serializing in stream",c),a={done:!1,value:{error:Em(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:Em(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 Vc(t)}else yield Vc(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(Em(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>X8?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(Em(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(Vc,"stringify");o(PU,"jsStringify");Z8=/[[,:]\s*-?\d{16,}/;o(KA,"parse")});var qU={};Ie(qU,{asyncSerialization:()=>JA,contentTypes:()=>QA,findBestSerializer:()=>b_,getDeserializer:()=>Oo,hasAsyncSerialization:()=>XA,registerContentHandlers:()=>Tm,serialize:()=>ym,serializeMessage:()=>Co,toCsvStream:()=>A_});function eZ(e){try{return e?.[0]===123?jA(e):e}catch{return e}}function Tm(e){e.register(tZ,{serializers:[{regex:/^application\/json$/,serializer:_m},{regex:/^application\/cbor$/,serializer:o(function(t){return new Kc.EncoderStream(Sm).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Yc.Readable.from((0,Bi.encodeIter)(t,Sm)):(0,Bi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),A_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Bi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Kc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function b_(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=an.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(an.keys()).join(", "),406);n=an.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function ym(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 Is)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=b_(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&e&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),zA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,No.createBrotliCompress)({params:{[No.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?No.constants.BROTLI_MODE_TEXT:No.constants.BROTLI_MODE_GENERIC,[No.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,No.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function Co(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;wo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=b_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=gm(e);return wo?.length>0?(wo.length===1?wo[0]:Promise.all(wo)).then(()=>Co(e,t,!0)):n}finally{wo=void 0}}function JA(e){if(wo)wo.push(e);else throw new Error("Unable to serialize asynchronously")}function XA(){return!!wo}function rZ(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 sZ(e){return nZ.includes(e)}function iZ(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 Oo(e="",t=!1){let r=iZ(e),n=r.type&&an.get(r.type)?.deserialize||oZ(r);return t?s=>rZ(s).then(n):n}function oZ(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!sZ(e.parameters.charset)&&zA.default.info(`Unknown Buffer encoding ${e.parameters.charset} in content-type. Proceeding anyways.`),t=>({contentType:e.type,data:t.toString(e.parameters?.charset||"utf-8")})):e.type==="application/octet-stream"?t=>t:t=>{if(e.type==="")try{if(t?.[0]===123)return jA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function aZ(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}function A_(e,t){let r=Yc.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 Bi,Kc,No,vU,Yc,UU,WA,xU,zA,BU,FU,kU,gm,jA,Sm,an,QA,DU,HU,tZ,MU,wo,nZ,Po=ie(()=>{YA();Bi=require("msgpackr"),Kc=require("cbor-x"),No=require("zlib"),vU=w(_e()),Yc=w(require("stream"));xr();UU=w(oi()),WA=w(ae());H();xU=w(require("yaml")),zA=w(Jn());ws();BU=require("json2csv"),FU=w(require("fastify-plugin")),kU=WA.default.get(B.SERIALIZATION_BIGINT)!==!1,gm=kU?Vc:JSON.stringify,jA=kU?KA:JSON.parse,Sm={useRecords:!1,useToJSON:!0},an=new Map,QA=an;Ue.contentTypes=QA;(0,UU._assignPackageExport)("contentTypes",QA);an.set("application/json",{serializeStream:_m,serialize:gm,deserialize(e){return jA(e)},q:.8});DU=new Kc.Encoder(Sm);an.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Kc.EncoderStream(Sm).end(e)},serialize:DU.encode,deserialize:DU.decode,q:1});an.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Yc.Readable.from((0,Bi.encodeIter)(e,Sm)):(0,Bi.pack)(e)},serialize:Bi.pack,deserialize:Bi.unpack,q:.9});an.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),A_(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),A_(e,e?.getColumns?.())},q:.1});an.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Yc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});an.set("text/yaml",{serialize(e){return xU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});an.set("text/event-stream",{serializeStream:o(function(e){return Yc.Readable.from(aZ(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
3
3
|
`),e.data){let r=e.data;typeof r=="object"&&(r=gm(r)),t+="data: "+r+`
|
|
4
4
|
`}return e.id&&(t+="id: "+e.id+`
|
|
5
5
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -8,36 +8,36 @@
|
|
|
8
8
|
|
|
9
9
|
`:`data: ${e}
|
|
10
10
|
|
|
11
|
-
`},"serialize"),compressible:!1,q:.8});an.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()}});BU={type:"application/json",serializeStream:_m,serialize:gm,deserialize:Q8,q:.5};an.set("*/*",BU);an.set("",BU);o(Q8,"tryJSONParse");o(Tm,"registerContentHandlers");J8=(0,UU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=b_(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(b_,"findBestSerializer");PU=WA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);o(ym,"serialize");o(Co,"serializeMessage");o(JA,"asyncSerialization");o(XA,"hasAsyncSerialization");o(X8,"streamToBuffer");Z8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(eZ,"isBufferEncoding");o(tZ,"parseContentType");o(Oo,"getDeserializer");o(rZ,"deserializerUnknownType");o(nZ,"transformIterable");o(A_,"toCsvStream")});var sb={};Ie(sb,{Blob:()=>Is,blobsWereEncoded:()=>Wc,databasePaths:()=>eb,decodeBlobsWithWrites:()=>M_,decodeFromDatabase:()=>zc,decodeWithBlobCallback:()=>wm,deleteBlob:()=>P_,deleteBlobsInObject:()=>Oa,deleteRootBlobPathsForDB:()=>nb,encodeBlobsAsBuffers:()=>mZ,encodeBlobsWithFilePath:()=>D_,findBlobsInObject:()=>Ou,getFileId:()=>L_,getFilePathForBlob:()=>WU,getRootBlobPathsForDB:()=>Im,setDeletionDelay:()=>aZ});function VU(){}function P_(e){let t=WU(e);t&&setTimeout(()=>{(0,nt.unlink)(t,r=>{r&&Lo.default.debug?.("Error trying to remove blob file",r)})},KU)}function aZ(e){KU=e}function YU(e){let t=On.get(e);if(!t)t={storageIndex:0,fileId:null,store:Pn},On.set(e,t);else{if(t.fileId)return t;t.store=Pn}return lZ(t),t.source?ZA(e,t.source,t):t.contentBuffer?cZ(e,t):ZA(e,Am.Readable.from(e.stream()),t),t}function ZA(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,nt.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(iZ),p=(0,C_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(sZ),t.pipe(f)),t.on("error",E);function h(g){let A=BigInt(g),S=new Uint8Array(wr),R=new DataView(S.buffer);return A|=BigInt(a?rb:$U)<<48n,R.setBigInt64(0,A),S}o(h,"createHeader");function E(g){i.unlock(d,0);let A=f.fd;g?(A&&(0,nt.close)(A),u(g)):c?(0,nt.fdatasync)(A,S=>{S&&u(S),l(),(0,nt.close)(A)}):(l(),(0,nt.close)(A))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-wr;e.size=g,(0,nt.write)(f.fd,h(g),0,wr,0,E)}})}),e}function L_(e){return On.get(e)?.fileId}function WU(e){let t=On.get(e);return t?.fileId&&bm(t)}function Im(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=eb.get(e);if(!t){if(!e.databaseName)return Lo.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,O_.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Mo.join)(n,e.databaseName)):t=[(0,Mo.join)((0,O_.getHdbBasePath)(),"blobs",e.databaseName)],eb.set(e,t)}return t}async function nb(e){let t=Im(e);t&&await Promise.all(t.map(r=>zU(r)))}async function zU(e){if((0,nt.existsSync)(e)){for(let t of await(0,Ns.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await zU((0,Mo.join)(e,t.name));else try{await(0,Ns.unlink)((0,Mo.join)(e,t.name))}catch(r){Lo.default.warn?.("Error deleting file",r)}try{await(0,Ns.rmdir)(e)}catch(t){Lo.default.warn?.("Error deleting directory",t)}}}function bm({storageIndex:e,fileId:t,store:r}){let n=Im(r);return(0,Mo.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 cZ(e,t){let r=t.contentBuffer,n=r.length;if(!(n<GU))return e.size=n,ZA(e,Am.Readable.from([r]),t)}function lZ(e){let t=Im(e.store),r=uZ(),n=t?.length>1?dZ(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=bm(e),a=(0,Mo.dirname)(i);(0,nt.existsSync)(a)||(0,tb.ensureDirSync)(a),e.filePath=i}function uZ(){let e=qU.get(Pn);if(!e){let t=0,r=Im(Pn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,nt.existsSync)(n))for(let c of(0,nt.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,Mo.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Pn.getUserSharedBuffer("blob-file-id",e.buffer)),qU.set(Pn,e)}return Number(Atomics.add(e,0,1n))}function dZ(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(N_);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,fZ(e)),e.frequencyTable[t%N_]}async function fZ(e){if(!Ns.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,Ns.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,tb.ensureDirSync)(s),a=await(0,Ns.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(N_),n=t.map(s=>1/s);for(let s=0;s<N_;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 D_(e,t,r){Cu=t,Pn=r,Wc=!1;try{return e()}finally{Cu=void 0,Pn=void 0}}function mZ(e){Yr=[];let t;try{t=e()}catch(n){throw Yr=void 0,n}let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r?r.then(()=>e()):t}function M_(e,t){try{Yr=[],Do=t,e()}catch(n){throw Do=void 0,Yr=void 0,n}Do=void 0;let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r}function wm(e,t,r){Pn=r;try{return Do=t,e()}finally{Do=void 0}}function zc(e,t){return Pn=t,e()}function Oa(e){Ou(e,t=>{P_(t)})}function Ou(e,t){if(e instanceof Is)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Ou(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Ou(e[r],t)}}function hZ(){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 Fi,Ns,nt,C_,Am,tb,O_,Mo,Lo,GU,wr,$U,rb,kU,sZ,iZ,HU,On,Do,Is,Cu,Yr,Pn,Wc,Rm,I_,oZ,w_,KU,eb,qU,N_,pZ,ws=ie(()=>{Fi=require("msgpackr"),Ns=require("node:fs/promises"),nt=require("node:fs"),C_=require("node:zlib"),Am=require("node:stream"),tb=require("fs-extra"),O_=w(ae());H();Mo=require("path"),Lo=w(Jn());Po();GU=8192,wr=8,$U=0,rb=1,kU=255,sZ=new Uint8Array([0,$U,255,255,255,255,255,255]),iZ=new Uint8Array([0,rb,255,255,255,255,255,255]),HU=0xffffffffffff,On=new WeakMap,Is=global.Blob||hZ(),Wc=!1,Rm=new Uint8Array(8),I_=new DataView(Rm.buffer),oZ=6e4;o(VU,"InstanceOfBlobWithNoConstructor");VU.prototype=Is.prototype;w_=class e extends VU{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=On.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):(XA()&&JA(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=On.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=bm(t),a,c=o(async()=>{let l,u=wr;try{if(l=await(0,Ns.readFile)(i),l.length>=wr){l.copy(Rm,0,0,wr);let f=I_.getBigUint64(0);if(Number(f>>48n)===kU)throw new Error("Error in blob: "+buffer.subarray(wr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<HU&&(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]===rb?new Promise((f,m)=>{(0,C_.deflate)(l.subarray(wr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(wr))},"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=On.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=bm(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,nt.open)(i,"r",(R,N)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Lo.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(R),p.#e?.forEach(O=>O(R))}else a=N,A(N)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,A=100;return new Promise(o(function S(R,N){function O(ee){(0,nt.close)(a),clearTimeout(d),u&&u.close(),N(ee),p.#e?.forEach(q=>q(ee))}o(O,"onError");let F=Buffer.allocUnsafe(262144);(0,nt.read)(a,F,0,F.length,c,(ee,q,k)=>{if(l+=q,ee)return O(ee);if(c===0){if(q<wr){A-- >0&&f!==!1?(h(),Lo.default.debug?.("File was empty, waiting for data to be written",i,A),setTimeout(()=>S(R,N),20).unref()):(Lo.default.debug?.("File was empty, throwing error",i,A),N(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Rm,0,0,wr);let J=I_.getBigUint64(0);if(Number(J>>48n)===kU)return O(new Error("Error in blob: "+k.subarray(wr)));if(g=Number(J&0xffffffffffffn),g<HU&&p.size!==g&&(p.size=g,p.#t))for(let W of p.#t)W(g);k=k.subarray(wr,q),l-=wr}else if(q===0){let J=Buffer.allocUnsafe(8);return(0,nt.read)(a,J,0,wr,0,W=>{if(W)return O(W);if(Rm.set(J),g=Number(I_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},oZ).unref():(u=(0,nt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(R,N))}),S(R,N)):m?O(new Error("Blob is incomplete")):(m=!0,S(R,N));return}(0,nt.close)(a),E.close(),R()})}else k=k.subarray(0,q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=q,S(R,N);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=g=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(J){return Lo.default.debug?.("Error enqueuing chunk",J),R()}l===g&&((0,nt.close)(a),E.close()),R()})},"readMore"))},"pull"),cancel(){(0,nt.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=On.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};On.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)};On.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(Pn=t?.primaryStore?.rootStore,!Pn)throw new Error("No target table specified");return YU(this).saving??Promise.resolve()}},KU=500;o(P_,"deleteBlob");o(aZ,"setDeletionDelay");global.createBlob=function(e,t){let r=new w_(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(On.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Am.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Am.Readable.from(e);else throw new Error("Invalid source type");return r};o(YU,"saveBlob");o(ZA,"writeBlobWithStream");o(L_,"getFileId");o(WU,"getFilePathForBlob");eb=new Map;o(Im,"getRootBlobPathsForDB");o(nb,"deleteRootBlobPathsForDB");o(zU,"rimrafSteadily");o(bm,"getFilePath");o(cZ,"writeBlobWithBuffer");o(lZ,"generateFilePath");qU=new Map;o(uZ,"getNextFileId");N_=128;o(dZ,"getNextStorageIndex");o(fZ,"createFrequencyTableForStoragePaths");o(D_,"encodeBlobsWithFilePath");o(mZ,"encodeBlobsAsBuffers");o(M_,"decodeBlobsWithWrites");o(wm,"decodeWithBlobCallback");o(zc,"decodeFromDatabase");o(Oa,"deleteBlobsInObject");o(Ou,"findBlobsInObject");pZ=new Fi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Fi.addExtension)({Class:Is,type:11,unpack:o(function(e){let t=pZ.unpack(e),r=new w_;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(On.set(r,{storageIndex:t[1],fileId:t[2],store:Pn}),Do)return Do(r)??r;if(!Pn)throw new Error("No store specified, cannot load blob from storage")}else On.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=On.get(e);if(Cu!==void 0&&(Wc=!0,t?.recordId!==void 0&&t.recordId!==Cu))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<GU)return r.size=t.contentBuffer.length,(0,Fi.pack)([r,t.contentBuffer])}if(Cu!==void 0){if(t=YU(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Cu,(0,Fi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Do)return Do(e),(0,Fi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,nt.readFileSync)(bm(t));if(n.length>=wr&&(n.copy(Rm,0,0,wr),Number(I_.getBigUint64(0)&0xffffffffffffn)===n.length-wr))return Buffer.concat([(0,Fi.pack)([r]),n]);if(Yr)Yr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Yr)return Yr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Fi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(hZ,"polyfillBlob")});var ZU={};Ie(ZU,{onStorageReclamation:()=>Nm,runReclamationHandlers:()=>cb,setAvailableSpaceRatioGetter:()=>_Z});function Nm(e,t,r){(r||(0,U_.getWorkerIndex)()===(0,U_.getWorkerCount)()-1)&&(v_.has(e)||v_.set(e,[]),v_.get(e).push({priority:0,handler:t}),ab||(ab=setTimeout(cb,QU).unref()))}async function cb(){for(let[e,t]of v_)try{let r=await XU(e),n=EZ/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&&(ob.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){ob.default.error?.("Error running storage reclamation handlers",r)}ab=setTimeout(cb,QU).unref()}function _Z(e){XU=e??JU}var ib,U_,ob,x_,jU,v_,EZ,QU,ab,JU,XU,B_=ie(()=>{ib=require("node:fs/promises"),U_=w(Je()),ob=w(Jn());H();x_=w(ae()),jU=w(oe());x_.default.initSync();v_=new Map,EZ=x_.default.get(B.STORAGE_RECLAMATION_THRESHOLD)??.4,QU=(0,jU.convertToMS)(x_.default.get(B.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Nm,"onStorageReclamation");JU=o(async e=>{if(ib.statfs){let t=await(0,ib.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"),XU=JU;o(cb,"runReclamationHandlers");o(_Z,"setAvailableSpaceRatioGetter")});var fx={};Ie(fx,{ACTION_32_BIT:()=>G_,ACTION_64_BIT:()=>yZ,AUDIT_STORE_OPTIONS:()=>Pm,Decoder:()=>Qc,HAS_BLOBS:()=>Ln,HAS_CURRENT_RESIDENCY_ID:()=>Jc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Mm,HAS_ORIGINATING_OPERATION:()=>Dm,HAS_PREVIOUS_RESIDENCY_ID:()=>Xc,REMOTE_SEQUENCE_UPDATE:()=>$_,createAuditEntry:()=>Zc,getLastRemoved:()=>SZ,openAuditStore:()=>H_,readAuditEntry:()=>Ut,removeAuditEntry:()=>q_,setAuditRetention:()=>TZ,transactionKeyEncoder:()=>cx});function H_(e){let t=e.auditStore=e.openDB(lb.AUDIT_STORE_NAME,{create:!1,...Pm});t||(t=e.auditStore=e.openDB(lb.AUDIT_STORE_NAME,Pm),tx(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=db;Nm(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()-ub/(1+i*i)})){try{m=q_(t,h,E)}catch(g){Pu.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=gZ){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,ub/10):(tx(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Om.getWorkerIndex)()===(0,Om.getWorkerCount)()-1&&c(),(0,Om.getWorkerIndex)()===0&&!ex)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(ex=!0,Pu.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function q_(e,t,r){let n=RZ(r),s;if(n&Ln){s=Ut(r);let i=e.tableStores[s.tableId],a=i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&zc(()=>Oa(s.getValue(i)),i.rootStore)}if((n&15)===fb){s=s||Ut(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function tx(e,t){mb[0]=t,e.put(Symbol.for("last-removed"),lx)}function SZ(e){let t=e.get(Symbol.for("last-removed"));if(t)return lx.set(t),mb[0]}function TZ(e,t=db){ub=e,db=t}function Zc(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=ux[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Pa.setFloat64(0,n):Cs.set(pb),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}A(s),A(t),g(r),Pa.setFloat64(h,e),h+=8,l&Jc&&A(u),l&Xc&&A(d),l&Mm&&(Pa.setFloat64(h,f),h+=8),l&Dm&&A(dx[m]),i?g(i):Cs[h++]=0,l?Pa.setUint32(n?8:0,p|l|3221225472):Cs[n?8:0]=p;let E=Cs.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let R=h;h+=1,h=(0,jc.writeKey)(S,Cs,h);let N=h-R-1;N>127?N>16383?(Pu.error("Key or username was too large for audit entry",S),h=R+1,Cs[R]=0):(Cs.copyWithin(R+2,R+1,h),Pa.setUint16(R,N|32768),h++):Cs[R]=N}function A(S){S<128?Cs[h++]=S:S<16384?(Pa.setUint16(h,S|32768),h+=2):S<1056964608?(Pa.setUint32(h,S|3221225472),h+=4):(Cs[h]=255,Pa.setUint32(h+1,S),h+=5)}}function RZ(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Qc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Ut(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Qc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&Jc&&(m=n.readInt()),i&Xc&&(p=n.readInt()),i&Mm&&(h=n.readFloat64()),i&Dm){let R=n.readInt();E=dx[R]}l=n.readInt();let g=n.position,A=n.position+=l,S;return{type:ux[i&7],tableId:c,nodeId:a,get recordId(){return(0,jc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return A>g?(0,jc.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(R,N,O){if(i&F_||i&Cm&&!N)return S||(S=zc(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),S;if(i&Cm&&O)return qA(R.getEntry(this.recordId),O,R)},getBinaryValue(){return i&(F_|Cm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Pu.error("Reading audit entry error",n,e),{}}}var jc,k_,lb,Om,ax,Pu,Cs,Pa,cx,Pm,ub,gZ,mb,lx,db,ex,F_,Cm,rx,fb,nx,sx,ix,ox,G_,yZ,$_,Jc,Xc,Dm,Mm,Ln,ux,dx,Qc,Io=ie(()=>{jc=require("ordered-binary"),k_=w(ae()),lb=w(Vt());H();Om=w(Je()),ax=w(oe());el();Pu=w(j());T_();ws();B_();(0,k_.initSync)();Cs=Buffer.alloc(2816),Pa=new DataView(Cs.buffer,Cs.byteOffset,2816),cx={writeKey(e,t,r){return e===Lm?(t.set(Lm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,jc.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,jc.readKey)(e,t,r)}},Pm={encoding:"binary",keyEncoder:cx},ub=(0,ax.convertToMS)((0,k_.get)(B.LOGGING_AUDITRETENTION))||86400*3,gZ=1e3,mb=new Float64Array(1),lx=new Uint8Array(mb.buffer),db=1e4,ex=!1;o(H_,"openAuditStore");o(q_,"removeAuditEntry");o(tx,"updateLastRemoved");o(SZ,"getLastRemoved");o(TZ,"setAuditRetention");F_=16,Cm=32,rx=1,fb=2,nx=3,sx=4,ix=5,ox=6,G_=14,yZ=15,$_=11,Jc=512,Xc=1024,Dm=2048,Mm=4096,Ln=8192,ux={put:rx|F_,[rx]:"put",delete:fb,[fb]:"delete",message:nx|F_,[nx]:"message",invalidate:sx|Cm,[sx]:"invalidate",patch:ix|Cm,[ix]:"patch",relocate:ox,[ox]:"relocate"},dx={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Zc,"createAuditEntry");o(RZ,"readAction");o(Ut,"readAuditEntry");Qc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function V_(){return hb||(hb=Ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),hb}function bZ(e){return e=e.replace(AZ,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 IZ(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 _b(e){let t=mx.default.createHash("shake128",{outputLength:4}),r;return(0,px.isIPv6)(e)?r=bZ(e):r=e.toLowerCase(),IZ(Uint8Array.from(t.update(r).digest()))}var mx,px,Eb,hb,AZ,gb=ie(()=>{Oe();mx=w(require("crypto")),px=require("node:net"),Eb=new Map;o(V_,"getAnalyticsHostnameTable");AZ=/(\d{1,3}\.){3}\d{1,3}$/;o(bZ,"normalizeIPv6");o(IZ,"nodeHashToNumber");o(_b,"stableNodeId")});var vo,Sb=ie(()=>{vo={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var W_={};Ie(W_,{addAnalyticsListener:()=>Bm,analyticsDelay:()=>Ab,calculateCPUUtilization:()=>Dx,diffResourceUsage:()=>Mx,onAnalyticsAggregate:()=>wb,recordAction:()=>Xe,recordActionBinary:()=>zr,recordHostname:()=>bb,setAnalyticsEnabled:()=>CZ});function CZ(e){Nx=e,clearTimeout(Um),Um=null}function OZ(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 PZ(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},Y_.set(e,a)}function Xe(e,t,r,n,s){if(!Nx)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=Y_.get(i);a?OZ(e,a):PZ(i,e,t,r,n,s),Um||LZ()}function zr(e,t,r,n,s){Xe(!!e,t,r,n,s)}function Bm(e){Ox.push(e)}function LZ(){Tb||=performance.now(),Um=setTimeout(async()=>{Um=null;let e=performance.now()-Tb;Tb=0;let t=[],r={time:Date.now(),period:e,threadId:tl.threadId,metrics:t};for(let[s,i]of Y_){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 Lx){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 vx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:tl.threadId,byThread:!0,...n});for(let s of Ox)s(t);Y_=new Map,tl.parentPort?tl.parentPort.postMessage({type:Cx,report:r}):Bx({report:r})},Ab).unref()}async function bb(){let e=Ue.hostname;Wr.trace?.("recordHostname server.hostname:",e);let t=_b(e);Wr.trace?.("recordHostname nodeId:",t);let r=V_();if(!await r.get(t)){let s={id:t,hostname:e};Wr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Lu(e,t){let r=Ue.hostname,n=Eb.get(r);n?Wr.trace?.("storeMetric cached nodeId:",n):(n=_b(r),Wr.trace?.("storeMetric new nodeId:",n),Eb.set(r,n));let s={id:[(0,Rb.getNextMonotonicTime)(),n],...t};Wr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Dx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Wr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function Mx(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 DZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:vo.TABLE_SIZE,database:t,table:s,size:c};Wr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),Lu(e,l),n+=c}return n}function hx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=wx.statSync(s.primaryStore.env.path).size,c=DZ(e,r,n),l=a-c,u={metric:vo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};Lu(e,u),Wr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wr.warn?.("Error getting DB size metrics",s)}}function Ex(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:vo.STORAGE_VOLUME,database:r,...i};Lu(e,a),Wr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Wr.warn?.("Error getting DB volume metrics",s)}}async function MZ(e,t=6e4){let r=Ib(),n=Ux(),s=new Promise(R=>{let N=performance.now();setImmediate(()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-N)+"ms"),N=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-N)+"ms"),R(O-N)})}),i;for(let R of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(R.value?.time){i=R.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:R,value:N}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!N)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:O,threadId:F}=N;for(let ee of O||[]){let{path:q,method:k,type:J,metric:W,count:ue,total:ce,distribution:re,threads:Re,...Te}=ee;ue||(ue=1);let Fe=W+(q?"-"+q:"");k!==void 0&&(Fe+="-"+k),J!==void 0&&(Fe+="-"+J);let qe=c.get(Fe);if(qe){if(qe.threads){let er=qe.threads[F];if(er)qe=er;else{qe.threads[F]={...Te};continue}}qe.count||(qe.count=1);let Rr=qe.count;for(let er in Te){let qt=Te[er];typeof qt=="number"&&(qe[er]=(qe[er]*Rr+qt*ue)/(Rr+ue))}qe.count+=ue,ce>=0&&(qe.total+=ce,qe.ratio=qe.total/qe.count)}else qe={period:t,...ee},delete qe.distribution,c.set(Fe,qe),qe.byThread&&(qe.threads=[],qe.threads[F]={...Te},u.push(qe));if(re){re=re.map(er=>typeof er=="number"?{value:er,count:1}:er);let Rr=l.get(Fe);Rr?Rr.push(...re):l.set(Fe,re)}}await vx()}for(let R of u){let{path:N,method:O,type:F,metric:ee,count:q,total:k,distribution:J,threads:W,...ue}=R;W=W.filter(ce=>ce);for(let ce in ue){if(typeof R[ce]!="number")continue;let re=0;for(let Re of W){let Te=Re[ce];typeof Te=="number"&&(re+=Te)}R[ce]=re}R.count=W.length,delete R.threads,delete R.byThread}for(let[R,N]of l){let O=c.get(R);N.sort((er,qt)=>er.value>qt.value?1:-1);let F=O.count-1,ee=[],q=0,k=0,J;for(let er of Lx){let qt=F*er;for(;q<qt;)J=N[k++],q+=J.count,k===1&&q--;let tr=N[k>1?k-2:0];J||(J=N[0]),ee.push(J.value-(J.value-tr.value)*(q-qt)/J.count)}let[W,ue,ce,re,Re,Te,Fe,qe,Rr]=ee;Object.assign(O,{p1:W,p10:ue,p25:ce,median:re,p75:Re,p90:Te,p95:Fe,p99:qe,p999:Rr})}let f;for(let[,R]of c)R.time=d,Lu(n,R),f=!0;if(f)for(let R of Px)R(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let R={metric:vo.MAIN_THREAD_UTILIZATION,idle:p-_x,active:h-gx,taskQueueLatency:await s,time:m,...process.memoryUsage()};Lu(n,R)}_x=p,gx=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Wr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=Mx(K_,E);Wr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=K_.time?m-K_.time:t,g.cpuUtilization=Dx(g,g.period);let A={metric:vo.RESOURCE_USAGE,...g};Lu(n,A),K_=E;let S=ct();hx(n,S),hx(n,{system:S.system}),Ex(n,S),Ex(n,{system:S.system})}async function Sx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Ib(){return Tx||(Tx=Ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Ux(){return yx||(yx=Ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function xZ(){xx=!0;let e=(0,xm.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await MZ(Ab,e),await Sx(Ib(),vZ),await Sx(Ux(),UZ)},Math.min(e/2,2147483647)).unref()}function Bx(e,t){let r=e.report;r.threadId=t?.threadId||tl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Rx+=n.mean*n.count);r.totalBytesProcessed=Rx,t&&(r.metrics.push({metric:vo.UTILIZATION,...t.performance.eventLoopUtilization(Ax.get(t))}),Ax.set(t,t.performance.eventLoopUtilization())),r.id=(0,Rb.getNextMonotonicTime)(),Ib().primaryStore.put(r.id,r),xx||xZ(),BZ&&(Fx=kZ(r))}async function kZ(e){if(await Fx,!La){let r=(0,vm.dirname)(wZ());try{La=await(0,yb.open)((0,vm.join)(r,"analytics.log"),"r+")}catch{La=await(0,yb.open)((0,vm.join)(r,"analytics.log"),"w+")}}let t=(await La.stat()).size;if(t>FZ){let r=Buffer.alloc(t);await La.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await La.write(r,{position:0}),await La.truncate(r.length),t=r.length}await La.write(JSON.stringify(e)+`
|
|
12
|
-
`,t)}function wb(e){e&&Px.push(e)}var tl,bx,Ix,vm,yb,Rb,xm,wx,wZ,NZ,Wr,Y_,Nx,Um,Tb,Ab,Cx,Ox,Px,Lx,_x,gx,K_,vx,vZ,UZ,Tx,yx,xx,Rx,Ax,BZ,Fx,La,FZ,Os=ie(()=>{tl=require("worker_threads"),bx=w(Je());Oe();Ix=w(j()),vm=require("path"),yb=require("fs/promises"),Rb=w(Cn()),xm=w(ae());H();xr();wx=w(require("node:fs"));gb();Sb();({getLogFilePath:wZ,forComponent:NZ}=Ix.default),Wr=NZ("analytics").conditional;(0,xm.initSync)();Y_=new Map,Nx=(0,xm.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;o(CZ,"setAnalyticsEnabled");o(OZ,"recordExistingAction");o(PZ,"recordNewAction");o(Xe,"recordAction");Ue.recordAnalytics=Xe;o(zr,"recordActionBinary");Tb=0,Ab=1e3,Cx="analytics-report",Ox=[],Px=[];o(Bm,"addAnalyticsListener");Lx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(LZ,"sendAnalytics");o(bb,"recordHostname");o(Lu,"storeMetric");o(Dx,"calculateCPUUtilization");o(Mx,"diffResourceUsage");o(DZ,"storeTableSizeMetrics");o(hx,"storeDBSizeMetrics");o(Ex,"storeVolumeMetrics");o(MZ,"aggregation");_x=0,gx=0,K_={userCPUTime:0,systemCPUTime:0},vx=o(()=>new Promise(setImmediate),"rest");o(Sx,"cleanup");vZ=36e5,UZ=31536e6;o(Ib,"getRawAnalyticsTable");o(Ux,"getAnalyticsTable");(0,bx.setChildListenerByType)(Cx,Bx);o(xZ,"startScheduledTasks");Rx=0,Ax=new Map,BZ=!1;o(Bx,"recordAnalytics");FZ=1e6;o(kZ,"logAnalytics");o(wb,"onAnalyticsAggregate")});var $x={};Ie($x,{ENTRY:()=>qZ,HAS_EXPIRATION:()=>Q_,HAS_RESIDENCY_ID:()=>Db,HAS_STRUCTURE_UPDATE:()=>J_,LAST_TIMESTAMP_PLACEHOLDER:()=>Lm,LOCAL_TIMESTAMP:()=>HZ,METADATA:()=>vu,NEW_TIMESTAMP_PLACEHOLDER:()=>Hx,NO_TIMESTAMP:()=>Nb,PENDING_LOCAL_TIME:()=>Mb,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>pb,RecordEncoder:()=>Lb,TIMESTAMP_ASSIGN_LAST:()=>$Z,TIMESTAMP_ASSIGN_NEW:()=>qx,TIMESTAMP_ASSIGN_PREVIOUS:()=>Gx,TIMESTAMP_PLACEHOLDER:()=>z_,TIMESTAMP_RECORD_PREVIOUS:()=>Cb,entryMap:()=>Da,handleLocalTimeForGets:()=>X_,lastMetadata:()=>lt,recordUpdater:()=>vb,removeEntry:()=>nl});function YZ(){return km[0]=km[0]^64,GZ.getFloat64(0)}function X_(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[vu],l.localTime=lt.localTime,l.residencyId=lt.residencyId,l.size=lt.size,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l.value&&Da.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&&(Da.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[vu],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,rl.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<rl.length;u++){let d=rl[u].deref();(!d||d.isDone||d.isCommitted)&&rl.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function vb(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Mu=i?.localTime?Cb|Gx:Nb:Mu=l?i?.localTime?Cb|16384:qx|16384:Nb;let p=u?.expiresAt;if(p>=0&&(c|=Q_),Fm=c,Ob=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Mu>0},E,g=0;try{let A=i?.residencyId,S=u?.residencyId;S&&(Pb=S,Fm|=Db,g|=Jc),A!==S&&(g|=Xc,A||(A=0)),c&Q_&&(g|=Mm),u?.originatingOperation&&(g|=Dm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Ln&&(r.getBinaryFast(i.localTime)||Oa(i.value));let R;if(s!==void 0&&(R=D_(()=>e.put(n,s,h),n,e.rootStore),Wc&&(g|=Ln)),l){let N=u?.user?.username;if(m&&(D_(()=>e.encoder.encode(m),n,e.rootStore),Wc&&(g|=Ln)),e.encoder.hasStructureUpdate&&(g|=J_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,F=r.get(O);if(F){let ee=Ut(F).previousLocalTime;return R=r.put(O,Zc(a,t,n,ee,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Du,g,S,A,p),{ifVersion:E}),R}}R=r.put(s===void 0?Hx:Lm,Zc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Du,g,S,A,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&VZ.has(d)&&Xe(Du?.length??1,"db-write",u.tableToTrack,null),R}catch(A){throw A.message+=" id: "+n+" options: "+h,A}}}function nl(e,t,r){if(t)return t.value&&t.metadataFlags&Ln&&!e.auditStore.getBinaryFast(t.localTime)&&Oa(t.value),e.remove(t.key,r)}var kx,j_,z_,Lm,pb,Hx,HZ,vu,qZ,km,GZ,Nb,qx,$Z,Gx,Cb,Q_,Db,Mb,J_,VZ,Da,KZ,Du,Mu,Fm,Ob,Pb,lt,Lb,rl,el=ie(()=>{kx=require("msgpackr");Io();j_=w(j());ws();ws();Os();z_=new Uint8Array([1,1,1,1,4,64,0,0]),Lm=new Uint8Array([1,1,1,1,1,0,0,0]),pb=new Uint8Array([1,1,1,1,3,64,0,0]),Hx=new Uint8Array([1,1,1,1,0,64,0,0]),HZ=Symbol("local-timestamp"),vu=Symbol("metadata"),qZ=Symbol("entry"),km=new Uint8Array(8),GZ=new DataView(km.buffer,0,8),Nb=0,qx=0,$Z=1,Gx=3,Cb=4,Q_=16,Db=32,Mb=1,J_=256,VZ=new Set(["put","patch","delete","message","publish"]),Da=new WeakMap,Mu=0,Fm=-1,Ob=-1,Pb=0,lt=null,Lb=class extends kx.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Da.get(this)?.version}getExpiresAt(){return Da.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Mu||Fm>=0){let c=0,l=Mu;l&&(c+=8,Mu=0);let u=Fm,d=Ob,f=Pb;u>=0&&(c+=4,Fm=-1,d>=0&&(c+=8,Ob=-1),f&&(c+=4,Pb=0));let m=KZ=n.call(this,i,a|2048|c);Du=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(z_[4]=l,z_[5]=l>>8,m.set(z_,p),p+=8),Wc&&(u|=Ln),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 Du=n.call(this,i,a),Du};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=YZ(),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&Q_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&Db&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=zc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return lt={localTime:l,[vu]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:zc(()=>super.decode(t,r),this.rootStore)}catch(c){return j_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(YZ,"getTimestamp");o(X_,"handleLocalTimeForGets");rl=[];setInterval(()=>{for(let e=0;e<rl.length;e++){let t=rl[e].deref();!t||t.isDone||t.isCommitted?rl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(j_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):j_.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(vb,"recordUpdater");o(nl,"removeEntry")});function Bb(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?Bb(f.conditions,f.operator,r,n,s,i,a,c):Fu(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",R=d(h.conditions,!S,p);return S?(N,O)=>R.some(F=>F(N,O)):(N,O)=>R.every(F=>F(N,O))}let g=(h.attribute||h[0])===r.primaryKey,A=qm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=t9(r.primaryStore,h.estimated_count,p)),A}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Fu(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 jr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],N=Hi(n.attributes,R);if(N.relationship){if(c.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=N.definition?.tableClass||N.elements?.definition?.tableClass,F=new Map,ee=Fu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,F);if(N.relationship.to){i[c[0]]=F;let q=!!Hi(O.attributes,N.relationship.to)?.elements;ee=JZ(ee,N,O.primaryStore,q,F)}if(N.relationship.from){let q=o(k=>(k?.key!==void 0&&(k=k.key),Fu({attribute:N.relationship.from,value:k},t,r,n,s,F)),"searchEntry");N.elements?(i[c[0]]=F,ee=XZ(ee,N,O.primaryStore,F,q)):ee=ee.flatMap(q)}return ee}else if(c.length===1)c=c[0];else throw new jr.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(Fb[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]=ki.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 jr.ClientError(`Unknown query comparator "${u}"`)}let A;if(typeof m=="string"&&m.length>Ps.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Ps.MAX_SEARCH_KEY_LENGTH)+Ps.OVERFLOW_MARKER,E=!1,A=qm(e,n,null,i,d)),typeof p=="string"&&p.length>Ps.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Ps.MAX_SEARCH_KEY_LENGTH)+Ps.OVERFLOW_MARKER,h=!0,A=A??qm(e,n,null,i,d)),r){let R=m;m=p,p=R,R=!E,E=!h,h=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new jr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new jr.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 jr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new jr.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??qm(e,n,null,i,d),!A)throw new jr.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 R=f.getRange(S).map(A?function({key:N,value:O}){return this?.isSync?O&&A(O)?N:Ma.SKIP:new Promise((F,ee)=>setImmediate(()=>{try{F(O&&A(O)?N:Ma.SKIP)}catch(q){ee(q)}}))}:N=>N.value==null&&!(N.metadataFlags&(Dn|va))?Ma.SKIP:(a?._freezeRecords&&Object.freeze(N.value),N));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:N,...O}=R,F=n.primaryStore.getEntry(N);return a?._freezeRecords&&Object.freeze(F?.value),{...O,...F}}return R}):f.getRange(S).map(A?function({key:R,value:N}){let O;return typeof R=="string"&&R.length>Ps.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(N):O={[c]:R},this.isSync?A(O)?N:Ma.SKIP:new Promise((F,ee)=>setImmediate(()=>{try{F(A(O)?N:Ma.SKIP)}catch(q){ee(q)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:N}){return this.isSync?N&&A(N)?R:Ma.SKIP:new Promise((O,F)=>setImmediate(()=>{try{O(N&&A(N)?R:Ma.SKIP)}catch(ee){F(ee)}}))})}function Hi(e,t){if(Array.isArray(t))if(t.length>1){let r=Hi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Hi(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 JZ(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 XZ(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 qm(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=Hi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=qm({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((R,N)=>{let O,F;return E?E.returnDirect?(O=E(R,r,N),F=lt):(F=E(R,r,N,!0),Array.isArray(F)?(O=F.map(ee=>ee.value),F=null):O=F?.value):O=R[d],{subObject:O,subEntry:F}},"getSubObject"),S=o((R,N)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=g(R);return g.idFilter&&(S.idFilter=g.idFilter),q}let{subObject:O,subEntry:F}=A(R,N);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(q){let k=A(q).subObject;return Array.isArray(k)?k.filter(h).map(J=>J[m.primaryKey]):k}}),O.some(h)):h(O,F):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),Fb[a]||a){case Ps.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,ki.compareKeys)(d,l[0])>=0&&(0,ki.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,ki.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,ki.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,ki.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,ki.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,ki.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new jr.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&&eg(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function A(S){let R=S[d],N;if(typeof R!="object"||!R||p?N=f(R):Array.isArray(R)?N=R.some(f):R instanceof Date&&(N=f(R.getTime())),m&&(g++,!N&&!A.idFilter&&++E/g*i>h)){let O=Fu(e,r.transaction.getReadTxn(),!1,t),F;A.to?F=O.flatMap(q=>t.primaryStore.get(q)[A.to]):F=O.map(ku);let ee=new Set(F);A.idFilter=q=>ee.has(ku(q)),A.idFilter.idSet=ee}return N}return o(A,"recordFilter"),s&&(A.idFilter=f),A}o(u,"attributeComparator")}function eg(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/Uo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Fb[n]||n,n===Ps.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=Hi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=eg(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*Uo(e.indices[i.relationship.from])/(Uo(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=Uo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=jZ*Uo(e.primaryStore)+1;else if(n==="between")r.estimated_count=zZ*Uo(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=Uo(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=WZ*Uo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function tg(e,t){if(e)if(xo=e,Uu.lastIndex=0,ZZ.test(e))try{if(t&&(t.conditions=[]),ai=t??new Bu,Hm(ai,""),Br!==xo.length&&Kt("Unable to parse query, unexpected end of query"),ai.parseErrorMessage&&(ai.parseError=new Ub(t.parseErrorMessage),!t))throw ai.parseError;return ai}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Br} in '${xo}'`,ai.parseErrorMessage&&(r.message+=", "+ai.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Kt(e){let t=`${e} at position ${Br}`;ai.parseErrorMessage=ai.parseErrorMessage?ai.parseErrorMessage+", "+t:t}function Hm(e,t){let r=Uu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(xo);){Br=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=Vx):(l=decodeURIComponent,i="equals",d||Kt("attribute must be specified before equality comparator"),s=xu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=QZ[f],l=xb[i]?Vx:decodeURIComponent,d||Kt(`attribute must be specified before comparator ${f}`),s=xu(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"&&Kx(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else Z_(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(xu(d)),s=void 0;break;case"(":Uu.lastIndex=Br;let p=Hm(d?[]:new Bu,")");switch(d){case"":Z_(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=Yx(p);break;default:Kt(`unknown query function call ${d}`)}xo[Br]===","?r.lastIndex=++Br: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"),Uu.lastIndex=Br,m=Hm([],"}"),m.name=d,e.push(m),xo[Br]===","?r.lastIndex=++Br:a=!0;break;case"[":if(Uu.lastIndex=Br,d?(m=Hm(new Bu,"]"),m.name=d):m=Hm(e.conditions?new Bu:[],"]"),e.conditions)if(Z_(e,u),xo[Br]==="="){l=decodeURIComponent,i="equals",s=xu(d),r.lastIndex=++Br;break}else e.conditions.push(m),s=null;else e.push(m);xo[Br]===","?r.lastIndex=++Br: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"&&Kx(h,d),Z_(e,u),e.conditions.push(h)}else d&&Kt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(xu(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?e9:Uu,r.lastIndex=Br),Br===xo.length)return e}t&&Kt(`expected '${t}', but encountered end of string`)}function Z_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Kt("Can not mix operators within a condition grouping"):e.operator=t)}function xu(e){return e.indexOf(".")>-1?e.split(".").map(xu):decodeURIComponent(e)}function Vx(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 jr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function Kx(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new jr.ClientError("wildcard can only be used at the end of a string")}function Yx(e){let t=Wx(e[0]);return e.length>1&&(t.next=Yx(e.slice(1))),t}function Wx(e){if(Array.isArray(e)){let t=Wx(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 ku(e){return Array.isArray(e)?e.join("\0"):e}function Uo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function t9(e,t,r){return t*r/Uo(e)}var jr,Ps,ki,Ma,WZ,zZ,jZ,QZ,xb,Fb,Ub,ZZ,Uu,e9,Br,ai,xo,Bu,rg=ie(()=>{jr=w(_e()),Ps=w(Vt()),ki=require("ordered-binary"),Ma=require("lmdb");ng();el();WZ=.3,zZ=.1,jZ=.05,QZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},xb={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(Bb,"executeConditions");o(Fu,"searchByIndex");o(Hi,"findAttribute");o(JZ,"joinTo");o(XZ,"joinFrom");Fb={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(qm,"filterByType");o(eg,"estimateCondition");Ub=class extends jr.Violation{static{o(this,"SyntaxViolation")}},ZZ=/[()[\]|!<>.]|(=\w*=)/,Uu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,e9=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(tg,"parseQuery");o(Kt,"recordError");o(Hm,"parseBlock");o(Z_,"assignOperator");o(xu,"decodeProperty");o(Vx,"typedDecoding");o(Kx,"wildcardDecoding");o(Yx,"toSortObject");o(Wx,"toSortEntry");Bu=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(ku,"flattenKey");o(Uo,"estimatedEntryCount");o(t9,"intersectionEstimate")});var zx,ci,sg=ie(()=>{zx=w(oi()),ci=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,zx._assignPackageExport)("Resource",Resource)});var Zx={};Ie(Zx,{MultiPartId:()=>ig,Resource:()=>Fr,contextStorage:()=>qu,snakeCase:()=>n9,transformForSelect:()=>Gu});function n9(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function jx(e,t){if(sl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(sl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new ig;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){sl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return sl=!0,null;e[e.length-1]==="/"&&(sl=!0)}return t.coerceId(decodeURIComponent(e))}function Mn(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 bo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Hu.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 ci,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ci,l.id=c,c==null&&(u=!0);l||(l=new ci,l.id=c),u&&(l.isCollection=!0);let f;a||(a=qu.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=>qu.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return Rt(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 Hu.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 Hu.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 Hu.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 kb(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 Gu(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):kb(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(kb(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(kb(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]=Gu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var Qx,Jx,Hu,Xx,qu,r9,Fr,sl,ig,Ua=ie(()=>{Qx=require("crypto");hm();Nu();Jx=w(oi()),Hu=w(_e());Ca();rg();Xx=require("async_hooks");sg();qu=new Xx.AsyncLocalStorage,r9={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Fr=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=Mn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Gu(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=Mn(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=Mn(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=Mn(function(t,r,n,s){return t.delete?t.delete(r):Xn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Qx.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=qu.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),Rt(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=Mn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Xn(t,"delete")},{hasContent:!1,type:"update"});static post=Mn(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=Mn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Mn(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=Mn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Xn(t,"subscribe")},{type:"read"});static publish=Mn(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=Mn(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=Gu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Mn(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=Mn(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=Mn(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 tg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&r9[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:jx(t,this),isCollection:sl}}let i=jx(t,this);return sl?{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 Qn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Qn}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,Jx._assignPackageExport)("Resource",Fr);o(n9,"snakeCase");o(jx,"pathToId");ig=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Mn,"transactional");o(Xn,"missingMethod");o(kb,"selectFromObject");o(Gu,"transformForSelect")});var il,Hb=ie(()=>{il=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 qb={};Ie(qb,{Resources:()=>$u,keyArrayToString:()=>Vu,resetResources:()=>s9,resources:()=>Ls});function s9(){return Ls=new $u,Ue.resources=Ls,Ls}function Vu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var e0,t0,$u,Ls,xa=ie(()=>{Ca();Hb();e0=w(j()),t0=w(_e());xr();$u=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 t0.ServerError(`Conflicting paths for ${t}`);e0.default.error(c),i.Resource=new il(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 Rt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(s9,"resetResources");o(Vu,"keyArrayToString")});function Vb(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=n0,i9(e.primaryStore,e.auditStore)):(c=r0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{s0(r0[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=Vu(t);let d=new $b(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 s0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),i0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Ut(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Vu(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,Gb.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,Gb.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 i9(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=n0[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{s0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function i0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function o0(e){return e.nextTransaction||(Vb({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),i0(e)),e.nextTransaction}var Gb,r0,n0,$b,Kb=ie(()=>{Gb=w(j());Nu();xa();Io();r0=Object.create(null),n0=Object.create(null);o(Vb,"addSubscription");$b=class extends Qn{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(s0,"notifyFromTransactionData");o(i9,"listenToCommits");o(i0,"nextTransaction");o(o0,"whenNextTransaction")});var c0=D((iPe,a0)=>{"use strict";var Yb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};a0.exports=Yb});var u0=D((aPe,l0)=>{"use strict";var Wb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};l0.exports=Wb});var Gm=D(f0=>{"use strict";var d0=ae(),o9=(H(),M(Y)),{RecordEncoder:a9}=(el(),M($x));d0.initSync();var c9=d0.get(o9.CONFIG_PARAMS.STORAGE_CACHING)!==!1,zb=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=c9&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:a9})}};f0.OpenDBIObject=zb});var $m=D((dPe,m0)=>{"use strict";var Zn=ae(),Ds=(H(),M(Y));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(Ds.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zn.get(Ds.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zn.get(Ds.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Zn.get(Ds.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Zn.get(Ds.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Zn.get(Ds.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Zn.get(Ds.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Zn.get(Ds.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Zn.get(Ds.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Zn.get(Ds.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Zn.get(Ds.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Zn.get(Ds.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};m0.exports=og;og.MAX_DBS=1e4});var _t=D((mPe,A0)=>{"use strict";var Qb=require("lmdb"),li=require("fs-extra"),es=require("path"),ag=Cn(),E0=j(),vn=Kr().LMDB_ERRORS_ENUM,cg=u0(),{OpenDBIObject:Jb}=Gm(),_0=$m(),Ba=Vt(),p0=(H(),M(Y)),{table:l9,resetDatabases:u9}=(Oe(),M(mt)),h0=ae(),ui=Ba.INTERNAL_DBIS_NAME,g0=Ba.DBI_DEFINITION_NAME,d9="data.mdb",f9="lock.mdb",Vm=".mdb",m9="-lock",jb=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ms(t,r),this.key_type=this.dbi[Ba.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ba.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Qb.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(vn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(vn.ENV_NAME_REQUIRED)}o(lg,"pathEnvNameValidation");async function Xb(e,t,r=!0){try{await li.access(e)}catch(n){throw n.code==="ENOENT"?new Error(vn.INVALID_BASE_PATH):n}try{let n=es.join(e,t+Vm);return await li.access(n,li.constants.R_OK|li.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await li.access(es.join(e,t,d9),li.constants.R_OK|li.constants.F_OK),es.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(vn.INVALID_ENVIRONMENT)}else throw new Error(vn.INVALID_ENVIRONMENT);throw n}}o(Xb,"validateEnvironmentPath");function ug(e,t){if(ag.validateEnv(e),t===void 0)throw new Error(vn.DBI_NAME_REQUIRED)}o(ug,"validateEnvDBIName");async function p9(e,t,r=!1,n=!1){lg(e,t);let s=es.basename(e);t=t.toString();let i=h0.get(p0.CONFIG_PARAMS.DATABASES);i||h0.setProperty(p0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Xb(e,t,n),S0(e,t,r)}catch(a){if(a.message===vn.INVALID_ENVIRONMENT){let c=es.join(e,t);await li.mkdirp(n?c:e);let l=new _0(n?c:c+Vm,!1),u=Qb.open(l);u.dbis=Object.create(null);let d=new Jb(!1);u.openDB(ui,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=Zb(e,t,r);return u[Ba.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(p9,"createEnvironment");async function h9(e,t,r,n=!0){lg(e,t),t=t.toString();let s=es.join(e,t);return l9({table:t,database:es.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(h9,"copyEnvironment");async function S0(e,t,r=!1){lg(e,t),t=t.toString();let n=Zb(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 Xb(e,t),i=es.join(e,t+Vm),a=s!=i,c=new _0(s,a),l=Qb.open(c);l.dbis=Object.create(null);let u=y0(l);for(let d=0;d<u.length;d++)Ms(l,u[d]);return l[Ba.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(S0,"openEnvironment");async function E9(e,t,r=!1){lg(e,t),t=t.toString();let n=es.join(e,t+Vm),s=await Xb(e,t);if(global.lmdb_map!==void 0){let i=Zb(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await T0(a),delete global.lmdb_map[i]}}await li.remove(s),await li.remove(s===n?s+m9:es.join(es.dirname(s),f9))}o(E9,"deleteEnvironment");async function T0(e){ag.validateEnv(e);let t=e[Ba.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(T0,"closeEnvironment");function Zb(e,t,r=!1){let s=`${es.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(Zb,"getCachedEnvironmentName");function _9(e){ag.validateEnv(e);let t=Object.create(null),r=Ms(e,ui);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ui)try{t[n]=Object.assign(new cg,s)}catch{E0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(_9,"listDBIDefinitions");function y0(e){ag.validateEnv(e);let t=[],r=Ms(e,ui);for(let{key:n}of r.getRange({start:!1}))n!==ui&&t.push(n);return t}o(y0,"listDBIs");function g9(e,t){let n=Ms(e,ui).getEntry(t),s=new cg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{E0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(g9,"getDBIDefinition");function R0(e,t,r,n=!r){if(ug(e,t),t=t.toString(),t===ui)throw new Error(vn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ms(e,t)}catch(s){if(s.message===vn.DBI_DOES_NOT_EXIST){let i=new Jb(r,n===!0),a=e.openDB(t,i),c=new cg(r===!0,n);return a[g0]=c,Ms(e,ui).putSync(t,c),e.dbis[t]=a,a}throw s}}o(R0,"createDBI");function Ms(e,t){if(ug(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ui?r=g9(e,t):r=new cg,r===void 0)throw new Error(vn.DBI_DOES_NOT_EXIST);let n;try{let s=new Jb(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(vn.DBI_DOES_NOT_EXIST):s}return n[g0]=r,e.dbis[t]=n,n}o(Ms,"openDBI");function S9(e,t){ug(e,t),t=t.toString();let r=Ms(e,t),n=r.getStats();return r[Ba.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(S9,"statDBI");async function T9(e,t){try{let r=es.join(e,t+Vm);return(await li.stat(r)).size}catch{throw new Error(vn.INVALID_ENVIRONMENT)}}o(T9,"environmentDataSize");function y9(e,t){if(ug(e,t),t=t.toString(),t===ui)throw new Error(vn.CANNOT_DROP_INTERNAL_DBIS_NAME);Ms(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ms(e,ui).removeSync(t)}o(y9,"dropDBI");function R9(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ms(e,i)}catch(a){if(a.message===vn.DBI_DOES_NOT_EXIST)R0(e,i,i!==t,i===t),n=!0;else throw a}}n&&u9()}o(R9,"initializeDBIs");A0.exports={openDBI:Ms,openEnvironment:S0,createEnvironment:p9,listDBIs:y0,listDBIDefinitions:_9,createDBI:R0,dropDBI:y9,statDBI:S9,deleteEnvironment:E9,initializeDBIs:R9,TransactionCursor:jb,environmentDataSize:T9,copyEnvironment:h9,closeEnvironment:T0}});var w0=D((hPe,I0)=>{"use strict";var eI=_t(),A9=j(),b0=Kr().LMDB_ERRORS_ENUM;I0.exports=b9;async function b9(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 eI.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==b0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await eI.closeEnvironment(global.lmdb_map[n]),await eI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==b0.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){A9.error(t)}}o(b9,"cleanLMDBMap")});var Gi=D((_Pe,C0)=>{"use strict";var N0=oe(),I9=(H(),M(Y)),Ku=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,qi=require("joi"),Fa={schema_format:{pattern:Ku,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},w9=qi.alternatives(qi.string().min(1).max(Fa.schema_length.maximum).pattern(Ku).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),qi.number(),qi.array()).required(),N9=qi.alternatives(qi.string().min(1).max(Fa.schema_length.maximum).pattern(Ku).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),qi.number()),C9=qi.alternatives(qi.string().min(1).max(Fa.schema_length.maximum).pattern(Ku).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),qi.number()).required();function O9(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Fa.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Ku.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(O9,"checkValidTable");function P9(e,t){return N0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(P9,"validateSchemaExists");function L9(e,t){let r=t.state.ancestors[0].schema;return N0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(L9,"validateTableExists");function D9(e,t){return e.toLowerCase()===I9.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(D9,"validateSchemaName");C0.exports={commonValidators:Fa,schemaRegex:Ku,hdbSchemaTable:w9,validateSchemaExists:P9,validateTableExists:L9,validateSchemaName:D9,checkValidTable:O9,hdbDatabase:N9,hdbTable:C9}});var at=D((SPe,O0)=>{"use strict";var Un=require("validate.js");Un.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Un.validators.type.checks[t](e)?null:` must be a '${t}' value`};Un.validators.type.checks={Object:o(function(e){return Un.isObject(e)&&!Un.isArray(e)},"Object"),Array:Un.isArray,Integer:Un.isInteger,Number:Un.isNumber,String:Un.isString,Date:Un.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};Un.validators.hasValidFileExt=function(e,t){return Un.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};O0.exports={validateObject:M9,validateObjectAsync:v9,validateBySchema:U9};function M9(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Un(e,t,{format:"flat"});return r?new Error(r):null}o(M9,"validateObject");async function v9(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Un.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(v9,"validateObjectAsync");function U9(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(U9,"validateBySchema")});var rI=D((yPe,L0)=>{var{hdbTable:x9,hdbDatabase:P0}=Gi(),B9=at(),tI=require("joi"),F9={undefined:"undefined",null:"null"},k9=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||F9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),H9=tI.object({database:P0,schema:P0,table:x9,records:tI.array().items(tI.object().custom(k9)).required()});L0.exports=function(e){return B9.validateBySchema(e,H9)}});var M0=D((APe,D0)=>{"use strict";var nI=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")}};D0.exports=nI});var U0=D((IPe,v0)=>{"use strict";var sI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};v0.exports=sI});var B0=D((NPe,x0)=>{"use strict";var iI=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}};x0.exports=iI});var k0=D((OPe,F0)=>{"use strict";var oI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};F0.exports=oI});var al=D((vPe,G0)=>{"use strict";var q9=_t(),G9=U0(),$9=B0(),V9=k0(),$i=Cn(),Km=Kr().LMDB_ERRORS_ENUM,K9=Vt(),Bo=(H(),M(Y)),Y9=oe(),W9=require("uuid"),LPe=require("lmdb"),{handleHDBError:z9,hdbErrors:j9}=_e(),{OVERFLOW_MARKER:DPe,MAX_SEARCH_KEY_LENGTH:MPe}=K9,H0=ae();H0.initSync();var dg=H0.get(Bo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),aI=Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ol=Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Q9(e,t,r,n,s=$i.getNextMonotonicTime()){dI(e,t,r,n),cI(e,t,r);let i=new G9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];q0(u,!0,s);let d=J9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return lI(a,c,n,i,s)}o(Q9,"insertRecords");function J9(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][Bo.FUNC_VAL],n[a]=c)}let l=$i.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[ol])})}o(J9,"insertRecord");function X9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(X9,"removeSkippedRecords");function q0(e,t,r){let n=r>0;(n||!Number.isInteger(e[ol]))&&(e[ol]=r||(r=$i.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[aI]))&&(e[aI]=r||$i.getNextMonotonicTime()):delete e[aI]}o(q0,"setTimestamps");function cI(e,t,r){r.indexOf(Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),q9.initializeDBIs(e,t,r)}o(cI,"initializeTransaction");async function Z9(e,t,r,n,s=$i.getNextMonotonicTime()){dI(e,t,r,n),cI(e,t,r);let i=new $9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=uI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return lI(c,l,n,i,s,a)}o(Z9,"updateRecords");async function e7(e,t,r,n,s=$i.getNextMonotonicTime()){try{dI(e,t,r,n)}catch(l){throw z9(l,l.message,j9.HTTP_STATUS_CODES.BAD_REQUEST)}cI(e,t,r);let i=new V9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;Y9.isEmpty(u[t])?(d=W9.v4(),u[t]=d):d=u[t];let f=uI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return lI(a,c,n,i,s)}o(e7,"upsertRecords");async function lI(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||$i.getNextMonotonicTime(),X9(r,i),n}o(lI,"finalizeWrite");function uI(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(q0(r,!d,a),Number.isInteger(r[ol])&&u[ol]>r[ol])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 R=E([[u]]);Array.isArray(R)&&(E=R[0][Bo.FUNC_VAL],r[h]=E)}if(E===A)continue;let S=$i.getIndexedValues(A);if(S){dg&&g.prefetch(S.map(R=>({key:R,value:n})),fg);for(let R=0,N=S.length;R<N;R++)g.remove(S[R],n)}if(S=$i.getIndexedValues(E),S){dg&&g.prefetch(S.map(R=>({key:R,value:n})),fg);for(let R=0,N=S.length;R<N;R++)g.put(S[R],n)}}let p={...u,...r};c.put(n,p,p[ol])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:uI(e,t,r,n,s,i,a))}o(uI,"updateUpsertRecord");function t7(e,t,r){if($i.validateEnv(e),t===void 0)throw new Error(Km.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Km.WRITE_ATTRIBUTES_REQUIRED):new Error(Km.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(t7,"validateBasic");function dI(e,t,r,n){if(t7(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Km.RECORDS_REQUIRED):new Error(Km.RECORDS_MUST_BE_ARRAY)}o(dI,"validateWrite");function fg(){}o(fg,"noop");G0.exports={insertRecords:Q9,updateRecords:Z9,upsertRecords:e7}});var Vi=D((xPe,r7)=>{r7.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 V0=D((BPe,$0)=>{"use strict";var n7=require("uuid"),fI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||n7.v4(),this.schema_table=`${this.schema}.${this.table}`}};$0.exports=fI});var mg=D((kPe,K0)=>{"use strict";var s7=V0(),mI=class extends s7{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}};K0.exports=mI});var W0=D((qPe,Y0)=>{"use strict";Y0.exports=o7;var i7="inserted";function o7(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===i7?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(o7,"returnObject")});var pg=D((VPe,j0)=>{"use strict";var a7=(H(),M(Y)),pI=_t(),c7=al(),{getSystemSchemaPath:l7,getSchemaPath:u7}=yt(),$Pe=Vi(),{validateBySchema:d7}=at(),Ym=require("joi"),f7=mg(),m7=W0(),{handleHDBError:p7,hdbErrors:h7,ClientError:E7}=_e(),z0=oe(),{HTTP_STATUS_CODES:_7}=h7,g7="inserted";j0.exports=S7;async function S7(e){let t=d7(e,Ym.object({database:Ym.string(),schema:Ym.string(),table:Ym.string().required(),attribute:Ym.string().required()}));if(t)throw new E7(t.message);let r=!e.skip_table_check&&z0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw p7(new Error,r,_7.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=z0.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 f7(e.schema,e.table,e.attribute,e.id);try{let i=await pI.openEnvironment(u7(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}`);pI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await pI.openEnvironment(l7(),a7.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await c7.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return m7(g7,c,{records:[s]},l)}catch(i){throw i}}o(S7,"lmdbCreateAttribute")});var Wm=D((WPe,J0)=>{"use strict";var Fo=oe(),Q0=j(),YPe=rI(),{getDatabases:T7}=(Oe(),M(mt)),{ClientError:cl}=_e();J0.exports=y7;function y7(e){if(Fo.isEmpty(e))throw new cl("invalid update parameters defined.");if(Fo.isEmptyOrZeroLength(e.schema))throw new cl("invalid schema specified.");if(Fo.isEmptyOrZeroLength(e.table))throw new cl("invalid table specified.");if(!Array.isArray(e.records))throw new cl("records must be an array");let t=T7()[e.schema]?.[e.table];if(Fo.isEmpty(t))throw new cl(`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&&Fo.isEmptyOrZeroLength(a[r]))throw Q0.error("a valid hash attribute must be provided with update record:",a),new cl("a valid hash attribute must be provided with update record, check log for more info");if(!Fo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw Q0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new cl(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Fo.isEmpty(a[r])&&a[r]!==""&&n.has(Fo.autoCast(a[r]))&&(a.skip=!0),n.add(Fo.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(y7,"insertUpdateValidate")});var hg=D((jPe,Z0)=>{"use strict";var X0=oe(),R7=(H(),M(Y)),A7=j(),b7=pg(),I7=mg(),w7=ko(),{SchemaEventMsg:N7}=ts(),C7="already exists in";Z0.exports=O7;async function O7(e,t,r){if(X0.isEmptyOrZeroLength(r))return r;let n=[];X0.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 P7(e,t.schema,t.name,i)})),s}o(O7,"lmdbCheckForNewAttributes");async function P7(e,t,r,n){let s=new I7(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await L7(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(C7))A7.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(P7,"createNewAttribute");async function L7(e){let t;return t=await b7(e),w7.signalSchemaChange(new N7(process.pid,R7.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(L7,"createAttribute")});var Yu=D((JPe,eB)=>{"use strict";var hI=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}};eB.exports=hI});var rB=D((ZPe,tB)=>{"use strict";var D7=Yu(),M7=(H(),M(Y)).OPERATIONS_ENUM,EI=class extends D7{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(M7.INSERT,r,n,s,i),this.records=t}};tB.exports=EI});var sB=D((tLe,nB)=>{"use strict";var v7=Yu(),U7=(H(),M(Y)).OPERATIONS_ENUM,_I=class extends v7{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(U7.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};nB.exports=_I});var oB=D((nLe,iB)=>{"use strict";var x7=Yu(),B7=(H(),M(Y)).OPERATIONS_ENUM,gI=class extends x7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(B7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};iB.exports=gI});var cB=D((iLe,aB)=>{"use strict";var F7=Yu(),k7=(H(),M(Y)).OPERATIONS_ENUM,SI=class extends F7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(k7.DELETE,n,s,t,i),this.original_records=r}};aB.exports=SI});var zm=D((cLe,fB)=>{"use strict";var aLe=require("path"),lB=_t(),H7=rB(),q7=sB(),G7=oB(),$7=cB(),Wu=Vt(),uB=oe(),{CONFIG_PARAMS:V7}=(H(),M(Y)),dB=ae();dB.initSync();var Eg=(H(),M(Y)).OPERATIONS_ENUM,{getTransactionAuditStorePath:K7}=yt();fB.exports=Y7;async function Y7(e,t){if(dB.get(V7.LOGGING_AUDITLOG)===!1)return;let r=K7(e.schema,e.table),n=await lB.openEnvironment(r,e.table,!0),s=W7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){lB.initializeDBIs(n,Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Wu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),uB.isEmpty(s.user_name)||n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(Y7,"writeTransaction");function W7(e,t){let r=uB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Eg.INSERT)return new H7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.UPDATE)return new q7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.UPSERT)return new G7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.DELETE)return new $7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(W7,"createTransactionObject")});var TI=D((dLe,mB)=>{"use strict";var z7=Wm(),uLe=fm(),jm=(H(),M(Y)),j7=mm(),Q7=al().insertRecords,J7=_t(),X7=j(),Z7=hg(),{getSchemaPath:eee}=yt(),tee=zm();mB.exports=ree;async function ree(e){try{let{schemaTable:t,attributes:r}=z7(e);j7(e,r,t.hash_attribute),e.schema!==jm.SYSTEM_SCHEMA_NAME&&(r.includes(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Z7(e.hdb_auth_header,t,r),s=eee(e.schema,e.table),i=await J7.openEnvironment(s,e.table),a=await Q7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await tee(e,a)}catch(c){X7.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(ree,"lmdbCreateRecords")});var EB=D((mLe,hB)=>{"use strict";var pB=(H(),M(Y)),nee=TI(),see=fm(),iee=require("fs-extra"),{getSchemaPath:oee}=yt();hB.exports=aee;async function aee(e){let t=[{name:e.schema,createddate:Date.now()}],r=new see(pB.SYSTEM_SCHEMA_NAME,pB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await nee(r),await iee.mkdirp(oee(e.schema))}o(aee,"lmdbCreateSchema")});var gB=D((hLe,_B)=>{"use strict";var yI=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}};_B.exports=yI});var RB=D((TLe,yB)=>{"use strict";var SB=_t(),RI=Cn(),AI=Kr().LMDB_ERRORS_ENUM,cee=Vt(),TB=j(),_Le=oe(),lee=require("lmdb"),uee=gB(),dee=(H(),M(Y)),{OVERFLOW_MARKER:gLe,MAX_SEARCH_KEY_LENGTH:SLe}=cee,fee=dee.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function mee(e,t,r,n){if(RI.validateEnv(e),t===void 0)throw new Error(AI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(AI.IDS_REQUIRED):new Error(AI.IDS_MUST_BE_ITERABLE);try{let s=SB.listDBIs(e);SB.initializeDBIs(e,t,s);let i=new uee,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[fee]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,lee.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],R=h[A];if(R!=null)try{let N=RI.getIndexedValues(R);if(N)for(let O=0,F=N.length;O<F;O++)S.remove(N[O],a)}catch{TB.warn(`cannot delete from attribute: ${A}, ${R}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){TB.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=RI.getNextMonotonicTime(),i}catch(s){throw s}}o(mee,"deleteRecords");yB.exports={deleteRecords:mee}});var Qm=D((RLe,bB)=>{"use strict";var zu=oe(),pee=RB(),hee=_t(),{getSchemaPath:Eee}=yt(),_ee=zm(),gee=j();bB.exports=See;async function See(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(zu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zu.isEmptyOrZeroLength(e.hash_values)&&!zu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];zu.isEmpty(l)||e.hash_values.push(l)}}if(zu.isEmptyOrZeroLength(e.hash_values))return AB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zu.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=Eee(e.schema,e.table),i=await hee.openEnvironment(s,e.table),a=await pee.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await _ee(e,a)}catch(c){gee.error(`unable to write transaction due to ${c.message}`)}return AB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(See,"lmdbDeleteRecords");function AB(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(AB,"createDeleteResponse")});var II=D((ILe,IB)=>{"use strict";var Tee=(H(),M(Y)),bLe=Cn();function bI(e,t){let r=Object.create(null);if(t.length===1&&Tee.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(bI,"parseRow");function yee(e,t,r,n){let s=bI(r,e);n.push(s)}o(yee,"searchAll");function Ree(e,t,r,n){let s=bI(r,e);n[t]=s}o(Ree,"searchAllToMap");function Aee(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(Aee,"iterateDBI");function ll(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(ll,"pushResults");function bee(e,t,r,n,s,i){t.toString().endsWith(e)&&ll(t,r,n,s,i)}o(bee,"endsWith");function Iee(e,t,r,n,s,i){t.toString().includes(e)&&ll(t,r,n,s,i)}o(Iee,"contains");function wee(e,t,r,n,s,i){t>e&&ll(t,r,n,s,i)}o(wee,"greaterThanCompare");function Nee(e,t,r,n,s,i){t>=e&&ll(t,r,n,s,i)}o(Nee,"greaterThanEqualCompare");function Cee(e,t,r,n,s,i){t<e&&ll(t,r,n,s,i)}o(Cee,"lessThanCompare");function Oee(e,t,r,n,s,i){t<=e&&ll(t,r,n,s,i)}o(Oee,"lessThanEqualCompare");IB.exports={parseRow:bI,searchAll:yee,searchAllToMap:Ree,iterateDBI:Aee,endsWith:bee,contains:Iee,greaterThanCompare:wee,greaterThanEqualCompare:Nee,lessThanCompare:Cee,lessThanEqualCompare:Oee,pushResults:ll}});var ju=D((PLe,DB)=>{"use strict";var ka=_t(),NLe=j(),rs=Cn(),_g=Vt(),rr=Kr().LMDB_ERRORS_ENUM,CLe=oe(),Pee=(H(),M(Y)),gg=II(),{parseRow:Lee}=gg,OLe=require("lmdb"),{OVERFLOW_MARKER:wB,MAX_SEARCH_KEY_LENGTH:Dee}=_g;function NB(e,t,r,n=!1,s=void 0,i=void 0){return ul(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(NB,"iterateFullIndex");function Jm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ul(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(R=>({value:R}))):f.getRange(S)})}o(Jm,"iterateRangeBetween");function ul(e,t,r,n){let s=e.database||e,i=ka.openDBI(s,r);i[_g.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ka.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(ul,"setupTransaction");function CB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(wB)){if(!s)if(r)s=ka.openDBI(e,r);else{let l=ka.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=ka.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(CB,"getOverflowCheck");function Mee(e,t,r,n=!1,s=void 0,i=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return ul(e,t,t,(a,c,l)=>(Sg(r),r=Xm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Lee(u.value,r))))}o(Mee,"searchAll");function vee(e,t,r,n=!1,s=void 0,i=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);Sg(r),r=Xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of NB(e,t,t,n,s,i))a.set(c,gg.parseRow(l,r));return a}o(vee,"searchAllToMap");function Uee(e,t,r=!1,n=void 0,s=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=NB(e,void 0,t,r,n,s),c=a.transaction,l=CB(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(Uee,"iterateDBI");function xee(e,t){if(rs.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return ka.statDBI(e,t).entryCount}o(xee,"countAll");function Bee(e,t,r,n,s=!1,i=void 0,a=void 0){return Ha(e,r,n),ul(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(Bee,"equals");function Fee(e,t,r){return Ha(e,t,r),ka.openDBI(e,t).getValuesCount(r)}o(Fee,"count");function kee(e,t,r,n,s=!1,i=void 0,a=void 0){return Ha(e,r,n),ul(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(kee,"startsWith");function Hee(e,t,r,n,s=!1,i=void 0,a=void 0){return OB(e,t,r,n,s,i,a,!0)}o(Hee,"endsWith");function OB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return Ha(e,r,n),ul(e,null,r,(l,u,d,f)=>{let m=CB(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(wB)?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(OB,"contains");function qee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!0,!1)}o(qee,"greaterThan");function Gee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!1,!1)}o(Gee,"greaterThanEqual");function $ee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!0)}o($ee,"lessThan");function Vee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!1)}o(Vee,"lessThanEqual");function Kee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(rs.validateEnv(e),r===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(rr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(rr.END_VALUE_REQUIRED);if(n=rs.convertKeyValueToWrite(n),s=rs.convertKeyValueToWrite(s),n>s)throw new Error(rr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Jm(e,t,r,n,s,i,a,c)}o(Kee,"between");function Yee(e,t,r,n){rs.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(Sg(r),r=Xm(s,r),n===void 0)throw new Error(rr.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(Yee,"searchByHash");function Wee(e,t,r){rs.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(Wee,"checkHashExists");function zee(e,t,r,n,s=[]){return LB(e,t,r,n,s),PB(e,t,r,n,s).map(i=>i[1])}o(zee,"batchSearchByHash");function jee(e,t,r,n,s=[]){LB(e,t,r,n,s);let i=new Map;for(let[a,c]of PB(e,t,r,n,s))i.set(a,c);return i}o(jee,"batchSearchByHashToMap");function PB(e,t,r,n,s=[]){return ul(e,t,t,(i,a,c)=>{r=Xm(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(PB,"batchHashSearch");function LB(e,t,r,n,s){if(rs.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(Sg(r),n==null)throw new Error(rr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(rr.IDS_MUST_BE_ITERABLE)}o(LB,"initializeBatchSearchByHash");function Sg(e){if(!Array.isArray(e))throw e===void 0?new Error(rr.FETCH_ATTRIBUTES_REQUIRED):new Error(rr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(Sg,"validateFetchAttributes");function Ha(e,t,r){if(rs.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.SEARCH_VALUE_REQUIRED);if(r?.length>Dee)throw new Error(rr.SEARCH_VALUE_TOO_LARGE)}o(Ha,"validateComparisonFunctions");function Xm(e,t){return t.length===1&&Pee.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ka.listDBIs(e)),t}o(Xm,"setGetWholeRowAttributes");DB.exports={searchAll:Mee,searchAllToMap:vee,count:Fee,countAll:xee,equals:Bee,startsWith:kee,endsWith:Hee,contains:OB,searchByHash:Yee,setGetWholeRowAttributes:Xm,batchSearchByHash:zee,batchSearchByHashToMap:jee,checkHashExists:Wee,iterateDBI:Uee,greaterThan:qee,greaterThanEqual:Gee,lessThan:$ee,lessThanEqual:Vee,between:Kee}});var Qu=D((DLe,BB)=>{var MB=require("lodash"),vB=at(),Ye=require("joi"),Qee=oe(),{hdbSchemaTable:Zm,checkValidTable:UB,hdbTable:xB,hdbDatabase:Tg}=Gi(),{handleHDBError:Jee,hdbErrors:Xee}=_e(),{getDatabases:Zee}=(Oe(),M(mt)),{HTTP_STATUS_CODES:ete}=Xee,tte=Ye.object({database:Tg,schema:Tg,table:xB,attribute:Zm,value:Ye.any().required(),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),desc:Ye.bool(),limit:Ye.number().integer().min(1),offset:Ye.number().integer().min(0)}),rte=Ye.object({database:Tg,schema:Tg,table:xB,operator:Ye.string().valid("and","or").default("and").lowercase(),offset:Ye.number().integer().min(0),limit:Ye.number().integer().min(1),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),sort:Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),descending:Ye.bool().optional()}).optional(),conditions:Ye.array().min(1).items(Ye.alternatives(Ye.object({operator:Ye.string().valid("and","or").default("and").lowercase(),conditions:Ye.array()}),Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),comparator:Ye.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Ye.when("comparator",{switch:[{is:"equals",then:Ye.any()},{is:"between",then:Ye.array().items(Ye.alternatives([Ye.string(),Ye.number()])).length(2)}],otherwise:Ye.alternatives(Ye.string(),Ye.number())}).required()}))).required()});BB.exports=function(e,t){let r=null;switch(t){case"value":r=vB.validateBySchema(e,tte);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(UB("database",e.schema)),i(UB("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=vB.validateBySchema(e,rte);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Qee.checkGlobalSchemaTable(e.schema,e.table);if(s)return Jee(new Error,s,ete.NOT_FOUND);let a=Zee()[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=MB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!MB.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 wI=D((vLe,FB)=>{"use strict";var nte=_t(),ste=Qu(),{getSchemaPath:ite}=yt();FB.exports=ote;function ote(e){let t=ste(e,"hashes");if(t)throw t;let r=ite(e.schema,e.table);return nte.openEnvironment(r,e.table)}o(ote,"initialize")});var NI=D((xLe,kB)=>{"use strict";var ate=ju(),cte=wI();kB.exports=lte;async function lte(e){let t=await cte(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return ate.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(lte,"lmdbGetDataByHash")});var Ju=D((FLe,HB)=>{"use strict";var CI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};HB.exports=CI});var GB=D((qLe,qB)=>{"use strict";var HLe=Ju(),ute=ju(),dte=wI();qB.exports=fte;async function fte(e){let t=await dte(e),r=global.hdb_schema[e.schema][e.table];return ute.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(fte,"lmdbSearchByHash")});var di=D(($Le,$B)=>{"use strict";var OI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.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}};$B.exports=OI});var yg=D((KLe,jB)=>{"use strict";var cn=ju(),mte=_t(),pte=oe(),We=Vt(),dl=(H(),M(Y)),hte=Vi(),VB=Kr().LMDB_ERRORS_ENUM,{getSchemaPath:Ete}=yt(),Ho=dl.SEARCH_WILDCARDS;async function _te(e,t,r){let n;e.schema===dl.SYSTEM_SCHEMA_NAME?n=hte[e.table]:n=global.hdb_schema[e.schema][e.table];let s=zB(e,n.hash_attribute,r,t);return YB(e,s,n.hash_attribute,r)}o(_te,"prepSearch");async function YB(e,t,r,n){let s=Ete(e.schema,e.table),i=await mte.openEnvironment(s,e.table),a=WB(i,e,t,r),c=a.transaction||i;if([We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,We.SEARCH_TYPES.SEARCH_ALL,We.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(gte(e,r)===!1){let d=e.attribute;if(d===r)return n?KB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?KB(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?cn.batchSearchByHashToMap(c,r,e.get_attributes,u):cn.batchSearchByHash(c,r,e.get_attributes,u)}o(YB,"executeSearch");function WB(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 We.SEARCH_TYPES.EQUALS:s=cn.equals(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.CONTAINS:s=cn.contains(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.ENDS_WITH:case We.SEARCH_TYPES._ENDS_WITH:s=cn.endsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.STARTS_WITH:case We.SEARCH_TYPES._STARTS_WITH:s=cn.startsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return cn.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return cn.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.SEARCH_ALL:return cn.searchAll(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return cn.searchAllToMap(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.BETWEEN:s=cn.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN:case We.SEARCH_TYPES._GREATER_THAN:s=cn.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN_EQUAL:case We.SEARCH_TYPES._GREATER_THAN_EQUAL:s=cn.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN:case We.SEARCH_TYPES._LESS_THAN:s=cn.lessThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN_EQUAL:case We.SEARCH_TYPES._LESS_THAN_EQUAL:s=cn.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(WB,"searchByType");function KB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(KB,"createMapFromIterable");function gte(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(gte,"checkToFetchMore");function zB(e,t,r,n){if(pte.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),Ho.indexOf(s)>-1)return r===!0?We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:We.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Ho[0])<0&&s.indexOf(Ho[1])<0)return c===!0?r===!0?We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:We.SEARCH_TYPES.EQUALS;if(Ho.indexOf(i)>=0&&Ho.indexOf(a)>=0)return e.value=e.value.slice(1,-1),We.SEARCH_TYPES.CONTAINS;if(Ho.indexOf(i)>=0)return e.value=e.value.substr(1),We.SEARCH_TYPES.ENDS_WITH;if(Ho.indexOf(a)>=0)return e.value=e.value.slice(0,-1),We.SEARCH_TYPES.STARTS_WITH;if(s.includes(Ho[0])||s.includes(Ho[1]))return We.SEARCH_TYPES.EQUALS;throw new Error(VB.UNKNOWN_SEARCH_TYPE)}else switch(n){case dl.VALUE_SEARCH_COMPARATORS.BETWEEN:return We.SEARCH_TYPES.BETWEEN;case dl.VALUE_SEARCH_COMPARATORS.GREATER:return We.SEARCH_TYPES.GREATER_THAN;case dl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return We.SEARCH_TYPES.GREATER_THAN_EQUAL;case dl.VALUE_SEARCH_COMPARATORS.LESS:return We.SEARCH_TYPES.LESS_THAN;case dl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return We.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(VB.UNKNOWN_SEARCH_TYPE)}}o(zB,"createSearchTypeFromSearchObject");jB.exports={executeSearch:YB,createSearchTypeFromSearchObject:zB,prepSearch:_te,searchByType:WB}});var JB=D((zLe,QB)=>{"use strict";var WLe=di(),Ste=Qu(),Tte=oe(),yte=(H(),M(Y)),Rte=yg();QB.exports=Ate;function Ate(e,t){if(!Tte.isEmpty(t)&&yte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Ste(e,"value");if(n)throw n;return Rte.prepSearch(e,t,!0)}o(Ate,"lmdbGetDataByValue")});var ep=D((JLe,XB)=>{"use strict";var QLe=di(),bte=Qu(),Ite=oe(),wte=(H(),M(Y)),Nte=yg();XB.exports=Cte;async function Cte(e,t){if(!Ite.isEmpty(t)&&wte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=bte(e,"value");if(n)throw n;return Nte.prepSearch(e,t,!1)}o(Cte,"lmdbSearchByValue")});var eF=D((eDe,ZB)=>{"use strict";var ZLe=Vt(),PI=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}},LI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},DI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};ZB.exports={SearchByConditionsObject:PI,SearchCondition:LI,SortAttribute:DI}});var iF=D((iDe,sF)=>{"use strict";var{SearchByConditionsObject:rDe,SearchCondition:nDe}=eF(),Ote=di(),Pte=Qu(),MI=ju(),Rg=Vt(),{Resource:sDe}=(Ua(),M(Zx)),nF=yg(),Lte=II(),Dte=require("lodash"),{getSchemaPath:Mte}=yt(),tF=_t(),{handleHDBError:vte,hdbErrors:Ute}=_e(),{HTTP_STATUS_CODES:xte}=Ute,Bte=1e8;sF.exports=Fte;async function Fte(e){let t=Pte(e,"conditions");if(t)throw vte(t,t.message,xte.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=Mte(e.schema,e.table),n=await tF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)tF.openDBI(n,u.attribute);let i=Dte.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Rg.SEARCH_TYPES.EQUALS?u.estimated_count=MI.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=Bte}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await rF(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(nF.filterByType),f=d.length,m=MI.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=>Lte.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await rF(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=MI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(Fte,"lmdbSearchByConditions");async function rF(e,t,r,n){let s=new Ote(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,nF.searchByType(e,s,i,n).map(a=>a.value)}o(rF,"executeConditionSearch")});var Xu=D((aDe,oF)=>{"use strict";var kte=(H(),M(Y)).OPERATIONS_ENUM,vI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=kte.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};oF.exports=vI});var UI=D((lDe,pF)=>{"use strict";var uF=di(),dF=Xu(),fF=ep(),mF=Qm(),xn=(H(),M(Y)),aF=oe(),cF=_t(),{getTransactionAuditStorePath:Hte,getSchemaPath:qte}=yt(),lF=j();pF.exports=Gte;async function Gte(e){try{if(aF.isEmpty(global.hdb_schema[e.schema])||aF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await $te(e),await Vte(e);let t=qte(e.schema,e.table);try{await cF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")lF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Hte(e.schema,e.table);await cF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")lF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(Gte,"lmdbDropTable");async function $te(e){let t=new uF(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 fF(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 dF(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await mF(s)}o($te,"deleteAttributesFromSystem");async function Vte(e){let t=new uF(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 fF(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 dF(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await mF(s)}catch(i){throw i}}o(Vte,"dropTableFromSystem")});var EF=D((dDe,hF)=>{"use strict";var Kte=require("fs-extra"),Yte=di(),Wte=Ju(),zte=Xu(),jte=UI(),Qte=Qm(),Jte=NI(),Xte=ep(),qo=(H(),M(Y)),{getSchemaPath:Zte}=yt(),{handleHDBError:ere,hdbErrors:tre}=_e(),{HDB_ERROR_MSGS:rre,HTTP_STATUS_CODES:nre}=tre;hF.exports=sre;async function sre(e){let t;try{t=await ire(e.schema);let r=new Yte(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Xte(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await jte(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new zte(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Qte(s);let i=Zte(t);await Kte.remove(i)}catch(r){throw r}}o(sre,"lmdbDropSchema");async function ire(e){let t=new Wte(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Jte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw ere(new Error,rre.SCHEMA_NOT_FOUND(e),nre.NOT_FOUND,void 0,void 0,!0);return n}o(ire,"validateDropSchema")});var Zu=D((mDe,_F)=>{"use strict";var xI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};_F.exports=xI});var FI=D((EDe,gF)=>{"use strict";var ore=require("fs-extra"),Ag=_t(),{getTransactionAuditStorePath:are}=yt(),BI=Vt(),hDe=Zu();gF.exports=cre;async function cre(e){let t;try{let r=are(e.schema,e.table);await ore.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,BI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Ag.createDBI(t,BI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Ag.createDBI(t,BI.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(cre,"createTransactionsAuditEnvironment")});var yF=D((SDe,TF)=>{"use strict";var kI=(H(),M(Y)),SF=_t(),lre=al(),{getSystemSchemaPath:ure,getSchemaPath:dre}=yt(),gDe=Vi(),fre=pg(),HI=mg(),mre=j(),pre=FI();TF.exports=hre;async function hre(e,t){let r=dre(t.schema,t.table),n=new HI(t.schema,t.table,kI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new HI(t.schema,t.table,kI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new HI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await SF.createEnvironment(r,t.table),e!==void 0){let a=await SF.openEnvironment(ure(),kI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await lre.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 qI(n),await qI(s),await qI(i)}await pre(t)}catch(a){throw a}}o(hre,"lmdbCreateTable");async function qI(e){try{await fre(e)}catch(t){mre.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(qI,"createAttribute")});var AF=D((yDe,RF)=>{"use strict";var Ere=Wm(),_re=mm(),gre=hg(),tp=(H(),M(Y)),Sre=al().updateRecords,Tre=_t(),{getSchemaPath:yre}=yt(),Rre=zm(),Are=j();RF.exports=bre;async function bre(e){try{let{schemaTable:t,attributes:r}=Ere(e);_re(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 gre(e.hdb_auth_header,t,r),s=yre(e.schema,e.table),i=await Tre.openEnvironment(s,e.table),a=await Sre(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Rre(e,a)}catch(c){Are.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(bre,"lmdbUpdateRecords")});var IF=D((ADe,bF)=>{"use strict";var Ire=(H(),M(Y)).OPERATIONS_ENUM,GI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Ire.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};bF.exports=GI});var NF=D((wDe,wF)=>{"use strict";var IDe=IF(),wre=Wm(),Nre=mm(),Cre=hg(),rp=(H(),M(Y)),Ore=al().upsertRecords,Pre=_t(),{getSchemaPath:Lre}=yt(),Dre=zm(),Mre=j(),{handleHDBError:vre,hdbErrors:Ure}=_e();wF.exports=xre;async function xre(e){let t;try{t=wre(e)}catch(l){throw vre(l,l.message,Ure.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Nre(e,n,r.hash_attribute),e.schema!==rp.SYSTEM_SCHEMA_NAME&&(n.includes(rp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(rp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(rp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(rp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Cre(e.hdb_auth_header,r,n),i=Lre(e.schema,e.table),a=await Pre.openEnvironment(i,e.table),c=await Ore(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Dre(e,c)}catch(l){Mre.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(xre,"lmdbUpsertRecords")});var OF=D((CDe,CF)=>{"use strict";var $I=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};CF.exports=$I});var LF=D((PDe,PF)=>{"use strict";var VI=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}};PF.exports=VI});var vF=D((MDe,MF)=>{"use strict";var KI=_t(),{getTransactionAuditStorePath:Bre}=yt(),DDe=OF(),np=Vt(),Fre=oe(),DF=LF(),kre=require("util").promisify,Hre=kre(setTimeout),qre=1e4,Gre=100;MF.exports=$re;async function $re(e){let t=Bre(e.schema,e.table),r=await KI.openEnvironment(t,e.table,!0),n=KI.listDBIs(r);KI.initializeDBIs(r,np.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new DF;do s=await Vre(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 Hre(Gre);while(s.transactions_deleted>0);return i}o($re,"deleteAuditLogsBefore");async function Vre(e,t){let r=new DF;try{let n=e.dbis[np.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[np.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Fre.isEmpty(c)||(s=e.dbis[np.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[np.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>qre)break}return await s,r}catch(n){throw n}}o(Vre,"deleteTransactions")});var xF=D((UDe,UF)=>{"use strict";var YI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};UF.exports=YI});var FF=D((FDe,BF)=>{"use strict";var Kre=di(),Yre=Xu(),BDe=xF(),Ki=(H(),M(Y)),Wre=oe(),WI=_t(),zre=Vi(),jre=ep(),Qre=Qm(),{getSchemaPath:Jre}=yt();BF.exports=Xre;async function Xre(e,t=!0){let r;e.schema===Ki.SYSTEM_SCHEMA_NAME?r=zre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await ene(e),s=Jre(e.schema,e.table),i=await WI.openEnvironment(s,e.table);return t===!0&&await Zre(e,i,r.hash_attribute),WI.dropDBI(i,e.attribute),n}o(Xre,"lmdbDropAttribute");async function Zre(e,t,r){let n=WI.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(Zre,"removeAttributeFromAllObjects");async function ene(e){let t=new Kre(Ki.SYSTEM_SCHEMA_NAME,Ki.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await jre(t)).filter(a=>a[Ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Wre.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[Ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Yre(Ki.SYSTEM_SCHEMA_NAME,Ki.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Qre(i)}o(ene,"dropAttributeFromSystem")});var VF=D((qDe,$F)=>{"use strict";var zI=_t(),ed=Vt(),HDe=Cn(),jI=(H(),M(Y)),kF=oe(),{getTransactionAuditStorePath:tne}=yt(),rne=ju(),bg=Yu(),nne=j();$F.exports=sne;async function sne(e){let t=tne(e.schema,e.table),r=await zI.openEnvironment(t,e.table,!0),n=zI.listDBIs(r);zI.initializeDBIs(r,ed.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case jI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return HF(r,e.search_values);case jI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,one(r,e.search_values,s);case jI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return ine(r,e.search_values);default:return HF(r)}}o(sne,"readAuditLog");function HF(e,t=[0,Date.now()]){kF.isEmpty(t[0])&&(t[0]=0),kF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ed.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(HF,"searchTransactionsByTimestamp");function ine(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[ed.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,GF(e,i))}return Object.fromEntries(r)}o(ine,"searchTransactionsByUsername");function one(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=rne.equals(e,ed.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ed.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=GF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);qF(l,"records",r,d,a),qF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(one,"searchTransactionsByHashValues");function qF(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(qF,"loopRecords");function GF(e,t){let r=[];try{let n=e.dbis[ed.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){nne.warn(i)}return r}catch(n){throw n}}o(GF,"batchSearchTransactions")});var YF=D((KDe,KF)=>{"use strict";var{getSchemaPath:$De}=yt(),VDe=_t(),{database:ane}=(Oe(),M(mt));KF.exports={writeTransaction:cne};async function cne(e,t,r){return ane({database:e,table:t}).transaction(r)}o(cne,"writeTransaction")});var QF=D((WDe,jF)=>{"use strict";var{getSchemaPath:WF}=yt(),zF=_t();jF.exports={flush:lne,resetReadTxn:une};async function lne(e,t){return(await zF.openEnvironment(WF(e,t),t.toString())).flushed}o(lne,"flush");async function une(e,t){try{(await zF.openEnvironment(WF(e,t),t.toString())).resetReadTxn()}catch{}}o(une,"resetReadTxn")});var ek=D((jDe,ZF)=>{"use strict";var{Readable:dne}=require("stream"),{getDatabases:fne}=(Oe(),M(mt)),{readSync:mne,openSync:pne,createReadStream:JF}=require("fs"),{open:hne}=require("lmdb"),{OpenDBIObject:XF}=Gm(),Ene=$m(),{AUDIT_STORE_OPTIONS:_ne}=(Io(),M(fx)),{INTERNAL_DBIS_NAME:gne,AUDIT_STORE_NAME:Sne}=Vt();ZF.exports=yne;var QI=32768,Tne=100;async function yne(e){let t=e.database||e.schema||"data",r=fne()[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=hne({noSync:!0,maxDbs:Ene.MAX_DBS}),m,p=f.openDB(gne,new XF(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,R){R.encoding="binary",R.encoder=void 0;let N=f.openDB(S,R),O=d.openDB(S,R);for(let{key:F,version:ee,value:q}of O.getRange({start:null,transaction:h,versions:O.useVersions}))m=N.put(F,q,ee),E++%Tne===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:R}of d.getRange({transaction:h,start:!1}))if(s.some(N=>S.startsWith?.(N+"/"))){p.put(S,R);let[,N]=S.split("/"),O=!N,F=new XF(!O,O);await g(S,F)}e.include_audit&&await g(Sne,{..._ne}),await m;let A=JF(f.path);return A.headers=l(),A.on("close",()=>{h.done(),f.close()}),A}let a=r[Object.keys(r)[0]].primaryStore,c=pne(a.path);return a.transaction(()=>{let u=Buffer.alloc(QI);mne(c,u,0,QI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=JF(null,{fd:c,start:QI}),m=new dne.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(yne,"getBackup")});var nk=D((JDe,rk)=>{"use strict";var Rne=j(),{handleHDBError:Ane}=_e(),bne=M0(),Ine=pg(),wne=TI(),Nne=EB(),Cne=Qm(),One=NI(),Pne=GB(),Lne=JB(),Dne=ep(),Mne=iF(),vne=EF(),Une=yF(),xne=AF(),Bne=NF(),Fne=vF(),kne=UI(),Hne=FF(),qne=VF(),Gne=YF(),tk=QF(),$ne=ek(),JI=class extends bne{static{o(this,"LMDBBridge")}async searchByConditions(t){return Mne(t)}async getDataByHash(t){return await One(t)}async searchByHash(t){return await Pne(t)}async getDataByValue(t,r){return await Lne(t,r)}async searchByValue(t){return await Dne(t)}async createSchema(t){return await Nne(t)}async dropSchema(t){return await vne(t)}async createTable(t,r){return await Une(t,r)}async dropTable(t){return await kne(t)}async createAttribute(t){return await Ine(t)}async createRecords(t){return await wne(t)}async updateRecords(t){return await xne(t)}async upsertRecords(t){try{return await Bne(t)}catch(r){throw Ane(r,null,null,Rne.ERR,r)}}async deleteRecords(t){return await Cne(t)}async dropAttribute(t){return await Hne(t)}async deleteAuditLogsBefore(t){return await Fne(t)}async readAuditLog(t){return await qne(t)}writeTransaction(t,r,n){return Gne.writeTransaction(t,r,n)}flush(t,r){return tk.flush(t,r)}resetReadTxn(t,r){return tk.resetReadTxn(t,r)}getBackup(t){return $ne(t)}};rk.exports=JI});function Bn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function ip(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 Is||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=XI(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?ok:ik);break}c=l}while(c&&c!==ik&&c!==ok)}function ak(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(sk[t])return sk[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=XI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Vne(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 XI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends ml{static{o(this,"TrackedObject")}},ip(r,t)),new r(e)):new ml(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=XI(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 qa(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=qa(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=GA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=qa(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Kne.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[fl]||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,sk,ik,ok,ml,Kne,fl,wg,sp,ZI=ie(()=>{ns=w(_e());T_();ws();o(Bn,"getChanges");o(ip,"assignTrackedAccessors");sk=Object.prototype,ik=new Proxy({},{get:ak}),ok=new Proxy({},{get:ak,set:Vne});o(ak,"getProxiedProperty");o(Vne,"setProxiedProperty");o(XI,"trackObject");ml=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}};ip(ml,{},!0);o(Ng,"collapseData");Kne=Object.prototype.hasOwnProperty;o(qa,"updateAndFreeze");o(Ig,"hasChanges");fl=Symbol.for("has-array-changes"),wg=class extends Array{static{o(this,"TrackedArray")}#e;[fl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[fl]=!0,super.splice(...t)}push(...t){return this[fl]=!0,super.push(...t)}pop(){return this[fl]=!0,super.pop()}unshift(...t){return this[fl]=!0,super.unshift(...t)}shift(){return this[fl]=!0,super.shift()}};wg.prototype.constructor=Array;sp=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var hk={};Ie(hk,{ResourceBridge:()=>rw});function nw({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 ck(e,t){let r=Yi(e),n=nw(e,r);if(!r)throw new fi.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;Rt(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,pk.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 Yi(e){let t=e.database||e.schema||Wne,r=ct()[t];if(!r)throw(0,fi.handleHDBError)(new Error,Yne.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function lk(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*uk(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 dk,Cg,fi,fk,ew,tw,mk,pk,Yne,Wne,zne,jne,rw,Ek=ie(()=>{dk=w(nk()),Cg=w(Qu()),fi=w(_e());Oe();fk=w(Wm());H();ew=w(ko()),tw=w(ts()),mk=w(oe());Ca();ZI();pk=w(j()),{HDB_ERROR_MSGS:Yne}=fi.hdbErrors,Wne="data",zne=1e4,jne=10,rw=class extends dk.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=Yi(t);if(!r)throw new fi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let 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,fi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:nw(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 fi.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Yi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Yi(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 Yi(t).dropTable()}createSchema(t){return td({database:t.schema,table:null}),ew.signalSchemaChange(new tw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await sw(t.schema),ew.signalSchemaChange(new tw.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,fk.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),Rt(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),Rt(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 lk(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ct()[t.schema][t.table];if(!r.createdTimeProperty)throw new fi.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:n_.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,mk.asyncSetTimeout)(jne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%zne===0&&await u();return l.length>0&&await u(),s?lk(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 ck(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of ck(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&IA[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=Yi(t);if(!s)throw new fi.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===n_.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:nw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Yi(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){Yi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Yi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Yi(t),n={};switch(t.search_type){case s_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let 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 s_.USERNAME:{let s=t.search_values;for await(let i of uk(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return uk(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(nw,"getSelect");o(ck,"getRecords");o(Yi,"getTable");o(lk,"createDeleteResponse");o(uk,"groupRecordsInHistory")});var ss=D((cMe,_k)=>{"use strict";var{ResourceBridge:Qne}=(Ek(),M(hk)),Jne=ae();Jne.initSync();var Og;function Xne(){return Og||(Og=new Qne,Og)}o(Xne,"getBridge");_k.exports=Xne()});var mi=D((uMe,Tk)=>{var Zne=Vi(),{promisify:ese}=require("util"),{getDatabases:Sk}=(Oe(),M(mt));Tk.exports={setSchemaDataToGlobal:gk,getTableSchema:tse,getSystemSchema:rse,setSchemaDataToGlobalAsync:ese(gk)};function gk(e){global.hdb_schema=Sk(),e&&e()}o(gk,"setSchemaDataToGlobal");function tse(e,t,r){let n=Sk()[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(tse,"getTableSchema");function rse(){return Zne}o(rse,"getSystemSchema")});var ln=D((fMe,bk)=>{"use strict";var Lg=rI(),Qr=oe(),nse=require("util"),Dg=ss(),sse=mi(),yk=j(),{handleHDBError:pl,hdbErrors:ise}=_e(),{HTTP_STATUS_CODES:hl}=ise,ose=nse.promisify(sse.getTableSchema),ase="updated",Rk="inserted",Ak="upserted";bk.exports={insert:lse,update:use,upsert:dse,validation:cse,flush:fse};async function cse(e){if(Qr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Qr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ose(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&&Qr.isEmptyOrZeroLength(c[n]))throw yk.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(!Qr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw yk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Qr.isEmpty(c[n])&&c[n]!==""&&s.has(Qr.autoCast(c[n]))&&(c.skip=!0),s.add(Qr.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(cse,"validation");async function lse(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Lg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Dg.createRecords(e);return Pg(Rk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(lse,"insertData");async function use(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Lg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Dg.updateRecords(e);return Qr.isEmpty(n.existing_rows)?Pg(ase,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(use,"updateData");async function dse(e){if(e.operation!=="upsert")throw pl(new Error,"invalid operation, must be upsert",hl.INTERNAL_SERVER_ERROR);let t=Lg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Dg.upsertRecords(e);return Pg(Ak,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(dse,"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===Rk?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===Ak?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(Pg,"returnObject");function fse(e){return Qr.transformReq(e),Dg.flush(e.schema,e.table)}o(fse,"flush")});var ow=D((pMe,Nk)=>{var mse=at(),iw=require("joi"),{hdbTable:pse,hdbDatabase:Ik}=Gi(),wk={schema:Ik,database:Ik,table:pse},hse={date:iw.date().iso().required()},Ese={timestamp:iw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Nk.exports=function(e,t){let r=t==="timestamp"?{...wk,...Ese}:{...wk,...hse},n=iw.object(r);return mse.validateBySchema(e,n)}});var Pk=D((hMe,Ok)=>{var _se=at(),aw=require("joi"),{hdbTable:gse,hdbDatabase:Ck}=Gi(),Sse=aw.object({schema:Ck,database:Ck,table:gse,hash_values:aw.array().required(),ids:aw.array()});Ok.exports=function(e){return _se.validateBySchema(e,Sse)}});var dw=D((EMe,Lk)=>{"use strict";var cw=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}},lw=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}},uw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Lk.exports={InsertObject:cw,NoSQLSeachObject:lw,DeleteResponseObject:uw}});var Va=D((gMe,xk)=>{"use strict";var Mk=ow(),Tse=Pk(),El=oe(),Dk=require("moment"),vk=j(),{promisify:yse,callbackify:Rse}=require("util"),_l=(H(),M(Y)),Ase=mi(),fw=yse(Ase.getTableSchema),mw=ss(),{DeleteResponseObject:bse}=dw(),{handleHDBError:Ga,hdbErrors:Ise}=_e(),{HDB_ERROR_MSGS:Mg,HTTP_STATUS_CODES:$a}=Ise,wse="records successfully deleted",Nse=Rse(Uk);xk.exports={delete:Nse,deleteRecord:Uk,deleteFilesBefore:Cse,deleteAuditLogsBefore:Ose};async function Cse(e){let t=Mk(e,"date");if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),!Dk(e.date,Dk.ISO_8601).isValid())throw Ga(new Error,Mg.INVALID_DATE,$a.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Mg.INVALID_DATE,!0);let n=El.checkSchemaTableExist(e.schema,e.table);if(n)throw Ga(new Error,n,$a.NOT_FOUND,_l.LOG_LEVELS.ERROR,n,!0);let s=await mw.deleteRecordsBefore(e);if(await fw(e.schema,e.table),vk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(Cse,"deleteFilesBefore");async function Ose(e){let t=Mk(e,"timestamp");if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),isNaN(e.timestamp))throw Ga(new Error,Mg.INVALID_VALUE("Timestamp"),$a.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Mg.INVALID_VALUE("Timestamp"),!0);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ga(new Error,r,$a.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);let n=await mw.deleteAuditLogsBefore(e);return await fw(e.schema,e.table),vk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(Ose,"deleteAuditLogsBefore");async function Uk(e){e.ids&&(e.hash_values=e.ids);let t=Tse(e);if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);El.transformReq(e);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ga(new Error,r,$a.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);try{await fw(e.schema,e.table);let n=await mw.deleteRecords(e);return El.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${wse}`),n}catch(n){if(n.message===_l.SEARCH_NOT_FOUND_MESSAGE){let s=new bse;return s.message=_l.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(Uk,"deleteRecord")});var gw={};Ie(gw,{HASH_FUNCTION:()=>kr,hash:()=>Ew,validate:()=>_w});function pw(e=ap){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(op.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Ew(e,t=kr[Fk?.toUpperCase()]??kr.SHA256){return hw[t](e)}function _w(e,t,r=kr[Fk?.toUpperCase()]??kr.SHA256){return e?Pse[r](e,t):!1}var op,rd,Bk,Fk,ap,kk,kr,hw,Pse,Sw=ie(()=>{op=w(require("node:crypto")),rd=w(require("argon2")),Bk=w(ae());H();Fk=(0,Bk.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),ap=16,kk=9,kr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(pw,"generateSalt");hw={[kr.MD5]:(e,t=void 0)=>{t=t??pw(kk);let r=op.createHash(kr.MD5).update(e+t).digest("hex");return t+r},[kr.SHA256]:(e,t=void 0)=>{t=t??pw(ap);let r=op.createHash(kr.SHA256).update(e+t).digest("hex");return t+r},[kr.ARGON2ID]:async e=>{let t=pw(ap),r=await rd.hash(e,{type:rd.argon2id,salt:Buffer.from(t)});return t+r}},Pse={[kr.MD5]:(e,t)=>{let r=e.slice(0,kk);return e===hw[kr.MD5](t,r)},[kr.SHA256]:(e,t)=>{let r=e.slice(0,ap);return e===hw[kr.SHA256](t,r)},[kr.ARGON2ID]:async(e,t)=>await rd.verify(e.slice(ap),t)};o(Ew,"hash");o(_w,"validate")});var qk=D((RMe,Hk)=>{var Tw=at(),un={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Lse(e){return un.password.presence=!0,un.username.presence=!0,un.role.presence=!0,un.active.presence=!0,Tw.validateObject(e,un)}o(Lse,"addUserValidation");function Dse(e){return un.password.presence=!1,un.username.presence=!0,un.role.presence=!1,un.active.presence=!1,Tw.validateObject(e,un)}o(Dse,"alterUserValidation");function Mse(e){return un.password.presence=!1,un.username.presence=!0,un.role.presence=!1,un.active.presence=!1,Tw.validateObject(e,un)}o(Mse,"dropUserValidation");Hk.exports={addUserValidation:Lse,alterUserValidation:Dse,dropUserValidation:Mse}});var eH=D((IMe,Zk)=>{"use strict";var yw=require("recursive-iterator"),vse=require("alasql"),Rw=require("clone"),Gk=oe(),{handleHDBError:$k,hdbErrors:Use}=_e(),{HDB_ERROR_MSGS:Vk,HTTP_STATUS_CODES:Kk}=Use,{getDatabases:xse}=(Oe(),M(mt)),Bse=["DISTINCT_ARRAY"],Yk=Symbol("validateTables"),Aw=Symbol("validateTable"),bMe=Symbol("getAllColumns"),Wk=Symbol("validateAllColumns"),vg=Symbol("findColumn"),zk=Symbol("validateOrderBy"),cp=Symbol("validateSegment"),bw=Symbol("validateColumn"),jk=Symbol("setColumnsForTable"),Qk=Symbol("checkColumnsForAsterisk"),Jk=Symbol("validateGroupBy"),Xk=Symbol("hasColumns"),Iw=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Yk](),this[Qk](),this[Wk]()}[Yk](){if(this[Xk]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Aw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Aw](t.table)})}}[Xk](){let t=!1,r=new yw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Aw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=xse();if(!r[t.databaseid])throw $k(new Error,Vk.SCHEMA_NOT_FOUND(t.databaseid),Kk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw $k(new Error,Vk.TABLE_NOT_FOUND(t.databaseid,t.tableid),Kk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Rw(s);i.table=Rw(t),this.attributes.push(i)})}[vg](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)}[Qk](){let t=new yw(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 vse.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Wk](){this[cp](this.statement.columns,!1),this[cp](this.statement.joins,!1),this[cp](this.statement.where,!1),this[Jk](this.statement.group,!1),this[cp](this.statement.order,!0)}[cp](t,r){if(!t)return;let n=new yw(t),s=[];for(let{node:i,path:a}of n)!Gk.isEmpty(i)&&!Gk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[zk](i):s.push(this[bw](i)));return s}[Jk](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&Bse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Rw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[vg](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[vg](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`}[zk](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[bw](t)}[bw](t){let r=this[vg](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]}};Zk.exports=Iw});var sH=D((NMe,nH)=>{"use strict";var tH=require("lodash"),lp=require("mathjs"),Fse=require("jsonata"),rH=oe();nH.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?tH.uniqWith(e,tH.isEqual):e,"distinct_array"),searchJSON:kse,mad:up.bind(null,lp.mad),mean:up.bind(null,lp.mean),mode:up.bind(null,lp.mode),prod:up.bind(null,lp.prod),median:up.bind(null,lp.median)};function up(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(up,"aggregateFunction");function kse(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(rH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),rH.isEmpty(this.__ala__.res[r])){let n=Fse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(kse,"searchJSON")});var oH=D((OMe,iH)=>{"use strict";var lr=require("moment"),ww="YYYY-MM-DDTHH:mm:ss.SSSZZ";lr.suppressDeprecationWarnings=!0;iH.exports={current_date:o(()=>lr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>lr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return lr(e).utc().format("YYYY");case"month":return lr(e).utc().format("MM");case"day":return lr(e).utc().format("DD");case"hour":return lr(e).utc().format("HH");case"minute":return lr(e).utc().format("mm");case"second":return lr(e).utc().format("ss");case"millisecond":return lr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>lr(e).utc().format(ww),"date"),date_format:o((e,t)=>lr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>lr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>lr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=lr(e).utc(),s=lr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>lr().utc().valueOf(),"now"),get_server_time:o(()=>lr().format(ww),"get_server_time"),offset_utc:o((e,t)=>lr(e).utc().utcOffset(t).format(ww),"offset_utc")}});var uH=D((LMe,lH)=>{"use strict";var Hse=require("@turf/area"),qse=require("@turf/length"),Gse=require("@turf/circle"),$se=require("@turf/difference"),Vse=require("@turf/distance"),Kse=require("@turf/boolean-contains"),Yse=require("@turf/boolean-equal"),Wse=require("@turf/boolean-disjoint"),zse=require("@turf/helpers"),aH=(H(),M(Y)),ze=oe(),Go=j();lH.exports={geoArea:jse,geoLength:Qse,geoCircle:Jse,geoDifference:Xse,geoDistance:cH,geoNear:Zse,geoContains:eie,geoEqual:tie,geoCrosses:rie,geoConvert:nie};function jse(e){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Hse.default(e)}catch(t){return Go.trace(t,e),NaN}}o(jse,"geoArea");function Qse(e,t){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return qse.default(e,{units:t||"kilometers"})}catch(r){return Go.trace(r,e),NaN}}o(Qse,"geoLength");function Jse(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Gse.default(e,t,{units:r||"kilometers"})}catch(n){return Go.trace(n,e,t),NaN}}o(Jse,"geoCircle");function Xse(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 $se(e,t)}catch(r){return Go.trace(r,e,t),NaN}}o(Xse,"geoDifference");function cH(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 Vse.default(e,t,{units:r||"kilometers"})}catch(n){return Go.trace(n,e,t),NaN}}o(cH,"geoDistance");function Zse(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 cH(e,t,n)<=r}catch(s){return Go.trace(s,e,t),!1}}o(Zse,"geoNear");function eie(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 Kse.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(eie,"geoContains");function tie(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 Yse.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(tie,"geoEqual");function rie(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!Wse.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(rie,"geoCrosses");function nie(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(aH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(aH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ze.autoCastJSON(e)),zse[t](e,r)}o(nie,"geoConvert")});var Ug=D((MMe,dH)=>{var gl=sH(),is=oH(),Wi=uH();dH.exports=e=>{e.aggr.mad=e.aggr.MAD=gl.mad,e.aggr.mean=e.aggr.MEAN=gl.mean,e.aggr.mode=e.aggr.MODE=gl.mode,e.aggr.prod=e.aggr.PROD=gl.prod,e.aggr.median=e.aggr.MEDIAN=gl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=gl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=gl.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=Wi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Wi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Wi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Wi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Wi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Wi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Wi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Wi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Wi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Wi.geoNear}});var hH=D((vMe,pH)=>{"use strict";var dp=require("lodash"),Fn=require("alasql");Fn.options.cache=!1;var sie=Ug(),fH=require("clone"),xg=require("recursive-iterator"),Ve=j(),st=oe(),nd=ss(),iie=(H(),M(Y)),{hdbErrors:oie}=_e(),{getDatabases:mH}=(Oe(),M(mt)),aie="IS NULL",pi="There was a problem performing this search. Please check the logs and try again.";sie(Fn);var Nw=class{static{o(this,"SQLSearch")}constructor(t,r){if(st.isEmpty(t))throw Ve.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),st.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!st.isEmptyOrZeroLength(n))return Ve.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ve.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ve.error(n),new Error(pi)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ve.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ve.error(n),new Error(pi)}if(Object.keys(this.data).length===0)return Ve.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ve.error("Error thrown from processJoins in SQLSearch class method search."),Ve.error(n),new Error(pi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ve.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ve.error(n),new Error(pi)}try{return t=await this._finalSQL(),t}catch(n){throw Ve.error("Error thrown from finalSQL in SQLSearch class method search."),Ve.error(n),new Error(pi)}}_getColumns(){let t=new xg(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(fH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=dp.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=mH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(st.isEmpty(this.statement.where)){Ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new xg(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 Fn.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 Fn.yy.LogicValue({value:i}):n instanceof Fn.yy.StringValue&&st.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Fn.yy.NumValue({value:i}))});if(t){Ve.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new xg(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(iie.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&&dp.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 Fn.promise(r)}catch(r){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ve.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(fH(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(aie)>-1&&this.tables.forEach(s=>{let i={columnid:mH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=dp.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 nd.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw Ve.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(pi)}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 nd.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(pi)}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 nd.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 Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ve.error(d),new Error(pi)}else try{c.attribute=s.attribute,c.value="*";let d=await nd.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ve.error(d),new Error(pi)}}}_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 Fn.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 Fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Fn.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 Fn.yy.FuncValue:new Fn.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 Fn.promise(h,t),t=null}catch(p){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ve.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];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=dp.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 xg(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=dp.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ve.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ve.error(i),new Error(pi)}}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 nd.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 Ve.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ve.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(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();Ve.trace(`Final SQL: ${s}`),n=await Fn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ve.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ve.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ve.error(oie.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ve.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((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 nd.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 Ve.error("There was an error when processing this SQL operation. Check your logs"),Ve.error(a),new Error(pi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};pH.exports=Nw});var dn=D((xMe,EH)=>{"use strict";var cie=eH();EH.exports={searchByConditions:uie,searchByHash:die,searchByValue:fie,search:mie};var Cw=ss(),{transformReq:Ow}=oe(),lie=hH();async function uie(e){return Ow(e),Cw.searchByConditions(e)}o(uie,"searchByConditions");async function die(e){Ow(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Cw.searchByHash(e))r&&t.push(r);return t}o(die,"searchByHash");async function fie(e){Ow(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Cw.searchByValue(e))t.push(r);return t}o(fie,"searchByValue");function mie(e,t){try{let r=new cie(e);r.validate(),new lie(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(mie,"search")});var zi=D((FMe,TH)=>{"use strict";var fp=require("crypto"),pie=ae(),{CONFIG_PARAMS:hie}=(H(),M(Y)),gH="aes-256-cbc",Eie=32,_ie=16,Pw=64,SH=32,gie=Pw+SH,_H=new Map;TH.exports={encrypt:Sie,decrypt:Tie,createNatsTableStreamName:yie};function Sie(e){let t=fp.randomBytes(Eie),r=fp.randomBytes(_ie),n=fp.createCipheriv(gH,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(Sie,"encrypt");function Tie(e){let t=e.substr(0,Pw),r=e.substr(Pw,SH),n=e.substr(gie,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=fp.createDecipheriv(gH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(Tie,"decrypt");function yie(e,t){let r=pie.get(hie.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=_H.get(r);return n||(n=fp.createHash("md5").update(r).digest("hex"),_H.set(r,n)),n}o(yie,"createNatsTableStreamName")});var pt=D((qMe,RH)=>{"use strict";var{platform:HMe}=require("os"),Rie="nats-server.zip",Lw="nats-server",Aie=process.platform==="win32"?`${Lw}.exe`:Lw,bie=/^[^\s.,*>]+$/,yH="__request__",Iie=o(e=>`${e}.${yH}`,"REQUEST_SUBJECT"),wie={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Nie={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Cie={HUB:"hub.pid",LEAF:"leaf.pid"},Oie={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Pie={SUCCESS:"success",ERROR:"error"},Lie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Die={TXN:"txn",MSGID:"msgid"},sd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Mie={[sd.ERR]:1,[sd.WRN]:2,[sd.INF]:3,[sd.DBG]:4,[sd.TRC]:5},vie={debug:"-D",trace:"-DVV"};RH.exports={NATS_SERVER_ZIP:Rie,NATS_SERVER_NAME:Lw,NATS_BINARY_NAME:Aie,PID_FILES:Cie,NATS_CONFIG_FILES:Nie,SERVER_SUFFIX:Oie,NATS_TERM_CONSTRAINTS_RX:bie,REQUEST_SUFFIX:yH,UPDATE_REMOTE_RESPONSE_STATUSES:Pie,CLUSTER_STATUS_STATUSES:Lie,REQUEST_SUBJECT:Iie,SUBJECT_PREFIXES:Die,MSG_HEADERS:wie,LOG_LEVELS:sd,LOG_LEVEL_FLAGS:vie,LOG_LEVEL_HIERARCHY:Mie}});var Dw=D(fn=>{"use strict";var Uie={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
11
|
+
`},"serialize"),compressible:!1,q:.8});an.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:_m,serialize:gm,deserialize:eZ,q:.5};an.set("*/*",HU);an.set("",HU);o(eZ,"tryJSONParse");o(Tm,"registerContentHandlers");tZ=(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}=b_(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(b_,"findBestSerializer");MU=WA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);o(ym,"serialize");o(Co,"serializeMessage");o(JA,"asyncSerialization");o(XA,"hasAsyncSerialization");o(rZ,"streamToBuffer");nZ=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(sZ,"isBufferEncoding");o(iZ,"parseContentType");o(Oo,"getDeserializer");o(oZ,"deserializerUnknownType");o(aZ,"transformIterable");o(A_,"toCsvStream")});var sb={};Ie(sb,{Blob:()=>Is,blobsWereEncoded:()=>Wc,databasePaths:()=>eb,decodeBlobsWithWrites:()=>M_,decodeFromDatabase:()=>zc,decodeWithBlobCallback:()=>wm,deleteBlob:()=>P_,deleteBlobsInObject:()=>Oa,deleteRootBlobPathsForDB:()=>nb,encodeBlobsAsBuffers:()=>_Z,encodeBlobsWithFilePath:()=>D_,findBlobsInObject:()=>Ou,getFileId:()=>L_,getFilePathForBlob:()=>QU,getRootBlobPathsForDB:()=>Im,setDeletionDelay:()=>dZ});function WU(){}function P_(e){let t=QU(e);t&&setTimeout(()=>{(0,nt.unlink)(t,r=>{r&&Lo.default.debug?.("Error trying to remove blob file",r)})},zU)}function dZ(e){zU=e}function jU(e){let t=On.get(e);if(!t)t={storageIndex:0,fileId:null,store:Pn},On.set(e,t);else{if(t.fileId)return t;t.store=Pn}return mZ(t),t.source?ZA(e,t.source,t):t.contentBuffer?fZ(e,t):ZA(e,Am.Readable.from(e.stream()),t),t}function ZA(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,nt.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(lZ),p=(0,C_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(cZ),t.pipe(f)),t.on("error",E);function h(g){let A=BigInt(g),S=new Uint8Array(wr),R=new DataView(S.buffer);return A|=BigInt(a?rb:YU)<<48n,R.setBigInt64(0,A),S}o(h,"createHeader");function E(g){i.unlock(d,0);let A=f.fd;g?(A&&(0,nt.close)(A),u(g)):c?(0,nt.fdatasync)(A,S=>{S&&u(S),l(),(0,nt.close)(A)}):(l(),(0,nt.close)(A))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-wr;e.size=g,(0,nt.write)(f.fd,h(g),0,wr,0,E)}})}),e}function L_(e){return On.get(e)?.fileId}function QU(e){let t=On.get(e);return t?.fileId&&bm(t)}function Im(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=eb.get(e);if(!t){if(!e.databaseName)return Lo.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,O_.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Mo.join)(n,e.databaseName)):t=[(0,Mo.join)((0,O_.getHdbBasePath)(),"blobs",e.databaseName)],eb.set(e,t)}return t}async function nb(e){let t=Im(e);t&&await Promise.all(t.map(r=>JU(r)))}async function JU(e){if((0,nt.existsSync)(e)){for(let t of await(0,Ns.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await JU((0,Mo.join)(e,t.name));else try{await(0,Ns.unlink)((0,Mo.join)(e,t.name))}catch(r){Lo.default.warn?.("Error deleting file",r)}try{await(0,Ns.rmdir)(e)}catch(t){Lo.default.warn?.("Error deleting directory",t)}}}function bm({storageIndex:e,fileId:t,store:r}){let n=Im(r);return(0,Mo.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 fZ(e,t){let r=t.contentBuffer,n=r.length;if(!(n<KU))return e.size=n,ZA(e,Am.Readable.from([r]),t)}function mZ(e){let t=Im(e.store),r=pZ(),n=t?.length>1?hZ(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=bm(e),a=(0,Mo.dirname)(i);(0,nt.existsSync)(a)||(0,tb.ensureDirSync)(a),e.filePath=i}function pZ(){let e=VU.get(Pn);if(!e){let t=0,r=Im(Pn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,nt.existsSync)(n))for(let c of(0,nt.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,Mo.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Pn.getUserSharedBuffer("blob-file-id",e.buffer)),VU.set(Pn,e)}return Number(Atomics.add(e,0,1n))}function hZ(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(N_);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,EZ(e)),e.frequencyTable[t%N_]}async function EZ(e){if(!Ns.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,Ns.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,tb.ensureDirSync)(s),a=await(0,Ns.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(N_),n=t.map(s=>1/s);for(let s=0;s<N_;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 D_(e,t,r){Cu=t,Pn=r,Wc=!1;try{return e()}finally{Cu=void 0,Pn=void 0}}function _Z(e){Yr=[];let t;try{t=e()}catch(n){throw Yr=void 0,n}let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r?r.then(()=>e()):t}function M_(e,t){try{Yr=[],Do=t,e()}catch(n){throw Do=void 0,Yr=void 0,n}Do=void 0;let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r}function wm(e,t,r){Pn=r;try{return Do=t,e()}finally{Do=void 0}}function zc(e,t){return Pn=t,e()}function Oa(e){Ou(e,t=>{P_(t)})}function Ou(e,t){if(e instanceof Is)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Ou(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Ou(e[r],t)}}function SZ(){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 Fi,Ns,nt,C_,Am,tb,O_,Mo,Lo,KU,wr,YU,rb,GU,cZ,lZ,$U,On,Do,Is,Cu,Yr,Pn,Wc,Rm,I_,uZ,w_,zU,eb,VU,N_,gZ,ws=ie(()=>{Fi=require("msgpackr"),Ns=require("node:fs/promises"),nt=require("node:fs"),C_=require("node:zlib"),Am=require("node:stream"),tb=require("fs-extra"),O_=w(ae());H();Mo=require("path"),Lo=w(Jn());Po();KU=8192,wr=8,YU=0,rb=1,GU=255,cZ=new Uint8Array([0,YU,255,255,255,255,255,255]),lZ=new Uint8Array([0,rb,255,255,255,255,255,255]),$U=0xffffffffffff,On=new WeakMap,Is=global.Blob||SZ(),Wc=!1,Rm=new Uint8Array(8),I_=new DataView(Rm.buffer),uZ=6e4;o(WU,"InstanceOfBlobWithNoConstructor");WU.prototype=Is.prototype;w_=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=On.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):(XA()&&JA(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=On.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=bm(t),a,c=o(async()=>{let l,u=wr;try{if(l=await(0,Ns.readFile)(i),l.length>=wr){l.copy(Rm,0,0,wr);let f=I_.getBigUint64(0);if(Number(f>>48n)===GU)throw new Error("Error in blob: "+buffer.subarray(wr));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]===rb?new Promise((f,m)=>{(0,C_.deflate)(l.subarray(wr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(wr))},"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=On.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=bm(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,nt.open)(i,"r",(R,N)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Lo.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(R),p.#e?.forEach(O=>O(R))}else a=N,A(N)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,A=100;return new Promise(o(function S(R,N){function O(te){(0,nt.close)(a),clearTimeout(d),u&&u.close(),N(te),p.#e?.forEach(q=>q(te))}o(O,"onError");let F=Buffer.allocUnsafe(262144);(0,nt.read)(a,F,0,F.length,c,(te,q,k)=>{if(l+=q,te)return O(te);if(c===0){if(q<wr){A-- >0&&f!==!1?(h(),Lo.default.debug?.("File was empty, waiting for data to be written",i,A),setTimeout(()=>S(R,N),20).unref()):(Lo.default.debug?.("File was empty, throwing error",i,A),N(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Rm,0,0,wr);let J=I_.getBigUint64(0);if(Number(J>>48n)===GU)return O(new Error("Error in blob: "+k.subarray(wr)));if(g=Number(J&0xffffffffffffn),g<$U&&p.size!==g&&(p.size=g,p.#t))for(let W of p.#t)W(g);k=k.subarray(wr,q),l-=wr}else if(q===0){let J=Buffer.allocUnsafe(8);return(0,nt.read)(a,J,0,wr,0,W=>{if(W)return O(W);if(Rm.set(J),g=Number(I_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},uZ).unref():(u=(0,nt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(R,N))}),S(R,N)):m?O(new Error("Blob is incomplete")):(m=!0,S(R,N));return}(0,nt.close)(a),E.close(),R()})}else k=k.subarray(0,q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=q,S(R,N);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=g=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(J){return Lo.default.debug?.("Error enqueuing chunk",J),R()}l===g&&((0,nt.close)(a),E.close()),R()})},"readMore"))},"pull"),cancel(){(0,nt.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=On.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};On.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)};On.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(Pn=t?.primaryStore?.rootStore,!Pn)throw new Error("No target table specified");return jU(this).saving??Promise.resolve()}},zU=500;o(P_,"deleteBlob");o(dZ,"setDeletionDelay");global.createBlob=function(e,t){let r=new w_(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(On.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Am.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Am.Readable.from(e);else throw new Error("Invalid source type");return r};o(jU,"saveBlob");o(ZA,"writeBlobWithStream");o(L_,"getFileId");o(QU,"getFilePathForBlob");eb=new Map;o(Im,"getRootBlobPathsForDB");o(nb,"deleteRootBlobPathsForDB");o(JU,"rimrafSteadily");o(bm,"getFilePath");o(fZ,"writeBlobWithBuffer");o(mZ,"generateFilePath");VU=new Map;o(pZ,"getNextFileId");N_=128;o(hZ,"getNextStorageIndex");o(EZ,"createFrequencyTableForStoragePaths");o(D_,"encodeBlobsWithFilePath");o(_Z,"encodeBlobsAsBuffers");o(M_,"decodeBlobsWithWrites");o(wm,"decodeWithBlobCallback");o(zc,"decodeFromDatabase");o(Oa,"deleteBlobsInObject");o(Ou,"findBlobsInObject");gZ=new Fi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Fi.addExtension)({Class:Is,type:11,unpack:o(function(e){let t=gZ.unpack(e),r=new w_;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(On.set(r,{storageIndex:t[1],fileId:t[2],store:Pn}),Do)return Do(r)??r;if(!Pn)throw new Error("No store specified, cannot load blob from storage")}else On.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=On.get(e);if(Cu!==void 0&&(Wc=!0,t?.recordId!==void 0&&t.recordId!==Cu))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,Fi.pack)([r,t.contentBuffer])}if(Cu!==void 0){if(t=jU(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Cu,(0,Fi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Do)return Do(e),(0,Fi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,nt.readFileSync)(bm(t));if(n.length>=wr&&(n.copy(Rm,0,0,wr),Number(I_.getBigUint64(0)&0xffffffffffffn)===n.length-wr))return Buffer.concat([(0,Fi.pack)([r]),n]);if(Yr)Yr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Yr)return Yr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Fi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(SZ,"polyfillBlob")});var rx={};Ie(rx,{onStorageReclamation:()=>Nm,runReclamationHandlers:()=>cb,setAvailableSpaceRatioGetter:()=>yZ});function Nm(e,t,r){(r||(0,U_.getWorkerIndex)()===(0,U_.getWorkerCount)()-1)&&(v_.has(e)||v_.set(e,[]),v_.get(e).push({priority:0,handler:t}),ab||(ab=setTimeout(cb,ZU).unref()))}async function cb(){for(let[e,t]of v_)try{let r=await tx(e),n=TZ/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&&(ob.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){ob.default.error?.("Error running storage reclamation handlers",r)}ab=setTimeout(cb,ZU).unref()}function yZ(e){tx=e??ex}var ib,U_,ob,x_,XU,v_,TZ,ZU,ab,ex,tx,B_=ie(()=>{ib=require("node:fs/promises"),U_=w(Je()),ob=w(Jn());H();x_=w(ae()),XU=w(oe());x_.default.initSync();v_=new Map,TZ=x_.default.get(B.STORAGE_RECLAMATION_THRESHOLD)??.4,ZU=(0,XU.convertToMS)(x_.default.get(B.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Nm,"onStorageReclamation");ex=o(async e=>{if(ib.statfs){let t=await(0,ib.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(cb,"runReclamationHandlers");o(yZ,"setAvailableSpaceRatioGetter")});var hx={};Ie(hx,{ACTION_32_BIT:()=>G_,ACTION_64_BIT:()=>IZ,AUDIT_STORE_OPTIONS:()=>Pm,Decoder:()=>Qc,HAS_BLOBS:()=>Ln,HAS_CURRENT_RESIDENCY_ID:()=>Jc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Mm,HAS_ORIGINATING_OPERATION:()=>Dm,HAS_PREVIOUS_RESIDENCY_ID:()=>Xc,REMOTE_SEQUENCE_UPDATE:()=>$_,createAuditEntry:()=>Zc,getLastRemoved:()=>AZ,openAuditStore:()=>H_,readAuditEntry:()=>Ut,removeAuditEntry:()=>q_,setAuditRetention:()=>bZ,transactionKeyEncoder:()=>dx});function H_(e){let t=e.auditStore=e.openDB(lb.AUDIT_STORE_NAME,{create:!1,...Pm});t||(t=e.auditStore=e.openDB(lb.AUDIT_STORE_NAME,Pm),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=db;Nm(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()-ub/(1+i*i)})){try{m=q_(t,h,E)}catch(g){Pu.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=RZ){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,ub/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,Om.getWorkerIndex)()===(0,Om.getWorkerCount)()-1&&c(),(0,Om.getWorkerIndex)()===0&&!nx)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(nx=!0,Pu.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function q_(e,t,r){let n=wZ(r),s;if(n&Ln){s=Ut(r);let i=e.tableStores[s.tableId],a=i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&zc(()=>Oa(s.getValue(i)),i.rootStore)}if((n&15)===fb){s=s||Ut(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function sx(e,t){mb[0]=t,e.put(Symbol.for("last-removed"),fx)}function AZ(e){let t=e.get(Symbol.for("last-removed"));if(t)return fx.set(t),mb[0]}function bZ(e,t=db){ub=e,db=t}function Zc(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?Pa.setFloat64(0,n):Cs.set(pb),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}A(s),A(t),g(r),Pa.setFloat64(h,e),h+=8,l&Jc&&A(u),l&Xc&&A(d),l&Mm&&(Pa.setFloat64(h,f),h+=8),l&Dm&&A(px[m]),i?g(i):Cs[h++]=0,l?Pa.setUint32(n?8:0,p|l|3221225472):Cs[n?8:0]=p;let E=Cs.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let R=h;h+=1,h=(0,jc.writeKey)(S,Cs,h);let N=h-R-1;N>127?N>16383?(Pu.error("Key or username was too large for audit entry",S),h=R+1,Cs[R]=0):(Cs.copyWithin(R+2,R+1,h),Pa.setUint16(R,N|32768),h++):Cs[R]=N}function A(S){S<128?Cs[h++]=S:S<16384?(Pa.setUint16(h,S|32768),h+=2):S<1056964608?(Pa.setUint32(h,S|3221225472),h+=4):(Cs[h]=255,Pa.setUint32(h+1,S),h+=5)}}function wZ(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Qc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Ut(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Qc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&Jc&&(m=n.readInt()),i&Xc&&(p=n.readInt()),i&Mm&&(h=n.readFloat64()),i&Dm){let R=n.readInt();E=px[R]}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,jc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return A>g?(0,jc.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(R,N,O){if(i&F_||i&Cm&&!N)return S||(S=zc(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),S;if(i&Cm&&O)return qA(R.getEntry(this.recordId),O,R)},getBinaryValue(){return i&(F_|Cm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Pu.error("Reading audit entry error",n,e),{}}}var jc,k_,lb,Om,ux,Pu,Cs,Pa,dx,Pm,ub,RZ,mb,fx,db,nx,F_,Cm,ix,fb,ox,ax,cx,lx,G_,IZ,$_,Jc,Xc,Dm,Mm,Ln,mx,px,Qc,Io=ie(()=>{jc=require("ordered-binary"),k_=w(ae()),lb=w(Vt());H();Om=w(Je()),ux=w(oe());el();Pu=w(j());T_();ws();B_();(0,k_.initSync)();Cs=Buffer.alloc(2816),Pa=new DataView(Cs.buffer,Cs.byteOffset,2816),dx={writeKey(e,t,r){return e===Lm?(t.set(Lm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,jc.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,jc.readKey)(e,t,r)}},Pm={encoding:"binary",keyEncoder:dx},ub=(0,ux.convertToMS)((0,k_.get)(B.LOGGING_AUDITRETENTION))||86400*3,RZ=1e3,mb=new Float64Array(1),fx=new Uint8Array(mb.buffer),db=1e4,nx=!1;o(H_,"openAuditStore");o(q_,"removeAuditEntry");o(sx,"updateLastRemoved");o(AZ,"getLastRemoved");o(bZ,"setAuditRetention");F_=16,Cm=32,ix=1,fb=2,ox=3,ax=4,cx=5,lx=6,G_=14,IZ=15,$_=11,Jc=512,Xc=1024,Dm=2048,Mm=4096,Ln=8192,mx={put:ix|F_,[ix]:"put",delete:fb,[fb]:"delete",message:ox|F_,[ox]:"message",invalidate:ax|Cm,[ax]:"invalidate",patch:cx|Cm,[cx]:"patch",relocate:lx,[lx]:"relocate"},px={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Zc,"createAuditEntry");o(wZ,"readAction");o(Ut,"readAuditEntry");Qc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function V_(){return hb||(hb=Ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),hb}function CZ(e){return e=e.replace(NZ,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 OZ(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 _b(e){let t=Ex.default.createHash("shake128",{outputLength:4}),r;return(0,_x.isIPv6)(e)?r=CZ(e):r=e.toLowerCase(),OZ(Uint8Array.from(t.update(r).digest()))}var Ex,_x,Eb,hb,NZ,gb=ie(()=>{Oe();Ex=w(require("crypto")),_x=require("node:net"),Eb=new Map;o(V_,"getAnalyticsHostnameTable");NZ=/(\d{1,3}\.){3}\d{1,3}$/;o(CZ,"normalizeIPv6");o(OZ,"nodeHashToNumber");o(_b,"stableNodeId")});var vo,Sb=ie(()=>{vo={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var W_={};Ie(W_,{addAnalyticsListener:()=>Bm,analyticsDelay:()=>Ab,calculateCPUUtilization:()=>Ux,diffResourceUsage:()=>xx,onAnalyticsAggregate:()=>wb,recordAction:()=>Xe,recordActionBinary:()=>zr,recordHostname:()=>bb,setAnalyticsEnabled:()=>DZ});function DZ(e){Px=e,clearTimeout(Um),Um=null}function MZ(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 vZ(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},Y_.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=Y_.get(i);a?MZ(e,a):vZ(i,e,t,r,n,s),Um||UZ()}function zr(e,t,r,n,s){Xe(!!e,t,r,n,s)}function Bm(e){Dx.push(e)}function UZ(){Tb||=performance.now(),Um=setTimeout(async()=>{Um=null;let e=performance.now()-Tb;Tb=0;let t=[],r={time:Date.now(),period:e,threadId:tl.threadId,metrics:t};for(let[s,i]of Y_){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:tl.threadId,byThread:!0,...n});for(let s of Dx)s(t);Y_=new Map,tl.parentPort?tl.parentPort.postMessage({type:Lx,report:r}):Hx({report:r})},Ab).unref()}async function bb(){let e=Ue.hostname;Wr.trace?.("recordHostname server.hostname:",e);let t=_b(e);Wr.trace?.("recordHostname nodeId:",t);let r=V_();if(!await r.get(t)){let s={id:t,hostname:e};Wr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Lu(e,t){let r=Ue.hostname,n=Eb.get(r);n?Wr.trace?.("storeMetric cached nodeId:",n):(n=_b(r),Wr.trace?.("storeMetric new nodeId:",n),Eb.set(r,n));let s={id:[(0,Rb.getNextMonotonicTime)(),n],...t};Wr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Ux(e,t){let r=e.userCPUTime+e.systemCPUTime;return Wr.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 xZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:vo.TABLE_SIZE,database:t,table:s,size:c};Wr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),Lu(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=xZ(e,r,n),l=a-c,u={metric:vo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};Lu(e,u),Wr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wr.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:vo.STORAGE_VOLUME,database:r,...i};Lu(e,a),Wr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Wr.warn?.("Error getting DB volume metrics",s)}}async function BZ(e,t=6e4){let r=Ib(),n=Fx(),s=new Promise(R=>{let N=performance.now();setImmediate(()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-N)+"ms"),N=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-N)+"ms"),R(O-N)})}),i;for(let R of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(R.value?.time){i=R.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:R,value:N}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!N)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:O,threadId:F}=N;for(let te of O||[]){let{path:q,method:k,type:J,metric:W,count:ue,total:ce,distribution:re,threads:Re,...Te}=te;ue||(ue=1);let Fe=W+(q?"-"+q:"");k!==void 0&&(Fe+="-"+k),J!==void 0&&(Fe+="-"+J);let qe=c.get(Fe);if(qe){if(qe.threads){let er=qe.threads[F];if(er)qe=er;else{qe.threads[F]={...Te};continue}}qe.count||(qe.count=1);let Rr=qe.count;for(let er in Te){let qt=Te[er];typeof qt=="number"&&(qe[er]=(qe[er]*Rr+qt*ue)/(Rr+ue))}qe.count+=ue,ce>=0&&(qe.total+=ce,qe.ratio=qe.total/qe.count)}else qe={period:t,...te},delete qe.distribution,c.set(Fe,qe),qe.byThread&&(qe.threads=[],qe.threads[F]={...Te},u.push(qe));if(re){re=re.map(er=>typeof er=="number"?{value:er,count:1}:er);let Rr=l.get(Fe);Rr?Rr.push(...re):l.set(Fe,re)}}await Bx()}for(let R of u){let{path:N,method:O,type:F,metric:te,count:q,total:k,distribution:J,threads:W,...ue}=R;W=W.filter(ce=>ce);for(let ce in ue){if(typeof R[ce]!="number")continue;let re=0;for(let Re of W){let Te=Re[ce];typeof Te=="number"&&(re+=Te)}R[ce]=re}R.count=W.length,delete R.threads,delete R.byThread}for(let[R,N]of l){let O=c.get(R);N.sort((er,qt)=>er.value>qt.value?1:-1);let F=O.count-1,te=[],q=0,k=0,J;for(let er of vx){let qt=F*er;for(;q<qt;)J=N[k++],q+=J.count,k===1&&q--;let tr=N[k>1?k-2:0];J||(J=N[0]),te.push(J.value-(J.value-tr.value)*(q-qt)/J.count)}let[W,ue,ce,re,Re,Te,Fe,qe,Rr]=te;Object.assign(O,{p1:W,p10:ue,p25:ce,median:re,p75:Re,p90:Te,p95:Fe,p99:qe,p999:Rr})}let f;for(let[,R]of c)R.time=d,Lu(n,R),f=!0;if(f)for(let R of Mx)R(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let R={metric:vo.MAIN_THREAD_UTILIZATION,idle:p-Tx,active:h-yx,taskQueueLatency:await s,time:m,...process.memoryUsage()};Lu(n,R)}Tx=p,yx=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Wr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=xx(K_,E);Wr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=K_.time?m-K_.time:t,g.cpuUtilization=Ux(g,g.period);let A={metric:vo.RESOURCE_USAGE,...g};Lu(n,A),K_=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 Ib(){return Ax||(Ax=Ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Fx(){return bx||(bx=Ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function HZ(){kx=!0;let e=(0,xm.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await BZ(Ab,e),await Rx(Ib(),FZ),await Rx(Fx(),kZ)},Math.min(e/2,2147483647)).unref()}function Hx(e,t){let r=e.report;r.threadId=t?.threadId||tl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Ix+=n.mean*n.count);r.totalBytesProcessed=Ix,t&&(r.metrics.push({metric:vo.UTILIZATION,...t.performance.eventLoopUtilization(wx.get(t))}),wx.set(t,t.performance.eventLoopUtilization())),r.id=(0,Rb.getNextMonotonicTime)(),Ib().primaryStore.put(r.id,r),kx||HZ(),qZ&&(qx=$Z(r))}async function $Z(e){if(await qx,!La){let r=(0,vm.dirname)(PZ());try{La=await(0,yb.open)((0,vm.join)(r,"analytics.log"),"r+")}catch{La=await(0,yb.open)((0,vm.join)(r,"analytics.log"),"w+")}}let t=(await La.stat()).size;if(t>GZ){let r=Buffer.alloc(t);await La.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await La.write(r,{position:0}),await La.truncate(r.length),t=r.length}await La.write(JSON.stringify(e)+`
|
|
12
|
+
`,t)}function wb(e){e&&Mx.push(e)}var tl,Nx,Cx,vm,yb,Rb,xm,Ox,PZ,LZ,Wr,Y_,Px,Um,Tb,Ab,Lx,Dx,Mx,vx,Tx,yx,K_,Bx,FZ,kZ,Ax,bx,kx,Ix,wx,qZ,qx,La,GZ,Os=ie(()=>{tl=require("worker_threads"),Nx=w(Je());Oe();Cx=w(j()),vm=require("path"),yb=require("fs/promises"),Rb=w(Cn()),xm=w(ae());H();xr();Ox=w(require("node:fs"));gb();Sb();({getLogFilePath:PZ,forComponent:LZ}=Cx.default),Wr=LZ("analytics").conditional;(0,xm.initSync)();Y_=new Map,Px=(0,xm.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;o(DZ,"setAnalyticsEnabled");o(MZ,"recordExistingAction");o(vZ,"recordNewAction");o(Xe,"recordAction");Ue.recordAnalytics=Xe;o(zr,"recordActionBinary");Tb=0,Ab=1e3,Lx="analytics-report",Dx=[],Mx=[];o(Bm,"addAnalyticsListener");vx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(UZ,"sendAnalytics");o(bb,"recordHostname");o(Lu,"storeMetric");o(Ux,"calculateCPUUtilization");o(xx,"diffResourceUsage");o(xZ,"storeTableSizeMetrics");o(gx,"storeDBSizeMetrics");o(Sx,"storeVolumeMetrics");o(BZ,"aggregation");Tx=0,yx=0,K_={userCPUTime:0,systemCPUTime:0},Bx=o(()=>new Promise(setImmediate),"rest");o(Rx,"cleanup");FZ=36e5,kZ=31536e6;o(Ib,"getRawAnalyticsTable");o(Fx,"getAnalyticsTable");(0,Nx.setChildListenerByType)(Lx,Hx);o(HZ,"startScheduledTasks");Ix=0,wx=new Map,qZ=!1;o(Hx,"recordAnalytics");GZ=1e6;o($Z,"logAnalytics");o(wb,"onAnalyticsAggregate")});var Yx={};Ie(Yx,{ENTRY:()=>KZ,HAS_EXPIRATION:()=>Q_,HAS_RESIDENCY_ID:()=>Db,HAS_STRUCTURE_UPDATE:()=>J_,LAST_TIMESTAMP_PLACEHOLDER:()=>Lm,LOCAL_TIMESTAMP:()=>VZ,METADATA:()=>vu,NEW_TIMESTAMP_PLACEHOLDER:()=>$x,NO_TIMESTAMP:()=>Nb,PENDING_LOCAL_TIME:()=>Mb,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>pb,RecordEncoder:()=>Lb,TIMESTAMP_ASSIGN_LAST:()=>WZ,TIMESTAMP_ASSIGN_NEW:()=>Vx,TIMESTAMP_ASSIGN_PREVIOUS:()=>Kx,TIMESTAMP_PLACEHOLDER:()=>z_,TIMESTAMP_RECORD_PREVIOUS:()=>Cb,entryMap:()=>Da,handleLocalTimeForGets:()=>X_,lastMetadata:()=>lt,recordUpdater:()=>vb,removeEntry:()=>nl});function QZ(){return km[0]=km[0]^64,YZ.getFloat64(0)}function X_(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[vu],l.localTime=lt.localTime,l.residencyId=lt.residencyId,l.size=lt.size,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l.value&&Da.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&&(Da.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[vu],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,rl.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<rl.length;u++){let d=rl[u].deref();(!d||d.isDone||d.isCommitted)&&rl.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function vb(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Mu=i?.localTime?Cb|Kx:Nb:Mu=l?i?.localTime?Cb|16384:Vx|16384:Nb;let p=u?.expiresAt;if(p>=0&&(c|=Q_),Fm=c,Ob=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Mu>0},E,g=0;try{let A=i?.residencyId,S=u?.residencyId;S&&(Pb=S,Fm|=Db,g|=Jc),A!==S&&(g|=Xc,A||(A=0)),c&Q_&&(g|=Mm),u?.originatingOperation&&(g|=Dm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Ln&&(r.getBinaryFast(i.localTime)||Oa(i.value));let R;if(s!==void 0&&(R=D_(()=>e.put(n,s,h),n,e.rootStore),Wc&&(g|=Ln)),l){let N=u?.user?.username;if(m&&(D_(()=>e.encoder.encode(m),n,e.rootStore),Wc&&(g|=Ln)),e.encoder.hasStructureUpdate&&(g|=J_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,F=r.get(O);if(F){let te=Ut(F).previousLocalTime;return R=r.put(O,Zc(a,t,n,te,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Du,g,S,A,p),{ifVersion:E}),R}}R=r.put(s===void 0?$x:Lm,Zc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Du,g,S,A,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&zZ.has(d)&&Xe(Du?.length??1,"db-write",u.tableToTrack,null),R}catch(A){throw A.message+=" id: "+n+" options: "+h,A}}}function nl(e,t,r){if(t)return t.value&&t.metadataFlags&Ln&&!e.auditStore.getBinaryFast(t.localTime)&&Oa(t.value),e.remove(t.key,r)}var Gx,j_,z_,Lm,pb,$x,VZ,vu,KZ,km,YZ,Nb,Vx,WZ,Kx,Cb,Q_,Db,Mb,J_,zZ,Da,jZ,Du,Mu,Fm,Ob,Pb,lt,Lb,rl,el=ie(()=>{Gx=require("msgpackr");Io();j_=w(j());ws();ws();Os();z_=new Uint8Array([1,1,1,1,4,64,0,0]),Lm=new Uint8Array([1,1,1,1,1,0,0,0]),pb=new Uint8Array([1,1,1,1,3,64,0,0]),$x=new Uint8Array([1,1,1,1,0,64,0,0]),VZ=Symbol("local-timestamp"),vu=Symbol("metadata"),KZ=Symbol("entry"),km=new Uint8Array(8),YZ=new DataView(km.buffer,0,8),Nb=0,Vx=0,WZ=1,Kx=3,Cb=4,Q_=16,Db=32,Mb=1,J_=256,zZ=new Set(["put","patch","delete","message","publish"]),Da=new WeakMap,Mu=0,Fm=-1,Ob=-1,Pb=0,lt=null,Lb=class extends Gx.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Da.get(this)?.version}getExpiresAt(){return Da.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Mu||Fm>=0){let c=0,l=Mu;l&&(c+=8,Mu=0);let u=Fm,d=Ob,f=Pb;u>=0&&(c+=4,Fm=-1,d>=0&&(c+=8,Ob=-1),f&&(c+=4,Pb=0));let m=jZ=n.call(this,i,a|2048|c);Du=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(z_[4]=l,z_[5]=l>>8,m.set(z_,p),p+=8),Wc&&(u|=Ln),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 Du=n.call(this,i,a),Du};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=QZ(),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&Q_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&Db&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=zc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return lt={localTime:l,[vu]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:zc(()=>super.decode(t,r),this.rootStore)}catch(c){return j_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(QZ,"getTimestamp");o(X_,"handleLocalTimeForGets");rl=[];setInterval(()=>{for(let e=0;e<rl.length;e++){let t=rl[e].deref();!t||t.isDone||t.isCommitted?rl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(j_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):j_.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(vb,"recordUpdater");o(nl,"removeEntry")});function Bb(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?Bb(f.conditions,f.operator,r,n,s,i,a,c):Fu(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",R=d(h.conditions,!S,p);return S?(N,O)=>R.some(F=>F(N,O)):(N,O)=>R.every(F=>F(N,O))}let g=(h.attribute||h[0])===r.primaryKey,A=qm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=i9(r.primaryStore,h.estimated_count,p)),A}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Fu(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 jr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],N=Hi(n.attributes,R);if(N.relationship){if(c.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=N.definition?.tableClass||N.elements?.definition?.tableClass,F=new Map,te=Fu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,F);if(N.relationship.to){i[c[0]]=F;let q=!!Hi(O.attributes,N.relationship.to)?.elements;te=t9(te,N,O.primaryStore,q,F)}if(N.relationship.from){let q=o(k=>(k?.key!==void 0&&(k=k.key),Fu({attribute:N.relationship.from,value:k},t,r,n,s,F)),"searchEntry");N.elements?(i[c[0]]=F,te=r9(te,N,O.primaryStore,F,q)):te=te.flatMap(q)}return te}else if(c.length===1)c=c[0];else throw new jr.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(Fb[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]=ki.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 jr.ClientError(`Unknown query comparator "${u}"`)}let A;if(typeof m=="string"&&m.length>Ps.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Ps.MAX_SEARCH_KEY_LENGTH)+Ps.OVERFLOW_MARKER,E=!1,A=qm(e,n,null,i,d)),typeof p=="string"&&p.length>Ps.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Ps.MAX_SEARCH_KEY_LENGTH)+Ps.OVERFLOW_MARKER,h=!0,A=A??qm(e,n,null,i,d)),r){let R=m;m=p,p=R,R=!E,E=!h,h=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new jr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new jr.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 jr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new jr.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??qm(e,n,null,i,d),!A)throw new jr.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 R=f.getRange(S).map(A?function({key:N,value:O}){return this?.isSync?O&&A(O)?N:Ma.SKIP:new Promise((F,te)=>setImmediate(()=>{try{F(O&&A(O)?N:Ma.SKIP)}catch(q){te(q)}}))}:N=>N.value==null&&!(N.metadataFlags&(Dn|va))?Ma.SKIP:(a?._freezeRecords&&Object.freeze(N.value),N));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:N,...O}=R,F=n.primaryStore.getEntry(N);return a?._freezeRecords&&Object.freeze(F?.value),{...O,...F}}return R}):f.getRange(S).map(A?function({key:R,value:N}){let O;return typeof R=="string"&&R.length>Ps.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(N):O={[c]:R},this.isSync?A(O)?N:Ma.SKIP:new Promise((F,te)=>setImmediate(()=>{try{F(A(O)?N:Ma.SKIP)}catch(q){te(q)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:N}){return this.isSync?N&&A(N)?R:Ma.SKIP:new Promise((O,F)=>setImmediate(()=>{try{O(N&&A(N)?R:Ma.SKIP)}catch(te){F(te)}}))})}function Hi(e,t){if(Array.isArray(t))if(t.length>1){let r=Hi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Hi(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 t9(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 r9(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 qm(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=Hi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=qm({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((R,N)=>{let O,F;return E?E.returnDirect?(O=E(R,r,N),F=lt):(F=E(R,r,N,!0),Array.isArray(F)?(O=F.map(te=>te.value),F=null):O=F?.value):O=R[d],{subObject:O,subEntry:F}},"getSubObject"),S=o((R,N)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=g(R);return g.idFilter&&(S.idFilter=g.idFilter),q}let{subObject:O,subEntry:F}=A(R,N);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(q){let k=A(q).subObject;return Array.isArray(k)?k.filter(h).map(J=>J[m.primaryKey]):k}}),O.some(h)):h(O,F):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),Fb[a]||a){case Ps.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,ki.compareKeys)(d,l[0])>=0&&(0,ki.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,ki.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,ki.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,ki.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,ki.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,ki.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new jr.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&&eg(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function A(S){let R=S[d],N;if(typeof R!="object"||!R||p?N=f(R):Array.isArray(R)?N=R.some(f):R instanceof Date&&(N=f(R.getTime())),m&&(g++,!N&&!A.idFilter&&++E/g*i>h)){let O=Fu(e,r.transaction.getReadTxn(),!1,t),F;A.to?F=O.flatMap(q=>t.primaryStore.get(q)[A.to]):F=O.map(ku);let te=new Set(F);A.idFilter=q=>te.has(ku(q)),A.idFilter.idSet=te}return N}return o(A,"recordFilter"),s&&(A.idFilter=f),A}o(u,"attributeComparator")}function eg(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/Uo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Fb[n]||n,n===Ps.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=Hi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=eg(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*Uo(e.indices[i.relationship.from])/(Uo(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=Uo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=ZZ*Uo(e.primaryStore)+1;else if(n==="between")r.estimated_count=XZ*Uo(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=Uo(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=JZ*Uo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function tg(e,t){if(e)if(xo=e,Uu.lastIndex=0,n9.test(e))try{if(t&&(t.conditions=[]),ai=t??new Bu,Hm(ai,""),Br!==xo.length&&Kt("Unable to parse query, unexpected end of query"),ai.parseErrorMessage&&(ai.parseError=new Ub(t.parseErrorMessage),!t))throw ai.parseError;return ai}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Br} in '${xo}'`,ai.parseErrorMessage&&(r.message+=", "+ai.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Kt(e){let t=`${e} at position ${Br}`;ai.parseErrorMessage=ai.parseErrorMessage?ai.parseErrorMessage+", "+t:t}function Hm(e,t){let r=Uu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(xo);){Br=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=xu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=e9[f],l=xb[i]?Wx:decodeURIComponent,d||Kt(`attribute must be specified before comparator ${f}`),s=xu(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 Z_(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(xu(d)),s=void 0;break;case"(":Uu.lastIndex=Br;let p=Hm(d?[]:new Bu,")");switch(d){case"":Z_(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}`)}xo[Br]===","?r.lastIndex=++Br: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"),Uu.lastIndex=Br,m=Hm([],"}"),m.name=d,e.push(m),xo[Br]===","?r.lastIndex=++Br:a=!0;break;case"[":if(Uu.lastIndex=Br,d?(m=Hm(new Bu,"]"),m.name=d):m=Hm(e.conditions?new Bu:[],"]"),e.conditions)if(Z_(e,u),xo[Br]==="="){l=decodeURIComponent,i="equals",s=xu(d),r.lastIndex=++Br;break}else e.conditions.push(m),s=null;else e.push(m);xo[Br]===","?r.lastIndex=++Br: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),Z_(e,u),e.conditions.push(h)}else d&&Kt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(xu(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?s9:Uu,r.lastIndex=Br),Br===xo.length)return e}t&&Kt(`expected '${t}', but encountered end of string`)}function Z_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Kt("Can not mix operators within a condition grouping"):e.operator=t)}function xu(e){return e.indexOf(".")>-1?e.split(".").map(xu):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 jr.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 jr.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 ku(e){return Array.isArray(e)?e.join("\0"):e}function Uo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function i9(e,t,r){return t*r/Uo(e)}var jr,Ps,ki,Ma,JZ,XZ,ZZ,e9,xb,Fb,Ub,n9,Uu,s9,Br,ai,xo,Bu,rg=ie(()=>{jr=w(_e()),Ps=w(Vt()),ki=require("ordered-binary"),Ma=require("lmdb");ng();el();JZ=.3,XZ=.1,ZZ=.05,e9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},xb={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(Bb,"executeConditions");o(Fu,"searchByIndex");o(Hi,"findAttribute");o(t9,"joinTo");o(r9,"joinFrom");Fb={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(qm,"filterByType");o(eg,"estimateCondition");Ub=class extends jr.Violation{static{o(this,"SyntaxViolation")}},n9=/[()[\]|!<>.]|(=\w*=)/,Uu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,s9=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(tg,"parseQuery");o(Kt,"recordError");o(Hm,"parseBlock");o(Z_,"assignOperator");o(xu,"decodeProperty");o(Wx,"typedDecoding");o(zx,"wildcardDecoding");o(jx,"toSortObject");o(Qx,"toSortEntry");Bu=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(ku,"flattenKey");o(Uo,"estimatedEntryCount");o(i9,"intersectionEstimate")});var Jx,ci,sg=ie(()=>{Jx=w(oi()),ci=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={};Ie(r0,{MultiPartId:()=>ig,Resource:()=>Fr,contextStorage:()=>qu,snakeCase:()=>a9,transformForSelect:()=>Gu});function a9(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(sl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(sl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new ig;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){sl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return sl=!0,null;e[e.length-1]==="/"&&(sl=!0)}return t.coerceId(decodeURIComponent(e))}function Mn(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 bo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Hu.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 ci,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ci,l.id=c,c==null&&(u=!0);l||(l=new ci,l.id=c),u&&(l.isCollection=!0);let f;a||(a=qu.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=>qu.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return At(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 Hu.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 Hu.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 Hu.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 kb(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 Gu(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):kb(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(kb(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(kb(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]=Gu(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,Hu,t0,qu,o9,Fr,sl,ig,Ua=ie(()=>{Zx=require("crypto");hm();Nu();e0=w(oi()),Hu=w(_e());Ca();rg();t0=require("async_hooks");sg();qu=new t0.AsyncLocalStorage,o9={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Fr=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=Mn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Gu(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=Mn(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=Mn(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=Mn(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=qu.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),At(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=Mn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Xn(t,"delete")},{hasContent:!1,type:"update"});static post=Mn(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=Mn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Mn(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=Mn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Xn(t,"subscribe")},{type:"read"});static publish=Mn(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=Mn(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=Gu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Mn(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=Mn(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=Mn(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 tg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&o9[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:sl}}let i=Xx(t,this);return sl?{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 Qn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Qn}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",Fr);o(a9,"snakeCase");o(Xx,"pathToId");ig=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Mn,"transactional");o(Xn,"missingMethod");o(kb,"selectFromObject");o(Gu,"transformForSelect")});var il,Hb=ie(()=>{il=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 qb={};Ie(qb,{Resources:()=>$u,keyArrayToString:()=>Vu,resetResources:()=>c9,resources:()=>Ls});function c9(){return Ls=new $u,Ue.resources=Ls,Ls}function Vu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var n0,s0,$u,Ls,xa=ie(()=>{Ca();Hb();n0=w(j()),s0=w(_e());xr();$u=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 il(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 At(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(c9,"resetResources");o(Vu,"keyArrayToString")});function Vb(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=o0,l9(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=Vu(t);let d=new $b(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=Ut(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Vu(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,Gb.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,Gb.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 l9(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||(Vb({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),c0(e)),e.nextTransaction}var Gb,i0,o0,$b,Kb=ie(()=>{Gb=w(j());Nu();xa();Io();i0=Object.create(null),o0=Object.create(null);o(Vb,"addSubscription");$b=class extends Qn{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(l9,"listenToCommits");o(c0,"nextTransaction");o(l0,"whenNextTransaction")});var d0=M((uPe,u0)=>{"use strict";var Yb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};u0.exports=Yb});var m0=M((fPe,f0)=>{"use strict";var Wb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};f0.exports=Wb});var Gm=M(h0=>{"use strict";var p0=ae(),u9=(H(),D(Y)),{RecordEncoder:d9}=(el(),D(Yx));p0.initSync();var f9=p0.get(u9.CONFIG_PARAMS.STORAGE_CACHING)!==!1,zb=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=f9&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:d9})}};h0.OpenDBIObject=zb});var $m=M((EPe,E0)=>{"use strict";var Zn=ae(),Ds=(H(),D(Y));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(Ds.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zn.get(Ds.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zn.get(Ds.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Zn.get(Ds.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Zn.get(Ds.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Zn.get(Ds.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Zn.get(Ds.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Zn.get(Ds.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Zn.get(Ds.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Zn.get(Ds.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Zn.get(Ds.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Zn.get(Ds.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};E0.exports=og;og.MAX_DBS=1e4});var _t=M((gPe,w0)=>{"use strict";var Qb=require("lmdb"),li=require("fs-extra"),es=require("path"),ag=Cn(),S0=j(),vn=Kr().LMDB_ERRORS_ENUM,cg=m0(),{OpenDBIObject:Jb}=Gm(),T0=$m(),Ba=Vt(),_0=(H(),D(Y)),{table:m9,resetDatabases:p9}=(Oe(),D(mt)),g0=ae(),ui=Ba.INTERNAL_DBIS_NAME,y0=Ba.DBI_DEFINITION_NAME,h9="data.mdb",E9="lock.mdb",Vm=".mdb",_9="-lock",jb=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ms(t,r),this.key_type=this.dbi[Ba.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ba.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Qb.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(vn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(vn.ENV_NAME_REQUIRED)}o(lg,"pathEnvNameValidation");async function Xb(e,t,r=!0){try{await li.access(e)}catch(n){throw n.code==="ENOENT"?new Error(vn.INVALID_BASE_PATH):n}try{let n=es.join(e,t+Vm);return await li.access(n,li.constants.R_OK|li.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await li.access(es.join(e,t,h9),li.constants.R_OK|li.constants.F_OK),es.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(vn.INVALID_ENVIRONMENT)}else throw new Error(vn.INVALID_ENVIRONMENT);throw n}}o(Xb,"validateEnvironmentPath");function ug(e,t){if(ag.validateEnv(e),t===void 0)throw new Error(vn.DBI_NAME_REQUIRED)}o(ug,"validateEnvDBIName");async function g9(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 Xb(e,t,n),R0(e,t,r)}catch(a){if(a.message===vn.INVALID_ENVIRONMENT){let c=es.join(e,t);await li.mkdirp(n?c:e);let l=new T0(n?c:c+Vm,!1),u=Qb.open(l);u.dbis=Object.create(null);let d=new Jb(!1);u.openDB(ui,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=Zb(e,t,r);return u[Ba.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(g9,"createEnvironment");async function S9(e,t,r,n=!0){lg(e,t),t=t.toString();let s=es.join(e,t);return m9({table:t,database:es.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(S9,"copyEnvironment");async function R0(e,t,r=!1){lg(e,t),t=t.toString();let n=Zb(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 Xb(e,t),i=es.join(e,t+Vm),a=s!=i,c=new T0(s,a),l=Qb.open(c);l.dbis=Object.create(null);let u=b0(l);for(let d=0;d<u.length;d++)Ms(l,u[d]);return l[Ba.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(R0,"openEnvironment");async function T9(e,t,r=!1){lg(e,t),t=t.toString();let n=es.join(e,t+Vm),s=await Xb(e,t);if(global.lmdb_map!==void 0){let i=Zb(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await A0(a),delete global.lmdb_map[i]}}await li.remove(s),await li.remove(s===n?s+_9:es.join(es.dirname(s),E9))}o(T9,"deleteEnvironment");async function A0(e){ag.validateEnv(e);let t=e[Ba.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(A0,"closeEnvironment");function Zb(e,t,r=!1){let s=`${es.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(Zb,"getCachedEnvironmentName");function y9(e){ag.validateEnv(e);let t=Object.create(null),r=Ms(e,ui);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ui)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(y9,"listDBIDefinitions");function b0(e){ag.validateEnv(e);let t=[],r=Ms(e,ui);for(let{key:n}of r.getRange({start:!1}))n!==ui&&t.push(n);return t}o(b0,"listDBIs");function R9(e,t){let n=Ms(e,ui).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(R9,"getDBIDefinition");function I0(e,t,r,n=!r){if(ug(e,t),t=t.toString(),t===ui)throw new Error(vn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ms(e,t)}catch(s){if(s.message===vn.DBI_DOES_NOT_EXIST){let i=new Jb(r,n===!0),a=e.openDB(t,i),c=new cg(r===!0,n);return a[y0]=c,Ms(e,ui).putSync(t,c),e.dbis[t]=a,a}throw s}}o(I0,"createDBI");function Ms(e,t){if(ug(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ui?r=R9(e,t):r=new cg,r===void 0)throw new Error(vn.DBI_DOES_NOT_EXIST);let n;try{let s=new Jb(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(vn.DBI_DOES_NOT_EXIST):s}return n[y0]=r,e.dbis[t]=n,n}o(Ms,"openDBI");function A9(e,t){ug(e,t),t=t.toString();let r=Ms(e,t),n=r.getStats();return r[Ba.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(A9,"statDBI");async function b9(e,t){try{let r=es.join(e,t+Vm);return(await li.stat(r)).size}catch{throw new Error(vn.INVALID_ENVIRONMENT)}}o(b9,"environmentDataSize");function I9(e,t){if(ug(e,t),t=t.toString(),t===ui)throw new Error(vn.CANNOT_DROP_INTERNAL_DBIS_NAME);Ms(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ms(e,ui).removeSync(t)}o(I9,"dropDBI");function w9(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ms(e,i)}catch(a){if(a.message===vn.DBI_DOES_NOT_EXIST)I0(e,i,i!==t,i===t),n=!0;else throw a}}n&&p9()}o(w9,"initializeDBIs");w0.exports={openDBI:Ms,openEnvironment:R0,createEnvironment:g9,listDBIs:b0,listDBIDefinitions:y9,createDBI:I0,dropDBI:I9,statDBI:A9,deleteEnvironment:T9,initializeDBIs:w9,TransactionCursor:jb,environmentDataSize:b9,copyEnvironment:S9,closeEnvironment:A0}});var O0=M((TPe,C0)=>{"use strict";var eI=_t(),N9=j(),N0=Kr().LMDB_ERRORS_ENUM;C0.exports=C9;async function C9(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 eI.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 eI.closeEnvironment(global.lmdb_map[n]),await eI.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){N9.error(t)}}o(C9,"cleanLMDBMap")});var Gi=M((RPe,L0)=>{"use strict";var P0=oe(),O9=(H(),D(Y)),Ku=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,qi=require("joi"),Fa={schema_format:{pattern:Ku,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},P9=qi.alternatives(qi.string().min(1).max(Fa.schema_length.maximum).pattern(Ku).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),qi.number(),qi.array()).required(),L9=qi.alternatives(qi.string().min(1).max(Fa.schema_length.maximum).pattern(Ku).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),qi.number()),D9=qi.alternatives(qi.string().min(1).max(Fa.schema_length.maximum).pattern(Ku).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),qi.number()).required();function M9(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Fa.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Ku.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(M9,"checkValidTable");function v9(e,t){return P0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(v9,"validateSchemaExists");function U9(e,t){let r=t.state.ancestors[0].schema;return P0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(U9,"validateTableExists");function x9(e,t){return e.toLowerCase()===O9.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(x9,"validateSchemaName");L0.exports={commonValidators:Fa,schemaRegex:Ku,hdbSchemaTable:P9,validateSchemaExists:v9,validateTableExists:U9,validateSchemaName:x9,checkValidTable:M9,hdbDatabase:L9,hdbTable:D9}});var at=M((bPe,D0)=>{"use strict";var Un=require("validate.js");Un.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Un.validators.type.checks[t](e)?null:` must be a '${t}' value`};Un.validators.type.checks={Object:o(function(e){return Un.isObject(e)&&!Un.isArray(e)},"Object"),Array:Un.isArray,Integer:Un.isInteger,Number:Un.isNumber,String:Un.isString,Date:Un.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};Un.validators.hasValidFileExt=function(e,t){return Un.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};D0.exports={validateObject:B9,validateObjectAsync:F9,validateBySchema:k9};function B9(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Un(e,t,{format:"flat"});return r?new Error(r):null}o(B9,"validateObject");async function F9(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Un.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(F9,"validateObjectAsync");function k9(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(k9,"validateBySchema")});var rI=M((wPe,v0)=>{var{hdbTable:H9,hdbDatabase:M0}=Gi(),q9=at(),tI=require("joi"),G9={undefined:"undefined",null:"null"},$9=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||G9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),V9=tI.object({database:M0,schema:M0,table:H9,records:tI.array().items(tI.object().custom($9)).required()});v0.exports=function(e){return q9.validateBySchema(e,V9)}});var x0=M((CPe,U0)=>{"use strict";var nI=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")}};U0.exports=nI});var F0=M((PPe,B0)=>{"use strict";var sI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};B0.exports=sI});var H0=M((DPe,k0)=>{"use strict";var iI=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}};k0.exports=iI});var G0=M((vPe,q0)=>{"use strict";var oI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};q0.exports=oI});var al=M((kPe,K0)=>{"use strict";var K9=_t(),Y9=F0(),W9=H0(),z9=G0(),$i=Cn(),Km=Kr().LMDB_ERRORS_ENUM,j9=Vt(),Bo=(H(),D(Y)),Q9=oe(),J9=require("uuid"),xPe=require("lmdb"),{handleHDBError:X9,hdbErrors:Z9}=_e(),{OVERFLOW_MARKER:BPe,MAX_SEARCH_KEY_LENGTH:FPe}=j9,$0=ae();$0.initSync();var dg=$0.get(Bo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),aI=Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ol=Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function e7(e,t,r,n,s=$i.getNextMonotonicTime()){dI(e,t,r,n),cI(e,t,r);let i=new Y9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];V0(u,!0,s);let d=t7(e,t,r,u),f=u[t];a.push(d),c.push(f)}return lI(a,c,n,i,s)}o(e7,"insertRecords");function t7(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][Bo.FUNC_VAL],n[a]=c)}let l=$i.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[ol])})}o(t7,"insertRecord");function r7(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(r7,"removeSkippedRecords");function V0(e,t,r){let n=r>0;(n||!Number.isInteger(e[ol]))&&(e[ol]=r||(r=$i.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[aI]))&&(e[aI]=r||$i.getNextMonotonicTime()):delete e[aI]}o(V0,"setTimestamps");function cI(e,t,r){r.indexOf(Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),K9.initializeDBIs(e,t,r)}o(cI,"initializeTransaction");async function n7(e,t,r,n,s=$i.getNextMonotonicTime()){dI(e,t,r,n),cI(e,t,r);let i=new W9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=uI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return lI(c,l,n,i,s,a)}o(n7,"updateRecords");async function s7(e,t,r,n,s=$i.getNextMonotonicTime()){try{dI(e,t,r,n)}catch(l){throw X9(l,l.message,Z9.HTTP_STATUS_CODES.BAD_REQUEST)}cI(e,t,r);let i=new z9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;Q9.isEmpty(u[t])?(d=J9.v4(),u[t]=d):d=u[t];let f=uI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return lI(a,c,n,i,s)}o(s7,"upsertRecords");async function lI(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||$i.getNextMonotonicTime(),r7(r,i),n}o(lI,"finalizeWrite");function uI(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(V0(r,!d,a),Number.isInteger(r[ol])&&u[ol]>r[ol])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 R=E([[u]]);Array.isArray(R)&&(E=R[0][Bo.FUNC_VAL],r[h]=E)}if(E===A)continue;let S=$i.getIndexedValues(A);if(S){dg&&g.prefetch(S.map(R=>({key:R,value:n})),fg);for(let R=0,N=S.length;R<N;R++)g.remove(S[R],n)}if(S=$i.getIndexedValues(E),S){dg&&g.prefetch(S.map(R=>({key:R,value:n})),fg);for(let R=0,N=S.length;R<N;R++)g.put(S[R],n)}}let p={...u,...r};c.put(n,p,p[ol])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:uI(e,t,r,n,s,i,a))}o(uI,"updateUpsertRecord");function i7(e,t,r){if($i.validateEnv(e),t===void 0)throw new Error(Km.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Km.WRITE_ATTRIBUTES_REQUIRED):new Error(Km.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(i7,"validateBasic");function dI(e,t,r,n){if(i7(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Km.RECORDS_REQUIRED):new Error(Km.RECORDS_MUST_BE_ARRAY)}o(dI,"validateWrite");function fg(){}o(fg,"noop");K0.exports={insertRecords:e7,updateRecords:n7,upsertRecords:s7}});var Vi=M((qPe,o7)=>{o7.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 W0=M((GPe,Y0)=>{"use strict";var a7=require("uuid"),fI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||a7.v4(),this.schema_table=`${this.schema}.${this.table}`}};Y0.exports=fI});var mg=M((VPe,z0)=>{"use strict";var c7=W0(),mI=class extends c7{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};z0.exports=mI});var Q0=M((YPe,j0)=>{"use strict";j0.exports=u7;var l7="inserted";function u7(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===l7?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(u7,"returnObject")});var pg=M((jPe,X0)=>{"use strict";var d7=(H(),D(Y)),pI=_t(),f7=al(),{getSystemSchemaPath:m7,getSchemaPath:p7}=Rt(),zPe=Vi(),{validateBySchema:h7}=at(),Ym=require("joi"),E7=mg(),_7=Q0(),{handleHDBError:g7,hdbErrors:S7,ClientError:T7}=_e(),J0=oe(),{HTTP_STATUS_CODES:y7}=S7,R7="inserted";X0.exports=A7;async function A7(e){let t=h7(e,Ym.object({database:Ym.string(),schema:Ym.string(),table:Ym.string().required(),attribute:Ym.string().required()}));if(t)throw new T7(t.message);let r=!e.skip_table_check&&J0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw g7(new Error,r,y7.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=J0.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new E7(e.schema,e.table,e.attribute,e.id);try{let i=await pI.openEnvironment(p7(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}`);pI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await pI.openEnvironment(m7(),d7.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await f7.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return _7(R7,c,{records:[s]},l)}catch(i){throw i}}o(A7,"lmdbCreateAttribute")});var Wm=M((XPe,eB)=>{"use strict";var Fo=oe(),Z0=j(),JPe=rI(),{getDatabases:b7}=(Oe(),D(mt)),{ClientError:cl}=_e();eB.exports=I7;function I7(e){if(Fo.isEmpty(e))throw new cl("invalid update parameters defined.");if(Fo.isEmptyOrZeroLength(e.schema))throw new cl("invalid schema specified.");if(Fo.isEmptyOrZeroLength(e.table))throw new cl("invalid table specified.");if(!Array.isArray(e.records))throw new cl("records must be an array");let t=b7()[e.schema]?.[e.table];if(Fo.isEmpty(t))throw new cl(`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&&Fo.isEmptyOrZeroLength(a[r]))throw Z0.error("a valid hash attribute must be provided with update record:",a),new cl("a valid hash attribute must be provided with update record, check log for more info");if(!Fo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw Z0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new cl(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Fo.isEmpty(a[r])&&a[r]!==""&&n.has(Fo.autoCast(a[r]))&&(a.skip=!0),n.add(Fo.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(I7,"insertUpdateValidate")});var hg=M((eLe,rB)=>{"use strict";var tB=oe(),w7=(H(),D(Y)),N7=j(),C7=pg(),O7=mg(),P7=ko(),{SchemaEventMsg:L7}=ts(),D7="already exists in";rB.exports=M7;async function M7(e,t,r){if(tB.isEmptyOrZeroLength(r))return r;let n=[];tB.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 v7(e,t.schema,t.name,i)})),s}o(M7,"lmdbCheckForNewAttributes");async function v7(e,t,r,n){let s=new O7(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await U7(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(D7))N7.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(v7,"createNewAttribute");async function U7(e){let t;return t=await C7(e),P7.signalSchemaChange(new L7(process.pid,w7.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(U7,"createAttribute")});var Yu=M((rLe,nB)=>{"use strict";var hI=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}};nB.exports=hI});var iB=M((sLe,sB)=>{"use strict";var x7=Yu(),B7=(H(),D(Y)).OPERATIONS_ENUM,EI=class extends x7{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(B7.INSERT,r,n,s,i),this.records=t}};sB.exports=EI});var aB=M((oLe,oB)=>{"use strict";var F7=Yu(),k7=(H(),D(Y)).OPERATIONS_ENUM,_I=class extends F7{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(k7.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};oB.exports=_I});var lB=M((cLe,cB)=>{"use strict";var H7=Yu(),q7=(H(),D(Y)).OPERATIONS_ENUM,gI=class extends H7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(q7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};cB.exports=gI});var dB=M((uLe,uB)=>{"use strict";var G7=Yu(),$7=(H(),D(Y)).OPERATIONS_ENUM,SI=class extends G7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super($7.DELETE,n,s,t,i),this.original_records=r}};uB.exports=SI});var zm=M((mLe,hB)=>{"use strict";var fLe=require("path"),fB=_t(),V7=iB(),K7=aB(),Y7=lB(),W7=dB(),Wu=Vt(),mB=oe(),{CONFIG_PARAMS:z7}=(H(),D(Y)),pB=ae();pB.initSync();var Eg=(H(),D(Y)).OPERATIONS_ENUM,{getTransactionAuditStorePath:j7}=Rt();hB.exports=Q7;async function Q7(e,t){if(pB.get(z7.LOGGING_AUDITLOG)===!1)return;let r=j7(e.schema,e.table),n=await fB.openEnvironment(r,e.table,!0),s=J7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){fB.initializeDBIs(n,Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Wu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),mB.isEmpty(s.user_name)||n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(Q7,"writeTransaction");function J7(e,t){let r=mB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Eg.INSERT)return new V7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.UPDATE)return new K7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.UPSERT)return new Y7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.DELETE)return new W7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(J7,"createTransactionObject")});var TI=M((ELe,EB)=>{"use strict";var X7=Wm(),hLe=fm(),jm=(H(),D(Y)),Z7=mm(),eee=al().insertRecords,tee=_t(),ree=j(),nee=hg(),{getSchemaPath:see}=Rt(),iee=zm();EB.exports=oee;async function oee(e){try{let{schemaTable:t,attributes:r}=X7(e);Z7(e,r,t.hash_attribute),e.schema!==jm.SYSTEM_SCHEMA_NAME&&(r.includes(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await nee(e.hdb_auth_header,t,r),s=see(e.schema,e.table),i=await tee.openEnvironment(s,e.table),a=await eee(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await iee(e,a)}catch(c){ree.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(oee,"lmdbCreateRecords")});var SB=M((gLe,gB)=>{"use strict";var _B=(H(),D(Y)),aee=TI(),cee=fm(),lee=require("fs-extra"),{getSchemaPath:uee}=Rt();gB.exports=dee;async function dee(e){let t=[{name:e.schema,createddate:Date.now()}],r=new cee(_B.SYSTEM_SCHEMA_NAME,_B.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await aee(r),await lee.mkdirp(uee(e.schema))}o(dee,"lmdbCreateSchema")});var yB=M((TLe,TB)=>{"use strict";var yI=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}};TB.exports=yI});var IB=M((ILe,bB)=>{"use strict";var RB=_t(),RI=Cn(),AI=Kr().LMDB_ERRORS_ENUM,fee=Vt(),AB=j(),RLe=oe(),mee=require("lmdb"),pee=yB(),hee=(H(),D(Y)),{OVERFLOW_MARKER:ALe,MAX_SEARCH_KEY_LENGTH:bLe}=fee,Eee=hee.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function _ee(e,t,r,n){if(RI.validateEnv(e),t===void 0)throw new Error(AI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(AI.IDS_REQUIRED):new Error(AI.IDS_MUST_BE_ITERABLE);try{let s=RB.listDBIs(e);RB.initializeDBIs(e,t,s);let i=new pee,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[Eee]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,mee.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],R=h[A];if(R!=null)try{let N=RI.getIndexedValues(R);if(N)for(let O=0,F=N.length;O<F;O++)S.remove(N[O],a)}catch{AB.warn(`cannot delete from attribute: ${A}, ${R}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){AB.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=RI.getNextMonotonicTime(),i}catch(s){throw s}}o(_ee,"deleteRecords");bB.exports={deleteRecords:_ee}});var Qm=M((NLe,NB)=>{"use strict";var zu=oe(),gee=IB(),See=_t(),{getSchemaPath:Tee}=Rt(),yee=zm(),Ree=j();NB.exports=Aee;async function Aee(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(zu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zu.isEmptyOrZeroLength(e.hash_values)&&!zu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];zu.isEmpty(l)||e.hash_values.push(l)}}if(zu.isEmptyOrZeroLength(e.hash_values))return wB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zu.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=Tee(e.schema,e.table),i=await See.openEnvironment(s,e.table),a=await gee.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await yee(e,a)}catch(c){Ree.error(`unable to write transaction due to ${c.message}`)}return wB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(Aee,"lmdbDeleteRecords");function wB(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(wB,"createDeleteResponse")});var II=M((PLe,CB)=>{"use strict";var bee=(H(),D(Y)),OLe=Cn();function bI(e,t){let r=Object.create(null);if(t.length===1&&bee.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(bI,"parseRow");function Iee(e,t,r,n){let s=bI(r,e);n.push(s)}o(Iee,"searchAll");function wee(e,t,r,n){let s=bI(r,e);n[t]=s}o(wee,"searchAllToMap");function Nee(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(Nee,"iterateDBI");function ll(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(ll,"pushResults");function Cee(e,t,r,n,s,i){t.toString().endsWith(e)&&ll(t,r,n,s,i)}o(Cee,"endsWith");function Oee(e,t,r,n,s,i){t.toString().includes(e)&&ll(t,r,n,s,i)}o(Oee,"contains");function Pee(e,t,r,n,s,i){t>e&&ll(t,r,n,s,i)}o(Pee,"greaterThanCompare");function Lee(e,t,r,n,s,i){t>=e&&ll(t,r,n,s,i)}o(Lee,"greaterThanEqualCompare");function Dee(e,t,r,n,s,i){t<e&&ll(t,r,n,s,i)}o(Dee,"lessThanCompare");function Mee(e,t,r,n,s,i){t<=e&&ll(t,r,n,s,i)}o(Mee,"lessThanEqualCompare");CB.exports={parseRow:bI,searchAll:Iee,searchAllToMap:wee,iterateDBI:Nee,endsWith:Cee,contains:Oee,greaterThanCompare:Pee,greaterThanEqualCompare:Lee,lessThanCompare:Dee,lessThanEqualCompare:Mee,pushResults:ll}});var ju=M((ULe,UB)=>{"use strict";var ka=_t(),DLe=j(),rs=Cn(),_g=Vt(),rr=Kr().LMDB_ERRORS_ENUM,MLe=oe(),vee=(H(),D(Y)),gg=II(),{parseRow:Uee}=gg,vLe=require("lmdb"),{OVERFLOW_MARKER:OB,MAX_SEARCH_KEY_LENGTH:xee}=_g;function PB(e,t,r,n=!1,s=void 0,i=void 0){return ul(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(PB,"iterateFullIndex");function Jm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ul(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(R=>({value:R}))):f.getRange(S)})}o(Jm,"iterateRangeBetween");function ul(e,t,r,n){let s=e.database||e,i=ka.openDBI(s,r);i[_g.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ka.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(ul,"setupTransaction");function LB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(OB)){if(!s)if(r)s=ka.openDBI(e,r);else{let l=ka.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=ka.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(LB,"getOverflowCheck");function Bee(e,t,r,n=!1,s=void 0,i=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return ul(e,t,t,(a,c,l)=>(Sg(r),r=Xm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Uee(u.value,r))))}o(Bee,"searchAll");function Fee(e,t,r,n=!1,s=void 0,i=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);Sg(r),r=Xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of PB(e,t,t,n,s,i))a.set(c,gg.parseRow(l,r));return a}o(Fee,"searchAllToMap");function kee(e,t,r=!1,n=void 0,s=void 0){if(rs.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=PB(e,void 0,t,r,n,s),c=a.transaction,l=LB(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(kee,"iterateDBI");function Hee(e,t){if(rs.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return ka.statDBI(e,t).entryCount}o(Hee,"countAll");function qee(e,t,r,n,s=!1,i=void 0,a=void 0){return Ha(e,r,n),ul(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(qee,"equals");function Gee(e,t,r){return Ha(e,t,r),ka.openDBI(e,t).getValuesCount(r)}o(Gee,"count");function $ee(e,t,r,n,s=!1,i=void 0,a=void 0){return Ha(e,r,n),ul(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($ee,"startsWith");function Vee(e,t,r,n,s=!1,i=void 0,a=void 0){return DB(e,t,r,n,s,i,a,!0)}o(Vee,"endsWith");function DB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return Ha(e,r,n),ul(e,null,r,(l,u,d,f)=>{let m=LB(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(OB)?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(DB,"contains");function Kee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!0,!1)}o(Kee,"greaterThan");function Yee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!1,!1)}o(Yee,"greaterThanEqual");function Wee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!0)}o(Wee,"lessThan");function zee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!1)}o(zee,"lessThanEqual");function jee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(rs.validateEnv(e),r===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(rr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(rr.END_VALUE_REQUIRED);if(n=rs.convertKeyValueToWrite(n),s=rs.convertKeyValueToWrite(s),n>s)throw new Error(rr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Jm(e,t,r,n,s,i,a,c)}o(jee,"between");function Qee(e,t,r,n){rs.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(Sg(r),r=Xm(s,r),n===void 0)throw new Error(rr.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(Qee,"searchByHash");function Jee(e,t,r){rs.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(Jee,"checkHashExists");function Xee(e,t,r,n,s=[]){return vB(e,t,r,n,s),MB(e,t,r,n,s).map(i=>i[1])}o(Xee,"batchSearchByHash");function Zee(e,t,r,n,s=[]){vB(e,t,r,n,s);let i=new Map;for(let[a,c]of MB(e,t,r,n,s))i.set(a,c);return i}o(Zee,"batchSearchByHashToMap");function MB(e,t,r,n,s=[]){return ul(e,t,t,(i,a,c)=>{r=Xm(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(MB,"batchHashSearch");function vB(e,t,r,n,s){if(rs.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(Sg(r),n==null)throw new Error(rr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(rr.IDS_MUST_BE_ITERABLE)}o(vB,"initializeBatchSearchByHash");function Sg(e){if(!Array.isArray(e))throw e===void 0?new Error(rr.FETCH_ATTRIBUTES_REQUIRED):new Error(rr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(Sg,"validateFetchAttributes");function Ha(e,t,r){if(rs.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.SEARCH_VALUE_REQUIRED);if(r?.length>xee)throw new Error(rr.SEARCH_VALUE_TOO_LARGE)}o(Ha,"validateComparisonFunctions");function Xm(e,t){return t.length===1&&vee.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ka.listDBIs(e)),t}o(Xm,"setGetWholeRowAttributes");UB.exports={searchAll:Bee,searchAllToMap:Fee,count:Gee,countAll:Hee,equals:qee,startsWith:$ee,endsWith:Vee,contains:DB,searchByHash:Qee,setGetWholeRowAttributes:Xm,batchSearchByHash:Xee,batchSearchByHashToMap:Zee,checkHashExists:Jee,iterateDBI:kee,greaterThan:Kee,greaterThanEqual:Yee,lessThan:Wee,lessThanEqual:zee,between:jee}});var Qu=M((BLe,HB)=>{var xB=require("lodash"),BB=at(),Ye=require("joi"),ete=oe(),{hdbSchemaTable:Zm,checkValidTable:FB,hdbTable:kB,hdbDatabase:Tg}=Gi(),{handleHDBError:tte,hdbErrors:rte}=_e(),{getDatabases:nte}=(Oe(),D(mt)),{HTTP_STATUS_CODES:ste}=rte,ite=Ye.object({database:Tg,schema:Tg,table:kB,attribute:Zm,value:Ye.any().required(),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),desc:Ye.bool(),limit:Ye.number().integer().min(1),offset:Ye.number().integer().min(0)}),ote=Ye.object({database:Tg,schema:Tg,table:kB,operator:Ye.string().valid("and","or").default("and").lowercase(),offset:Ye.number().integer().min(0),limit:Ye.number().integer().min(1),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),sort:Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),descending:Ye.bool().optional()}).optional(),conditions:Ye.array().min(1).items(Ye.alternatives(Ye.object({operator:Ye.string().valid("and","or").default("and").lowercase(),conditions:Ye.array()}),Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),comparator:Ye.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Ye.when("comparator",{switch:[{is:"equals",then:Ye.any()},{is:"between",then:Ye.array().items(Ye.alternatives([Ye.string(),Ye.number()])).length(2)}],otherwise:Ye.alternatives(Ye.string(),Ye.number())}).required()}))).required()});HB.exports=function(e,t){let r=null;switch(t){case"value":r=BB.validateBySchema(e,ite);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(FB("database",e.schema)),i(FB("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=BB.validateBySchema(e,ote);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=ete.checkGlobalSchemaTable(e.schema,e.table);if(s)return tte(new Error,s,ste.NOT_FOUND);let a=nte()[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=xB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!xB.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 wI=M((kLe,qB)=>{"use strict";var ate=_t(),cte=Qu(),{getSchemaPath:lte}=Rt();qB.exports=ute;function ute(e){let t=cte(e,"hashes");if(t)throw t;let r=lte(e.schema,e.table);return ate.openEnvironment(r,e.table)}o(ute,"initialize")});var NI=M((qLe,GB)=>{"use strict";var dte=ju(),fte=wI();GB.exports=mte;async function mte(e){let t=await fte(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return dte.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(mte,"lmdbGetDataByHash")});var Ju=M(($Le,$B)=>{"use strict";var CI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};$B.exports=CI});var KB=M((YLe,VB)=>{"use strict";var KLe=Ju(),pte=ju(),hte=wI();VB.exports=Ete;async function Ete(e){let t=await hte(e),r=global.hdb_schema[e.schema][e.table];return pte.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(Ete,"lmdbSearchByHash")});var di=M((zLe,YB)=>{"use strict";var OI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.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}};YB.exports=OI});var yg=M((QLe,XB)=>{"use strict";var cn=ju(),_te=_t(),gte=oe(),We=Vt(),dl=(H(),D(Y)),Ste=Vi(),WB=Kr().LMDB_ERRORS_ENUM,{getSchemaPath:Tte}=Rt(),Ho=dl.SEARCH_WILDCARDS;async function yte(e,t,r){let n;e.schema===dl.SYSTEM_SCHEMA_NAME?n=Ste[e.table]:n=global.hdb_schema[e.schema][e.table];let s=JB(e,n.hash_attribute,r,t);return jB(e,s,n.hash_attribute,r)}o(yte,"prepSearch");async function jB(e,t,r,n){let s=Tte(e.schema,e.table),i=await _te.openEnvironment(s,e.table),a=QB(i,e,t,r),c=a.transaction||i;if([We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,We.SEARCH_TYPES.SEARCH_ALL,We.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(Rte(e,r)===!1){let d=e.attribute;if(d===r)return n?zB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?zB(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?cn.batchSearchByHashToMap(c,r,e.get_attributes,u):cn.batchSearchByHash(c,r,e.get_attributes,u)}o(jB,"executeSearch");function QB(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 We.SEARCH_TYPES.EQUALS:s=cn.equals(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.CONTAINS:s=cn.contains(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.ENDS_WITH:case We.SEARCH_TYPES._ENDS_WITH:s=cn.endsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.STARTS_WITH:case We.SEARCH_TYPES._STARTS_WITH:s=cn.startsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return cn.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return cn.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.SEARCH_ALL:return cn.searchAll(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return cn.searchAllToMap(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.BETWEEN:s=cn.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN:case We.SEARCH_TYPES._GREATER_THAN:s=cn.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN_EQUAL:case We.SEARCH_TYPES._GREATER_THAN_EQUAL:s=cn.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN:case We.SEARCH_TYPES._LESS_THAN:s=cn.lessThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN_EQUAL:case We.SEARCH_TYPES._LESS_THAN_EQUAL:s=cn.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(QB,"searchByType");function zB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(zB,"createMapFromIterable");function Rte(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(Rte,"checkToFetchMore");function JB(e,t,r,n){if(gte.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),Ho.indexOf(s)>-1)return r===!0?We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:We.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Ho[0])<0&&s.indexOf(Ho[1])<0)return c===!0?r===!0?We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:We.SEARCH_TYPES.EQUALS;if(Ho.indexOf(i)>=0&&Ho.indexOf(a)>=0)return e.value=e.value.slice(1,-1),We.SEARCH_TYPES.CONTAINS;if(Ho.indexOf(i)>=0)return e.value=e.value.substr(1),We.SEARCH_TYPES.ENDS_WITH;if(Ho.indexOf(a)>=0)return e.value=e.value.slice(0,-1),We.SEARCH_TYPES.STARTS_WITH;if(s.includes(Ho[0])||s.includes(Ho[1]))return We.SEARCH_TYPES.EQUALS;throw new Error(WB.UNKNOWN_SEARCH_TYPE)}else switch(n){case dl.VALUE_SEARCH_COMPARATORS.BETWEEN:return We.SEARCH_TYPES.BETWEEN;case dl.VALUE_SEARCH_COMPARATORS.GREATER:return We.SEARCH_TYPES.GREATER_THAN;case dl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return We.SEARCH_TYPES.GREATER_THAN_EQUAL;case dl.VALUE_SEARCH_COMPARATORS.LESS:return We.SEARCH_TYPES.LESS_THAN;case dl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return We.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(WB.UNKNOWN_SEARCH_TYPE)}}o(JB,"createSearchTypeFromSearchObject");XB.exports={executeSearch:jB,createSearchTypeFromSearchObject:JB,prepSearch:yte,searchByType:QB}});var eF=M((ZLe,ZB)=>{"use strict";var XLe=di(),Ate=Qu(),bte=oe(),Ite=(H(),D(Y)),wte=yg();ZB.exports=Nte;function Nte(e,t){if(!bte.isEmpty(t)&&Ite.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Ate(e,"value");if(n)throw n;return wte.prepSearch(e,t,!0)}o(Nte,"lmdbGetDataByValue")});var ep=M((rDe,tF)=>{"use strict";var tDe=di(),Cte=Qu(),Ote=oe(),Pte=(H(),D(Y)),Lte=yg();tF.exports=Dte;async function Dte(e,t){if(!Ote.isEmpty(t)&&Pte.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 Lte.prepSearch(e,t,!1)}o(Dte,"lmdbSearchByValue")});var nF=M((iDe,rF)=>{"use strict";var sDe=Vt(),PI=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}},LI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},DI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};rF.exports={SearchByConditionsObject:PI,SearchCondition:LI,SortAttribute:DI}});var cF=M((uDe,aF)=>{"use strict";var{SearchByConditionsObject:aDe,SearchCondition:cDe}=nF(),Mte=di(),vte=Qu(),MI=ju(),Rg=Vt(),{Resource:lDe}=(Ua(),D(r0)),oF=yg(),Ute=II(),xte=require("lodash"),{getSchemaPath:Bte}=Rt(),sF=_t(),{handleHDBError:Fte,hdbErrors:kte}=_e(),{HTTP_STATUS_CODES:Hte}=kte,qte=1e8;aF.exports=Gte;async function Gte(e){let t=vte(e,"conditions");if(t)throw Fte(t,t.message,Hte.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=Bte(e.schema,e.table),n=await sF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)sF.openDBI(n,u.attribute);let i=xte.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Rg.SEARCH_TYPES.EQUALS?u.estimated_count=MI.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=qte}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await iF(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(oF.filterByType),f=d.length,m=MI.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=>Ute.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await iF(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=MI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(Gte,"lmdbSearchByConditions");async function iF(e,t,r,n){let s=new Mte(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,oF.searchByType(e,s,i,n).map(a=>a.value)}o(iF,"executeConditionSearch")});var Xu=M((fDe,lF)=>{"use strict";var $te=(H(),D(Y)).OPERATIONS_ENUM,vI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=$te.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};lF.exports=vI});var UI=M((pDe,_F)=>{"use strict";var mF=di(),pF=Xu(),hF=ep(),EF=Qm(),xn=(H(),D(Y)),uF=oe(),dF=_t(),{getTransactionAuditStorePath:Vte,getSchemaPath:Kte}=Rt(),fF=j();_F.exports=Yte;async function Yte(e){try{if(uF.isEmpty(global.hdb_schema[e.schema])||uF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Wte(e),await zte(e);let t=Kte(e.schema,e.table);try{await dF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")fF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Vte(e.schema,e.table);await dF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")fF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(Yte,"lmdbDropTable");async function Wte(e){let t=new mF(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 hF(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 pF(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await EF(s)}o(Wte,"deleteAttributesFromSystem");async function zte(e){let t=new mF(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 hF(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 pF(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await EF(s)}catch(i){throw i}}o(zte,"dropTableFromSystem")});var SF=M((EDe,gF)=>{"use strict";var jte=require("fs-extra"),Qte=di(),Jte=Ju(),Xte=Xu(),Zte=UI(),ere=Qm(),tre=NI(),rre=ep(),qo=(H(),D(Y)),{getSchemaPath:nre}=Rt(),{handleHDBError:sre,hdbErrors:ire}=_e(),{HDB_ERROR_MSGS:ore,HTTP_STATUS_CODES:are}=ire;gF.exports=cre;async function cre(e){let t;try{t=await lre(e.schema);let r=new Qte(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await rre(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await Zte(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Xte(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await ere(s);let i=nre(t);await jte.remove(i)}catch(r){throw r}}o(cre,"lmdbDropSchema");async function lre(e){let t=new Jte(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await tre(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw sre(new Error,ore.SCHEMA_NOT_FOUND(e),are.NOT_FOUND,void 0,void 0,!0);return n}o(lre,"validateDropSchema")});var Zu=M((gDe,TF)=>{"use strict";var xI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};TF.exports=xI});var FI=M((yDe,yF)=>{"use strict";var ure=require("fs-extra"),Ag=_t(),{getTransactionAuditStorePath:dre}=Rt(),BI=Vt(),TDe=Zu();yF.exports=fre;async function fre(e){let t;try{let r=dre(e.schema,e.table);await ure.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,BI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Ag.createDBI(t,BI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Ag.createDBI(t,BI.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(fre,"createTransactionsAuditEnvironment")});var bF=M((bDe,AF)=>{"use strict";var kI=(H(),D(Y)),RF=_t(),mre=al(),{getSystemSchemaPath:pre,getSchemaPath:hre}=Rt(),ADe=Vi(),Ere=pg(),HI=mg(),_re=j(),gre=FI();AF.exports=Sre;async function Sre(e,t){let r=hre(t.schema,t.table),n=new HI(t.schema,t.table,kI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new HI(t.schema,t.table,kI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new HI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await RF.createEnvironment(r,t.table),e!==void 0){let a=await RF.openEnvironment(pre(),kI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await mre.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 qI(n),await qI(s),await qI(i)}await gre(t)}catch(a){throw a}}o(Sre,"lmdbCreateTable");async function qI(e){try{await Ere(e)}catch(t){_re.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(qI,"createAttribute")});var wF=M((wDe,IF)=>{"use strict";var Tre=Wm(),yre=mm(),Rre=hg(),tp=(H(),D(Y)),Are=al().updateRecords,bre=_t(),{getSchemaPath:Ire}=Rt(),wre=zm(),Nre=j();IF.exports=Cre;async function Cre(e){try{let{schemaTable:t,attributes:r}=Tre(e);yre(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 Rre(e.hdb_auth_header,t,r),s=Ire(e.schema,e.table),i=await bre.openEnvironment(s,e.table),a=await Are(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await wre(e,a)}catch(c){Nre.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(Cre,"lmdbUpdateRecords")});var CF=M((CDe,NF)=>{"use strict";var Ore=(H(),D(Y)).OPERATIONS_ENUM,GI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Ore.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};NF.exports=GI});var PF=M((LDe,OF)=>{"use strict";var PDe=CF(),Pre=Wm(),Lre=mm(),Dre=hg(),rp=(H(),D(Y)),Mre=al().upsertRecords,vre=_t(),{getSchemaPath:Ure}=Rt(),xre=zm(),Bre=j(),{handleHDBError:Fre,hdbErrors:kre}=_e();OF.exports=Hre;async function Hre(e){let t;try{t=Pre(e)}catch(l){throw Fre(l,l.message,kre.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Lre(e,n,r.hash_attribute),e.schema!==rp.SYSTEM_SCHEMA_NAME&&(n.includes(rp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(rp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(rp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(rp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Dre(e.hdb_auth_header,r,n),i=Ure(e.schema,e.table),a=await vre.openEnvironment(i,e.table),c=await Mre(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await xre(e,c)}catch(l){Bre.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(Hre,"lmdbUpsertRecords")});var DF=M((MDe,LF)=>{"use strict";var $I=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};LF.exports=$I});var vF=M((UDe,MF)=>{"use strict";var VI=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}};MF.exports=VI});var BF=M((FDe,xF)=>{"use strict";var KI=_t(),{getTransactionAuditStorePath:qre}=Rt(),BDe=DF(),np=Vt(),Gre=oe(),UF=vF(),$re=require("util").promisify,Vre=$re(setTimeout),Kre=1e4,Yre=100;xF.exports=Wre;async function Wre(e){let t=qre(e.schema,e.table),r=await KI.openEnvironment(t,e.table,!0),n=KI.listDBIs(r);KI.initializeDBIs(r,np.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new UF;do s=await zre(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 Vre(Yre);while(s.transactions_deleted>0);return i}o(Wre,"deleteAuditLogsBefore");async function zre(e,t){let r=new UF;try{let n=e.dbis[np.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[np.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Gre.isEmpty(c)||(s=e.dbis[np.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[np.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Kre)break}return await s,r}catch(n){throw n}}o(zre,"deleteTransactions")});var kF=M((HDe,FF)=>{"use strict";var YI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};FF.exports=YI});var qF=M(($De,HF)=>{"use strict";var jre=di(),Qre=Xu(),GDe=kF(),Ki=(H(),D(Y)),Jre=oe(),WI=_t(),Xre=Vi(),Zre=ep(),ene=Qm(),{getSchemaPath:tne}=Rt();HF.exports=rne;async function rne(e,t=!0){let r;e.schema===Ki.SYSTEM_SCHEMA_NAME?r=Xre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await sne(e),s=tne(e.schema,e.table),i=await WI.openEnvironment(s,e.table);return t===!0&&await nne(e,i,r.hash_attribute),WI.dropDBI(i,e.attribute),n}o(rne,"lmdbDropAttribute");async function nne(e,t,r){let n=WI.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(nne,"removeAttributeFromAllObjects");async function sne(e){let t=new jre(Ki.SYSTEM_SCHEMA_NAME,Ki.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Zre(t)).filter(a=>a[Ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Jre.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[Ki.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Qre(Ki.SYSTEM_SCHEMA_NAME,Ki.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return ene(i)}o(sne,"dropAttributeFromSystem")});var WF=M((YDe,YF)=>{"use strict";var zI=_t(),ed=Vt(),KDe=Cn(),jI=(H(),D(Y)),GF=oe(),{getTransactionAuditStorePath:ine}=Rt(),one=ju(),bg=Yu(),ane=j();YF.exports=cne;async function cne(e){let t=ine(e.schema,e.table),r=await zI.openEnvironment(t,e.table,!0),n=zI.listDBIs(r);zI.initializeDBIs(r,ed.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case jI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return $F(r,e.search_values);case jI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,une(r,e.search_values,s);case jI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return lne(r,e.search_values);default:return $F(r)}}o(cne,"readAuditLog");function $F(e,t=[0,Date.now()]){GF.isEmpty(t[0])&&(t[0]=0),GF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ed.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($F,"searchTransactionsByTimestamp");function lne(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[ed.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,KF(e,i))}return Object.fromEntries(r)}o(lne,"searchTransactionsByUsername");function une(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=one.equals(e,ed.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ed.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=KF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);VF(l,"records",r,d,a),VF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(une,"searchTransactionsByHashValues");function VF(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(VF,"loopRecords");function KF(e,t){let r=[];try{let n=e.dbis[ed.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){ane.warn(i)}return r}catch(n){throw n}}o(KF,"batchSearchTransactions")});var jF=M((QDe,zF)=>{"use strict";var{getSchemaPath:zDe}=Rt(),jDe=_t(),{database:dne}=(Oe(),D(mt));zF.exports={writeTransaction:fne};async function fne(e,t,r){return dne({database:e,table:t}).transaction(r)}o(fne,"writeTransaction")});var ZF=M((XDe,XF)=>{"use strict";var{getSchemaPath:QF}=Rt(),JF=_t();XF.exports={flush:mne,resetReadTxn:pne};async function mne(e,t){return(await JF.openEnvironment(QF(e,t),t.toString())).flushed}o(mne,"flush");async function pne(e,t){try{(await JF.openEnvironment(QF(e,t),t.toString())).resetReadTxn()}catch{}}o(pne,"resetReadTxn")});var nk=M((eMe,rk)=>{"use strict";var{Readable:hne}=require("stream"),{getDatabases:Ene}=(Oe(),D(mt)),{readSync:_ne,openSync:gne,createReadStream:ek}=require("fs"),{open:Sne}=require("lmdb"),{OpenDBIObject:tk}=Gm(),Tne=$m(),{AUDIT_STORE_OPTIONS:yne}=(Io(),D(hx)),{INTERNAL_DBIS_NAME:Rne,AUDIT_STORE_NAME:Ane}=Vt();rk.exports=Ine;var QI=32768,bne=100;async function Ine(e){let t=e.database||e.schema||"data",r=Ene()[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:Tne.MAX_DBS}),m,p=f.openDB(Rne,new tk(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,R){R.encoding="binary",R.encoder=void 0;let N=f.openDB(S,R),O=d.openDB(S,R);for(let{key:F,version:te,value:q}of O.getRange({start:null,transaction:h,versions:O.useVersions}))m=N.put(F,q,te),E++%bne===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:R}of d.getRange({transaction:h,start:!1}))if(s.some(N=>S.startsWith?.(N+"/"))){p.put(S,R);let[,N]=S.split("/"),O=!N,F=new tk(!O,O);await g(S,F)}e.include_audit&&await g(Ane,{...yne}),await m;let A=ek(f.path);return A.headers=l(),A.on("close",()=>{h.done(),f.close()}),A}let a=r[Object.keys(r)[0]].primaryStore,c=gne(a.path);return a.transaction(()=>{let u=Buffer.alloc(QI);_ne(c,u,0,QI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=ek(null,{fd:c,start:QI}),m=new hne.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(Ine,"getBackup")});var ok=M((rMe,ik)=>{"use strict";var wne=j(),{handleHDBError:Nne}=_e(),Cne=x0(),One=pg(),Pne=TI(),Lne=SB(),Dne=Qm(),Mne=NI(),vne=KB(),Une=eF(),xne=ep(),Bne=cF(),Fne=SF(),kne=bF(),Hne=wF(),qne=PF(),Gne=BF(),$ne=UI(),Vne=qF(),Kne=WF(),Yne=jF(),sk=ZF(),Wne=nk(),JI=class extends Cne{static{o(this,"LMDBBridge")}async searchByConditions(t){return Bne(t)}async getDataByHash(t){return await Mne(t)}async searchByHash(t){return await vne(t)}async getDataByValue(t,r){return await Une(t,r)}async searchByValue(t){return await xne(t)}async createSchema(t){return await Lne(t)}async dropSchema(t){return await Fne(t)}async createTable(t,r){return await kne(t,r)}async dropTable(t){return await $ne(t)}async createAttribute(t){return await One(t)}async createRecords(t){return await Pne(t)}async updateRecords(t){return await Hne(t)}async upsertRecords(t){try{return await qne(t)}catch(r){throw Nne(r,null,null,wne.ERR,r)}}async deleteRecords(t){return await Dne(t)}async dropAttribute(t){return await Vne(t)}async deleteAuditLogsBefore(t){return await Gne(t)}async readAuditLog(t){return await Kne(t)}writeTransaction(t,r,n){return Yne.writeTransaction(t,r,n)}flush(t,r){return sk.flush(t,r)}resetReadTxn(t,r){return sk.resetReadTxn(t,r)}getBackup(t){return Wne(t)}};ik.exports=JI});function Bn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function ip(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 Is||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=XI(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?lk:ck);break}c=l}while(c&&c!==ck&&c!==lk)}function uk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(ak[t])return ak[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=XI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function zne(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 XI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends ml{static{o(this,"TrackedObject")}},ip(r,t)),new r(e)):new ml(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=XI(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 qa(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=qa(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=GA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=qa(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)jne.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[fl]||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,ak,ck,lk,ml,jne,fl,wg,sp,ZI=ie(()=>{ns=w(_e());T_();ws();o(Bn,"getChanges");o(ip,"assignTrackedAccessors");ak=Object.prototype,ck=new Proxy({},{get:uk}),lk=new Proxy({},{get:uk,set:zne});o(uk,"getProxiedProperty");o(zne,"setProxiedProperty");o(XI,"trackObject");ml=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}};ip(ml,{},!0);o(Ng,"collapseData");jne=Object.prototype.hasOwnProperty;o(qa,"updateAndFreeze");o(Ig,"hasChanges");fl=Symbol.for("has-array-changes"),wg=class extends Array{static{o(this,"TrackedArray")}#e;[fl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[fl]=!0,super.splice(...t)}push(...t){return this[fl]=!0,super.push(...t)}pop(){return this[fl]=!0,super.pop()}unshift(...t){return this[fl]=!0,super.unshift(...t)}shift(){return this[fl]=!0,super.shift()}};wg.prototype.constructor=Array;sp=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var gk={};Ie(gk,{ResourceBridge:()=>rw});function nw({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 dk(e,t){let r=Yi(e),n=nw(e,r);if(!r)throw new fi.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;At(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,_k.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 Yi(e){let t=e.database||e.schema||Jne,r=ct()[t];if(!r)throw(0,fi.handleHDBError)(new Error,Qne.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function fk(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*mk(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 pk,Cg,fi,hk,ew,tw,Ek,_k,Qne,Jne,Xne,Zne,rw,Sk=ie(()=>{pk=w(ok()),Cg=w(Qu()),fi=w(_e());Oe();hk=w(Wm());H();ew=w(ko()),tw=w(ts()),Ek=w(oe());Ca();ZI();_k=w(j()),{HDB_ERROR_MSGS:Qne}=fi.hdbErrors,Jne="data",Xne=1e4,Zne=10,rw=class extends pk.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=Yi(t);if(!r)throw new fi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let 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,fi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:nw(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 fi.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Yi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Yi(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 Yi(t).dropTable()}createSchema(t){return td({database:t.schema,table:null}),ew.signalSchemaChange(new tw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await sw(t.schema),ew.signalSchemaChange(new tw.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,hk.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),At(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),At(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 fk(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ct()[t.schema][t.table];if(!r.createdTimeProperty)throw new fi.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:n_.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,Ek.asyncSetTimeout)(Zne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Xne===0&&await u();return l.length>0&&await u(),s?fk(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 dk(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of dk(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&IA[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=Yi(t);if(!s)throw new fi.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===n_.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:nw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Yi(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){Yi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Yi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Yi(t),n={};switch(t.search_type){case s_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let 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 s_.USERNAME:{let s=t.search_values;for await(let i of mk(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return mk(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(nw,"getSelect");o(dk,"getRecords");o(Yi,"getTable");o(fk,"createDeleteResponse");o(mk,"groupRecordsInHistory")});var ss=M((mMe,Tk)=>{"use strict";var{ResourceBridge:ese}=(Sk(),D(gk)),tse=ae();tse.initSync();var Og;function rse(){return Og||(Og=new ese,Og)}o(rse,"getBridge");Tk.exports=rse()});var mi=M((hMe,Ak)=>{var nse=Vi(),{promisify:sse}=require("util"),{getDatabases:Rk}=(Oe(),D(mt));Ak.exports={setSchemaDataToGlobal:yk,getTableSchema:ise,getSystemSchema:ose,setSchemaDataToGlobalAsync:sse(yk)};function yk(e){global.hdb_schema=Rk(),e&&e()}o(yk,"setSchemaDataToGlobal");function ise(e,t,r){let n=Rk()[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(ise,"getTableSchema");function ose(){return nse}o(ose,"getSystemSchema")});var ln=M((_Me,Nk)=>{"use strict";var Lg=rI(),Qr=oe(),ase=require("util"),Dg=ss(),cse=mi(),bk=j(),{handleHDBError:pl,hdbErrors:lse}=_e(),{HTTP_STATUS_CODES:hl}=lse,use=ase.promisify(cse.getTableSchema),dse="updated",Ik="inserted",wk="upserted";Nk.exports={insert:mse,update:pse,upsert:hse,validation:fse,flush:Ese};async function fse(e){if(Qr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Qr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await use(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&&Qr.isEmptyOrZeroLength(c[n]))throw bk.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(!Qr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw bk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Qr.isEmpty(c[n])&&c[n]!==""&&s.has(Qr.autoCast(c[n]))&&(c.skip=!0),s.add(Qr.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(fse,"validation");async function mse(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Lg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Dg.createRecords(e);return Pg(Ik,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(mse,"insertData");async function pse(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Lg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Dg.updateRecords(e);return Qr.isEmpty(n.existing_rows)?Pg(dse,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(pse,"updateData");async function hse(e){if(e.operation!=="upsert")throw pl(new Error,"invalid operation, must be upsert",hl.INTERNAL_SERVER_ERROR);let t=Lg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Dg.upsertRecords(e);return Pg(wk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(hse,"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===Ik?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===wk?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(Pg,"returnObject");function Ese(e){return Qr.transformReq(e),Dg.flush(e.schema,e.table)}o(Ese,"flush")});var ow=M((SMe,Pk)=>{var _se=at(),iw=require("joi"),{hdbTable:gse,hdbDatabase:Ck}=Gi(),Ok={schema:Ck,database:Ck,table:gse},Sse={date:iw.date().iso().required()},Tse={timestamp:iw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Pk.exports=function(e,t){let r=t==="timestamp"?{...Ok,...Tse}:{...Ok,...Sse},n=iw.object(r);return _se.validateBySchema(e,n)}});var Mk=M((TMe,Dk)=>{var yse=at(),aw=require("joi"),{hdbTable:Rse,hdbDatabase:Lk}=Gi(),Ase=aw.object({schema:Lk,database:Lk,table:Rse,hash_values:aw.array().required(),ids:aw.array()});Dk.exports=function(e){return yse.validateBySchema(e,Ase)}});var dw=M((yMe,vk)=>{"use strict";var cw=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}},lw=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}},uw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};vk.exports={InsertObject:cw,NoSQLSeachObject:lw,DeleteResponseObject:uw}});var Va=M((AMe,kk)=>{"use strict";var xk=ow(),bse=Mk(),El=oe(),Uk=require("moment"),Bk=j(),{promisify:Ise,callbackify:wse}=require("util"),_l=(H(),D(Y)),Nse=mi(),fw=Ise(Nse.getTableSchema),mw=ss(),{DeleteResponseObject:Cse}=dw(),{handleHDBError:Ga,hdbErrors:Ose}=_e(),{HDB_ERROR_MSGS:Mg,HTTP_STATUS_CODES:$a}=Ose,Pse="records successfully deleted",Lse=wse(Fk);kk.exports={delete:Lse,deleteRecord:Fk,deleteFilesBefore:Dse,deleteAuditLogsBefore:Mse};async function Dse(e){let t=xk(e,"date");if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),!Uk(e.date,Uk.ISO_8601).isValid())throw Ga(new Error,Mg.INVALID_DATE,$a.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Mg.INVALID_DATE,!0);let n=El.checkSchemaTableExist(e.schema,e.table);if(n)throw Ga(new Error,n,$a.NOT_FOUND,_l.LOG_LEVELS.ERROR,n,!0);let s=await mw.deleteRecordsBefore(e);if(await fw(e.schema,e.table),Bk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(Dse,"deleteFilesBefore");async function Mse(e){let t=xk(e,"timestamp");if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),isNaN(e.timestamp))throw Ga(new Error,Mg.INVALID_VALUE("Timestamp"),$a.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Mg.INVALID_VALUE("Timestamp"),!0);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ga(new Error,r,$a.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);let n=await mw.deleteAuditLogsBefore(e);return await fw(e.schema,e.table),Bk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(Mse,"deleteAuditLogsBefore");async function Fk(e){e.ids&&(e.hash_values=e.ids);let t=bse(e);if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);El.transformReq(e);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ga(new Error,r,$a.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);try{await fw(e.schema,e.table);let n=await mw.deleteRecords(e);return El.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Pse}`),n}catch(n){if(n.message===_l.SEARCH_NOT_FOUND_MESSAGE){let s=new Cse;return s.message=_l.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(Fk,"deleteRecord")});var gw={};Ie(gw,{HASH_FUNCTION:()=>kr,hash:()=>Ew,validate:()=>_w});function pw(e=ap){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(op.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Ew(e,t=kr[qk?.toUpperCase()]??kr.SHA256){return hw[t](e)}function _w(e,t,r=kr[qk?.toUpperCase()]??kr.SHA256){return e?vse[r](e,t):!1}var op,rd,Hk,qk,ap,Gk,kr,hw,vse,Sw=ie(()=>{op=w(require("node:crypto")),rd=w(require("argon2")),Hk=w(ae());H();qk=(0,Hk.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),ap=16,Gk=9,kr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(pw,"generateSalt");hw={[kr.MD5]:(e,t=void 0)=>{t=t??pw(Gk);let r=op.createHash(kr.MD5).update(e+t).digest("hex");return t+r},[kr.SHA256]:(e,t=void 0)=>{t=t??pw(ap);let r=op.createHash(kr.SHA256).update(e+t).digest("hex");return t+r},[kr.ARGON2ID]:async e=>{let t=pw(ap),r=await rd.hash(e,{type:rd.argon2id,salt:Buffer.from(t)});return t+r}},vse={[kr.MD5]:(e,t)=>{let r=e.slice(0,Gk);return e===hw[kr.MD5](t,r)},[kr.SHA256]:(e,t)=>{let r=e.slice(0,ap);return e===hw[kr.SHA256](t,r)},[kr.ARGON2ID]:async(e,t)=>await rd.verify(e.slice(ap),t)};o(Ew,"hash");o(_w,"validate")});var Vk=M((NMe,$k)=>{var Tw=at(),un={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 Use(e){return un.password.presence=!0,un.username.presence=!0,un.role.presence=!0,un.active.presence=!0,Tw.validateObject(e,un)}o(Use,"addUserValidation");function xse(e){return un.password.presence=!1,un.username.presence=!0,un.role.presence=!1,un.active.presence=!1,Tw.validateObject(e,un)}o(xse,"alterUserValidation");function Bse(e){return un.password.presence=!1,un.username.presence=!0,un.role.presence=!1,un.active.presence=!1,Tw.validateObject(e,un)}o(Bse,"dropUserValidation");$k.exports={addUserValidation:Use,alterUserValidation:xse,dropUserValidation:Bse}});var nH=M((PMe,rH)=>{"use strict";var yw=require("recursive-iterator"),Fse=require("alasql"),Rw=require("clone"),Kk=oe(),{handleHDBError:Yk,hdbErrors:kse}=_e(),{HDB_ERROR_MSGS:Wk,HTTP_STATUS_CODES:zk}=kse,{getDatabases:Hse}=(Oe(),D(mt)),qse=["DISTINCT_ARRAY"],jk=Symbol("validateTables"),Aw=Symbol("validateTable"),OMe=Symbol("getAllColumns"),Qk=Symbol("validateAllColumns"),vg=Symbol("findColumn"),Jk=Symbol("validateOrderBy"),cp=Symbol("validateSegment"),bw=Symbol("validateColumn"),Xk=Symbol("setColumnsForTable"),Zk=Symbol("checkColumnsForAsterisk"),eH=Symbol("validateGroupBy"),tH=Symbol("hasColumns"),Iw=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[jk](),this[Zk](),this[Qk]()}[jk](){if(this[tH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Aw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Aw](t.table)})}}[tH](){let t=!1,r=new yw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Aw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Hse();if(!r[t.databaseid])throw Yk(new Error,Wk.SCHEMA_NOT_FOUND(t.databaseid),zk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Yk(new Error,Wk.TABLE_NOT_FOUND(t.databaseid,t.tableid),zk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Rw(s);i.table=Rw(t),this.attributes.push(i)})}[vg](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)}[Zk](){let t=new yw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Xk](r.tableid)}[Xk](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Fse.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Qk](){this[cp](this.statement.columns,!1),this[cp](this.statement.joins,!1),this[cp](this.statement.where,!1),this[eH](this.statement.group,!1),this[cp](this.statement.order,!0)}[cp](t,r){if(!t)return;let n=new yw(t),s=[];for(let{node:i,path:a}of n)!Kk.isEmpty(i)&&!Kk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Jk](i):s.push(this[bw](i)));return s}[eH](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&qse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Rw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[vg](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[vg](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`}[Jk](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[bw](t)}[bw](t){let r=this[vg](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]}};rH.exports=Iw});var aH=M((DMe,oH)=>{"use strict";var sH=require("lodash"),lp=require("mathjs"),Gse=require("jsonata"),iH=oe();oH.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?sH.uniqWith(e,sH.isEqual):e,"distinct_array"),searchJSON:$se,mad:up.bind(null,lp.mad),mean:up.bind(null,lp.mean),mode:up.bind(null,lp.mode),prod:up.bind(null,lp.prod),median:up.bind(null,lp.median)};function up(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(up,"aggregateFunction");function $se(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(iH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),iH.isEmpty(this.__ala__.res[r])){let n=Gse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o($se,"searchJSON")});var lH=M((vMe,cH)=>{"use strict";var lr=require("moment"),ww="YYYY-MM-DDTHH:mm:ss.SSSZZ";lr.suppressDeprecationWarnings=!0;cH.exports={current_date:o(()=>lr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>lr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return lr(e).utc().format("YYYY");case"month":return lr(e).utc().format("MM");case"day":return lr(e).utc().format("DD");case"hour":return lr(e).utc().format("HH");case"minute":return lr(e).utc().format("mm");case"second":return lr(e).utc().format("ss");case"millisecond":return lr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>lr(e).utc().format(ww),"date"),date_format:o((e,t)=>lr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>lr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>lr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=lr(e).utc(),s=lr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>lr().utc().valueOf(),"now"),get_server_time:o(()=>lr().format(ww),"get_server_time"),offset_utc:o((e,t)=>lr(e).utc().utcOffset(t).format(ww),"offset_utc")}});var mH=M((xMe,fH)=>{"use strict";var Vse=require("@turf/area"),Kse=require("@turf/length"),Yse=require("@turf/circle"),Wse=require("@turf/difference"),zse=require("@turf/distance"),jse=require("@turf/boolean-contains"),Qse=require("@turf/boolean-equal"),Jse=require("@turf/boolean-disjoint"),Xse=require("@turf/helpers"),uH=(H(),D(Y)),ze=oe(),Go=j();fH.exports={geoArea:Zse,geoLength:eie,geoCircle:tie,geoDifference:rie,geoDistance:dH,geoNear:nie,geoContains:sie,geoEqual:iie,geoCrosses:oie,geoConvert:aie};function Zse(e){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Vse.default(e)}catch(t){return Go.trace(t,e),NaN}}o(Zse,"geoArea");function eie(e,t){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Kse.default(e,{units:t||"kilometers"})}catch(r){return Go.trace(r,e),NaN}}o(eie,"geoLength");function tie(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Yse.default(e,t,{units:r||"kilometers"})}catch(n){return Go.trace(n,e,t),NaN}}o(tie,"geoCircle");function rie(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 Wse(e,t)}catch(r){return Go.trace(r,e,t),NaN}}o(rie,"geoDifference");function dH(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 zse.default(e,t,{units:r||"kilometers"})}catch(n){return Go.trace(n,e,t),NaN}}o(dH,"geoDistance");function nie(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 dH(e,t,n)<=r}catch(s){return Go.trace(s,e,t),!1}}o(nie,"geoNear");function sie(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 jse.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(sie,"geoContains");function iie(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 Qse.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(iie,"geoEqual");function oie(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!Jse.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(oie,"geoCrosses");function aie(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(uH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(uH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ze.autoCastJSON(e)),Xse[t](e,r)}o(aie,"geoConvert")});var Ug=M((FMe,pH)=>{var gl=aH(),is=lH(),Wi=mH();pH.exports=e=>{e.aggr.mad=e.aggr.MAD=gl.mad,e.aggr.mean=e.aggr.MEAN=gl.mean,e.aggr.mode=e.aggr.MODE=gl.mode,e.aggr.prod=e.aggr.PROD=gl.prod,e.aggr.median=e.aggr.MEDIAN=gl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=gl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=gl.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=Wi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Wi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Wi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Wi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Wi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Wi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Wi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Wi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Wi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Wi.geoNear}});var gH=M((kMe,_H)=>{"use strict";var dp=require("lodash"),Fn=require("alasql");Fn.options.cache=!1;var cie=Ug(),hH=require("clone"),xg=require("recursive-iterator"),Ve=j(),st=oe(),nd=ss(),lie=(H(),D(Y)),{hdbErrors:uie}=_e(),{getDatabases:EH}=(Oe(),D(mt)),die="IS NULL",pi="There was a problem performing this search. Please check the logs and try again.";cie(Fn);var Nw=class{static{o(this,"SQLSearch")}constructor(t,r){if(st.isEmpty(t))throw Ve.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),st.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!st.isEmptyOrZeroLength(n))return Ve.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ve.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ve.error(n),new Error(pi)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ve.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ve.error(n),new Error(pi)}if(Object.keys(this.data).length===0)return Ve.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ve.error("Error thrown from processJoins in SQLSearch class method search."),Ve.error(n),new Error(pi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ve.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ve.error(n),new Error(pi)}try{return t=await this._finalSQL(),t}catch(n){throw Ve.error("Error thrown from finalSQL in SQLSearch class method search."),Ve.error(n),new Error(pi)}}_getColumns(){let t=new xg(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(hH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=dp.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=EH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(st.isEmpty(this.statement.where)){Ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new xg(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 Fn.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 Fn.yy.LogicValue({value:i}):n instanceof Fn.yy.StringValue&&st.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Fn.yy.NumValue({value:i}))});if(t){Ve.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new xg(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(lie.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&&dp.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 Fn.promise(r)}catch(r){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ve.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(hH(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(die)>-1&&this.tables.forEach(s=>{let i={columnid:EH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=dp.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 nd.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw Ve.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(pi)}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 nd.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(pi)}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 nd.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 Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ve.error(d),new Error(pi)}else try{c.attribute=s.attribute,c.value="*";let d=await nd.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ve.error(d),new Error(pi)}}}_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 Fn.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 Fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Fn.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 Fn.yy.FuncValue:new Fn.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 Fn.promise(h,t),t=null}catch(p){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ve.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];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=dp.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 xg(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=dp.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ve.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ve.error(i),new Error(pi)}}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 nd.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 Ve.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ve.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(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();Ve.trace(`Final SQL: ${s}`),n=await Fn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ve.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ve.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ve.error(uie.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ve.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((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 nd.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 Ve.error("There was an error when processing this SQL operation. Check your logs"),Ve.error(a),new Error(pi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};_H.exports=Nw});var dn=M((qMe,SH)=>{"use strict";var fie=nH();SH.exports={searchByConditions:pie,searchByHash:hie,searchByValue:Eie,search:_ie};var Cw=ss(),{transformReq:Ow}=oe(),mie=gH();async function pie(e){return Ow(e),Cw.searchByConditions(e)}o(pie,"searchByConditions");async function hie(e){Ow(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Cw.searchByHash(e))r&&t.push(r);return t}o(hie,"searchByHash");async function Eie(e){Ow(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Cw.searchByValue(e))t.push(r);return t}o(Eie,"searchByValue");function _ie(e,t){try{let r=new fie(e);r.validate(),new mie(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(_ie,"search")});var zi=M(($Me,AH)=>{"use strict";var fp=require("crypto"),gie=ae(),{CONFIG_PARAMS:Sie}=(H(),D(Y)),yH="aes-256-cbc",Tie=32,yie=16,Pw=64,RH=32,Rie=Pw+RH,TH=new Map;AH.exports={encrypt:Aie,decrypt:bie,createNatsTableStreamName:Iie};function Aie(e){let t=fp.randomBytes(Tie),r=fp.randomBytes(yie),n=fp.createCipheriv(yH,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(Aie,"encrypt");function bie(e){let t=e.substr(0,Pw),r=e.substr(Pw,RH),n=e.substr(Rie,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=fp.createDecipheriv(yH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(bie,"decrypt");function Iie(e,t){let r=gie.get(Sie.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=TH.get(r);return n||(n=fp.createHash("md5").update(r).digest("hex"),TH.set(r,n)),n}o(Iie,"createNatsTableStreamName")});var pt=M((YMe,IH)=>{"use strict";var{platform:KMe}=require("os"),wie="nats-server.zip",Lw="nats-server",Nie=process.platform==="win32"?`${Lw}.exe`:Lw,Cie=/^[^\s.,*>]+$/,bH="__request__",Oie=o(e=>`${e}.${bH}`,"REQUEST_SUBJECT"),Pie={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Lie={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Die={HUB:"hub.pid",LEAF:"leaf.pid"},Mie={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},vie={SUCCESS:"success",ERROR:"error"},Uie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},xie={TXN:"txn",MSGID:"msgid"},sd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Bie={[sd.ERR]:1,[sd.WRN]:2,[sd.INF]:3,[sd.DBG]:4,[sd.TRC]:5},Fie={debug:"-D",trace:"-DVV"};IH.exports={NATS_SERVER_ZIP:wie,NATS_SERVER_NAME:Lw,NATS_BINARY_NAME:Nie,PID_FILES:Die,NATS_CONFIG_FILES:Lie,SERVER_SUFFIX:Mie,NATS_TERM_CONSTRAINTS_RX:Cie,REQUEST_SUFFIX:bH,UPDATE_REMOTE_RESPONSE_STATUSES:vie,CLUSTER_STATUS_STATUSES:Uie,REQUEST_SUBJECT:Oie,SUBJECT_PREFIXES:xie,MSG_HEADERS:Pie,LOG_LEVELS:sd,LOG_LEVEL_FLAGS:Fie,LOG_LEVEL_HIERARCHY:Bie}});var Dw=M(fn=>{"use strict";var kie={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
|
|
13
13
|
`),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
|
|
14
|
-
`)},xie="certificate.pem",Bie="privateKey.pem",Fie="caCertificate.pem",kie="natsCertificate.pem",Hie="natsCaCertificate.pem",wt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},qie={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"]},Gie={[wt.SERVER]:2,[wt.DEFAULT]:1},$ie={[wt["OPERATIONS-API"]]:3,[wt.SERVER]:2,[wt.DEFAULT]:1},Vie={[wt["OPERATIONS-API"]]:3,[wt.SERVER]:2,[wt.DEFAULT]:1},Kie={[wt["OPERATIONS-CA"]]:3,[wt.CA]:2,[wt["DEFAULT-CA"]]:1},Yie={[wt["OPERATIONS-CA"]]:3,[wt.CA]:2,[wt["DEFAULT-CA"]]:1},Wie={[wt.CA]:2,[wt["DEFAULT-CA"]]:1};fn.CERTIFICATE_PEM_NAME=xie;fn.PRIVATEKEY_PEM_NAME=Bie;fn.CA_PEM_NAME=Fie;fn.CERT_NAME=wt;fn.CERT_CONFIG_NAME_MAP=qie;fn.CERT_PREFERENCE_APP=Gie;fn.CERT_PREFERENCE_OPS=$ie;fn.CERT_PREFERENCE_REP=Vie;fn.CA_CERT_PREFERENCE_REP=Kie;fn.CA_CERT_PREFERENCE_OPS=Yie;fn.CA_CERT_PREFERENCE_APP=Wie;fn.CERTIFICATE_VALUES=Uie;fn.NATS_CERTIFICATE_PEM_NAME=kie;fn.NATS_CA_PEM_NAME=Hie});var vw=D((KMe,CH)=>{"use strict";var wH=require("fs-extra"),ge=require("joi"),zie=require("os"),{boolean:Ke,string:gt,number:ur,array:Ka}=ge.types(),{totalmem:AH}=require("os"),Sl=require("path"),jie=j(),Mw=oe(),VMe=Dw(),bH=(H(),M(Y)),Qie=at(),IH="log",Jie="components",Xie="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Zie="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",eoe="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",toe="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",roe="rootPath config parameter is undefined",kn=ge.alternatives([ur.min(0),gt]).optional().empty(null),Bg=ge.alternatives([Ka.items(gt,{host:gt.required(),port:kn},{hostname:gt.required(),port:kn}).empty(null),Ka.items(gt)]),ji,NH=!1;CH.exports={configValidator:noe,routesValidator:loe,routeConstraints:Bg};function noe(e,t=!1){if(NH=t,ji=e.rootPath,Mw.isEmpty(ji))throw roe;let r=Ke.optional(),n=ur.min(0).max(1e3).empty(null).default(coe),s=gt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(mp),i=gt.optional().empty(null),a=gt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ge.string().empty(null).default(mp),l=ge.custom(ioe).empty(null).default(mp),u=e.clustering?.enabled,d=ge.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=ge.object({enabled:r,hubServer:ge.object({cluster:ge.object({name:ge.required().empty(null),network:ge.object({port:kn,routes:Bg}).required()}).required(),leafNodes:ge.object({network:ge.object({port:kn}).required()}).required(),network:ge.object({port:kn}).required()}).required(),leafServer:ge.object({network:ge.object({port:kn,routes:Bg}).required(),streams:ge.object({maxAge:ur.min(120).allow(null).optional(),maxBytes:ur.min(1).allow(null).optional(),maxMsgs:ur.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ge.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ke.optional(),databaseLevel:Ke.optional(),tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.required(),verify:Ke.optional()}),user:gt.optional().empty(null)}).optional():f=ge.object({enabled:r,tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.optional()})}).optional(),ge.object({authentication:ge.alternatives(ge.object({authorizeLocal:Ke,cacheTTL:ur.required(),cookie:ge.object({domains:Ka.items(gt).optional(),expires:gt.optional()}),enableSessions:Ke,hashFunction:gt.valid("md5","sha256","argon2id").optional().empty(null)}),Ke).optional(),analytics:ge.object({aggregatePeriod:ur,replicate:Ke.optional()}),replication:ge.object({hostname:ge.alternatives(gt,ur).optional().empty(null),url:gt.optional().empty(null),port:kn,securePort:kn,routes:Ka.optional().empty(null),databases:ge.alternatives(gt,Ka),enableRootCAs:Ke.optional(),copyTablesToCatchUp:Ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:ge.object({enabled:r}).required(),logging:ge.object({auditAuthEvents:ge.object({logFailed:Ke,logSuccessful:Ke}),file:Ke.required(),level:ge.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ge.object({enabled:Ke.optional(),compress:Ke.optional(),interval:gt.custom(aoe).optional().empty(null),maxSize:gt.custom(ooe).optional().empty(null),path:gt.optional().empty(null).default(mp)}).required(),root:s,stdStreams:Ke.required(),auditLog:Ke.required()}).required(),operationsApi:ge.object({network:ge.object({cors:Ke.optional(),corsAccessList:Ka.optional(),headersTimeout:ur.min(1).optional(),keepAliveTimeout:ur.min(1).optional(),port:kn,domainSocket:ge.optional().empty("hdb/operations-server").default(mp),securePort:kn,timeout:ur.min(1).optional()}).optional(),tls:ge.alternatives([ge.array().items(d),d])}).required(),rootPath:gt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ge.object({network:ge.object({port:kn,securePort:kn,mtls:ge.alternatives([Ke.optional(),ge.object({user:gt.optional(),certificateAuthority:i,required:Ke.optional()})])}).required(),webSocket:Ke.optional(),requireAuthentication:Ke.optional()}),http:ge.object({compressionThreshold:ur.optional(),cors:Ke.optional(),corsAccessList:Ka.optional(),headersTimeout:ur.min(1).optional(),port:kn,securePort:kn,maxHeaderSize:ur.optional(),mtls:ge.alternatives([Ke.optional(),ge.object({user:gt.optional(),certificateAuthority:i,required:Ke.optional()})]),threadRange:ge.alternatives([Ka.optional(),gt.optional()])}).required(),threads:ge.alternatives(n.optional(),ge.object({count:n.optional(),debug:ge.alternatives(Ke.optional(),ge.object({startingPort:ur.min(1).optional(),host:gt.optional(),waitForDebugger:Ke.optional()})),maxHeapMemory:ur.min(0).optional()})),storage:ge.object({writeAsync:Ke.required(),overlappingSync:Ke.optional(),caching:Ke.optional(),compression:ge.alternatives([Ke.optional(),ge.object({dictionary:gt.optional(),threshold:ur.optional()})]),compactOnStart:Ke.optional(),compactOnStartKeepBackup:Ke.optional(),noReadAhead:Ke.optional(),path:l,prefetchWrites:Ke.optional(),maxFreeSpaceToLoad:ur.optional(),maxFreeSpaceToRetain:ur.optional()}).required(),ignoreScripts:Ke.optional(),tls:ge.alternatives([ge.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(noe,"configValidator");function soe(e){return NH||wH.existsSync(e)?null:`Specified path ${e} does not exist.`}o(soe,"doesPathExist");function ioe(e,t){ge.assert(e,gt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=soe(e);if(r)return t.message(r)}o(ioe,"validatePath");function ooe(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Xie);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(eoe):e}o(ooe,"validateRotationMaxSize");function aoe(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Zie);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(toe):e}o(aoe,"validateRotationInterval");function coe(e,t){let r=t.state.path.join("."),n=zie.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||AH();return i=Math.round(Math.min(i,AH())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),jie.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(coe,"setDefaultThreads");function mp(e,t){let r=t.state.path.join(".");if(!Mw.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Mw.isEmpty(ji))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Sl.join(ji,Jie);case"logging.root":return Sl.join(ji,IH);case"clustering.leafServer.streams.path":return Sl.join(ji,"clustering","leaf");case"storage.path":let n=Sl.join(ji,bH.LEGACY_DATABASES_DIR_NAME);return wH.existsSync(n)?n:Sl.join(ji,bH.DATABASES_DIR_NAME);case"logging.rotation.path":return Sl.join(ji,IH);case"operationsApi.network.domainSocket":return r==null?null:Sl.join(ji,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(mp,"setDefaultRoot");function loe(e){let t=ge.object({routes:Bg});return Qie.validateBySchema({routes:e},t)}o(loe,"routesValidator")});var At=D(nr=>{"use strict";var vs=(H(),M(Y)),Nr=oe(),dr=j(),{configValidator:uoe,routesValidator:OH}=vw(),mn=require("fs-extra"),LH=require("yaml"),as=require("path"),doe=require("is-number"),DH=require("properties-reader"),foe=require("lodash"),{handleHDBError:moe}=_e(),{HTTP_STATUS_CODES:poe,HDB_ERROR_MSGS:id}=Kr(),{server:hoe}=(xr(),M(im)),{PACKAGE_ROOT:MH}=It(),{DATABASES_PARAM_CONFIG:pp,CONFIG_PARAMS:os,CONFIG_PARAM_MAP:hi}=vs,Eoe="Unable to get config value because config is uninitialized",_oe="Config successfully initialized",goe="Error backing up config file",Soe="Empty parameter sent to getConfigValue",vH=as.join(MH,"config","yaml",vs.HDB_DEFAULT_CONFIG_FILE),Toe=as.join(MH,"config","yaml","defaultNatsConfig.yaml"),yoe="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",PH={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},Fg,xt,kg;nr.createConfigFile=Roe;nr.getDefaultConfig=Aoe;nr.getConfigValue=xH;nr.initConfig=Hg;nr.flattenConfig=od;nr.updateConfigValue=BH;nr.updateConfigObject=Ioe;nr.getConfiguration=Coe;nr.setConfiguration=Ooe;nr.readConfigFile=Fw;nr.getClusteringRoutes=Poe;nr.initOldConfig=FH;nr.getConfigFromFile=Loe;nr.getConfigFilePath=Tl;nr.addConfig=Doe;nr.deleteConfigFromFile=Moe;nr.getConfigObj=voe;nr.resolvePath=Uw;nr.getFlatConfigObj=Uoe;function Uw(e){if(e?.startsWith("~/"))return as.join(Nr.getHomeDir(),e.slice(1));let t=ae();try{return as.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(Uw,"resolvePath");function Roe(e,t=!1){let r=Ya(vH);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=LH.parseDocument(mn.readFileSync(Toe,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Fg=od(r.toJSON());let n;for(let c in e){let l=hi[c.toLowerCase()];if(l===os.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=xw(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){dr.error(f)}}}n&&UH(r,n),Bw(r,t);let s=r.toJSON();xt=od(s);let i=r.getIn(["rootPath"]),a=as.join(i,vs.HDB_CONFIG_FILE);if(mn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);mn.writeFileSync(a,String(r)),dr.trace(`Config file written to ${a}`)}o(Roe,"createConfigFile");function UH(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Nr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(pp.TABLES))for(let i in n[s][pp.TABLES])for(let a in n[s][pp.TABLES][i]){let c=n[s][pp.TABLES][i][a],l=[os.DATABASES,s,pp.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=[os.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){dr.error("Error parsing schemas CLI/env config arguments",n)}}o(UH,"setSchemasConfig");function Aoe(e){if(Fg===void 0){let r=Ya(vH);Fg=od(r.toJSON())}let t=hi[e.toLowerCase()];if(t!==void 0)return Fg[t.toLowerCase()]}o(Aoe,"getDefaultConfig");function xH(e){if(e==null){dr.info(Soe);return}if(xt===void 0){dr.trace(Eoe);return}let t=hi[e.toLowerCase()];if(t!==void 0)return xt[t.toLowerCase()]}o(xH,"getConfigValue");function Tl(e=Nr.getPropsFilePath()){let t=Nr.getEnvCliRootPath();if(t)return Uw(as.join(t,vs.HDB_CONFIG_FILE));let r=DH(e);return Uw(r.get(vs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Tl,"getConfigFilePath");function Hg(e=!1){if(xt===void 0||e){let t;if(!Nr.noBootFile()){t=Nr.getPropsFilePath();try{mn.accessSync(t,mn.constants.F_OK|mn.constants.R_OK)}catch(i){throw dr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Tl(t),n;if(r.includes("config/settings.js"))try{FH(r);return}catch(i){if(i.code!==vs.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ya(r)}catch(i){if(i.code===vs.NODE_ERROR_CODES.ENOENT){dr.trace(`HarperDB config file not found at ${r}.
|
|
15
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw dr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}boe(n,r),Bw(n);let s=n.toJSON();if(hoe.config=s,xt=od(s),xt.logging_rotation_rotate)for(let i in PH)xt[i]&&dr.error(`Config ${PH[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);dr.trace(_oe)}}o(Hg,"initConfig");function boe(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],as.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],as.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(dr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);mn.writeFileSync(t,String(e))}}o(boe,"checkForUpdatedConfig");function Bw(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 id.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 id.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=uoe(r,t);if(n.error)throw id.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(Bw,"validateConfig");function Ioe(e,t){xt===void 0&&(xt={});let r=hi[e.toLowerCase()];if(r===void 0){dr.trace(`Unable to update config object because config param '${e}' does not exist`);return}xt[r.toLowerCase()]=t}o(Ioe,"updateConfigObject");function BH(e,t,r=void 0,n=!1,s=!1,i=!1){xt===void 0&&Hg();let a=xH(hi.hdb_root),c=as.join(a,vs.HDB_CONFIG_FILE),l=Ya(c),u;if(r&&xt){let m=!1;for(let p in r)if(r[p]!=xt[p.toLowerCase()]){m=!0;break}if(!m){dr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===os.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=hi[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=xw(m,t);l.setIn([...p],h)}else for(let m in r){let p=hi[m.toLowerCase()];if(p===os.HTTP_SECUREPORT&&r[m]===xt[os.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===os.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===xt[os.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===os.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=vs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=xw(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){dr.error(A)}}}u&&UH(l,u),Bw(l);let d=l.getIn(["rootPath"]),f=as.join(d,vs.HDB_CONFIG_FILE);if(n===!0&&woe(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);mn.writeFileSync(f,String(l)),s&&(xt=od(l.toJSON())),dr.trace(`Config parameter: ${e} updated with value: ${t}`)}o(BH,"updateConfigValue");function woe(e,t){try{let r=as.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${vs.HDB_CONFIG_FILE}.bak`);mn.copySync(e,r),dr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){dr.error(goe),dr.error(r)}}o(woe,"backupConfigFile");var Noe=["databases"];function od(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}),kg=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])&&!Noe.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;!os[l.toUpperCase()]&&hi[l]&&(s[hi[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(od,"flattenConfig");function xw(e,t){if(e===os.CLUSTERING_NODENAME||e===os.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(doe(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Nr.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 Nr.autoCast(t)}o(xw,"castConfigValue");function Coe(){let e=Nr.getPropsFilePath(),t=Tl(e);return Ya(t).toJSON()}o(Coe,"getConfiguration");async function Ooe(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return BH(void 0,void 0,s,!0),yoe}catch(i){throw typeof i=="string"||i instanceof String?moe(i,i,poe.BAD_REQUEST,void 0,void 0,!0):i}}o(Ooe,"setConfiguration");function Fw(){let e=Nr.getPropsFilePath();try{mn.accessSync(e,mn.constants.F_OK|mn.constants.R_OK)}catch(n){if(!Nr.noBootFile())throw dr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Tl(e);return Ya(t).toJSON()}o(Fw,"readConfigFile");function Ya(e){return LH.parseDocument(mn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Ya,"parseYamlDoc");function Poe(){let e=Fw(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Nr.isEmptyOrZeroLength(t)?[]:t;let r=OH(t);if(r)throw id.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Nr.isEmptyOrZeroLength(n)?[]:n;let s=OH(n);if(s)throw id.CONFIG_VALIDATION(s.message);if(!Nr.isEmptyOrZeroLength(n)&&!Nr.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!Nr.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw id.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(Poe,"getClusteringRoutes");function FH(e){let t=DH(e);xt={};for(let r in hi){let n=t.get(r.toUpperCase());if(Nr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=hi[r].toLowerCase();s===os.LOGGING_ROOT?xt[s]=as.dirname(n):xt[s]=n}return xt}o(FH,"initOldConfig");function Loe(e){let t=Fw();return foe.get(t,e.replaceAll("_","."))}o(Loe,"getConfigFromFile");async function Doe(e,t){let r=Ya(Tl());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await mn.writeFile(Tl(),String(r))}o(Doe,"addConfig");function Moe(e){let t=Tl(Nr.getPropsFilePath()),r=Ya(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=as.join(n,vs.HDB_CONFIG_FILE);mn.writeFileSync(s,String(r))}o(Moe,"deleteConfigFromFile");function voe(){return kg||(Hg(),kg)}o(voe,"getConfigObj");function Uoe(){return xt||Hg(),xt}o(Uoe,"getFlatConfigObj")});var cs=D((jMe,Hr)=>{"use strict";var qH="username is required",GH="nothing to update, must supply active, role or password to update",$H="password cannot be an empty string",VH="If role is specified, it cannot be empty.",KH="active must be true or false";Hr.exports.addUser=Voe;Hr.exports.alterUser=Koe;Hr.exports.dropUser=Woe;Hr.exports.getSuperUser=Xoe;Hr.exports.userInfo=zoe;Hr.exports.listUsers=Gg;Hr.exports.listUsersExternal=joe;Hr.exports.setUsersWithRolesCache=yl;Hr.exports.findAndValidateUser=Ww;Hr.exports.getClusterUser=Zoe;Hr.exports.getUsersWithRolesCache=Joe;Hr.exports.USERNAME_REQUIRED=qH;Hr.exports.ALTERUSER_NOTHING_TO_UPDATE=GH;Hr.exports.EMPTY_PASSWORD=$H;Hr.exports.EMPTY_ROLE=VH;Hr.exports.ACTIVE_BOOLEAN=KH;var YH=ln(),xoe=Va(),hp=(Sw(),M(gw)),WH=qk(),Ep=dn(),$w=ko(),Qi=oe(),zH=require("validate.js"),Vw=j(),{promisify:Boe}=require("util"),Kw=zi(),Hw=(H(),M(Y)),kH=pt(),Foe=At(),koe=ae(),Hoe=Vi(),{hdbErrors:qoe,ClientError:Ei}=_e(),{HTTP_STATUS_CODES:$o,AUTHENTICATION_ERROR_MSGS:kw,HDB_ERROR_MSGS:ad}=qoe,{UserEventMsg:Yw}=ts(),qw=require("lodash"),{server:qg}=(xr(),M(im)),Goe=j();qg.getUser=(e,t)=>Ww(e,t,t!=null);qg.authenticateUser=(e,t)=>Ww(e,t);var jH={username:!0,active:!0,role:!0,password:!0},HH=new Map,$oe=Boe(xoe.delete),Gw=koe.get(Hw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??hp.HASH_FUNCTION.SHA256,Ji;async function Voe(e){let t=zH.cleanAttributes(e,jH),r=WH.addUserValidation(t);if(r)throw new Ei(r.message);let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Ei(ad.ROLE_NAME_NOT_FOUND(t.role),$o.NOT_FOUND);if(n.length>1)throw new Ei(ad.DUP_ROLES_FOUND(t.role),$o.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Kw.encrypt(t.password)),t.password=await hp.hash(t.password,Gw),t.hash_function=Gw,t.role=n[0].id;let s=await YH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Vw.debug(s),await yl(),s.skipped_hashes.length===1)throw new Ei(ad.USER_ALREADY_EXISTS(t.username),$o.CONFLICT);return $w.signalUserChange(new Yw(process.pid)),`${t.username} successfully added`}o(Voe,"addUser");async function Koe(e){let t=zH.cleanAttributes(e,jH);if(Qi.isEmptyOrZeroLength(t.username))throw new Error(qH);if(Qi.isEmptyOrZeroLength(t.password)&&Qi.isEmptyOrZeroLength(t.role)&&Qi.isEmptyOrZeroLength(t.active))throw new Error(GH);if(!Qi.isEmpty(t.password)&&Qi.isEmptyOrZeroLength(t.password.trim()))throw new Error($H);if(!Qi.isEmpty(t.active)&&!Qi.isBoolean(t.active))throw new Error(KH);if(!Qi.isEmpty(t.password)&&!Qi.isEmptyOrZeroLength(t.password.trim())&&(Yoe(t.username)&&(t.hash=Kw.encrypt(t.password)),t.password=await hp.hash(t.password,Gw)),t.role==="")throw new Error(VH);if(t.role){let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Ei(ad.ALTER_USER_ROLE_NOT_FOUND(t.role),$o.NOT_FOUND);if(n.length>1)throw new Ei(ad.DUP_ROLES_FOUND(t.role),$o.CONFLICT);t.role=n[0].id}let r=await YH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await yl(),$w.signalUserChange(new Yw(process.pid)),r}o(Koe,"alterUser");function Yoe(e){let t=!1,r=Ji.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(Yoe,"isClusterUser");async function Woe(e){let t=WH.dropUserValidation(e);if(t)throw new Ei(t.message);if(Ji.get(e.username)===void 0)throw new Ei(ad.USER_NOT_EXIST(e.username),$o.NOT_FOUND);let r=await $oe({table:"hdb_user",schema:"system",hash_values:[e.username]});return Vw.debug(r),await yl(),$w.signalUserChange(new Yw(process.pid)),`${e.username} successfully deleted`}o(Woe,"dropUser");async function zoe(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=qw.cloneDeep(e.hdb_user);let r=await Ep.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(zoe,"userInfo");async function joe(){let e=await Gg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(joe,"listUsersExternal");async function Gg(){let e=await Ep.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=qw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Ep.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=qw.cloneDeep(s),s.role=t[s.role],Qoe(s.role),n.set(s.username,s);return n}o(Gg,"listUsers");function Qoe(e){if(!e){Vw.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(Hoe)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Qoe,"appendSystemTablesToRole");async function yl(e=void 0){e?Ji=e:Ji=await Gg()}o(yl,"setUsersWithRolesCache");async function Joe(){return Ji||await yl(),Ji}o(Joe,"getUsersWithRolesCache");async function Ww(e,t,r=!0){Ji||await yl();let n=Ji.get(e);if(!n){if(!r)return{username:e};throw new Ei(kw.GENERIC_AUTH_FAIL,$o.UNAUTHORIZED)}if(n&&!n.active)throw new Ei(kw.USER_INACTIVE,$o.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(HH.get(t)===n.password)return s;{let i=hp.validate(n.password,t,n.hash_function||hp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)HH.set(t,n.password);else throw new Ei(kw.GENERIC_AUTH_FAIL,$o.UNAUTHORIZED)}}return s}o(Ww,"findAndValidateUser");async function Xoe(){Ji||await yl();for(let[,e]of Ji)if(e.role.role==="super_user")return e}o(Xoe,"getSuperUser");async function Zoe(){let e=await Gg(),t=Foe.getConfigFromFile(Hw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==Hw.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+kH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+kH.SERVER_SUFFIX.ADMIN,r}o(Zoe,"getClusterUser");var QH=[];qg.invalidateUser=function(e){for(let t of QH)try{t(e)}catch(r){Goe.error("Error invalidating user",r)}};qg.onInvalidatedUser=function(e){QH.push(e)}});var Ge,cd=ie(()=>{Ge={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var ld,zw=ie(()=>{cd();ld=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!==Ge.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Ge.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Ge.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Ge.WARNING,t)}markLoading(t){this.updateStatus(Ge.LOADING,t||"Component is loading")}isHealthy(){return this.status===Ge.HEALTHY}hasError(){return this.status===Ge.ERROR}isLoading(){return this.status===Ge.LOADING}hasWarning(){return this.status===Ge.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var Rl,Wa,jw,ud,Qw,dd,Jw,$g=ie(()=>{Rl=w(Kr()),Wa=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Rl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},jw=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}.`,Rl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},ud=class extends Wa{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Rl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},Qw=class extends Wa{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Rl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},dd=class extends Wa{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Rl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},Jw=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,Rl.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(`
|
|
16
|
-
`)}}});var JH,Al,XH,za,_p,fd,eae,Vg,Xw=ie(()=>{JH=w(ts()),Al=w(Je());H();XH=w(Jn());cd();$g();za=(0,XH.loggerWithTag)("componentStatus.crossThread"),_p=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,Al.onMessageByType)(i_.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,Al.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let R=this.awaitingResponses.get(r);R&&R.length>=a&&!E&&(E=!0,S(),za.trace?.(`Collected all ${R.length} expected responses for request ${r}`),p(R))},"checkComplete"),A=setTimeout(()=>{if(!E){E=!0;let R=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),za.debug?.(`Collection timeout for request ${r}: collected ${R.length}/${a} responses`),p(R)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(A)},"cleanup");this.responseCheckers.set(r,g),(0,JH.sendItcEvent)({type:i_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(R=>{E=!0,S(),this.responseCheckers.delete(r),h(new ud("sendItcEvent",R))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Al.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 ud?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,Al.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)}},fd=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!==Ge.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=[Ge.ERROR,Ge.WARNING,Ge.LOADING,Ge.UNKNOWN,Ge.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Ge.UNKNOWN}},eae=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Vg=new _p(eae)});var ja,Kg=ie(()=>{zw();cd();Xw();$g();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 dd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ge).includes(r))throw new dd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ge).join(", ")}`);this.statusMap.set(t,new ld(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Ge.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Ge.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Ge.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Ge.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Ge.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Ge.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={[Ge.HEALTHY]:0,[Ge.ERROR]:0,[Ge.WARNING]:0,[Ge.LOADING]:0,[Ge.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await Vg.collect(t);return fd.aggregate(r)}}});var fr,Yg=ie(()=>{Kg();fr=new ja});function eq(e){let t=ZH.get(e);return t||(t=new Zw(e),ZH.set(e,t)),t}function tq(){fr.reset()}var Zw,ZH,Vo,rq,nq=ie(()=>{Yg();cd();Zw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return fr.setStatus(this.componentName,Ge.HEALTHY,t),this}warning(t){return fr.setStatus(this.componentName,Ge.WARNING,t),this}error(t,r){return fr.setStatus(this.componentName,Ge.ERROR,t,r),this}loading(t){return fr.setStatus(this.componentName,Ge.LOADING,t||"Loading..."),this}unknown(t){return fr.setStatus(this.componentName,Ge.UNKNOWN,t),this}get(){return fr.getStatus(this.componentName)}},ZH=new Map;o(eq,"statusForComponent");Vo={loading(e,t){fr.initializeLoading(e,t)},loaded(e,t){fr.markLoaded(e,t)},failed(e,t,r){fr.markFailed(e,t,r)}};o(tq,"reset");rq=Ge});var gp={};Ie(gp,{AggregationError:()=>Qw,COMPONENT_STATUS_LEVELS:()=>Ge,ComponentStatus:()=>ld,ComponentStatusError:()=>Wa,ComponentStatusOperationError:()=>dd,ComponentStatusRegistry:()=>ja,CrossThreadCollectionError:()=>Jw,CrossThreadStatusCollector:()=>_p,CrossThreadTimeoutError:()=>jw,ITCError:()=>ud,StatusAggregator:()=>fd,componentStatusRegistry:()=>fr,crossThreadCollector:()=>Vg,query:()=>tae});var tae,sq=ie(()=>{Yg();Kg();zw();Kg();Xw();Yg();$g();cd();tae={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 eN={};Ie(eN,{STATUS:()=>rq,internal:()=>gp,lifecycle:()=>Vo,reset:()=>tq,statusForComponent:()=>eq});var Sp=ie(()=>{nq();sq()});var yp=D((Ove,aq)=>{"use strict";var ls=j(),pn=(H(),M(Y)),rae=w0(),nae=cs(),{validateEvent:tN}=ts(),Tp=ss(),sae=require("process"),{resetDatabases:iae}=(Oe(),M(mt)),oae={[pn.ITC_EVENT_TYPES.SCHEMA]:aae,[pn.ITC_EVENT_TYPES.USER]:oq,[pn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:lae};async function aae(e){let t=tN(e);if(t){ls.error(t);return}ls.trace("ITC schemaHandler received schema event:",e),await rae(e.message),await cae(e.message)}o(aae,"schemaHandler");async function cae(e){try{Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=iae();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ls.error(t)}}o(cae,"syncSchemaMetadata");var iq=[];async function oq(e){try{try{Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ls.warn(r)}let t=tN(e);if(t){ls.error(t);return}ls.trace(`ITC userHandler ${pn.HDB_ITC_CLIENT_PREFIX}${sae.pid} received user event:`,e),await nae.setUsersWithRolesCache();for(let r of iq)r()}catch(t){ls.error(t)}}o(oq,"userHandler");oq.addListener=function(e){iq.push(e)};async function lae(e){try{let t=tN(e);if(t){ls.error(t);return}ls.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Sp(),M(eN)),{getWorkerIndex:n}=Je(),{sendItcEvent:s}=ts(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:pn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?ls.trace(`Sent component status response directly to thread ${u}`):(u===void 0?ls.debug("No originator threadId, falling back to broadcast"):ls.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){ls.error("Error handling component status request:",t)}}o(lae,"componentStatusRequestHandler");aq.exports=oae});var ts=D((Uve,lq)=>{"use strict";var Lve=j(),rN=oe(),uae=(H(),M(Y)),{ITC_ERRORS:Rp}=Kr(),{parentPort:Dve,threadId:dae,isMainThread:fae,workerData:Mve}=require("worker_threads"),{onMessageFromWorkers:mae,broadcast:vve,broadcastWithAcknowledgement:pae}=Je();lq.exports={sendItcEvent:hae,validateEvent:cq,SchemaEventMsg:Eae,UserEventMsg:_ae};var Wg;mae(async(e,t)=>{Wg=Wg||yp(),cq(e),Wg[e.type]&&await Wg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function hae(e){return!fae&&e.message&&(e.message.originator=dae),pae(e)}o(hae,"sendItcEvent");function cq(e){if(typeof e!="object")return Rp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||rN.isEmpty(e.type))return Rp.MISSING_TYPE;if(!e.hasOwnProperty("message")||rN.isEmpty(e.message))return Rp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||rN.isEmpty(e.message.originator))return Rp.MISSING_ORIGIN;if(uae.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Rp.INVALID_EVENT(e.type)}o(cq,"validateEvent");function Eae(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(Eae,"SchemaEventMsg");function _ae(e){this.originator=e}o(_ae,"UserEventMsg")});var ko=D((Fve,mq)=>{"use strict";var uq=(H(),M(Y)),Bve=oe(),zg=j(),dq=c0(),md,{sendItcEvent:fq}=ts();function gae(e){try{zg.debug("signalSchemaChange called with message:",e),md=md||yp();let t=new dq(uq.ITC_EVENT_TYPES.SCHEMA,e);return md.schema(t),fq(t)}catch(t){zg.error(t)}}o(gae,"signalSchemaChange");function Sae(e){try{zg.trace("signalUserChange called with message:",e),md=md||yp();let t=new dq(uq.ITC_EVENT_TYPES.USER,e);return md.user(t),fq(t)}catch(t){zg.error(t)}}o(Sae,"signalUserChange");mq.exports={signalSchemaChange:gae,signalUserChange:Sae}});function Ap(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 pq(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Us(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 Us,bp=ie(()=>{Us=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(Ap,"appendHeader");o(pq,"mergeHeaders")});function jg(e,t,r=yae){let n;return function(...i){return n?n.length*nN>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();nN=(nN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var _q,Tae,yae,hq,Rae,sN,Eq,nN,iN=ie(()=>{_q=w(Jn()),Tae=3e3,yae=2e4,hq=0,Rae=3e4,sN=3e3,Eq=performance.now()+sN,nN=0;o(jg,"throttle");setInterval(()=>{let e=performance.now();e-Eq-sN>Tae&&hq+Rae<e&&(_q.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),hq=e),Eq=e},sN).unref()});var Cq={};Ie(Cq,{EVICTED:()=>va,INVALIDATED:()=>Dn,coerceType:()=>Jg,makeTable:()=>Zg});function Zg(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 R=vb(i,n,l),N,O,F={},ee=Promise.resolve(),q,k,J;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(J=K),K.isPrimaryKey&&(F=K);let W,ue=[],ce=[],re=1,Re=2,Te={},Fe={},qe=864e5,Rr=0,er,qt,tr,Kf=!1,xc,Gt,Yf,Wf=Il.get(B.REPLICATION_DATABASES);if(Array.isArray(Wf)){for(let K of Wf)if(K.name===c&&K.replicateTo>=0){Yf=K.replicateTo;break}}let zE=i.getRange({start:!1,end:!1}).constructor,jE=10,dA=6;g&&Ru(),Nm(i.env.path,K=>{if(O)return kc(K)});class zf extends ml{static{o(this,"Updatable")}getUpdatedTime(){return Da.get(this.getRecord())?.version}getExpiresAt(){return Da.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new sp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class Le extends Fr{#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=q;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(I=>!I.intermediateSource)){if(this.sources.some(I=>I.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}O=O||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),N=N||_.load;let C=o(I=>{let v=this.sources;if(v=v.filter(U=>U.intermediateSource&&U[I]&&(!U[I].reliesOnPrototype||U.prototype[I])),v.length>0)if(v.length===1){let U=v[0];return(L,x,G)=>{if(L?.source!==U)return U[I](x,G,L)}}else return(U,L,x)=>{let G=[];for(let Q of v){if(U?.source===Q)break;G.push(Q[I](L,x,U))}return Promise.all(G)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1];y.intermediateSource&&(y={});let b=o(I=>{if(y[I]&&(!y[I].reliesOnPrototype||y.prototype[I]))return(v,U,L)=>{if(!v?.source)return y[I](U,L,v)}},"getApplyToCanonicalSource");Te={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Fe={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let P=y.shouldRevalidateEvents;return(async()=>{let I=!1,v,U=o(async(L,x)=>{let G=L.value,Q=L.table?Me[c][L.table]:Le;if(c===rm&&(L.table===bu.ROLE_TABLE_NAME||L.table===bu.USER_TABLE_NAME)&&(I=!0),L.id===void 0&&(L.id=G[Q.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=_;let X={residencyId:Ro(L.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:L.nodeId,async:!0},$=L.id,be=await Q.getResource($,x,X);switch(L.finished&&await L.finished,L.type){case"put":return P?be._writeInvalidate($,G,X):be._writeUpdate($,G,!0,X);case"patch":return P?be._writeInvalidate($,G,X):be._writeUpdate($,G,!1,X);case"delete":return be._writeDelete($,X);case"publish":case"message":return be._writePublish($,G,X);case"invalidate":return be._writeInvalidate($,G,X);case"relocate":return be._writeRelocate($,X);default:xe.default.error?.("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=_.subscribe;L&&A==null&&(A=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},G=_.subscribeOnThisThread?_.subscribeOnThisThread((0,bl.getWorkerIndex)(),x):(0,bl.getWorkerIndex)()===0,Q=L&&G&&await _.subscribe?.(x);if(Q){let X;for await(let $ of Q)try{if(!($.type==="transaction"?$.writes[0]:$)){xe.default.error?.("Bad subscription event",$);continue}if($.source=_,$.type==="end_txn"){if(X?.resolve(),$.localTime&&v!==$.localTime){if($.remoteNodeIds?.length>0){let de=[Symbol.for("seq"),$.remoteNodeIds[0]],z=d.get(de),ne=z?.nodes;ne||(ne=[]);for(let Ee of $.remoteNodeIds.slice(1)){let fe=ne.find(De=>De.id===Ee);ne=ne.filter(De=>De.id!==Ee||De===fe),fe||(fe={id:Ee,seqId:0},ne.push(fe)),fe.seqId=Math.max(z?.seqId??1,$.localTime),Ee===X?.nodeId&&(fe.lastTxnTime=$.timestamp)}let me=Math.max(z?.seqId??1,$.localTime);xe.default.trace?.("Received txn",c,me,new Date(me),$.localTime,new Date($.localTime),$.remoteNodeIds),d.put(de,{seqId:me,nodes:ne})}v=$.localTime}$.onCommit&&X?.committed.then($.onCommit);continue}if(X)if($.beginTxn)X.resolve();else{X.write_promises.push(U($,X));continue}!$.timestamp&&$.version&&($.timestamp=$.version);let pe=Rt($,()=>{if($.type==="transaction"){let de=[];for(let z of $.writes)try{de.push(U(z,$))}catch(ne){throw ne.message+=" writing "+JSON.stringify(z)+" of event "+JSON.stringify($),ne}return Promise.all(de)}else if($.type==="define_schema"){let de=this.attributes.slice(0),z=!1;for(let ne of $.attributes)de.find(me=>me.name===ne.name)||(de.push(ne),z=!0);z&&(Ze({table:s,database:c,attributes:de,origin:"cluster"}),wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return $.beginTxn?(X=$,X.write_promises=[U($,$)],new Promise(de=>{X.resolve=()=>de(Promise.all(X.write_promises))})):U($,$)});X&&(X.committed=pe),I&&pe&&!pe?.waitingForUserChange&&(pe.then(()=>wp.signalUserChange(new Np.UserEventMsg(process.pid))),pe.waitingForUserChange=!0),$.onCommit&&(pe?pe.then($.onCommit):$.onCommit())}catch(be){xe.default.error?.("error in subscription handler",be)}}}catch(L){xe.default.error?.(L)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Le.prototype.get}static getResource(_,T,C){let y=super.getResource(_,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Mr(_);try{if(y.getRecord?.())return y;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let b=!C?.async||i.cache?.get?.(_),P=br(T),I=P.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Bc(_,T,{transaction:I,ensureLoaded:C?.ensureLoaded},b,v=>{if(v?Le._updateResource(y,v):y.#e=null,T.onlyIfCached){if(!y.doesExist())throw new ut.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=Aa(_,v,T,y);if(U)return P?.disregardReadTxn(),y.#i=!0,T.loadedFromSource=!0,xs(U,L=>(Le._updateResource(y,L),y))}return y})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(_)),b}}return y}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=Aa(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,xs(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=F?.type;if(_==="String"||_==="ID")return super.getNewId();if(!Gt){let b=i.getEntry(Symbol.for("id_allocation")),P=b?.value,I;if(P&&P.nodeName===server.hostname&&(!vae(i)||P.pid===process.pid)){let v=P.start,U=P.end;I=v;for(let L of i.getKeys({start:U,end:v,limit:1,reverse:!0}))I=L}else P=y(b?.version??null),I=P.start;Gt=new BigInt64Array([BigInt(I)+1n]),Gt=new BigInt64Array(i.getUserSharedBuffer("id",Gt.buffer)),Gt.maxSafeId=P.end}let T=Number(Atomics.add(Gt,0,1n)),C=_==="Int"?512:1048576;if(T+C>=Gt.maxSafeId){let b=o(P=>{Gt.maxSafeId=T+(_==="Int"?1023:4194303);let I=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,v=P?void 0:i.useReadTransaction(),U=Number(Gt[0]);for(let G of i.getKeys({start:U+1,end:I,limit:1,transaction:v}))I=G;v?.done();let{value:L,version:x}=i.getEntry(Symbol.for("id_allocation"));if(Gt.maxSafeId<I){if(L.end>Gt.maxSafeId-100)return;xe.default.info?.("New id allocation",T,Gt.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:L.start,end:Gt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Gt.maxSafeId}, but id of ${I} detected`);let G=y(x);G.alreadyUpdated||Atomics.store(Gt,0,BigInt(G.start+1)),Gt.maxSafeId=G.end}},"updateEnd");T+C===Gt.maxSafeId?setImmediate(b):T+100>=Gt.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(()=>b(!0)))}return T;function y(b){let P=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,I=P/4,v,U,L=!1,x,G;do{x=Math.floor(Math.random()*P),G={start:x,end:x+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},v=0;for(let Q of i.getKeys({start:x,limit:1,reverse:!0}))v=Q;U=P;for(let Q of i.getKeys({start:x+1,end:P,limit:1}))U=Q;I*=.875,I<1e3&&!L&&(L=!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":""}`,x,v,U,I))}while(!(I<U-x&&(I<x-v||v===0)));return i.transactionSync(()=>{let Q=i.getEntry(Symbol.for("id_allocation"));return(Q?.version??null)==b?(xe.default.info?.("Allocated new id range",G),i.put(Symbol.for("id_allocation"),G,Date.now()),G):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...Q.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,qe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");qe=qe||(h+E)/4,kc()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Le.getResidency=_&&((T,C)=>{try{return _(T,C)}catch(y){throw y.message+=` in residency function for table ${s}`,y}})}static setResidencyById(_){Le.getResidencyById=_&&(T=>{try{return _(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(_,T){if(Le.getResidencyById)return Le.getResidencyById(_[t]);let C=Yf;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(C=T.replicateTo)}if(C>=0&&server.nodes){let y=[server.hostname];if(T.previousResidency)y.push(...T.previousResidency.slice(0,C));else{let b=server.nodes.map(v=>v.name),P=Math.floor(b.length*Math.random());y.push(...b.slice(P,P+C));let I=P+C-b.length;I>0&&y.push(...b.slice(0,I))}return y}}static enableAuditing(_=!0){g=_,_&&Ru(),Le.audit=_}static coerceId(_){return _===""?null:Jg(_,F)}static async dropTable(){delete Me[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Ln&&_.value&&Oa(_.value);if(c===a){for(let _ of S)d.remove(Le.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Le.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),aN.default.unlinkSync(i.env.path);wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(Qf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Le.getRecordCount().then(y=>(C.recordCount=y.recordCount,C.estimatedRecordRange=y.estimatedRange,C)):C}if(_!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),y=br(C),b=y.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let P=Ar(_);Mr(P);let I=!0;return _.checkPermission&&(I=this.allowRead(C.user,_)),xs(xs(I,v=>{if(!v)throw new ut.AccessViolation(C.user);let U=!0;return Bc(P,C,{transaction:b,ensureLoaded:U},!1,L=>{if(C.onlyIfCached){if(!L?.value)throw new ut.ServerError("Entry is not cached",504)}else if(U){let x=Aa(P,L,C);if(x)return y?.disregardReadTxn(),C.loadedFromSource=!0,x.then(G=>G?.value)}return L?.value})}),v=>{let U=_?.select;return U&&v!=null?Gu(U,this.constructor)(v):v})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let C=Vr(_,T);if(C?.read){if(C.isSuperUser)return!0;let y=C.attribute_permissions,b=T?.select;if(y?.length>0||Kf&&b){if(T||(T={}),b){let P=y?.length>0&&oN(y,"read");T.select=b.map(I=>{let v=I.name||I;if(!P||P[v]){let U=tr[v]?.definition?.tableClass;if(U){if(I.name||(I={name:I}),!I.checkPermission&&T.checkPermission&&(I.checkPermission=T.checkPermission),!U.prototype.allowRead.call(null,_,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else T.select=y.filter(P=>P.read&&!tr[P.attribute_name]).map(P=>P.attribute_name);return T}else return!0}}allowUpdate(_,T,C){let y=Vr(_,C);if(y?.update){let b=y.attribute_permissions;if(b?.length>0){let P=oN(b,"update");for(let I in T)if(!P[I])return!1;for(let I of b){let v=I.attribute_name;!I.update&&!(v in T)&&(T[v]=this.getProperty(v))}}return Fc(this.getContext())}}allowCreate(_,T,C){if(this.isCollection){let y=Vr(_,C);if(y?.insert){let b=y.attribute_permissions;if(b?.length>0){let P=oN(b,"insert");for(let I in T)if(!P[I])return!1;return Fc(this.getContext())}else return Fc(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return Vr(_,T)?.delete&&Fc(this.getContext())}update(_,T){let C,y=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),b=!1;y?(b=T,T=_,C=this.getId()):C=Ar(_);let P=this.getContext();if(!br(P))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(b)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(y){let v=this.#t;v&&(T=Object.assign(v,T)),this.#t=T}else{let v=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(v=this.allowUpdate(P.user,T,_)),xs(v,U=>{if(!U)throw new ut.AccessViolation(P.user);return xs(i.get(Ar(_)),L=>{let x=new zf(L);return x._setChanges(T),this._writeUpdate(C,x.getChanges(),!1),x})})}return this._writeUpdate(C,this.#t,b),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===Sq?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new sp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);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 T=!0,C=this.getContext();return _?.checkPermission&&(T=this.allowDelete(C.user,_,C)),xs(T,y=>{if(!y)throw new ut.AccessViolation(C.user);this._writeInvalidate(_?Ar(_):this.getId())})}_writeInvalidate(_,T,C){let y=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Te.invalidate?.bind(this,y,_),beforeIntermediate:Fe.invalidate?.bind(this,y,_),commit:o((P,I)=>{if(!(ba(P,I,C?.nodeId)<=0)){T??=null;for(let v in r)T||(T={}),T[v]===void 0&&(T[v]=this.getProperty(v));xe.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(P).toISOString()}`),R(_,T,I,P,Dn,g,{user:y?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let C=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Te.relocate?.bind(this,C,_),beforeIntermediate:Fe.relocate?.bind(this,C,_),commit:o((b,P)=>{if(ba(b,P,T?.nodeId)<=0)return;let I=Le.getResidencyRecord(T.residencyId),v=0,U=null,L=P?.value;if(I&&!I.includes(server.hostname)){for(let x in r)U||(U={}),U[x]=L[x];v=Dn}else U=L;xe.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(b).toISOString()}`),R(_,U,P,b,v,g,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let C={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},y=Hc(this.getResidency(T.value,C)),b;if(y){if(!y.includes(server.hostname))return!1;b=Ro(y)}let P=0;xe.default.debug?.("Performing a relocate of an entry",existing_entry.key,T.value,y);let I=R(_.key,T.value,_,_.version,P,!0,{residencyId:b,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,C){let y=this.Source,b;if(!((O||g)&&(!T||(b=i.getEntry(_),!b||!T)||b.version!==C))){if(O){if(i.hasLock(_,b.version))return;let P;for(let I in r)P||(P={}),P[I]=T[I];if(P)return R(_,P,b,C,va,null,null,null,!0)}if(i.ifVersion(_,C,()=>{yo(_,T,null)}),g)return R(_,null,b,C,va,null,null,null,!0);nl(i,b??i.getEntry(_),C)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let C=!0;if(_==null)throw new TypeError("Can not put a record without a target");let y=this.getContext();return _.checkPermission&&(C=this.allowUpdate(y.user,T,_)),xs(C,b=>{if(!b)throw new ut.AccessViolation(y.user);if(Array.isArray(T))for(let P of T){let I=P[t];this._writeUpdate(I,P,!0)}else{let P=Ar(_);this._writeUpdate(P,T,!0)}})}}create(_,T){let C=!0,y=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(C=this.allowCreate(y.user,T,_)),xs(C,b=>{if(!b)throw new ut.AccessViolation(y.user);let P=Ar(_)??T[t];if(P===void 0)P=this.constructor.getNewId();else if(i.get(P))throw new ut.ClientError("Record already exists",409);return this._writeUpdate(P,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let C=this.update(_,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(_,T,C,y){let b=this.getContext(),P=br(b);Mr(_);let I=this.#n??i.getEntry(_);this.#s=C?Sq:Pae;let v={key:_,store:i,entry:I,nodeName:b?.nodeName,validate:o(U=>{T||(T=this.#t),C||T&&Ig(this.#t===T?this:T)?b?.source||(P.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(U):k.type==="String"?new Date(U).toISOString():U),C&&(t&&T[t]!==_&&(T[t]=_),q&&(I?.value?T[q.name]=I?.value[q.name]:T[q.name]=q.type==="Date"?new Date(U):q.type==="String"?new Date(U).toISOString():U),T=qa(T))):P.removeWrite(v)},"validate"),before:C?Te.put?()=>Te.put(b,_,T):null:Te.patch?()=>Te.patch(b,_,T):Te.put?()=>Te.put(b,_,qa(this)):null,beforeIntermediate:C?Fe.put?()=>Fe.put(b,_,T):null:Fe.patch?()=>Fe.patch(b,_,T):Fe.put?()=>Fe.put(b,_,qa(this)):null,commit:o((U,L,x)=>{if(x){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this.#n=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#r=U;let G=L?.value,Q;this.#s=0;let X=!1,$=ba(U,L,y?.nodeId),be;if($<=0){if(g){let me=L.localTime,Ee=L.version;xe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(U),"applying later update from:",new Date(Ee),"local recorded time",new Date(me));let fe=[];for(;me>U||Ee>=U&&me>0;){let De=l.get(me);if(!De)break;let ve=Ut(De);if(Ee=ve.version,Ee>=U){if(Ee===U){if($=ba(U,{version:Ee,localTime:me},y?.nodeId),$===0)return;if($>0)continue}if(ve.type==="patch")fe.push(ve),be=T;else if(ve.type==="put"||ve.type==="delete")return}me=ve.previousLocalTime}me||xe.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",L),fe.sort((De,ve)=>De.version-ve.version);for(let De of fe){let ve=De.getValue(i);if(xe.default.debug?.("Rebuilding update with future patch:",new Date(De.version),ve,De),Q=S_(Q??T,ve,C),!Q)return}}else{if(C)return;Q=S_(Q??T,G,C),xe.default.debug?.("Rebuilding update without audit:",Q)}xe.default.trace?.("Rebuilt record to save:",Q," is full update:",C)}let pe;if(C&&!Q?pe=T:this.constructor.loadAsInstance===!1?pe=qa(G,Q??T):(this.#e=G,pe=qa(this,Q??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let de;if(y?.residencyId!=null)de=y.residencyId;else{I?.residencyId&&(b.previousResidency=Le.getResidencyRecord(I.residencyId));let me=Hc(Le.getResidency(pe,b));if(me&&!me.includes(server.hostname))if(be??=pe,X=!0,Le.getResidencyById)pe=void 0;else{pe=null;for(let Ee in r)pe||(pe={}),pe[Ee]=be[Ee]}de=Ro(me)}C||(be=T);let z=b?.expiresAt??(h?h+Date.now():-1);xe.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(U).toISOString()}${z?", expires at: "+new Date(z).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),yo(_,G,pe);let ne=C?"put":"patch";R(_,pe,L,U,X?Dn:0,g,{omitLocalRecord:X,user:b?.user,residencyId:de,expiresAt:z,nodeId:y?.nodeId,originatingOperation:b?.originatingOperation,tableToTrack:c==="system"?null:s},ne,!1,be),b.expiresAt&&kc()},"commit")};P.addWrite(v)}async delete(_){if(Qf(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,C=this.getContext();return _.checkPermission&&(T=this.allowDelete(C.user,_,C)),xs(T,y=>{if(!y)throw new ut.AccessViolation(C.user);let b=Ar(_);return this._writeDelete(b),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let C=br(this.getContext());Mr(_);let y=this.getContext();return C.addWrite({key:_,store:i,entry:this.#n,nodeName:y?.nodeName,before:Te.delete?.bind(this,y,_),beforeIntermediate:Fe.delete?.bind(this,y,_),commit:o((b,P,I)=>{let v=P?.value;I&&(y&&P?.version>(y.lastModified||0)&&(y.lastModified=P.version),Le._updateResource(this,P)),!(ba(b,P,T?.nodeId)<=0)&&(yo(this.getId(),v),xe.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(b).toISOString()}`),g||A?(R(_,null,P,b,0,g,{user:y?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||kc()):nl(i,P))},"commit")}),!0}search(_){let T=this.getContext(),C=br(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new ut.AccessViolation(T.user);T&&(T.lastModified=wae);let y=_.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let b=_.id??this.getId();b&&(y=[{attribute:null,comparator:Array.isArray(b)?"prefix":"starts_with",value:b}].concat(y));let P,I={};function v(ne,me){let Ee;switch(me){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');Ee=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+me)}for(let fe of ne){if(fe.conditions){fe.conditions=v(fe.conditions,fe.operator);continue}let De=fe[0]??fe.attribute,ve=De==null?F:Hi(S,De);if(ve)(ve.type||xb[fe.comparator])&&(fe[1]===void 0?fe.value=L(fe.value,ve):fe[1]=L(fe[1],ve));else if(De!=null)throw(0,ut.handleHDBError)(new Error,`${De} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let $e=fe.chainedConditions[0],vr,Wn;if($e.comparator==="gt"||$e.comparator==="greater_than"||$e.comparator==="ge"||$e.comparator==="greater_than_equal"?(vr=fe,Wn=$e):(vr=$e,Wn=fe),vr.comparator!=="lt"&&vr.comparator!=="less_than"&&vr.comparator!=="le"&&vr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Ui=Wn.comparator==="ge"||Wn.comparator==="greater_than_equal",Ne=vr.comparator==="le"||vr.comparator==="less_than_equal";fe.comparator=(Ui?"ge":"gt")+(Ne?"le":"lt"),fe.value=[Wn.value,vr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ne}o(v,"prepareConditions");function U(ne,me){if(_.enforceExecutionOrder)return ne;for(let Ee of ne)Ee.conditions&&(Ee.conditions=U(Ee.conditions,Ee.operator));return ne.length>1&&me!=="or"?Aae(ne,eg(Le)):ne}o(U,"orderConditions");function L(ne,me){return Array.isArray(ne)?ne.map(Ee=>Jg(Ee,me)):Jg(ne,me)}o(L,"coerceTypedValues");let x=_.operator;(y.length>0||x)&&(y=v(y,x));let G=typeof _.sort=="object"&&_.sort,Q;if(G&&x!=="or"){let ne=G.attribute;if(ne==null)throw new ut.ClientError("Sort requires an attribute");if(P=y.find(me=>ku(me.attribute)===ku(ne)),!P){let me=Hi(S,ne);if(!me)throw(0,ut.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not a defined attribute`,404);if(me.indexed)P={...G,comparator:"sort"},y.push(P);else if(y.length===0&&!_.allowFullScan)throw(0,ut.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not indexed and not combined with any other conditions`,404)}P&&(P.descending=!!G.descending)}y=U(y,x),G&&(P&&y[0]===P?G.next&&(Q={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(P&&y.splice(y.indexOf(P),1),Q=G));let X=_.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:y,operator:x,postOrdering:Q,selectApplied:!!X};let $=C.useReadTxn(),be=Bb(y,x,Le,$,_,T,(ne,me)=>Jf(ne,X,T,$,me),I),pe=_.ensureLoaded!==!1,de=Le.transformEntryForSelect(X,T,$,I,pe,!0),z=Le.transformToOrderedSelect(be,X,Q,T,$,de);return(_.offset||_.limit!==void 0)&&(z=z.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),z.onDone=()=>{z.onDone=null,C.doneReadTxn()},z.selectApplied=!0,z.getColumns=()=>{if(X){let ne=[];for(let me of X)me==="*"?ne.push(...S.map(Ee=>Ee.name)):ne.push(me.name||me);return ne}return S.filter(ne=>!ne.computed&&!ne.relationship).map(ne=>ne.name)},z}static transformToOrderedSelect(_,T,C,y,b,P){let I=new zE;if(C){_=Jf(_,T,y,b,null);let v;I.iterate=function(){let L,x=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),G,Q=C.dbOrderedAttribute,X,$,be=!0;function pe(z){let ne=z.next&&pe(z.next),me=z.descending;return y.sort=z,(Ee,fe)=>{let De=Tu(Ee,z.attribute,y),ve=Tu(fe,z.attribute,y),$e=me?(0,wl.compareKeys)(ve,De):(0,wl.compareKeys)(De,ve);return $e===0?ne?.(Ee,fe)||0:$e}}o(pe,"createComparator");let de=pe(C);return{async next(){let z;if(L)if(z=L.next(),z.done){if(G)return I.onDone&&I.onDone(),z}else return{value:await P.call(this,z.value)};v=[],X&&v.push(X);do if(z=await x.next(),z.done){if(G=!0,v.length)break;return I.onDone&&I.onDone(),z}else{let ne=z.value;if(ne?.then&&(ne=await ne),Q){let me=Tu(ne,Q,y);if(be)be=!1,$=me;else if(me!==$){$=me,X=ne;break}}v.push(ne)}while(!0);return C.isGrouped,v.sort(de),L=v[Symbol.iterator](),z=L.next(),z.done?(I.onDone&&I.onDone(),z):{value:await P.call(this,z.value)}},return(){return I.onDone&&I.onDone(),x.return()},throw(){return I.onDone&&I.onDone(),x.throw()}}};let U=o(L=>{if(typeof T=="object"&&Array.isArray(L.attribute))for(let x=0;x<T.length;x++){let G=T[x],Q;if(G.name===L.attribute[0]){for(Q=G.sort||(G.sort={});Q.next;)Q=Q.next;Q.attribute=L.attribute.slice(1),Q.descending=L.descending}else G===L.attribute[0]&&(T[x]=Q={name:G,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&U(L.next)},"applySortingOnSelect");U(C)}else I.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),I=I.map(function(v){try{let U=P.call(this,v);return typeof U?.catch=="function"?U.catch(L=>{throw L.partialObject={[t]:v.key},L}):U}catch(U){throw U.partialObject={[t]:v.key},U}});return I}static transformEntryForSelect(_,T,C,y,b,P){let I;b&&O&&!(typeof _=="string"?[_]:_)?.every(L=>{let x;return typeof L=="object"?x=L.name:x=L,r[x]||x===t})&&(I=!0);let v,U=o(function(L){let x;if(T?.transaction?.stale&&(T.transaction.stale=!1),L!=null){if(x=L.deref?L.deref():L.value,!x&&(L.key===void 0||L.deref)||L.metadataFlags&Dn){if(L.metadataFlags&Dn&&T.replicateFrom===!1&&P&&L.residencyId)return Ja.SKIP;if(L=Bc(L.key??L,T,{transaction:C,lazy:_?.length<4,ensureLoaded:b},this?.isSync,G=>G),L?.then)return L.then(U.bind(this));x=L?.value}if(I&&L?.metadataFlags&(Dn|va)||L?.expiresAt!=null&&L?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:L.key,message:"This entry has expired"};let G=Aa(L.key??L,L,T);if(G?.then)return G.then(U)}}if(x==null)return P?Ja.SKIP:x;if(_&&!(_[0]==="*"&&_.length===1)){let G,Q=o(($,be)=>{let pe;typeof $=="object"?pe=$.name:pe=$;let de=tr?.[pe],z;if(de){let ne=y?.[pe];if(ne)if(ne.hasMappings){let Ee=de.from?x[de.from]:ku(L.key);z=ne.get(Ee),z||(z=[])}else z=ne.fromRecord?.(x);else z=de(x,T,L,!0);let me=o(Ee=>{if(de.directReturn)return be(Ee,pe);if(Ee&&typeof Ee=="object"){let fe=de.definition?.tableClass||Le;v||(v={});let De=v[pe]||(v[pe]=fe.transformEntryForSelect(pe===$?null:$.select||(Array.isArray($)?$:null),T,C,ne,b));if(Array.isArray(Ee)){let ve=[],$e=fe.transformToOrderedSelect(Ee,$.select,typeof $.sort=="object"&&$.sort,T,C,De)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),vr=o(Ui=>{for(;!Ui.done;){if(Ui?.then)return Ui.then(vr);ve.push(Ui.value),Ui=$e.next()}be(ve,pe)},"nextValue"),Wn=vr($e.next());Wn&&(G||(G=[]),G.push(Wn));return}else if(Ee=De.call(this,Ee),Ee?.then){G||(G=[]),G.push(Ee.then(ve=>be(ve,pe)));return}}be(Ee,pe)},"handleResolvedValue");z?.then?(G||(G=[]),G.push(z.then(me))):me(z);return}else z=x[pe],z&&typeof z=="object"&&pe!==$&&(z=Le.transformEntryForSelect($.select||$,T,C,null)({value:z}));be(z,pe)},"selectAttribute"),X;if(typeof _=="string")Q(_,$=>{X=$});else if(Array.isArray(_))if(_.asArray)X=[],_.forEach(($,be)=>{$==="*"?_[be]=x:Q($,pe=>X[be]=pe)});else{X={};let $=_.forceNulls;for(let be of _)if(be==="*")for(let pe in x)X[pe]=x[pe];else Q(be,(pe,de)=>{pe===void 0&&$&&(pe=null),X[de]=pe})}else throw new ut.ClientError("Invalid select"+_);return G?Promise.all(G).then(()=>X):X}return x},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,C=[],y=Vb(Le,this.getId()??null,function(I,v,U,L){try{let x=v.getValue?.(i,T),G=v.type;if(!x&&G==="patch"&&T){let X=i.getEntry(I);X?.version===v.version?x=X.value:x=v.getValue?.(i,!0,U),G="put"}let Q={id:I,localTime:U,value:x,version:v.version,type:G,beginTxn:L};C?C.push(Q):(Xe(v.size??1,"db-message",s,null),this.send(Q))}catch(x){xe.default.error?.(x)}},_.startTime||0,_),b=(async()=>{this.isCollection&&(y.includeDescendants=!0,_.onlyChildren&&(y.onlyChildren=!0)),_.supportsTransactions&&(y.supportsTransactions=!0);let I=this.getId(),v=_.previousCount;v>1e3&&(v=1e3);let U=_.startTime;if(this.isCollection){if(U){if(v)throw new ut.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:L,value:x}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let G=Ut(x);if(G.tableId!==n)continue;let Q=G.recordId;if(I==null||Aq(I,Q)){let X=G.getValue(i,T,L);if(P({id:Q,localTime:L,value:X,version:G.version,type:G.type,size:G.size}),y.queue?.length>yq&&await y.waitForDrain()===!1)return}y.startTime=L}}else if(v){let L=[];for(let{key:x,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let Q=Ut(G);if(Q.tableId!==n)continue;let X=Q.recordId;if(I==null||Aq(I,X)){let $=Q.getValue(i,T,x);if(L.push({id:X,localTime:x,value:$,version:Q.version,type:Q.type}),--v<=0)break}}catch(Q){xe.default.error("Error getting history entry",x,Q)}for(let x=L.length;x>0;)P(L[--x]);L[0]&&(y.startTime=L[0].localTime)}else if(!_.omitCurrent){for(let{key:L,value:x,version:G,localTime:Q,size:X}of i.getRange({start:I??!1,end:I==null?void 0:[I,wl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(P({id:L,localTime:Q,value:x,version:G,type:"put",size:X}),y.queue?.length>yq&&await y.waitForDrain()===!1))return}}else{v&&!U&&(U=0);let L=this.#n?.localTime;if(L===Mb&&(i.cache?.delete(I),this.#n=i.getEntry(I),xe.default.trace?.("re-retrieved record",L,this.#n?.localTime),L=this.#n?.localTime),xe.default.trace?.("Subscription from",U,"from",I,L),U<L){let x=[],G=L;do{let Q=l.get(G);if(Q){_.omitCurrent=!0;let X=Ut(Q),$=X.getValue(i,T,G);T&&(X.type="put"),x.push({id:I,value:$,localTime:G,...X}),G=X.previousLocalTime}else break;v&&v--}while(G>U&&v!==0);for(let Q=x.length;Q>0;)P(x[--Q]);y.startTime=L}!_.omitCurrent&&this.doesExist()&&P({id:I,localTime:L,value:this.#e,version:this.#r,type:"put"})}for(let L of C)P(L);C=null})();function P(I){Xe(I.size??1,"db-message",s,null),y.send(I)}return o(P,"send"),_.listener&&y.on("data",_.listener),y}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let y=!0,b=this.getContext();return _.checkPermission&&(y=this.allowCreate(b.user,_,b)),xs(y,P=>{if(!P)throw new ut.AccessViolation(b.user);let I=Ar(_);this._writePublish(I,T,C)})}}_writePublish(_,T,C){let y=br(this.getContext());_??=null,_!==null&&Mr(_);let b=this.getContext();y.addWrite({key:_,store:i,entry:this.#n,nodeName:b?.nodeName,validate:o(()=>{b?.source||(y.checkOverloaded(),this.validate(T))},"validate"),before:Te.publish?.bind(this,b,_,T),beforeIntermediate:Fe.publish?.bind(this,b,_,T),commit:o((P,I,v)=>{I===void 0&&A&&!g&&kc(),xe.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(P).toISOString()}`),R(_,I?.value??null,I,I?.version||P,0,!0,{user:b?.user,residencyId:C?.residencyId,expiresAt:b?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let C,y=o((b,P,I)=>{if(P.type&&b!=null)if(T&&b.__op__&&(b=b.value),P.properties){typeof b!="object"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an object${P.type?" ("+P.type+")":""}`);let v=P.properties;for(let U=0,L=v.length;U<L;U++){let x=v[U];if(x.relationship||x.computed){_.hasOwnProperty(x.name)&&(C||(C=[])).push(`Computed property ${I}.${x.name} may not be directly assigned a value`);continue}let G=y(b[x.name],x,I+"."+x.name);G&&(b[x.name]=G)}if(P.sealed&&b!=null&&typeof b=="object")for(let U in b)v.find(L=>L.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${I}`)}else switch(P.type){case"Int":(typeof b!="number"||b>>0!==b)&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(v=>typeof v=="string")||(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a string`);break;case"Boolean":typeof b!="boolean"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a bigint`)}break;case"Bytes":if(!(b instanceof Uint8Array)){if(typeof b=="string")return Buffer.from(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(b instanceof Is)){if(typeof b=="string"&&(b=Buffer.from(b)),b instanceof Buffer)return createBlob(b,{type:"text/plain"});(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Blob`)}break;case"array":if(Array.isArray(b)){if(P.elements)for(let v=0,U=b.length;v<U;v++){let L=b[v],x=y(L,P.elements,I+"[*]");x&&(b[v]=x)}}else(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an Array`);break}P.nullable===!1&&b==null&&(C||(C=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let b=0,P=S.length;b<P;b++){let I=S[b];if(I.relationship||I.computed){Object.hasOwn(_,I.name)&&(C||(C=[])).push(`Computed property ${I.name} may not be directly assigned a value`);continue}if(!T||I.name in _){let v=y(_[I.name],I,I.name);v!==void 0&&(_[I.name]=v)}}if(f)for(let b in _)S.find(P=>P.name===b)||(C||(C=[])).push(`Property ${b} is not allowed`);if(C)throw new ut.ClientError(C.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let C of _){if(!C.name)throw new ut.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new ut.ClientError("Attribute names cannot include backticks or forward slashes");bae(C.name),T.push(C)}return Ze({table:s,database:c,schemaDefined:u,attributes:T}),Le.indexingOperation}static async removeAttributes(_){let T=S.filter(C=>!_.includes(C.name));return Ze({table:s,database:c,schemaDefined:u,attributes:T}),Le.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,T=aN.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,C=1e3/2,y=performance.now(),b=Math.floor(T/2),P=_?.exactCount,I=0,v=0,U;for(let{value:L}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(L!=null&&I++,v++,await Qa(),!P&&v<b&&performance.now()-y>C){U=v;break}if(U){let L=I;I=0;for(let{value:z}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))z!=null&&I++,await Qa();let x=U*2,G=(I+L)/x,Q=Math.pow((I-L+1)/U/2,2)+G*(1-G)/x,X=Math.max(Math.sqrt(Q)*T,1),$=Math.round(G*T),be=Math.max($-1.96*X,I+L),pe=Math.min($+1.96*X,T),de=Math.pow(10,Math.round(Math.log10(X)));return de>$&&(de=de/10),I=Math.round($/de)*de,{recordCount:I,estimatedRange:[Math.round(be),Math.round(pe)]}}return{recordCount:I}}static updatedAttributes(){tr=this.propertyResolvers={$id:o((_,T,C)=>({value:C.key}),"$id"),$updatedtime:o((_,T,C)=>C.version,"$updatedtime"),$updatedTime:o((_,T,C)=>C.version,"$updatedTime"),$expiresAt:o((_,T,C)=>C.expiresAt,"$expiresAt"),$record:o((_,T,C)=>C?{value:_}:_,"$record"),$distance:o((_,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(F=_),_.resolve=null;let T=_.relationship,C=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Kf=!0,T.to)_.elements?.definition?(tr[_.name]=_.resolve=(y,b,P,I)=>{let v=y[T.from?T.from:t],U=_.elements.definition.tableClass;return I?Fu({attribute:T.to,value:v},br(b).getReadTxn(),!1,U,!1).map(L=>L&&L.key!==void 0?L:U.primaryStore.getEntry(L,{transaction:br(b).getReadTxn()})).asArray:U.search([{attribute:T.to,value:v}],b).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.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(T.from){let y=_.definition||_.elements?.definition;y?(tr[_.name]=_.resolve=(b,P,I,v)=>{let U=b[T.from];if(U===void 0)return;if(_.elements){let x,G=U?.map(Q=>{let X=y.tableClass.primaryStore[v?"getEntry":"get"](Q,{transaction:br(P).getReadTxn()});return X?.then&&(x=!0),Le.loadAsInstance===!1&&Object.freeze(v?X?.value:X),X});return T.filterMissing?x?Promise.all(G).then(Q=>Q.filter(bq)):G.filter(bq):x?Promise.all(G):G}let L=y.tableClass.primaryStore[v?"getEntry":"get"](U,{transaction:br(P).getReadTxn()});return Le.loadAsInstance===!1&&Object.freeze(v?L?.value:L),L},_.set=(b,P)=>{if(Array.isArray(P)){let I=P.map(v=>v.getId?.()||v[y.tableClass.primaryKey]);b[T.from]=I}else{let I=P.getId?.()||P[y.tableClass.primaryKey];b[T.from]=I}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.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(C)typeof C.from=="function"&&this.setComputedAttribute(_.name,C.from),tr[_.name]=_.resolve=(y,b,P)=>{let I=typeof C.from=="string"?y[C.from]:y,v=this.userResolvers[_.name];if(v)return v(I,b,P);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 y=r[_.name].customIndex;tr[_.name]=(b,P,I)=>{let v=b[_.name];return y.propertyResolver(v,P,I)},tr[_.name].directReturn=!0}}ip(this,this),ip(zf,this,!0);for(let _ of S){let T=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,qu.getStore())},set(C){return _.set(this,C)},configurable:!0})}}static setComputedAttribute(_,T){let C=Hi(S,_);if(!C){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let C;for(let{key:y,value:b}of l.getRange({start:0,end:_}))await Qa(),Ut(b).tableId===n&&(C=q_(l,y,b));if(T)for(let y of i.getRange({start:0,versions:!0})){let{key:b,value:P,localTime:I}=y;await Qa(),P===null&&I<_&&(C=nl(i,y))}await C}static async*getHistory(_=0,T=1/0){for(let{key:C,value:y}of l.getRange({start:_||1,end:T})){await Qa();let b=Ut(y);b.tableId===n&&(yield{id:b.recordId,localTime:C,version:b.version,type:b.type,value:b.getValue(i,!0,C),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let C=i.getEntry(_);if(!C)return T;let y=C.localTime;if(!y)throw new Error("The entry does not have a local audit time");let b=0;do{await Qa();let P=l.get(y);if(P){let I=Ut(P);T.push({id:I.recordId,localTime:y,version:I.version,type:I.type,value:I.getValue(i,!0,y),user:I.user}),y=I.previousLocalTime}else break}while(b<1e3&&y);return T.reverse()}static cleanup(){W?.remove()}}let QE=jg(async(K,_,T)=>{for(let C of Le.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;_.source=C;let y=await C.get(K,_);if(y)return y}},()=>{throw new ut.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Le.updatedAttributes();let jf=Le.prototype;return h&&Le.setTTLExpiration(h/1e3),J&&JE(),Le;function yo(K,_,T){let C;for(let y in r){let b=r[y],P=b.isIndexing,I=tr[y],v=T&&(I?I(T):T[y]),U=_&&(I?I(_):_[y]);if(v===U&&!P)continue;if(b.customIndex){b.customIndex.index(K,v,U);continue}C=!0;let L=b.indexNulls,x=(0,Ip.getIndexedValues)(v,L),G=(0,Ip.getIndexedValues)(U,L);if(s==="OrganizationRole"&&xe.default.error?.({tableName:s,id:K,key:y,valuesToAdd:x,valuesToRemove:G}),G?.length>0){let Q=new Set(G);if(x=x?x.filter(X=>{if(Q.has(X))Q.delete(X);else return!0}):[],G=Array.from(Q),(G.length>0||x.length>0)&&gq){let X=G.concat(x).map($=>({key:$,value:K}));b.prefetch(X,Rq)}for(let X=0,$=G.length;X<$;X++)b.remove(G[X],K)}else x?.length>0&&gq&&b.prefetch(x.map(Q=>({key:Q,value:K})),Rq);if(x)for(let Q=0,X=x.length;Q<X;Q++)b.put(x[Q],K)}return C}o(yo,"updateIndices");function Mr(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Tq)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,wl.writeKey)(K,Lae,0)>Tq)throw new Error("Primary key size is too large: "+K.length);return!0}o(Mr,"checkValidId");function Ar(K){return typeof K=="object"&&K?K.id:K}o(Ar,"requestTargetToId");function Qf(K){return typeof K=="object"&&K&&K.isCollection}o(Qf,"isSearchTarget");function fA(K){}o(fA,"isRequestTarget");function Bc(K,_,T,C,y){if(Le.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let P=Hc(Le.getResidencyById(K));if(P&&!P.includes(server.hostname)&&N)return N({key:K,residency:P}).then(y)}let b=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return y(null,K);let P=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(Nq.default.trace?.("Recording db-read action for",`${c}.${s}`),Xe(P?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(P?.value),P?.residencyId&&P.metadataFlags&Dn&&N&&T.ensureLoaded&&_?.replicateFrom!==!1?N(P).then(I=>y(I,K),I=>(xe.default.error?.("Error loading remote record",K,P,T,I),y(null,K))):(P&&_&&(P?.version>(_.lastModified||0)&&(_.lastModified=P.version),P?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=P.localTime)),y(P,K))},"whenPrefetched");return C?b():re>0?(re--,b()):new Promise((P,I)=>{re===0?(re--,i.prefetch([K],()=>{v(),U()})):(ue.push(K),ce.push(U),ue.length>dA&&(re--,v()));function v(){if(ue.length>0){let L=ce;i.prefetch(ue,()=>{re===-1?v():re++;for(let x of L)x()}),ue=[],ce=[],Re>2&&Re--}else re=Re,Re<jE&&Re++}o(v,"prefetch");function U(){try{P(b())}catch(L){I(L)}}o(U,"load")})}o(Bc,"loadLocalRecord");function Vr(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return Dae;let C=T[c],y,b=C?.tables;if(b)return b[s];if(c==="data"&&(y=T[s])&&!y.tables)return y}o(Vr,"getTablePermissions");function Aa(K,_,T,C){if(O){let y=!1;if(T.noCache?y=!0:(_?(!_.value||_.metadataFlags&(Dn|va)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(y=!0):y=!0,zr(!y,"cache-hit",s)),y){let b=yu(K,_,T).then(P=>(P?.value&&P?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),T&&(P?.version>(T.lastModified||0)&&(T.lastModified=P.version),T.lastRefreshed=Date.now()),P));if(T?.onlyIfCached||_?.value&&C?.allowStaleWhileRevalidate?.(_,K)){if(b.catch(P=>xe.default.warn?.(P)),T?.onlyIfCached&&!C.doesExist())throw new ut.ServerError("Entry is not cached",504);return}else return b}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Le.evict(_.key,_.value,_.version),_.value=null,{then(y){return y(_)}}}o(Aa,"ensureLoadedFromSource");function br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new bo,_.lmdbDb=i,_;_=T}while(!0)}else return new __}o(br,"txnForContext");function Tu(K,_,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let b=tr,P=C;for(let I=0,v=_.length;I<v;I++){let U=_[I],L=b?.[U];P=L&&P?L(P,T,K):P?.[U],K=null,b=L?.definition?.tableClass?.propertyResolvers}return P}let y=tr[_];return y?y(C,T,K):C[_]}o(Tu,"getAttributeValue");function Jf(K,_,T,C,y){let b=y?.length,P={transaction:C,lazy:b>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},I;function v(U,L){let x=U?.value;if(!x)return Ja.SKIP;for(let G=0;G<b;G++)if(!I?.includes(G)&&!y[G](x,U))return Ja.SKIP;return L!==void 0&&(U.key=L),U}if(o(v,"processEntry"),b>0||!K.hasEntries){let U=K.map(L=>{if(I=null,typeof L=="object"&&L?.key!==void 0)return b>0?v(L):L;if(L==null)return Ja.SKIP;for(let x=0;x<b;x++){let Q=y[x].idFilter;if(Q){if(!Q(L))return Ja.SKIP;I||(I=[]),I.push(x)}}return Bc(L,T,P,!1,v)});return Array.isArray(K)&&(U=U.filter(L=>L!==Ja.SKIP)),U.hasEntries=!0,U}return K}o(Jf,"transformToEntries");function ba(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),y=_.localTime,b=y&&l.get(y);if(b){let P,I,v=Ut(b);for(let U in C)C[U]===T&&(P=U),C[U]===v.nodeId&&(I=U);if(P>I)return 1;if(P===I)return 0}}return-1}return 1}o(ba,"precedesExistingVersion");async function yu(K,_,T){let C=_?.metadataFlags,y=_?.version,b,P;if(!i.attemptLock(K,y,()=>{clearTimeout(P);let L=i.getEntry(K);!L||!L.value||L.metadataFlags&(Dn|va)?b(yu(K,i.getEntry(K),T)):b(L)}))return new Promise(L=>{b=L,P=setTimeout(()=>{i.unlock(K,y)},Oae)});let I=_?.value,v={requestContext:T,replacingRecord:I,replacingEntry:_,replacingVersion:y,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((L,x)=>{let G;xs(Rt(v,async Q=>{let X=performance.now(),$,be,pe;try{$=await QE(K,v,_),pe=C&Dn;let z=v.lastModified||pe&&y;be=pe||z>y||!I,z||(z=(0,Ip.getNextMonotonicTime)());let ne=performance.now()-X;if(Xe(ne,"cache-resolution",s,null,"success"),U&&Ap(U,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),Q.timestamp=z,h&&v.expiresAt==null&&(v.expiresAt=Date.now()+h),$){if(typeof $!="object")throw new Error("Only objects can be cached and stored in tables");if($.status>0&&$.headers)if($.status>=300)if($.status===304)$=I,z=y;else throw new ut.ServerError($.body||"Error from source",$.status);else $=$.body;typeof $.toJSON=="function"&&($=$.toJSON()),t&&$[t]!==K&&($[t]=K)}G=!0,L({key:K,version:z,value:$})}catch(z){z.message+=` while resolving record ${K} for ${s}`,I&&((z.code==="ECONNRESET"||z.code==="ECONNREFUSED"||z.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(z.statusCode===500||z.statusCode===502||z.statusCode===503||z.statusCode===504))?(L({key:K,version:y,value:I}),xe.default.trace?.(z.message,"(returned stale record)")):x(z);let ne=performance.now()-X;Xe(ne,"cache-resolution",s,null,"fail"),U&&Ap(U,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),v.transaction.abort();return}if(T?.noCacheStore||v.noCacheStore){v.transaction.abort();return}br(v).addWrite({key:K,store:i,entry:_,nodeName:"source",commit:o((z,ne)=>{if(ne?.version!==y)return;let me=yo(K,I,$);if($){Fe.put?.(v,K,$),ne&&(T.previousResidency=Le.getResidencyRecord(ne.residencyId));let Ee,fe=!1,De,ve=Hc(Le.getResidency($,T));if(ve){if(!ve.includes(server.hostname))if(Ee=$,fe=!0,Le.getResidencyById)$=void 0;else{$=null;for(let $e in r)$||($={}),$[$e]=Ee[$e]}De=Ro(ve)}xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),R(K,$,ne,z,fe?Dn:0,g&&(be||fe)||null,{user:v?.user,expiresAt:v.expiresAt,residencyId:De,tableToTrack:s},"put",!!pe,Ee)}else ne&&(Fe.delete?.(v,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),g||A?R(K,null,ne,z,0,g&&be||null,{user:v?.user,tableToTrack:s},"delete",!!pe):nl(i,ne,y))},"commit")})}),()=>{i.unlock(K,y)},Q=>{i.unlock(K,y),G&&xe.default.error?.("Error committing cache update",Q)})})}o(yu,"getFromSource");function Fc(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new ut.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new ut.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Fc,"checkContextPermissions");function kc(K){let _=!1;if(K&&(K-Rr>1&&(_=!0),Rr=K),!(qe===er&&!_)&&(er=qe,(0,bl.getWorkerIndex)()===(0,bl.getWorkerCount)()-1))return qt&&clearTimeout(qt),qe?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let y=qe/(1+Rr),b=_?Date.now():Math.ceil((Date.now()-C.getTime())/y)*y+C.getTime(),P=o(I=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(I)}`),qt=setTimeout(()=>ee=ee.then(async()=>{if(P(Math.max(I+qe,Date.now())),i.rootStore.status!=="open"){clearTimeout(qt);return}let v=50,U=new Array(v),L=0,x=Math.pow(Rr,8)*(Il.get(B.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),G=E/Math.pow(Math.max(Rr,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${G}ms`);function Q(X,$,be,pe){let de=X+G-Date.now();if(de<0)return!0;if(Rr){let z=i.lastSize;return be&Ln&&Ou(pe,ne=>{ne.size&&(z+=ne.size)}),xe.default.trace?.(`shouldEvict adjusted ${de} ${z}, ${de*(X-$)/z} < ${x}`),de*(X-$)/z<x}return!1}o(Q,"shouldEvict");try{let X=0;for(let $ of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:be,value:pe,version:de,expiresAt:z,metadataFlags:ne}=$,me;pe===null&&!g&&de+Cae<Date.now()?me=nl(i,$,de):z!=null&&Q(z,de,ne,pe)&&(me=Le.evict(be,pe,de),X++),me&&(await U[L],U[L]=me.catch(Ee=>{xe.default.error?.("Cleanup error",Ee)}),++L>=v&&(L=0)),await Qa()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${X} entries`)}catch(X){xe.default.warn?.(`Error in cleanup scan for ${s}:`,X)}T(void 0),Rr=0}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");P(b)}):void 0}o(kc,"scheduleCleanup");function Ru(){W=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(Ru,"addDeleteRemoval");function JE(){(0,bl.getWorkerIndex)()===0&&setInterval(async()=>{if(!xc){xc=!0;try{let K=J.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of _.getValues(T)){let y=i.getEntry(C);y?.value?y.value[K]<Date.now()&&Le.evict(C,y.value,y.version):i.ifVersion(C,y?.version,()=>_.remove(T,C))}await Qa()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{xc=!1}}},Nae).unref()}o(JE,"runRecordExpirationEviction");function Hc(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(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Hc,"residencyFromFunction");function Ro(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}o(Ro,"getResidencyId")}function oN(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 Rq(){}function Jg(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 Qg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Qg(+e);case"Float":return e==="null"?null:Qg(+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;Mae.test(e)||(e+="Z");let n=new Date(e);return Qg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Xg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Qg(e){if(isNaN(e))throw new SyntaxError;return e}function Aq(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 xs(e,t,r){return e?.then?e.then(t,r):t(e)}function bq(e){return e!=null}function Bs(e){try{return JSON.stringify(e)}catch{return e}}function vae(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ja,Ip,Iq,wq,Il,ut,wp,Np,xe,wl,bl,Xg,aN,Nq,Aae,bae,Iae,wae,Nae,Cae,gq,Oae,Sq,Pae,Dn,va,Lae,Tq,yq,Dae,oUe,Mae,Qa,ng=ie(()=>{H();Ja=require("lmdb"),Ip=w(Cn()),Iq=w(require("lodash")),wq=w(mm());Ua();hm();Il=w(ae());Kb();ut=w(_e()),wp=w(ko()),Np=w(ts());Oe();rg();xe=w(Jn());ZI();Ca();wl=require("ordered-binary"),bl=w(Je());Io();Xg=w(oe());el();Os();T_();bp();aN=w(require("node:fs"));ws();B_();Nq=w(j());iN();({sortBy:Aae}=Iq.default),{validateAttribute:bae}=wq.default,Iae=new Uint8Array(9);Iae[8]=192;wae=1/0,Nae=6e4,Cae=864e5;Il.initSync();gq=Il.get(B.STORAGE_PREFETCHWRITES),Oae=1e4,Sq=1,Pae=2,Dn=1,va=8,Lae=Buffer.allocUnsafeSlow(8192),Tq=1978,yq=100,Dae={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},oUe=(0,Xg.convertToMS)(Il.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Zg,"makeTable");o(oN,"attributesAsObject");o(Rq,"noop");Mae=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Jg,"coerceType");o(Qg,"rejectNaN");o(Aq,"isDescendantId");Qa=o(()=>new Promise(setImmediate),"rest");o(xs,"when");o(bq,"exists");o(Bs,"stringify");o(vae,"hasOtherProcesses")});function eS(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 tS(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 Oq=ie(()=>{o(eS,"euclideanDistance");o(tS,"cosineDistance")});var Pq,Lq,hd,Xi,pd,Uae,xae,rS,Dq=ie(()=>{Oq();Pq=require("msgpackr"),Lq=w(Jn()),hd=w(_e()),Xi=(0,Lq.loggerWithTag)("HNSW"),pd=Symbol.for("entryPoint"),Uae=Symbol.for("key"),xae=10,rS=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=Pq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?eS:tS,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"?[Uae,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(pd);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);Xi.debug?.("setting entry point to",i),this.indexStore.put(pd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),xae),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);Xi.debug?.("setting entry point to",i),this.indexStore.put(pd,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&&Xi.info?.("should not have zero connections for",l);let A=h[E];for(let S=0;S<g.length;S++){let{id:R,distance:N,node:O}=g[S];if(R===i)continue;let F=[];if(this.optimizeRouting){let k=!1,J=O[E],W=1+this.optimizeRouting*(1+.5*S/this.M);for(let ue=0;ue<J.length;ue++){let{id:ce,distance:re}=J[ue],Re=1+this.optimizeRouting*(1+.5*ue/this.M);for(let Te=0;Te<A.length;Te++){let{id:Fe,distance:qe}=A[Te];if(Fe===ce){N*W>qe+re?k=!0:re*Re>N+qe&&(F.push({fromId:Fe,toId:R}),F.push({fromId:R,toId:Fe}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;A.push({id:R,distance:N});for(let{fromId:k,toId:J}of F){let W=d(k);W||(W=d(k,this.indexStore.get(k)));for(let ue=0;ue<W[E].length;ue++)if(W[E][ue].id===J){Object.isFrozen(W[E])&&(W[E]=W[E].slice()),W[E].splice(ue,1);break}}let ee=c[E],q=ee?.find(({id:k})=>k===R);if(q){let k=ee?.indexOf(q);ee.copied||(ee=[...ee],ee.copied=!0,c[E]=ee),ee.splice(k,1)}else this.addConnection(R,d(R,O),i,E,N,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(pd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);Xi.debug?.("setting entry point to",l),this.indexStore.put(pd,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&&(Xi.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(pd);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 hd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new hd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=tS;else if(s==="euclidean")c=eS;else{if(s)throw new hd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new hd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new hd.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){Xi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||Xi.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)){Xi.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&&Xi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?Xi.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"?eS:tS);let c=a(s.target,t);return i.set(n,c),c}return t}}});var cN,Mq=ie(()=>{Dq();cN={HNSW:rS}});var mt={};Ie(mt,{database:()=>td,databaseEnvs:()=>Ko,databases:()=>Me,dropDatabase:()=>sw,dropTableMeta:()=>Gae,getDatabases:()=>ct,getDefaultCompression:()=>lS,getTables:()=>Fae,onRemovedDB:()=>vp,onUpdatedTable:()=>Nl,readMetaDb:()=>Cp,resetDatabases:()=>Td,table:()=>Ze,tables:()=>hn});function Mp(e,t){let r=aS.OpenDBIObject??aS.default.OpenDBIObject;return new r(e,t)}function Fae(){return oS||ct(),hn||{}}function ct(){if(oS)return Me;oS=!0,gd=new Map;let e=(0,Yt.getHdbBasePath)()&&(0,Bt.join)((0,Yt.getHdbBasePath)(),Gc),t=(0,Yt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Yt.get)(B.STORAGE_PATH)||e&&((0,us.existsSync)(e)?e:(0,Bt.join)((0,Yt.getHdbBasePath)(),r_)),!e)return;if((0,us.existsSync)(e))for(let n of(0,us.readdirSync)(e,{withFileTypes:!0})){let s=(0,Bt.basename)(n.name,".mdb");n.isFile()&&(0,Bt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&Cp((0,Bt.join)(e,n.name),null,s)}if((0,us.existsSync)((0,_d.getBaseSchemaPath)())){for(let n of(0,us.readdirSync)((0,_d.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Bt.join)((0,_d.getBaseSchemaPath)(),n.name),i=(0,Bt.join)((0,_d.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,us.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,Bt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,Bt.join)(i,a.name);Cp((0,Bt.join)(s,a.name),(0,Bt.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,us.existsSync)(i))for(let c of(0,us.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Bt.extname)(c.name).toLowerCase()===".mdb"&&Cp((0,Bt.join)(i,c.name),(0,Bt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,Bt.join)(l.path,(0,Bt.basename)(c+".mdb"));(0,us.existsSync)(u)&&Cp(u,c,n,null,!0)}}for(let n in Me){let s=gd.get(n);if(s){let i=Me[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 Me[n],n==="data"){for(let i in hn)delete hn[i];delete hn[cS]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"];if((0,Yt.get)(B.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let n of r)Me.system[n]&&(Me.system[n].replicate=!1);return gd=null,Me}function Td(){oS=!1;for(let[,e]of Ko)e.needsDeletion=!0;ct();for(let[e,t]of Ko)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Ko.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],Pp.forEach(i=>i(t.databaseName));break}}return Me}function Cp(e,t,r=dN,n,s){let i=new lN.default(e,!1);try{let a=Ko.get(e);a?a.needsDeletion=!1:(a=(0,Sd.open)(i),Ko.set(e,a));let c=new Mp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(nS.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,us.existsSync)(n)&&(i.path=n,u=(0,Sd.open)(i),u.isLegacy=!0):u=H_(a));let d=Fq(r),f=d[cS],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 re of E)if(re.is_hash_attribute||re.isPrimaryKey){g=re;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={},R=[],N,O,F=typeof g.audit=="boolean"?g.audit:(0,Yt.get)(B.LOGGING_AUDITLOG),ee=g.trackDeletes,q=g.expiration,k=g.eviction,J=g.sealed,W=g.splitSegments,ue=g.replicate;if(A)S=A.indices,R=A.attributes,A.schemaVersion++;else{N=g.tableId,N?N>=(l.get(Ed)||0)&&(l.putSync(Ed,N+1),Cr.info(`Updating next table id (it was out of sync) to ${N+1} for ${p}`)):(g.tableId=N=l.get(Ed),N||(N=1),Cr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(Ed,N+1),l.putSync(g.key,g));let re=new Mp(!g.is_hash_attribute,g.is_hash_attribute);if(re.compression=g.compression,re.compression){let Re=(0,Yt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||Bq;re.compression.threshold=Re}O=X_(a.openDB(g.key,re),a),a.databaseName=r,O.tableId=N}let ce;for(let re of E){re.attribute=re.name;try{if(!re.is_hash_attribute&&(re.indexed||re.attribute&&!re.name)){if(!S[re.name]){let Te=Hq(re.key,a,re);S[re.name]=Te,S[re.name].indexNulls=re.indexNulls}let Re=R.find(Te=>Te.name===re.name);Re?R.splice(R.indexOf(Re),1,re):R.push(re),ce=!0}}catch(Re){Cr.error("Error trying to update attribute",re,R,S,Re)}}for(let re of R)if(!E.find(Te=>Te.name===re.name)){if(re.is_hash_attribute){Cr.error("Unable to remove existing primary key attribute",re);continue}re.indexed&&(R.splice(R.indexOf(re),1),ce=!0)}if(A)ce&&(A.schemaVersion++,A.updatedAttributes());else{A=kq(d,p,Zg({primaryStore:O,auditStore:u,audit:F,sealed:J,splitSegments:W,replicate:ue,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:ee,tableName:p,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let re of Op)re(A)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function Fq(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=hn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),gd&&!gd.has(e)){let r=new Set;t[cS]=r,gd.set(e,r)}return t}function kq(e,t,r){return e[t]=r,r}function td({database:e,table:t}){e||(e=dN),ct();let r=Fq(e),n=(0,Bt.join)((0,Yt.getHdbBasePath)(),Gc),s=(0,Yt.get)(B.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Yt.get)(B.STORAGE_PATH)||((0,us.existsSync)(n)?n:(0,Bt.join)((0,Yt.getHdbBasePath)(),r_));let a=(0,Bt.join)(n,(i?t:e)+".mdb"),c=Ko.get(a);if(!c||c.status==="closed"){let l=new lN.default(a,!1);c=(0,Sd.open)(l),Ko.set(a,c)}return c.auditStore||(c.auditStore=H_(c)),c}async function sw(e){if(!Me[e])throw new Error("Schema does not exist");let t=Me[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Ko.delete(r.path),r.status==="open"&&(await r.close(),await Lp.remove(r.path));if(r||(r=td({database:e,table:null}),r.status==="open"&&(await r.close(),await Lp.remove(r.path))),e==="data"){for(let n in hn)delete hn[n];delete hn[cS]}delete Me[e],Pp.forEach(n=>n(e)),await nb(r)}function Hq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&cN[r.indexed.type]?.useObjectStore,s=new Mp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=cN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Cr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=dN);let h=td({database:r,table:t}),E=Me[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,R;m==null&&(m=!0);let N=new Mp(!1);for(let W of a)W.attribute&&!W.name?(W.name=W.attribute,W.indexed=!0):W.attribute=W.name,W.expiresAt&&(W.indexed=!0);let O,F;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 W=h.auditStore;S=a.find(Re=>Re.isPrimaryKey)||{},A=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=lS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Yt.get)(B.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 ue=new Mp(!1,!0);ue.compression=S.compression;let ce=t+"/";if(R=h.dbisDb=h.openDB(nS.INTERNAL_DBIS_NAME,N),J(),R.get(ce))return F&&F(),Td(),Ze(e);let re=X_(h.openDB(ce,ue),h);h.databaseName=r,re.tableId=R.get(Ed),Cr.trace(`Assigning new table id ${re.tableId} for ${t}`),re.tableId||(re.tableId=1),R.put(Ed,re.tableId+1),S.tableId=re.tableId,g=kq(E,t,Zg({primaryStore:re,auditStore:W,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:A,tableName:t,tableId:re.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,O=!0,R.put(ce,S)}let ee=g.indices;R=R||(h.dbisDb=h.openDB(nS.INTERNAL_DBIS_NAME,N)),g.dbisDB=R;let q=[];for(let{key:W,value:ue}of R.getRange({start:!0})){let[ce,re]=W.toString().split("/");if(re===""&&(re=ue.name),re){if(ce!==t)continue}else continue;let Re=a.find(Fe=>Fe.name===re),Te=!Re?.indexed&&ue.indexed&&!ue.isPrimaryKey;if((!Re||Te)&&(J(),O=!0,Re||R.remove(W),Te)){let Fe=g.indices[ce];Fe&&q.push(Fe)}}let k=[];try{for(let W of a||[]){if((W.relationship||W.computed)&&(O=!0,W.relationship))continue;let ue=t+"/"+(W.name||"");Object.defineProperty(W,"key",{value:ue,configurable:!0});let ce=R.get(ue);if(W.isPrimaryKey){if(ce=ce||R.get(ue=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ce.expiration||void 0)||(+s||void 0)!==(+ce.eviction||void 0)||W.type!==ce.type){let Re={...ce};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),d!==void 0&&(Re.replicate=d),W.type&&(Re.type=W.type),O=!0,J(),R.put(ue,Re)}continue}ce?.attribute&&!ce.name&&(ce.indexed=!0);let re=!ce||ce.type!==W.type||JSON.stringify(ce.indexed)!==JSON.stringify(W.indexed)||ce.nullable!==W.nullable||ce.version!==W.version||JSON.stringify(ce.properties)!==JSON.stringify(W.properties)||JSON.stringify(ce.elements)!==JSON.stringify(W.elements);if(W.indexed){let Re=Hq(ue,h,W);(re||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,J(),ce=R.get(ue),(re||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,W.indexNulls===void 0&&(W.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(W.lastIndexedKey=ce?.lastIndexedKey??void 0,W.indexingPID=process.pid,Re.isIndexing=!0,Object.defineProperty(W,"dbi",{value:Re}),k.push(W))),R.put(ue,W)),ce?.indexNulls&&W.indexNulls===void 0&&(W.indexNulls=!0),Re.indexNulls=W.indexNulls,ee[W.name]=Re}else re&&(O=!0,J(),R.put(ue,W))}}finally{F&&F()}if(O&&(g.schemaVersion++,g.updatedAttributes()),Cr.trace(`${t} table loading, running index`),k.length>0||q.length>0?g.indexingOperation=qae(g,k,q):O&&sS.signalSchemaChange(new iS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,O)for(let W of Op)W(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Cr.trace(`${t} table loaded`),g;function J(){F||h.transactionSync(()=>({then(W){F=W}}))}o(J,"startTxn")}async function qae(e,t,r){try{Cr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await sS.signalSchemaChange(new iS.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,Sd.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,R=m&&(S?S(m):m[g]);if(A.customIndex){A.customIndex.index(f,R);continue}let N=(0,vq.getIndexedValues)(R);if(N)for(let O=0,F=N.length;O<F;O++)A.put(N[O],f)}catch(S){a[g]||(a[g]=!0,Cr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Cr.error(h)}),Dp.workerData&&Dp.workerData.restartNumber!==xq.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>kae?await s:d>Hae&&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 sS.signalSchemaChange(new iS.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 Gae({table:e,database:t}){let r=td({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 Nl(e){return Op.push(e),{remove(){let t=Op.indexOf(e);t>-1&&Op.splice(t,1)}}}function vp(e){return Pp.push(e),{remove(){let t=Pp.indexOf(e);t>-1&&Pp.splice(t,1)}}}function lS(){let e=(0,Yt.get)(B.STORAGE_COMPRESSION),t=(0,Yt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Yt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||Bq,n={startingOffset:32};return t&&(n.dictionary=Lp.readFileSync(t)),r&&(n.threshold=r),e&&n}var Yt,nS,Sd,Bt,us,_d,lN,Lp,uN,vq,sS,iS,Dp,Uq,xq,aS,Bae,Cr,dN,cS,Bq,hn,Me,Ed,Op,Pp,oS,Ko,gd,kae,Hae,Oe=ie(()=>{Yt=w(ae()),nS=w(Vt()),Sd=require("lmdb"),Bt=require("path"),us=require("fs"),_d=w(yt());ng();lN=w($m());H();Lp=w(require("fs-extra")),uN=w(oi()),vq=w(Cn()),sS=w(ko()),iS=w(ts()),Dp=require("worker_threads"),Uq=w(j()),xq=w(Je());Io();el();ws();Mq();aS=w(Gm()),{forComponent:Bae}=Uq.default;o(Mp,"OpenDBIObject");Cr=Bae("storage"),dN="data",cS=Symbol("defined-tables"),Bq=((0,Yt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Yt.initSync)();hn=Object.create(null),Me=Object.create(null);(0,uN._assignPackageExport)("databases",Me);(0,uN._assignPackageExport)("tables",hn);Ed=Symbol.for("next-table-id"),Op=[],Pp=[],Ko=new Map;o(Fae,"getTables");o(ct,"getDatabases");o(Td,"resetDatabases");o(Cp,"readMetaDb");o(Fq,"ensureDB");o(kq,"setTable");o(td,"database");o(sw,"dropDatabase");o(Hq,"openIndex");o(Ze,"table");kae=1e3,Hae=10;o(qae,"runIndexing");o(Gae,"dropTableMeta");o(Nl,"onUpdatedTable");o(vp,"onRemovedDB");o(lS,"getDefaultCompression")});var pN={};Ie(pN,{loadGQLSchema:()=>Kae,start:()=>mN,startOnMainThread:()=>Vae});function mN({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 F=function(q){if(q.kind==="NonNullType"){let W=F(q.type);return W.nullable=!1,W}if(q.kind==="ListType")return{type:"array",elements:F(q.type)};let J={type:q.name?.value};return Object.defineProperty(J,"location",{value:q.loc.startToken}),J};o(F,"getProperty");let S=A.name.value,R=[],N={table:null,database:null,properties:R};m.set(S,N),i.allTypes.set(S,N);for(let q of A.directives){if(q.name.value==="table"){for(let J of q.arguments)N[J.name.value]=J.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=S),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,p.push(N)}if(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="splitSegments"&&(N.splitSegments=!0),q.name.value==="replicate"&&(N.replicate=!0),q.name.value==="export"){N.export=!0;for(let J of q.arguments)typeof N.export!="object"&&(N.export={}),N.export[J.name.value]=J.value.value}}let O=!1,ee={};for(let q of A.fields){let k=F(q.type);k.name=q.name.value,R.push(k),ee[k.name]=void 0;for(let J of q.directives){let W=J.name.value;if(W==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",J.loc):(k.isPrimaryKey=!0,O=!0);else if(W==="indexed"){let ue={};for(let ce of J.arguments||[])ue[ce.name.value]=ce.value.value;k.indexed=ue}else if(W==="computed"){for(let ue of J.arguments||[])if(ue.name.value==="from"){let ce=ue.value.value;k.computed={from:g(ce,ue,ee)},k.version==null&&(k.version=ce)}else ue.name.value==="version"&&(k.version=ue.value.value);k.computed=k.computed||!0}else if(W==="relationship"){let ue={};for(let ce of J.arguments)ue[ce.name.value]=ce.value.value;k.relationship=ue}else if(W==="createdTime")k.assignCreatedTime=!0;else if(W==="updatedTime")k.assignUpdatedTime=!0;else if(W==="expiresAt")k.expiresAt=!0;else if(W==="allow"){let ue=k.authorizedRoles=[];for(let ce of J.arguments)ce.name.value==="role"&&ue.push(ce.value.value)}else server.knownGraphQLDirectives.includes(W)&&console.warn(`@${W} is an unknown directive, at`,J.loc)}}N.type=S,S==="Query"&&(h=N)}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):$ae.includes(A.type)||(0,Gq.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,fN.dirname)(n),A.tableClass):i.set((0,fN.dirname)(n)+"/"+(A.export.name||A.type),A.tableClass,A.export));function g(A,S,R){return new qq.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()(R)}o(g,"createComputedFrom")}}var fN,qq,Gq,$ae,Vae,Kae,$q=ie(()=>{fN=require("path"),qq=require("node:vm");Oe();Gq=w(Je());xa();$ae=["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(mN,"start");Vae=mN,Kae=o(e=>mN({ensureTable:Ze}).handleFile(e,null,null,new $u),"loadGQLSchema")});var EN={};Ie(EN,{start:()=>ece});function Yae(e){if(e.kind!==ke.Kind.OPERATION_DEFINITION&&e.kind!==ke.Kind.FRAGMENT_DEFINITION)throw new qr(`Unexpected non-executable definition type ${e.kind}.`)}function Vq(e){if(typeof e!="object"||e===null)throw new Zi("Request body must be an object.");if(!("query"in e))throw new Zi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Zi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Zi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Zi("Request body `operationName` field must be a string.")}function hN(e){return parseInt(e.value,10)}function Yq(e){return parseFloat(e.value)}function Wq(e,t,r){let n=r.get(e.name.value);return zq(n)?jq(n,t):{attribute:t,value:n}}function zq(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function jq(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],zq(n)?jq(n,t):{attribute:t,value:n}))}function Wae(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:hN(e.value)};case ke.Kind.FLOAT:return{attribute:t,value:Yq(e.value)};case ke.Kind.BOOLEAN:case ke.Kind.STRING:return{attribute:t,value:e.value.value};case ke.Kind.VARIABLE:return Wq(e.value,t,r);case ke.Kind.OBJECT:return Qq(e.value,t,r);case ke.Kind.LIST:case ke.Kind.ENUM:default:throw new qr(`Value type, ${e.value.kind}, is not supported.`)}}function Qq(e,t,r){return e.fields.flatMap(n=>Wae(n,t,r))}function zae(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:hN(e.value)};case ke.Kind.FLOAT:return{attribute:e.name.value,value:Yq(e.value)};case ke.Kind.BOOLEAN:case ke.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case ke.Kind.VARIABLE:return Wq(e.value,e.name.value,t);case ke.Kind.OBJECT:return Qq(e.value,[e.name.value],t);case ke.Kind.LIST:case ke.Kind.ENUM:default:throw new qr(`Argument type, ${e.value.kind}, is not supported.`)}}function jae(e,t){return e.flatMap(r=>zae(r,t))}function uS(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 qr(`Fragment \`${n}\` not found.`);return uS(s.selectionSet,t)}case ke.Kind.INLINE_FRAGMENT:return uS(r.selectionSet,t)}})}function Jq(e,t){return uS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:Jq(r.selectionSet,t)}:r.name.value)}async function Qae(e,t,r,n){let s=Ls.getMatch(e.name.value,"graphql");if(s===void 0)throw new qr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:Jq(e.selectionSet,r),conditions:jae(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 Xq(e){switch(e.kind){case ke.Kind.NULL:return null;case ke.Kind.INT:return hN(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]:Xq(r.value),...t}),{});case ke.Kind.LIST:case ke.Kind.ENUM:default:throw new qr(`Value type, ${e.kind}, is not supported.`)}}function Jae(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=Xq(n.defaultValue)),n.type.kind===ke.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new qr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Xae(e,t,r,n){if(e.operation===ke.OperationTypeNode.SUBSCRIPTION)throw new qr("Subscriptions are not supported.");if(e.operation===ke.OperationTypeNode.MUTATION)throw new qr("Mutations are not supported yet.");let s=Jae(e.variableDefinitions,t),i=await Promise.all(uS(e.selectionSet,r).map(c=>Qae(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function Kq({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(Yae(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 qr("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 qr(`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 qr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new qr(`Operation \`${r}\` not found.`);let l=await Xae(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Zae(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 Vq(r),Kq(r,e)}case"POST":{let r=await Oo(e.headers.get("content-type"),!0)(e._nodeRequest);return Vq(r),Kq(r,e)}default:throw new Zi("Method Not Allowed",405,{Allow:"GET, POST"})}}function ece(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Zae(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Zi)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 qr)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 Zi)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 qr)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,qr,Zi,Zq=ie(()=>{ke=w(require("graphql"));Po();xa();o(Yae,"assertExecutableDefinitionNode");o(Vq,"assertRequestParams");o(hN,"processIntValueNode");o(Yq,"processFloatValueNode");o(Wq,"processVariableNode");o(zq,"isObject");o(jq,"transformObjectIntoQueryCondition");o(Wae,"processObjectFieldNode");o(Qq,"processObjectValueNode");o(zae,"processArgumentNode");o(jae,"buildConditionsQuery");o(uS,"fillInFragments");o(Jq,"buildSelectQuery");o(Qae,"processFieldNode");o(Xq,"processConstValueNode");o(Jae,"resolveVariables");o(Xae,"executeOperation");o(Kq,"resolver");qr=class extends Error{static{o(this,"GraphQLQueryingError")}},Zi=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Zae,"graphqlQueryingHandler");o(ece,"start")});var iG=D((CUe,sG)=>{var yd=require("validate.js"),tG=at(),Rd=(H(),M(Y)),{handleHDBError:tce,hdbErrors:rce}=_e(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:nce}=rce,_N=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),sce={STRUCTURE_USER:"structure_user"},eG=Object.values(Rd.ROLE_TYPES_ENUM),ice="attribute_permissions",oce="attribute_name",{PERMS_CRUD_ENUM:Ad}=Rd,ace=[ice,...Object.values(Ad)],rG=[Ad.READ,Ad.INSERT,Ad.UPDATE],cce=[oce,...rG];function lce(e){let t=_N();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,nG(e,t)}o(lce,"addRoleValidation");function uce(e){let t=_N();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,nG(e,t)}o(uce,"alterRoleValidation");function dce(e){let t=_N();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,tG.validateObject(e,t)}o(dce,"dropRoleValidation");var fce=["operation","role","id","permission","hdb_user","access"];function nG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)fce.includes(n[a])||s.push(n[a]);s.length>0&&mr(sr.INVALID_ROLE_JSON_KEYS(s),r);let i=tG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{mr(a,r)}),e.permission){let a=mce(e);a&&mr(a,r),eG.forEach(c=>{e.permission[c]&&!yd.isBoolean(e.permission[c])&&mr(sr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(eG.indexOf(a)<0){if(a===sce.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=>{ace.includes(d)||mr(sr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(Ad).forEach(d=>{yd.isDefined(u[d])?yd.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=>{!cce.includes(E)&&E!==Ad.DELETE&&mr(sr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!yd.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}rG.forEach(E=>{yd.isDefined(p[E])?yd.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 pce(r)}o(nG,"customValidate");sG.exports={addRoleValidation:lce,alterRoleValidation:uce,dropRoleValidation:dce};function mce(e){let{operation:t,permission:r}=e;if(t===Rd.OPERATIONS_ENUM.ADD_ROLE||t===Rd.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?Rd.ROLE_TYPES_ENUM.SUPER_USER:Rd.ROLE_TYPES_ENUM.CLUSTER_USER;return sr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(mce,"validateNoSUPerms");function pce(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 tce(new Error,n,nce.BAD_REQUEST)}else return null}o(pce,"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 xp=D((LUe,lG)=>{"use strict";var oG=ln(),aG=dn(),hce=Va(),SN=iG(),TN=ko(),PUe=require("uuid").v4,Ece=require("util"),dS=(H(),M(Y)),_ce=oe(),yN=aG.searchByValue,gce=aG.searchByHash,Sce=Ece.promisify(hce.delete),Tce=di(),yce=Ju(),{hdbErrors:Rce,handleHDBError:Cl}=_e(),{HDB_ERROR_MSGS:cG,HTTP_STATUS_CODES:Up}=Rce,{UserEventMsg:RN}=ts();lG.exports={addRole:Ace,alterRole:bce,dropRole:Ice,listRoles:wce};function gN(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(gN,"scrubRoleDetails");async function Ace(e){let t=SN.addRoleValidation(e);if(t)throw t;e=gN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await yN(r)||[])}catch(i){throw Cl(i)}if(n&&n.length>0)throw Cl(new Error,cG.ROLE_ALREADY_EXISTS(e.role),Up.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 oG.insert(s),TN.signalUserChange(new RN(process.pid)),e=gN(e),e}o(Ace,"addRole");async function bce(e){let t=SN.alterRoleValidation(e);if(t)throw t;e=gN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await oG.update(r)}catch(s){throw Cl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Cl(new Error,"Invalid role id",Up.BAD_REQUEST,void 0,void 0,!0);return await TN.signalUserChange(new RN(process.pid)),e}o(bce,"alterRole");async function Ice(e){let t=SN.dropRoleValidation(e);if(t)throw Cl(new Error,t,Up.BAD_REQUEST,void 0,void 0,!0);let r=new yce(dS.SYSTEM_SCHEMA_NAME,dS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await gce(r));if(n.length===0)throw Cl(new Error,cG.ROLE_NOT_FOUND,Up.NOT_FOUND,void 0,void 0,!0);let s=new Tce(dS.SYSTEM_SCHEMA_NAME,dS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await yN(s)),a=!1;if(_ce.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Cl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Up.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Sce(c),TN.signalUserChange(new RN(process.pid)),`${n[0].role} successfully deleted`}o(Ice,"dropRole");async function wce(){return yN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(wce,"listRoles")});var AN={};Ie(AN,{start:()=>fG,startOnMainThread:()=>Oce});function fG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,uG.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(Nce.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 Cce(i)}}}async function Cce(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,dG.isEqual)(i,e)?void 0:(e.id=r.id,(0,fS.alterRole)(e))}return(0,fS.addRole)(e)}var fS,uG,dG,Nce,Oce,mG=ie(()=>{Oe();fS=w(xp()),uG=require("yaml"),dG=require("lodash"),Nce=["super_user","cluster_user","structure_user"];o(fG,"start");o(Cce,"ensureRole");Oce=fG});async function mS(e){let t=(0,EG.pathToFileURL)(e).toString();if(Pce)return Bp||(Bp=Lce(Mce)),(await(await Bp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Lce(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Bp=new Compartment({console,Math,Date,fetch:Dce,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,hG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Fr,s.tables=hn,s.databases=Me}};let n=await(0,pG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Bp}function Dce(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 Mce(){return{Resource:Fr,tables:hn}}var pG,hG,EG,Pce,Bp,bN=ie(()=>{Ua();Oe();pG=require("fs/promises"),hG=require("path"),EG=require("url"),Pce=!1;o(mS,"secureImport");o(Lce,"getCompartment");o(Dce,"secureOnlyFetch");o(Mce,"getGlobalVars")});var IN={};Ie(IN,{handleApplication:()=>vce,suppressHandleApplicationWarning:()=>Uce});function _G(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function vce(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}mS(t.absolutePath).then(r=>{let n=(0,pS.dirname)(t.urlPath);_G(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),gG(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function gG(e,t,r){for(let n in t){let s=t[n],i=(0,pS.join)(r,n);_G(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&gG(e,s,i)}}var pS,Uce,SG=ie(()=>{bN();pS=require("path");o(_G,"isResource");o(vce,"handleApplication");o(gG,"recurseForResources");Uce=!0});var NN={};Ie(NN,{start:()=>xce});function xce({resources:e}){e.set("login",wN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var wN,TG=ie(()=>{Ua();o(xce,"start");wN=class extends Fr{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 wG(e){let t={openapi:Bce,info:{title:"HarperDB HTTP REST interface",version:bG.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)hS[c.type]?i[c.name]=new ON(hS[c.type],c.type):c.properties?(i[c.name]=new NG(c.type),n(c)):c.elements?.properties&&(i[c.name]=new $ce(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new AG(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 ee=e.allTypes.get(s.path);l=ee.sealed,c=ee.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:ee,name:q,elements:k,relationship:J,definition:W,nullable:ue}of c){let ce=W??k?.definition;ce&&n(ce),ue===!1&&p.push(q),J?ee==="array"?f[q]={type:"array",items:{$ref:Fs+k.type}}:f[q]={$ref:Fs+ee}:ce?ee==="array"?f[q]={type:"array",items:{$ref:Fs+ce.type}}:f[q]={$ref:Fs+ce.type}:ee==="array"?k.type==="Any"?f[q]={type:"array",items:{format:k.type}}:f[q]={type:"array",items:new ON(hS[k.type],k.type)}:ee==="Any"?f[q]={format:ee}:f[q]=new ON(hS[ee],ee),m.push(new PN(q,"query",f[q]))}let h=Object.keys(f),E=new PN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new PN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new AG(f,!l,p);let A=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",R=typeof u.get=="function",N=typeof u.delete=="function",O=typeof u.patch=="function",F="/"+i+"/";A&&(t.paths[F]={},t.paths[F].post=new Fce(a,r,{200:new bd({$ref:Fs+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),R&&(t.paths[F]||(t.paths[F]={}),t.paths[F].get=new CN(m,r,{200:new bd({type:"array",items:{$ref:Fs+a}})},"search for records by the specified property name and value pairs")),t.paths[F]||(t.paths[F]={}),t.paths[F].options=new kce(m,r,{200:new Hce},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(t.paths[F]||(t.paths[F]={}),t.paths[F].delete=new RG(m,r,"delete all the records that match the provided query",{204:new yG})),F="/"+i+"/{"+d+"}",R&&(t.paths[F]={},t.paths[F].get=new CN([E],r,{200:new bd({$ref:Fs+a})},"retrieve a record by its primary key")),S&&(t.paths[F]||(t.paths[F]={}),t.paths[F].put=new qce([E],r,a,{200:new bd({$ref:Fs+a})},"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[F]||(t.paths[F]={}),t.paths[F].patch=new Gce([E],r,a,{200:new bd({$ref:Fs+a})},"patch the record with the URL path that maps to the record's primary key")),N&&(t.paths[F]||(t.paths[F]={}),t.paths[F].delete=new RG([E],r,"delete a record with the given primary key",{204:new yG})),R&&g.schema.enum.length>0&&(F="/"+i+"/{"+d+"}.{property}",t.paths[F]={},t.paths[F].get=new CN([E,g],r,{200:new bd({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 Fce(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Fs+e}}}},this.security=t,this.responses=r}function CN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function kce(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Hce(){this.description=IG,this.headers={},this.content={}}function bd(e,t){this.description=IG,this.content={"application/json":{schema:e}},this.headers=t}function yG(){this.description="successfully processed request, no content returned to client"}function qce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Fs+r}}}},this.responses=n}function Gce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Fs+r}}}},this.responses=n}function RG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function AG(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function ON(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function NG(e){this.$ref=`#/components/schemas/${e}`}function $ce(e){this.type="array",this.items=new NG(e)}function PN(e,t,r){this.name=e,this.in=t,this.schema=r}var bG,Bce,hS,Fs,IG,CG=ie(()=>{bG=w(It()),Bce="3.0.3",hS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Fs="#/components/schemas/",IG="successful operation";o(wG,"generateJsonApi");o(Fce,"Post");o(CN,"Get");o(kce,"Options");o(Hce,"ResponseOptions200");o(bd,"Response200");o(yG,"Response204");o(qce,"Put");o(Gce,"Patch");o(RG,"Delete");o(AG,"ResourceSchema");o(ON,"Type");o(NG,"Ref");o($ce,"ArrayRef");o(PN,"Parameter")});var PG={};Ie(PG,{Request:()=>Xa,createReuseportFd:()=>ES});var OG,Xa,LN,DN,ES,Fp=ie(()=>{OG=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 DN(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 LN(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)}},LN=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)}},DN=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,OG.platform)()!="win32"&&(ES=require("node-unix-socket").createReuseportFd)});var gS={};Ie(gS,{parseHeaderValue:()=>vN,start:()=>Yce});async function Kce(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&tg(e);let i=new Us;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==LG){let g=_S.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ci(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let A=vN(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=vN(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 Rt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Oo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Id.ClientError(g,400)}if(e.authorize=!0,a===LG&&s==="GET"){if(e?.user?.role?.permission?.super_user)return wG(_S);throw new Id.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 Id.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Id.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,MN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=pq(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=ym(f.data,e,f)),f}else if(isFinite(p)){Vce[0]=p;let g=String.fromCharCode(34,(Jr[0]&63)+62,(Jr[0]>>6)+(Jr[1]<<2&63)+62,(Jr[1]>>4)+(Jr[2]<<4&63)+62,(Jr[2]>>2)+62,(Jr[3]&63)+62,(Jr[3]>>6)+(Jr[4]<<2&63)+62,(Jr[4]>>4)+(Jr[5]<<4&63)+62,(Jr[5]>>2)+62,(Jr[6]&63)+62,(Jr[6]>>6)+(Jr[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),MN.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=ym(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?_i.warn(a):_i.info(a):_i.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=ym(a.contentType?a:vG(a),e,c),c}}function Yce(e){MN=e,e.includeExpensiveRecordCountEstimates&&(Xa.prototype.includeExpensiveRecordCountEstimates=!0),!DG&&(DG=!0,_S=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Kce(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{kp++;let s=new Qn;MG||(MG=!0,Bm(l=>{kp>0&&l.push({metric:"ws-connections",connections:kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,_i.warn(l)});let a;t.on("message",o(function(u){a||(a=Oo(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--,zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=_S.getMatch(l,"ws");if(zr(!!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 ci(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await Rt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Co(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?_i.warn(l):_i.info(l):_i.error(l),t.close(Wce[l.statusCode]||1011,vG(l))}t.close()},e))}function vN(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 _i,Id,vG,Jr,Vce,MN,LG,DG,_S,MG,kp,Wce,UG=ie(()=>{Po();Os();_i=w(j()),Id=w(_e());rg();Nu();Ca();bp();CG();Fp();sg();({errorToString:vG}=_i),Jr=new Uint8Array(8),Vce=new Float64Array(Jr.buffer,0,1),MN={},LG="openapi";o(Kce,"http");kp=0;o(Yce,"start");Wce={401:3e3,403:3003};o(vN,"parseHeaderValue")});var UN=D((nxe,BG)=>{var{recordAction:SS,recordActionBinary:xG}=(Os(),M(W_)),zce=require("fastify-plugin"),jce=200;BG.exports=zce(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),SS(a,"duration",u,f,d),xG(s.raw.statusCode<400,"success",u,f,d),xG(1,"response_"+s.raw.statusCode,u,f,d);let m=jce;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{SS(performance.now()-c,"transfer",u,f,d),SS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,SS(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 kG=D((sxe,FG)=>{var Qce=at(),Jce={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};FG.exports=function(e){return Qce.validateObject(e,Jce)}});var Hp=D((ixe,HG)=>{"use strict";var Xce=(H(),M(Y)).OPERATIONS_ENUM,xN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Xce.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};HG.exports=xN});var $p={};Ie($p,{createTokens:()=>kN,getJWTRSAKeys:()=>bS,refreshOperationToken:()=>HN,validateOperationToken:()=>qN,validateRefreshToken:()=>IS});async function bS(){if(TS)return TS;try{let e=qp.default.join(Gp.default.getHdbBasePath(),RA),t=await yS.default.readFile(qp.default.join(e,sm.JWT_PASSPHRASE_NAME),"utf8"),r=await yS.default.readFile(qp.default.join(e,sm.JWT_PRIVATE_KEY_NAME),"utf8");return TS={publicKey:await yS.default.readFile(qp.default.join(e,sm.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},TS}catch(e){throw AS.default.error(e),new gi.ClientError(Nd.NO_ENCRYPTION_KEYS,wd.INTERNAL_SERVER_ERROR)}}async function kN(e){let t=(0,BN.validateBySchema)(e,eo.default.object({username:eo.default.string().optional(),password:eo.default.string().optional(),role:eo.default.string().optional(),expires_in:eo.default.alternatives(eo.default.string(),eo.default.number()).optional()}));if(t)throw new gi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,FN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw AS.default.error(f),new gi.ClientError(Nd.INVALID_CREDENTIALS,wd.UNAUTHORIZED)}if(!r)throw new gi.ClientError(Nd.INVALID_CREDENTIALS,wd.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 bS(),c=await Cd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??KG,algorithm:RS,subject:Od.OPERATION}),l=await Cd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Zce,algorithm:RS,subject:Od.REFRESH}),u=Ew(l,kr.SHA256);if((await(0,qG.update)(new GG.default(rm,bu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new gi.ClientError(Nd.REFRESH_TOKEN_SAVE_FAILED,wd.INTERNAL_SERVER_ERROR);return $G.default.signalUserChange(new VG.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function HN(e){let t=(0,BN.validateBySchema)(e,eo.default.object({refresh_token:eo.default.string().required()}).required());if(t)throw new gi.ClientError(t.message);let{refresh_token:r}=e;await IS(r);let n=await bS(),s=await Cd.default.decode(r);return{operation_token:await Cd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:KG,algorithm:RS,subject:Od.OPERATION})}}async function qN(e){return YG(e,Od.OPERATION)}async function IS(e){return YG(e,Od.REFRESH)}async function YG(e,t){try{let r=await bS(),n=await Cd.default.verify(e,r.publicKey,{algorithms:RS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,FN.findAndValidateUser)(n.username,void 0,!1);if(t===Od.REFRESH&&!_w(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw AS.default.warn(r),r?.name==="TokenExpiredError"?new gi.ClientError(Nd.TOKEN_EXPIRED,wd.FORBIDDEN):new gi.ClientError(Nd.INVALID_TOKEN,wd.UNAUTHORIZED)}}var Cd,yS,qp,eo,BN,gi,AS,FN,qG,GG,$G,VG,Gp,wd,Nd,KG,Zce,RS,Od,TS,Pd=ie(()=>{Cd=w(require("jsonwebtoken")),yS=w(require("fs-extra")),qp=w(require("node:path")),eo=w(require("joi")),BN=w(at());H();gi=w(_e()),AS=w(j());Sw();FN=w(cs()),qG=w(ln()),GG=w(Hp()),$G=w(ko()),VG=w(ts()),Gp=w(ae()),{HTTP_STATUS_CODES:wd,AUTHENTICATION_ERROR_MSGS:Nd}=gi.hdbErrors;Gp.default.initSync();KG=Gp.default.get(B.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Zce=Gp.default.get(B.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",RS="RS256",Od={OPERATION:"operation",REFRESH:"refresh"};o(bS,"getJWTRSAKeys");o(kN,"createTokens");o(HN,"refreshOperationToken");o(qN,"validateOperationToken");o(IS,"validateRefreshToken");o(YG,"validateToken")});var GN=D((uxe,jG)=>{"use strict";var ele=kG(),Ld=require("passport"),tle=require("passport-local").Strategy,rle=require("passport-http").BasicStrategy,nle=require("util"),sle=cs(),zG=nle.callbackify(sle.findAndValidateUser),lxe=Kr(),ile=(H(),M(Y)),WG=(Pd(),M($p));Ld.use(new tle(function(e,t,r){zG(e,t,r)}));Ld.use(new rle(function(e,t,r){zG(e,t,r)}));Ld.serializeUser(function(e,t){t(null,e)});Ld.deserializeUser(function(e,t){t(null,e)});function ole(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":Ld.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===ile.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?WG.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):WG.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Ld.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(ole,"authorize");function ale(e,t){let r=ele(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(ale,"checkPermissions");jG.exports={authorize:ole,checkPermissions:ale}});var wS=D((fxe,QG)=>{"use strict";var cle=ss();QG.exports={writeTransaction:lle};function lle(e,t,r){return cle.writeTransaction(e,t,r)}o(lle,"writeTransaction")});var e$=D((hxe,ZG)=>{"use strict";var ule=dn(),dle=mi(),JG=j(),fle=ln(),pxe=wS(),mle=require("clone"),VN=require("alasql"),ple=Ug(),XG=require("util"),hle=XG.promisify(dle.getTableSchema),Ele=XG.promisify(ule.search),_le=(H(),M(Y)),$N=oe();ple(VN);ZG.exports={update:Sle};var gle="There was a problem performing this update. Please check the logs and try again.";async function Sle({statement:e,hdb_user:t}){let r=await hle(e.table.databaseid,e.table.tableid),n=Tle(e.columns);$N.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=mle(s),c=$N.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=VN.parse(l).statements[0],d=await Ele(u),f=yle(n,d);return Rle(a,f,t)}o(Sle,"update");function Tle(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=VN.compile(`SELECT ${r.expression.toString()} AS [${_le.FUNC_VAL}] FROM ?`)}),t}catch(t){throw JG.error(t),new Error(gle)}}o(Tle,"createUpdateRecord");function yle(e,t){return $N.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(yle,"buildUpdateRecords");async function Rle(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await fle.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){JG.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Rle,"updateRecords")});var r$=D((Sxe,t$)=>{var Ale=require("alasql"),ble=dn(),Ile=j(),wle=ss(),YN=require("util"),KN=oe(),Nle=(H(),M(Y)),Cle=mi(),_xe=wS(),gxe=ln(),Ole="record",Ple="successfully deleted",Lle=YN.callbackify(Ule),Dle=YN.promisify(ble.search),Mle=YN.promisify(Cle.getTableSchema);t$.exports={convertDelete:Lle};function vle(e){return`${e.deleted_hashes.length} ${Ole}${e.deleted_hashes.length===1?"":"s"} ${Ple}`}o(vle,"generateReturnMessage");async function Ule({statement:e,hdb_user:t}){let r=await Mle(e.table.databaseid,e.table.tableid);KN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=KN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Ale.parse(a).statements[0],l={operation:Nle.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Dle(c);let u=await wle.deleteRecords(l);return KN.isEmptyOrZeroLength(u.message)&&(u.message=vle(u)),delete u.txn_time,u}catch(u){throw Ile.error(u),u.hdb_code?u.message:u}}o(Ule,"convertDelete")});var Za=D((Rxe,o$)=>{"use strict";var yxe=dn(),Vp=j(),{validateBySchema:n$}=at(),Ol=require("joi"),xle=zi(),NS=oe(),{handleHDBError:CS,hdbErrors:Ble,ClientError:s$}=_e(),{HDB_ERROR_MSGS:OS,HTTP_STATUS_CODES:WN}=Ble,i$=ae();i$.initSync();var{getDatabases:zN}=(Oe(),M(mt)),Fle=require("fs-extra"),kle=(H(),M(Y));o$.exports={describeAll:Hle,describeTable:PS,describeSchema:qle};async function Hle(e={}){try{let t=NS.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=zN(),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 PS({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 PS({schema:f,table:p,exactCount:u},E)}h&&l.push(h)}catch(h){Vp.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 Vp.error("Got an error in describeAll"),Vp.error(t),CS(new Error,OS.DESCRIBE_ALL_ERR)}}o(Hle,"describeAll");async function PS(e,t){NS.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=n$(e,Ol.object({database:Ol.string(),table:Ol.string().required(),exact_count:Ol.boolean().strict()}));if(i)throw new s$(i.message);let c=zN()[r];if(!c)throw CS(new Error,OS.SCHEMA_NOT_FOUND(e.schema),WN.NOT_FOUND);let l=c[n];if(!l)throw CS(new Error,OS.TABLE_NOT_FOUND(e.schema,e.table),WN.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 Fle.stat(l.primaryStore.env.path)).size}catch(p){Vp.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")),i$.get(kle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=xle.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){Vp.warn(`unable to stat table dbi due to ${p}`)}return m}o(PS,"descTable");async function qle(e){NS.transformReq(e);let t=n$(e,Ol.object({database:Ol.string(),exact_count:Ol.boolean().strict()}));if(t)throw new s$(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=zN()[n];if(!i)throw CS(new Error,OS.SCHEMA_NOT_FOUND(e.schema),WN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),NS.isEmpty(l)||l.describe){let u=await PS({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(qle,"describeSchema")});var d$=D((bxe,u$)=>{"use strict";var Gle=Za(),{hdbErrors:a$}=_e(),{getDatabases:c$}=(Oe(),M(mt));u$.exports={checkSchemaExists:l$,checkSchemaTableExists:$le,schemaDescribe:Gle};async function l$(e){if(!c$()[e])return a$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(l$,"checkSchemaExists");async function $le(e,t){let r=await l$(e);if(r)return r;if(!c$()[e][t])return a$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o($le,"checkSchemaTableExists")});var ZN=D((Oxe,A$)=>{"use strict";var{decode:Vle}=require("msgpackr"),{isMainThread:wxe,parentPort:Nxe,threadId:Cxe}=require("worker_threads"),MS=Ft(),Dd=pt(),JN=(H(),M(Y)),En=j(),QN=ae(),Kle=(H(),M(Y)),{onMessageByType:Yle}=Je(),h$=zi(),{recordAction:f$,recordActionBinary:Wle}=(Os(),M(W_)),{publishToStream:zle}=MS,{ConsumerEvents:m$}=require("nats"),jle=dn(),{promisify:Qle}=require("util"),{decodeBlobsWithWrites:Jle}=(ws(),M(sb)),E$=Qle(setTimeout),vS=1e4,US,DS,Xle,Zle,_$,Kp=new Map,Md=new Map;A$.exports={initialize:g$,ingestConsumer:XN,setSubscription:eue,setIgnoreOrigin:nue,getDatabaseSubscriptions:rue,updateConsumer:S$};async function g$(){Yle(JN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await S$(n)}),_$=!0,En.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await MS.getNATSReferences();US=e,DS=e.info.server_name,Xle=t,Zle=r}o(g$,"initialize");async function S$(e){if(e.status==="start"){let{js:t,jsm:r}=await T$(e.node_domain_name);XN(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Kp.get(e.stream_name+e.node_domain_name);t&&(En.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Kp.set(e.stream_name+e.node_domain_name,"close")),Md.get(e.node_domain_name)==="failed"&&Md.set(e.node_domain_name,"close")}}o(S$,"updateConsumer");var xS=new Map;function eue(e,t,r){let n=xS.get(e);n||xS.set(e,n=new Map),n.set(t,r),_$||g$().then(tue)}o(eue,"setSubscription");async function tue(){let e=await jle.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Dd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await T$(r),!n))break;let{schema:a,table:c}=i,l=h$.createNatsTableStreamName(a,c);XN(l,n,s,r)}}}o(tue,"accessConsumers");async function T$(e){let t,r,n=1;for(;!r;)try{t=await US.jetstream({domain:e}),r=await US.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Md.get(e)==="close")break;Md.set(e,"failed"),n%10===1&&En.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<vS?n++*100:vS;await E$(i)}return{js:t,jsm:r}}o(T$,"connectToRemoteJS");function rue(){return xS}o(rue,"getDatabaseSubscriptions");var y$;function nue(e){y$=e}o(nue,"setIgnoreOrigin");var R$=100,p$=new Array(R$),LS=0;async function XN(e,t,r,n){let{connection:s}=await MS.getNATSReferences();US=s,DS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,DS),En.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Md.get(n)==="close")break;a%10===1&&En.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(En.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await MS.createConsumer(r,e,DS,new Date(Date.now()).toISOString()));let d=a++*100<vS?a++*100:vS;await E$(d)}let c=!1,l;for(;!c;){if(Kp.get(e+n)==="close"||Md.get(n)==="close"){Kp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:QN.get(JN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Kp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===m$.ConsumerDeleted&&(await l.close(),c=!0),d.type===m$.HeartbeatsMissed){let f=d.data;En.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(En.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 p$[LS],p$[LS]=sue(d).catch(f=>{En.error(f)}),++LS>=R$&&(LS=0)}catch(d){d.message==="consumer deleted"?(En.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):En.error("Error consuming clustering ingest, restarting consumer",d)}}}o(XN,"ingestConsumer");async function sue(e){let t;await Jle(()=>{t=Vle(e.data)}),f$(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),En.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=QN.get(JN.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Dd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Dd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Dd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!y$),Wle(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Dd.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;En.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),En.trace(`messageProcessor nats msg id: ${e.headers.get(Dd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(O=>h=O),{timestamp:g,user:A,node_name:S}=m||{},R=xS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,R.send(t);else if(d.length===1&&!l)R.send({type:jN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:A,nodeName:S});else{let O=d.map((F,ee)=>({type:jN(a),value:F,expiresAt:p,id:f?.[ee],table:u}));for(;l;)O.push({type:jN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:h,user:A,nodeName:S})}QN.get(Kle.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&zle(e.subject.split(".").slice(0,-1).join("."),h$.createNatsTableStreamName(c,u),e.headers,e.data),await E;let N=Date.now()-g;g&&f$(N,"replication-latency",e.subject,a,"ingest")}catch(a){En.error(a)}e.ack()}o(sue,"messageProcessor");function jN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(jN,"convertOperation")});var Ft=D((xxe,H$)=>{"use strict";var Gr=ae();Gr.initSync();var iue=require("fs-extra"),oue=require("semver"),zp=require("path"),{monotonicFactory:aue}=require("ulidx"),I$=aue(),cue=require("util"),w$=require("child_process"),lue=cue.promisify(w$.exec),uue=w$.spawn,Xr=pt(),et=(H(),M(Y)),{packageJson:due,PACKAGE_ROOT:fue}=It(),BS=oe(),Si=j(),FS=zi(),mue=wS(),Yp=At(),{broadcast:pue,onMessageByType:hue,getWorkerIndex:Eue}=Je(),{isMainThread:N$}=require("worker_threads"),{Encoder:_ue,decode:nC}=require("msgpackr"),C$=new _ue,{isEmpty:Ml}=BS,O$=cs(),Lxe=48*36e11;N$&&hue(et.ITC_EVENT_TYPES.RESTART,()=>{_n=void 0,Dl=void 0});var{connect:gue,StorageType:Sue,RetentionPolicy:Tue,AckPolicy:sC,DeliverPolicy:iC,DiscardPolicy:yue,NatsConnection:Dxe,JetStreamManager:Mxe,JetStreamClient:vxe,StringCodec:Uxe,JSONCodec:Rue,createInbox:oC,headers:Aue,ErrorCode:b$}=require("nats"),{recordAction:bue}=(Os(),M(W_)),{encodeBlobsAsBuffers:Iue}=(ws(),M(sb)),P$=Rue(),wue="clustering",Nue=due.engines[Xr.NATS_SERVER_NAME],Cue=zp.join(fue,"dependencies"),rC=zp.join(Cue,`${process.platform}-${process.arch}`,Xr.NATS_BINARY_NAME),eC,tC,Wp,Pl,Ll;H$.exports={runCommand:L$,checkNATSServerInstalled:Oue,createConnection:aC,getConnection:jp,getJetStreamManager:Qp,getJetStream:M$,getNATSReferences:to,getServerList:Lue,createLocalStream:cC,listStreams:v$,deleteLocalStream:Due,getServerConfig:vd,listRemoteStreams:Mue,viewStream:vue,viewStreamIterator:Uue,publishToStream:xue,request:kue,reloadNATS:lC,reloadNATSHub:Hue,reloadNATSLeaf:que,extractServerName:Fue,requestErrorHandler:Gue,createLocalTableStream:F$,createTableStreams:Kue,purgeTableStream:k$,purgeSchemaTableStreams:Yue,getStreamInfo:Wue,updateLocalStreams:jue,closeConnection:Pue,getJsmServerName:kS,addNatsMsgHeader:U$,clearClientCache:D$,updateRemoteConsumer:$ue,createConsumer:x$,updateConsumerIterator:Vue};async function L$(e,t=void 0){let{stdout:r,stderr:n}=await lue(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
14
|
+
`)},Hie="certificate.pem",qie="privateKey.pem",Gie="caCertificate.pem",$ie="natsCertificate.pem",Vie="natsCaCertificate.pem",wt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},Kie={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"]},Yie={[wt.SERVER]:2,[wt.DEFAULT]:1},Wie={[wt["OPERATIONS-API"]]:3,[wt.SERVER]:2,[wt.DEFAULT]:1},zie={[wt["OPERATIONS-API"]]:3,[wt.SERVER]:2,[wt.DEFAULT]:1},jie={[wt["OPERATIONS-CA"]]:3,[wt.CA]:2,[wt["DEFAULT-CA"]]:1},Qie={[wt["OPERATIONS-CA"]]:3,[wt.CA]:2,[wt["DEFAULT-CA"]]:1},Jie={[wt.CA]:2,[wt["DEFAULT-CA"]]:1};fn.CERTIFICATE_PEM_NAME=Hie;fn.PRIVATEKEY_PEM_NAME=qie;fn.CA_PEM_NAME=Gie;fn.CERT_NAME=wt;fn.CERT_CONFIG_NAME_MAP=Kie;fn.CERT_PREFERENCE_APP=Yie;fn.CERT_PREFERENCE_OPS=Wie;fn.CERT_PREFERENCE_REP=zie;fn.CA_CERT_PREFERENCE_REP=jie;fn.CA_CERT_PREFERENCE_OPS=Qie;fn.CA_CERT_PREFERENCE_APP=Jie;fn.CERTIFICATE_VALUES=kie;fn.NATS_CERTIFICATE_PEM_NAME=$ie;fn.NATS_CA_PEM_NAME=Vie});var vw=M((QMe,LH)=>{"use strict";var OH=require("fs-extra"),ge=require("joi"),Xie=require("os"),{boolean:Ke,string:gt,number:ur,array:Ka}=ge.types(),{totalmem:wH}=require("os"),Sl=require("path"),Zie=j(),Mw=oe(),jMe=Dw(),NH=(H(),D(Y)),eoe=at(),CH="log",toe="components",roe="Invalid logging.rotation.maxSize unit. Available units are G, M or K",noe="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",soe="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",ioe="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",ooe="rootPath config parameter is undefined",kn=ge.alternatives([ur.min(0),gt]).optional().empty(null),Bg=ge.alternatives([Ka.items(gt,{host:gt.required(),port:kn},{hostname:gt.required(),port:kn}).empty(null),Ka.items(gt)]),ji,PH=!1;LH.exports={configValidator:aoe,routesValidator:moe,routeConstraints:Bg};function aoe(e,t=!1){if(PH=t,ji=e.rootPath,Mw.isEmpty(ji))throw ooe;let r=Ke.optional(),n=ur.min(0).max(1e3).empty(null).default(foe),s=gt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(mp),i=gt.optional().empty(null),a=gt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ge.string().empty(null).default(mp),l=ge.custom(loe).empty(null).default(mp),u=e.clustering?.enabled,d=ge.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=ge.object({enabled:r,hubServer:ge.object({cluster:ge.object({name:ge.required().empty(null),network:ge.object({port:kn,routes:Bg}).required()}).required(),leafNodes:ge.object({network:ge.object({port:kn}).required()}).required(),network:ge.object({port:kn}).required()}).required(),leafServer:ge.object({network:ge.object({port:kn,routes:Bg}).required(),streams:ge.object({maxAge:ur.min(120).allow(null).optional(),maxBytes:ur.min(1).allow(null).optional(),maxMsgs:ur.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ge.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ke.optional(),databaseLevel:Ke.optional(),tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.required(),verify:Ke.optional()}),user:gt.optional().empty(null)}).optional():f=ge.object({enabled:r,tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.optional()})}).optional(),ge.object({authentication:ge.alternatives(ge.object({authorizeLocal:Ke,cacheTTL:ur.required(),cookie:ge.object({domains:Ka.items(gt).optional(),expires:gt.optional()}),enableSessions:Ke,hashFunction:gt.valid("md5","sha256","argon2id").optional().empty(null)}),Ke).optional(),analytics:ge.object({aggregatePeriod:ur,replicate:Ke.optional()}),replication:ge.object({hostname:ge.alternatives(gt,ur).optional().empty(null),url:gt.optional().empty(null),port:kn,securePort:kn,routes:Ka.optional().empty(null),databases:ge.alternatives(gt,Ka),enableRootCAs:Ke.optional(),copyTablesToCatchUp:Ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:ge.object({enabled:r}).required(),logging:ge.object({auditAuthEvents:ge.object({logFailed:Ke,logSuccessful:Ke}),file:Ke.required(),level:ge.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ge.object({enabled:Ke.optional(),compress:Ke.optional(),interval:gt.custom(doe).optional().empty(null),maxSize:gt.custom(uoe).optional().empty(null),path:gt.optional().empty(null).default(mp)}).required(),root:s,stdStreams:Ke.required(),auditLog:Ke.required()}).required(),operationsApi:ge.object({network:ge.object({cors:Ke.optional(),corsAccessList:Ka.optional(),headersTimeout:ur.min(1).optional(),keepAliveTimeout:ur.min(1).optional(),port:kn,domainSocket:ge.optional().empty("hdb/operations-server").default(mp),securePort:kn,timeout:ur.min(1).optional()}).optional(),tls:ge.alternatives([ge.array().items(d),d])}).required(),rootPath:gt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ge.object({network:ge.object({port:kn,securePort:kn,mtls:ge.alternatives([Ke.optional(),ge.object({user:gt.optional(),certificateAuthority:i,required:Ke.optional()})])}).required(),webSocket:Ke.optional(),requireAuthentication:Ke.optional()}),http:ge.object({compressionThreshold:ur.optional(),cors:Ke.optional(),corsAccessList:Ka.optional(),headersTimeout:ur.min(1).optional(),port:kn,securePort:kn,maxHeaderSize:ur.optional(),mtls:ge.alternatives([Ke.optional(),ge.object({user:gt.optional(),certificateAuthority:i,required:Ke.optional()})]),threadRange:ge.alternatives([Ka.optional(),gt.optional()])}).required(),threads:ge.alternatives(n.optional(),ge.object({count:n.optional(),debug:ge.alternatives(Ke.optional(),ge.object({startingPort:ur.min(1).optional(),host:gt.optional(),waitForDebugger:Ke.optional()})),maxHeapMemory:ur.min(0).optional()})),storage:ge.object({writeAsync:Ke.required(),overlappingSync:Ke.optional(),caching:Ke.optional(),compression:ge.alternatives([Ke.optional(),ge.object({dictionary:gt.optional(),threshold:ur.optional()})]),compactOnStart:Ke.optional(),compactOnStartKeepBackup:Ke.optional(),noReadAhead:Ke.optional(),path:l,prefetchWrites:Ke.optional(),maxFreeSpaceToLoad:ur.optional(),maxFreeSpaceToRetain:ur.optional()}).required(),ignoreScripts:Ke.optional(),tls:ge.alternatives([ge.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(aoe,"configValidator");function coe(e){return PH||OH.existsSync(e)?null:`Specified path ${e} does not exist.`}o(coe,"doesPathExist");function loe(e,t){ge.assert(e,gt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=coe(e);if(r)return t.message(r)}o(loe,"validatePath");function uoe(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(roe);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(soe):e}o(uoe,"validateRotationMaxSize");function doe(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(noe);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(ioe):e}o(doe,"validateRotationInterval");function foe(e,t){let r=t.state.path.join("."),n=Xie.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||wH();return i=Math.round(Math.min(i,wH())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Zie.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(foe,"setDefaultThreads");function mp(e,t){let r=t.state.path.join(".");if(!Mw.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Mw.isEmpty(ji))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Sl.join(ji,toe);case"logging.root":return Sl.join(ji,CH);case"clustering.leafServer.streams.path":return Sl.join(ji,"clustering","leaf");case"storage.path":let n=Sl.join(ji,NH.LEGACY_DATABASES_DIR_NAME);return OH.existsSync(n)?n:Sl.join(ji,NH.DATABASES_DIR_NAME);case"logging.rotation.path":return Sl.join(ji,CH);case"operationsApi.network.domainSocket":return r==null?null:Sl.join(ji,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(mp,"setDefaultRoot");function moe(e){let t=ge.object({routes:Bg});return eoe.validateBySchema({routes:e},t)}o(moe,"routesValidator")});var bt=M(nr=>{"use strict";var vs=(H(),D(Y)),Nr=oe(),dr=j(),{configValidator:poe,routesValidator:DH}=vw(),mn=require("fs-extra"),vH=require("yaml"),as=require("path"),hoe=require("is-number"),UH=require("properties-reader"),Eoe=require("lodash"),{handleHDBError:_oe}=_e(),{HTTP_STATUS_CODES:goe,HDB_ERROR_MSGS:id}=Kr(),{server:Soe}=(xr(),D(im)),{PACKAGE_ROOT:xH}=yt(),{DATABASES_PARAM_CONFIG:pp,CONFIG_PARAMS:os,CONFIG_PARAM_MAP:hi}=vs,Toe="Unable to get config value because config is uninitialized",yoe="Config successfully initialized",Roe="Error backing up config file",Aoe="Empty parameter sent to getConfigValue",BH=as.join(xH,"config","yaml",vs.HDB_DEFAULT_CONFIG_FILE),boe=as.join(xH,"config","yaml","defaultNatsConfig.yaml"),Ioe="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",MH={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"},Fg,xt,kg;nr.createConfigFile=woe;nr.getDefaultConfig=Noe;nr.getConfigValue=kH;nr.initConfig=Hg;nr.flattenConfig=od;nr.updateConfigValue=HH;nr.updateConfigObject=Ooe;nr.getConfiguration=Doe;nr.setConfiguration=Moe;nr.readConfigFile=Fw;nr.getClusteringRoutes=voe;nr.initOldConfig=qH;nr.getConfigFromFile=Uoe;nr.getConfigFilePath=Tl;nr.addConfig=xoe;nr.deleteConfigFromFile=Boe;nr.getConfigObj=Foe;nr.resolvePath=Uw;nr.getFlatConfigObj=koe;function Uw(e){if(e?.startsWith("~/"))return as.join(Nr.getHomeDir(),e.slice(1));let t=ae();try{return as.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(Uw,"resolvePath");function woe(e,t=!1){let r=Ya(BH);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=vH.parseDocument(mn.readFileSync(boe,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Fg=od(r.toJSON());let n;for(let c in e){let l=hi[c.toLowerCase()];if(l===os.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=xw(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){dr.error(f)}}}n&&FH(r,n),Bw(r,t);let s=r.toJSON();xt=od(s);let i=r.getIn(["rootPath"]),a=as.join(i,vs.HDB_CONFIG_FILE);if(mn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);mn.writeFileSync(a,String(r)),dr.trace(`Config file written to ${a}`)}o(woe,"createConfigFile");function FH(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Nr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(pp.TABLES))for(let i in n[s][pp.TABLES])for(let a in n[s][pp.TABLES][i]){let c=n[s][pp.TABLES][i][a],l=[os.DATABASES,s,pp.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=[os.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){dr.error("Error parsing schemas CLI/env config arguments",n)}}o(FH,"setSchemasConfig");function Noe(e){if(Fg===void 0){let r=Ya(BH);Fg=od(r.toJSON())}let t=hi[e.toLowerCase()];if(t!==void 0)return Fg[t.toLowerCase()]}o(Noe,"getDefaultConfig");function kH(e){if(e==null){dr.info(Aoe);return}if(xt===void 0){dr.trace(Toe);return}let t=hi[e.toLowerCase()];if(t!==void 0)return xt[t.toLowerCase()]}o(kH,"getConfigValue");function Tl(e=Nr.getPropsFilePath()){let t=Nr.getEnvCliRootPath();if(t)return Uw(as.join(t,vs.HDB_CONFIG_FILE));let r=UH(e);return Uw(r.get(vs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Tl,"getConfigFilePath");function Hg(e=!1){if(xt===void 0||e){let t;if(!Nr.noBootFile()){t=Nr.getPropsFilePath();try{mn.accessSync(t,mn.constants.F_OK|mn.constants.R_OK)}catch(i){throw dr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Tl(t),n;if(r.includes("config/settings.js"))try{qH(r);return}catch(i){if(i.code!==vs.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ya(r)}catch(i){if(i.code===vs.NODE_ERROR_CODES.ENOENT){dr.trace(`HarperDB config file not found at ${r}.
|
|
15
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw dr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Coe(n,r),Bw(n);let s=n.toJSON();if(Soe.config=s,xt=od(s),xt.logging_rotation_rotate)for(let i in MH)xt[i]&&dr.error(`Config ${MH[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);dr.trace(yoe)}}o(Hg,"initConfig");function Coe(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],as.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],as.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(dr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);mn.writeFileSync(t,String(e))}}o(Coe,"checkForUpdatedConfig");function Bw(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 id.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 id.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=poe(r,t);if(n.error)throw id.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(Bw,"validateConfig");function Ooe(e,t){xt===void 0&&(xt={});let r=hi[e.toLowerCase()];if(r===void 0){dr.trace(`Unable to update config object because config param '${e}' does not exist`);return}xt[r.toLowerCase()]=t}o(Ooe,"updateConfigObject");function HH(e,t,r=void 0,n=!1,s=!1,i=!1){xt===void 0&&Hg();let a=kH(hi.hdb_root),c=as.join(a,vs.HDB_CONFIG_FILE),l=Ya(c),u;if(r&&xt){let m=!1;for(let p in r)if(r[p]!=xt[p.toLowerCase()]){m=!0;break}if(!m){dr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===os.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=hi[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=xw(m,t);l.setIn([...p],h)}else for(let m in r){let p=hi[m.toLowerCase()];if(p===os.HTTP_SECUREPORT&&r[m]===xt[os.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===os.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===xt[os.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===os.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=vs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=xw(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){dr.error(A)}}}u&&FH(l,u),Bw(l);let d=l.getIn(["rootPath"]),f=as.join(d,vs.HDB_CONFIG_FILE);if(n===!0&&Poe(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);mn.writeFileSync(f,String(l)),s&&(xt=od(l.toJSON())),dr.trace(`Config parameter: ${e} updated with value: ${t}`)}o(HH,"updateConfigValue");function Poe(e,t){try{let r=as.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${vs.HDB_CONFIG_FILE}.bak`);mn.copySync(e,r),dr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){dr.error(Roe),dr.error(r)}}o(Poe,"backupConfigFile");var Loe=["databases"];function od(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}),kg=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])&&!Loe.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;!os[l.toUpperCase()]&&hi[l]&&(s[hi[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(od,"flattenConfig");function xw(e,t){if(e===os.CLUSTERING_NODENAME||e===os.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(hoe(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Nr.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 Nr.autoCast(t)}o(xw,"castConfigValue");function Doe(){let e=Nr.getPropsFilePath(),t=Tl(e);return Ya(t).toJSON()}o(Doe,"getConfiguration");async function Moe(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return HH(void 0,void 0,s,!0),Ioe}catch(i){throw typeof i=="string"||i instanceof String?_oe(i,i,goe.BAD_REQUEST,void 0,void 0,!0):i}}o(Moe,"setConfiguration");function Fw(){let e=Nr.getPropsFilePath();try{mn.accessSync(e,mn.constants.F_OK|mn.constants.R_OK)}catch(n){if(!Nr.noBootFile())throw dr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Tl(e);return Ya(t).toJSON()}o(Fw,"readConfigFile");function Ya(e){return vH.parseDocument(mn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Ya,"parseYamlDoc");function voe(){let e=Fw(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Nr.isEmptyOrZeroLength(t)?[]:t;let r=DH(t);if(r)throw id.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Nr.isEmptyOrZeroLength(n)?[]:n;let s=DH(n);if(s)throw id.CONFIG_VALIDATION(s.message);if(!Nr.isEmptyOrZeroLength(n)&&!Nr.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!Nr.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw id.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(voe,"getClusteringRoutes");function qH(e){let t=UH(e);xt={};for(let r in hi){let n=t.get(r.toUpperCase());if(Nr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=hi[r].toLowerCase();s===os.LOGGING_ROOT?xt[s]=as.dirname(n):xt[s]=n}return xt}o(qH,"initOldConfig");function Uoe(e){let t=Fw();return Eoe.get(t,e.replaceAll("_","."))}o(Uoe,"getConfigFromFile");async function xoe(e,t){let r=Ya(Tl());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await mn.writeFile(Tl(),String(r))}o(xoe,"addConfig");function Boe(e){let t=Tl(Nr.getPropsFilePath()),r=Ya(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=as.join(n,vs.HDB_CONFIG_FILE);mn.writeFileSync(s,String(r))}o(Boe,"deleteConfigFromFile");function Foe(){return kg||(Hg(),kg)}o(Foe,"getConfigObj");function koe(){return xt||Hg(),xt}o(koe,"getFlatConfigObj")});var cs=M((eve,Hr)=>{"use strict";var VH="username is required",KH="nothing to update, must supply active, role or password to update",YH="password cannot be an empty string",WH="If role is specified, it cannot be empty.",zH="active must be true or false";Hr.exports.addUser=zoe;Hr.exports.alterUser=joe;Hr.exports.dropUser=Joe;Hr.exports.getSuperUser=rae;Hr.exports.userInfo=Xoe;Hr.exports.listUsers=Gg;Hr.exports.listUsersExternal=Zoe;Hr.exports.setUsersWithRolesCache=yl;Hr.exports.findAndValidateUser=Ww;Hr.exports.getClusterUser=nae;Hr.exports.getUsersWithRolesCache=tae;Hr.exports.USERNAME_REQUIRED=VH;Hr.exports.ALTERUSER_NOTHING_TO_UPDATE=KH;Hr.exports.EMPTY_PASSWORD=YH;Hr.exports.EMPTY_ROLE=WH;Hr.exports.ACTIVE_BOOLEAN=zH;var jH=ln(),Hoe=Va(),hp=(Sw(),D(gw)),QH=Vk(),Ep=dn(),$w=ko(),Qi=oe(),JH=require("validate.js"),Vw=j(),{promisify:qoe}=require("util"),Kw=zi(),Hw=(H(),D(Y)),GH=pt(),Goe=bt(),$oe=ae(),Voe=Vi(),{hdbErrors:Koe,ClientError:Ei}=_e(),{HTTP_STATUS_CODES:$o,AUTHENTICATION_ERROR_MSGS:kw,HDB_ERROR_MSGS:ad}=Koe,{UserEventMsg:Yw}=ts(),qw=require("lodash"),{server:qg}=(xr(),D(im)),Yoe=j();qg.getUser=(e,t)=>Ww(e,t,t!=null);qg.authenticateUser=(e,t)=>Ww(e,t);var XH={username:!0,active:!0,role:!0,password:!0},$H=new Map,Woe=qoe(Hoe.delete),Gw=$oe.get(Hw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??hp.HASH_FUNCTION.SHA256,Ji;async function zoe(e){let t=JH.cleanAttributes(e,XH),r=QH.addUserValidation(t);if(r)throw new Ei(r.message);let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Ei(ad.ROLE_NAME_NOT_FOUND(t.role),$o.NOT_FOUND);if(n.length>1)throw new Ei(ad.DUP_ROLES_FOUND(t.role),$o.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Kw.encrypt(t.password)),t.password=await hp.hash(t.password,Gw),t.hash_function=Gw,t.role=n[0].id;let s=await jH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Vw.debug(s),await yl(),s.skipped_hashes.length===1)throw new Ei(ad.USER_ALREADY_EXISTS(t.username),$o.CONFLICT);return $w.signalUserChange(new Yw(process.pid)),`${t.username} successfully added`}o(zoe,"addUser");async function joe(e){let t=JH.cleanAttributes(e,XH);if(Qi.isEmptyOrZeroLength(t.username))throw new Error(VH);if(Qi.isEmptyOrZeroLength(t.password)&&Qi.isEmptyOrZeroLength(t.role)&&Qi.isEmptyOrZeroLength(t.active))throw new Error(KH);if(!Qi.isEmpty(t.password)&&Qi.isEmptyOrZeroLength(t.password.trim()))throw new Error(YH);if(!Qi.isEmpty(t.active)&&!Qi.isBoolean(t.active))throw new Error(zH);if(!Qi.isEmpty(t.password)&&!Qi.isEmptyOrZeroLength(t.password.trim())&&(Qoe(t.username)&&(t.hash=Kw.encrypt(t.password)),t.password=await hp.hash(t.password,Gw)),t.role==="")throw new Error(WH);if(t.role){let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Ei(ad.ALTER_USER_ROLE_NOT_FOUND(t.role),$o.NOT_FOUND);if(n.length>1)throw new Ei(ad.DUP_ROLES_FOUND(t.role),$o.CONFLICT);t.role=n[0].id}let r=await jH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await yl(),$w.signalUserChange(new Yw(process.pid)),r}o(joe,"alterUser");function Qoe(e){let t=!1,r=Ji.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(Qoe,"isClusterUser");async function Joe(e){let t=QH.dropUserValidation(e);if(t)throw new Ei(t.message);if(Ji.get(e.username)===void 0)throw new Ei(ad.USER_NOT_EXIST(e.username),$o.NOT_FOUND);let r=await Woe({table:"hdb_user",schema:"system",hash_values:[e.username]});return Vw.debug(r),await yl(),$w.signalUserChange(new Yw(process.pid)),`${e.username} successfully deleted`}o(Joe,"dropUser");async function Xoe(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=qw.cloneDeep(e.hdb_user);let r=await Ep.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(Xoe,"userInfo");async function Zoe(){let e=await Gg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Zoe,"listUsersExternal");async function Gg(){let e=await Ep.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=qw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Ep.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=qw.cloneDeep(s),s.role=t[s.role],eae(s.role),n.set(s.username,s);return n}o(Gg,"listUsers");function eae(e){if(!e){Vw.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(Voe)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(eae,"appendSystemTablesToRole");async function yl(e=void 0){e?Ji=e:Ji=await Gg()}o(yl,"setUsersWithRolesCache");async function tae(){return Ji||await yl(),Ji}o(tae,"getUsersWithRolesCache");async function Ww(e,t,r=!0){Ji||await yl();let n=Ji.get(e);if(!n){if(!r)return{username:e};throw new Ei(kw.GENERIC_AUTH_FAIL,$o.UNAUTHORIZED)}if(n&&!n.active)throw new Ei(kw.USER_INACTIVE,$o.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($H.get(t)===n.password)return s;{let i=hp.validate(n.password,t,n.hash_function||hp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)$H.set(t,n.password);else throw new Ei(kw.GENERIC_AUTH_FAIL,$o.UNAUTHORIZED)}}return s}o(Ww,"findAndValidateUser");async function rae(){Ji||await yl();for(let[,e]of Ji)if(e.role.role==="super_user")return e}o(rae,"getSuperUser");async function nae(){let e=await Gg(),t=Goe.getConfigFromFile(Hw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==Hw.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+GH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+GH.SERVER_SUFFIX.ADMIN,r}o(nae,"getClusterUser");var ZH=[];qg.invalidateUser=function(e){for(let t of ZH)try{t(e)}catch(r){Yoe.error("Error invalidating user",r)}};qg.onInvalidatedUser=function(e){ZH.push(e)}});var Ge,cd=ie(()=>{Ge={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var ld,zw=ie(()=>{cd();ld=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!==Ge.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Ge.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Ge.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Ge.WARNING,t)}markLoading(t){this.updateStatus(Ge.LOADING,t||"Component is loading")}isHealthy(){return this.status===Ge.HEALTHY}hasError(){return this.status===Ge.ERROR}isLoading(){return this.status===Ge.LOADING}hasWarning(){return this.status===Ge.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var Rl,Wa,jw,ud,Qw,dd,Jw,$g=ie(()=>{Rl=w(Kr()),Wa=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Rl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},jw=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}.`,Rl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},ud=class extends Wa{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Rl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},Qw=class extends Wa{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Rl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},dd=class extends Wa{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Rl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},Jw=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,Rl.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(`
|
|
16
|
+
`)}}});var eq,Al,tq,za,_p,fd,sae,Vg,Xw=ie(()=>{eq=w(ts()),Al=w(Je());H();tq=w(Jn());cd();$g();za=(0,tq.loggerWithTag)("componentStatus.crossThread"),_p=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,Al.onMessageByType)(i_.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,Al.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let R=this.awaitingResponses.get(r);R&&R.length>=a&&!E&&(E=!0,S(),za.trace?.(`Collected all ${R.length} expected responses for request ${r}`),p(R))},"checkComplete"),A=setTimeout(()=>{if(!E){E=!0;let R=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),za.debug?.(`Collection timeout for request ${r}: collected ${R.length}/${a} responses`),p(R)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(A)},"cleanup");this.responseCheckers.set(r,g),(0,eq.sendItcEvent)({type:i_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(R=>{E=!0,S(),this.responseCheckers.delete(r),h(new ud("sendItcEvent",R))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Al.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 ud?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,Al.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)}},fd=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!==Ge.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=[Ge.ERROR,Ge.WARNING,Ge.LOADING,Ge.UNKNOWN,Ge.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Ge.UNKNOWN}},sae=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Vg=new _p(sae)});var ja,Kg=ie(()=>{zw();cd();Xw();$g();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 dd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ge).includes(r))throw new dd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ge).join(", ")}`);this.statusMap.set(t,new ld(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Ge.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Ge.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Ge.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Ge.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Ge.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Ge.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={[Ge.HEALTHY]:0,[Ge.ERROR]:0,[Ge.WARNING]:0,[Ge.LOADING]:0,[Ge.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await Vg.collect(t);return fd.aggregate(r)}}});var fr,Yg=ie(()=>{Kg();fr=new ja});function nq(e){let t=rq.get(e);return t||(t=new Zw(e),rq.set(e,t)),t}function sq(){fr.reset()}var Zw,rq,Vo,iq,oq=ie(()=>{Yg();cd();Zw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return fr.setStatus(this.componentName,Ge.HEALTHY,t),this}warning(t){return fr.setStatus(this.componentName,Ge.WARNING,t),this}error(t,r){return fr.setStatus(this.componentName,Ge.ERROR,t,r),this}loading(t){return fr.setStatus(this.componentName,Ge.LOADING,t||"Loading..."),this}unknown(t){return fr.setStatus(this.componentName,Ge.UNKNOWN,t),this}get(){return fr.getStatus(this.componentName)}},rq=new Map;o(nq,"statusForComponent");Vo={loading(e,t){fr.initializeLoading(e,t)},loaded(e,t){fr.markLoaded(e,t)},failed(e,t,r){fr.markFailed(e,t,r)}};o(sq,"reset");iq=Ge});var gp={};Ie(gp,{AggregationError:()=>Qw,COMPONENT_STATUS_LEVELS:()=>Ge,ComponentStatus:()=>ld,ComponentStatusError:()=>Wa,ComponentStatusOperationError:()=>dd,ComponentStatusRegistry:()=>ja,CrossThreadCollectionError:()=>Jw,CrossThreadStatusCollector:()=>_p,CrossThreadTimeoutError:()=>jw,ITCError:()=>ud,StatusAggregator:()=>fd,componentStatusRegistry:()=>fr,crossThreadCollector:()=>Vg,query:()=>iae});var iae,aq=ie(()=>{Yg();Kg();zw();Kg();Xw();Yg();$g();cd();iae={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 eN={};Ie(eN,{STATUS:()=>iq,internal:()=>gp,lifecycle:()=>Vo,reset:()=>sq,statusForComponent:()=>nq});var Sp=ie(()=>{oq();aq()});var yp=M((vve,uq)=>{"use strict";var ls=j(),pn=(H(),D(Y)),oae=O0(),aae=cs(),{validateEvent:tN}=ts(),Tp=ss(),cae=require("process"),{resetDatabases:lae}=(Oe(),D(mt)),uae={[pn.ITC_EVENT_TYPES.SCHEMA]:dae,[pn.ITC_EVENT_TYPES.USER]:lq,[pn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:mae};async function dae(e){let t=tN(e);if(t){ls.error(t);return}ls.trace("ITC schemaHandler received schema event:",e),await oae(e.message),await fae(e.message)}o(dae,"schemaHandler");async function fae(e){try{Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=lae();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ls.error(t)}}o(fae,"syncSchemaMetadata");var cq=[];async function lq(e){try{try{Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Tp.resetReadTxn(pn.SYSTEM_SCHEMA_NAME,pn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ls.warn(r)}let t=tN(e);if(t){ls.error(t);return}ls.trace(`ITC userHandler ${pn.HDB_ITC_CLIENT_PREFIX}${cae.pid} received user event:`,e),await aae.setUsersWithRolesCache();for(let r of cq)r()}catch(t){ls.error(t)}}o(lq,"userHandler");lq.addListener=function(e){cq.push(e)};async function mae(e){try{let t=tN(e);if(t){ls.error(t);return}ls.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Sp(),D(eN)),{getWorkerIndex:n}=Je(),{sendItcEvent:s}=ts(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:pn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?ls.trace(`Sent component status response directly to thread ${u}`):(u===void 0?ls.debug("No originator threadId, falling back to broadcast"):ls.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){ls.error("Error handling component status request:",t)}}o(mae,"componentStatusRequestHandler");uq.exports=uae});var ts=M((Hve,fq)=>{"use strict";var xve=j(),rN=oe(),pae=(H(),D(Y)),{ITC_ERRORS:Rp}=Kr(),{parentPort:Bve,threadId:hae,isMainThread:Eae,workerData:Fve}=require("worker_threads"),{onMessageFromWorkers:_ae,broadcast:kve,broadcastWithAcknowledgement:gae}=Je();fq.exports={sendItcEvent:Sae,validateEvent:dq,SchemaEventMsg:Tae,UserEventMsg:yae};var Wg;_ae(async(e,t)=>{Wg=Wg||yp(),dq(e),Wg[e.type]&&await Wg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Sae(e){return!Eae&&e.message&&(e.message.originator=hae),gae(e)}o(Sae,"sendItcEvent");function dq(e){if(typeof e!="object")return Rp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||rN.isEmpty(e.type))return Rp.MISSING_TYPE;if(!e.hasOwnProperty("message")||rN.isEmpty(e.message))return Rp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||rN.isEmpty(e.message.originator))return Rp.MISSING_ORIGIN;if(pae.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Rp.INVALID_EVENT(e.type)}o(dq,"validateEvent");function Tae(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(Tae,"SchemaEventMsg");function yae(e){this.originator=e}o(yae,"UserEventMsg")});var ko=M(($ve,Eq)=>{"use strict";var mq=(H(),D(Y)),Gve=oe(),zg=j(),pq=d0(),md,{sendItcEvent:hq}=ts();function Rae(e){try{zg.debug("signalSchemaChange called with message:",e),md=md||yp();let t=new pq(mq.ITC_EVENT_TYPES.SCHEMA,e);return md.schema(t),hq(t)}catch(t){zg.error(t)}}o(Rae,"signalSchemaChange");function Aae(e){try{zg.trace("signalUserChange called with message:",e),md=md||yp();let t=new pq(mq.ITC_EVENT_TYPES.USER,e);return md.user(t),hq(t)}catch(t){zg.error(t)}}o(Aae,"signalUserChange");Eq.exports={signalSchemaChange:Rae,signalUserChange:Aae}});function Ap(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 _q(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Us(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 Us,bp=ie(()=>{Us=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(Ap,"appendHeader");o(_q,"mergeHeaders")});function jg(e,t,r=Iae){let n;return function(...i){return n?n.length*nN>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();nN=(nN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var Tq,bae,Iae,gq,wae,sN,Sq,nN,iN=ie(()=>{Tq=w(Jn()),bae=3e3,Iae=2e4,gq=0,wae=3e4,sN=3e3,Sq=performance.now()+sN,nN=0;o(jg,"throttle");setInterval(()=>{let e=performance.now();e-Sq-sN>bae&&gq+wae<e&&(Tq.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),gq=e),Sq=e},sN).unref()});var Lq={};Ie(Lq,{EVICTED:()=>va,INVALIDATED:()=>Dn,coerceType:()=>Jg,makeTable:()=>Zg});function Zg(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 R=vb(i,n,l),N,O,F={},te=Promise.resolve(),q,k,J;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(J=K),K.isPrimaryKey&&(F=K);let W,ue=[],ce=[],re=1,Re=2,Te={},Fe={},qe=864e5,Rr=0,er,qt,tr,Kf=!1,xc,Gt,Yf,Wf=Il.get(B.REPLICATION_DATABASES);if(Array.isArray(Wf)){for(let K of Wf)if(K.name===c&&K.replicateTo>=0){Yf=K.replicateTo;break}}let zE=i.getRange({start:!1,end:!1}).constructor,jE=10,dA=6;g&&Ru(),Nm(i.env.path,K=>{if(O)return kc(K)});class zf extends ml{static{o(this,"Updatable")}getUpdatedTime(){return Da.get(this.getRecord())?.version}getExpiresAt(){return Da.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new sp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class Le extends Fr{#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=q;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(I=>!I.intermediateSource)){if(this.sources.some(I=>I.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}O=O||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),N=N||_.load;let C=o(I=>{let v=this.sources;if(v=v.filter(U=>U.intermediateSource&&U[I]&&(!U[I].reliesOnPrototype||U.prototype[I])),v.length>0)if(v.length===1){let U=v[0];return(L,x,G)=>{if(L?.source!==U)return U[I](x,G,L)}}else return(U,L,x)=>{let G=[];for(let Q of v){if(U?.source===Q)break;G.push(Q[I](L,x,U))}return Promise.all(G)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1];y.intermediateSource&&(y={});let b=o(I=>{if(y[I]&&(!y[I].reliesOnPrototype||y.prototype[I]))return(v,U,L)=>{if(!v?.source)return y[I](U,L,v)}},"getApplyToCanonicalSource");Te={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Fe={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let P=y.shouldRevalidateEvents;return(async()=>{let I=!1,v,U=o(async(L,x)=>{let G=L.value,Q=L.table?Me[c][L.table]:Le;if(c===rm&&(L.table===bu.ROLE_TABLE_NAME||L.table===bu.USER_TABLE_NAME)&&(I=!0),L.id===void 0&&(L.id=G[Q.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=_;let X={residencyId:Ro(L.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:L.nodeId,async:!0},$=L.id,be=await Q.getResource($,x,X);switch(L.finished&&await L.finished,L.type){case"put":return P?be._writeInvalidate($,G,X):be._writeUpdate($,G,!0,X);case"patch":return P?be._writeInvalidate($,G,X):be._writeUpdate($,G,!1,X);case"delete":return be._writeDelete($,X);case"publish":case"message":return be._writePublish($,G,X);case"invalidate":return be._writeInvalidate($,G,X);case"relocate":return be._writeRelocate($,X);default:xe.default.error?.("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=_.subscribe;L&&A==null&&(A=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},G=_.subscribeOnThisThread?_.subscribeOnThisThread((0,bl.getWorkerIndex)(),x):(0,bl.getWorkerIndex)()===0,Q=L&&G&&await _.subscribe?.(x);if(Q){let X;for await(let $ of Q)try{if(!($.type==="transaction"?$.writes[0]:$)){xe.default.error?.("Bad subscription event",$);continue}if($.source=_,$.type==="end_txn"){if(X?.resolve(),$.localTime&&v!==$.localTime){if($.remoteNodeIds?.length>0){let de=[Symbol.for("seq"),$.remoteNodeIds[0]],z=d.get(de),ne=z?.nodes;ne||(ne=[]);for(let Ee of $.remoteNodeIds.slice(1)){let fe=ne.find(De=>De.id===Ee);ne=ne.filter(De=>De.id!==Ee||De===fe),fe||(fe={id:Ee,seqId:0},ne.push(fe)),fe.seqId=Math.max(z?.seqId??1,$.localTime),Ee===X?.nodeId&&(fe.lastTxnTime=$.timestamp)}let me=Math.max(z?.seqId??1,$.localTime);xe.default.trace?.("Received txn",c,me,new Date(me),$.localTime,new Date($.localTime),$.remoteNodeIds),d.put(de,{seqId:me,nodes:ne})}v=$.localTime}$.onCommit&&X?.committed.then($.onCommit);continue}if(X)if($.beginTxn)X.resolve();else{X.write_promises.push(U($,X));continue}!$.timestamp&&$.version&&($.timestamp=$.version);let pe=At($,()=>{if($.type==="transaction"){let de=[];for(let z of $.writes)try{de.push(U(z,$))}catch(ne){throw ne.message+=" writing "+JSON.stringify(z)+" of event "+JSON.stringify($),ne}return Promise.all(de)}else if($.type==="define_schema"){let de=this.attributes.slice(0),z=!1;for(let ne of $.attributes)de.find(me=>me.name===ne.name)||(de.push(ne),z=!0);z&&(Ze({table:s,database:c,attributes:de,origin:"cluster"}),wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return $.beginTxn?(X=$,X.write_promises=[U($,$)],new Promise(de=>{X.resolve=()=>de(Promise.all(X.write_promises))})):U($,$)});X&&(X.committed=pe),I&&pe&&!pe?.waitingForUserChange&&(pe.then(()=>wp.signalUserChange(new Np.UserEventMsg(process.pid))),pe.waitingForUserChange=!0),$.onCommit&&(pe?pe.then($.onCommit):$.onCommit())}catch(be){xe.default.error?.("error in subscription handler",be)}}}catch(L){xe.default.error?.(L)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Le.prototype.get}static getResource(_,T,C){let y=super.getResource(_,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Mr(_);try{if(y.getRecord?.())return y;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let b=!C?.async||i.cache?.get?.(_),P=br(T),I=P.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Bc(_,T,{transaction:I,ensureLoaded:C?.ensureLoaded},b,v=>{if(v?Le._updateResource(y,v):y.#e=null,T.onlyIfCached){if(!y.doesExist())throw new ut.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=Aa(_,v,T,y);if(U)return P?.disregardReadTxn(),y.#i=!0,T.loadedFromSource=!0,xs(U,L=>(Le._updateResource(y,L),y))}return y})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(_)),b}}return y}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=Aa(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,xs(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=F?.type;if(_==="String"||_==="ID")return super.getNewId();if(!Gt){let b=i.getEntry(Symbol.for("id_allocation")),P=b?.value,I;if(P&&P.nodeName===server.hostname&&(!Fae(i)||P.pid===process.pid)){let v=P.start,U=P.end;I=v;for(let L of i.getKeys({start:U,end:v,limit:1,reverse:!0}))I=L}else P=y(b?.version??null),I=P.start;Gt=new BigInt64Array([BigInt(I)+1n]),Gt=new BigInt64Array(i.getUserSharedBuffer("id",Gt.buffer)),Gt.maxSafeId=P.end}let T=Number(Atomics.add(Gt,0,1n)),C=_==="Int"?512:1048576;if(T+C>=Gt.maxSafeId){let b=o(P=>{Gt.maxSafeId=T+(_==="Int"?1023:4194303);let I=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,v=P?void 0:i.useReadTransaction(),U=Number(Gt[0]);for(let G of i.getKeys({start:U+1,end:I,limit:1,transaction:v}))I=G;v?.done();let{value:L,version:x}=i.getEntry(Symbol.for("id_allocation"));if(Gt.maxSafeId<I){if(L.end>Gt.maxSafeId-100)return;xe.default.info?.("New id allocation",T,Gt.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:L.start,end:Gt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Gt.maxSafeId}, but id of ${I} detected`);let G=y(x);G.alreadyUpdated||Atomics.store(Gt,0,BigInt(G.start+1)),Gt.maxSafeId=G.end}},"updateEnd");T+C===Gt.maxSafeId?setImmediate(b):T+100>=Gt.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(()=>b(!0)))}return T;function y(b){let P=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,I=P/4,v,U,L=!1,x,G;do{x=Math.floor(Math.random()*P),G={start:x,end:x+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},v=0;for(let Q of i.getKeys({start:x,limit:1,reverse:!0}))v=Q;U=P;for(let Q of i.getKeys({start:x+1,end:P,limit:1}))U=Q;I*=.875,I<1e3&&!L&&(L=!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":""}`,x,v,U,I))}while(!(I<U-x&&(I<x-v||v===0)));return i.transactionSync(()=>{let Q=i.getEntry(Symbol.for("id_allocation"));return(Q?.version??null)==b?(xe.default.info?.("Allocated new id range",G),i.put(Symbol.for("id_allocation"),G,Date.now()),G):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...Q.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,qe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");qe=qe||(h+E)/4,kc()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Le.getResidency=_&&((T,C)=>{try{return _(T,C)}catch(y){throw y.message+=` in residency function for table ${s}`,y}})}static setResidencyById(_){Le.getResidencyById=_&&(T=>{try{return _(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(_,T){if(Le.getResidencyById)return Le.getResidencyById(_[t]);let C=Yf;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(C=T.replicateTo)}if(C>=0&&server.nodes){let y=[server.hostname];if(T.previousResidency)y.push(...T.previousResidency.slice(0,C));else{let b=server.nodes.map(v=>v.name),P=Math.floor(b.length*Math.random());y.push(...b.slice(P,P+C));let I=P+C-b.length;I>0&&y.push(...b.slice(0,I))}return y}}static enableAuditing(_=!0){g=_,_&&Ru(),Le.audit=_}static coerceId(_){return _===""?null:Jg(_,F)}static async dropTable(){delete Me[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Ln&&_.value&&Oa(_.value);if(c===a){for(let _ of S)d.remove(Le.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Le.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),aN.default.unlinkSync(i.env.path);wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(Qf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Le.getRecordCount().then(y=>(C.recordCount=y.recordCount,C.estimatedRecordRange=y.estimatedRange,C)):C}if(_!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),y=br(C),b=y.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let P=Ar(_);Mr(P);let I=!0;return _.checkPermission&&(I=this.allowRead(C.user,_)),xs(xs(I,v=>{if(!v)throw new ut.AccessViolation(C.user);let U=!0;return Bc(P,C,{transaction:b,ensureLoaded:U},!1,L=>{if(C.onlyIfCached){if(!L?.value)throw new ut.ServerError("Entry is not cached",504)}else if(U){let x=Aa(P,L,C);if(x)return y?.disregardReadTxn(),C.loadedFromSource=!0,x.then(G=>G?.value)}return L?.value})}),v=>{let U=_?.select;return U&&v!=null?Gu(U,this.constructor)(v):v})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let C=Vr(_,T);if(C?.read){if(C.isSuperUser)return!0;let y=C.attribute_permissions,b=T?.select;if(y?.length>0||Kf&&b){if(T||(T={}),b){let P=y?.length>0&&oN(y,"read");T.select=b.map(I=>{let v=I.name||I;if(!P||P[v]){let U=tr[v]?.definition?.tableClass;if(U){if(I.name||(I={name:I}),!I.checkPermission&&T.checkPermission&&(I.checkPermission=T.checkPermission),!U.prototype.allowRead.call(null,_,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else T.select=y.filter(P=>P.read&&!tr[P.attribute_name]).map(P=>P.attribute_name);return T}else return!0}}allowUpdate(_,T,C){let y=Vr(_,C);if(y?.update){let b=y.attribute_permissions;if(b?.length>0){let P=oN(b,"update");for(let I in T)if(!P[I])return!1;for(let I of b){let v=I.attribute_name;!I.update&&!(v in T)&&(T[v]=this.getProperty(v))}}return Fc(this.getContext())}}allowCreate(_,T,C){if(this.isCollection){let y=Vr(_,C);if(y?.insert){let b=y.attribute_permissions;if(b?.length>0){let P=oN(b,"insert");for(let I in T)if(!P[I])return!1;return Fc(this.getContext())}else return Fc(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return Vr(_,T)?.delete&&Fc(this.getContext())}update(_,T){let C,y=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),b=!1;y?(b=T,T=_,C=this.getId()):C=Ar(_);let P=this.getContext();if(!br(P))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(b)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(y){let v=this.#t;v&&(T=Object.assign(v,T)),this.#t=T}else{let v=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(v=this.allowUpdate(P.user,T,_)),xs(v,U=>{if(!U)throw new ut.AccessViolation(P.user);return xs(i.get(Ar(_)),L=>{let x=new zf(L);return x._setChanges(T),this._writeUpdate(C,x.getChanges(),!1),x})})}return this._writeUpdate(C,this.#t,b),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===Rq?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new sp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);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 T=!0,C=this.getContext();return _?.checkPermission&&(T=this.allowDelete(C.user,_,C)),xs(T,y=>{if(!y)throw new ut.AccessViolation(C.user);this._writeInvalidate(_?Ar(_):this.getId())})}_writeInvalidate(_,T,C){let y=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Te.invalidate?.bind(this,y,_),beforeIntermediate:Fe.invalidate?.bind(this,y,_),commit:o((P,I)=>{if(!(ba(P,I,C?.nodeId)<=0)){T??=null;for(let v in r)T||(T={}),T[v]===void 0&&(T[v]=this.getProperty(v));xe.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(P).toISOString()}`),R(_,T,I,P,Dn,g,{user:y?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let C=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Te.relocate?.bind(this,C,_),beforeIntermediate:Fe.relocate?.bind(this,C,_),commit:o((b,P)=>{if(ba(b,P,T?.nodeId)<=0)return;let I=Le.getResidencyRecord(T.residencyId),v=0,U=null,L=P?.value;if(I&&!I.includes(server.hostname)){for(let x in r)U||(U={}),U[x]=L[x];v=Dn}else U=L;xe.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(b).toISOString()}`),R(_,U,P,b,v,g,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let C={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},y=Hc(this.getResidency(T.value,C)),b;if(y){if(!y.includes(server.hostname))return!1;b=Ro(y)}let P=0;xe.default.debug?.("Performing a relocate of an entry",existing_entry.key,T.value,y);let I=R(_.key,T.value,_,_.version,P,!0,{residencyId:b,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,C){let y=this.Source,b;if(!((O||g)&&(!T||(b=i.getEntry(_),!b||!T)||b.version!==C))){if(O){if(i.hasLock(_,b.version))return;let P;for(let I in r)P||(P={}),P[I]=T[I];if(P)return R(_,P,b,C,va,null,null,null,!0)}if(i.ifVersion(_,C,()=>{yo(_,T,null)}),g)return R(_,null,b,C,va,null,null,null,!0);nl(i,b??i.getEntry(_),C)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let C=!0;if(_==null)throw new TypeError("Can not put a record without a target");let y=this.getContext();return _.checkPermission&&(C=this.allowUpdate(y.user,T,_)),xs(C,b=>{if(!b)throw new ut.AccessViolation(y.user);if(Array.isArray(T))for(let P of T){let I=P[t];this._writeUpdate(I,P,!0)}else{let P=Ar(_);this._writeUpdate(P,T,!0)}})}}create(_,T){let C=!0,y=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(C=this.allowCreate(y.user,T,_)),xs(C,b=>{if(!b)throw new ut.AccessViolation(y.user);let P=Ar(_)??T[t];if(P===void 0)P=this.constructor.getNewId();else if(i.get(P))throw new ut.ClientError("Record already exists",409);return this._writeUpdate(P,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let C=this.update(_,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(_,T,C,y){let b=this.getContext(),P=br(b);Mr(_);let I=this.#n??i.getEntry(_);this.#s=C?Rq:vae;let v={key:_,store:i,entry:I,nodeName:b?.nodeName,validate:o(U=>{T||(T=this.#t),C||T&&Ig(this.#t===T?this:T)?b?.source||(P.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(U):k.type==="String"?new Date(U).toISOString():U),C&&(t&&T[t]!==_&&(T[t]=_),q&&(I?.value?T[q.name]=I?.value[q.name]:T[q.name]=q.type==="Date"?new Date(U):q.type==="String"?new Date(U).toISOString():U),T=qa(T))):P.removeWrite(v)},"validate"),before:C?Te.put?()=>Te.put(b,_,T):null:Te.patch?()=>Te.patch(b,_,T):Te.put?()=>Te.put(b,_,qa(this)):null,beforeIntermediate:C?Fe.put?()=>Fe.put(b,_,T):null:Fe.patch?()=>Fe.patch(b,_,T):Fe.put?()=>Fe.put(b,_,qa(this)):null,commit:o((U,L,x)=>{if(x){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this.#n=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#r=U;let G=L?.value,Q;this.#s=0;let X=!1,$=ba(U,L,y?.nodeId),be;if($<=0){if(g){let me=L.localTime,Ee=L.version;xe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(U),"applying later update from:",new Date(Ee),"local recorded time",new Date(me));let fe=[];for(;me>U||Ee>=U&&me>0;){let De=l.get(me);if(!De)break;let ve=Ut(De);if(Ee=ve.version,Ee>=U){if(Ee===U){if($=ba(U,{version:Ee,localTime:me},y?.nodeId),$===0)return;if($>0)continue}if(ve.type==="patch")fe.push(ve),be=T;else if(ve.type==="put"||ve.type==="delete")return}me=ve.previousLocalTime}me||xe.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",L),fe.sort((De,ve)=>De.version-ve.version);for(let De of fe){let ve=De.getValue(i);if(xe.default.debug?.("Rebuilding update with future patch:",new Date(De.version),ve,De),Q=S_(Q??T,ve,C),!Q)return}}else{if(C)return;Q=S_(Q??T,G,C),xe.default.debug?.("Rebuilding update without audit:",Q)}xe.default.trace?.("Rebuilt record to save:",Q," is full update:",C)}let pe;if(C&&!Q?pe=T:this.constructor.loadAsInstance===!1?pe=qa(G,Q??T):(this.#e=G,pe=qa(this,Q??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let de;if(y?.residencyId!=null)de=y.residencyId;else{I?.residencyId&&(b.previousResidency=Le.getResidencyRecord(I.residencyId));let me=Hc(Le.getResidency(pe,b));if(me&&!me.includes(server.hostname))if(be??=pe,X=!0,Le.getResidencyById)pe=void 0;else{pe=null;for(let Ee in r)pe||(pe={}),pe[Ee]=be[Ee]}de=Ro(me)}C||(be=T);let z=b?.expiresAt??(h?h+Date.now():-1);xe.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(U).toISOString()}${z?", expires at: "+new Date(z).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),yo(_,G,pe);let ne=C?"put":"patch";R(_,pe,L,U,X?Dn:0,g,{omitLocalRecord:X,user:b?.user,residencyId:de,expiresAt:z,nodeId:y?.nodeId,originatingOperation:b?.originatingOperation,tableToTrack:c==="system"?null:s},ne,!1,be),b.expiresAt&&kc()},"commit")};P.addWrite(v)}async delete(_){if(Qf(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,C=this.getContext();return _.checkPermission&&(T=this.allowDelete(C.user,_,C)),xs(T,y=>{if(!y)throw new ut.AccessViolation(C.user);let b=Ar(_);return this._writeDelete(b),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let C=br(this.getContext());Mr(_);let y=this.getContext();return C.addWrite({key:_,store:i,entry:this.#n,nodeName:y?.nodeName,before:Te.delete?.bind(this,y,_),beforeIntermediate:Fe.delete?.bind(this,y,_),commit:o((b,P,I)=>{let v=P?.value;I&&(y&&P?.version>(y.lastModified||0)&&(y.lastModified=P.version),Le._updateResource(this,P)),!(ba(b,P,T?.nodeId)<=0)&&(yo(this.getId(),v),xe.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(b).toISOString()}`),g||A?(R(_,null,P,b,0,g,{user:y?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||kc()):nl(i,P))},"commit")}),!0}search(_){let T=this.getContext(),C=br(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new ut.AccessViolation(T.user);T&&(T.lastModified=Pae);let y=_.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let b=_.id??this.getId();b&&(y=[{attribute:null,comparator:Array.isArray(b)?"prefix":"starts_with",value:b}].concat(y));let P,I={};function v(ne,me){let Ee;switch(me){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');Ee=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+me)}for(let fe of ne){if(fe.conditions){fe.conditions=v(fe.conditions,fe.operator);continue}let De=fe[0]??fe.attribute,ve=De==null?F:Hi(S,De);if(ve)(ve.type||xb[fe.comparator])&&(fe[1]===void 0?fe.value=L(fe.value,ve):fe[1]=L(fe[1],ve));else if(De!=null)throw(0,ut.handleHDBError)(new Error,`${De} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let $e=fe.chainedConditions[0],vr,Wn;if($e.comparator==="gt"||$e.comparator==="greater_than"||$e.comparator==="ge"||$e.comparator==="greater_than_equal"?(vr=fe,Wn=$e):(vr=$e,Wn=fe),vr.comparator!=="lt"&&vr.comparator!=="less_than"&&vr.comparator!=="le"&&vr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Ui=Wn.comparator==="ge"||Wn.comparator==="greater_than_equal",Ne=vr.comparator==="le"||vr.comparator==="less_than_equal";fe.comparator=(Ui?"ge":"gt")+(Ne?"le":"lt"),fe.value=[Wn.value,vr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ne}o(v,"prepareConditions");function U(ne,me){if(_.enforceExecutionOrder)return ne;for(let Ee of ne)Ee.conditions&&(Ee.conditions=U(Ee.conditions,Ee.operator));return ne.length>1&&me!=="or"?Nae(ne,eg(Le)):ne}o(U,"orderConditions");function L(ne,me){return Array.isArray(ne)?ne.map(Ee=>Jg(Ee,me)):Jg(ne,me)}o(L,"coerceTypedValues");let x=_.operator;(y.length>0||x)&&(y=v(y,x));let G=typeof _.sort=="object"&&_.sort,Q;if(G&&x!=="or"){let ne=G.attribute;if(ne==null)throw new ut.ClientError("Sort requires an attribute");if(P=y.find(me=>ku(me.attribute)===ku(ne)),!P){let me=Hi(S,ne);if(!me)throw(0,ut.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not a defined attribute`,404);if(me.indexed)P={...G,comparator:"sort"},y.push(P);else if(y.length===0&&!_.allowFullScan)throw(0,ut.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not indexed and not combined with any other conditions`,404)}P&&(P.descending=!!G.descending)}y=U(y,x),G&&(P&&y[0]===P?G.next&&(Q={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(P&&y.splice(y.indexOf(P),1),Q=G));let X=_.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:y,operator:x,postOrdering:Q,selectApplied:!!X};let $=C.useReadTxn(),be=Bb(y,x,Le,$,_,T,(ne,me)=>Jf(ne,X,T,$,me),I),pe=_.ensureLoaded!==!1,de=Le.transformEntryForSelect(X,T,$,I,pe,!0),z=Le.transformToOrderedSelect(be,X,Q,T,$,de);return(_.offset||_.limit!==void 0)&&(z=z.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),z.onDone=()=>{z.onDone=null,C.doneReadTxn()},z.selectApplied=!0,z.getColumns=()=>{if(X){let ne=[];for(let me of X)me==="*"?ne.push(...S.map(Ee=>Ee.name)):ne.push(me.name||me);return ne}return S.filter(ne=>!ne.computed&&!ne.relationship).map(ne=>ne.name)},z}static transformToOrderedSelect(_,T,C,y,b,P){let I=new zE;if(C){_=Jf(_,T,y,b,null);let v;I.iterate=function(){let L,x=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),G,Q=C.dbOrderedAttribute,X,$,be=!0;function pe(z){let ne=z.next&&pe(z.next),me=z.descending;return y.sort=z,(Ee,fe)=>{let De=Tu(Ee,z.attribute,y),ve=Tu(fe,z.attribute,y),$e=me?(0,wl.compareKeys)(ve,De):(0,wl.compareKeys)(De,ve);return $e===0?ne?.(Ee,fe)||0:$e}}o(pe,"createComparator");let de=pe(C);return{async next(){let z;if(L)if(z=L.next(),z.done){if(G)return I.onDone&&I.onDone(),z}else return{value:await P.call(this,z.value)};v=[],X&&v.push(X);do if(z=await x.next(),z.done){if(G=!0,v.length)break;return I.onDone&&I.onDone(),z}else{let ne=z.value;if(ne?.then&&(ne=await ne),Q){let me=Tu(ne,Q,y);if(be)be=!1,$=me;else if(me!==$){$=me,X=ne;break}}v.push(ne)}while(!0);return C.isGrouped,v.sort(de),L=v[Symbol.iterator](),z=L.next(),z.done?(I.onDone&&I.onDone(),z):{value:await P.call(this,z.value)}},return(){return I.onDone&&I.onDone(),x.return()},throw(){return I.onDone&&I.onDone(),x.throw()}}};let U=o(L=>{if(typeof T=="object"&&Array.isArray(L.attribute))for(let x=0;x<T.length;x++){let G=T[x],Q;if(G.name===L.attribute[0]){for(Q=G.sort||(G.sort={});Q.next;)Q=Q.next;Q.attribute=L.attribute.slice(1),Q.descending=L.descending}else G===L.attribute[0]&&(T[x]=Q={name:G,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&U(L.next)},"applySortingOnSelect");U(C)}else I.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),I=I.map(function(v){try{let U=P.call(this,v);return typeof U?.catch=="function"?U.catch(L=>{throw L.partialObject={[t]:v.key},L}):U}catch(U){throw U.partialObject={[t]:v.key},U}});return I}static transformEntryForSelect(_,T,C,y,b,P){let I;b&&O&&!(typeof _=="string"?[_]:_)?.every(L=>{let x;return typeof L=="object"?x=L.name:x=L,r[x]||x===t})&&(I=!0);let v,U=o(function(L){let x;if(T?.transaction?.stale&&(T.transaction.stale=!1),L!=null){if(x=L.deref?L.deref():L.value,!x&&(L.key===void 0||L.deref)||L.metadataFlags&Dn){if(L.metadataFlags&Dn&&T.replicateFrom===!1&&P&&L.residencyId)return Ja.SKIP;if(L=Bc(L.key??L,T,{transaction:C,lazy:_?.length<4,ensureLoaded:b},this?.isSync,G=>G),L?.then)return L.then(U.bind(this));x=L?.value}if(I&&L?.metadataFlags&(Dn|va)||L?.expiresAt!=null&&L?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:L.key,message:"This entry has expired"};let G=Aa(L.key??L,L,T);if(G?.then)return G.then(U)}}if(x==null)return P?Ja.SKIP:x;if(_&&!(_[0]==="*"&&_.length===1)){let G,Q=o(($,be)=>{let pe;typeof $=="object"?pe=$.name:pe=$;let de=tr?.[pe],z;if(de){let ne=y?.[pe];if(ne)if(ne.hasMappings){let Ee=de.from?x[de.from]:ku(L.key);z=ne.get(Ee),z||(z=[])}else z=ne.fromRecord?.(x);else z=de(x,T,L,!0);let me=o(Ee=>{if(de.directReturn)return be(Ee,pe);if(Ee&&typeof Ee=="object"){let fe=de.definition?.tableClass||Le;v||(v={});let De=v[pe]||(v[pe]=fe.transformEntryForSelect(pe===$?null:$.select||(Array.isArray($)?$:null),T,C,ne,b));if(Array.isArray(Ee)){let ve=[],$e=fe.transformToOrderedSelect(Ee,$.select,typeof $.sort=="object"&&$.sort,T,C,De)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),vr=o(Ui=>{for(;!Ui.done;){if(Ui?.then)return Ui.then(vr);ve.push(Ui.value),Ui=$e.next()}be(ve,pe)},"nextValue"),Wn=vr($e.next());Wn&&(G||(G=[]),G.push(Wn));return}else if(Ee=De.call(this,Ee),Ee?.then){G||(G=[]),G.push(Ee.then(ve=>be(ve,pe)));return}}be(Ee,pe)},"handleResolvedValue");z?.then?(G||(G=[]),G.push(z.then(me))):me(z);return}else z=x[pe],z&&typeof z=="object"&&pe!==$&&(z=Le.transformEntryForSelect($.select||$,T,C,null)({value:z}));be(z,pe)},"selectAttribute"),X;if(typeof _=="string")Q(_,$=>{X=$});else if(Array.isArray(_))if(_.asArray)X=[],_.forEach(($,be)=>{$==="*"?_[be]=x:Q($,pe=>X[be]=pe)});else{X={};let $=_.forceNulls;for(let be of _)if(be==="*")for(let pe in x)X[pe]=x[pe];else Q(be,(pe,de)=>{pe===void 0&&$&&(pe=null),X[de]=pe})}else throw new ut.ClientError("Invalid select"+_);return G?Promise.all(G).then(()=>X):X}return x},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,C=[],y=Vb(Le,this.getId()??null,function(I,v,U,L){try{let x=v.getValue?.(i,T),G=v.type;if(!x&&G==="patch"&&T){let X=i.getEntry(I);X?.version===v.version?x=X.value:x=v.getValue?.(i,!0,U),G="put"}let Q={id:I,localTime:U,value:x,version:v.version,type:G,beginTxn:L};C?C.push(Q):(Xe(v.size??1,"db-message",s,null),this.send(Q))}catch(x){xe.default.error?.(x)}},_.startTime||0,_),b=(async()=>{this.isCollection&&(y.includeDescendants=!0,_.onlyChildren&&(y.onlyChildren=!0)),_.supportsTransactions&&(y.supportsTransactions=!0);let I=this.getId(),v=_.previousCount;v>1e3&&(v=1e3);let U=_.startTime;if(this.isCollection){if(U){if(v)throw new ut.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:L,value:x}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let G=Ut(x);if(G.tableId!==n)continue;let Q=G.recordId;if(I==null||wq(I,Q)){let X=G.getValue(i,T,L);if(P({id:Q,localTime:L,value:X,version:G.version,type:G.type,size:G.size}),y.queue?.length>bq&&await y.waitForDrain()===!1)return}y.startTime=L}}else if(v){let L=[];for(let{key:x,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let Q=Ut(G);if(Q.tableId!==n)continue;let X=Q.recordId;if(I==null||wq(I,X)){let $=Q.getValue(i,T,x);if(L.push({id:X,localTime:x,value:$,version:Q.version,type:Q.type}),--v<=0)break}}catch(Q){xe.default.error("Error getting history entry",x,Q)}for(let x=L.length;x>0;)P(L[--x]);L[0]&&(y.startTime=L[0].localTime)}else if(!_.omitCurrent){for(let{key:L,value:x,version:G,localTime:Q,size:X}of i.getRange({start:I??!1,end:I==null?void 0:[I,wl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(P({id:L,localTime:Q,value:x,version:G,type:"put",size:X}),y.queue?.length>bq&&await y.waitForDrain()===!1))return}}else{v&&!U&&(U=0);let L=this.#n?.localTime;if(L===Mb&&(i.cache?.delete(I),this.#n=i.getEntry(I),xe.default.trace?.("re-retrieved record",L,this.#n?.localTime),L=this.#n?.localTime),xe.default.trace?.("Subscription from",U,"from",I,L),U<L){let x=[],G=L;do{let Q=l.get(G);if(Q){_.omitCurrent=!0;let X=Ut(Q),$=X.getValue(i,T,G);T&&(X.type="put"),x.push({id:I,value:$,localTime:G,...X}),G=X.previousLocalTime}else break;v&&v--}while(G>U&&v!==0);for(let Q=x.length;Q>0;)P(x[--Q]);y.startTime=L}!_.omitCurrent&&this.doesExist()&&P({id:I,localTime:L,value:this.#e,version:this.#r,type:"put"})}for(let L of C)P(L);C=null})();function P(I){Xe(I.size??1,"db-message",s,null),y.send(I)}return o(P,"send"),_.listener&&y.on("data",_.listener),y}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let y=!0,b=this.getContext();return _.checkPermission&&(y=this.allowCreate(b.user,_,b)),xs(y,P=>{if(!P)throw new ut.AccessViolation(b.user);let I=Ar(_);this._writePublish(I,T,C)})}}_writePublish(_,T,C){let y=br(this.getContext());_??=null,_!==null&&Mr(_);let b=this.getContext();y.addWrite({key:_,store:i,entry:this.#n,nodeName:b?.nodeName,validate:o(()=>{b?.source||(y.checkOverloaded(),this.validate(T))},"validate"),before:Te.publish?.bind(this,b,_,T),beforeIntermediate:Fe.publish?.bind(this,b,_,T),commit:o((P,I,v)=>{I===void 0&&A&&!g&&kc(),xe.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(P).toISOString()}`),R(_,I?.value??null,I,I?.version||P,0,!0,{user:b?.user,residencyId:C?.residencyId,expiresAt:b?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let C,y=o((b,P,I)=>{if(P.type&&b!=null)if(T&&b.__op__&&(b=b.value),P.properties){typeof b!="object"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an object${P.type?" ("+P.type+")":""}`);let v=P.properties;for(let U=0,L=v.length;U<L;U++){let x=v[U];if(x.relationship||x.computed){_.hasOwnProperty(x.name)&&(C||(C=[])).push(`Computed property ${I}.${x.name} may not be directly assigned a value`);continue}let G=y(b[x.name],x,I+"."+x.name);G&&(b[x.name]=G)}if(P.sealed&&b!=null&&typeof b=="object")for(let U in b)v.find(L=>L.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${I}`)}else switch(P.type){case"Int":(typeof b!="number"||b>>0!==b)&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(v=>typeof v=="string")||(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a string`);break;case"Boolean":typeof b!="boolean"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a bigint`)}break;case"Bytes":if(!(b instanceof Uint8Array)){if(typeof b=="string")return Buffer.from(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(b instanceof Is)){if(typeof b=="string"&&(b=Buffer.from(b)),b instanceof Buffer)return createBlob(b,{type:"text/plain"});(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Blob`)}break;case"array":if(Array.isArray(b)){if(P.elements)for(let v=0,U=b.length;v<U;v++){let L=b[v],x=y(L,P.elements,I+"[*]");x&&(b[v]=x)}}else(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an Array`);break}P.nullable===!1&&b==null&&(C||(C=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let b=0,P=S.length;b<P;b++){let I=S[b];if(I.relationship||I.computed){Object.hasOwn(_,I.name)&&(C||(C=[])).push(`Computed property ${I.name} may not be directly assigned a value`);continue}if(!T||I.name in _){let v=y(_[I.name],I,I.name);v!==void 0&&(_[I.name]=v)}}if(f)for(let b in _)S.find(P=>P.name===b)||(C||(C=[])).push(`Property ${b} is not allowed`);if(C)throw new ut.ClientError(C.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let C of _){if(!C.name)throw new ut.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new ut.ClientError("Attribute names cannot include backticks or forward slashes");Cae(C.name),T.push(C)}return Ze({table:s,database:c,schemaDefined:u,attributes:T}),Le.indexingOperation}static async removeAttributes(_){let T=S.filter(C=>!_.includes(C.name));return Ze({table:s,database:c,schemaDefined:u,attributes:T}),Le.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,T=aN.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,C=1e3/2,y=performance.now(),b=Math.floor(T/2),P=_?.exactCount,I=0,v=0,U;for(let{value:L}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(L!=null&&I++,v++,await Qa(),!P&&v<b&&performance.now()-y>C){U=v;break}if(U){let L=I;I=0;for(let{value:z}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))z!=null&&I++,await Qa();let x=U*2,G=(I+L)/x,Q=Math.pow((I-L+1)/U/2,2)+G*(1-G)/x,X=Math.max(Math.sqrt(Q)*T,1),$=Math.round(G*T),be=Math.max($-1.96*X,I+L),pe=Math.min($+1.96*X,T),de=Math.pow(10,Math.round(Math.log10(X)));return de>$&&(de=de/10),I=Math.round($/de)*de,{recordCount:I,estimatedRange:[Math.round(be),Math.round(pe)]}}return{recordCount:I}}static updatedAttributes(){tr=this.propertyResolvers={$id:o((_,T,C)=>({value:C.key}),"$id"),$updatedtime:o((_,T,C)=>C.version,"$updatedtime"),$updatedTime:o((_,T,C)=>C.version,"$updatedTime"),$expiresAt:o((_,T,C)=>C.expiresAt,"$expiresAt"),$record:o((_,T,C)=>C?{value:_}:_,"$record"),$distance:o((_,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(F=_),_.resolve=null;let T=_.relationship,C=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Kf=!0,T.to)_.elements?.definition?(tr[_.name]=_.resolve=(y,b,P,I)=>{let v=y[T.from?T.from:t],U=_.elements.definition.tableClass;return I?Fu({attribute:T.to,value:v},br(b).getReadTxn(),!1,U,!1).map(L=>L&&L.key!==void 0?L:U.primaryStore.getEntry(L,{transaction:br(b).getReadTxn()})).asArray:U.search([{attribute:T.to,value:v}],b).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.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(T.from){let y=_.definition||_.elements?.definition;y?(tr[_.name]=_.resolve=(b,P,I,v)=>{let U=b[T.from];if(U===void 0)return;if(_.elements){let x,G=U?.map(Q=>{let X=y.tableClass.primaryStore[v?"getEntry":"get"](Q,{transaction:br(P).getReadTxn()});return X?.then&&(x=!0),Le.loadAsInstance===!1&&Object.freeze(v?X?.value:X),X});return T.filterMissing?x?Promise.all(G).then(Q=>Q.filter(Nq)):G.filter(Nq):x?Promise.all(G):G}let L=y.tableClass.primaryStore[v?"getEntry":"get"](U,{transaction:br(P).getReadTxn()});return Le.loadAsInstance===!1&&Object.freeze(v?L?.value:L),L},_.set=(b,P)=>{if(Array.isArray(P)){let I=P.map(v=>v.getId?.()||v[y.tableClass.primaryKey]);b[T.from]=I}else{let I=P.getId?.()||P[y.tableClass.primaryKey];b[T.from]=I}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.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(C)typeof C.from=="function"&&this.setComputedAttribute(_.name,C.from),tr[_.name]=_.resolve=(y,b,P)=>{let I=typeof C.from=="string"?y[C.from]:y,v=this.userResolvers[_.name];if(v)return v(I,b,P);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 y=r[_.name].customIndex;tr[_.name]=(b,P,I)=>{let v=b[_.name];return y.propertyResolver(v,P,I)},tr[_.name].directReturn=!0}}ip(this,this),ip(zf,this,!0);for(let _ of S){let T=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,qu.getStore())},set(C){return _.set(this,C)},configurable:!0})}}static setComputedAttribute(_,T){let C=Hi(S,_);if(!C){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let C;for(let{key:y,value:b}of l.getRange({start:0,end:_}))await Qa(),Ut(b).tableId===n&&(C=q_(l,y,b));if(T)for(let y of i.getRange({start:0,versions:!0})){let{key:b,value:P,localTime:I}=y;await Qa(),P===null&&I<_&&(C=nl(i,y))}await C}static async*getHistory(_=0,T=1/0){for(let{key:C,value:y}of l.getRange({start:_||1,end:T})){await Qa();let b=Ut(y);b.tableId===n&&(yield{id:b.recordId,localTime:C,version:b.version,type:b.type,value:b.getValue(i,!0,C),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let C=i.getEntry(_);if(!C)return T;let y=C.localTime;if(!y)throw new Error("The entry does not have a local audit time");let b=0;do{await Qa();let P=l.get(y);if(P){let I=Ut(P);T.push({id:I.recordId,localTime:y,version:I.version,type:I.type,value:I.getValue(i,!0,y),user:I.user}),y=I.previousLocalTime}else break}while(b<1e3&&y);return T.reverse()}static cleanup(){W?.remove()}}let QE=jg(async(K,_,T)=>{for(let C of Le.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;_.source=C;let y=await C.get(K,_);if(y)return y}},()=>{throw new ut.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Le.updatedAttributes();let jf=Le.prototype;return h&&Le.setTTLExpiration(h/1e3),J&&JE(),Le;function yo(K,_,T){let C;for(let y in r){let b=r[y],P=b.isIndexing,I=tr[y],v=T&&(I?I(T):T[y]),U=_&&(I?I(_):_[y]);if(v===U&&!P)continue;if(b.customIndex){b.customIndex.index(K,v,U);continue}C=!0;let L=b.indexNulls,x=(0,Ip.getIndexedValues)(v,L),G=(0,Ip.getIndexedValues)(U,L);if(s==="OrganizationRole"&&xe.default.error?.({tableName:s,id:K,key:y,valuesToAdd:x,valuesToRemove:G}),G?.length>0){let Q=new Set(G);if(x=x?x.filter(X=>{if(Q.has(X))Q.delete(X);else return!0}):[],G=Array.from(Q),(G.length>0||x.length>0)&&yq){let X=G.concat(x).map($=>({key:$,value:K}));b.prefetch(X,Iq)}for(let X=0,$=G.length;X<$;X++)b.remove(G[X],K)}else x?.length>0&&yq&&b.prefetch(x.map(Q=>({key:Q,value:K})),Iq);if(x)for(let Q=0,X=x.length;Q<X;Q++)b.put(x[Q],K)}return C}o(yo,"updateIndices");function Mr(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Aq)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,wl.writeKey)(K,Uae,0)>Aq)throw new Error("Primary key size is too large: "+K.length);return!0}o(Mr,"checkValidId");function Ar(K){return typeof K=="object"&&K?K.id:K}o(Ar,"requestTargetToId");function Qf(K){return typeof K=="object"&&K&&K.isCollection}o(Qf,"isSearchTarget");function fA(K){}o(fA,"isRequestTarget");function Bc(K,_,T,C,y){if(Le.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let P=Hc(Le.getResidencyById(K));if(P&&!P.includes(server.hostname)&&N)return N({key:K,residency:P}).then(y)}let b=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return y(null,K);let P=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(Pq.default.trace?.("Recording db-read action for",`${c}.${s}`),Xe(P?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(P?.value),P?.residencyId&&P.metadataFlags&Dn&&N&&T.ensureLoaded&&_?.replicateFrom!==!1?N(P).then(I=>y(I,K),I=>(xe.default.error?.("Error loading remote record",K,P,T,I),y(null,K))):(P&&_&&(P?.version>(_.lastModified||0)&&(_.lastModified=P.version),P?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=P.localTime)),y(P,K))},"whenPrefetched");return C?b():re>0?(re--,b()):new Promise((P,I)=>{re===0?(re--,i.prefetch([K],()=>{v(),U()})):(ue.push(K),ce.push(U),ue.length>dA&&(re--,v()));function v(){if(ue.length>0){let L=ce;i.prefetch(ue,()=>{re===-1?v():re++;for(let x of L)x()}),ue=[],ce=[],Re>2&&Re--}else re=Re,Re<jE&&Re++}o(v,"prefetch");function U(){try{P(b())}catch(L){I(L)}}o(U,"load")})}o(Bc,"loadLocalRecord");function Vr(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return xae;let C=T[c],y,b=C?.tables;if(b)return b[s];if(c==="data"&&(y=T[s])&&!y.tables)return y}o(Vr,"getTablePermissions");function Aa(K,_,T,C){if(O){let y=!1;if(T.noCache?y=!0:(_?(!_.value||_.metadataFlags&(Dn|va)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(y=!0):y=!0,zr(!y,"cache-hit",s)),y){let b=yu(K,_,T).then(P=>(P?.value&&P?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),T&&(P?.version>(T.lastModified||0)&&(T.lastModified=P.version),T.lastRefreshed=Date.now()),P));if(T?.onlyIfCached||_?.value&&C?.allowStaleWhileRevalidate?.(_,K)){if(b.catch(P=>xe.default.warn?.(P)),T?.onlyIfCached&&!C.doesExist())throw new ut.ServerError("Entry is not cached",504);return}else return b}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Le.evict(_.key,_.value,_.version),_.value=null,{then(y){return y(_)}}}o(Aa,"ensureLoadedFromSource");function br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new bo,_.lmdbDb=i,_;_=T}while(!0)}else return new __}o(br,"txnForContext");function Tu(K,_,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let b=tr,P=C;for(let I=0,v=_.length;I<v;I++){let U=_[I],L=b?.[U];P=L&&P?L(P,T,K):P?.[U],K=null,b=L?.definition?.tableClass?.propertyResolvers}return P}let y=tr[_];return y?y(C,T,K):C[_]}o(Tu,"getAttributeValue");function Jf(K,_,T,C,y){let b=y?.length,P={transaction:C,lazy:b>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},I;function v(U,L){let x=U?.value;if(!x)return Ja.SKIP;for(let G=0;G<b;G++)if(!I?.includes(G)&&!y[G](x,U))return Ja.SKIP;return L!==void 0&&(U.key=L),U}if(o(v,"processEntry"),b>0||!K.hasEntries){let U=K.map(L=>{if(I=null,typeof L=="object"&&L?.key!==void 0)return b>0?v(L):L;if(L==null)return Ja.SKIP;for(let x=0;x<b;x++){let Q=y[x].idFilter;if(Q){if(!Q(L))return Ja.SKIP;I||(I=[]),I.push(x)}}return Bc(L,T,P,!1,v)});return Array.isArray(K)&&(U=U.filter(L=>L!==Ja.SKIP)),U.hasEntries=!0,U}return K}o(Jf,"transformToEntries");function ba(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),y=_.localTime,b=y&&l.get(y);if(b){let P,I,v=Ut(b);for(let U in C)C[U]===T&&(P=U),C[U]===v.nodeId&&(I=U);if(P>I)return 1;if(P===I)return 0}}return-1}return 1}o(ba,"precedesExistingVersion");async function yu(K,_,T){let C=_?.metadataFlags,y=_?.version,b,P;if(!i.attemptLock(K,y,()=>{clearTimeout(P);let L=i.getEntry(K);!L||!L.value||L.metadataFlags&(Dn|va)?b(yu(K,i.getEntry(K),T)):b(L)}))return new Promise(L=>{b=L,P=setTimeout(()=>{i.unlock(K,y)},Mae)});let I=_?.value,v={requestContext:T,replacingRecord:I,replacingEntry:_,replacingVersion:y,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((L,x)=>{let G;xs(At(v,async Q=>{let X=performance.now(),$,be,pe;try{$=await QE(K,v,_),pe=C&Dn;let z=v.lastModified||pe&&y;be=pe||z>y||!I,z||(z=(0,Ip.getNextMonotonicTime)());let ne=performance.now()-X;if(Xe(ne,"cache-resolution",s,null,"success"),U&&Ap(U,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),Q.timestamp=z,h&&v.expiresAt==null&&(v.expiresAt=Date.now()+h),$){if(typeof $!="object")throw new Error("Only objects can be cached and stored in tables");if($.status>0&&$.headers)if($.status>=300)if($.status===304)$=I,z=y;else throw new ut.ServerError($.body||"Error from source",$.status);else $=$.body;typeof $.toJSON=="function"&&($=$.toJSON()),t&&$[t]!==K&&($[t]=K)}G=!0,L({key:K,version:z,value:$})}catch(z){z.message+=` while resolving record ${K} for ${s}`,I&&((z.code==="ECONNRESET"||z.code==="ECONNREFUSED"||z.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(z.statusCode===500||z.statusCode===502||z.statusCode===503||z.statusCode===504))?(L({key:K,version:y,value:I}),xe.default.trace?.(z.message,"(returned stale record)")):x(z);let ne=performance.now()-X;Xe(ne,"cache-resolution",s,null,"fail"),U&&Ap(U,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),v.transaction.abort();return}if(T?.noCacheStore||v.noCacheStore){v.transaction.abort();return}br(v).addWrite({key:K,store:i,entry:_,nodeName:"source",commit:o((z,ne)=>{if(ne?.version!==y)return;let me=yo(K,I,$);if($){Fe.put?.(v,K,$),ne&&(T.previousResidency=Le.getResidencyRecord(ne.residencyId));let Ee,fe=!1,De,ve=Hc(Le.getResidency($,T));if(ve){if(!ve.includes(server.hostname))if(Ee=$,fe=!0,Le.getResidencyById)$=void 0;else{$=null;for(let $e in r)$||($={}),$[$e]=Ee[$e]}De=Ro(ve)}xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),R(K,$,ne,z,fe?Dn:0,g&&(be||fe)||null,{user:v?.user,expiresAt:v.expiresAt,residencyId:De,tableToTrack:s},"put",!!pe,Ee)}else ne&&(Fe.delete?.(v,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),g||A?R(K,null,ne,z,0,g&&be||null,{user:v?.user,tableToTrack:s},"delete",!!pe):nl(i,ne,y))},"commit")})}),()=>{i.unlock(K,y)},Q=>{i.unlock(K,y),G&&xe.default.error?.("Error committing cache update",Q)})})}o(yu,"getFromSource");function Fc(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new ut.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new ut.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Fc,"checkContextPermissions");function kc(K){let _=!1;if(K&&(K-Rr>1&&(_=!0),Rr=K),!(qe===er&&!_)&&(er=qe,(0,bl.getWorkerIndex)()===(0,bl.getWorkerCount)()-1))return qt&&clearTimeout(qt),qe?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let y=qe/(1+Rr),b=_?Date.now():Math.ceil((Date.now()-C.getTime())/y)*y+C.getTime(),P=o(I=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(I)}`),qt=setTimeout(()=>te=te.then(async()=>{if(P(Math.max(I+qe,Date.now())),i.rootStore.status!=="open"){clearTimeout(qt);return}let v=50,U=new Array(v),L=0,x=Math.pow(Rr,8)*(Il.get(B.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),G=E/Math.pow(Math.max(Rr,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${G}ms`);function Q(X,$,be,pe){let de=X+G-Date.now();if(de<0)return!0;if(Rr){let z=i.lastSize;return be&Ln&&Ou(pe,ne=>{ne.size&&(z+=ne.size)}),xe.default.trace?.(`shouldEvict adjusted ${de} ${z}, ${de*(X-$)/z} < ${x}`),de*(X-$)/z<x}return!1}o(Q,"shouldEvict");try{let X=0;for(let $ of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:be,value:pe,version:de,expiresAt:z,metadataFlags:ne}=$,me;pe===null&&!g&&de+Dae<Date.now()?me=nl(i,$,de):z!=null&&Q(z,de,ne,pe)&&(me=Le.evict(be,pe,de),X++),me&&(await U[L],U[L]=me.catch(Ee=>{xe.default.error?.("Cleanup error",Ee)}),++L>=v&&(L=0)),await Qa()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${X} entries`)}catch(X){xe.default.warn?.(`Error in cleanup scan for ${s}:`,X)}T(void 0),Rr=0}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");P(b)}):void 0}o(kc,"scheduleCleanup");function Ru(){W=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(Ru,"addDeleteRemoval");function JE(){(0,bl.getWorkerIndex)()===0&&setInterval(async()=>{if(!xc){xc=!0;try{let K=J.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of _.getValues(T)){let y=i.getEntry(C);y?.value?y.value[K]<Date.now()&&Le.evict(C,y.value,y.version):i.ifVersion(C,y?.version,()=>_.remove(T,C))}await Qa()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{xc=!1}}},Lae).unref()}o(JE,"runRecordExpirationEviction");function Hc(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(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Hc,"residencyFromFunction");function Ro(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}o(Ro,"getResidencyId")}function oN(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 Iq(){}function Jg(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 Qg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Qg(+e);case"Float":return e==="null"?null:Qg(+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;Bae.test(e)||(e+="Z");let n=new Date(e);return Qg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Xg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Qg(e){if(isNaN(e))throw new SyntaxError;return e}function wq(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 xs(e,t,r){return e?.then?e.then(t,r):t(e)}function Nq(e){return e!=null}function Bs(e){try{return JSON.stringify(e)}catch{return e}}function Fae(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ja,Ip,Cq,Oq,Il,ut,wp,Np,xe,wl,bl,Xg,aN,Pq,Nae,Cae,Oae,Pae,Lae,Dae,yq,Mae,Rq,vae,Dn,va,Uae,Aq,bq,xae,dUe,Bae,Qa,ng=ie(()=>{H();Ja=require("lmdb"),Ip=w(Cn()),Cq=w(require("lodash")),Oq=w(mm());Ua();hm();Il=w(ae());Kb();ut=w(_e()),wp=w(ko()),Np=w(ts());Oe();rg();xe=w(Jn());ZI();Ca();wl=require("ordered-binary"),bl=w(Je());Io();Xg=w(oe());el();Os();T_();bp();aN=w(require("node:fs"));ws();B_();Pq=w(j());iN();({sortBy:Nae}=Cq.default),{validateAttribute:Cae}=Oq.default,Oae=new Uint8Array(9);Oae[8]=192;Pae=1/0,Lae=6e4,Dae=864e5;Il.initSync();yq=Il.get(B.STORAGE_PREFETCHWRITES),Mae=1e4,Rq=1,vae=2,Dn=1,va=8,Uae=Buffer.allocUnsafeSlow(8192),Aq=1978,bq=100,xae={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},dUe=(0,Xg.convertToMS)(Il.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Zg,"makeTable");o(oN,"attributesAsObject");o(Iq,"noop");Bae=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Jg,"coerceType");o(Qg,"rejectNaN");o(wq,"isDescendantId");Qa=o(()=>new Promise(setImmediate),"rest");o(xs,"when");o(Nq,"exists");o(Bs,"stringify");o(Fae,"hasOtherProcesses")});function eS(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 tS(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 Dq=ie(()=>{o(eS,"euclideanDistance");o(tS,"cosineDistance")});var Mq,vq,hd,Xi,pd,kae,Hae,rS,Uq=ie(()=>{Dq();Mq=require("msgpackr"),vq=w(Jn()),hd=w(_e()),Xi=(0,vq.loggerWithTag)("HNSW"),pd=Symbol.for("entryPoint"),kae=Symbol.for("key"),Hae=10,rS=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=Mq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?eS:tS,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"?[kae,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(pd);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);Xi.debug?.("setting entry point to",i),this.indexStore.put(pd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Hae),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);Xi.debug?.("setting entry point to",i),this.indexStore.put(pd,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&&Xi.info?.("should not have zero connections for",l);let A=h[E];for(let S=0;S<g.length;S++){let{id:R,distance:N,node:O}=g[S];if(R===i)continue;let F=[];if(this.optimizeRouting){let k=!1,J=O[E],W=1+this.optimizeRouting*(1+.5*S/this.M);for(let ue=0;ue<J.length;ue++){let{id:ce,distance:re}=J[ue],Re=1+this.optimizeRouting*(1+.5*ue/this.M);for(let Te=0;Te<A.length;Te++){let{id:Fe,distance:qe}=A[Te];if(Fe===ce){N*W>qe+re?k=!0:re*Re>N+qe&&(F.push({fromId:Fe,toId:R}),F.push({fromId:R,toId:Fe}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;A.push({id:R,distance:N});for(let{fromId:k,toId:J}of F){let W=d(k);W||(W=d(k,this.indexStore.get(k)));for(let ue=0;ue<W[E].length;ue++)if(W[E][ue].id===J){Object.isFrozen(W[E])&&(W[E]=W[E].slice()),W[E].splice(ue,1);break}}let te=c[E],q=te?.find(({id:k})=>k===R);if(q){let k=te?.indexOf(q);te.copied||(te=[...te],te.copied=!0,c[E]=te),te.splice(k,1)}else this.addConnection(R,d(R,O),i,E,N,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(pd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);Xi.debug?.("setting entry point to",l),this.indexStore.put(pd,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&&(Xi.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(pd);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 hd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new hd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=tS;else if(s==="euclidean")c=eS;else{if(s)throw new hd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new hd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new hd.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){Xi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||Xi.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)){Xi.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&&Xi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?Xi.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"?eS:tS);let c=a(s.target,t);return i.set(n,c),c}return t}}});var cN,xq=ie(()=>{Uq();cN={HNSW:rS}});var mt={};Ie(mt,{database:()=>td,databaseEnvs:()=>Ko,databases:()=>Me,dropDatabase:()=>sw,dropTableMeta:()=>Yae,getDatabases:()=>ct,getDefaultCompression:()=>lS,getTables:()=>Gae,onRemovedDB:()=>vp,onUpdatedTable:()=>Nl,readMetaDb:()=>Cp,resetDatabases:()=>Td,table:()=>Ze,tables:()=>hn});function Mp(e,t){let r=aS.OpenDBIObject??aS.default.OpenDBIObject;return new r(e,t)}function Gae(){return oS||ct(),hn||{}}function ct(){if(oS)return Me;oS=!0,gd=new Map;let e=(0,Yt.getHdbBasePath)()&&(0,Bt.join)((0,Yt.getHdbBasePath)(),Gc),t=(0,Yt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Yt.get)(B.STORAGE_PATH)||e&&((0,us.existsSync)(e)?e:(0,Bt.join)((0,Yt.getHdbBasePath)(),r_)),!e)return;if((0,us.existsSync)(e))for(let n of(0,us.readdirSync)(e,{withFileTypes:!0})){let s=(0,Bt.basename)(n.name,".mdb");n.isFile()&&(0,Bt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&Cp((0,Bt.join)(e,n.name),null,s)}if((0,us.existsSync)((0,_d.getBaseSchemaPath)())){for(let n of(0,us.readdirSync)((0,_d.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Bt.join)((0,_d.getBaseSchemaPath)(),n.name),i=(0,Bt.join)((0,_d.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,us.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,Bt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,Bt.join)(i,a.name);Cp((0,Bt.join)(s,a.name),(0,Bt.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,us.existsSync)(i))for(let c of(0,us.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Bt.extname)(c.name).toLowerCase()===".mdb"&&Cp((0,Bt.join)(i,c.name),(0,Bt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,Bt.join)(l.path,(0,Bt.basename)(c+".mdb"));(0,us.existsSync)(u)&&Cp(u,c,n,null,!0)}}for(let n in Me){let s=gd.get(n);if(s){let i=Me[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 Me[n],n==="data"){for(let i in hn)delete hn[i];delete hn[cS]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"];if((0,Yt.get)(B.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let n of r)Me.system[n]&&(Me.system[n].replicate=!1);return gd=null,Me}function Td(){oS=!1;for(let[,e]of Ko)e.needsDeletion=!0;ct();for(let[e,t]of Ko)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Ko.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],Pp.forEach(i=>i(t.databaseName));break}}return Me}function Cp(e,t,r=dN,n,s){let i=new lN.default(e,!1);try{let a=Ko.get(e);a?a.needsDeletion=!1:(a=(0,Sd.open)(i),Ko.set(e,a));let c=new Mp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(nS.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,us.existsSync)(n)&&(i.path=n,u=(0,Sd.open)(i),u.isLegacy=!0):u=H_(a));let d=qq(r),f=d[cS],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 re of E)if(re.is_hash_attribute||re.isPrimaryKey){g=re;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={},R=[],N,O,F=typeof g.audit=="boolean"?g.audit:(0,Yt.get)(B.LOGGING_AUDITLOG),te=g.trackDeletes,q=g.expiration,k=g.eviction,J=g.sealed,W=g.splitSegments,ue=g.replicate;if(A)S=A.indices,R=A.attributes,A.schemaVersion++;else{N=g.tableId,N?N>=(l.get(Ed)||0)&&(l.putSync(Ed,N+1),Cr.info(`Updating next table id (it was out of sync) to ${N+1} for ${p}`)):(g.tableId=N=l.get(Ed),N||(N=1),Cr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(Ed,N+1),l.putSync(g.key,g));let re=new Mp(!g.is_hash_attribute,g.is_hash_attribute);if(re.compression=g.compression,re.compression){let Re=(0,Yt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||Hq;re.compression.threshold=Re}O=X_(a.openDB(g.key,re),a),a.databaseName=r,O.tableId=N}let ce;for(let re of E){re.attribute=re.name;try{if(!re.is_hash_attribute&&(re.indexed||re.attribute&&!re.name)){if(!S[re.name]){let Te=$q(re.key,a,re);S[re.name]=Te,S[re.name].indexNulls=re.indexNulls}let Re=R.find(Te=>Te.name===re.name);Re?R.splice(R.indexOf(Re),1,re):R.push(re),ce=!0}}catch(Re){Cr.error("Error trying to update attribute",re,R,S,Re)}}for(let re of R)if(!E.find(Te=>Te.name===re.name)){if(re.is_hash_attribute){Cr.error("Unable to remove existing primary key attribute",re);continue}re.indexed&&(R.splice(R.indexOf(re),1),ce=!0)}if(A)ce&&(A.schemaVersion++,A.updatedAttributes());else{A=Gq(d,p,Zg({primaryStore:O,auditStore:u,audit:F,sealed:J,splitSegments:W,replicate:ue,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:te,tableName:p,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let re of Op)re(A)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function qq(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=hn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),gd&&!gd.has(e)){let r=new Set;t[cS]=r,gd.set(e,r)}return t}function Gq(e,t,r){return e[t]=r,r}function td({database:e,table:t}){e||(e=dN),ct();let r=qq(e),n=(0,Bt.join)((0,Yt.getHdbBasePath)(),Gc),s=(0,Yt.get)(B.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Yt.get)(B.STORAGE_PATH)||((0,us.existsSync)(n)?n:(0,Bt.join)((0,Yt.getHdbBasePath)(),r_));let a=(0,Bt.join)(n,(i?t:e)+".mdb"),c=Ko.get(a);if(!c||c.status==="closed"){let l=new lN.default(a,!1);c=(0,Sd.open)(l),Ko.set(a,c)}return c.auditStore||(c.auditStore=H_(c)),c}async function sw(e){if(!Me[e])throw new Error("Schema does not exist");let t=Me[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Ko.delete(r.path),r.status==="open"&&(await r.close(),await Lp.remove(r.path));if(r||(r=td({database:e,table:null}),r.status==="open"&&(await r.close(),await Lp.remove(r.path))),e==="data"){for(let n in hn)delete hn[n];delete hn[cS]}delete Me[e],Pp.forEach(n=>n(e)),await nb(r)}function $q(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&cN[r.indexed.type]?.useObjectStore,s=new Mp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=cN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Cr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=dN);let h=td({database:r,table:t}),E=Me[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,R;m==null&&(m=!0);let N=new Mp(!1);for(let W of a)W.attribute&&!W.name?(W.name=W.attribute,W.indexed=!0):W.attribute=W.name,W.expiresAt&&(W.indexed=!0);let O,F;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 W=h.auditStore;S=a.find(Re=>Re.isPrimaryKey)||{},A=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=lS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Yt.get)(B.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 ue=new Mp(!1,!0);ue.compression=S.compression;let ce=t+"/";if(R=h.dbisDb=h.openDB(nS.INTERNAL_DBIS_NAME,N),J(),R.get(ce))return F&&F(),Td(),Ze(e);let re=X_(h.openDB(ce,ue),h);h.databaseName=r,re.tableId=R.get(Ed),Cr.trace(`Assigning new table id ${re.tableId} for ${t}`),re.tableId||(re.tableId=1),R.put(Ed,re.tableId+1),S.tableId=re.tableId,g=Gq(E,t,Zg({primaryStore:re,auditStore:W,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:A,tableName:t,tableId:re.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,O=!0,R.put(ce,S)}let te=g.indices;R=R||(h.dbisDb=h.openDB(nS.INTERNAL_DBIS_NAME,N)),g.dbisDB=R;let q=[];for(let{key:W,value:ue}of R.getRange({start:!0})){let[ce,re]=W.toString().split("/");if(re===""&&(re=ue.name),re){if(ce!==t)continue}else continue;let Re=a.find(Fe=>Fe.name===re),Te=!Re?.indexed&&ue.indexed&&!ue.isPrimaryKey;if((!Re||Te)&&(J(),O=!0,Re||R.remove(W),Te)){let Fe=g.indices[ce];Fe&&q.push(Fe)}}let k=[];try{for(let W of a||[]){if((W.relationship||W.computed)&&(O=!0,W.relationship))continue;let ue=t+"/"+(W.name||"");Object.defineProperty(W,"key",{value:ue,configurable:!0});let ce=R.get(ue);if(W.isPrimaryKey){if(ce=ce||R.get(ue=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ce.expiration||void 0)||(+s||void 0)!==(+ce.eviction||void 0)||W.type!==ce.type){let Re={...ce};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),d!==void 0&&(Re.replicate=d),W.type&&(Re.type=W.type),O=!0,J(),R.put(ue,Re)}continue}ce?.attribute&&!ce.name&&(ce.indexed=!0);let re=!ce||ce.type!==W.type||JSON.stringify(ce.indexed)!==JSON.stringify(W.indexed)||ce.nullable!==W.nullable||ce.version!==W.version||JSON.stringify(ce.properties)!==JSON.stringify(W.properties)||JSON.stringify(ce.elements)!==JSON.stringify(W.elements);if(W.indexed){let Re=$q(ue,h,W);(re||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,J(),ce=R.get(ue),(re||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,W.indexNulls===void 0&&(W.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(W.lastIndexedKey=ce?.lastIndexedKey??void 0,W.indexingPID=process.pid,Re.isIndexing=!0,Object.defineProperty(W,"dbi",{value:Re}),k.push(W))),R.put(ue,W)),ce?.indexNulls&&W.indexNulls===void 0&&(W.indexNulls=!0),Re.indexNulls=W.indexNulls,te[W.name]=Re}else re&&(O=!0,J(),R.put(ue,W))}}finally{F&&F()}if(O&&(g.schemaVersion++,g.updatedAttributes()),Cr.trace(`${t} table loading, running index`),k.length>0||q.length>0?g.indexingOperation=Kae(g,k,q):O&&sS.signalSchemaChange(new iS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,O)for(let W of Op)W(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Cr.trace(`${t} table loaded`),g;function J(){F||h.transactionSync(()=>({then(W){F=W}}))}o(J,"startTxn")}async function Kae(e,t,r){try{Cr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await sS.signalSchemaChange(new iS.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,Sd.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,R=m&&(S?S(m):m[g]);if(A.customIndex){A.customIndex.index(f,R);continue}let N=(0,Bq.getIndexedValues)(R);if(N)for(let O=0,F=N.length;O<F;O++)A.put(N[O],f)}catch(S){a[g]||(a[g]=!0,Cr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Cr.error(h)}),Dp.workerData&&Dp.workerData.restartNumber!==kq.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>$ae?await s:d>Vae&&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 sS.signalSchemaChange(new iS.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 Yae({table:e,database:t}){let r=td({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 Nl(e){return Op.push(e),{remove(){let t=Op.indexOf(e);t>-1&&Op.splice(t,1)}}}function vp(e){return Pp.push(e),{remove(){let t=Pp.indexOf(e);t>-1&&Pp.splice(t,1)}}}function lS(){let e=(0,Yt.get)(B.STORAGE_COMPRESSION),t=(0,Yt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Yt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||Hq,n={startingOffset:32};return t&&(n.dictionary=Lp.readFileSync(t)),r&&(n.threshold=r),e&&n}var Yt,nS,Sd,Bt,us,_d,lN,Lp,uN,Bq,sS,iS,Dp,Fq,kq,aS,qae,Cr,dN,cS,Hq,hn,Me,Ed,Op,Pp,oS,Ko,gd,$ae,Vae,Oe=ie(()=>{Yt=w(ae()),nS=w(Vt()),Sd=require("lmdb"),Bt=require("path"),us=require("fs"),_d=w(Rt());ng();lN=w($m());H();Lp=w(require("fs-extra")),uN=w(oi()),Bq=w(Cn()),sS=w(ko()),iS=w(ts()),Dp=require("worker_threads"),Fq=w(j()),kq=w(Je());Io();el();ws();xq();aS=w(Gm()),{forComponent:qae}=Fq.default;o(Mp,"OpenDBIObject");Cr=qae("storage"),dN="data",cS=Symbol("defined-tables"),Hq=((0,Yt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Yt.initSync)();hn=Object.create(null),Me=Object.create(null);(0,uN._assignPackageExport)("databases",Me);(0,uN._assignPackageExport)("tables",hn);Ed=Symbol.for("next-table-id"),Op=[],Pp=[],Ko=new Map;o(Gae,"getTables");o(ct,"getDatabases");o(Td,"resetDatabases");o(Cp,"readMetaDb");o(qq,"ensureDB");o(Gq,"setTable");o(td,"database");o(sw,"dropDatabase");o($q,"openIndex");o(Ze,"table");$ae=1e3,Vae=10;o(Kae,"runIndexing");o(Yae,"dropTableMeta");o(Nl,"onUpdatedTable");o(vp,"onRemovedDB");o(lS,"getDefaultCompression")});var pN={};Ie(pN,{loadGQLSchema:()=>jae,start:()=>mN,startOnMainThread:()=>zae});function mN({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 F=function(q){if(q.kind==="NonNullType"){let W=F(q.type);return W.nullable=!1,W}if(q.kind==="ListType")return{type:"array",elements:F(q.type)};let J={type:q.name?.value};return Object.defineProperty(J,"location",{value:q.loc.startToken}),J};o(F,"getProperty");let S=A.name.value,R=[],N={table:null,database:null,properties:R};m.set(S,N),i.allTypes.set(S,N);for(let q of A.directives){if(q.name.value==="table"){for(let J of q.arguments)N[J.name.value]=J.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=S),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,p.push(N)}if(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="splitSegments"&&(N.splitSegments=!0),q.name.value==="replicate"&&(N.replicate=!0),q.name.value==="export"){N.export=!0;for(let J of q.arguments)typeof N.export!="object"&&(N.export={}),N.export[J.name.value]=J.value.value}}let O=!1,te={};for(let q of A.fields){let k=F(q.type);k.name=q.name.value,R.push(k),te[k.name]=void 0;for(let J of q.directives){let W=J.name.value;if(W==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",J.loc):(k.isPrimaryKey=!0,O=!0);else if(W==="indexed"){let ue={};for(let ce of J.arguments||[])ue[ce.name.value]=ce.value.value;k.indexed=ue}else if(W==="computed"){for(let ue of J.arguments||[])if(ue.name.value==="from"){let ce=ue.value.value;k.computed={from:g(ce,ue,te)},k.version==null&&(k.version=ce)}else ue.name.value==="version"&&(k.version=ue.value.value);k.computed=k.computed||!0}else if(W==="relationship"){let ue={};for(let ce of J.arguments)ue[ce.name.value]=ce.value.value;k.relationship=ue}else if(W==="createdTime")k.assignCreatedTime=!0;else if(W==="updatedTime")k.assignUpdatedTime=!0;else if(W==="expiresAt")k.expiresAt=!0;else if(W==="allow"){let ue=k.authorizedRoles=[];for(let ce of J.arguments)ce.name.value==="role"&&ue.push(ce.value.value)}else server.knownGraphQLDirectives.includes(W)&&console.warn(`@${W} is an unknown directive, at`,J.loc)}}N.type=S,S==="Query"&&(h=N)}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):Wae.includes(A.type)||(0,Kq.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,fN.dirname)(n),A.tableClass):i.set((0,fN.dirname)(n)+"/"+(A.export.name||A.type),A.tableClass,A.export));function g(A,S,R){return new Vq.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()(R)}o(g,"createComputedFrom")}}var fN,Vq,Kq,Wae,zae,jae,Yq=ie(()=>{fN=require("path"),Vq=require("node:vm");Oe();Kq=w(Je());xa();Wae=["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(mN,"start");zae=mN,jae=o(e=>mN({ensureTable:Ze}).handleFile(e,null,null,new $u),"loadGQLSchema")});var EN={};Ie(EN,{start:()=>sce});function Qae(e){if(e.kind!==ke.Kind.OPERATION_DEFINITION&&e.kind!==ke.Kind.FRAGMENT_DEFINITION)throw new qr(`Unexpected non-executable definition type ${e.kind}.`)}function Wq(e){if(typeof e!="object"||e===null)throw new Zi("Request body must be an object.");if(!("query"in e))throw new Zi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Zi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Zi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Zi("Request body `operationName` field must be a string.")}function hN(e){return parseInt(e.value,10)}function jq(e){return parseFloat(e.value)}function Qq(e,t,r){let n=r.get(e.name.value);return Jq(n)?Xq(n,t):{attribute:t,value:n}}function Jq(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function Xq(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],Jq(n)?Xq(n,t):{attribute:t,value:n}))}function Jae(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:hN(e.value)};case ke.Kind.FLOAT:return{attribute:t,value:jq(e.value)};case ke.Kind.BOOLEAN:case ke.Kind.STRING:return{attribute:t,value:e.value.value};case ke.Kind.VARIABLE:return Qq(e.value,t,r);case ke.Kind.OBJECT:return Zq(e.value,t,r);case ke.Kind.LIST:case ke.Kind.ENUM:default:throw new qr(`Value type, ${e.value.kind}, is not supported.`)}}function Zq(e,t,r){return e.fields.flatMap(n=>Jae(n,t,r))}function Xae(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:hN(e.value)};case ke.Kind.FLOAT:return{attribute:e.name.value,value:jq(e.value)};case ke.Kind.BOOLEAN:case ke.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case ke.Kind.VARIABLE:return Qq(e.value,e.name.value,t);case ke.Kind.OBJECT:return Zq(e.value,[e.name.value],t);case ke.Kind.LIST:case ke.Kind.ENUM:default:throw new qr(`Argument type, ${e.value.kind}, is not supported.`)}}function Zae(e,t){return e.flatMap(r=>Xae(r,t))}function uS(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 qr(`Fragment \`${n}\` not found.`);return uS(s.selectionSet,t)}case ke.Kind.INLINE_FRAGMENT:return uS(r.selectionSet,t)}})}function eG(e,t){return uS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:eG(r.selectionSet,t)}:r.name.value)}async function ece(e,t,r,n){let s=Ls.getMatch(e.name.value,"graphql");if(s===void 0)throw new qr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:eG(e.selectionSet,r),conditions:Zae(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 tG(e){switch(e.kind){case ke.Kind.NULL:return null;case ke.Kind.INT:return hN(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]:tG(r.value),...t}),{});case ke.Kind.LIST:case ke.Kind.ENUM:default:throw new qr(`Value type, ${e.kind}, is not supported.`)}}function tce(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=tG(n.defaultValue)),n.type.kind===ke.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new qr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function rce(e,t,r,n){if(e.operation===ke.OperationTypeNode.SUBSCRIPTION)throw new qr("Subscriptions are not supported.");if(e.operation===ke.OperationTypeNode.MUTATION)throw new qr("Mutations are not supported yet.");let s=tce(e.variableDefinitions,t),i=await Promise.all(uS(e.selectionSet,r).map(c=>ece(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function zq({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(Qae(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 qr("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 qr(`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 qr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new qr(`Operation \`${r}\` not found.`);let l=await rce(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function nce(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 Wq(r),zq(r,e)}case"POST":{let r=await Oo(e.headers.get("content-type"),!0)(e._nodeRequest);return Wq(r),zq(r,e)}default:throw new Zi("Method Not Allowed",405,{Allow:"GET, POST"})}}function sce(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await nce(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Zi)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 qr)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 Zi)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 qr)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,qr,Zi,rG=ie(()=>{ke=w(require("graphql"));Po();xa();o(Qae,"assertExecutableDefinitionNode");o(Wq,"assertRequestParams");o(hN,"processIntValueNode");o(jq,"processFloatValueNode");o(Qq,"processVariableNode");o(Jq,"isObject");o(Xq,"transformObjectIntoQueryCondition");o(Jae,"processObjectFieldNode");o(Zq,"processObjectValueNode");o(Xae,"processArgumentNode");o(Zae,"buildConditionsQuery");o(uS,"fillInFragments");o(eG,"buildSelectQuery");o(ece,"processFieldNode");o(tG,"processConstValueNode");o(tce,"resolveVariables");o(rce,"executeOperation");o(zq,"resolver");qr=class extends Error{static{o(this,"GraphQLQueryingError")}},Zi=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(nce,"graphqlQueryingHandler");o(sce,"start")});var cG=M((MUe,aG)=>{var yd=require("validate.js"),sG=at(),Rd=(H(),D(Y)),{handleHDBError:ice,hdbErrors:oce}=_e(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:ace}=oce,_N=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),cce={STRUCTURE_USER:"structure_user"},nG=Object.values(Rd.ROLE_TYPES_ENUM),lce="attribute_permissions",uce="attribute_name",{PERMS_CRUD_ENUM:Ad}=Rd,dce=[lce,...Object.values(Ad)],iG=[Ad.READ,Ad.INSERT,Ad.UPDATE],fce=[uce,...iG];function mce(e){let t=_N();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,oG(e,t)}o(mce,"addRoleValidation");function pce(e){let t=_N();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,oG(e,t)}o(pce,"alterRoleValidation");function hce(e){let t=_N();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,sG.validateObject(e,t)}o(hce,"dropRoleValidation");var Ece=["operation","role","id","permission","hdb_user","access"];function oG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Ece.includes(n[a])||s.push(n[a]);s.length>0&&mr(sr.INVALID_ROLE_JSON_KEYS(s),r);let i=sG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{mr(a,r)}),e.permission){let a=_ce(e);a&&mr(a,r),nG.forEach(c=>{e.permission[c]&&!yd.isBoolean(e.permission[c])&&mr(sr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(nG.indexOf(a)<0){if(a===cce.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=>{dce.includes(d)||mr(sr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(Ad).forEach(d=>{yd.isDefined(u[d])?yd.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=>{!fce.includes(E)&&E!==Ad.DELETE&&mr(sr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!yd.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}iG.forEach(E=>{yd.isDefined(p[E])?yd.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 gce(r)}o(oG,"customValidate");aG.exports={addRoleValidation:mce,alterRoleValidation:pce,dropRoleValidation:hce};function _ce(e){let{operation:t,permission:r}=e;if(t===Rd.OPERATIONS_ENUM.ADD_ROLE||t===Rd.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?Rd.ROLE_TYPES_ENUM.SUPER_USER:Rd.ROLE_TYPES_ENUM.CLUSTER_USER;return sr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(_ce,"validateNoSUPerms");function gce(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 ice(new Error,n,ace.BAD_REQUEST)}else return null}o(gce,"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 xp=M((xUe,fG)=>{"use strict";var lG=ln(),uG=dn(),Sce=Va(),SN=cG(),TN=ko(),UUe=require("uuid").v4,Tce=require("util"),dS=(H(),D(Y)),yce=oe(),yN=uG.searchByValue,Rce=uG.searchByHash,Ace=Tce.promisify(Sce.delete),bce=di(),Ice=Ju(),{hdbErrors:wce,handleHDBError:Cl}=_e(),{HDB_ERROR_MSGS:dG,HTTP_STATUS_CODES:Up}=wce,{UserEventMsg:RN}=ts();fG.exports={addRole:Nce,alterRole:Cce,dropRole:Oce,listRoles:Pce};function gN(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(gN,"scrubRoleDetails");async function Nce(e){let t=SN.addRoleValidation(e);if(t)throw t;e=gN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await yN(r)||[])}catch(i){throw Cl(i)}if(n&&n.length>0)throw Cl(new Error,dG.ROLE_ALREADY_EXISTS(e.role),Up.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 lG.insert(s),TN.signalUserChange(new RN(process.pid)),e=gN(e),e}o(Nce,"addRole");async function Cce(e){let t=SN.alterRoleValidation(e);if(t)throw t;e=gN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await lG.update(r)}catch(s){throw Cl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Cl(new Error,"Invalid role id",Up.BAD_REQUEST,void 0,void 0,!0);return await TN.signalUserChange(new RN(process.pid)),e}o(Cce,"alterRole");async function Oce(e){let t=SN.dropRoleValidation(e);if(t)throw Cl(new Error,t,Up.BAD_REQUEST,void 0,void 0,!0);let r=new Ice(dS.SYSTEM_SCHEMA_NAME,dS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Rce(r));if(n.length===0)throw Cl(new Error,dG.ROLE_NOT_FOUND,Up.NOT_FOUND,void 0,void 0,!0);let s=new bce(dS.SYSTEM_SCHEMA_NAME,dS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await yN(s)),a=!1;if(yce.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Cl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Up.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Ace(c),TN.signalUserChange(new RN(process.pid)),`${n[0].role} successfully deleted`}o(Oce,"dropRole");async function Pce(){return yN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(Pce,"listRoles")});var AN={};Ie(AN,{start:()=>hG,startOnMainThread:()=>Mce});function hG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,mG.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(Lce.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 Dce(i)}}}async function Dce(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,pG.isEqual)(i,e)?void 0:(e.id=r.id,(0,fS.alterRole)(e))}return(0,fS.addRole)(e)}var fS,mG,pG,Lce,Mce,EG=ie(()=>{Oe();fS=w(xp()),mG=require("yaml"),pG=require("lodash"),Lce=["super_user","cluster_user","structure_user"];o(hG,"start");o(Dce,"ensureRole");Mce=hG});async function mS(e){let t=(0,SG.pathToFileURL)(e).toString();if(vce)return Bp||(Bp=Uce(Bce)),(await(await Bp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Uce(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Bp=new Compartment({console,Math,Date,fetch:xce,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,gG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Fr,s.tables=hn,s.databases=Me}};let n=await(0,_G.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Bp}function xce(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 Bce(){return{Resource:Fr,tables:hn}}var _G,gG,SG,vce,Bp,bN=ie(()=>{Ua();Oe();_G=require("fs/promises"),gG=require("path"),SG=require("url"),vce=!1;o(mS,"secureImport");o(Uce,"getCompartment");o(xce,"secureOnlyFetch");o(Bce,"getGlobalVars")});var IN={};Ie(IN,{handleApplication:()=>Fce,suppressHandleApplicationWarning:()=>kce});function TG(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Fce(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}mS(t.absolutePath).then(r=>{let n=(0,pS.dirname)(t.urlPath);TG(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),yG(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function yG(e,t,r){for(let n in t){let s=t[n],i=(0,pS.join)(r,n);TG(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&yG(e,s,i)}}var pS,kce,RG=ie(()=>{bN();pS=require("path");o(TG,"isResource");o(Fce,"handleApplication");o(yG,"recurseForResources");kce=!0});var NN={};Ie(NN,{start:()=>Hce});function Hce({resources:e}){e.set("login",wN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var wN,AG=ie(()=>{Ua();o(Hce,"start");wN=class extends Fr{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 OG(e){let t={openapi:qce,info:{title:"HarperDB HTTP REST interface",version:NG.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)hS[c.type]?i[c.name]=new ON(hS[c.type],c.type):c.properties?(i[c.name]=new PG(c.type),n(c)):c.elements?.properties&&(i[c.name]=new Wce(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new wG(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:q,elements:k,relationship:J,definition:W,nullable:ue}of c){let ce=W??k?.definition;ce&&n(ce),ue===!1&&p.push(q),J?te==="array"?f[q]={type:"array",items:{$ref:Fs+k.type}}:f[q]={$ref:Fs+te}:ce?te==="array"?f[q]={type:"array",items:{$ref:Fs+ce.type}}:f[q]={$ref:Fs+ce.type}:te==="array"?k.type==="Any"?f[q]={type:"array",items:{format:k.type}}:f[q]={type:"array",items:new ON(hS[k.type],k.type)}:te==="Any"?f[q]={format:te}:f[q]=new ON(hS[te],te),m.push(new PN(q,"query",f[q]))}let h=Object.keys(f),E=new PN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new PN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new wG(f,!l,p);let A=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",R=typeof u.get=="function",N=typeof u.delete=="function",O=typeof u.patch=="function",F="/"+i+"/";A&&(t.paths[F]={},t.paths[F].post=new Gce(a,r,{200:new bd({$ref:Fs+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),R&&(t.paths[F]||(t.paths[F]={}),t.paths[F].get=new CN(m,r,{200:new bd({type:"array",items:{$ref:Fs+a}})},"search for records by the specified property name and value pairs")),t.paths[F]||(t.paths[F]={}),t.paths[F].options=new $ce(m,r,{200:new Vce},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(t.paths[F]||(t.paths[F]={}),t.paths[F].delete=new IG(m,r,"delete all the records that match the provided query",{204:new bG})),F="/"+i+"/{"+d+"}",R&&(t.paths[F]={},t.paths[F].get=new CN([E],r,{200:new bd({$ref:Fs+a})},"retrieve a record by its primary key")),S&&(t.paths[F]||(t.paths[F]={}),t.paths[F].put=new Kce([E],r,a,{200:new bd({$ref:Fs+a})},"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[F]||(t.paths[F]={}),t.paths[F].patch=new Yce([E],r,a,{200:new bd({$ref:Fs+a})},"patch the record with the URL path that maps to the record's primary key")),N&&(t.paths[F]||(t.paths[F]={}),t.paths[F].delete=new IG([E],r,"delete a record with the given primary key",{204:new bG})),R&&g.schema.enum.length>0&&(F="/"+i+"/{"+d+"}.{property}",t.paths[F]={},t.paths[F].get=new CN([E,g],r,{200:new bd({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 Gce(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Fs+e}}}},this.security=t,this.responses=r}function CN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function $ce(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Vce(){this.description=CG,this.headers={},this.content={}}function bd(e,t){this.description=CG,this.content={"application/json":{schema:e}},this.headers=t}function bG(){this.description="successfully processed request, no content returned to client"}function Kce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Fs+r}}}},this.responses=n}function Yce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Fs+r}}}},this.responses=n}function IG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function wG(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function ON(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function PG(e){this.$ref=`#/components/schemas/${e}`}function Wce(e){this.type="array",this.items=new PG(e)}function PN(e,t,r){this.name=e,this.in=t,this.schema=r}var NG,qce,hS,Fs,CG,LG=ie(()=>{NG=w(yt()),qce="3.0.3",hS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Fs="#/components/schemas/",CG="successful operation";o(OG,"generateJsonApi");o(Gce,"Post");o(CN,"Get");o($ce,"Options");o(Vce,"ResponseOptions200");o(bd,"Response200");o(bG,"Response204");o(Kce,"Put");o(Yce,"Patch");o(IG,"Delete");o(wG,"ResourceSchema");o(ON,"Type");o(PG,"Ref");o(Wce,"ArrayRef");o(PN,"Parameter")});var MG={};Ie(MG,{Request:()=>Xa,createReuseportFd:()=>ES});var DG,Xa,LN,DN,ES,Fp=ie(()=>{DG=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 DN(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 LN(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)}},LN=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)}},DN=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,DG.platform)()!="win32"&&(ES=require("node-unix-socket").createReuseportFd)});var gS={};Ie(gS,{parseHeaderValue:()=>vN,start:()=>Qce});async function jce(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&tg(e);let i=new Us;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==vG){let g=_S.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ci(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let A=vN(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=vN(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 At(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Oo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Id.ClientError(g,400)}if(e.authorize=!0,a===vG&&s==="GET"){if(e?.user?.role?.permission?.super_user)return OG(_S);throw new Id.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 Id.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Id.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,MN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=_q(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=ym(f.data,e,f)),f}else if(isFinite(p)){zce[0]=p;let g=String.fromCharCode(34,(Jr[0]&63)+62,(Jr[0]>>6)+(Jr[1]<<2&63)+62,(Jr[1]>>4)+(Jr[2]<<4&63)+62,(Jr[2]>>2)+62,(Jr[3]&63)+62,(Jr[3]>>6)+(Jr[4]<<2&63)+62,(Jr[4]>>4)+(Jr[5]<<4&63)+62,(Jr[5]>>2)+62,(Jr[6]&63)+62,(Jr[6]>>6)+(Jr[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),MN.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=ym(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?_i.warn(a):_i.info(a):_i.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=ym(a.contentType?a:BG(a),e,c),c}}function Qce(e){MN=e,e.includeExpensiveRecordCountEstimates&&(Xa.prototype.includeExpensiveRecordCountEstimates=!0),!UG&&(UG=!0,_S=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return jce(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{kp++;let s=new Qn;xG||(xG=!0,Bm(l=>{kp>0&&l.push({metric:"ws-connections",connections:kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,_i.warn(l)});let a;t.on("message",o(function(u){a||(a=Oo(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--,zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=_S.getMatch(l,"ws");if(zr(!!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 ci(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await At(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Co(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?_i.warn(l):_i.info(l):_i.error(l),t.close(Jce[l.statusCode]||1011,BG(l))}t.close()},e))}function vN(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 _i,Id,BG,Jr,zce,MN,vG,UG,_S,xG,kp,Jce,FG=ie(()=>{Po();Os();_i=w(j()),Id=w(_e());rg();Nu();Ca();bp();LG();Fp();sg();({errorToString:BG}=_i),Jr=new Uint8Array(8),zce=new Float64Array(Jr.buffer,0,1),MN={},vG="openapi";o(jce,"http");kp=0;o(Qce,"start");Jce={401:3e3,403:3003};o(vN,"parseHeaderValue")});var UN=M((cxe,HG)=>{var{recordAction:SS,recordActionBinary:kG}=(Os(),D(W_)),Xce=require("fastify-plugin"),Zce=200;HG.exports=Xce(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),SS(a,"duration",u,f,d),kG(s.raw.statusCode<400,"success",u,f,d),kG(1,"response_"+s.raw.statusCode,u,f,d);let m=Zce;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{SS(performance.now()-c,"transfer",u,f,d),SS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,SS(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 GG=M((lxe,qG)=>{var ele=at(),tle={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};qG.exports=function(e){return ele.validateObject(e,tle)}});var Hp=M((uxe,$G)=>{"use strict";var rle=(H(),D(Y)).OPERATIONS_ENUM,xN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=rle.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};$G.exports=xN});var $p={};Ie($p,{createTokens:()=>kN,getJWTRSAKeys:()=>bS,refreshOperationToken:()=>HN,validateOperationToken:()=>qN,validateRefreshToken:()=>IS});async function bS(){if(TS)return TS;try{let e=qp.default.join(Gp.default.getHdbBasePath(),RA),t=await yS.default.readFile(qp.default.join(e,sm.JWT_PASSPHRASE_NAME),"utf8"),r=await yS.default.readFile(qp.default.join(e,sm.JWT_PRIVATE_KEY_NAME),"utf8");return TS={publicKey:await yS.default.readFile(qp.default.join(e,sm.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},TS}catch(e){throw AS.default.error(e),new gi.ClientError(Nd.NO_ENCRYPTION_KEYS,wd.INTERNAL_SERVER_ERROR)}}async function kN(e){let t=(0,BN.validateBySchema)(e,eo.default.object({username:eo.default.string().optional(),password:eo.default.string().optional(),role:eo.default.string().optional(),expires_in:eo.default.alternatives(eo.default.string(),eo.default.number()).optional()}));if(t)throw new gi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,FN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw AS.default.error(f),new gi.ClientError(Nd.INVALID_CREDENTIALS,wd.UNAUTHORIZED)}if(!r)throw new gi.ClientError(Nd.INVALID_CREDENTIALS,wd.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 bS(),c=await Cd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??zG,algorithm:RS,subject:Od.OPERATION}),l=await Cd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:nle,algorithm:RS,subject:Od.REFRESH}),u=Ew(l,kr.SHA256);if((await(0,VG.update)(new KG.default(rm,bu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new gi.ClientError(Nd.REFRESH_TOKEN_SAVE_FAILED,wd.INTERNAL_SERVER_ERROR);return YG.default.signalUserChange(new WG.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function HN(e){let t=(0,BN.validateBySchema)(e,eo.default.object({refresh_token:eo.default.string().required()}).required());if(t)throw new gi.ClientError(t.message);let{refresh_token:r}=e;await IS(r);let n=await bS(),s=await Cd.default.decode(r);return{operation_token:await Cd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:zG,algorithm:RS,subject:Od.OPERATION})}}async function qN(e){return jG(e,Od.OPERATION)}async function IS(e){return jG(e,Od.REFRESH)}async function jG(e,t){try{let r=await bS(),n=await Cd.default.verify(e,r.publicKey,{algorithms:RS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,FN.findAndValidateUser)(n.username,void 0,!1);if(t===Od.REFRESH&&!_w(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw AS.default.warn(r),r?.name==="TokenExpiredError"?new gi.ClientError(Nd.TOKEN_EXPIRED,wd.FORBIDDEN):new gi.ClientError(Nd.INVALID_TOKEN,wd.UNAUTHORIZED)}}var Cd,yS,qp,eo,BN,gi,AS,FN,VG,KG,YG,WG,Gp,wd,Nd,zG,nle,RS,Od,TS,Pd=ie(()=>{Cd=w(require("jsonwebtoken")),yS=w(require("fs-extra")),qp=w(require("node:path")),eo=w(require("joi")),BN=w(at());H();gi=w(_e()),AS=w(j());Sw();FN=w(cs()),VG=w(ln()),KG=w(Hp()),YG=w(ko()),WG=w(ts()),Gp=w(ae()),{HTTP_STATUS_CODES:wd,AUTHENTICATION_ERROR_MSGS:Nd}=gi.hdbErrors;Gp.default.initSync();zG=Gp.default.get(B.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",nle=Gp.default.get(B.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",RS="RS256",Od={OPERATION:"operation",REFRESH:"refresh"};o(bS,"getJWTRSAKeys");o(kN,"createTokens");o(HN,"refreshOperationToken");o(qN,"validateOperationToken");o(IS,"validateRefreshToken");o(jG,"validateToken")});var GN=M((hxe,XG)=>{"use strict";var sle=GG(),Ld=require("passport"),ile=require("passport-local").Strategy,ole=require("passport-http").BasicStrategy,ale=require("util"),cle=cs(),JG=ale.callbackify(cle.findAndValidateUser),pxe=Kr(),lle=(H(),D(Y)),QG=(Pd(),D($p));Ld.use(new ile(function(e,t,r){JG(e,t,r)}));Ld.use(new ole(function(e,t,r){JG(e,t,r)}));Ld.serializeUser(function(e,t){t(null,e)});Ld.deserializeUser(function(e,t){t(null,e)});function ule(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":Ld.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===lle.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?QG.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):QG.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Ld.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(ule,"authorize");function dle(e,t){let r=sle(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(dle,"checkPermissions");XG.exports={authorize:ule,checkPermissions:dle}});var wS=M((_xe,ZG)=>{"use strict";var fle=ss();ZG.exports={writeTransaction:mle};function mle(e,t,r){return fle.writeTransaction(e,t,r)}o(mle,"writeTransaction")});var n$=M((Txe,r$)=>{"use strict";var ple=dn(),hle=mi(),e$=j(),Ele=ln(),Sxe=wS(),_le=require("clone"),VN=require("alasql"),gle=Ug(),t$=require("util"),Sle=t$.promisify(hle.getTableSchema),Tle=t$.promisify(ple.search),yle=(H(),D(Y)),$N=oe();gle(VN);r$.exports={update:Ale};var Rle="There was a problem performing this update. Please check the logs and try again.";async function Ale({statement:e,hdb_user:t}){let r=await Sle(e.table.databaseid,e.table.tableid),n=ble(e.columns);$N.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=_le(s),c=$N.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=VN.parse(l).statements[0],d=await Tle(u),f=Ile(n,d);return wle(a,f,t)}o(Ale,"update");function ble(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=VN.compile(`SELECT ${r.expression.toString()} AS [${yle.FUNC_VAL}] FROM ?`)}),t}catch(t){throw e$.error(t),new Error(Rle)}}o(ble,"createUpdateRecord");function Ile(e,t){return $N.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Ile,"buildUpdateRecords");async function wle(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Ele.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){e$.error(`Error delete new_attributes from update response: ${i}`)}return s}o(wle,"updateRecords")});var i$=M((bxe,s$)=>{var Nle=require("alasql"),Cle=dn(),Ole=j(),Ple=ss(),YN=require("util"),KN=oe(),Lle=(H(),D(Y)),Dle=mi(),Rxe=wS(),Axe=ln(),Mle="record",vle="successfully deleted",Ule=YN.callbackify(kle),xle=YN.promisify(Cle.search),Ble=YN.promisify(Dle.getTableSchema);s$.exports={convertDelete:Ule};function Fle(e){return`${e.deleted_hashes.length} ${Mle}${e.deleted_hashes.length===1?"":"s"} ${vle}`}o(Fle,"generateReturnMessage");async function kle({statement:e,hdb_user:t}){let r=await Ble(e.table.databaseid,e.table.tableid);KN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=KN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Nle.parse(a).statements[0],l={operation:Lle.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await xle(c);let u=await Ple.deleteRecords(l);return KN.isEmptyOrZeroLength(u.message)&&(u.message=Fle(u)),delete u.txn_time,u}catch(u){throw Ole.error(u),u.hdb_code?u.message:u}}o(kle,"convertDelete")});var Za=M((Nxe,l$)=>{"use strict";var wxe=dn(),Vp=j(),{validateBySchema:o$}=at(),Ol=require("joi"),Hle=zi(),NS=oe(),{handleHDBError:CS,hdbErrors:qle,ClientError:a$}=_e(),{HDB_ERROR_MSGS:OS,HTTP_STATUS_CODES:WN}=qle,c$=ae();c$.initSync();var{getDatabases:zN}=(Oe(),D(mt)),Gle=require("fs-extra"),$le=(H(),D(Y));l$.exports={describeAll:Vle,describeTable:PS,describeSchema:Kle};async function Vle(e={}){try{let t=NS.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=zN(),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 PS({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 PS({schema:f,table:p,exactCount:u},E)}h&&l.push(h)}catch(h){Vp.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 Vp.error("Got an error in describeAll"),Vp.error(t),CS(new Error,OS.DESCRIBE_ALL_ERR)}}o(Vle,"describeAll");async function PS(e,t){NS.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=o$(e,Ol.object({database:Ol.string(),table:Ol.string().required(),exact_count:Ol.boolean().strict()}));if(i)throw new a$(i.message);let c=zN()[r];if(!c)throw CS(new Error,OS.SCHEMA_NOT_FOUND(e.schema),WN.NOT_FOUND);let l=c[n];if(!l)throw CS(new Error,OS.TABLE_NOT_FOUND(e.schema,e.table),WN.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 Gle.stat(l.primaryStore.env.path)).size}catch(p){Vp.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")),c$.get($le.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Hle.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){Vp.warn(`unable to stat table dbi due to ${p}`)}return m}o(PS,"descTable");async function Kle(e){NS.transformReq(e);let t=o$(e,Ol.object({database:Ol.string(),exact_count:Ol.boolean().strict()}));if(t)throw new a$(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=zN()[n];if(!i)throw CS(new Error,OS.SCHEMA_NOT_FOUND(e.schema),WN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),NS.isEmpty(l)||l.describe){let u=await PS({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(Kle,"describeSchema")});var p$=M((Oxe,m$)=>{"use strict";var Yle=Za(),{hdbErrors:u$}=_e(),{getDatabases:d$}=(Oe(),D(mt));m$.exports={checkSchemaExists:f$,checkSchemaTableExists:Wle,schemaDescribe:Yle};async function f$(e){if(!d$()[e])return u$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(f$,"checkSchemaExists");async function Wle(e,t){let r=await f$(e);if(r)return r;if(!d$()[e][t])return u$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Wle,"checkSchemaTableExists")});var ZN=M((vxe,w$)=>{"use strict";var{decode:zle}=require("msgpackr"),{isMainThread:Lxe,parentPort:Dxe,threadId:Mxe}=require("worker_threads"),MS=Ft(),Dd=pt(),JN=(H(),D(Y)),En=j(),QN=ae(),jle=(H(),D(Y)),{onMessageByType:Qle}=Je(),g$=zi(),{recordAction:h$,recordActionBinary:Jle}=(Os(),D(W_)),{publishToStream:Xle}=MS,{ConsumerEvents:E$}=require("nats"),Zle=dn(),{promisify:eue}=require("util"),{decodeBlobsWithWrites:tue}=(ws(),D(sb)),S$=eue(setTimeout),vS=1e4,US,DS,rue,nue,T$,Kp=new Map,Md=new Map;w$.exports={initialize:y$,ingestConsumer:XN,setSubscription:sue,setIgnoreOrigin:aue,getDatabaseSubscriptions:oue,updateConsumer:R$};async function y$(){Qle(JN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await R$(n)}),T$=!0,En.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await MS.getNATSReferences();US=e,DS=e.info.server_name,rue=t,nue=r}o(y$,"initialize");async function R$(e){if(e.status==="start"){let{js:t,jsm:r}=await A$(e.node_domain_name);XN(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Kp.get(e.stream_name+e.node_domain_name);t&&(En.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Kp.set(e.stream_name+e.node_domain_name,"close")),Md.get(e.node_domain_name)==="failed"&&Md.set(e.node_domain_name,"close")}}o(R$,"updateConsumer");var xS=new Map;function sue(e,t,r){let n=xS.get(e);n||xS.set(e,n=new Map),n.set(t,r),T$||y$().then(iue)}o(sue,"setSubscription");async function iue(){let e=await Zle.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Dd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await A$(r),!n))break;let{schema:a,table:c}=i,l=g$.createNatsTableStreamName(a,c);XN(l,n,s,r)}}}o(iue,"accessConsumers");async function A$(e){let t,r,n=1;for(;!r;)try{t=await US.jetstream({domain:e}),r=await US.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Md.get(e)==="close")break;Md.set(e,"failed"),n%10===1&&En.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<vS?n++*100:vS;await S$(i)}return{js:t,jsm:r}}o(A$,"connectToRemoteJS");function oue(){return xS}o(oue,"getDatabaseSubscriptions");var b$;function aue(e){b$=e}o(aue,"setIgnoreOrigin");var I$=100,_$=new Array(I$),LS=0;async function XN(e,t,r,n){let{connection:s}=await MS.getNATSReferences();US=s,DS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,DS),En.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Md.get(n)==="close")break;a%10===1&&En.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(En.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await MS.createConsumer(r,e,DS,new Date(Date.now()).toISOString()));let d=a++*100<vS?a++*100:vS;await S$(d)}let c=!1,l;for(;!c;){if(Kp.get(e+n)==="close"||Md.get(n)==="close"){Kp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:QN.get(JN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Kp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===E$.ConsumerDeleted&&(await l.close(),c=!0),d.type===E$.HeartbeatsMissed){let f=d.data;En.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(En.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 _$[LS],_$[LS]=cue(d).catch(f=>{En.error(f)}),++LS>=I$&&(LS=0)}catch(d){d.message==="consumer deleted"?(En.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):En.error("Error consuming clustering ingest, restarting consumer",d)}}}o(XN,"ingestConsumer");async function cue(e){let t;await tue(()=>{t=zle(e.data)}),h$(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),En.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=QN.get(JN.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Dd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Dd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Dd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!b$),Jle(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Dd.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;En.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),En.trace(`messageProcessor nats msg id: ${e.headers.get(Dd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(O=>h=O),{timestamp:g,user:A,node_name:S}=m||{},R=xS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,R.send(t);else if(d.length===1&&!l)R.send({type:jN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:A,nodeName:S});else{let O=d.map((F,te)=>({type:jN(a),value:F,expiresAt:p,id:f?.[te],table:u}));for(;l;)O.push({type:jN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:h,user:A,nodeName:S})}QN.get(jle.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Xle(e.subject.split(".").slice(0,-1).join("."),g$.createNatsTableStreamName(c,u),e.headers,e.data),await E;let N=Date.now()-g;g&&h$(N,"replication-latency",e.subject,a,"ingest")}catch(a){En.error(a)}e.ack()}o(cue,"messageProcessor");function jN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(jN,"convertOperation")});var Ft=M((qxe,$$)=>{"use strict";var Gr=ae();Gr.initSync();var lue=require("fs-extra"),uue=require("semver"),zp=require("path"),{monotonicFactory:due}=require("ulidx"),C$=due(),fue=require("util"),O$=require("child_process"),mue=fue.promisify(O$.exec),pue=O$.spawn,Xr=pt(),et=(H(),D(Y)),{packageJson:hue,PACKAGE_ROOT:Eue}=yt(),BS=oe(),Si=j(),FS=zi(),_ue=wS(),Yp=bt(),{broadcast:gue,onMessageByType:Sue,getWorkerIndex:Tue}=Je(),{isMainThread:P$}=require("worker_threads"),{Encoder:yue,decode:nC}=require("msgpackr"),L$=new yue,{isEmpty:Ml}=BS,D$=cs(),xxe=48*36e11;P$&&Sue(et.ITC_EVENT_TYPES.RESTART,()=>{_n=void 0,Dl=void 0});var{connect:Rue,StorageType:Aue,RetentionPolicy:bue,AckPolicy:sC,DeliverPolicy:iC,DiscardPolicy:Iue,NatsConnection:Bxe,JetStreamManager:Fxe,JetStreamClient:kxe,StringCodec:Hxe,JSONCodec:wue,createInbox:oC,headers:Nue,ErrorCode:N$}=require("nats"),{recordAction:Cue}=(Os(),D(W_)),{encodeBlobsAsBuffers:Oue}=(ws(),D(sb)),M$=wue(),Pue="clustering",Lue=hue.engines[Xr.NATS_SERVER_NAME],Due=zp.join(Eue,"dependencies"),rC=zp.join(Due,`${process.platform}-${process.arch}`,Xr.NATS_BINARY_NAME),eC,tC,Wp,Pl,Ll;$$.exports={runCommand:v$,checkNATSServerInstalled:Mue,createConnection:aC,getConnection:jp,getJetStreamManager:Qp,getJetStream:x$,getNATSReferences:to,getServerList:Uue,createLocalStream:cC,listStreams:B$,deleteLocalStream:xue,getServerConfig:vd,listRemoteStreams:Bue,viewStream:Fue,viewStreamIterator:kue,publishToStream:Hue,request:$ue,reloadNATS:lC,reloadNATSHub:Vue,reloadNATSLeaf:Kue,extractServerName:Gue,requestErrorHandler:Yue,createLocalTableStream:q$,createTableStreams:jue,purgeTableStream:G$,purgeSchemaTableStreams:Que,getStreamInfo:Jue,updateLocalStreams:Zue,closeConnection:vue,getJsmServerName:kS,addNatsMsgHeader:F$,clearClientCache:U$,updateRemoteConsumer:Wue,createConsumer:k$,updateConsumerIterator:zue};async function v$(e,t=void 0){let{stdout:r,stderr:n}=await mue(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
17
17
|
`,""));return r.replace(`
|
|
18
|
-
`,"")}o(L$,"runCommand");async function Oue(){try{await iue.access(rC)}catch{return!1}let e=await L$(`${rC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return oue.eq(t,Nue)}o(Oue,"checkNATSServerInstalled");async function aC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await O$.getClusterUser();if(Ml(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}Si.trace("create nats connection called");let i=await gue({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(),Si.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&Si.error("Error with Nats client connection, connection closed",a),i===_n&&D$()}),i}o(aC,"createConnection");function D$(){_n=void 0,Pl=void 0,Ll=void 0,Dl=void 0}o(D$,"clearClientCache");async function Pue(){_n&&(await _n.drain(),_n=void 0,Pl=void 0,Ll=void 0,Dl=void 0)}o(Pue,"closeConnection");var _n,Dl;async function jp(){return Dl||(Dl=aC(Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_n=await Dl),_n||Dl}o(jp,"getConnection");async function Qp(){if(Pl)return Pl;Ml(_n)&&await jp();let{domain:e}=vd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ml(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Pl=await _n.jetstreamManager({domain:e,timeout:6e4}),Pl}o(Qp,"getJetStreamManager");async function M$(){if(Ll)return Ll;Ml(_n)&&await jp();let{domain:e}=vd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ml(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ll=_n.jetstream({domain:e,timeout:6e4}),Ll}o(M$,"getJetStream");async function to(){let e=_n||await jp(),t=Pl||await Qp(),r=Ll||await M$();return{connection:e,jsm:t,js:r}}o(to,"getNATSReferences");async function Lue(e){let t=Gr.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await O$.getClusterUser(),s=await aC(t,r,n),i=oC(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=P$.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 BS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Lue,"getServerList");async function cC(e,t){let{jsm:r}=await to(),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:Sue.File,retention:Tue.Limits,subjects:t,discard:yue.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(cC,"createLocalStream");async function v$(){let{jsm:e}=await to(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(v$,"listStreams");async function Due(e){let{jsm:t}=await to();await t.streams.delete(e)}o(Due,"deleteLocalStream");async function Mue(e){let{connection:t}=await to(),r=[],n=oC(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(P$.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(Mue,"listRemoteStreams");async function vue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await to(),i=I$(),a={durable_name:i,ack_policy:sC.Explicit};t&&(a.deliver_policy=iC.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=nC(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Xr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(vue,"viewStream");async function*Uue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await to(),i=I$(),a={durable_name:i,ack_policy:sC.Explicit};t&&(a.deliver_policy=iC.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=nC(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(Xr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Uue,"viewStreamIterator");async function xue(e,t,r,n){Si.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=U$(n,r);let{js:s}=await to(),i=await kS(),a=`${e}.${i}`,c=await Iue(()=>n instanceof Uint8Array?n:C$.encode(n));try{Si.trace(`publishToStream publishing to subject: ${a}`),bue(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 B$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Si.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await cC(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(xue,"publishToStream");function U$(e,t){t===void 0&&(t=Aue());let r=Gr.get(et.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Xr.MSG_HEADERS.ORIGIN)&&r&&t.append(Xr.MSG_HEADERS.ORIGIN,r),t}o(U$,"addNatsMsgHeader");function vd(e){e=e.toLowerCase();let t=zp.join(Gr.get(et.CONFIG_PARAMS.ROOTPATH),wue);if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ml(tC)&&(tC={port:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.HUB,config_file:Xr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:zp.join(t,Xr.PID_FILES.HUB),hdbNatsPath:t}),tC;if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ml(eC)&&(eC={port:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,config_file:Xr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,pid_file_path:zp.join(t,Xr.PID_FILES.LEAF),hdbNatsPath:t}),eC;Si.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(vd,"getServerConfig");async function x$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:sC.Explicit,durable_name:r,deliver_policy:iC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(x$,"createConsumer");async function Bue(e,t,r){await e.consumers.delete(t,r)}o(Bue,"removeConsumer");function Fue(e){return e.split(".")[1]}o(Fue,"extractServerName");async function kue(e,t,r=6e4,n=oC()){if(!BS.isObject(t))throw new Error("data param must be an object");let s=C$.encode(t),{connection:i}=await to(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return nC(c.data)}o(kue,"request");function lC(e){return new Promise(async(t,r)=>{let n=uue(rC,["--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(lC,"reloadNATS");async function Hue(){let{pid_file_path:e}=vd(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await lC(e)}o(Hue,"reloadNATSHub");async function que(){let{pid_file_path:e}=vd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await lC(e)}o(que,"reloadNATSLeaf");function Gue(e,t,r){let n;switch(e.code){case b$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case b$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(Gue,"requestErrorHandler");async function $ue(e,t){let r=t+Xr.SERVER_SUFFIX.LEAF,{connection:n}=await to(),{jsm:s}=await Jue(r),{schema:i,table:a}=e,c=FS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await B$(async()=>{if(e.subscribe===!0)await x$(s,c,n.info.server_name,l);else try{await Bue(s,c,n.info.server_name)}catch(u){Si.trace(u)}})}o($ue,"updateRemoteConsumer");async function Vue(e,t,r,n){let s=FS.createNatsTableStreamName(e,t),i=r+Xr.SERVER_SUFFIX.LEAF,a={type:et.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!N$&&Eue()<Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=ZN();await c(a)}await pue(a),n==="stop"&&await BS.asyncSetTimeout(1e3)}o(Vue,"updateConsumerIterator");function B$(e){return mue.writeTransaction(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(B$,"exclusiveLock");async function F$(e,t){let r=FS.createNatsTableStreamName(e,t),n=await kS(),s=zue(e,t,n);await cC(r,[s])}o(F$,"createLocalTableStream");async function Kue(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await F$(n,s)}}o(Kue,"createTableStreams");async function k$(e,t,r=void 0){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=FS.createNatsTableStreamName(e,t),{domain:s}=vd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await jp()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Si.warn(n);else throw n}}o(k$,"purgeTableStream");async function Yue(e,t){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await k$(e,t[r])}o(Yue,"purgeSchemaTableStreams");async function Wue(e){return(await Qp()).streams.info(e)}o(Wue,"getStreamInfo");function zue(e,t,r){return`${Xr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(zue,"createSubjectName");async function kS(){if(Wp)return Wp;if(Wp=(await Qp())?.nc?.info?.server_name,Wp===void 0)throw new Error("Unable to get jetstream manager server name");return Wp}o(kS,"getJsmServerName");async function jue(){let e=await Qp(),t=await kS(),r=await v$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=Que(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(".");Si.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(jue,"updateLocalStreams");function Que(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(Que,"updateStreamLimits");async function Jue(e){let t,r;try{t=await _n.jetstream({domain:e}),r=await _n.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Si.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(Jue,"connectToRemoteJS")});function uC(e){let t=e.get(HS),r=t?(0,Ud.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:Xp(e)??1,nodes:[]})})}i[n]=0,e.putSync(HS,(0,Ud.pack)(r))}return r}function Jp(e){return uC(e).remoteNameToId}function G$(e,t){let r=uC(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(HS,(0,Ud.pack)(r)),s}function qS(e,t){let r=uC(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(HS,(0,Ud.pack)(r))}return q$.trace?.("The remote node name map",e,n,s),s}var q$,Ud,HS,dC=ie(()=>{q$=w(Jn());ds();Ud=require("msgpackr"),HS=Symbol.for("remote-ids");o(uC,"getIdMappingRecord");o(Jp,"exportIdMapping");o(G$,"remoteToLocalNodeId");o(qS,"getIdOfRemoteNode")});var fC={};Ie(fC,{commitsAwaitingReplication:()=>Bd,getHDBNodeTable:()=>Wt,getReplicationSharedStatus:()=>Fd,iterateRoutes:()=>eh,shouldReplicateToNode:()=>Zp,subscribeToNodeUpdates:()=>kd});function Wt(){return $$||($$=Ze({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Fd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function kd(e){Wt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;W$.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 Zp(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 Xue(){kd(e=>{ec({},(t,r)=>{let n=e.name,s=V$.get(n);if(s||V$.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=Fd(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Bd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*eh(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=xd.default.get(B.REPLICATION_SECUREPORT)??(!xd.default.get(B.REPLICATION_PORT)&&xd.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||xd.default.get(B.REPLICATION_PORT)||xd.default.get(B.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){K$.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 K$,Y$,xd,W$,$$,V$,Bd,vl=ie(()=>{Oe();ds();hm();K$=require("worker_threads"),Y$=w(_e()),xd=w(ae());H();W$=w(Jn());server.nodes=[];o(Wt,"getHDBNodeTable");o(Fd,"getReplicationSharedStatus");o(kd,"subscribeToNodeUpdates");o(Zp,"shouldReplicateToNode");V$=new Map;_U((e,t,r)=>{if(r>server.nodes.length)throw new Y$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Bd||(Bd=new Map,Xue());let n=Bd.get(e);return n||(n=[],Bd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(Xue,"startSubscriptionToReplications");o(eh,"iterateRoutes")});var X$={};Ie(X$,{connectedToNode:()=>Ul,disconnectedFromNode:()=>qd,ensureNode:()=>Yo,requestClusterStatus:()=>J$,startOnMainThread:()=>pC});async function pC(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){GS.set(i,Xp(l.auditStore));break}}}no.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??tc();if(l===void 0||l.url!==u||l.shard!==e.shard)return Yo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Wt().primaryStore.get(a)&&c();for(let l of eh(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)}kd(s)});let n;function s(i,a=i?.name){let c=it()&&a===it()||tc()&&i?.url===tc();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(dt.trace("Setting up node replication for",i),!i){for(let[f,m]of ro){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:R}]of m)m.delete(S),dt.warn("Node was deleted, unsubscribing from node",a,S,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){ro.get(f).iterator.remove(),ro.delete(f);return}}return}if(c)return;if(!i.url){dt.info(`Node ${i.name} is missing url`);return}let l=ro.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(dt.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 Hd)if(i.url===m.url){Hd.delete(f);break}Hd.set(i.name,i)}let u=ct();if(l||(l=new Map,ro.set(i.url,l)),l.iterator=ec(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]||(dt.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){dt.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];GS.has(f)&&(E.push({replicateByDefault:m,name:it(),startTime:GS.get(f),endTime:Date.now(),replicates:!0}),GS.delete(f));let g=Zp(i,f),A=no.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):th(S)},Zue);else{dt.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,dt.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):VS(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),qd=o(function(i){try{dt.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Hd.keys()),c=a.sort(),l=c.indexOf(i.name||Ti(i.url));if(l===-1){dt.warn("Disconnected node not found in node map",i.name,a);return}let u=ro.get(i.url),d=u?.get(i.database);if(!d){dt.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!mC.default.get(B.REPLICATION_FAILOVER))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=Hd.get(h);u=ro.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,R=!1;for(let N of d.nodes){if(S.some(O=>O.name===N.name)){dt.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}N.endTime<Date.now()||(S.push(N),R=!0)}if(d.nodes=[d.nodes[0]],!R){dt.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}dt.info(`Failing over ${i.database} from ${i.name} to ${h}`),A?A.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):th({database:i.database,nodes:S});return}dt.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){dt.error("Error failing over node",a)}},"disconnectedFromNode"),Ul=o(function(i){let a=ro.get(i.url),c=a?.get(i.database);if(!c){dt.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){dt.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){dt.debug("Connected node is not named yet",i.database,c);return}c.nodes=[l];let u=!1;for(let d of ro.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,no.onMessageByType)("disconnected-from-node",qd),(0,no.onMessageByType)("connected-to-node",Ul),(0,no.onMessageByType)("request-cluster-status",J$)}function J$(e,t){let r=[];for(let[n,s]of Hd)try{let i=ro.get(s.url);dt.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=j$(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){dt.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Yo(e,t){let r=Wt();e=e??Ti(t.url),t.name=e;try{if(t.ca){let s=new Q$.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){dt.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(dt.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!mC.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=j$(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])]}dt.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var no,$S,dt,z$,mC,Q$,j$,Zue,ro,qd,Ul,Hd,GS,rh=ie(()=>{Oe();no=w(Je());ds();$S=require("worker_threads");vl();dt=w(j()),z$=w(require("lodash")),mC=w(ae());H();Q$=require("crypto"),{cloneDeep:j$}=z$.default,Zue=200,ro=new Map,Hd=new Map,GS=new Map;o(pC,"startOnMainThread");o(J$,"requestClusterStatus");$S.parentPort&&(qd=o(e=>{$S.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ul=o(e=>{$S.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,no.onMessageByType)("subscribe-to-node",e=>{th(e)}),(0,no.onMessageByType)("unsubscribe-from-node",e=>{VS(e)}));o(Yo,"ensureNode")});var ms=D(zt=>{"use strict";var pr=require("path"),{watch:ede}=require("chokidar"),Hn=require("fs-extra"),Gd=require("node-forge"),sV=require("net"),{generateKeyPair:hC,X509Certificate:Wo,createPrivateKey:iV}=require("crypto"),tde=require("util");hC=tde.promisify(hC);var Nt=Gd.pki,yi=require("joi"),{v4:oV}=require("uuid"),{validateBySchema:SC}=at(),{forComponent:rde}=j(),fs=ae(),ks=(H(),M(Y)),{CONFIG_PARAMS:Bl}=ks,Ri=Dw(),{ClientError:rc}=_e(),YS=require("node:tls"),{relative:aV,join:nde}=require("node:path"),{CERTIFICATE_VALUES:Z$}=Ri,sde=$c(),EC=At(),{table:ide,getDatabases:ode,databases:KS}=(Oe(),M(mt)),{getJWTRSAKeys:eV}=(Pd(),M($p)),je=rde("tls").conditional;zt.generateKeys=RC;zt.updateConfigCert=hV;zt.createCsr=mde;zt.signCertificate=pde;zt.setCertTable=$d;zt.loadCertificates=fV;zt.reviewSelfSignedCert=bC;zt.createTLSSelector=_V;zt.listCertificates=SV;zt.addCertificate=Tde;zt.removeCertificate=Rde;zt.createNatsCerts=_de;zt.generateCertsKeys=Ede;zt.getReplicationCert=sh;zt.getReplicationCertAuth=fde;zt.renewSelfSigned=gde;zt.hostnamesFromCert=wC;zt.getKey=Ade;zt.getHostnamesFromCertificate=bde;zt.getPrimaryHostName=IC;var{urlToNodeName:cV,getThisNodeUrl:ade,getThisNodeName:zS,clearThisNodeName:cde}=(ds(),M(zo)),{readFileSync:lde,statSync:lV}=require("node:fs"),Zxe=ae(),{getTicketKeys:ude,onMessageFromWorkers:dde}=Je(),{isMainThread:uV}=require("worker_threads"),{TLSSocket:dV,createSecureContext:e0e}=require("node:tls"),TC=3650,nh=["127.0.0.1","localhost","::1"],yC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];dde(async e=>{e.type===ks.ITC_EVENT_TYPES.RESTART&&(fs.initSync(!0),await bC())});var Zr;function sc(){return Zr||(Zr=ode().system.hdb_certificate,Zr||(Zr=ide({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Zr}o(sc,"getCertTable");async function sh(){let e=_V("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(zS());if(!r)return;let n=new Wo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(sh,"getReplicationCert");async function fde(){sc();let e=(await sh()).options.cert,r=new Wo(e).issuer.match(/CN=(.*)/)?.[1];return Zr.get(r)}o(fde,"getReplicationCertAuth");var tV,nc=new Map;function fV(){if(tV)return;tV=!0;let e=[{configKey:Bl.TLS},{configKey:Bl.OPERATIONSAPI_TLS}];sc();let t=pr.dirname(EC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=EC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&aV(nde(t,"keys"),a);c&&rV(a,l=>{nc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&uV){let d;rV(u,f=>{if(Z$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=EV(u),h=new Wo(p),E;try{E=IC(h)}catch(R){je.error?.("error extracting host name from certificate",R);return}if(E==null){je.error?.("No host name found on certificate");return}if(h.checkIssued(new Wo(Z$.cert)))return;let g=Zr.primaryStore.get(E),A=lV(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=Zr.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(fV,"loadCertificates");function rV(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&uV&&je.warn?.(`Reloading ${r}:`,i),n=c,t(EV(i)))}catch(c){je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Hn.existsSync(e)?s(e,lV(e)):je.error?.(`${r} file not found:`,e),ede(e,{persistent:!1}).on("change",s)}o(rV,"loadAndWatch");function _C(){let e=ade();if(e==null){let t=nh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return cV(e)}o(_C,"getHost");function WS(){let e=zS();if(e==null){let t=nh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(WS,"getCommonName");async function mde(){let e=await sh(),t=Nt.certificateFromPem(e.options.cert),r=Nt.privateKeyFromPem(e.options.key);je.info?.("Creating CSR with cert named:",e.name);let n=Nt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:WS()},...yC];je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:mV()}];return je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Gd.pki.certificationRequestToPem(n)}o(mde,"createCsr");function mV(){let e=nh.includes(WS())?nh:[...nh,WS()];return e.includes(_C())||e.push(_C()),[{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=>sV.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(mV,"certExtensions");async function pde(e){let t={},r=pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;sc();for await(let d of Zr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(nc.has(d.private_key_name)){n=nc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Hn.exists(pr.join(r,d.private_key_name))){n=Hn.readFile(pr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await gC();s=d.ca,n=d.private_key}n=Nt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Nt.certificateFromPem(s.certificate);je.info?.("Signing CSR with cert named",s.name);let a=Nt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Gd.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()+TC),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,Gd.md.sha256.create()),t.certificate=Nt.certificateToPem(c)}else je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(pde,"signCertificate");async function hde(e,t){await $d({name:zS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await $d({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Nt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(hde,"createCertificateTable");async function $d(e){let t;try{t=new Wo(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},sc(),await Zr.patch(e)}o($d,"setCertTable");async function RC(){let e=await hC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Nt.publicKeyFromPem(e.publicKey),privateKey:Nt.privateKeyFromPem(e.privateKey)}}o(RC,"generateKeys");async function AC(e,t,r){let n=Nt.createCertificate();if(!t){let a=await sh();t=Nt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+TC);let i=[{name:"commonName",value:WS()},...yC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(mV()),n.sign(e,Gd.md.sha256.create()),Nt.certificateToPem(n)}o(AC,"generateCertificates");async function gC(){let e=await SV(),t;for(let r of e){if(!r.is_authority)continue;let n=await gV(r.private_key_name);if(r.private_key_name&&n&&new Wo(r.certificate).checkPrivateKey(iV(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(gC,"getCertAuthority");async function pV(e,t,r=!0){let n=Nt.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+TC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${fs.get(Bl.REPLICATION_HOSTNAME)??cV(fs.get(Bl.REPLICATION_URL))??oV().split("-")[0]}`},...yC];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,Gd.md.sha256.create());let a=pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),c=pr.join(a,Ri.PRIVATEKEY_PEM_NAME);return r&&await Hn.writeFile(c,Nt.privateKeyToPem(e)),n}o(pV,"generateCertAuthority");async function Ede(){let{privateKey:e,publicKey:t}=await RC(),r=await pV(e,t),n=await AC(e,t,r);await hde(n,r),hV()}o(Ede,"generateCertsKeys");async function _de(){let e=await AC(Nt.privateKeyFromPem(Ri.CERTIFICATE_VALUES.key),void 0,Nt.certificateFromPem(Ri.CERTIFICATE_VALUES.cert)),t=pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),r=pr.join(t,Ri.NATS_CERTIFICATE_PEM_NAME);await Hn.exists(r)||await Hn.writeFile(r,e);let n=pr.join(t,Ri.NATS_CA_PEM_NAME);await Hn.exists(n)||await Hn.writeFile(n,Ri.CERTIFICATE_VALUES.cert)}o(_de,"createNatsCerts");async function gde(){sc();for await(let e of Zr.search([{attribute:"is_self_signed",value:!0}]))await Zr.delete(e.name);await bC()}o(gde,"renewSelfSigned");async function bC(){cde(),await fV(),sc();let e=await gC();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:Nt.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=fs.get(Bl.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=fs.get(Bl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),c=aV(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 RC(),Hn.existsSync(pr.join(a,Ri.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${oV().split("-")[0]}.pem`),await Hn.writeFile(pr.join(a,c),Nt.privateKeyToPem(s)));let l=await pV(s,Nt.setRsaPublicKey(s.n,s.e),!1);await $d({name:l.subject.getField("CN").value,uses:["https"],certificate:Nt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await sh()){let r=zS();je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await gC();let n=Nt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await AC(Nt.privateKeyFromPem(e.private_key),s,n);await $d({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(bC,"reviewSelfSignedCert");function hV(){let e=sde(Object.keys(ks.CONFIG_PARAM_MAP),!0),t=pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),r=pr.join(t,Ri.PRIVATEKEY_PEM_NAME),n=pr.join(t,Ri.NATS_CERTIFICATE_PEM_NAME),s=pr.join(t,Ri.NATS_CA_PEM_NAME),i=ks.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),EC.updateConfigValue(void 0,void 0,a,!1,!0)}o(hV,"updateConfigCert");function EV(e){return e.startsWith("-----BEGIN")?e:lde(e,"utf8")}o(EV,"readPEM");var nV=YS.createSecureContext;YS.createSecureContext=function(e){if(!e.cert||!e.key)return nV(e);let t={...e};delete t.key,delete t.cert;let r=nV(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Sde=dV.prototype._init;dV.prototype._init=function(e,t){Sde.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 xl=new Map;function _V(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(),xl.clear();let d=0;if(KS===void 0){c();return}for await(let f of KS.system.hdb_certificate.search([])){let m=f.certificate,p=new Wo(m);f.is_authority&&(p.asString=m,xl.set(p.subject,m))}for await(let f of KS.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 gV(f.private_key_name),E=f.certificate,g=new Wo(E);if(xl.has(g.issuer)&&(E+=`
|
|
19
|
-
`+xl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let A={ciphers:f.ciphers,ticketKeys:ude(),availableCAs:xl,ca:t&&Array.from(xl.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=YS.createSecureContext(A);S.name=f.name,S.options=A,S.quality=p,S.certificateAuthorities=Array.from(xl),S.certStart=E.toString().slice(0,100);let R=f.hostnames??wC(g);Array.isArray(R)||(R=[R]);let N;for(let O of R)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),O===_C()&&(p+=2),sV.isIP(O)&&(N=!0);let F=r.get(O)?.quality??0;p>F&&r.set(O,S)}else je.error?.("No hostname found for certificate at",YS.certificate);je.trace?.("Adding TLS",S.name,"for",a.ports||"client","cert named",f.name,"hostnames",R,"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"),KS?.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(_V,"createTLSSelector");async function gV(e){let t=nc.get(e);return!t&&e?await Hn.readFile(pr.join(fs.get(Bl.ROOTPATH),ks.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(gV,"getPrivateKeyByName");async function SV(){sc();let e=[];for await(let t of Zr.search([]))e.push(t);return e}o(SV,"listCertificates");async function Tde(e){let t=SC(e,yi.object({name:yi.string().required(),certificate:yi.string().required(),is_authority:yi.boolean().required(),private_key:yi.string(),hosts:yi.array(),uses:yi.array()}));if(t)throw new rc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Wo(n),c=!1,l=!1,u;for(let[p,h]of nc)!s&&!c&&a.checkPrivateKey(iV(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new rc("A suitable private key was not found for this certificate");let d;if(!r){try{d=IC(a)}catch(p){je.error?.(p)}if(d==null)throw new rc("Error extracting certificate host name, please provide a name parameter")}let f=yde(r??d);s&&!c&&!l&&(await Hn.writeFile(pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,f+".pem"),s),nc.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 $d(m),"Successfully added certificate: "+f}o(Tde,"addCertificate");function yde(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(yde,"sanitizeName");async function Rde(e){let t=SC(e,yi.object({name:yi.string().required()}));if(t)throw new rc(t.message);let{name:r}=e;sc();let n=await Zr.get(r);if(!n)throw new rc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Zr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(je.info?.("Removing private key named",s),await Hn.remove(pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,s)))}return await Zr.delete(r),"Successfully removed "+r}o(Rde,"removeCertificate");function IC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||wC(e)[0]}o(IC,"getPrimaryHostName");function wC(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(wC,"hostnamesFromCert");async function Ade(e){if(e.bypass_auth!==!0)throw new rc("Unauthorized","401");let t=SC(e,yi.object({name:yi.string().required()}));if(t)throw new rc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await eV()).privateKey;if(r===".jwtPublic")return(await eV()).publicKey;if(nc.get(r))return nc.get(e.name);throw new rc("Key not found")}o(Ade,"getKey");function bde(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(bde,"getHostnamesFromCertificate")});var $V={};Ie($V,{CONFIRMATION_STATUS_POSITION:()=>HV,LATENCY_POSITION:()=>tT,NodeReplicationConnection:()=>Kd,OPERATION_REQUEST:()=>LC,RECEIVED_TIME_POSITION:()=>MC,RECEIVED_VERSION_POSITION:()=>DC,RECEIVING_STATUS_POSITION:()=>vC,RECEIVING_STATUS_RECEIVING:()=>GV,RECEIVING_STATUS_WAITING:()=>qV,SENDING_TIME_POSITION:()=>ih,createWebSocket:()=>rT,databaseSubscriptions:()=>oc,replicateOverWS:()=>oh,tableUpdateListeners:()=>xC});async function rT(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(!OC){let l=(0,UV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),OC=u.secureContexts}if(i=OC.get(s),i&&le.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,BV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(eT?.caCount!==jo.size&&(eT=xV.createSecureContext({...i.options,ca:[...jo,...i.options.availableCAs.values()]}),eT.caCount=jo.size),c.secureContext=eT),new DV.WebSocket(e,"harperdb-replication-v1",c)}function oh(e,t,r){let n=t.port||t.securePort,s=Fl.pid%1e3+"-"+MV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);le.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||oc,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 R,N,O,F,ee,q,k,J=6e4,W,ue=0,ce=0,re=0,Re=LV.default.get(B.REPLICATION_BLOBTIMEOUT)??12e4,Te=new Map,Fe=[],qe=0,Rr;if(t.url){let y=o(()=>{ee&&ce===e._socket?.bytesRead&&re===e._socket?.bytesWritten?e.terminate():(ee=performance.now(),e.ping(),ce=e._socket?.bytesRead,re=e._socket?.bytesWritten)},"sendPing");O=setInterval(y,OV).unref(),y()}else er();e._socket?.setMaxListeners(200);function er(){clearTimeout(F),ce=e._socket?.bytesRead,re=e._socket?.bytesWritten,F=setTimeout(()=>{ce===e._socket?.bytesRead&&re===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},OV*2).unref()}o(er,"resetPingTimer");function qt(){if(!(!g||!u))return m||(m=Fd(f,u,g)),m}o(qt,"getSharedStatus"),u&&Fc(u);let tr,Kf,xc=[],Gt=[],Yf,Wf=[],zE=[],jE=[],dA=150,zf=25,Le=0,QE=0,jf=!1,yo,Mr,Ar,Qf;e.on("message",fA);async function fA(y){if(r=await r,!r){le.error?.(s,"No authorization provided"),Vr(1008,"Unauthorized");return}Bc(y),e.off("message",fA),e.on("message",Bc)}o(fA,"onWSMessageWhenAuthorized");function Bc(y){ue=performance.now();try{let b=y.dataView=new Qc(y.buffer,y.byteOffset,y.byteLength);if(y[0]>127){let U=(0,ot.decode)(y),[L,x,G]=U;switch(L){case yV:{if(x){if(g){if(g!==x){le.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${x}, disconnecting`),e.send((0,ot.encode)([Vd])),Vr(1008,"Node name mismatch");return}}else if(g=x,t.connection?.tentativeNode){let de=t.connection.tentativeNode;de.name=g,t.connection.tentativeNode=null,Yo(g,de)}if(t.connection&&(t.connection.nodeName=g),le.debug?.(s,"received node name:",g,"db:",u??U[2]),!u)try{Fc(u=U[2]),u==="system"&&(tr=ec(t,(de,z)=>{yu(z)&&Ru(z)}),e.on("close",()=>{tr?.remove()}))}catch(de){le.warn?.(s,"Error setting database",de),e.send((0,ot.encode)([Vd])),Vr(1008,de.message);return}Jf()}break}case NV:{le.debug?.(s,"Received table definitions for",x.map(de=>de.table));for(let de of x){let z=U[2];de.database=z;let ne;if(yu(z)){if(u==="system")Me[z]?.[de.table]||(ne=C(de,Me[z]?.[de.table]));else{if(z!=="data"&&!Me[z]){le.warn?.("Database not found",z);return}ne=C(de,Me[z]?.[de.table])}f||(f=ne?.auditStore),E||(E=ct()?.[z])}}break}case Vd:Vr();break;case LC:try{let de=r?.replicates||r?.subscribers||r?.name;le.debug?.("Received operation request",x,"from",g),server.operation(x,{user:r},!de).then(z=>{le.debug?.("Requested request from finished",g,z),Array.isArray(z)&&(z={results:z}),z.requestId=x.requestId,e.send((0,ot.encode)([QS,z]))},z=>{le.debug?.("Failed requested operation from",g,z),e.send((0,ot.encode)([QS,{requestId:x.requestId,error:NC(z)}]))})}catch(de){e.send((0,ot.encode)([QS,{requestId:x.requestId,error:NC(de)}]))}break;case QS:let{resolve:Q,reject:X}=A.get(x.requestId);le.debug?.("Received completed operation request",g,x),x.error?X(new Error(x.error)):Q(x),A.delete(x.requestId);break;case CC:let $=U[3];if(!E){u?le.error?.(s,"No database found for",u):le.error?.(s,"Database name never received"),Vr();return}let be=E[$];be=C({table:$,database:u,attributes:x.attributes,schemaDefined:x.schemaDefined},be),xc[G]={name:$,decoder:new ot.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:x.typedStructs,structures:x.structures}),getEntry(de){return be.primaryStore.getEntry(de)},rootStore:be.primaryStore.rootStore};break;case RV:Qf=f?G$(x,f):new Map,Yf=U[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Yf}`);break;case AV:let pe=G;jE[pe]=x;break;case wV:qt()[HV]=x,le.trace?.(s,"received and broadcasting committed update",x),qt().buffer.notify();break;case IV:R=x,h.send({type:"end_txn",localTime:R,remoteNodeIds:S});break;case JS:{let de=U[1],{fileId:z,size:ne,finished:me,error:Ee}=de,fe=Te.get(z);le.debug?.("Received blob",z,"has stream",!!fe,"connectedToBlob",!!fe?.connectedToBlob,"length",U[2].length,"finished",me),fe||(fe=new PC.PassThrough,fe.expectedSize=ne,Te.set(z,fe)),fe.lastChunk=Date.now();let De=U[2];Xe(De.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{me?(Ee?(fe.on("error",()=>{}),fe.destroy(new Error("Blob error: "+Ee+" for record "+(fe.recordId??"unknown")+" from "+remote_node_name))):fe.end(De),fe.connectedToBlob&&Te.delete(z)):fe.write(De)}catch(ve){le.error?.(`Error receiving blob for ${fe.recordId} from ${g} and streaming to storage`,ve),Te.delete(z)}break}case bV:{let de=x,z;try{let ne=U[3],me=Gt[G]||(Gt[G]=E[U[4]]);if(!me)return le.warn?.("Unknown table id trying to handle record request",G);let Ee=me.primaryStore.getBinaryFast(Symbol.for("structures")),fe=Ee?.length??0;if(fe>0&&fe!==QE){QE=fe;let ve=(0,ot.decode)(Ee);e.send((0,ot.encode)([CC,{typedStructs:ve.typed,structures:ve.named},G,me.tableName]))}let De=me.primaryStore.getBinaryFast(ne);if(De){let ve=me.primaryStore.decoder.decode(De,{valueAsBuffer:!0}),$e=lt||{};$e.version=(0,FV.getLastVersion)(),lt&<[vu]&Ln&&(ve=Buffer.from(ve),wm(()=>me.primaryStore.decoder.decode(De),vr=>br(vr,ne),me.primaryStore.rootStore)),z=(0,ot.encode)([jS,de,{value:ve,expiresAt:$e.expiresAt,version:$e.version,residencyId:$e.residencyId,nodeId:$e.nodeId,user:$e.user}])}else z=(0,ot.encode)([jS,de])}catch(ne){z=(0,ot.encode)([jS,de,{error:ne.message}])}e.send(z);break}case jS:{let{resolve:de,reject:z,tableId:ne,key:me}=A.get(U[1]),Ee=U[2];if(Ee?.error)z(new Error(Ee.error));else if(Ee){let fe;M_(()=>{let De=xc[ne].decoder.decode(Ee.value);Ee.value=De,Ee.key=me,de(Ee)||fe&&setTimeout(()=>fe.forEach(P_),6e4).unref()},De=>{let ve=Tu(De,me);return fe||(fe=[]),fe.push(ve),ve})}else de();A.delete(U[1]);break}case TV:{Ar=x;let de,z,ne=!1;if(h){if(u!==h.databaseName&&!h.then){le.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(le.debug?.(s,"received subscription request for",u,"at",Ar),!h){let Ne;h=new Promise($t=>{le.debug?.("Waiting for subscription to database "+u),Ne=$t}),h.ready=Ne,oc.set(u,h)}if(r.name)z=Wt().subscribe(r.name),z.then(async Ne=>{de=Ne;for await(let $t of de){let Dt=$t.value;if(!(Dt?.replicates===!0||Dt?.replicates?.receives||Dt?.subscriptions?.some(Ur=>(Ur.database||Ur.schema)===u&&Ur.publish!==!1))){ne=!0,e.send((0,ot.encode)([Vd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}}},Ne=>{le.error?.(s,"Error subscribing to HDB nodes",Ne)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ot.encode)([Vd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}if(Mr&&(le.debug?.(s,"stopping previous subscription",u),Mr.emit("close")),Ar.length===0)return;let me=Ar[0],Ee=o(Ne=>{if(Ne&&(me.replicateByDefault?!me.tables.includes(Ne.tableName):me.tables.includes(Ne.tableName)))return{table:Ne}},"tableToTableEntry"),fe={txnTime:0},De,ve,$e=1/0,vr,Wn=o((Ne,$t)=>{if(Ne.type==="end_txn"){fe.txnTime&&(a[i]!==66&&le.error?.("Invalid encoding of message"),Ro(9),Ro($_),_(vr=$t),Ui()),i=c,fe.txnTime=0;return}let Dt=Ne.nodeId,Ur=Ne.tableId,Mt=ve[Ur];if(!Mt&&(Mt=ve[Ur]=Ee(h.tableById[Ur]),!Mt))return le.debug?.("Not subscribed to table",Ur);let bs=Mt.table,vt=bs.primaryStore,ni=vt.encoder;(Ne.extendedType&J_||!ni.typedStructs)&&(ni._mergeStructures(ni.getStructures()),ni.typedStructs&&(ni.lastTypedStructuresLength=ni.typedStructs.length));let Au=De[Dt];if(!(Au&&Au.startTime<$t&&(!Au.endTime||Au.endTime>$t)))return ZS&&le.trace?.(s,"skipping replication update",Ne.recordId,"to:",g,"from:",Dt,"subscribed:",De),nv();ZS&&le.trace?.(s,"sending replication update",Ne.recordId,"to:",g,"from:",Dt,"subscribed:",De);let mA=Ne.version;fe.txnTime!==mA&&(fe.txnTime&&(ZS&&le.trace?.(s,"new txn time, sending queued txn",fe.txnTime),a[i]!==66&&le.error?.("Invalid encoding of message"),Ui()),fe.txnTime=mA,i=c,_(mA));let qc=Ne.residencyId,pA=ba(qc,bs),XE;if(pA&&!pA.includes(g)){let si=ba(Ne.previousResidencyId,bs);if(si&&!si.includes(g)&&(Ne.type==="put"||Ne.type==="patch")||bs.getResidencyById)return nv();let Xf=Ne.recordId;le.trace?.(s,"sending invalidation",Xf,g,"from",Dt);let Zf=0;qc&&(Zf|=Jc),Ne.previousResidencyId&&(Zf|=Xc);let _A,ZE=null;for(let sv in bs.indices){if(!ZE){if(_A=Ne.getValue(vt,!0),!_A)break;ZE={}}ZE[sv]=_A[sv]}XE=Zc(Ne.version,Ur,Xf,null,Dt,Ne.user,Ne.type==="put"||Ne.type==="patch"?"invalidate":Ne.type,ni.encode(ZE),Zf,qc,Ne.previousResidencyId,Ne.expiresAt)}function nv(){return le.trace?.(s,"skipping audit record",Ne.recordId),q||(q=setTimeout(()=>{q=null,(vr||0)+CV/2<$e&&(ZS&&le.trace?.(s,"sending skipped sequence update",$e),e.send((0,ot.encode)([IV,$e])))},CV).unref()),new Promise(setImmediate)}o(nv,"skipAuditRecord");let hA=ni.typedStructs,EA=ni.structures;if((hA?.length!=Mt.typed_length||EA?.length!=Mt.structure_length)&&(Mt.typed_length=hA?.length,Mt.structure_length=EA.length,le.debug?.(s,"send table struct",Mt.typed_length,Mt.structure_length),Mt.sentName||(Mt.sentName=!0),e.send((0,ot.encode)([CC,{typedStructs:hA,structures:EA,attributes:bs.attributes,schemaDefined:bs.schemaDefined},Ur,Mt.table.tableName]))),qc&&!zE[qc]&&(e.send((0,ot.encode)([AV,pA,qc])),zE[qc]=!0),XE)Ro(XE.length),K(XE);else{let si=Ne.encoded;Ne.extendedType&Ln&&wm(()=>Ne.getValue(vt),Zf=>br(Zf,Ne.recordId),vt.rootStore);let Xf=si[0]===66?8:0;Ro(si.length-Xf),K(si,Xf),le.trace?.("wrote record",Ne.recordId,"length:",si.length)}return e._socket.writableNeedDrain?new Promise(si=>{le.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",si)}):qe>zf?new Promise(si=>{Rr=si}):new Promise(setImmediate)},"sendAuditRecord"),Ui=o(()=>{c-i>8?(e.send(a.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Xe(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");Mr=new UC.EventEmitter,Mr.once("close",()=>{ne=!0,de?.end()});for(let{startTime:Ne}of Ar)Ne<$e&&($e=Ne);(z||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,ve=h.tableById.map(Ee),De=[];for(let{name:$t,startTime:Dt,endTime:Ur}of Ar){let Mt=qS($t,f);le.debug?.("subscription to",$t,"using local id",Mt,"starting",Dt),De[Mt]={startTime:Dt,endTime:Ur}}Ru(u),tr||(tr=Nl($t=>{$t.databaseName===u&&Ru(u)}),Kf=vp($t=>{$t===u&&(e.send((0,ot.encode)([Vd])),Vr())}),e.on("close",()=>{tr?.remove(),Kf?.remove()})),e.send((0,ot.encode)([RV,Jp(h.auditStore),Ar.map(({name:$t})=>$t)]));let Ne=!0;do{isFinite($e)||(le.warn?.("Invalid sequence id "+$e),Vr(1008,"Invalid sequence id"+$e));let $t;if(Ne&&!ne&&(Ne=!1,$e===0)){le.info?.("Replicating all tables to",g);let Dt=$e,Ur=nT(f);for(let Mt in E){if(!Ee(Mt))continue;let bs=E[Mt];for(let vt of bs.primaryStore.getRange({snapshot:!1,versions:!0})){if(ne)return;if(vt.localTime>=$e){le.trace?.(s,"Copying record from",u,Mt,vt.key,vt.localTime),Dt=Math.max(vt.localTime,Dt),$t=!0,qt()[ih]=1;let ni=Zc(vt.version,bs.tableId,vt.key,null,Ur,null,"put",wm(()=>bs.primaryStore.encoder.encode(vt.value),Au=>br(Au,vt.key)),vt.metadataFlags&-256,vt.residencyId,null,vt.expiresAt);await Wn({recordId:vt.key,tableId:bs.tableId,type:"put",getValue(){return vt.value},encoded:ni,version:vt.version,residencyId:vt.residencyId,nodeId:Ur,extendedType:vt.metadataFlags},vt.localTime)}}}$t&&Wn({type:"end_txn"},$e),qt()[ih]=0,$e=Dt}for(let{key:Dt,value:Ur}of f.getRange({start:$e||1,exclusiveStart:!0,snapshot:!1})){if(ne)return;let Mt=Ut(Ur);le.debug?.("sending audit record",new Date(Dt)),qt()[ih]=Dt,$e=Dt,await Wn(Mt,Dt),Mr.startTime=Dt,$t=!0}$t&&Wn({type:"end_txn"},$e),qt()[ih]=0,await o0(f)}while(!ne)}).catch(Ne=>{le.error?.(s,"Error handling subscription to node",Ne),Vr(1008,"Error handling subscription to node")});break}}return}b.position=8;let P=!0,I,v;do{qt();let U=b.readInt();if(U===9&&b.getUint8(b.position)==$_){b.position++,R=v=b.readFloat64(),m[DC]=R,m[MC]=Date.now(),m[vC]=qV,le.trace?.("received remote sequence update",R,u);break}let L=b.position,x=Ut(y,L,L+U),G=xc[x.tableId];G||le.error?.(`No table found with an id of ${x.tableId}`);let Q;x.residencyId&&(Q=jE[x.residencyId],le.trace?.(s,"received residency list",Q,x.type,x.recordId));try{let X=x.recordId;M_(()=>{I={table:G.name,id:x.recordId,type:x.type,nodeId:Qf.get(x.nodeId),residencyList:Q,timestamp:x.version,value:x.getValue(G),user:x.user,beginTxn:P,expiresAt:x.expiresAt}},$=>Tu($,X))}catch(X){throw X.message+="typed structures for current decoder"+JSON.stringify(G.decoder.typedStructs),X}P=!1,le.trace?.(s,"received replication message",x.type,"id",I.id,"version",new Date(x.version),"nodeId",I.nodeId),m[DC]=x.version,m[MC]=Date.now(),m[vC]=GV,h.send(I),b.position=L+U}while(b.position<y.byteLength);Le++,u!=="system"&&Xe(y.byteLength,"bytes-received",`${g}.${u}.${I?.table||"unknown_table"}`,"replication","ingest"),Le>dA&&!jf&&(jf=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:R,remoteNodeIds:S,async onCommit(){if(I){let U=Date.now()-I.timestamp;u!=="system"&&Xe(U,"replication-latency",g+"."+u+"."+I.table,I.type,"ingest")}Le--,jf&&(jf=!1,e.resume(),le.debug?.(`Replication resuming ${g}`)),Fe.length>0&&await Promise.all(Fe),le.trace?.("All blobs finished"),!N&&v&&(le.trace?.(s,"queuing confirmation of a commit at",v),setTimeout(()=>{e.send((0,ot.encode)([wV,N])),le.trace?.(s,"sent confirmation of a commit at",N),N=null},Nde)),N=v,le.debug?.("last sequence committed",new Date(v),u)}})}catch(b){le.error?.(s,"Error handling incoming replication message",b)}}o(Bc,"onWSMessage"),e.on("ping",er),e.on("pong",()=>{if(t.connection){let y=performance.now()-ee;t.connection.latency=y,qt()&&(m[tT]=y),t.isSubscriptionConnection&&Ul({name:g,database:u,url:t.url,latency:y})}ee=null}),e.on("close",(y,b)=>{clearInterval(O),clearTimeout(F),clearInterval(k),Mr&&Mr.emit("close"),yo&&yo.end();for(let[P,{reject:I}]of A)I(new Error(`Connection closed ${b?.toString()} ${y}`));le.debug?.(s,"closed",y,b?.toString())});function Vr(y,b){try{e.isFinished=!0,le.debug?.(s,"closing",g,u,y,b),e.close(y,b),t.connection?.emit("finished")}catch(P){le.error?.(s,"Error closing connection",P)}}o(Vr,"close");let Aa=new Set;async function br(y,b){let P=L_(y);if(Aa.has(P)){le.debug?.("Blob already being sent",P);return}Aa.add(P);try{let I;qe++;for await(let v of y.stream())I&&(le.debug?.("Sending blob chunk",P,"length",I.length),e.send((0,ot.encode)([JS,{fileId:P,size:y.size},I]))),I=v,e._socket.writableNeedDrain&&(le.debug?.("draining",P),await new Promise(U=>e._socket.once("drain",U)),le.debug?.("drained",P)),Xe(v.length,"bytes-sent",`${g}.${u}`,"replication","blob");le.debug?.("Sending final blob chunk",P,"length",I.length),e.send((0,ot.encode)([JS,{fileId:P,size:y.size,finished:!0},I]))}catch(I){le.warn?.("Error sending blob",I,"blob id",P,"for record",b),e.send((0,ot.encode)([JS,{fileId:P,finished:!0,error:NC(I)},Buffer.alloc(0)]))}finally{Aa.delete(P),qe--,qe<zf&&Rr?.()}}o(br,"sendBlobs");function Tu(y,b){let P=L_(y),I=Te.get(P);le.debug?.("Received transaction with blob",P,"has stream",!!I,"ended",!!I?.writableEnded),I?I.writableEnded&&Te.delete(P):(I=new PC.PassThrough,Te.set(P,I)),I.connectedToBlob=!0,I.lastChunk=Date.now(),I.recordId=b,y.size===void 0&&I.expectedSize&&(y.size=I.expectedSize);let v=I.blob??createBlob(I,y);I.blob=v;let U=v.save({primaryStore:h.auditStore});return U&&(U.blobId=P,Fe.push(U),U.finally(()=>{le.debug?.(`Finished receiving blob stream ${P}`),Fe.splice(Fe.indexOf(U),1)})),v}o(Tu,"receiveBlobs");function Jf(){if(p||(p=!0,t.connection?.on("subscriptions-updated",Jf)),!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 I of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let v of I.value.nodes||[])v.lastTxnTime>(y.get(v.id)??0)&&y.set(v.id,v.lastTxnTime)}catch(I){if(!I.message.includes("Can not re"))throw I}let b=t.connection?.nodeSubscriptions?.[0];S=[];let P=t.connection?.nodeSubscriptions.map((I,v)=>{let U=[],{replicateByDefault:L}=I;if(I.subscriptions){for(let X of I.subscriptions)if(X.subscribe&&(X.schema||X.database)===u){let $=X.table;E?.[$]?.replicate!==!1&&U.push($)}L=!1}else for(let X in E)(L?E[X].replicate===!1:E[X].replicate)&&U.push(X);let x=f&&qS(I.name,f),G=h?.dbisDB?.get([Symbol.for("seq"),x])??1,Q=Math.max(G?.seqId??1,(typeof I.startTime=="string"?new Date(I.startTime).getTime():I.startTime)??1);if(le.debug?.("Starting time recorded in db",I.name,x,u,G?.seqId,"start time:",Q,new Date(Q)),b!==I){let X=f&&qS(b.name,f),$=h?.dbisDB?.get([Symbol.for("seq"),X])??1;for(let be of $?.nodes||[])be.name===I.name&&(Q=be.seqId,le.debug?.("Using sequence id from proxy node",b.name,Q))}if(x===void 0?le.warn("Starting subscription request from node",I,"but no node id found"):S.push(x),y.get(x)>Q&&(Q=y.get(x),le.debug?.("Updating start time from more recent txn recorded",b.name,Q)),Q===1&&XS)try{new URL(XS).hostname===I.name?(le.warn?.(`Requesting full copy of database ${u} from ${XS}`),Q=0):Q=Date.now()-6e4}catch(X){le.error?.("Error parsing leader URL",XS,X)}return le.trace?.(s,"defining subscription request",I.name,u,new Date(Q)),{name:I.name,replicateByDefault:L,tables:U,startTime:Q,endTime:I.endTime}});if(P)if(le.debug?.(s,"sending subscription request",P,h?.dbisDB?.path),clearTimeout(W),P.length>0)e.send((0,ot.encode)([TV,P]));else{let I=o(()=>{let v=performance.now();W=setTimeout(()=>{ue<=v?Vr(1008,"Connection has no subscriptions and is no longer used"):I()},J).unref()},"scheduleClose");I()}}o(Jf,"sendSubscriptionRequestUpdate");function ba(y,b){if(!y)return;let P=Wf[y];return P||(P=b.getResidencyRecord(y),Wf[y]=P),P}o(ba,"getResidence");function yu(y){return!(ic&&ic!="*"&&!ic[y]&&!ic.includes?.(y)&&!ic.some?.(b=>b.name===y))}o(yu,"checkDatabaseAccess");function Fc(y){if(h=h||d.get(y),!yu(y))throw new Error(`Access to database "${y}" is not permitted`);h||le.warn?.(`No database named "${y}" was declared and registered`),f=h?.auditStore,E||(E=ct()?.[y]);let b=it();if(b===g)throw b?new Error("Should not connect to self",b):new Error("Node name not defined");return kc(b,y),!0}o(Fc,"setDatabase");function kc(y,b){let P=ct()?.[b],I=[];for(let v in P){let U=P[v];I.push({table:v,schemaDefined:U.schemaDefined,attributes:U.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}le.trace?.("Sending database info for node",y,"database name",b),e.send((0,ot.encode)([yV,y,b,I]))}o(kc,"sendNodeDBName");function Ru(y){let b=ct()?.[y],P=[];for(let I in b){if(Ar&&!Ar.some(U=>U.replicateByDefault?!U.tables.includes(I):U.tables.includes(I)))continue;let v=b[I];P.push({table:I,schemaDefined:v.schemaDefined,attributes:v.attributes.map(U=>({name:U.name,type:U.type,isPrimaryKey:U.isPrimaryKey}))})}e.send((0,ot.encode)([NV,P,y]))}o(Ru,"sendDBSchema"),k=setInterval(()=>{for(let[y,b]of Te)b.lastChunk+Re<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${y} for record ${b.recordId??"unknown"} from ${g}`),Te.delete(y),b.end())},Re).unref();let JE=1,Hc=[];return{end(){yo&&yo.end(),Mr&&Mr.emit("close")},getRecord(y){let b=JE++;return new Promise((P,I)=>{let v=[bV,b,y.table.tableId,y.id];Hc[y.table.tableId]||(v.push(y.table.tableName),Hc[y.table.tableId]=!0),e.send((0,ot.encode)(v)),ue=performance.now(),A.set(b,{tableId:y.table.tableId,key:y.id,resolve(U){let{table:L,entry:x}=y;if(P(U),U)return L._recordRelocate(x,U)},reject:I})})},sendOperation(y){let b=JE++;return y.requestId=b,e.send((0,ot.encode)([LC,y])),new Promise((P,I)=>{A.set(b,{resolve:P,reject:I})})}};function Ro(y){T(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 K(y,b=0,P=y.length){let I=P-b;T(I),y.copy(a,c,b,P),c+=I}function _(y){T(8),l.setFloat64(c,y),c+=8}function T(y){if(y+16>a.length-c){let b=Buffer.allocUnsafeSlow(c+y-i+65536>>10<<11);a.copy(b,0,i,c),c=c-i,i=0,a=b,l=new DataView(a.buffer,0,a.length)}}function C(y,b){let P=y.database??"data";b||(b={});let I=b.schemaDefined,v=!1,U=y.schemaDefined,L=b.attributes||[];for(let x=0;x<y.attributes?.length;x++){let G=y.attributes[x],Q=L.find(X=>X.name===G.name);(!Q||Q.type!==G.type)&&(I?le.error?.(`Schema for '${u}.${y.table}' is defined locally, but attribute '${G.name}: ${G.type}' from '${g}' does not match local attribute ${Q?"'"+Q.name+": "+Q.type+"'":"which does not exist"}`):(v=!0,U||(G.indexed=!0),Q?L[L.indexOf(Q)]=G:L.push(G)))}return v?(le.debug?.("(Re)creating",y),Ze({table:y.table,database:y.database,schemaDefined:y.schemaDefined,attributes:L,...b})):b}}var LV,ot,DV,MV,vV,UC,UV,xV,Fl,BV,PC,FV,kV,Ide,NC,le,TV,yV,RV,Vd,AV,CC,bV,jS,LC,QS,IV,wV,NV,JS,HV,DC,MC,ih,tT,vC,qV,GV,wde,XS,xC,oc,ZS,CV,Nde,OV,OC,eT,PV,Kd,BC=ie(()=>{Oe();Io();dC();Kb();ds();LV=w(ae());H();el();ot=require("msgpackr"),DV=require("ws"),MV=require("worker_threads"),vV=w(j());rh();UC=require("events"),UV=w(ms()),xV=w(require("node:tls"));vl();Fl=w(require("node:process")),BV=require("node:net");Os();ws();PC=require("node:stream"),FV=require("lmdb"),kV=w(require("minimist")),{forComponent:Ide,errorToString:NC}=vV.default,le=Ide("replication").conditional,TV=129,yV=140,RV=141,Vd=142,AV=130,CC=132,bV=133,jS=134,LC=136,QS=137,IV=143,wV=144,NV=145,JS=146,HV=0,DC=1,MC=2,ih=3,tT=4,vC=5,qV=0,GV=1,wde=(0,kV.default)(Fl.argv),XS=wde.HDB_LEADER_URL??Fl.env.HDB_LEADER_URL,xC=new Map,oc=new Map,ZS=!0,CV=300,Nde=2,OV=3e4;o(rT,"createWebSocket");PV=500,Kd=class extends UC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=PV;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??Ti(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await rT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Fl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),le[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=PV,this.nodeSubscriptions&&Ul({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=oh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(le.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?le.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):le.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&qd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();le.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(oh,"replicateOverWS")});function ah(e){return e===KV||e===Cde}function Ode(e){return e===YV||e===WV}function FC(e){return e===KV?YV:WV}function Pde(){if(VV)return;VV=!0;let e=kl.CryptoEngine.prototype,t=kl.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 ah(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return ah(s)?{name:FC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Ode(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=kl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(ah(i)){let a=FC(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(ah(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new ch.X509Certificate(Buffer.from(i)),l=new ch.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(ah(c)){let l=FC(c);try{let u=this.crypto?.subtle||this.subtle||kl.getCrypto(!0)?.subtle||ch.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 kl,ch,KV,Cde,YV,WV,VV,zV=ie(()=>{kl=w(require("pkijs")),ch=require("node:crypto"),KV="1.3.101.112",Cde="1.3.101.113",YV="Ed25519",WV="Ed448",VV=!1;o(ah,"isEd25519OrEd448");o(Ode,"isEdDSAAlgorithmName");o(FC,"getEdDSAAlgorithmName");o(Pde,"applyEd25519Patch");Pde()});function Lde(){return sT||(sT=Ze({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),sT.sourcedFrom(kC)),sT}function Dde(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 Yd(e,t){jt.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=Dde(t);if(r===!1)return jt.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=Ude(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"}):Mde(n[0].cert,n[0].issuer,r)}async function Mde(e,t,r){jt.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=jV(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=jV(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,JV.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;jt.trace?.("OCSP cache key:",i);let c=await Lde().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??lh.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??lh.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 vde(e,t,r){jt.trace?.("Calling getCertStatus with timeout:",r);let n=await(0,QV.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 jV(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(`
|
|
20
|
-
`)}function Ude(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 QV,JV,XV,jt,kC,lh,sT,iT=ie(()=>{zV();QV=require("easy-ocsp"),JV=require("node:crypto"),XV=w(Jn());Oe();Ua();jt=(0,XV.loggerWithTag)("cert-verification"),kC=class extends Fr{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??lh.timeout,l=await Promise.race([vde(s,i,c),new Promise((d,f)=>setTimeout(()=>f(new Error("OCSP timeout")),c))]);jt.debug?.("OCSP check result:",l);let u=a?.cacheTtl??lh.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??lh.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)}}},lh={timeout:5e3,cacheTtl:36e5,failureMode:"fail-open"};o(Lde,"getCertificateCacheTable");o(Dde,"getCertificateVerificationConfig");o(Yd,"verifyCertificate");o(Mde,"verifyOCSP");o(vde,"performOCSPCheck");o(jV,"bufferToPem");o(Ude,"extractCertificateChain")});var zo={};Ie(zo,{clearThisNodeName:()=>Vde,disableReplication:()=>kde,enabledDatabases:()=>ic,forEachReplicatedDatabase:()=>ec,getThisNodeId:()=>nT,getThisNodeName:()=>it,getThisNodeUrl:()=>tc,hostnameToUrl:()=>lT,lastTimeInAuditStore:()=>Xp,monitorNodeCAs:()=>a1,replicateOperation:()=>Yde,replicationCertificateAuthorities:()=>jo,sendOperationToNode:()=>uh,servers:()=>Bde,setReplicator:()=>l1,start:()=>Fde,startOnMainThread:()=>pC,subscribeToNode:()=>th,unsubscribeFromNode:()=>VS,urlToNodeName:()=>Ti});function Fde(e){if(!e.port&&!e.securePort&&(e.port=Hs.default.get(B.OPERATIONSAPI_NETWORK_PORT),e.securePort=Hs.default.get(B.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 eh(e))t.set(Ti(s.url),s);Hde(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ue.ws(async(s,i,a,c)=>{if(bt.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),oh(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&bt.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"){bt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&bt.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,i1.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 Yd(s.peerCertificate,e);if(!u.valid){bt.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)){bt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else bt.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:bt.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=cT.createSecureContext(u)}catch(l){bt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Hs.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&i()}a1(()=>{for(let s of n)s()})}function a1(e){let t=0;kd(r=>{r?.ca&&(jo.add(r.ca),jo.size!==t&&(t=jo.size,e?.()))})}function kde(e=!0){o1=e}function Hde(e){o1||(ct(),ic=e.databases,ec(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||oc;for(let[s,i]of aT){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];l1(r,s,e),xC.get(s)?.forEach(i=>i(s))}}))}function l1(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 c1 extends Fr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||oc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(bt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Qn,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=Gde(h,c1.subscription,e);if(E?.isConnected){let g=Fd(t.auditStore,e,h)[tT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new n1.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:xde++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;bt.warn("Error in load from node",Hl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function qde(e,t,r,n,s){let i=aT.get(e);i||aT.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Kd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function Gde(e,t,r){let n=ZV.get(Hl);n||(n=new Map,ZV.set(Hl,n));let s=n.get(r);if(s)return s;let i=Wt().primaryStore.get(e);return i?.url&&(s=new Kd(i.url,t,r,Hl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function uh(e,t,r){r||(r={}),r.serverName=e.name;let n=await rT(e.url,r),s=oh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{bt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{bt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function th(e){try{s1.isMainThread&&bt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=oc.get(e.database);if(!t){let n;t=new Promise(s=>{bt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,oc.set(e.database,t)}let r=qde(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=>Zp(n,e.database)),e.replicateByDefault)}catch(t){bt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function VS({name:e,url:t,database:r}){bt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Wt().primaryStore.getRange({})));let n=aT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function $de(){if(HC!==void 0)return HC;let e=Hs.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||Hs.default.get(B.TLS_CERTIFICATE);if(e)return HC=new t1.X509Certificate((0,r1.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return Hl||(Hl=Hs.default.get("replication_hostname")??Ti(Hs.default.get("replication_url"))??$de()??e1("operationsapi_network_secureport")??e1("operationsapi_network_port")??"127.0.0.1")}function Vde(){Hl=void 0}function e1(e){let t=Hs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function oT(e){let t=Hs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function nT(e){return Jp(e)?.[it()]}function tc(){let e=Hs.default.get("replication_url");return e||lT(it())}function lT(e){let t=oT("replication_port");if(t)return`ws://${e}:${t}`;if(t=oT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=oT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=oT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ti(e){if(e)return new URL(e).hostname}function ec(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return vp(n=>{r(n)}),Nl((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];bt.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):Kde(n)&&t(s,n,!1)}o(r,"forDatabase")}function Kde(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function Xp(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Yde(e){let t={message:""};if(e.replicated){e.replicated=!1,bt.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>uh(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 Hs,bt,t1,r1,cT,n1,s1,i1,o1,xde,Bde,jo,ic,aT,ZV,HC,Hl,ds=ie(()=>{Oe();Ua();Nu();BC();xr();Hs=w(ae()),bt=w(j()),t1=require("crypto");iT();r1=require("fs");rh();vl();H();dC();cT=w(require("node:tls")),n1=w(_e()),s1=require("worker_threads"),i1=w(ms()),xde=1,Bde=[],jo=Hs.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(cT.rootCertificates):new Set;o(Fde,"start");o(a1,"monitorNodeCAs");o(kde,"disableReplication");o(Hde,"assignReplicationSource");o(l1,"setReplicator");aT=new Map;o(qde,"getSubscriptionConnection");ZV=new Map;o(Gde,"getRetrievalConnectionByName");o(uh,"sendOperationToNode");o(th,"subscribeToNode");o(VS,"unsubscribeFromNode");o($de,"getCommonNameFromCert");o(it,"getThisNodeName");o(Vde,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return it()}});o(e1,"getHostFromListeningPort");o(oT,"getPortFromListeningPort");o(nT,"getThisNodeId");Ue.replication={getThisNodeId:nT,exportIdMapping:Jp};o(tc,"getThisNodeUrl");o(lT,"hostnameToUrl");o(Ti,"urlToNodeName");o(ec,"forEachReplicatedDatabase");o(Kde,"hasExplicitlyReplicatedTable");o(Xp,"lastTimeInAuditStore");o(Yde,"replicateOperation")});var mh=D((M0e,p1)=>{"use strict";var Wd=d$(),{validateBySchema:dh}=at(),{commonValidators:zd,schemaRegex:qC}=Gi(),hr=require("joi"),Wde=j(),zde=require("uuid").v4,fT=ko(),jd=(H(),M(Y)),jde=require("util"),ac=ss(),{handleHDBError:Qo,hdbErrors:Qde,ClientError:fh}=_e(),{HDB_ERROR_MSGS:uT,HTTP_STATUS_CODES:Jo}=Qde,{SchemaEventMsg:mT}=ts(),u1=Ft(),{getDatabases:Jde}=(Oe(),M(mt)),{transformReq:Qd}=oe(),{replicateOperation:d1}=(ds(),M(zo)),dT=hr.string().min(1).max(zd.schema_length.maximum).pattern(qC).messages({"string.pattern.base":"{:#label} "+zd.schema_format.message}),Xde=hr.string().min(1).max(zd.schema_length.maximum).pattern(qC).messages({"string.pattern.base":"{:#label} "+zd.schema_format.message}).required(),Zde=hr.string().min(1).max(zd.schema_length.maximum).pattern(qC).messages({"string.pattern.base":"{:#label} "+zd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();p1.exports={createSchema:efe,createSchemaStructure:f1,createTable:tfe,createTableStructure:m1,createAttribute:ofe,dropSchema:rfe,dropTable:nfe,dropAttribute:sfe,getBackup:afe};async function efe(e){let t=await f1(e);return fT.signalSchemaChange(new mT(process.pid,e.operation,e.schema)),t}o(efe,"createSchema");async function f1(e){let t=dh(e,hr.object({database:dT,schema:dT}));if(t)throw new fh(t.message);if(Qd(e),!await Wd.checkSchemaExists(e.schema))throw Qo(new Error,uT.SCHEMA_EXISTS_ERR(e.schema),Jo.BAD_REQUEST,jd.LOG_LEVELS.ERROR,uT.SCHEMA_EXISTS_ERR(e.schema),!0);return await ac.createSchema(e),`database '${e.schema}' successfully created`}o(f1,"createSchemaStructure");async function tfe(e){return Qd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await m1(e)}o(tfe,"createTable");async function m1(e){let t=dh(e,hr.object({database:dT,schema:dT,table:Xde,residence:hr.array().items(hr.string().min(1)).optional(),hash_attribute:Zde}));if(t)throw new fh(t.message);if(!await Wd.checkSchemaTableExists(e.schema,e.table))throw Qo(new Error,uT.TABLE_EXISTS_ERR(e.schema,e.table),Jo.BAD_REQUEST,jd.LOG_LEVELS.ERROR,uT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:zde(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ac.createTable(n,e);else throw Qo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Jo.BAD_REQUEST);else await ac.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(m1,"createTableStructure");async function rfe(e){let t=dh(e,hr.object({database:hr.string(),schema:hr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new fh(t.message);Qd(e);let r=await Wd.checkSchemaExists(e.schema);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,jd.LOG_LEVELS.ERROR,r,!0);let n=await Wd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await ac.dropSchema(e),fT.signalSchemaChange(new mT(process.pid,e.operation,e.schema)),await u1.purgeSchemaTableStreams(e.schema,s);let i=await d1(e);return i.message=`successfully deleted '${e.schema}'`,i}o(rfe,"dropSchema");async function nfe(e){let t=dh(e,hr.object({database:hr.string(),schema:hr.string(),table:hr.string().required()}));if(t)throw new fh(t.message);Qd(e);let r=await Wd.checkSchemaTableExists(e.schema,e.table);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,jd.LOG_LEVELS.ERROR,r,!0);await ac.dropTable(e),await u1.purgeTableStream(e.schema,e.table);let n=await d1(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(nfe,"dropTable");async function sfe(e){let t=dh(e,hr.object({database:hr.string(),schema:hr.string(),table:hr.string().required(),attribute:hr.string().required()}));if(t)throw new fh(t.message);Qd(e);let r=await Wd.checkSchemaTableExists(e.schema,e.table);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,jd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Qo(new Error,"You cannot drop a hash attribute",Jo.BAD_REQUEST,void 0,void 0,!0);if(jd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Qo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Jo.BAD_REQUEST,void 0,void 0,!0);try{return await ac.dropAttribute(e),ife(e),fT.signalSchemaChange(new mT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Wde.error(`Got an error deleting attribute ${jde.inspect(e)}.`),n}}o(sfe,"dropAttribute");function ife(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(ife,"dropAttributeFromGlobal");async function ofe(e){Qd(e);let t=Jde()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Qo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Jo.BAD_REQUEST,void 0,void 0,!0);return await ac.createAttribute(e),fT.signalSchemaChange(new mT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(ofe,"createAttribute");function afe(e){return ac.getBackup(e)}o(afe,"getBackup")});var E1=D((U0e,h1)=>{"use strict";var{OPERATIONS_ENUM:cfe}=(H(),M(Y)),GC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=cfe.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};h1.exports=GC});var $C=D((F0e,y1)=>{"use strict";var lfe=ss(),B0e=E1(),pT=oe(),hT=(H(),M(Y)),ufe=ae(),{handleHDBError:_1,hdbErrors:dfe}=_e(),{HDB_ERROR_MSGS:g1,HTTP_STATUS_CODES:S1}=dfe,ffe=Object.values(hT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),T1="To use this operation audit log must be enabled in harperdb-config.yaml";y1.exports=mfe;async function mfe(e){if(pT.isEmpty(e.schema))throw new Error(g1.SCHEMA_REQUIRED_ERR);if(pT.isEmpty(e.table))throw new Error(g1.TABLE_REQUIRED_ERR);if(!ufe.get(hT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw _1(new Error,T1,S1.BAD_REQUEST,hT.LOG_LEVELS.ERROR,T1,!0);let t=pT.checkSchemaTableExist(e.schema,e.table);if(t)throw _1(new Error,t,S1.NOT_FOUND,hT.LOG_LEVELS.ERROR,t,!0);if(!pT.isEmpty(e.search_type)&&ffe.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await lfe.readAuditLog(e)}o(mfe,"readAuditLog")});var A1=D((H0e,R1)=>{"use strict";var{OPERATIONS_ENUM:pfe}=(H(),M(Y)),VC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=pfe.GET_BACKUP,this.schema=t,this.table=r}};R1.exports=VC});var w1=D((V0e,I1)=>{"use strict";var hfe=ss(),G0e=A1(),KC=oe(),Efe=(H(),M(Y)),$0e=ae(),{handleHDBError:_fe,hdbErrors:gfe}=_e(),{HDB_ERROR_MSGS:b1,HTTP_STATUS_CODES:Sfe}=gfe;I1.exports=Tfe;async function Tfe(e){if(KC.isEmpty(e.schema))throw new Error(b1.SCHEMA_REQUIRED_ERR);if(KC.isEmpty(e.table))throw new Error(b1.TABLE_REQUIRED_ERR);let t=KC.checkSchemaTableExist(e.schema,e.table);if(t)throw _fe(new Error,t,Sfe.NOT_FOUND,Efe.LOG_LEVELS.ERROR,t,!0);return await hfe.getBackup(readAuditLogObject)}o(Tfe,"getBackup")});var P1=D((Y0e,O1)=>{"use strict";var yfe=ae(),cc=require("joi"),Rfe=at(),N1=require("moment"),Afe=require("fs-extra"),YC=require("path"),bfe=require("lodash"),ph=(H(),M(Y)),{LOG_LEVELS:ql}=(H(),M(Y)),Ife="YYYY-MM-DD hh:mm:ss",wfe=YC.resolve(__dirname,"../logs");O1.exports=function(e){return Rfe.validateBySchema(e,Nfe)};var Nfe=cc.object({from:cc.custom(C1),until:cc.custom(C1),level:cc.valid(ql.NOTIFY,ql.FATAL,ql.ERROR,ql.WARN,ql.INFO,ql.DEBUG,ql.TRACE),order:cc.valid("asc","desc"),limit:cc.number().min(1),start:cc.number().min(0),log_name:cc.custom(Cfe)});function C1(e,t){if(N1(e,N1.ISO_8601).format(Ife)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(C1,"validateDatetime");function Cfe(e,t){if(bfe.invert(ph.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=yfe.get(ph.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?ph.LOG_NAMES.HDB:e,i=s===ph.LOG_NAMES.INSTALL?YC.join(wfe,ph.LOG_NAMES.INSTALL):YC.join(n,s);return Afe.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Cfe,"validateReadLogPath")});var zC=D((z0e,D1)=>{"use strict";var ET=(H(),M(Y)),Ofe=j(),Pfe=ae(),Lfe=P1(),WC=require("path"),L1=require("fs-extra"),{once:Dfe}=require("events"),{handleHDBError:Mfe,hdbErrors:vfe}=_e(),{PACKAGE_ROOT:Ufe}=It(),{replicateOperation:xfe}=(ds(),M(zo)),Bfe=WC.join(Ufe,"logs"),Ffe=1e3,kfe=200;D1.exports=Hfe;async function Hfe(e){let t=Lfe(e);if(t)throw Mfe(t,t.message,vfe.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=xfe(e),n=Pfe.get(ET.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?ET.LOG_NAMES.HDB:e.log_name,i=s===ET.LOG_NAMES.INSTALL?WC.join(Bfe,ET.LOG_NAMES.INSTALL):WC.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?Ffe: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(L1.statSync(i).size-(E+5)*kfe,0));let A=L1.createReadStream(i,{start:g});A.on("error",q=>{Ofe.error(q)});let S=0,R=[],N="",O;A.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let J=0,W;for(;(W=k.exec(q))&&!A.destroyed;){O&&(O.message=q.slice(J,W.index),F(O));let[ue,ce,re]=W,Re=re.split("] ["),Te=Re[0],Fe=Re[1];Re.splice(0,2),O={timestamp:ce,thread:Te,level:Fe,tags:Re,message:""},J=W.index+ue.length}N=q.slice(J)}),A.on("end",q=>{A.destroyed||O&&(O.message=N.trim(),F(O))}),A.resume();function F(q){let k,J,W;switch(!0){case(a&&l&&d):k=new Date(q.timestamp),J=new Date(u),W=new Date(f),q.level===c&&k>=J&&k<=W&&S<h?S++:q.level===c&&k>=J&&k<=W&&(so(q,p,R),S++,S===E&&A.destroy());break;case(a&&l):k=new Date(q.timestamp),J=new Date(u),q.level===c&&k>=J&&S<h?S++:q.level===c&&k>=J&&(so(q,p,R),S++,S===E&&A.destroy());break;case(a&&d):k=new Date(q.timestamp),W=new Date(f),q.level===c&&k<=W&&S<h?S++:q.level===c&&k<=W&&(so(q,p,R),S++,S===E&&A.destroy());break;case(l&&d):k=new Date(q.timestamp),J=new Date(u),W=new Date(f),k>=J&&k<=W&&S<h?S++:k>=J&&k<=W&&(so(q,p,R),S++,S===E&&A.destroy());break;case a:q.level===c&&S<h?S++:q.level===c&&(so(q,p,R),S++,S===E&&A.destroy());break;case l:k=new Date(q.timestamp),J=new Date(u),k>=J&&S<h?S++:k>=J&&S>=h&&(so(q,p,R),S++,S===E&&A.destroy());break;case d:k=new Date(q.timestamp),W=new Date(f),k<=W&&S<h?S++:k<=W&&S>=h&&(so(q,p,R),S++,S===E&&A.destroy());break;default:S<h?S++:(so(q,p,R),S++,S===E&&A.destroy())}}o(F,"onLogMessage"),await Dfe(A,"close");let ee=await r;if(ee.replicated){for(let q of R)q.node=server.hostname;for(let q of ee.replicated){let k=q.node;if(q.status==="failed")so({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${q.reason}`},p,R);else for(let J of q.results)J.node=k,so(J,p,R)}}return R}o(Hfe,"readLog");function so(e,t,r){t==="desc"?qfe(e,r):t==="asc"?Gfe(e,r):r.push(e)}o(so,"pushLineToResult");function qfe(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(qfe,"insertDescending");function Gfe(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(Gfe,"insertAscending")});var _T=D((eBe,x1)=>{"use strict";var jC=require("joi"),{string:Jd,boolean:M1,date:$fe}=jC.types(),Vfe=at(),{validateSchemaExists:Q0e,validateTableExists:J0e,validateSchemaName:X0e}=Gi(),Kfe=(H(),M(Y)),Yfe=pt(),v1=ae();v1.initSync();var Z0e=Jd.invalid(v1.get(Kfe.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Yfe.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),U1={operation:Jd.valid("add_node","update_node","set_node_replication"),node_name:Jd.optional(),subscriptions:jC.array().items({table:Jd.optional(),schema:Jd.optional(),database:Jd.optional(),subscribe:M1.required(),publish:M1.required().custom(zfe),start_time:$fe.iso()})};function Wfe(e){return Vfe.validateBySchema(e,jC.object(U1))}o(Wfe,"addUpdateNodeValidator");function zfe(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(zfe,"checkForFalsy");x1.exports={addUpdateNodeValidator:Wfe,validationSchema:U1}});var lc=D((rBe,B1)=>{"use strict";var QC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},JC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};B1.exports={Node:QC,NodeSubscription:JC}});var k1=D((sBe,F1)=>{"use strict";var jfe=(H(),M(Y)).OPERATIONS_ENUM,XC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=jfe.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};F1.exports=XC});var hh=D((oBe,H1)=>{"use strict";var ZC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},eO=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)}};H1.exports={RemotePayloadObject:ZC,RemotePayloadSubscription:eO}});var G1=D((cBe,q1)=>{"use strict";var tO=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}};q1.exports=tO});var V1=D((pBe,$1)=>{"use strict";var Qfe=G1(),uBe=Vt(),dBe=_t(),Jfe=j(),{getSchemaPath:fBe,getTransactionAuditStorePath:mBe}=yt(),{getDatabases:Xfe}=(Oe(),M(mt));$1.exports=Zfe;async function Zfe(e){let t=new Qfe;try{let r=Xfe()[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){Jfe.warn(`unable to stat table dbi due to ${r}`)}return t}o(Zfe,"lmdbGetTableSize")});var Y1=D((EBe,K1)=>{"use strict";var rO=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}};K1.exports=rO});var Zd=D((RBe,Q1)=>{"use strict";var eme=require("fs-extra"),tme=require("path"),gn=require("systeminformation"),uc=j(),W1=Ft(),gBe=pt(),Xd=(H(),M(Y)),rme=V1(),nme=Za(),{getThreadInfo:z1}=Je(),Eh=ae();Eh.initSync();var sme=Y1(),{openEnvironment:SBe}=_t(),{getSchemaPath:TBe}=yt(),{database:yBe,databases:nO}=(Oe(),M(mt)),gT;Q1.exports={getHDBProcessInfo:aO,getNetworkInfo:lO,getDiskInfo:cO,getMemoryInfo:oO,getCPUInfo:iO,getTimeInfo:sO,getSystemInformation:uO,systemInformation:ime,getTableSize:dO,getMetrics:fO};function sO(){return gn.time()}o(sO,"getTimeInfo");async function iO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await gn.cpu();d.cpu_speed=await gn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:A,...S}=await gn.currentLoad();return S.cpus=[],A.forEach(R=>{let{rawLoad:N,rawLoadIdle:O,rawLoadIrq:F,rawLoadNice:ee,rawLoadSystem:q,rawLoadUser:k,...J}=R;S.cpus.push(J)}),d.current_load=S,d}catch(e){return uc.error(`error in getCPUInfo: ${e}`),{}}}o(iO,"getCPUInfo");async function oO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await gn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return uc.error(`error in getMemoryInfo: ${e}`),{}}}o(oO,"getMemoryInfo");async function aO(){let e={core:[],clustering:[]};try{let t=await gn.processes(),r;try{r=Number.parseInt(await eme.readFile(tme.join(Eh.get(Xd.CONFIG_PARAMS.ROOTPATH),Xd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Xd.NODE_ERROR_CODES.ENOENT)uc.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 uc.error(`error in getHDBProcessInfo: ${t}`),e}}o(aO,"getHDBProcessInfo");async function cO(){let e={};try{if(!Eh.get(Xd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await gn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await gn.fsStats();return e.read_write=u,e.size=await gn.fsSize(),e}catch(t){return uc.error(`error in getDiskInfo: ${t}`),e}}o(cO,"getDiskInfo");async function lO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Eh.get(Xd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await gn.networkInterfaceDefault(),e.latency=await gn.inetChecksite("google.com"),(await gn.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 gn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return uc.error(`error in getNetworkInfo: ${t}`),e}}o(lO,"getNetworkInfo");async function uO(){if(gT!==void 0)return gT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await gn.osInfo();e=c;let l=await gn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,gT=e,gT}catch(t){return uc.error(`error in getSystemInformation: ${t}`),e}}o(uO,"getSystemInformation");async function dO(){let e=[],t=await nme.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await rme(n));return e}o(dO,"getTableSize");async function fO(){let e={};for(let t in nO){let r=e[t]={},n=r.tables={};for(let s in nO[t])try{let i=nO[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){uc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(fO,"getMetrics");async function j1(){if(Eh.get(Xd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await W1.getNATSReferences(),t=await W1.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(j1,"getNatsStreamInfo");async function ime(e){let t=new sme;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await uO(),t.time=sO(),t.cpu=await iO(),t.memory=await oO(),t.disk=await cO(),t.network=await lO(),t.harperdb_processes=await aO(),t.table_size=await dO(),t.metrics=await fO(),t.threads=await z1(),t.replication=await j1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await uO();break;case"time":t.time=sO();break;case"cpu":t.cpu=await iO();break;case"memory":t.memory=await oO();break;case"disk":t.disk=await cO();break;case"network":t.network=await lO();break;case"harperdb_processes":t.harperdb_processes=await aO();break;case"table_size":t.table_size=await dO();break;case"database_metrics":case"metrics":t.metrics=await fO();break;case"threads":t.threads=await z1();break;case"replication":t.replication=await j1();break;default:break}return t}o(ime,"systemInformation")});var qs=D((NBe,eK)=>{"use strict";var ome=ln(),mO=oe(),ame=require("util"),Gl=(H(),M(Y)),J1=ae();J1.initSync();var cme=GN(),X1=dn(),{Node:bBe,NodeSubscription:IBe}=lc(),lme=Ju(),ume=k1(),{RemotePayloadObject:dme,RemotePayloadSubscription:fme}=hh(),{handleHDBError:mme,hdbErrors:pme}=_e(),{HTTP_STATUS_CODES:hme,HDB_ERROR_MSGS:Eme}=pme,_me=di(),gme=Zd(),{packageJson:Sme}=It(),{getDatabases:Tme}=(Oe(),M(mt)),wBe=ame.promisify(cme.authorize),yme=X1.searchByHash,Rme=X1.searchByValue;eK.exports={isEmpty:Ame,getNodeRecord:bme,upsertNodeRecord:Ime,buildNodePayloads:wme,checkClusteringEnabled:Nme,getAllNodeRecords:Cme,getSystemInfo:Ome,reverseSubscription:Z1};function Ame(e){return e==null}o(Ame,"isEmpty");async function bme(e){let t=new lme(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return yme(t)}o(bme,"getNodeRecord");async function Ime(e){let t=new ume(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return ome.upsert(t)}o(Ime,"upsertNodeRecord");function Z1(e){if(mO.isEmpty(e.subscribe)||mO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(Z1,"reverseSubscription");function wme(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=mO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=Z1(c),p=Tme()[l]?.[u],h=new fme(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new dme(r,t,s,n)}o(wme,"buildNodePayloads");function Nme(){if(!J1.get(Gl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw mme(new Error,Eme.CLUSTERING_NOT_ENABLED,hme.BAD_REQUEST,void 0,void 0,!0)}o(Nme,"checkClusteringEnabled");async function Cme(){let e=new _me(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Rme(e))}o(Cme,"getAllNodeRecords");async function Ome(){let e=await gme.getSystemInformation();return{hdb_version:Sme.version,node_version:e.node_version,platform:e.platform}}o(Ome,"getSystemInfo")});var pO=D((OBe,cK)=>{"use strict";var ST=Ft(),tK=oe(),rK=pt(),nK=(H(),M(Y)),TT=j(),sK=mh(),Pme=Zu(),{RemotePayloadObject:Lme}=hh(),{handleHDBError:iK,hdbErrors:Dme}=_e(),{HTTP_STATUS_CODES:oK}=Dme,{NodeSubscription:aK}=lc();cK.exports=Mme;async function Mme(e,t){let r;try{r=await ST.request(`${t}.${rK.REQUEST_SUFFIX}`,new Lme(nK.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),TT.trace("Response from remote describe all request:",r)}catch(a){TT.error(`addNode received error from describe all request to remote node: ${a}`);let c=ST.requestErrorHandler(a,"add_node",t);throw iK(new Error,c,oK.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===rK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw iK(new Error,a,oK.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===nK.SYSTEM_SCHEMA_NAME){await ST.createLocalTableStream(l,c);let h=new aK(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=tK.doesSchemaExist(l),d=n[l]!==void 0,f=c?tK.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(TT.trace(`addNode creating schema: ${l}`),await sK.createSchema({operation:"create_schema",schema:l})),!f&&m){TT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Pme(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await sK.createTable(h)}await ST.createLocalTableStream(l,c);let p=new aK(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(Mme,"reviewSubscriptions")});var ef={};Ie(ef,{addNodeBack:()=>hO,removeNodeBack:()=>EO,setNode:()=>Bme});async function Bme(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Ti(t)):t=lT(r);let n=(0,uK.validateBySchema)(e,xme);if(n)throw(0,Xo.handleHDBError)(n,n.message,Ume.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Xo.ClientError("url or hostname is required for remove_node operation");let p=r,h=Wt(),E=await h.get(p);if(!E)throw new Xo.ClientError(p+" does not exist");try{await uh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){ps.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 Xo.ClientError("url required for this operation");let s=tc();if(s==null)throw new Xo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Gs.getReplicationCert)();let p=await(0,Gs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Gs.createCsr)(),ps.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ps.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,fc.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,fc.get)(B.REPLICATION_SHARD)!==void 0&&(l.shard=(0,fc.get)(B.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(lK):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=lK(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 uh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ps.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&&(ps.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Gs.setCertTable)({name:vme.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Gs.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,fc.get)(B.REPLICATION_SHARD)!==void 0&&(p.shard=(0,fc.get)(B.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Yo(it(),p)}await Yo(u?u.nodeName:f.name??Ti(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function hO(e){ps.trace("addNodeBack received request:",e);let t=await(0,Gs.signCertificate)(e),r;e.csr?(r=t.signingCA,ps.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,ps.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Gs.getReplicationCertAuth)();if(n.replicates){let i={url:tc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,fc.get)(B.REPLICATION_SHARD)!==void 0&&(i.shard=(0,fc.get)(B.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Yo(it(),i)}return await Yo(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,ps.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function EO(e){ps.trace("removeNodeBack received request:",e),await Wt().delete(e.name)}function lK(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Gs,uK,dc,fc,ps,Xo,vme,Ume,xme,tf=ie(()=>{Gs=w(ms()),uK=w(at()),dc=w(require("joi")),fc=w(ae());H();rh();vl();ds();ps=w(j()),Xo=w(_e()),{pki:vme}=require("node-forge"),{HTTP_STATUS_CODES:Ume}=Xo.hdbErrors,xme=dc.default.object({hostname:dc.default.string(),verify_tls:dc.default.boolean(),replicates:dc.default.boolean(),subscriptions:dc.default.array(),revoked_certificates:dc.default.array(),shard:dc.default.number()});o(Bme,"setNode");o(hO,"addNodeBack");o(EO,"removeNodeBack");o(lK,"reverseSubscription")});var IT=D((FBe,fK)=>{"use strict";var{handleHDBError:yT,hdbErrors:Fme}=_e(),{HTTP_STATUS_CODES:RT}=Fme,{addUpdateNodeValidator:kme}=_T(),AT=j(),bT=(H(),M(Y)),dK=pt(),Hme=oe(),_h=Ft(),gh=qs(),_O=ae(),qme=pO(),{Node:Gme,NodeSubscription:$me}=lc(),{broadcast:Vme}=Je(),{setNode:Kme}=(tf(),M(ef)),xBe=ae(),BBe=(H(),M(Y)),Yme="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Wme="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",zme=_O.get(bT.CONFIG_PARAMS.CLUSTERING_NODENAME);fK.exports=jme;async function jme(e,t=!1){if(AT.trace("addNode called with:",e),_O.get(bT.CONFIG_PARAMS.REPLICATION_URL)||_O.get(bT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Kme(e);gh.checkClusteringEnabled();let r=kme(e);if(r)throw yT(r,r.message,RT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await gh.getNodeRecord(n);if(!Hme.isEmptyOrZeroLength(f))throw yT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,RT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await qme(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=Yme,a;let c=gh.buildNodePayloads(s,zme,bT.OPERATIONS_ENUM.ADD_NODE,await gh.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 $me(p.schema,p.table,p.publish,p.subscribe))}AT.trace("addNode sending remote payload:",c);let u;try{u=await _h.request(`${n}.${dK.REQUEST_SUFFIX}`,c)}catch(f){AT.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 _h.updateRemoteConsumer(E,n)}let m=_h.requestErrorHandler(f,"add_node",n);throw yT(new Error,m,RT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===dK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw yT(new Error,f,RT.INTERNAL_SERVER_ERROR,"error",f)}AT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await _h.updateRemoteConsumer(p,n),p.subscribe===!0&&await _h.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new Gme(n,l,u.system_info);return await gh.upsertNodeRecord(d),Vme({type:"nats_update"}),i.length>0?a.message=Wme:a.message=`Successfully added '${n}' to manifest`,a}o(jme,"addNode")});var yO=D((qBe,pK)=>{"use strict";var{handleHDBError:gO,hdbErrors:Qme}=_e(),{HTTP_STATUS_CODES:SO}=Qme,{addUpdateNodeValidator:Jme}=_T(),Sh=j(),wT=(H(),M(Y)),mK=pt(),HBe=oe(),Th=Ft(),yh=qs(),TO=ae(),{cloneDeep:Xme}=require("lodash"),Zme=pO(),{Node:epe,NodeSubscription:tpe}=lc(),{broadcast:rpe}=Je(),{setNode:npe}=(tf(),M(ef)),spe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",ipe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ope=TO.get(wT.CONFIG_PARAMS.CLUSTERING_NODENAME);pK.exports=ape;async function ape(e){if(Sh.trace("updateNode called with:",e),TO.get(wT.CONFIG_PARAMS.REPLICATION_URL)??TO.get(wT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return npe(e);yh.checkClusteringEnabled();let t=Jme(e);if(t)throw gO(t,t.message,SO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await yh.getNodeRecord(r);s.length>0&&(n=Xme(s));let{added:i,skipped:a}=await Zme(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=spe,c;let l=yh.buildNodePayloads(i,ope,wT.OPERATIONS_ENUM.UPDATE_NODE,await yh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Sh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Sh.trace("updateNode sending remote payload:",l);let u;try{u=await Th.request(`${r}.${mK.REQUEST_SUFFIX}`,l)}catch(d){Sh.error(`updateNode received error from request: ${d}`);let f=Th.requestErrorHandler(d,"update_node",r);throw gO(new Error,f,SO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===mK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw gO(new Error,d,SO.INTERNAL_SERVER_ERROR,"error",d)}Sh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Th.updateRemoteConsumer(m,r),m.subscribe===!0?await Th.updateConsumerIterator(m.schema,m.table,r,"start"):await Th.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new epe(r,[],u.system_info)]),await cpe(n[0],i,u.system_info),a.length>0?c.message=ipe:c.message=`Successfully updated '${r}'`,c}o(ape,"updateNode");async function cpe(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 tpe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await yh.upsertNodeRecord(n),rpe({type:"nats_update"})}o(cpe,"updateNodeTable")});var SK=D(($Be,gK)=>{"use strict";var _K=require("joi"),{string:hK}=_K.types(),lpe=at(),EK=(H(),M(Y)),upe=ae(),dpe=pt();gK.exports=fpe;function fpe(e){let t=hK.invalid(upe.get(EK.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(dpe.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=_K.object({operation:hK.valid(EK.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return lpe.validateBySchema(e,r)}o(fpe,"removeNodeValidator")});var NT=D((KBe,bK)=>{"use strict";var{handleHDBError:TK,hdbErrors:mpe}=_e(),{HTTP_STATUS_CODES:yK}=mpe,ppe=SK(),Rh=j(),RK=qs(),hpe=oe(),rf=(H(),M(Y)),AK=pt(),RO=Ft(),AO=ae(),{RemotePayloadObject:Epe}=hh(),{NodeSubscription:_pe}=lc(),gpe=Xu(),Spe=Va(),{broadcast:Tpe}=Je(),{setNode:ype}=(tf(),M(ef)),Rpe=AO.get(rf.CONFIG_PARAMS.CLUSTERING_NODENAME);bK.exports=Ape;async function Ape(e){if(Rh.trace("removeNode called with:",e),AO.get(rf.CONFIG_PARAMS.REPLICATION_URL)??AO.get(rf.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ype(e);RK.checkClusteringEnabled();let t=ppe(e);if(t)throw TK(t,t.message,yK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await RK.getNodeRecord(r);if(hpe.isEmptyOrZeroLength(n))throw TK(new Error,`Node '${r}' was not found.`,yK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Epe(rf.OPERATIONS_ENUM.REMOVE_NODE,Rpe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await RO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await RO.updateRemoteConsumer(new _pe(d.schema,d.table,!1,!1),r)}catch(f){Rh.error(f)}}try{i=await RO.request(`${r}.${AK.REQUEST_SUFFIX}`,s),Rh.trace("Remove node reply from remote node:",r,i)}catch(l){Rh.error("removeNode received error from request:",l),a=!0}let c=new gpe(rf.SYSTEM_SCHEMA_NAME,rf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Spe.deleteRecord(c),Tpe({type:"nats_update"}),i?.status===AK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(Rh.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(Ape,"removeNode")});var NK=D((WBe,wK)=>{"use strict";var IK=require("joi"),{string:bpe,array:Ipe}=IK.types(),wpe=at(),Npe=_T();wK.exports=Cpe;function Cpe(e){let t=IK.object({operation:bpe.valid("configure_cluster").required(),connections:Ipe.items(Npe.validationSchema).required()});return wpe.validateBySchema(e,t)}o(Cpe,"configureClusterValidator")});var bO=D((jBe,DK)=>{"use strict";var CK=(H(),M(Y)),CT=j(),Ope=oe(),Ppe=ae(),Lpe=NT(),Dpe=IT(),Mpe=qs(),vpe=NK(),{handleHDBError:OK,hdbErrors:Upe}=_e(),{HTTP_STATUS_CODES:PK}=Upe,xpe="Configure cluster complete.",Bpe="Failed to configure the cluster. Check the logs for more details.",Fpe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";DK.exports=kpe;async function kpe(e){CT.trace("configure cluster called with:",e);let t=vpe(e);if(t)throw OK(t,t.message,PK.BAD_REQUEST,void 0,void 0,!0);let r=await Mpe.getAllNodeRecords(),n=[];if(Ppe.get(CK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await LK(Lpe,{operation:CK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}CT.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 LK(Dpe,f,f.node_name);s.push(m)}CT.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"&&(CT.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(Ope.isEmptyOrZeroLength(a))return{message:xpe,connections:c};if(l)return{message:Fpe,failed_nodes:a,connections:c};throw OK(new Error,Bpe,PK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(kpe,"configureCluster");async function LK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(LK,"functionWrapper")});var xK=D((JBe,UK)=>{"use strict";var Ah=require("joi"),Hpe=at(),{validateSchemaExists:MK,validateTableExists:qpe,validateSchemaName:vK}=Gi(),Gpe=Ah.object({operation:Ah.string().valid("purge_stream"),schema:Ah.string().custom(MK).custom(vK).optional(),database:Ah.string().custom(MK).custom(vK).optional(),table:Ah.string().custom(qpe).required()});function $pe(e){return Hpe.validateBySchema(e,Gpe)}o($pe,"purgeStreamValidator");UK.exports=$pe});var IO=D((ZBe,BK)=>{"use strict";var{handleHDBError:Vpe,hdbErrors:Kpe}=_e(),{HTTP_STATUS_CODES:Ype}=Kpe,Wpe=xK(),zpe=Ft(),jpe=qs();BK.exports=Qpe;async function Qpe(e){e.schema=e.schema??e.database;let t=Wpe(e);if(t)throw Vpe(t,t.message,Ype.BAD_REQUEST,void 0,void 0,!0);jpe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await zpe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Qpe,"purgeStream")});var CO=D((tFe,VK)=>{"use strict";var NO=qs(),Jpe=Ft(),PT=ae(),nf=(H(),M(Y)),$l=pt(),Xpe=oe(),wO=j(),{RemotePayloadObject:Zpe}=hh(),{ErrorCode:FK}=require("nats"),{parentPort:kK}=require("worker_threads"),{onMessageByType:ehe}=Je(),{getThisNodeName:the}=(ds(),M(zo)),{requestClusterStatus:rhe}=(rh(),M(X$)),{getReplicationSharedStatus:nhe,getHDBNodeTable:she}=(vl(),M(fC)),{CONFIRMATION_STATUS_POSITION:ihe,RECEIVED_VERSION_POSITION:ohe,RECEIVED_TIME_POSITION:ahe,SENDING_TIME_POSITION:che,RECEIVING_STATUS_POSITION:lhe,RECEIVING_STATUS_RECEIVING:uhe}=(BC(),M($V)),HK=PT.get(nf.CONFIG_PARAMS.CLUSTERING_ENABLED),qK=PT.get(nf.CONFIG_PARAMS.CLUSTERING_NODENAME);VK.exports={clusterStatus:dhe,buildNodeStatus:$K};var GK;ehe("cluster-status",async e=>{GK(e)});async function dhe(){if(PT.get(nf.CONFIG_PARAMS.REPLICATION_URL)||PT.get(nf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(kK){kK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{GK=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=nhe(u,l,a);c.lastCommitConfirmed=OT(d[ihe]),c.lastReceivedRemoteTime=OT(d[ohe]),c.lastReceivedLocalTime=OT(d[ahe]),c.sendingMessage=OT(d[che]),c.lastReceivedStatus=d[lhe]===uhe?"Receiving":"Waiting"}}}else n=rhe();n.node_name=the();let s=she().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:qK,is_enabled:HK,connections:[]};if(!HK)return e;let t=await NO.getAllNodeRecords();if(Xpe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push($K(t[n],e.connections));return await Promise.allSettled(r),e}o(dhe,"clusterStatus");function OT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(OT,"asDate");async function $K(e,t){let r=e.name,n=new Zpe(nf.OPERATIONS_ENUM.CLUSTER_STATUS,qK,void 0,await NO.getSystemInfo()),s,i,a=$l.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Jpe.request($l.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===$l.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=$l.CLUSTER_STATUS_STATUSES.CLOSED,wO.error(`Error getting node status from ${r} `,s))}catch(l){wO.warn(`Error getting node status from ${r}`,l),l.code===FK.NoResponders?a=$l.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===FK.Timeout?a=$l.CLUSTER_STATUS_STATUSES.TIMEOUT:a=$l.CLUSTER_STATUS_STATUSES.CLOSED}let c=new fhe(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!==nf.PRE_4_0_0_VERSION&&await NO.upsertNodeRecord(l)}catch(l){wO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o($K,"buildNodeStatus");function fhe(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(fhe,"NodeStatusObject")});var PO=D((nFe,KK)=>{"use strict";var{handleHDBError:mhe,hdbErrors:phe}=_e(),{HTTP_STATUS_CODES:hhe}=phe,Ehe=Ft(),_he=qs(),OO=oe(),LT=require("joi"),ghe=at(),She=2e3,The=LT.object({timeout:LT.number().min(1),connected_nodes:LT.boolean(),routes:LT.boolean()});KK.exports=yhe;async function yhe(e){_he.checkClusteringEnabled();let t=ghe.validateBySchema(e,The);if(t)throw mhe(t,t.message,hhe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||OO.autoCastBoolean(n),a=s===void 0||OO.autoCastBoolean(s),c={nodes:[]},l=await Ehe.getServerList(r??She),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:OO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(yhe,"clusterNetwork")});var jK=D((iFe,zK)=>{"use strict";var LO=require("joi"),YK=at(),{routeConstraints:WK}=vw();zK.exports={setRoutesValidator:Rhe,deleteRoutesValidator:Ahe};function Rhe(e){let t=LO.object({server:LO.valid("hub","leaf"),routes:WK.required()});return YK.validateBySchema(e,t)}o(Rhe,"setRoutesValidator");function Ahe(e){let t=LO.object({routes:WK.required()});return YK.validateBySchema(e,t)}o(Ahe,"deleteRoutesValidator")});var DT=D((aFe,rY)=>{"use strict";var Zo=At(),DO=oe(),$s=(H(),M(Y)),sf=ae(),QK=jK(),{handleHDBError:JK,hdbErrors:bhe}=_e(),{HTTP_STATUS_CODES:XK}=bhe,ZK="cluster routes successfully set",eY="cluster routes successfully deleted";rY.exports={setRoutes:whe,getRoutes:Nhe,deleteRoutes:Che};function Ihe(e){let t=Zo.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=DO.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"?Zo.updateConfigValue($s.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Zo.updateConfigValue($s.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:ZK,set:i,skipped:s}}o(Ihe,"setRoutesNats");function whe(e){let t=QK.setRoutesValidator(e);if(t)throw JK(t,t.message,XK.BAD_REQUEST,void 0,void 0,!0);if(sf.get($s.CONFIG_PARAMS.CLUSTERING_ENABLED))return Ihe(e);let r=[],n=[],s=sf.get($s.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{tY(s,i)?n.push(i):(s.push(i),r.push(i))}),Zo.updateConfigValue($s.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:ZK,set:r,skipped:n}}o(whe,"setRoutes");function tY(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(tY,"existsInArray");function Nhe(){if(sf.get($s.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Zo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return sf.get($s.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(Nhe,"getRoutes");function Che(e){let t=QK.deleteRoutesValidator(e);if(t)throw JK(t,t.message,XK.BAD_REQUEST,void 0,void 0,!0);if(sf.get($s.CONFIG_PARAMS.CLUSTERING_ENABLED))return Ohe(e);let r=[],n=[],s=sf.get($s.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{tY(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Zo.updateConfigValue($s.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:eY,deleted:r,skipped:n}}o(Che,"deleteRoutes");function Ohe(e){let t=Zo.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=DO.isEmptyOrZeroLength(r)?null:r,Zo.updateConfigValue($s.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=DO.isEmptyOrZeroLength(n)?null:n,Zo.updateConfigValue($s.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:eY,deleted:s,skipped:i}}o(Ohe,"deleteRoutesNats")});var sY=D((lFe,nY)=>{"use strict";var bh=require("alasql"),Vl=require("recursive-iterator"),Ai=j(),Phe=oe(),Ih=(H(),M(Y)),MO=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,Dhe(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=>Ih.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=>!Ih.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][Ih.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Lhe(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=>!Ih.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new bh.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 Lhe(e){return e.filter(t=>t[Ih.PERMS_CRUD_ENUM.READ])}o(Lhe,"filterReadRestrictedAttrs");function Dhe(e,t,r,n,s){Mhe(e,t,r,n,s)}o(Dhe,"interpretAST");function wh(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(wh,"addSchemaTableToMap");function Mhe(e,t,r,n,s){if(!e){Ai.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof bh.yy.Insert?Bhe(e,t,r):e instanceof bh.yy.Select?vhe(e,t,r,n,s):e instanceof bh.yy.Update?Uhe(e,t,r):e instanceof bh.yy.Delete?xhe(e,t,r):Ai.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(Mhe,"getRecordAttributesAST");function vhe(e,t,r,n,s){if(!e){Ai.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Phe.isEmptyOrZeroLength(i)){Ai.error("No schema specified");return}e.from.forEach(c=>{wh(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),wh(c.table,t,r,n,s)});let a=new Vl(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{Ai.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 Vl(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{Ai.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 Vl(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{Ai.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 Vl(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{Ai.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(vhe,"getSelectAttributes");function Uhe(e,t,r){if(!e){Ai.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Vl(e.columns),s=e.table.databaseid;wh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&vO(e.table.tableid,s,i.columnid,t,r)}o(Uhe,"getUpdateAttributes");function xhe(e,t,r){if(!e){Ai.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Vl(e.where),s=e.table.databaseid;wh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&vO(e.table.tableid,s,i.columnid,t,r)}o(xhe,"getDeleteAttributes");function Bhe(e,t,r){if(!e){Ai.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Vl(e.columns),s=e.into.databaseid;wh(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&vO(e.into.tableid,s,i.columnid,t,r)}o(Bhe,"getInsertAttributes");function vO(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(vO,"pushAttribute");nY.exports=MO});var oY=D((dFe,iY)=>{"use strict";var Fhe=pt(),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+Fhe.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"}};iY.exports=UO});var lY=D((mFe,cY)=>{"use strict";var aY=pt(),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+aY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+aY.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"}};cY.exports=xO});var dY=D((hFe,uY)=>{"use strict";var BO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};uY.exports=BO});var mY=D((_Fe,fY)=>{"use strict";var khe=pt(),FO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+khe.SERVER_SUFFIX.ADMIN,this.password=r}};fY.exports=FO});var xT=D((SFe,EY)=>{"use strict";var Kl=require("path"),Yl=require("fs-extra"),Hhe=oY(),qhe=lY(),Ghe=dY(),$he=mY(),kO=cs(),af=oe(),qn=At(),vT=(H(),M(Y)),Nh=pt(),{CONFIG_PARAMS:ir}=vT,cf=j(),Ch=ae(),pY=zi(),HO=Ft(),Vhe=ms(),of="clustering",Khe=1e4,hY=50;EY.exports={generateNatsConfig:Whe,removeNatsConfig:zhe,getHubConfigPath:Yhe};function Yhe(){let e=Ch.get(ir.ROOTPATH);return Kl.join(e,of,Nh.NATS_CONFIG_FILES.HUB_SERVER)}o(Yhe,"getHubConfigPath");async function Whe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Ch.get(ir.ROOTPATH);Yl.ensureDirSync(Kl.join(r,"clustering","leaf")),Ch.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 Yl.exists(i)&&!await Yl.exists(!n)&&await Vhe.createNatsCerts();let a=Kl.join(r,of,Nh.PID_FILES.HUB),c=Kl.join(r,of,Nh.PID_FILES.LEAF),l=qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Kl.join(r,of,Nh.NATS_CONFIG_FILES.HUB_SERVER),d=Kl.join(r,of,Nh.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()||UT("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();(af.isEmpty(A)||A.active!==!0)&&UT(`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 MT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await MT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await MT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await MT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],R=[];for(let[J,W]of E.entries())W.role?.role===vT.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(S.push(new $he(W.username,pY.decrypt(W.hash))),R.push(new Ghe(W.username,pY.decrypt(W.hash))));let N=[],{hub_routes:O}=qn.getClusteringRoutes();if(!af.isEmptyOrZeroLength(O))for(let J of O)N.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${J.host}:${J.port}`);let F=new Hhe(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),N,S,R);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=af.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===vT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Yl.writeJson(u,F),cf.trace(`Hub server config written to ${u}`));let ee=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,q=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new qhe(qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[ee],[q],S,R,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===vT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Yl.writeJson(d,k),cf.trace(`Leaf server config written to ${d}`))}o(Whe,"generateNatsConfig");async function MT(e){let t=Ch.get(e);return af.isEmpty(t)&&UT(`port undefined for '${e}'`),await af.isPortTaken(t)&&UT(`'${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(MT,"isPortAvailable");function UT(e){let t=`Error generating clustering config: ${e}`;cf.error(t),console.error(t),process.exit(1)}o(UT,"generateNatsConfigError");async function zhe(e){let{port:t,config_file:r}=HO.getServerConfig(e),{username:n,decrypt_hash:s}=await kO.getClusterUser(),i=0,a=2e3;for(;i<hY;){try{let d=await HO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){cf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=hY)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&&cf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await af.asyncSetTimeout(u)}let c="0".repeat(Khe),l=Kl.join(Ch.get(ir.ROOTPATH),of,r);await Yl.writeFile(l,c),await Yl.remove(l),cf.notify(e,"started.")}o(zhe,"removeNatsConfig")});var RY=D((yFe,yY)=>{"use strict";var hs=ae(),Qe=(H(),M(Y)),Oh=pt(),ea=require("path"),{PACKAGE_ROOT:FT}=It(),_Y=ae(),BT=oe(),lf="/dev/null",jhe=ea.join(FT,"launchServiceScripts"),gY=ea.join(FT,"utility/scripts"),Qhe=ea.join(gY,Qe.HDB_RESTART_SCRIPT),SY=ea.resolve(FT,"dependencies",`${process.platform}-${process.arch}`,Oh.NATS_BINARY_NAME);function TY(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return BT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=BT.getEnvCliRootPath()),{name:Qe.PROCESS_DESCRIPTORS.HDB,script:Qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,cwd:FT}}o(TY,"generateMainServerConfig");var Jhe=9930;function Xhe(){hs.initSync(!0);let e=hs.get(Qe.CONFIG_PARAMS.ROOTPATH),t=ea.join(e,"clustering",Oh.NATS_CONFIG_FILES.HUB_SERVER),r=ea.join(hs.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=_Y.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Oh.LOG_LEVEL_FLAGS[hs.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Jhe?"-"+n:""),script:SY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return hs.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=lf,i.error_file=lf),i}o(Xhe,"generateNatsHubServerConfig");var Zhe=9940;function eEe(){hs.initSync(!0);let e=hs.get(Qe.CONFIG_PARAMS.ROOTPATH),t=ea.join(e,"clustering",Oh.NATS_CONFIG_FILES.LEAF_SERVER),r=ea.join(hs.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=_Y.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Oh.LOG_LEVEL_FLAGS[hs.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Zhe?"-"+n:""),script:SY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return hs.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=lf,i.error_file=lf),i}o(eEe,"generateNatsLeafServerConfig");function tEe(){hs.initSync();let e=ea.join(hs.get(Qe.CONFIG_PARAMS.LOGGING_ROOT),Qe.LOG_NAMES.HDB),t={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:jhe,autorestart:!1};return hs.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=lf,t.error_file=lf),t}o(tEe,"generateClusteringUpgradeV4ServiceConfig");function rEe(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.RESTART_HDB};return BT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=BT.getEnvCliRootPath()),{...{name:Qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:gY},script:Qhe}}o(rEe,"generateRestart");function nEe(){return{apps:[TY()]}}o(nEe,"generateAllServiceConfigs");yY.exports={generateAllServiceConfigs:nEe,generateMainServerConfig:TY,generateRestart:rEe,generateNatsHubServerConfig:Xhe,generateNatsLeafServerConfig:eEe,generateClusteringUpgradeV4ServiceConfig:tEe}});var Lh=D((bFe,xY)=>{"use strict";var ft=(H(),M(Y)),sEe=oe(),ra=xT(),kT=Ft(),ta=pt(),mc=RY(),HT=ae(),Wl=j(),iEe=qs(),{startWorker:AY,onMessageFromWorkers:oEe}=Je(),aEe=Zd(),AFe=require("util"),cEe=require("child_process"),lEe=require("fs"),{execFile:uEe}=cEe,tt;xY.exports={enterPM2Mode:dEe,start:pc,stop:qO,reload:IY,restart:wY,list:GO,describe:OY,connect:na,kill:EEe,startAllServices:_Ee,startService:$O,getUniqueServicesList:PY,restartAllServices:gEe,isServiceRegistered:LY,reloadStopStart:DY,restartHdb:CY,deleteProcess:pEe,startClusteringProcesses:vY,startClusteringThreads:UY,isHdbRestartRunning:hEe,isClusteringRunning:TEe,stopClustering:SEe,reloadClustering:yEe,expectedRestartOfChildren:NY};var Ph=!1;oEe(e=>{e.type==="restart"&&HT.initSync(!0)});function dEe(){Ph=!0}o(dEe,"enterPM2Mode");function na(){return tt||(tt=require("pm2")),new Promise((e,t)=>{tt.connect((r,n)=>{r&&t(r),e(n)})})}o(na,"connect");var Sn,fEe=10,bY;function pc(e,t=!1){if(Ph)return mEe(e);let r=uEe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=Sn.indexOf(r);a>-1&&Sn.splice(a,1),!bY&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<fEe&&(lEe.existsSync(ra.getHubConfigPath())?pc(e):(await ra.generateNatsConfig(!0),pc(e),await new Promise(c=>setTimeout(c,3e3)),await ra.removeNatsConfig(ft.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ra.removeNatsConfig(ft.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=HT.get(ft.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&ta.LOG_LEVEL_HIERARCHY[a]>=ta.LOG_LEVEL_HIERARCHY[d||"info"]){let p=d===ta.LOG_LEVELS.ERR||d===ta.LOG_LEVELS.WRN?Wl.OUTPUTS.STDERR:Wl.OUTPUTS.STDOUT;Wl.logCustomLevel(d||"info",p,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=ta.LOG_LEVELS[m]}if(ta.LOG_LEVEL_HIERARCHY[a]>=ta.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===ta.LOG_LEVELS.ERR||d===ta.LOG_LEVELS.WRN?Wl.OUTPUTS.STDERR:Wl.OUTPUTS.STDOUT;Wl.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Sn&&(Sn=[],!t)){let i=o(()=>{bY=!0,Sn&&(Sn.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Sn.push(r)}o(pc,"start");function mEe(e){return new Promise(async(t,r)=>{try{await na()}catch(n){r(n)}tt.start(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(mEe,"startWithPM2");function qO(e){if(!Ph){for(let t of Sn||[])t.name===e&&(Sn.splice(Sn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await na()}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(qO,"stop");function IY(e){return new Promise(async(t,r)=>{try{await na()}catch(n){r(n)}tt.reload(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(IY,"reload");function wY(e){if(!Ph){NY();for(let t of Sn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await na()}catch(n){r(n)}tt.restart(e,(n,s)=>{tt.disconnect(),t(s)})})}o(wY,"restart");function NY(){for(let e of Sn||[])e.config&&(e.config.restarts=0)}o(NY,"expectedRestartOfChildren");function pEe(e){return new Promise(async(t,r)=>{try{await na()}catch(n){r(n)}tt.delete(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(pEe,"deleteProcess");async function CY(){await pc(mc.generateRestart())}o(CY,"restartHdb");async function hEe(){let e=await GO();for(let t in e)if(e[t].name===ft.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(hEe,"isHdbRestartRunning");function GO(){return new Promise(async(e,t)=>{try{await na()}catch(r){t(r)}tt.list((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(GO,"list");function OY(e){return new Promise(async(t,r)=>{try{await na()}catch(n){r(n)}tt.describe(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(OY,"describe");function EEe(){if(!Ph){for(let e of Sn||[])e.kill();Sn=[];return}return new Promise(async(e,t)=>{try{await na()}catch(r){t(r)}tt.killDaemon((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(EEe,"kill");async function _Ee(){try{await vY(),await UY(),await pc(mc.generateAllServiceConfigs())}catch(e){throw tt?.disconnect(),e}}o(_Ee,"startAllServices");async function $O(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ft.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=mc.generateMainServerConfig();break;case ft.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=mc.generateNatsIngestServiceConfig();break;case ft.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=mc.generateNatsReplyServiceConfig();break;case ft.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=mc.generateNatsHubServerConfig(),await pc(r,t),await ra.removeNatsConfig(e);return;case ft.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=mc.generateNatsLeafServerConfig(),await pc(r,t),await ra.removeNatsConfig(e);return;case ft.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 pc(r)}catch(r){throw tt?.disconnect(),r}}o($O,"startService");async function PY(){try{let e=await GO(),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(PY,"getUniqueServicesList");async function gEe(e=[]){try{let t=!1,r=await PY();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===ft.PROCESS_DESCRIPTORS.HDB?t=!0:await wY(a))}t&&await DY(ft.PROCESS_DESCRIPTORS.HDB)}catch(t){throw tt?.disconnect(),t}}o(gEe,"restartAllServices");async function LY(e){if(Sn?.find(r=>r.name===e))return!0;let t=await aEe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(LY,"isServiceRegistered");async function DY(e){let t=HT.get(ft.CONFIG_PARAMS.THREADS_COUNT)??HT.get(ft.CONFIG_PARAMS.THREADS),r=await OY(e),n=sEe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await qO(e),await $O(e)):e===ft.PROCESS_DESCRIPTORS.HDB?await CY():await IY(e)}o(DY,"reloadStopStart");var MY;async function vY(e=!1){for(let t in ft.CLUSTERING_PROCESSES){let r=ft.CLUSTERING_PROCESSES[t];await $O(r,e)}}o(vY,"startClusteringProcesses");async function UY(){MY=AY(ft.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ft.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await kT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await kT.updateLocalStreams();let e=await iEe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ft.PRE_4_0_0_VERSION){Wl.info("Starting clustering upgrade 4.0.0 process"),AY(ft.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(UY,"startClusteringThreads");async function SEe(){for(let e in ft.CLUSTERING_PROCESSES)if(e!==ft.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ft.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await MY.terminate();else{let t=ft.CLUSTERING_PROCESSES[e];await qO(t)}}o(SEe,"stopClustering");async function TEe(){for(let e in ft.CLUSTERING_PROCESSES){let t=ft.CLUSTERING_PROCESSES[e];if(await LY(t)===!1)return!1}return!0}o(TEe,"isClusteringRunning");async function yEe(){await ra.generateNatsConfig(!0),await kT.reloadNATSHub(),await kT.reloadNATSLeaf(),await ra.removeNatsConfig(ft.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ra.removeNatsConfig(ft.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(yEe,"reloadClustering")});var YO={};Ie(YO,{compactOnStart:()=>REe,copyDb:()=>GY});async function REe(){hc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,VO.get)(B.ROOTPATH),t=new Map,r=ct();(0,KO.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,qT.join)(e,"backup",n+".mdb"),a=(0,qT.join)(e,Gc,n+"-copy.mdb"),c=0;try{c=await BY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){hc.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 GY(n,a),console.log("Backing up",n,"to",i);try{await(0,zl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{Td()}catch(n){hc.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,zl.move)(i,s,{overwrite:!0}),await(0,zl.remove)((0,qT.join)(e,Gc,`${n}-copy.mdb-lock`));try{Td()}catch(n){hc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){hc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,KO.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,zl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw Td(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await BY(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}.
|
|
18
|
+
`,"")}o(v$,"runCommand");async function Mue(){try{await lue.access(rC)}catch{return!1}let e=await v$(`${rC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return uue.eq(t,Lue)}o(Mue,"checkNATSServerInstalled");async function aC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await D$.getClusterUser();if(Ml(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}Si.trace("create nats connection called");let i=await Rue({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(),Si.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&Si.error("Error with Nats client connection, connection closed",a),i===_n&&U$()}),i}o(aC,"createConnection");function U$(){_n=void 0,Pl=void 0,Ll=void 0,Dl=void 0}o(U$,"clearClientCache");async function vue(){_n&&(await _n.drain(),_n=void 0,Pl=void 0,Ll=void 0,Dl=void 0)}o(vue,"closeConnection");var _n,Dl;async function jp(){return Dl||(Dl=aC(Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_n=await Dl),_n||Dl}o(jp,"getConnection");async function Qp(){if(Pl)return Pl;Ml(_n)&&await jp();let{domain:e}=vd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ml(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Pl=await _n.jetstreamManager({domain:e,timeout:6e4}),Pl}o(Qp,"getJetStreamManager");async function x$(){if(Ll)return Ll;Ml(_n)&&await jp();let{domain:e}=vd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ml(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ll=_n.jetstream({domain:e,timeout:6e4}),Ll}o(x$,"getJetStream");async function to(){let e=_n||await jp(),t=Pl||await Qp(),r=Ll||await x$();return{connection:e,jsm:t,js:r}}o(to,"getNATSReferences");async function Uue(e){let t=Gr.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await D$.getClusterUser(),s=await aC(t,r,n),i=oC(),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 BS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Uue,"getServerList");async function cC(e,t){let{jsm:r}=await to(),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:Aue.File,retention:bue.Limits,subjects:t,discard:Iue.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(cC,"createLocalStream");async function B$(){let{jsm:e}=await to(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(B$,"listStreams");async function xue(e){let{jsm:t}=await to();await t.streams.delete(e)}o(xue,"deleteLocalStream");async function Bue(e){let{connection:t}=await to(),r=[],n=oC(),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(Bue,"listRemoteStreams");async function Fue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await to(),i=C$(),a={durable_name:i,ack_policy:sC.Explicit};t&&(a.deliver_policy=iC.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=nC(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Xr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(Fue,"viewStream");async function*kue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await to(),i=C$(),a={durable_name:i,ack_policy:sC.Explicit};t&&(a.deliver_policy=iC.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=nC(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(Xr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(kue,"viewStreamIterator");async function Hue(e,t,r,n){Si.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=F$(n,r);let{js:s}=await to(),i=await kS(),a=`${e}.${i}`,c=await Oue(()=>n instanceof Uint8Array?n:L$.encode(n));try{Si.trace(`publishToStream publishing to subject: ${a}`),Cue(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 H$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Si.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await cC(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Hue,"publishToStream");function F$(e,t){t===void 0&&(t=Nue());let r=Gr.get(et.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Xr.MSG_HEADERS.ORIGIN)&&r&&t.append(Xr.MSG_HEADERS.ORIGIN,r),t}o(F$,"addNatsMsgHeader");function vd(e){e=e.toLowerCase();let t=zp.join(Gr.get(et.CONFIG_PARAMS.ROOTPATH),Pue);if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ml(tC)&&(tC={port:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.HUB,config_file:Xr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:zp.join(t,Xr.PID_FILES.HUB),hdbNatsPath:t}),tC;if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ml(eC)&&(eC={port:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,config_file:Xr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,pid_file_path:zp.join(t,Xr.PID_FILES.LEAF),hdbNatsPath:t}),eC;Si.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(vd,"getServerConfig");async function k$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:sC.Explicit,durable_name:r,deliver_policy:iC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(k$,"createConsumer");async function que(e,t,r){await e.consumers.delete(t,r)}o(que,"removeConsumer");function Gue(e){return e.split(".")[1]}o(Gue,"extractServerName");async function $ue(e,t,r=6e4,n=oC()){if(!BS.isObject(t))throw new Error("data param must be an object");let s=L$.encode(t),{connection:i}=await to(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return nC(c.data)}o($ue,"request");function lC(e){return new Promise(async(t,r)=>{let n=pue(rC,["--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(lC,"reloadNATS");async function Vue(){let{pid_file_path:e}=vd(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await lC(e)}o(Vue,"reloadNATSHub");async function Kue(){let{pid_file_path:e}=vd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await lC(e)}o(Kue,"reloadNATSLeaf");function Yue(e,t,r){let n;switch(e.code){case N$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case N$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(Yue,"requestErrorHandler");async function Wue(e,t){let r=t+Xr.SERVER_SUFFIX.LEAF,{connection:n}=await to(),{jsm:s}=await tde(r),{schema:i,table:a}=e,c=FS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await H$(async()=>{if(e.subscribe===!0)await k$(s,c,n.info.server_name,l);else try{await que(s,c,n.info.server_name)}catch(u){Si.trace(u)}})}o(Wue,"updateRemoteConsumer");async function zue(e,t,r,n){let s=FS.createNatsTableStreamName(e,t),i=r+Xr.SERVER_SUFFIX.LEAF,a={type:et.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!P$&&Tue()<Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=ZN();await c(a)}await gue(a),n==="stop"&&await BS.asyncSetTimeout(1e3)}o(zue,"updateConsumerIterator");function H$(e){return _ue.writeTransaction(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(H$,"exclusiveLock");async function q$(e,t){let r=FS.createNatsTableStreamName(e,t),n=await kS(),s=Xue(e,t,n);await cC(r,[s])}o(q$,"createLocalTableStream");async function jue(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await q$(n,s)}}o(jue,"createTableStreams");async function G$(e,t,r=void 0){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=FS.createNatsTableStreamName(e,t),{domain:s}=vd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await jp()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Si.warn(n);else throw n}}o(G$,"purgeTableStream");async function Que(e,t){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await G$(e,t[r])}o(Que,"purgeSchemaTableStreams");async function Jue(e){return(await Qp()).streams.info(e)}o(Jue,"getStreamInfo");function Xue(e,t,r){return`${Xr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(Xue,"createSubjectName");async function kS(){if(Wp)return Wp;if(Wp=(await Qp())?.nc?.info?.server_name,Wp===void 0)throw new Error("Unable to get jetstream manager server name");return Wp}o(kS,"getJsmServerName");async function Zue(){let e=await Qp(),t=await kS(),r=await B$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=ede(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(".");Si.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(Zue,"updateLocalStreams");function ede(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(ede,"updateStreamLimits");async function tde(e){let t,r;try{t=await _n.jetstream({domain:e}),r=await _n.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Si.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(tde,"connectToRemoteJS")});function uC(e){let t=e.get(HS),r=t?(0,Ud.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:Xp(e)??1,nodes:[]})})}i[n]=0,e.putSync(HS,(0,Ud.pack)(r))}return r}function Jp(e){return uC(e).remoteNameToId}function K$(e,t){let r=uC(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(HS,(0,Ud.pack)(r)),s}function qS(e,t){let r=uC(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(HS,(0,Ud.pack)(r))}return V$.trace?.("The remote node name map",e,n,s),s}var V$,Ud,HS,dC=ie(()=>{V$=w(Jn());ds();Ud=require("msgpackr"),HS=Symbol.for("remote-ids");o(uC,"getIdMappingRecord");o(Jp,"exportIdMapping");o(K$,"remoteToLocalNodeId");o(qS,"getIdOfRemoteNode")});var fC={};Ie(fC,{commitsAwaitingReplication:()=>Bd,getHDBNodeTable:()=>Wt,getReplicationSharedStatus:()=>Fd,iterateRoutes:()=>eh,shouldReplicateToNode:()=>Zp,subscribeToNodeUpdates:()=>kd});function Wt(){return Y$||(Y$=Ze({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Fd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function kd(e){Wt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;Q$.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 Zp(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 rde(){kd(e=>{ec({},(t,r)=>{let n=e.name,s=W$.get(n);if(s||W$.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=Fd(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Bd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*eh(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=xd.default.get(B.REPLICATION_SECUREPORT)??(!xd.default.get(B.REPLICATION_PORT)&&xd.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||xd.default.get(B.REPLICATION_PORT)||xd.default.get(B.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){z$.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 z$,j$,xd,Q$,Y$,W$,Bd,vl=ie(()=>{Oe();ds();hm();z$=require("worker_threads"),j$=w(_e()),xd=w(ae());H();Q$=w(Jn());server.nodes=[];o(Wt,"getHDBNodeTable");o(Fd,"getReplicationSharedStatus");o(kd,"subscribeToNodeUpdates");o(Zp,"shouldReplicateToNode");W$=new Map;TU((e,t,r)=>{if(r>server.nodes.length)throw new j$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Bd||(Bd=new Map,rde());let n=Bd.get(e);return n||(n=[],Bd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(rde,"startSubscriptionToReplications");o(eh,"iterateRoutes")});var tV={};Ie(tV,{connectedToNode:()=>Ul,disconnectedFromNode:()=>qd,ensureNode:()=>Yo,requestClusterStatus:()=>eV,startOnMainThread:()=>pC});async function pC(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){GS.set(i,Xp(l.auditStore));break}}}no.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??tc();if(l===void 0||l.url!==u||l.shard!==e.shard)return Yo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Wt().primaryStore.get(a)&&c();for(let l of eh(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)}kd(s)});let n;function s(i,a=i?.name){let c=it()&&a===it()||tc()&&i?.url===tc();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(dt.trace("Setting up node replication for",i),!i){for(let[f,m]of ro){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:R}]of m)m.delete(S),dt.warn("Node was deleted, unsubscribing from node",a,S,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){ro.get(f).iterator.remove(),ro.delete(f);return}}return}if(c)return;if(!i.url){dt.info(`Node ${i.name} is missing url`);return}let l=ro.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(dt.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 Hd)if(i.url===m.url){Hd.delete(f);break}Hd.set(i.name,i)}let u=ct();if(l||(l=new Map,ro.set(i.url,l)),l.iterator=ec(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]||(dt.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){dt.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];GS.has(f)&&(E.push({replicateByDefault:m,name:it(),startTime:GS.get(f),endTime:Date.now(),replicates:!0}),GS.delete(f));let g=Zp(i,f),A=no.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):th(S)},nde);else{dt.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,dt.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):VS(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),qd=o(function(i){try{dt.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Hd.keys()),c=a.sort(),l=c.indexOf(i.name||Ti(i.url));if(l===-1){dt.warn("Disconnected node not found in node map",i.name,a);return}let u=ro.get(i.url),d=u?.get(i.database);if(!d){dt.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!mC.default.get(B.REPLICATION_FAILOVER))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=Hd.get(h);u=ro.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,R=!1;for(let N of d.nodes){if(S.some(O=>O.name===N.name)){dt.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}N.endTime<Date.now()||(S.push(N),R=!0)}if(d.nodes=[d.nodes[0]],!R){dt.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}dt.info(`Failing over ${i.database} from ${i.name} to ${h}`),A?A.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):th({database:i.database,nodes:S});return}dt.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){dt.error("Error failing over node",a)}},"disconnectedFromNode"),Ul=o(function(i){let a=ro.get(i.url),c=a?.get(i.database);if(!c){dt.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){dt.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){dt.debug("Connected node is not named yet",i.database,c);return}c.nodes=[l];let u=!1;for(let d of ro.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,no.onMessageByType)("disconnected-from-node",qd),(0,no.onMessageByType)("connected-to-node",Ul),(0,no.onMessageByType)("request-cluster-status",eV)}function eV(e,t){let r=[];for(let[n,s]of Hd)try{let i=ro.get(s.url);dt.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=X$(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){dt.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Yo(e,t){let r=Wt();e=e??Ti(t.url),t.name=e;try{if(t.ca){let s=new Z$.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){dt.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(dt.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!mC.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=X$(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])]}dt.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var no,$S,dt,J$,mC,Z$,X$,nde,ro,qd,Ul,Hd,GS,rh=ie(()=>{Oe();no=w(Je());ds();$S=require("worker_threads");vl();dt=w(j()),J$=w(require("lodash")),mC=w(ae());H();Z$=require("crypto"),{cloneDeep:X$}=J$.default,nde=200,ro=new Map,Hd=new Map,GS=new Map;o(pC,"startOnMainThread");o(eV,"requestClusterStatus");$S.parentPort&&(qd=o(e=>{$S.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ul=o(e=>{$S.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,no.onMessageByType)("subscribe-to-node",e=>{th(e)}),(0,no.onMessageByType)("unsubscribe-from-node",e=>{VS(e)}));o(Yo,"ensureNode")});var ms=M(zt=>{"use strict";var pr=require("path"),{watch:sde}=require("chokidar"),Hn=require("fs-extra"),Gd=require("node-forge"),aV=require("net"),{generateKeyPair:hC,X509Certificate:Wo,createPrivateKey:cV}=require("crypto"),ide=require("util");hC=ide.promisify(hC);var Nt=Gd.pki,yi=require("joi"),{v4:lV}=require("uuid"),{validateBySchema:SC}=at(),{forComponent:ode}=j(),fs=ae(),ks=(H(),D(Y)),{CONFIG_PARAMS:Bl}=ks,Ri=Dw(),{ClientError:rc}=_e(),YS=require("node:tls"),{relative:uV,join:ade}=require("node:path"),{CERTIFICATE_VALUES:rV}=Ri,cde=$c(),EC=bt(),{table:lde,getDatabases:ude,databases:KS}=(Oe(),D(mt)),{getJWTRSAKeys:nV}=(Pd(),D($p)),je=ode("tls").conditional;zt.generateKeys=RC;zt.updateConfigCert=gV;zt.createCsr=_de;zt.signCertificate=gde;zt.setCertTable=$d;zt.loadCertificates=hV;zt.reviewSelfSignedCert=bC;zt.createTLSSelector=TV;zt.listCertificates=RV;zt.addCertificate=bde;zt.removeCertificate=wde;zt.createNatsCerts=yde;zt.generateCertsKeys=Tde;zt.getReplicationCert=sh;zt.getReplicationCertAuth=Ede;zt.renewSelfSigned=Rde;zt.hostnamesFromCert=wC;zt.getKey=Nde;zt.getHostnamesFromCertificate=Cde;zt.getPrimaryHostName=IC;var{urlToNodeName:dV,getThisNodeUrl:dde,getThisNodeName:zS,clearThisNodeName:fde}=(ds(),D(zo)),{readFileSync:mde,statSync:fV}=require("node:fs"),s0e=ae(),{getTicketKeys:pde,onMessageFromWorkers:hde}=Je(),{isMainThread:mV}=require("worker_threads"),{TLSSocket:pV,createSecureContext:i0e}=require("node:tls"),TC=3650,nh=["127.0.0.1","localhost","::1"],yC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];hde(async e=>{e.type===ks.ITC_EVENT_TYPES.RESTART&&(fs.initSync(!0),await bC())});var Zr;function sc(){return Zr||(Zr=ude().system.hdb_certificate,Zr||(Zr=lde({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Zr}o(sc,"getCertTable");async function sh(){let e=TV("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(zS());if(!r)return;let n=new Wo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(sh,"getReplicationCert");async function Ede(){sc();let e=(await sh()).options.cert,r=new Wo(e).issuer.match(/CN=(.*)/)?.[1];return Zr.get(r)}o(Ede,"getReplicationCertAuth");var sV,nc=new Map;function hV(){if(sV)return;sV=!0;let e=[{configKey:Bl.TLS},{configKey:Bl.OPERATIONSAPI_TLS}];sc();let t=pr.dirname(EC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=EC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&uV(ade(t,"keys"),a);c&&iV(a,l=>{nc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&mV){let d;iV(u,f=>{if(rV.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=SV(u),h=new Wo(p),E;try{E=IC(h)}catch(R){je.error?.("error extracting host name from certificate",R);return}if(E==null){je.error?.("No host name found on certificate");return}if(h.checkIssued(new Wo(rV.cert)))return;let g=Zr.primaryStore.get(E),A=fV(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=Zr.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(hV,"loadCertificates");function iV(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&mV&&je.warn?.(`Reloading ${r}:`,i),n=c,t(SV(i)))}catch(c){je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Hn.existsSync(e)?s(e,fV(e)):je.error?.(`${r} file not found:`,e),sde(e,{persistent:!1}).on("change",s)}o(iV,"loadAndWatch");function _C(){let e=dde();if(e==null){let t=nh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return dV(e)}o(_C,"getHost");function WS(){let e=zS();if(e==null){let t=nh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(WS,"getCommonName");async function _de(){let e=await sh(),t=Nt.certificateFromPem(e.options.cert),r=Nt.privateKeyFromPem(e.options.key);je.info?.("Creating CSR with cert named:",e.name);let n=Nt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:WS()},...yC];je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:EV()}];return je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Gd.pki.certificationRequestToPem(n)}o(_de,"createCsr");function EV(){let e=nh.includes(WS())?nh:[...nh,WS()];return e.includes(_C())||e.push(_C()),[{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=>aV.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(EV,"certExtensions");async function gde(e){let t={},r=pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;sc();for await(let d of Zr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(nc.has(d.private_key_name)){n=nc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Hn.exists(pr.join(r,d.private_key_name))){n=Hn.readFile(pr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await gC();s=d.ca,n=d.private_key}n=Nt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Nt.certificateFromPem(s.certificate);je.info?.("Signing CSR with cert named",s.name);let a=Nt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Gd.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()+TC),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,Gd.md.sha256.create()),t.certificate=Nt.certificateToPem(c)}else je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(gde,"signCertificate");async function Sde(e,t){await $d({name:zS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await $d({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Nt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(Sde,"createCertificateTable");async function $d(e){let t;try{t=new Wo(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},sc(),await Zr.patch(e)}o($d,"setCertTable");async function RC(){let e=await hC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Nt.publicKeyFromPem(e.publicKey),privateKey:Nt.privateKeyFromPem(e.privateKey)}}o(RC,"generateKeys");async function AC(e,t,r){let n=Nt.createCertificate();if(!t){let a=await sh();t=Nt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+TC);let i=[{name:"commonName",value:WS()},...yC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(EV()),n.sign(e,Gd.md.sha256.create()),Nt.certificateToPem(n)}o(AC,"generateCertificates");async function gC(){let e=await RV(),t;for(let r of e){if(!r.is_authority)continue;let n=await yV(r.private_key_name);if(r.private_key_name&&n&&new Wo(r.certificate).checkPrivateKey(cV(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(gC,"getCertAuthority");async function _V(e,t,r=!0){let n=Nt.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+TC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${fs.get(Bl.REPLICATION_HOSTNAME)??dV(fs.get(Bl.REPLICATION_URL))??lV().split("-")[0]}`},...yC];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,Gd.md.sha256.create());let a=pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),c=pr.join(a,Ri.PRIVATEKEY_PEM_NAME);return r&&await Hn.writeFile(c,Nt.privateKeyToPem(e)),n}o(_V,"generateCertAuthority");async function Tde(){let{privateKey:e,publicKey:t}=await RC(),r=await _V(e,t),n=await AC(e,t,r);await Sde(n,r),gV()}o(Tde,"generateCertsKeys");async function yde(){let e=await AC(Nt.privateKeyFromPem(Ri.CERTIFICATE_VALUES.key),void 0,Nt.certificateFromPem(Ri.CERTIFICATE_VALUES.cert)),t=pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),r=pr.join(t,Ri.NATS_CERTIFICATE_PEM_NAME);await Hn.exists(r)||await Hn.writeFile(r,e);let n=pr.join(t,Ri.NATS_CA_PEM_NAME);await Hn.exists(n)||await Hn.writeFile(n,Ri.CERTIFICATE_VALUES.cert)}o(yde,"createNatsCerts");async function Rde(){sc();for await(let e of Zr.search([{attribute:"is_self_signed",value:!0}]))await Zr.delete(e.name);await bC()}o(Rde,"renewSelfSigned");async function bC(){fde(),await hV(),sc();let e=await gC();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:Nt.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=fs.get(Bl.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=fs.get(Bl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),c=uV(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 RC(),Hn.existsSync(pr.join(a,Ri.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${lV().split("-")[0]}.pem`),await Hn.writeFile(pr.join(a,c),Nt.privateKeyToPem(s)));let l=await _V(s,Nt.setRsaPublicKey(s.n,s.e),!1);await $d({name:l.subject.getField("CN").value,uses:["https"],certificate:Nt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await sh()){let r=zS();je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await gC();let n=Nt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await AC(Nt.privateKeyFromPem(e.private_key),s,n);await $d({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(bC,"reviewSelfSignedCert");function gV(){let e=cde(Object.keys(ks.CONFIG_PARAM_MAP),!0),t=pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),r=pr.join(t,Ri.PRIVATEKEY_PEM_NAME),n=pr.join(t,Ri.NATS_CERTIFICATE_PEM_NAME),s=pr.join(t,Ri.NATS_CA_PEM_NAME),i=ks.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),EC.updateConfigValue(void 0,void 0,a,!1,!0)}o(gV,"updateConfigCert");function SV(e){return e.startsWith("-----BEGIN")?e:mde(e,"utf8")}o(SV,"readPEM");var oV=YS.createSecureContext;YS.createSecureContext=function(e){if(!e.cert||!e.key)return oV(e);let t={...e};delete t.key,delete t.cert;let r=oV(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Ade=pV.prototype._init;pV.prototype._init=function(e,t){Ade.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 xl=new Map;function TV(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(),xl.clear();let d=0;if(KS===void 0){c();return}for await(let f of KS.system.hdb_certificate.search([])){let m=f.certificate,p=new Wo(m);f.is_authority&&(p.asString=m,xl.set(p.subject,m))}for await(let f of KS.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 yV(f.private_key_name),E=f.certificate,g=new Wo(E);if(xl.has(g.issuer)&&(E+=`
|
|
19
|
+
`+xl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let A={ciphers:f.ciphers,ticketKeys:pde(),availableCAs:xl,ca:t&&Array.from(xl.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=YS.createSecureContext(A);S.name=f.name,S.options=A,S.quality=p,S.certificateAuthorities=Array.from(xl),S.certStart=E.toString().slice(0,100);let R=f.hostnames??wC(g);Array.isArray(R)||(R=[R]);let N;for(let O of R)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),O===_C()&&(p+=2),aV.isIP(O)&&(N=!0);let F=r.get(O)?.quality??0;p>F&&r.set(O,S)}else je.error?.("No hostname found for certificate at",YS.certificate);je.trace?.("Adding TLS",S.name,"for",a.ports||"client","cert named",f.name,"hostnames",R,"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"),KS?.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(TV,"createTLSSelector");async function yV(e){let t=nc.get(e);return!t&&e?await Hn.readFile(pr.join(fs.get(Bl.ROOTPATH),ks.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(yV,"getPrivateKeyByName");async function RV(){sc();let e=[];for await(let t of Zr.search([]))e.push(t);return e}o(RV,"listCertificates");async function bde(e){let t=SC(e,yi.object({name:yi.string().required(),certificate:yi.string().required(),is_authority:yi.boolean().required(),private_key:yi.string(),hosts:yi.array(),uses:yi.array()}));if(t)throw new rc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Wo(n),c=!1,l=!1,u;for(let[p,h]of nc)!s&&!c&&a.checkPrivateKey(cV(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new rc("A suitable private key was not found for this certificate");let d;if(!r){try{d=IC(a)}catch(p){je.error?.(p)}if(d==null)throw new rc("Error extracting certificate host name, please provide a name parameter")}let f=Ide(r??d);s&&!c&&!l&&(await Hn.writeFile(pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,f+".pem"),s),nc.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 $d(m),"Successfully added certificate: "+f}o(bde,"addCertificate");function Ide(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(Ide,"sanitizeName");async function wde(e){let t=SC(e,yi.object({name:yi.string().required()}));if(t)throw new rc(t.message);let{name:r}=e;sc();let n=await Zr.get(r);if(!n)throw new rc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Zr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(je.info?.("Removing private key named",s),await Hn.remove(pr.join(fs.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,s)))}return await Zr.delete(r),"Successfully removed "+r}o(wde,"removeCertificate");function IC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||wC(e)[0]}o(IC,"getPrimaryHostName");function wC(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(wC,"hostnamesFromCert");async function Nde(e){if(e.bypass_auth!==!0)throw new rc("Unauthorized","401");let t=SC(e,yi.object({name:yi.string().required()}));if(t)throw new rc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await nV()).privateKey;if(r===".jwtPublic")return(await nV()).publicKey;if(nc.get(r))return nc.get(e.name);throw new rc("Key not found")}o(Nde,"getKey");function Cde(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(Cde,"getHostnamesFromCertificate")});var YV={};Ie(YV,{CONFIRMATION_STATUS_POSITION:()=>$V,LATENCY_POSITION:()=>tT,NodeReplicationConnection:()=>Kd,OPERATION_REQUEST:()=>LC,RECEIVED_TIME_POSITION:()=>MC,RECEIVED_VERSION_POSITION:()=>DC,RECEIVING_STATUS_POSITION:()=>vC,RECEIVING_STATUS_RECEIVING:()=>KV,RECEIVING_STATUS_WAITING:()=>VV,SENDING_TIME_POSITION:()=>ih,createWebSocket:()=>rT,databaseSubscriptions:()=>oc,replicateOverWS:()=>oh,tableUpdateListeners:()=>xC});async function rT(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(!OC){let l=(0,FV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),OC=u.secureContexts}if(i=OC.get(s),i&&le.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,HV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(eT?.caCount!==jo.size&&(eT=kV.createSecureContext({...i.options,ca:[...jo,...i.options.availableCAs.values()]}),eT.caCount=jo.size),c.secureContext=eT),new UV.WebSocket(e,"harperdb-replication-v1",c)}function oh(e,t,r){let n=t.port||t.securePort,s=Fl.pid%1e3+"-"+xV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);le.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||oc,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 R,N,O,F,te,q,k,J=6e4,W,ue=0,ce=0,re=0,Re=vV.default.get(B.REPLICATION_BLOBTIMEOUT)??12e4,Te=new Map,Fe=[],qe=0,Rr;if(t.url){let y=o(()=>{te&&ce===e._socket?.bytesRead&&re===e._socket?.bytesWritten?e.terminate():(te=performance.now(),e.ping(),ce=e._socket?.bytesRead,re=e._socket?.bytesWritten)},"sendPing");O=setInterval(y,DV).unref(),y()}else er();e._socket?.setMaxListeners(200);function er(){clearTimeout(F),ce=e._socket?.bytesRead,re=e._socket?.bytesWritten,F=setTimeout(()=>{ce===e._socket?.bytesRead&&re===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},DV*2).unref()}o(er,"resetPingTimer");function qt(){if(!(!g||!u))return m||(m=Fd(f,u,g)),m}o(qt,"getSharedStatus"),u&&Fc(u);let tr,Kf,xc=[],Gt=[],Yf,Wf=[],zE=[],jE=[],dA=150,zf=25,Le=0,QE=0,jf=!1,yo,Mr,Ar,Qf;e.on("message",fA);async function fA(y){if(r=await r,!r){le.error?.(s,"No authorization provided"),Vr(1008,"Unauthorized");return}Bc(y),e.off("message",fA),e.on("message",Bc)}o(fA,"onWSMessageWhenAuthorized");function Bc(y){ue=performance.now();try{let b=y.dataView=new Qc(y.buffer,y.byteOffset,y.byteLength);if(y[0]>127){let U=(0,ot.decode)(y),[L,x,G]=U;switch(L){case bV:{if(x){if(g){if(g!==x){le.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${x}, disconnecting`),e.send((0,ot.encode)([Vd])),Vr(1008,"Node name mismatch");return}}else if(g=x,t.connection?.tentativeNode){let de=t.connection.tentativeNode;de.name=g,t.connection.tentativeNode=null,Yo(g,de)}if(t.connection&&(t.connection.nodeName=g),le.debug?.(s,"received node name:",g,"db:",u??U[2]),!u)try{Fc(u=U[2]),u==="system"&&(tr=ec(t,(de,z)=>{yu(z)&&Ru(z)}),e.on("close",()=>{tr?.remove()}))}catch(de){le.warn?.(s,"Error setting database",de),e.send((0,ot.encode)([Vd])),Vr(1008,de.message);return}Jf()}break}case PV:{le.debug?.(s,"Received table definitions for",x.map(de=>de.table));for(let de of x){let z=U[2];de.database=z;let ne;if(yu(z)){if(u==="system")Me[z]?.[de.table]||(ne=C(de,Me[z]?.[de.table]));else{if(z!=="data"&&!Me[z]){le.warn?.("Database not found",z);return}ne=C(de,Me[z]?.[de.table])}f||(f=ne?.auditStore),E||(E=ct()?.[z])}}break}case Vd:Vr();break;case LC:try{let de=r?.replicates||r?.subscribers||r?.name;le.debug?.("Received operation request",x,"from",g),server.operation(x,{user:r},!de).then(z=>{le.debug?.("Requested request from finished",g,z),Array.isArray(z)&&(z={results:z}),z.requestId=x.requestId,e.send((0,ot.encode)([QS,z]))},z=>{le.debug?.("Failed requested operation from",g,z),e.send((0,ot.encode)([QS,{requestId:x.requestId,error:NC(z)}]))})}catch(de){e.send((0,ot.encode)([QS,{requestId:x.requestId,error:NC(de)}]))}break;case QS:let{resolve:Q,reject:X}=A.get(x.requestId);le.debug?.("Received completed operation request",g,x),x.error?X(new Error(x.error)):Q(x),A.delete(x.requestId);break;case CC:let $=U[3];if(!E){u?le.error?.(s,"No database found for",u):le.error?.(s,"Database name never received"),Vr();return}let be=E[$];be=C({table:$,database:u,attributes:x.attributes,schemaDefined:x.schemaDefined},be),xc[G]={name:$,decoder:new ot.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:x.typedStructs,structures:x.structures}),getEntry(de){return be.primaryStore.getEntry(de)},rootStore:be.primaryStore.rootStore};break;case IV:Qf=f?K$(x,f):new Map,Yf=U[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Yf}`);break;case wV:let pe=G;jE[pe]=x;break;case OV:qt()[$V]=x,le.trace?.(s,"received and broadcasting committed update",x),qt().buffer.notify();break;case CV:R=x,h.send({type:"end_txn",localTime:R,remoteNodeIds:S});break;case JS:{let de=U[1],{fileId:z,size:ne,finished:me,error:Ee}=de,fe=Te.get(z);le.debug?.("Received blob",z,"has stream",!!fe,"connectedToBlob",!!fe?.connectedToBlob,"length",U[2].length,"finished",me),fe||(fe=new PC.PassThrough,fe.expectedSize=ne,Te.set(z,fe)),fe.lastChunk=Date.now();let De=U[2];Xe(De.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{me?(Ee?(fe.on("error",()=>{}),fe.destroy(new Error("Blob error: "+Ee+" for record "+(fe.recordId??"unknown")+" from "+remote_node_name))):fe.end(De),fe.connectedToBlob&&Te.delete(z)):fe.write(De)}catch(ve){le.error?.(`Error receiving blob for ${fe.recordId} from ${g} and streaming to storage`,ve),Te.delete(z)}break}case NV:{let de=x,z;try{let ne=U[3],me=Gt[G]||(Gt[G]=E[U[4]]);if(!me)return le.warn?.("Unknown table id trying to handle record request",G);let Ee=me.primaryStore.getBinaryFast(Symbol.for("structures")),fe=Ee?.length??0;if(fe>0&&fe!==QE){QE=fe;let ve=(0,ot.decode)(Ee);e.send((0,ot.encode)([CC,{typedStructs:ve.typed,structures:ve.named},G,me.tableName]))}let De=me.primaryStore.getBinaryFast(ne);if(De){let ve=me.primaryStore.decoder.decode(De,{valueAsBuffer:!0}),$e=lt||{};$e.version=(0,qV.getLastVersion)(),lt&<[vu]&Ln&&(ve=Buffer.from(ve),wm(()=>me.primaryStore.decoder.decode(De),vr=>br(vr,ne),me.primaryStore.rootStore)),z=(0,ot.encode)([jS,de,{value:ve,expiresAt:$e.expiresAt,version:$e.version,residencyId:$e.residencyId,nodeId:$e.nodeId,user:$e.user}])}else z=(0,ot.encode)([jS,de])}catch(ne){z=(0,ot.encode)([jS,de,{error:ne.message}])}e.send(z);break}case jS:{let{resolve:de,reject:z,tableId:ne,key:me}=A.get(U[1]),Ee=U[2];if(Ee?.error)z(new Error(Ee.error));else if(Ee){let fe;M_(()=>{let De=xc[ne].decoder.decode(Ee.value);Ee.value=De,Ee.key=me,de(Ee)||fe&&setTimeout(()=>fe.forEach(P_),6e4).unref()},De=>{let ve=Tu(De,me);return fe||(fe=[]),fe.push(ve),ve})}else de();A.delete(U[1]);break}case AV:{Ar=x;let de,z,ne=!1;if(h){if(u!==h.databaseName&&!h.then){le.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(le.debug?.(s,"received subscription request for",u,"at",Ar),!h){let Ne;h=new Promise($t=>{le.debug?.("Waiting for subscription to database "+u),Ne=$t}),h.ready=Ne,oc.set(u,h)}if(r.name)z=Wt().subscribe(r.name),z.then(async Ne=>{de=Ne;for await(let $t of de){let Dt=$t.value;if(!(Dt?.replicates===!0||Dt?.replicates?.receives||Dt?.subscriptions?.some(Ur=>(Ur.database||Ur.schema)===u&&Ur.publish!==!1))){ne=!0,e.send((0,ot.encode)([Vd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}}},Ne=>{le.error?.(s,"Error subscribing to HDB nodes",Ne)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ot.encode)([Vd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}if(Mr&&(le.debug?.(s,"stopping previous subscription",u),Mr.emit("close")),Ar.length===0)return;let me=Ar[0],Ee=o(Ne=>{if(Ne&&(me.replicateByDefault?!me.tables.includes(Ne.tableName):me.tables.includes(Ne.tableName)))return{table:Ne}},"tableToTableEntry"),fe={txnTime:0},De,ve,$e=1/0,vr,Wn=o((Ne,$t)=>{if(Ne.type==="end_txn"){fe.txnTime&&(a[i]!==66&&le.error?.("Invalid encoding of message"),Ro(9),Ro($_),_(vr=$t),Ui()),i=c,fe.txnTime=0;return}let Dt=Ne.nodeId,Ur=Ne.tableId,Mt=ve[Ur];if(!Mt&&(Mt=ve[Ur]=Ee(h.tableById[Ur]),!Mt))return le.debug?.("Not subscribed to table",Ur);let bs=Mt.table,vt=bs.primaryStore,ni=vt.encoder;(Ne.extendedType&J_||!ni.typedStructs)&&(ni._mergeStructures(ni.getStructures()),ni.typedStructs&&(ni.lastTypedStructuresLength=ni.typedStructs.length));let Au=De[Dt];if(!(Au&&Au.startTime<$t&&(!Au.endTime||Au.endTime>$t)))return ZS&&le.trace?.(s,"skipping replication update",Ne.recordId,"to:",g,"from:",Dt,"subscribed:",De),ov();ZS&&le.trace?.(s,"sending replication update",Ne.recordId,"to:",g,"from:",Dt,"subscribed:",De);let mA=Ne.version;fe.txnTime!==mA&&(fe.txnTime&&(ZS&&le.trace?.(s,"new txn time, sending queued txn",fe.txnTime),a[i]!==66&&le.error?.("Invalid encoding of message"),Ui()),fe.txnTime=mA,i=c,_(mA));let qc=Ne.residencyId,pA=ba(qc,bs),XE;if(pA&&!pA.includes(g)){let si=ba(Ne.previousResidencyId,bs);if(si&&!si.includes(g)&&(Ne.type==="put"||Ne.type==="patch")||bs.getResidencyById)return ov();let Xf=Ne.recordId;le.trace?.(s,"sending invalidation",Xf,g,"from",Dt);let Zf=0;qc&&(Zf|=Jc),Ne.previousResidencyId&&(Zf|=Xc);let _A,ZE=null;for(let av in bs.indices){if(!ZE){if(_A=Ne.getValue(vt,!0),!_A)break;ZE={}}ZE[av]=_A[av]}XE=Zc(Ne.version,Ur,Xf,null,Dt,Ne.user,Ne.type==="put"||Ne.type==="patch"?"invalidate":Ne.type,ni.encode(ZE),Zf,qc,Ne.previousResidencyId,Ne.expiresAt)}function ov(){return le.trace?.(s,"skipping audit record",Ne.recordId),q||(q=setTimeout(()=>{q=null,(vr||0)+LV/2<$e&&(ZS&&le.trace?.(s,"sending skipped sequence update",$e),e.send((0,ot.encode)([CV,$e])))},LV).unref()),new Promise(setImmediate)}o(ov,"skipAuditRecord");let hA=ni.typedStructs,EA=ni.structures;if((hA?.length!=Mt.typed_length||EA?.length!=Mt.structure_length)&&(Mt.typed_length=hA?.length,Mt.structure_length=EA.length,le.debug?.(s,"send table struct",Mt.typed_length,Mt.structure_length),Mt.sentName||(Mt.sentName=!0),e.send((0,ot.encode)([CC,{typedStructs:hA,structures:EA,attributes:bs.attributes,schemaDefined:bs.schemaDefined},Ur,Mt.table.tableName]))),qc&&!zE[qc]&&(e.send((0,ot.encode)([wV,pA,qc])),zE[qc]=!0),XE)Ro(XE.length),K(XE);else{let si=Ne.encoded;Ne.extendedType&Ln&&wm(()=>Ne.getValue(vt),Zf=>br(Zf,Ne.recordId),vt.rootStore);let Xf=si[0]===66?8:0;Ro(si.length-Xf),K(si,Xf),le.trace?.("wrote record",Ne.recordId,"length:",si.length)}return e._socket.writableNeedDrain?new Promise(si=>{le.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",si)}):qe>zf?new Promise(si=>{Rr=si}):new Promise(setImmediate)},"sendAuditRecord"),Ui=o(()=>{c-i>8?(e.send(a.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Xe(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");Mr=new UC.EventEmitter,Mr.once("close",()=>{ne=!0,de?.end()});for(let{startTime:Ne}of Ar)Ne<$e&&($e=Ne);(z||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,ve=h.tableById.map(Ee),De=[];for(let{name:$t,startTime:Dt,endTime:Ur}of Ar){let Mt=qS($t,f);le.debug?.("subscription to",$t,"using local id",Mt,"starting",Dt),De[Mt]={startTime:Dt,endTime:Ur}}Ru(u),tr||(tr=Nl($t=>{$t.databaseName===u&&Ru(u)}),Kf=vp($t=>{$t===u&&(e.send((0,ot.encode)([Vd])),Vr())}),e.on("close",()=>{tr?.remove(),Kf?.remove()})),e.send((0,ot.encode)([IV,Jp(h.auditStore),Ar.map(({name:$t})=>$t)]));let Ne=!0;do{isFinite($e)||(le.warn?.("Invalid sequence id "+$e),Vr(1008,"Invalid sequence id"+$e));let $t;if(Ne&&!ne&&(Ne=!1,$e===0)){le.info?.("Replicating all tables to",g);let Dt=$e,Ur=nT(f);for(let Mt in E){if(!Ee(Mt))continue;let bs=E[Mt];for(let vt of bs.primaryStore.getRange({snapshot:!1,versions:!0})){if(ne)return;if(vt.localTime>=$e){le.trace?.(s,"Copying record from",u,Mt,vt.key,vt.localTime),Dt=Math.max(vt.localTime,Dt),$t=!0,qt()[ih]=1;let ni=Zc(vt.version,bs.tableId,vt.key,null,Ur,null,"put",wm(()=>bs.primaryStore.encoder.encode(vt.value),Au=>br(Au,vt.key)),vt.metadataFlags&-256,vt.residencyId,null,vt.expiresAt);await Wn({recordId:vt.key,tableId:bs.tableId,type:"put",getValue(){return vt.value},encoded:ni,version:vt.version,residencyId:vt.residencyId,nodeId:Ur,extendedType:vt.metadataFlags},vt.localTime)}}}$t&&Wn({type:"end_txn"},$e),qt()[ih]=0,$e=Dt}for(let{key:Dt,value:Ur}of f.getRange({start:$e||1,exclusiveStart:!0,snapshot:!1})){if(ne)return;let Mt=Ut(Ur);le.debug?.("sending audit record",new Date(Dt)),qt()[ih]=Dt,$e=Dt,await Wn(Mt,Dt),Mr.startTime=Dt,$t=!0}$t&&Wn({type:"end_txn"},$e),qt()[ih]=0,await l0(f)}while(!ne)}).catch(Ne=>{le.error?.(s,"Error handling subscription to node",Ne),Vr(1008,"Error handling subscription to node")});break}}return}b.position=8;let P=!0,I,v;do{qt();let U=b.readInt();if(U===9&&b.getUint8(b.position)==$_){b.position++,R=v=b.readFloat64(),m[DC]=R,m[MC]=Date.now(),m[vC]=VV,le.trace?.("received remote sequence update",R,u);break}let L=b.position,x=Ut(y,L,L+U),G=xc[x.tableId];G||le.error?.(`No table found with an id of ${x.tableId}`);let Q;x.residencyId&&(Q=jE[x.residencyId],le.trace?.(s,"received residency list",Q,x.type,x.recordId));try{let X=x.recordId;M_(()=>{I={table:G.name,id:x.recordId,type:x.type,nodeId:Qf.get(x.nodeId),residencyList:Q,timestamp:x.version,value:x.getValue(G),user:x.user,beginTxn:P,expiresAt:x.expiresAt}},$=>Tu($,X))}catch(X){throw X.message+="typed structures for current decoder"+JSON.stringify(G.decoder.typedStructs),X}P=!1,le.trace?.(s,"received replication message",x.type,"id",I.id,"version",new Date(x.version),"nodeId",I.nodeId),m[DC]=x.version,m[MC]=Date.now(),m[vC]=KV,h.send(I),b.position=L+U}while(b.position<y.byteLength);Le++,u!=="system"&&Xe(y.byteLength,"bytes-received",`${g}.${u}.${I?.table||"unknown_table"}`,"replication","ingest"),Le>dA&&!jf&&(jf=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:R,remoteNodeIds:S,async onCommit(){if(I){let U=Date.now()-I.timestamp;u!=="system"&&Xe(U,"replication-latency",g+"."+u+"."+I.table,I.type,"ingest")}Le--,jf&&(jf=!1,e.resume(),le.debug?.(`Replication resuming ${g}`)),Fe.length>0&&await Promise.all(Fe),le.trace?.("All blobs finished"),!N&&v&&(le.trace?.(s,"queuing confirmation of a commit at",v),setTimeout(()=>{e.send((0,ot.encode)([OV,N])),le.trace?.(s,"sent confirmation of a commit at",N),N=null},Lde)),N=v,le.debug?.("last sequence committed",new Date(v),u)}})}catch(b){le.error?.(s,"Error handling incoming replication message",b)}}o(Bc,"onWSMessage"),e.on("ping",er),e.on("pong",()=>{if(t.connection){let y=performance.now()-te;t.connection.latency=y,qt()&&(m[tT]=y),t.isSubscriptionConnection&&Ul({name:g,database:u,url:t.url,latency:y})}te=null}),e.on("close",(y,b)=>{clearInterval(O),clearTimeout(F),clearInterval(k),Mr&&Mr.emit("close"),yo&&yo.end();for(let[P,{reject:I}]of A)I(new Error(`Connection closed ${b?.toString()} ${y}`));le.debug?.(s,"closed",y,b?.toString())});function Vr(y,b){try{e.isFinished=!0,le.debug?.(s,"closing",g,u,y,b),e.close(y,b),t.connection?.emit("finished")}catch(P){le.error?.(s,"Error closing connection",P)}}o(Vr,"close");let Aa=new Set;async function br(y,b){let P=L_(y);if(Aa.has(P)){le.debug?.("Blob already being sent",P);return}Aa.add(P);try{let I;qe++;for await(let v of y.stream())I&&(le.debug?.("Sending blob chunk",P,"length",I.length),e.send((0,ot.encode)([JS,{fileId:P,size:y.size},I]))),I=v,e._socket.writableNeedDrain&&(le.debug?.("draining",P),await new Promise(U=>e._socket.once("drain",U)),le.debug?.("drained",P)),Xe(v.length,"bytes-sent",`${g}.${u}`,"replication","blob");le.debug?.("Sending final blob chunk",P,"length",I.length),e.send((0,ot.encode)([JS,{fileId:P,size:y.size,finished:!0},I]))}catch(I){le.warn?.("Error sending blob",I,"blob id",P,"for record",b),e.send((0,ot.encode)([JS,{fileId:P,finished:!0,error:NC(I)},Buffer.alloc(0)]))}finally{Aa.delete(P),qe--,qe<zf&&Rr?.()}}o(br,"sendBlobs");function Tu(y,b){let P=L_(y),I=Te.get(P);le.debug?.("Received transaction with blob",P,"has stream",!!I,"ended",!!I?.writableEnded),I?I.writableEnded&&Te.delete(P):(I=new PC.PassThrough,Te.set(P,I)),I.connectedToBlob=!0,I.lastChunk=Date.now(),I.recordId=b,y.size===void 0&&I.expectedSize&&(y.size=I.expectedSize);let v=I.blob??createBlob(I,y);I.blob=v;let U=v.save({primaryStore:h.auditStore});return U&&(U.blobId=P,Fe.push(U),U.finally(()=>{le.debug?.(`Finished receiving blob stream ${P}`),Fe.splice(Fe.indexOf(U),1)})),v}o(Tu,"receiveBlobs");function Jf(){if(p||(p=!0,t.connection?.on("subscriptions-updated",Jf)),!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 I of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let v of I.value.nodes||[])v.lastTxnTime>(y.get(v.id)??0)&&y.set(v.id,v.lastTxnTime)}catch(I){if(!I.message.includes("Can not re"))throw I}let b=t.connection?.nodeSubscriptions?.[0];S=[];let P=t.connection?.nodeSubscriptions.map((I,v)=>{let U=[],{replicateByDefault:L}=I;if(I.subscriptions){for(let X of I.subscriptions)if(X.subscribe&&(X.schema||X.database)===u){let $=X.table;E?.[$]?.replicate!==!1&&U.push($)}L=!1}else for(let X in E)(L?E[X].replicate===!1:E[X].replicate)&&U.push(X);let x=f&&qS(I.name,f),G=h?.dbisDB?.get([Symbol.for("seq"),x])??1,Q=Math.max(G?.seqId??1,(typeof I.startTime=="string"?new Date(I.startTime).getTime():I.startTime)??1);if(le.debug?.("Starting time recorded in db",I.name,x,u,G?.seqId,"start time:",Q,new Date(Q)),b!==I){let X=f&&qS(b.name,f),$=h?.dbisDB?.get([Symbol.for("seq"),X])??1;for(let be of $?.nodes||[])be.name===I.name&&(Q=be.seqId,le.debug?.("Using sequence id from proxy node",b.name,Q))}if(x===void 0?le.warn("Starting subscription request from node",I,"but no node id found"):S.push(x),y.get(x)>Q&&(Q=y.get(x),le.debug?.("Updating start time from more recent txn recorded",b.name,Q)),Q===1&&XS)try{new URL(XS).hostname===I.name?(le.warn?.(`Requesting full copy of database ${u} from ${XS}`),Q=0):Q=Date.now()-6e4}catch(X){le.error?.("Error parsing leader URL",XS,X)}return le.trace?.(s,"defining subscription request",I.name,u,new Date(Q)),{name:I.name,replicateByDefault:L,tables:U,startTime:Q,endTime:I.endTime}});if(P)if(le.debug?.(s,"sending subscription request",P,h?.dbisDB?.path),clearTimeout(W),P.length>0)e.send((0,ot.encode)([AV,P]));else{let I=o(()=>{let v=performance.now();W=setTimeout(()=>{ue<=v?Vr(1008,"Connection has no subscriptions and is no longer used"):I()},J).unref()},"scheduleClose");I()}}o(Jf,"sendSubscriptionRequestUpdate");function ba(y,b){if(!y)return;let P=Wf[y];return P||(P=b.getResidencyRecord(y),Wf[y]=P),P}o(ba,"getResidence");function yu(y){return!(ic&&ic!="*"&&!ic[y]&&!ic.includes?.(y)&&!ic.some?.(b=>b.name===y))}o(yu,"checkDatabaseAccess");function Fc(y){if(h=h||d.get(y),!yu(y))throw new Error(`Access to database "${y}" is not permitted`);h||le.warn?.(`No database named "${y}" was declared and registered`),f=h?.auditStore,E||(E=ct()?.[y]);let b=it();if(b===g)throw b?new Error("Should not connect to self",b):new Error("Node name not defined");return kc(b,y),!0}o(Fc,"setDatabase");function kc(y,b){let P=ct()?.[b],I=[];for(let v in P){let U=P[v];I.push({table:v,schemaDefined:U.schemaDefined,attributes:U.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}le.trace?.("Sending database info for node",y,"database name",b),e.send((0,ot.encode)([bV,y,b,I]))}o(kc,"sendNodeDBName");function Ru(y){let b=ct()?.[y],P=[];for(let I in b){if(Ar&&!Ar.some(U=>U.replicateByDefault?!U.tables.includes(I):U.tables.includes(I)))continue;let v=b[I];P.push({table:I,schemaDefined:v.schemaDefined,attributes:v.attributes.map(U=>({name:U.name,type:U.type,isPrimaryKey:U.isPrimaryKey}))})}e.send((0,ot.encode)([PV,P,y]))}o(Ru,"sendDBSchema"),k=setInterval(()=>{for(let[y,b]of Te)b.lastChunk+Re<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${y} for record ${b.recordId??"unknown"} from ${g}`),Te.delete(y),b.end())},Re).unref();let JE=1,Hc=[];return{end(){yo&&yo.end(),Mr&&Mr.emit("close")},getRecord(y){let b=JE++;return new Promise((P,I)=>{let v=[NV,b,y.table.tableId,y.id];Hc[y.table.tableId]||(v.push(y.table.tableName),Hc[y.table.tableId]=!0),e.send((0,ot.encode)(v)),ue=performance.now(),A.set(b,{tableId:y.table.tableId,key:y.id,resolve(U){let{table:L,entry:x}=y;if(P(U),U)return L._recordRelocate(x,U)},reject:I})})},sendOperation(y){let b=JE++;return y.requestId=b,e.send((0,ot.encode)([LC,y])),new Promise((P,I)=>{A.set(b,{resolve:P,reject:I})})}};function Ro(y){T(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 K(y,b=0,P=y.length){let I=P-b;T(I),y.copy(a,c,b,P),c+=I}function _(y){T(8),l.setFloat64(c,y),c+=8}function T(y){if(y+16>a.length-c){let b=Buffer.allocUnsafeSlow(c+y-i+65536>>10<<11);a.copy(b,0,i,c),c=c-i,i=0,a=b,l=new DataView(a.buffer,0,a.length)}}function C(y,b){let P=y.database??"data";b||(b={});let I=b.schemaDefined,v=!1,U=y.schemaDefined,L=b.attributes||[];for(let x=0;x<y.attributes?.length;x++){let G=y.attributes[x],Q=L.find(X=>X.name===G.name);(!Q||Q.type!==G.type)&&(I?le.error?.(`Schema for '${u}.${y.table}' is defined locally, but attribute '${G.name}: ${G.type}' from '${g}' does not match local attribute ${Q?"'"+Q.name+": "+Q.type+"'":"which does not exist"}`):(v=!0,U||(G.indexed=!0),Q?L[L.indexOf(Q)]=G:L.push(G)))}return v?(le.debug?.("(Re)creating",y),Ze({table:y.table,database:y.database,schemaDefined:y.schemaDefined,attributes:L,...b})):b}}var vV,ot,UV,xV,BV,UC,FV,kV,Fl,HV,PC,qV,GV,Ode,NC,le,AV,bV,IV,Vd,wV,CC,NV,jS,LC,QS,CV,OV,PV,JS,$V,DC,MC,ih,tT,vC,VV,KV,Pde,XS,xC,oc,ZS,LV,Lde,DV,OC,eT,MV,Kd,BC=ie(()=>{Oe();Io();dC();Kb();ds();vV=w(ae());H();el();ot=require("msgpackr"),UV=require("ws"),xV=require("worker_threads"),BV=w(j());rh();UC=require("events"),FV=w(ms()),kV=w(require("node:tls"));vl();Fl=w(require("node:process")),HV=require("node:net");Os();ws();PC=require("node:stream"),qV=require("lmdb"),GV=w(require("minimist")),{forComponent:Ode,errorToString:NC}=BV.default,le=Ode("replication").conditional,AV=129,bV=140,IV=141,Vd=142,wV=130,CC=132,NV=133,jS=134,LC=136,QS=137,CV=143,OV=144,PV=145,JS=146,$V=0,DC=1,MC=2,ih=3,tT=4,vC=5,VV=0,KV=1,Pde=(0,GV.default)(Fl.argv),XS=Pde.HDB_LEADER_URL??Fl.env.HDB_LEADER_URL,xC=new Map,oc=new Map,ZS=!0,LV=300,Lde=2,DV=3e4;o(rT,"createWebSocket");MV=500,Kd=class extends UC.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??Ti(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await rT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Fl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),le[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=MV,this.nodeSubscriptions&&Ul({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=oh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(le.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?le.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):le.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&qd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();le.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(oh,"replicateOverWS")});function ah(e){return e===zV||e===Dde}function Mde(e){return e===jV||e===QV}function FC(e){return e===zV?jV:QV}function vde(){if(WV)return;WV=!0;let e=kl.CryptoEngine.prototype,t=kl.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 ah(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return ah(s)?{name:FC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Mde(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=kl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(ah(i)){let a=FC(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(ah(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new ch.X509Certificate(Buffer.from(i)),l=new ch.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(ah(c)){let l=FC(c);try{let u=this.crypto?.subtle||this.subtle||kl.getCrypto(!0)?.subtle||ch.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 kl,ch,zV,Dde,jV,QV,WV,JV=ie(()=>{kl=w(require("pkijs")),ch=require("node:crypto"),zV="1.3.101.112",Dde="1.3.101.113",jV="Ed25519",QV="Ed448",WV=!1;o(ah,"isEd25519OrEd448");o(Mde,"isEdDSAAlgorithmName");o(FC,"getEdDSAAlgorithmName");o(vde,"applyEd25519Patch");vde()});function Ude(){return sT||(sT=Ze({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),sT.sourcedFrom(kC)),sT}function xde(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 Yd(e,t){jt.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=xde(t);if(r===!1)return jt.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=kde(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"}):Bde(n[0].cert,n[0].issuer,r)}async function Bde(e,t,r){jt.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=XV(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=XV(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,e1.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;jt.trace?.("OCSP cache key:",i);let c=await Ude().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??lh.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??lh.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 Fde(e,t,r){jt.trace?.("Calling getCertStatus with timeout:",r);let n=await(0,ZV.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 XV(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(`
|
|
20
|
+
`)}function kde(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 ZV,e1,t1,jt,kC,lh,sT,iT=ie(()=>{JV();ZV=require("easy-ocsp"),e1=require("node:crypto"),t1=w(Jn());Oe();Ua();jt=(0,t1.loggerWithTag)("cert-verification"),kC=class extends Fr{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??lh.timeout,l=await Promise.race([Fde(s,i,c),new Promise((d,f)=>setTimeout(()=>f(new Error("OCSP timeout")),c))]);jt.debug?.("OCSP check result:",l);let u=a?.cacheTtl??lh.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??lh.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)}}},lh={timeout:5e3,cacheTtl:36e5,failureMode:"fail-open"};o(Ude,"getCertificateCacheTable");o(xde,"getCertificateVerificationConfig");o(Yd,"verifyCertificate");o(Bde,"verifyOCSP");o(Fde,"performOCSPCheck");o(XV,"bufferToPem");o(kde,"extractCertificateChain")});var zo={};Ie(zo,{clearThisNodeName:()=>zde,disableReplication:()=>$de,enabledDatabases:()=>ic,forEachReplicatedDatabase:()=>ec,getThisNodeId:()=>nT,getThisNodeName:()=>it,getThisNodeUrl:()=>tc,hostnameToUrl:()=>lT,lastTimeInAuditStore:()=>Xp,monitorNodeCAs:()=>u1,replicateOperation:()=>Qde,replicationCertificateAuthorities:()=>jo,sendOperationToNode:()=>uh,servers:()=>qde,setReplicator:()=>f1,start:()=>Gde,startOnMainThread:()=>pC,subscribeToNode:()=>th,unsubscribeFromNode:()=>VS,urlToNodeName:()=>Ti});function Gde(e){if(!e.port&&!e.securePort&&(e.port=Hs.default.get(B.OPERATIONSAPI_NETWORK_PORT),e.securePort=Hs.default.get(B.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 eh(e))t.set(Ti(s.url),s);Vde(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(),oh(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,c1.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 Yd(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=cT.createSecureContext(u)}catch(l){It.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Hs.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&i()}u1(()=>{for(let s of n)s()})}function u1(e){let t=0;kd(r=>{r?.ca&&(jo.add(r.ca),jo.size!==t&&(t=jo.size,e?.()))})}function $de(e=!0){l1=e}function Vde(e){l1||(ct(),ic=e.databases,ec(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||oc;for(let[s,i]of aT){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];f1(r,s,e),xC.get(s)?.forEach(i=>i(s))}}))}function f1(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 d1 extends Fr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||oc,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 Qn,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=Yde(h,d1.subscription,e);if(E?.isConnected){let g=Fd(t.auditStore,e,h)[tT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new o1.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Hde++,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",Hl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Kde(e,t,r,n,s){let i=aT.get(e);i||aT.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Kd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function Yde(e,t,r){let n=r1.get(Hl);n||(n=new Map,r1.set(Hl,n));let s=n.get(r);if(s)return s;let i=Wt().primaryStore.get(e);return i?.url&&(s=new Kd(i.url,t,r,Hl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function uh(e,t,r){r||(r={}),r.serverName=e.name;let n=await rT(e.url,r),s=oh(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 th(e){try{a1.isMainThread&&It.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=oc.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,oc.set(e.database,t)}let r=Kde(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=>Zp(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function VS({name:e,url:t,database:r}){It.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Wt().primaryStore.getRange({})));let n=aT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Wde(){if(HC!==void 0)return HC;let e=Hs.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||Hs.default.get(B.TLS_CERTIFICATE);if(e)return HC=new s1.X509Certificate((0,i1.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return Hl||(Hl=Hs.default.get("replication_hostname")??Ti(Hs.default.get("replication_url"))??Wde()??n1("operationsapi_network_secureport")??n1("operationsapi_network_port")??"127.0.0.1")}function zde(){Hl=void 0}function n1(e){let t=Hs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function oT(e){let t=Hs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function nT(e){return Jp(e)?.[it()]}function tc(){let e=Hs.default.get("replication_url");return e||lT(it())}function lT(e){let t=oT("replication_port");if(t)return`ws://${e}:${t}`;if(t=oT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=oT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=oT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ti(e){if(e)return new URL(e).hostname}function ec(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return vp(n=>{r(n)}),Nl((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):jde(n)&&t(s,n,!1)}o(r,"forDatabase")}function jde(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function Xp(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Qde(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=>uh(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 Hs,It,s1,i1,cT,o1,a1,c1,l1,Hde,qde,jo,ic,aT,r1,HC,Hl,ds=ie(()=>{Oe();Ua();Nu();BC();xr();Hs=w(ae()),It=w(j()),s1=require("crypto");iT();i1=require("fs");rh();vl();H();dC();cT=w(require("node:tls")),o1=w(_e()),a1=require("worker_threads"),c1=w(ms()),Hde=1,qde=[],jo=Hs.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(cT.rootCertificates):new Set;o(Gde,"start");o(u1,"monitorNodeCAs");o($de,"disableReplication");o(Vde,"assignReplicationSource");o(f1,"setReplicator");aT=new Map;o(Kde,"getSubscriptionConnection");r1=new Map;o(Yde,"getRetrievalConnectionByName");o(uh,"sendOperationToNode");o(th,"subscribeToNode");o(VS,"unsubscribeFromNode");o(Wde,"getCommonNameFromCert");o(it,"getThisNodeName");o(zde,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return it()}});o(n1,"getHostFromListeningPort");o(oT,"getPortFromListeningPort");o(nT,"getThisNodeId");Ue.replication={getThisNodeId:nT,exportIdMapping:Jp};o(tc,"getThisNodeUrl");o(lT,"hostnameToUrl");o(Ti,"urlToNodeName");o(ec,"forEachReplicatedDatabase");o(jde,"hasExplicitlyReplicatedTable");o(Xp,"lastTimeInAuditStore");o(Qde,"replicateOperation")});var mh=M((F0e,_1)=>{"use strict";var Wd=p$(),{validateBySchema:dh}=at(),{commonValidators:zd,schemaRegex:qC}=Gi(),hr=require("joi"),Jde=j(),Xde=require("uuid").v4,fT=ko(),jd=(H(),D(Y)),Zde=require("util"),ac=ss(),{handleHDBError:Qo,hdbErrors:efe,ClientError:fh}=_e(),{HDB_ERROR_MSGS:uT,HTTP_STATUS_CODES:Jo}=efe,{SchemaEventMsg:mT}=ts(),m1=Ft(),{getDatabases:tfe}=(Oe(),D(mt)),{transformReq:Qd}=oe(),{replicateOperation:p1}=(ds(),D(zo)),dT=hr.string().min(1).max(zd.schema_length.maximum).pattern(qC).messages({"string.pattern.base":"{:#label} "+zd.schema_format.message}),rfe=hr.string().min(1).max(zd.schema_length.maximum).pattern(qC).messages({"string.pattern.base":"{:#label} "+zd.schema_format.message}).required(),nfe=hr.string().min(1).max(zd.schema_length.maximum).pattern(qC).messages({"string.pattern.base":"{:#label} "+zd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();_1.exports={createSchema:sfe,createSchemaStructure:h1,createTable:ife,createTableStructure:E1,createAttribute:ufe,dropSchema:ofe,dropTable:afe,dropAttribute:cfe,getBackup:dfe};async function sfe(e){let t=await h1(e);return fT.signalSchemaChange(new mT(process.pid,e.operation,e.schema)),t}o(sfe,"createSchema");async function h1(e){let t=dh(e,hr.object({database:dT,schema:dT}));if(t)throw new fh(t.message);if(Qd(e),!await Wd.checkSchemaExists(e.schema))throw Qo(new Error,uT.SCHEMA_EXISTS_ERR(e.schema),Jo.BAD_REQUEST,jd.LOG_LEVELS.ERROR,uT.SCHEMA_EXISTS_ERR(e.schema),!0);return await ac.createSchema(e),`database '${e.schema}' successfully created`}o(h1,"createSchemaStructure");async function ife(e){return Qd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await E1(e)}o(ife,"createTable");async function E1(e){let t=dh(e,hr.object({database:dT,schema:dT,table:rfe,residence:hr.array().items(hr.string().min(1)).optional(),hash_attribute:nfe}));if(t)throw new fh(t.message);if(!await Wd.checkSchemaTableExists(e.schema,e.table))throw Qo(new Error,uT.TABLE_EXISTS_ERR(e.schema,e.table),Jo.BAD_REQUEST,jd.LOG_LEVELS.ERROR,uT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Xde(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ac.createTable(n,e);else throw Qo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Jo.BAD_REQUEST);else await ac.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(E1,"createTableStructure");async function ofe(e){let t=dh(e,hr.object({database:hr.string(),schema:hr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new fh(t.message);Qd(e);let r=await Wd.checkSchemaExists(e.schema);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,jd.LOG_LEVELS.ERROR,r,!0);let n=await Wd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await ac.dropSchema(e),fT.signalSchemaChange(new mT(process.pid,e.operation,e.schema)),await m1.purgeSchemaTableStreams(e.schema,s);let i=await p1(e);return i.message=`successfully deleted '${e.schema}'`,i}o(ofe,"dropSchema");async function afe(e){let t=dh(e,hr.object({database:hr.string(),schema:hr.string(),table:hr.string().required()}));if(t)throw new fh(t.message);Qd(e);let r=await Wd.checkSchemaTableExists(e.schema,e.table);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,jd.LOG_LEVELS.ERROR,r,!0);await ac.dropTable(e),await m1.purgeTableStream(e.schema,e.table);let n=await p1(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(afe,"dropTable");async function cfe(e){let t=dh(e,hr.object({database:hr.string(),schema:hr.string(),table:hr.string().required(),attribute:hr.string().required()}));if(t)throw new fh(t.message);Qd(e);let r=await Wd.checkSchemaTableExists(e.schema,e.table);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,jd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Qo(new Error,"You cannot drop a hash attribute",Jo.BAD_REQUEST,void 0,void 0,!0);if(jd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Qo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Jo.BAD_REQUEST,void 0,void 0,!0);try{return await ac.dropAttribute(e),lfe(e),fT.signalSchemaChange(new mT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Jde.error(`Got an error deleting attribute ${Zde.inspect(e)}.`),n}}o(cfe,"dropAttribute");function lfe(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(lfe,"dropAttributeFromGlobal");async function ufe(e){Qd(e);let t=tfe()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Qo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Jo.BAD_REQUEST,void 0,void 0,!0);return await ac.createAttribute(e),fT.signalSchemaChange(new mT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(ufe,"createAttribute");function dfe(e){return ac.getBackup(e)}o(dfe,"getBackup")});var S1=M((H0e,g1)=>{"use strict";var{OPERATIONS_ENUM:ffe}=(H(),D(Y)),GC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=ffe.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};g1.exports=GC});var $C=M(($0e,b1)=>{"use strict";var mfe=ss(),G0e=S1(),pT=oe(),hT=(H(),D(Y)),pfe=ae(),{handleHDBError:T1,hdbErrors:hfe}=_e(),{HDB_ERROR_MSGS:y1,HTTP_STATUS_CODES:R1}=hfe,Efe=Object.values(hT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),A1="To use this operation audit log must be enabled in harperdb-config.yaml";b1.exports=_fe;async function _fe(e){if(pT.isEmpty(e.schema))throw new Error(y1.SCHEMA_REQUIRED_ERR);if(pT.isEmpty(e.table))throw new Error(y1.TABLE_REQUIRED_ERR);if(!pfe.get(hT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw T1(new Error,A1,R1.BAD_REQUEST,hT.LOG_LEVELS.ERROR,A1,!0);let t=pT.checkSchemaTableExist(e.schema,e.table);if(t)throw T1(new Error,t,R1.NOT_FOUND,hT.LOG_LEVELS.ERROR,t,!0);if(!pT.isEmpty(e.search_type)&&Efe.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await mfe.readAuditLog(e)}o(_fe,"readAuditLog")});var w1=M((K0e,I1)=>{"use strict";var{OPERATIONS_ENUM:gfe}=(H(),D(Y)),VC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=gfe.GET_BACKUP,this.schema=t,this.table=r}};I1.exports=VC});var O1=M((j0e,C1)=>{"use strict";var Sfe=ss(),W0e=w1(),KC=oe(),Tfe=(H(),D(Y)),z0e=ae(),{handleHDBError:yfe,hdbErrors:Rfe}=_e(),{HDB_ERROR_MSGS:N1,HTTP_STATUS_CODES:Afe}=Rfe;C1.exports=bfe;async function bfe(e){if(KC.isEmpty(e.schema))throw new Error(N1.SCHEMA_REQUIRED_ERR);if(KC.isEmpty(e.table))throw new Error(N1.TABLE_REQUIRED_ERR);let t=KC.checkSchemaTableExist(e.schema,e.table);if(t)throw yfe(new Error,t,Afe.NOT_FOUND,Tfe.LOG_LEVELS.ERROR,t,!0);return await Sfe.getBackup(readAuditLogObject)}o(bfe,"getBackup")});var M1=M((J0e,D1)=>{"use strict";var Ife=ae(),cc=require("joi"),wfe=at(),P1=require("moment"),Nfe=require("fs-extra"),YC=require("path"),Cfe=require("lodash"),ph=(H(),D(Y)),{LOG_LEVELS:ql}=(H(),D(Y)),Ofe="YYYY-MM-DD hh:mm:ss",Pfe=YC.resolve(__dirname,"../logs");D1.exports=function(e){return wfe.validateBySchema(e,Lfe)};var Lfe=cc.object({from:cc.custom(L1),until:cc.custom(L1),level:cc.valid(ql.NOTIFY,ql.FATAL,ql.ERROR,ql.WARN,ql.INFO,ql.DEBUG,ql.TRACE),order:cc.valid("asc","desc"),limit:cc.number().min(1),start:cc.number().min(0),log_name:cc.custom(Dfe)});function L1(e,t){if(P1(e,P1.ISO_8601).format(Ofe)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(L1,"validateDatetime");function Dfe(e,t){if(Cfe.invert(ph.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Ife.get(ph.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?ph.LOG_NAMES.HDB:e,i=s===ph.LOG_NAMES.INSTALL?YC.join(Pfe,ph.LOG_NAMES.INSTALL):YC.join(n,s);return Nfe.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Dfe,"validateReadLogPath")});var zC=M((Z0e,U1)=>{"use strict";var ET=(H(),D(Y)),Mfe=j(),vfe=ae(),Ufe=M1(),WC=require("path"),v1=require("fs-extra"),{once:xfe}=require("events"),{handleHDBError:Bfe,hdbErrors:Ffe}=_e(),{PACKAGE_ROOT:kfe}=yt(),{replicateOperation:Hfe}=(ds(),D(zo)),qfe=WC.join(kfe,"logs"),Gfe=1e3,$fe=200;U1.exports=Vfe;async function Vfe(e){let t=Ufe(e);if(t)throw Bfe(t,t.message,Ffe.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Hfe(e),n=vfe.get(ET.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?ET.LOG_NAMES.HDB:e.log_name,i=s===ET.LOG_NAMES.INSTALL?WC.join(qfe,ET.LOG_NAMES.INSTALL):WC.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?Gfe: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(v1.statSync(i).size-(E+5)*$fe,0));let A=v1.createReadStream(i,{start:g});A.on("error",q=>{Mfe.error(q)});let S=0,R=[],N="",O;A.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let J=0,W;for(;(W=k.exec(q))&&!A.destroyed;){O&&(O.message=q.slice(J,W.index),F(O));let[ue,ce,re]=W,Re=re.split("] ["),Te=Re[0],Fe=Re[1];Re.splice(0,2),O={timestamp:ce,thread:Te,level:Fe,tags:Re,message:""},J=W.index+ue.length}N=q.slice(J)}),A.on("end",q=>{A.destroyed||O&&(O.message=N.trim(),F(O))}),A.resume();function F(q){let k,J,W;switch(!0){case(a&&l&&d):k=new Date(q.timestamp),J=new Date(u),W=new Date(f),q.level===c&&k>=J&&k<=W&&S<h?S++:q.level===c&&k>=J&&k<=W&&(so(q,p,R),S++,S===E&&A.destroy());break;case(a&&l):k=new Date(q.timestamp),J=new Date(u),q.level===c&&k>=J&&S<h?S++:q.level===c&&k>=J&&(so(q,p,R),S++,S===E&&A.destroy());break;case(a&&d):k=new Date(q.timestamp),W=new Date(f),q.level===c&&k<=W&&S<h?S++:q.level===c&&k<=W&&(so(q,p,R),S++,S===E&&A.destroy());break;case(l&&d):k=new Date(q.timestamp),J=new Date(u),W=new Date(f),k>=J&&k<=W&&S<h?S++:k>=J&&k<=W&&(so(q,p,R),S++,S===E&&A.destroy());break;case a:q.level===c&&S<h?S++:q.level===c&&(so(q,p,R),S++,S===E&&A.destroy());break;case l:k=new Date(q.timestamp),J=new Date(u),k>=J&&S<h?S++:k>=J&&S>=h&&(so(q,p,R),S++,S===E&&A.destroy());break;case d:k=new Date(q.timestamp),W=new Date(f),k<=W&&S<h?S++:k<=W&&S>=h&&(so(q,p,R),S++,S===E&&A.destroy());break;default:S<h?S++:(so(q,p,R),S++,S===E&&A.destroy())}}o(F,"onLogMessage"),await xfe(A,"close");let te=await r;if(te.replicated){for(let q of R)q.node=server.hostname;for(let q of te.replicated){let k=q.node;if(q.status==="failed")so({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${q.reason}`},p,R);else for(let J of q.results)J.node=k,so(J,p,R)}}return R}o(Vfe,"readLog");function so(e,t,r){t==="desc"?Kfe(e,r):t==="asc"?Yfe(e,r):r.push(e)}o(so,"pushLineToResult");function Kfe(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(Kfe,"insertDescending");function Yfe(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(Yfe,"insertAscending")});var _T=M((iBe,k1)=>{"use strict";var jC=require("joi"),{string:Jd,boolean:x1,date:Wfe}=jC.types(),zfe=at(),{validateSchemaExists:tBe,validateTableExists:rBe,validateSchemaName:nBe}=Gi(),jfe=(H(),D(Y)),Qfe=pt(),B1=ae();B1.initSync();var sBe=Jd.invalid(B1.get(jfe.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Qfe.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),F1={operation:Jd.valid("add_node","update_node","set_node_replication"),node_name:Jd.optional(),subscriptions:jC.array().items({table:Jd.optional(),schema:Jd.optional(),database:Jd.optional(),subscribe:x1.required(),publish:x1.required().custom(Xfe),start_time:Wfe.iso()})};function Jfe(e){return zfe.validateBySchema(e,jC.object(F1))}o(Jfe,"addUpdateNodeValidator");function Xfe(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(Xfe,"checkForFalsy");k1.exports={addUpdateNodeValidator:Jfe,validationSchema:F1}});var lc=M((aBe,H1)=>{"use strict";var QC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},JC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};H1.exports={Node:QC,NodeSubscription:JC}});var G1=M((lBe,q1)=>{"use strict";var Zfe=(H(),D(Y)).OPERATIONS_ENUM,XC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Zfe.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};q1.exports=XC});var hh=M((dBe,$1)=>{"use strict";var ZC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},eO=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)}};$1.exports={RemotePayloadObject:ZC,RemotePayloadSubscription:eO}});var K1=M((mBe,V1)=>{"use strict";var tO=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}};V1.exports=tO});var W1=M((SBe,Y1)=>{"use strict";var eme=K1(),hBe=Vt(),EBe=_t(),tme=j(),{getSchemaPath:_Be,getTransactionAuditStorePath:gBe}=Rt(),{getDatabases:rme}=(Oe(),D(mt));Y1.exports=nme;async function nme(e){let t=new eme;try{let r=rme()[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){tme.warn(`unable to stat table dbi due to ${r}`)}return t}o(nme,"lmdbGetTableSize")});var j1=M((yBe,z1)=>{"use strict";var rO=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}};z1.exports=rO});var Zd=M((NBe,Z1)=>{"use strict";var sme=require("fs-extra"),ime=require("path"),gn=require("systeminformation"),uc=j(),Q1=Ft(),ABe=pt(),Xd=(H(),D(Y)),ome=W1(),ame=Za(),{getThreadInfo:J1}=Je(),Eh=ae();Eh.initSync();var cme=j1(),{openEnvironment:bBe}=_t(),{getSchemaPath:IBe}=Rt(),{database:wBe,databases:nO}=(Oe(),D(mt)),gT;Z1.exports={getHDBProcessInfo:aO,getNetworkInfo:lO,getDiskInfo:cO,getMemoryInfo:oO,getCPUInfo:iO,getTimeInfo:sO,getSystemInformation:uO,systemInformation:lme,getTableSize:dO,getMetrics:fO};function sO(){return gn.time()}o(sO,"getTimeInfo");async function iO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await gn.cpu();d.cpu_speed=await gn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:A,...S}=await gn.currentLoad();return S.cpus=[],A.forEach(R=>{let{rawLoad:N,rawLoadIdle:O,rawLoadIrq:F,rawLoadNice:te,rawLoadSystem:q,rawLoadUser:k,...J}=R;S.cpus.push(J)}),d.current_load=S,d}catch(e){return uc.error(`error in getCPUInfo: ${e}`),{}}}o(iO,"getCPUInfo");async function oO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await gn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return uc.error(`error in getMemoryInfo: ${e}`),{}}}o(oO,"getMemoryInfo");async function aO(){let e={core:[],clustering:[]};try{let t=await gn.processes(),r;try{r=Number.parseInt(await sme.readFile(ime.join(Eh.get(Xd.CONFIG_PARAMS.ROOTPATH),Xd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Xd.NODE_ERROR_CODES.ENOENT)uc.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 uc.error(`error in getHDBProcessInfo: ${t}`),e}}o(aO,"getHDBProcessInfo");async function cO(){let e={};try{if(!Eh.get(Xd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await gn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await gn.fsStats();return e.read_write=u,e.size=await gn.fsSize(),e}catch(t){return uc.error(`error in getDiskInfo: ${t}`),e}}o(cO,"getDiskInfo");async function lO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Eh.get(Xd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await gn.networkInterfaceDefault(),e.latency=await gn.inetChecksite("google.com"),(await gn.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 gn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return uc.error(`error in getNetworkInfo: ${t}`),e}}o(lO,"getNetworkInfo");async function uO(){if(gT!==void 0)return gT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await gn.osInfo();e=c;let l=await gn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,gT=e,gT}catch(t){return uc.error(`error in getSystemInformation: ${t}`),e}}o(uO,"getSystemInformation");async function dO(){let e=[],t=await ame.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await ome(n));return e}o(dO,"getTableSize");async function fO(){let e={};for(let t in nO){let r=e[t]={},n=r.tables={};for(let s in nO[t])try{let i=nO[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){uc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(fO,"getMetrics");async function X1(){if(Eh.get(Xd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Q1.getNATSReferences(),t=await Q1.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(X1,"getNatsStreamInfo");async function lme(e){let t=new cme;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await uO(),t.time=sO(),t.cpu=await iO(),t.memory=await oO(),t.disk=await cO(),t.network=await lO(),t.harperdb_processes=await aO(),t.table_size=await dO(),t.metrics=await fO(),t.threads=await J1(),t.replication=await X1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await uO();break;case"time":t.time=sO();break;case"cpu":t.cpu=await iO();break;case"memory":t.memory=await oO();break;case"disk":t.disk=await cO();break;case"network":t.network=await lO();break;case"harperdb_processes":t.harperdb_processes=await aO();break;case"table_size":t.table_size=await dO();break;case"database_metrics":case"metrics":t.metrics=await fO();break;case"threads":t.threads=await J1();break;case"replication":t.replication=await X1();break;default:break}return t}o(lme,"systemInformation")});var qs=M((DBe,nK)=>{"use strict";var ume=ln(),mO=oe(),dme=require("util"),Gl=(H(),D(Y)),eK=ae();eK.initSync();var fme=GN(),tK=dn(),{Node:OBe,NodeSubscription:PBe}=lc(),mme=Ju(),pme=G1(),{RemotePayloadObject:hme,RemotePayloadSubscription:Eme}=hh(),{handleHDBError:_me,hdbErrors:gme}=_e(),{HTTP_STATUS_CODES:Sme,HDB_ERROR_MSGS:Tme}=gme,yme=di(),Rme=Zd(),{packageJson:Ame}=yt(),{getDatabases:bme}=(Oe(),D(mt)),LBe=dme.promisify(fme.authorize),Ime=tK.searchByHash,wme=tK.searchByValue;nK.exports={isEmpty:Nme,getNodeRecord:Cme,upsertNodeRecord:Ome,buildNodePayloads:Pme,checkClusteringEnabled:Lme,getAllNodeRecords:Dme,getSystemInfo:Mme,reverseSubscription:rK};function Nme(e){return e==null}o(Nme,"isEmpty");async function Cme(e){let t=new mme(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Ime(t)}o(Cme,"getNodeRecord");async function Ome(e){let t=new pme(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return ume.upsert(t)}o(Ome,"upsertNodeRecord");function rK(e){if(mO.isEmpty(e.subscribe)||mO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(rK,"reverseSubscription");function Pme(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=mO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=rK(c),p=bme()[l]?.[u],h=new Eme(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new hme(r,t,s,n)}o(Pme,"buildNodePayloads");function Lme(){if(!eK.get(Gl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw _me(new Error,Tme.CLUSTERING_NOT_ENABLED,Sme.BAD_REQUEST,void 0,void 0,!0)}o(Lme,"checkClusteringEnabled");async function Dme(){let e=new yme(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await wme(e))}o(Dme,"getAllNodeRecords");async function Mme(){let e=await Rme.getSystemInformation();return{hdb_version:Ame.version,node_version:e.node_version,platform:e.platform}}o(Mme,"getSystemInfo")});var pO=M((vBe,dK)=>{"use strict";var ST=Ft(),sK=oe(),iK=pt(),oK=(H(),D(Y)),TT=j(),aK=mh(),vme=Zu(),{RemotePayloadObject:Ume}=hh(),{handleHDBError:cK,hdbErrors:xme}=_e(),{HTTP_STATUS_CODES:lK}=xme,{NodeSubscription:uK}=lc();dK.exports=Bme;async function Bme(e,t){let r;try{r=await ST.request(`${t}.${iK.REQUEST_SUFFIX}`,new Ume(oK.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),TT.trace("Response from remote describe all request:",r)}catch(a){TT.error(`addNode received error from describe all request to remote node: ${a}`);let c=ST.requestErrorHandler(a,"add_node",t);throw cK(new Error,c,lK.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===iK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw cK(new Error,a,lK.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===oK.SYSTEM_SCHEMA_NAME){await ST.createLocalTableStream(l,c);let h=new uK(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=sK.doesSchemaExist(l),d=n[l]!==void 0,f=c?sK.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(TT.trace(`addNode creating schema: ${l}`),await aK.createSchema({operation:"create_schema",schema:l})),!f&&m){TT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new vme(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await aK.createTable(h)}await ST.createLocalTableStream(l,c);let p=new uK(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(Bme,"reviewSubscriptions")});var ef={};Ie(ef,{addNodeBack:()=>hO,removeNodeBack:()=>EO,setNode:()=>qme});async function qme(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Ti(t)):t=lT(r);let n=(0,mK.validateBySchema)(e,Hme);if(n)throw(0,Xo.handleHDBError)(n,n.message,kme.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Xo.ClientError("url or hostname is required for remove_node operation");let p=r,h=Wt(),E=await h.get(p);if(!E)throw new Xo.ClientError(p+" does not exist");try{await uh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){ps.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 Xo.ClientError("url required for this operation");let s=tc();if(s==null)throw new Xo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Gs.getReplicationCert)();let p=await(0,Gs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Gs.createCsr)(),ps.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ps.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,fc.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,fc.get)(B.REPLICATION_SHARD)!==void 0&&(l.shard=(0,fc.get)(B.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(fK):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=fK(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 uh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ps.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&&(ps.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Gs.setCertTable)({name:Fme.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Gs.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,fc.get)(B.REPLICATION_SHARD)!==void 0&&(p.shard=(0,fc.get)(B.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Yo(it(),p)}await Yo(u?u.nodeName:f.name??Ti(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function hO(e){ps.trace("addNodeBack received request:",e);let t=await(0,Gs.signCertificate)(e),r;e.csr?(r=t.signingCA,ps.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,ps.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Gs.getReplicationCertAuth)();if(n.replicates){let i={url:tc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,fc.get)(B.REPLICATION_SHARD)!==void 0&&(i.shard=(0,fc.get)(B.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Yo(it(),i)}return await Yo(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,ps.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function EO(e){ps.trace("removeNodeBack received request:",e),await Wt().delete(e.name)}function fK(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Gs,mK,dc,fc,ps,Xo,Fme,kme,Hme,tf=ie(()=>{Gs=w(ms()),mK=w(at()),dc=w(require("joi")),fc=w(ae());H();rh();vl();ds();ps=w(j()),Xo=w(_e()),{pki:Fme}=require("node-forge"),{HTTP_STATUS_CODES:kme}=Xo.hdbErrors,Hme=dc.default.object({hostname:dc.default.string(),verify_tls:dc.default.boolean(),replicates:dc.default.boolean(),subscriptions:dc.default.array(),revoked_certificates:dc.default.array(),shard:dc.default.number()});o(qme,"setNode");o(hO,"addNodeBack");o(EO,"removeNodeBack");o(fK,"reverseSubscription")});var IT=M(($Be,hK)=>{"use strict";var{handleHDBError:yT,hdbErrors:Gme}=_e(),{HTTP_STATUS_CODES:RT}=Gme,{addUpdateNodeValidator:$me}=_T(),AT=j(),bT=(H(),D(Y)),pK=pt(),Vme=oe(),_h=Ft(),gh=qs(),_O=ae(),Kme=pO(),{Node:Yme,NodeSubscription:Wme}=lc(),{broadcast:zme}=Je(),{setNode:jme}=(tf(),D(ef)),qBe=ae(),GBe=(H(),D(Y)),Qme="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Jme="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Xme=_O.get(bT.CONFIG_PARAMS.CLUSTERING_NODENAME);hK.exports=Zme;async function Zme(e,t=!1){if(AT.trace("addNode called with:",e),_O.get(bT.CONFIG_PARAMS.REPLICATION_URL)||_O.get(bT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return jme(e);gh.checkClusteringEnabled();let r=$me(e);if(r)throw yT(r,r.message,RT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await gh.getNodeRecord(n);if(!Vme.isEmptyOrZeroLength(f))throw yT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,RT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Kme(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=Qme,a;let c=gh.buildNodePayloads(s,Xme,bT.OPERATIONS_ENUM.ADD_NODE,await gh.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 Wme(p.schema,p.table,p.publish,p.subscribe))}AT.trace("addNode sending remote payload:",c);let u;try{u=await _h.request(`${n}.${pK.REQUEST_SUFFIX}`,c)}catch(f){AT.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 _h.updateRemoteConsumer(E,n)}let m=_h.requestErrorHandler(f,"add_node",n);throw yT(new Error,m,RT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===pK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw yT(new Error,f,RT.INTERNAL_SERVER_ERROR,"error",f)}AT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await _h.updateRemoteConsumer(p,n),p.subscribe===!0&&await _h.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new Yme(n,l,u.system_info);return await gh.upsertNodeRecord(d),zme({type:"nats_update"}),i.length>0?a.message=Jme:a.message=`Successfully added '${n}' to manifest`,a}o(Zme,"addNode")});var yO=M((YBe,_K)=>{"use strict";var{handleHDBError:gO,hdbErrors:epe}=_e(),{HTTP_STATUS_CODES:SO}=epe,{addUpdateNodeValidator:tpe}=_T(),Sh=j(),wT=(H(),D(Y)),EK=pt(),KBe=oe(),Th=Ft(),yh=qs(),TO=ae(),{cloneDeep:rpe}=require("lodash"),npe=pO(),{Node:spe,NodeSubscription:ipe}=lc(),{broadcast:ope}=Je(),{setNode:ape}=(tf(),D(ef)),cpe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",lpe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",upe=TO.get(wT.CONFIG_PARAMS.CLUSTERING_NODENAME);_K.exports=dpe;async function dpe(e){if(Sh.trace("updateNode called with:",e),TO.get(wT.CONFIG_PARAMS.REPLICATION_URL)??TO.get(wT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ape(e);yh.checkClusteringEnabled();let t=tpe(e);if(t)throw gO(t,t.message,SO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await yh.getNodeRecord(r);s.length>0&&(n=rpe(s));let{added:i,skipped:a}=await npe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=cpe,c;let l=yh.buildNodePayloads(i,upe,wT.OPERATIONS_ENUM.UPDATE_NODE,await yh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Sh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Sh.trace("updateNode sending remote payload:",l);let u;try{u=await Th.request(`${r}.${EK.REQUEST_SUFFIX}`,l)}catch(d){Sh.error(`updateNode received error from request: ${d}`);let f=Th.requestErrorHandler(d,"update_node",r);throw gO(new Error,f,SO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===EK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw gO(new Error,d,SO.INTERNAL_SERVER_ERROR,"error",d)}Sh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Th.updateRemoteConsumer(m,r),m.subscribe===!0?await Th.updateConsumerIterator(m.schema,m.table,r,"start"):await Th.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new spe(r,[],u.system_info)]),await fpe(n[0],i,u.system_info),a.length>0?c.message=lpe:c.message=`Successfully updated '${r}'`,c}o(dpe,"updateNode");async function fpe(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 ipe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await yh.upsertNodeRecord(n),ope({type:"nats_update"})}o(fpe,"updateNodeTable")});var RK=M((zBe,yK)=>{"use strict";var TK=require("joi"),{string:gK}=TK.types(),mpe=at(),SK=(H(),D(Y)),ppe=ae(),hpe=pt();yK.exports=Epe;function Epe(e){let t=gK.invalid(ppe.get(SK.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(hpe.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=TK.object({operation:gK.valid(SK.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return mpe.validateBySchema(e,r)}o(Epe,"removeNodeValidator")});var NT=M((QBe,NK)=>{"use strict";var{handleHDBError:AK,hdbErrors:_pe}=_e(),{HTTP_STATUS_CODES:bK}=_pe,gpe=RK(),Rh=j(),IK=qs(),Spe=oe(),rf=(H(),D(Y)),wK=pt(),RO=Ft(),AO=ae(),{RemotePayloadObject:Tpe}=hh(),{NodeSubscription:ype}=lc(),Rpe=Xu(),Ape=Va(),{broadcast:bpe}=Je(),{setNode:Ipe}=(tf(),D(ef)),wpe=AO.get(rf.CONFIG_PARAMS.CLUSTERING_NODENAME);NK.exports=Npe;async function Npe(e){if(Rh.trace("removeNode called with:",e),AO.get(rf.CONFIG_PARAMS.REPLICATION_URL)??AO.get(rf.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Ipe(e);IK.checkClusteringEnabled();let t=gpe(e);if(t)throw AK(t,t.message,bK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await IK.getNodeRecord(r);if(Spe.isEmptyOrZeroLength(n))throw AK(new Error,`Node '${r}' was not found.`,bK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Tpe(rf.OPERATIONS_ENUM.REMOVE_NODE,wpe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await RO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await RO.updateRemoteConsumer(new ype(d.schema,d.table,!1,!1),r)}catch(f){Rh.error(f)}}try{i=await RO.request(`${r}.${wK.REQUEST_SUFFIX}`,s),Rh.trace("Remove node reply from remote node:",r,i)}catch(l){Rh.error("removeNode received error from request:",l),a=!0}let c=new Rpe(rf.SYSTEM_SCHEMA_NAME,rf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Ape.deleteRecord(c),bpe({type:"nats_update"}),i?.status===wK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(Rh.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(Npe,"removeNode")});var PK=M((XBe,OK)=>{"use strict";var CK=require("joi"),{string:Cpe,array:Ope}=CK.types(),Ppe=at(),Lpe=_T();OK.exports=Dpe;function Dpe(e){let t=CK.object({operation:Cpe.valid("configure_cluster").required(),connections:Ope.items(Lpe.validationSchema).required()});return Ppe.validateBySchema(e,t)}o(Dpe,"configureClusterValidator")});var bO=M((eFe,UK)=>{"use strict";var LK=(H(),D(Y)),CT=j(),Mpe=oe(),vpe=ae(),Upe=NT(),xpe=IT(),Bpe=qs(),Fpe=PK(),{handleHDBError:DK,hdbErrors:kpe}=_e(),{HTTP_STATUS_CODES:MK}=kpe,Hpe="Configure cluster complete.",qpe="Failed to configure the cluster. Check the logs for more details.",Gpe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";UK.exports=$pe;async function $pe(e){CT.trace("configure cluster called with:",e);let t=Fpe(e);if(t)throw DK(t,t.message,MK.BAD_REQUEST,void 0,void 0,!0);let r=await Bpe.getAllNodeRecords(),n=[];if(vpe.get(LK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await vK(Upe,{operation:LK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}CT.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 vK(xpe,f,f.node_name);s.push(m)}CT.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"&&(CT.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(Mpe.isEmptyOrZeroLength(a))return{message:Hpe,connections:c};if(l)return{message:Gpe,failed_nodes:a,connections:c};throw DK(new Error,qpe,MK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o($pe,"configureCluster");async function vK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(vK,"functionWrapper")});var kK=M((rFe,FK)=>{"use strict";var Ah=require("joi"),Vpe=at(),{validateSchemaExists:xK,validateTableExists:Kpe,validateSchemaName:BK}=Gi(),Ype=Ah.object({operation:Ah.string().valid("purge_stream"),schema:Ah.string().custom(xK).custom(BK).optional(),database:Ah.string().custom(xK).custom(BK).optional(),table:Ah.string().custom(Kpe).required()});function Wpe(e){return Vpe.validateBySchema(e,Ype)}o(Wpe,"purgeStreamValidator");FK.exports=Wpe});var IO=M((sFe,HK)=>{"use strict";var{handleHDBError:zpe,hdbErrors:jpe}=_e(),{HTTP_STATUS_CODES:Qpe}=jpe,Jpe=kK(),Xpe=Ft(),Zpe=qs();HK.exports=ehe;async function ehe(e){e.schema=e.schema??e.database;let t=Jpe(e);if(t)throw zpe(t,t.message,Qpe.BAD_REQUEST,void 0,void 0,!0);Zpe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Xpe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(ehe,"purgeStream")});var CO=M((oFe,WK)=>{"use strict";var NO=qs(),the=Ft(),PT=ae(),nf=(H(),D(Y)),$l=pt(),rhe=oe(),wO=j(),{RemotePayloadObject:nhe}=hh(),{ErrorCode:qK}=require("nats"),{parentPort:GK}=require("worker_threads"),{onMessageByType:she}=Je(),{getThisNodeName:ihe}=(ds(),D(zo)),{requestClusterStatus:ohe}=(rh(),D(tV)),{getReplicationSharedStatus:ahe,getHDBNodeTable:che}=(vl(),D(fC)),{CONFIRMATION_STATUS_POSITION:lhe,RECEIVED_VERSION_POSITION:uhe,RECEIVED_TIME_POSITION:dhe,SENDING_TIME_POSITION:fhe,RECEIVING_STATUS_POSITION:mhe,RECEIVING_STATUS_RECEIVING:phe}=(BC(),D(YV)),$K=PT.get(nf.CONFIG_PARAMS.CLUSTERING_ENABLED),VK=PT.get(nf.CONFIG_PARAMS.CLUSTERING_NODENAME);WK.exports={clusterStatus:hhe,buildNodeStatus:YK};var KK;she("cluster-status",async e=>{KK(e)});async function hhe(){if(PT.get(nf.CONFIG_PARAMS.REPLICATION_URL)||PT.get(nf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(GK){GK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{KK=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=ahe(u,l,a);c.lastCommitConfirmed=OT(d[lhe]),c.lastReceivedRemoteTime=OT(d[uhe]),c.lastReceivedLocalTime=OT(d[dhe]),c.sendingMessage=OT(d[fhe]),c.lastReceivedStatus=d[mhe]===phe?"Receiving":"Waiting"}}}else n=ohe();n.node_name=ihe();let s=che().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:VK,is_enabled:$K,connections:[]};if(!$K)return e;let t=await NO.getAllNodeRecords();if(rhe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(YK(t[n],e.connections));return await Promise.allSettled(r),e}o(hhe,"clusterStatus");function OT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(OT,"asDate");async function YK(e,t){let r=e.name,n=new nhe(nf.OPERATIONS_ENUM.CLUSTER_STATUS,VK,void 0,await NO.getSystemInfo()),s,i,a=$l.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await the.request($l.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===$l.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=$l.CLUSTER_STATUS_STATUSES.CLOSED,wO.error(`Error getting node status from ${r} `,s))}catch(l){wO.warn(`Error getting node status from ${r}`,l),l.code===qK.NoResponders?a=$l.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===qK.Timeout?a=$l.CLUSTER_STATUS_STATUSES.TIMEOUT:a=$l.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Ehe(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!==nf.PRE_4_0_0_VERSION&&await NO.upsertNodeRecord(l)}catch(l){wO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(YK,"buildNodeStatus");function Ehe(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(Ehe,"NodeStatusObject")});var PO=M((cFe,zK)=>{"use strict";var{handleHDBError:_he,hdbErrors:ghe}=_e(),{HTTP_STATUS_CODES:She}=ghe,The=Ft(),yhe=qs(),OO=oe(),LT=require("joi"),Rhe=at(),Ahe=2e3,bhe=LT.object({timeout:LT.number().min(1),connected_nodes:LT.boolean(),routes:LT.boolean()});zK.exports=Ihe;async function Ihe(e){yhe.checkClusteringEnabled();let t=Rhe.validateBySchema(e,bhe);if(t)throw _he(t,t.message,She.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||OO.autoCastBoolean(n),a=s===void 0||OO.autoCastBoolean(s),c={nodes:[]},l=await The.getServerList(r??Ahe),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:OO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(Ihe,"clusterNetwork")});var XK=M((uFe,JK)=>{"use strict";var LO=require("joi"),jK=at(),{routeConstraints:QK}=vw();JK.exports={setRoutesValidator:whe,deleteRoutesValidator:Nhe};function whe(e){let t=LO.object({server:LO.valid("hub","leaf"),routes:QK.required()});return jK.validateBySchema(e,t)}o(whe,"setRoutesValidator");function Nhe(e){let t=LO.object({routes:QK.required()});return jK.validateBySchema(e,t)}o(Nhe,"deleteRoutesValidator")});var DT=M((fFe,iY)=>{"use strict";var Zo=bt(),DO=oe(),$s=(H(),D(Y)),sf=ae(),ZK=XK(),{handleHDBError:eY,hdbErrors:Che}=_e(),{HTTP_STATUS_CODES:tY}=Che,rY="cluster routes successfully set",nY="cluster routes successfully deleted";iY.exports={setRoutes:Phe,getRoutes:Lhe,deleteRoutes:Dhe};function Ohe(e){let t=Zo.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=DO.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"?Zo.updateConfigValue($s.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Zo.updateConfigValue($s.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:rY,set:i,skipped:s}}o(Ohe,"setRoutesNats");function Phe(e){let t=ZK.setRoutesValidator(e);if(t)throw eY(t,t.message,tY.BAD_REQUEST,void 0,void 0,!0);if(sf.get($s.CONFIG_PARAMS.CLUSTERING_ENABLED))return Ohe(e);let r=[],n=[],s=sf.get($s.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{sY(s,i)?n.push(i):(s.push(i),r.push(i))}),Zo.updateConfigValue($s.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:rY,set:r,skipped:n}}o(Phe,"setRoutes");function sY(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(sY,"existsInArray");function Lhe(){if(sf.get($s.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Zo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return sf.get($s.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(Lhe,"getRoutes");function Dhe(e){let t=ZK.deleteRoutesValidator(e);if(t)throw eY(t,t.message,tY.BAD_REQUEST,void 0,void 0,!0);if(sf.get($s.CONFIG_PARAMS.CLUSTERING_ENABLED))return Mhe(e);let r=[],n=[],s=sf.get($s.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{sY(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Zo.updateConfigValue($s.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:nY,deleted:r,skipped:n}}o(Dhe,"deleteRoutes");function Mhe(e){let t=Zo.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=DO.isEmptyOrZeroLength(r)?null:r,Zo.updateConfigValue($s.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=DO.isEmptyOrZeroLength(n)?null:n,Zo.updateConfigValue($s.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:nY,deleted:s,skipped:i}}o(Mhe,"deleteRoutesNats")});var aY=M((pFe,oY)=>{"use strict";var bh=require("alasql"),Vl=require("recursive-iterator"),Ai=j(),vhe=oe(),Ih=(H(),D(Y)),MO=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,xhe(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=>Ih.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=>!Ih.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][Ih.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Uhe(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=>!Ih.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new bh.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 Uhe(e){return e.filter(t=>t[Ih.PERMS_CRUD_ENUM.READ])}o(Uhe,"filterReadRestrictedAttrs");function xhe(e,t,r,n,s){Bhe(e,t,r,n,s)}o(xhe,"interpretAST");function wh(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(wh,"addSchemaTableToMap");function Bhe(e,t,r,n,s){if(!e){Ai.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof bh.yy.Insert?qhe(e,t,r):e instanceof bh.yy.Select?Fhe(e,t,r,n,s):e instanceof bh.yy.Update?khe(e,t,r):e instanceof bh.yy.Delete?Hhe(e,t,r):Ai.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(Bhe,"getRecordAttributesAST");function Fhe(e,t,r,n,s){if(!e){Ai.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(vhe.isEmptyOrZeroLength(i)){Ai.error("No schema specified");return}e.from.forEach(c=>{wh(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),wh(c.table,t,r,n,s)});let a=new Vl(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{Ai.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 Vl(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{Ai.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 Vl(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{Ai.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 Vl(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{Ai.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(Fhe,"getSelectAttributes");function khe(e,t,r){if(!e){Ai.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Vl(e.columns),s=e.table.databaseid;wh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&vO(e.table.tableid,s,i.columnid,t,r)}o(khe,"getUpdateAttributes");function Hhe(e,t,r){if(!e){Ai.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Vl(e.where),s=e.table.databaseid;wh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&vO(e.table.tableid,s,i.columnid,t,r)}o(Hhe,"getDeleteAttributes");function qhe(e,t,r){if(!e){Ai.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Vl(e.columns),s=e.into.databaseid;wh(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&vO(e.into.tableid,s,i.columnid,t,r)}o(qhe,"getInsertAttributes");function vO(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(vO,"pushAttribute");oY.exports=MO});var lY=M((EFe,cY)=>{"use strict";var Ghe=pt(),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+Ghe.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"}};cY.exports=UO});var fY=M((gFe,dY)=>{"use strict";var uY=pt(),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+uY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+uY.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"}};dY.exports=xO});var pY=M((TFe,mY)=>{"use strict";var BO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};mY.exports=BO});var EY=M((RFe,hY)=>{"use strict";var $he=pt(),FO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+$he.SERVER_SUFFIX.ADMIN,this.password=r}};hY.exports=FO});var xT=M((bFe,SY)=>{"use strict";var Kl=require("path"),Yl=require("fs-extra"),Vhe=lY(),Khe=fY(),Yhe=pY(),Whe=EY(),kO=cs(),af=oe(),qn=bt(),vT=(H(),D(Y)),Nh=pt(),{CONFIG_PARAMS:ir}=vT,cf=j(),Ch=ae(),_Y=zi(),HO=Ft(),zhe=ms(),of="clustering",jhe=1e4,gY=50;SY.exports={generateNatsConfig:Jhe,removeNatsConfig:Xhe,getHubConfigPath:Qhe};function Qhe(){let e=Ch.get(ir.ROOTPATH);return Kl.join(e,of,Nh.NATS_CONFIG_FILES.HUB_SERVER)}o(Qhe,"getHubConfigPath");async function Jhe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Ch.get(ir.ROOTPATH);Yl.ensureDirSync(Kl.join(r,"clustering","leaf")),Ch.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 Yl.exists(i)&&!await Yl.exists(!n)&&await zhe.createNatsCerts();let a=Kl.join(r,of,Nh.PID_FILES.HUB),c=Kl.join(r,of,Nh.PID_FILES.LEAF),l=qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Kl.join(r,of,Nh.NATS_CONFIG_FILES.HUB_SERVER),d=Kl.join(r,of,Nh.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()||UT("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();(af.isEmpty(A)||A.active!==!0)&&UT(`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 MT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await MT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await MT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await MT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],R=[];for(let[J,W]of E.entries())W.role?.role===vT.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(S.push(new Whe(W.username,_Y.decrypt(W.hash))),R.push(new Yhe(W.username,_Y.decrypt(W.hash))));let N=[],{hub_routes:O}=qn.getClusteringRoutes();if(!af.isEmptyOrZeroLength(O))for(let J of O)N.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${J.host}:${J.port}`);let F=new Vhe(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),N,S,R);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=af.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===vT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Yl.writeJson(u,F),cf.trace(`Hub server config written to ${u}`));let te=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,q=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new Khe(qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[te],[q],S,R,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===vT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Yl.writeJson(d,k),cf.trace(`Leaf server config written to ${d}`))}o(Jhe,"generateNatsConfig");async function MT(e){let t=Ch.get(e);return af.isEmpty(t)&&UT(`port undefined for '${e}'`),await af.isPortTaken(t)&&UT(`'${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(MT,"isPortAvailable");function UT(e){let t=`Error generating clustering config: ${e}`;cf.error(t),console.error(t),process.exit(1)}o(UT,"generateNatsConfigError");async function Xhe(e){let{port:t,config_file:r}=HO.getServerConfig(e),{username:n,decrypt_hash:s}=await kO.getClusterUser(),i=0,a=2e3;for(;i<gY;){try{let d=await HO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){cf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=gY)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&&cf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await af.asyncSetTimeout(u)}let c="0".repeat(jhe),l=Kl.join(Ch.get(ir.ROOTPATH),of,r);await Yl.writeFile(l,c),await Yl.remove(l),cf.notify(e,"started.")}o(Xhe,"removeNatsConfig")});var IY=M((wFe,bY)=>{"use strict";var hs=ae(),Qe=(H(),D(Y)),Oh=pt(),ea=require("path"),{PACKAGE_ROOT:FT}=yt(),TY=ae(),BT=oe(),lf="/dev/null",Zhe=ea.join(FT,"launchServiceScripts"),yY=ea.join(FT,"utility/scripts"),eEe=ea.join(yY,Qe.HDB_RESTART_SCRIPT),RY=ea.resolve(FT,"dependencies",`${process.platform}-${process.arch}`,Oh.NATS_BINARY_NAME);function AY(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return BT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=BT.getEnvCliRootPath()),{name:Qe.PROCESS_DESCRIPTORS.HDB,script:Qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,cwd:FT}}o(AY,"generateMainServerConfig");var tEe=9930;function rEe(){hs.initSync(!0);let e=hs.get(Qe.CONFIG_PARAMS.ROOTPATH),t=ea.join(e,"clustering",Oh.NATS_CONFIG_FILES.HUB_SERVER),r=ea.join(hs.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=TY.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Oh.LOG_LEVEL_FLAGS[hs.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==tEe?"-"+n:""),script:RY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return hs.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=lf,i.error_file=lf),i}o(rEe,"generateNatsHubServerConfig");var nEe=9940;function sEe(){hs.initSync(!0);let e=hs.get(Qe.CONFIG_PARAMS.ROOTPATH),t=ea.join(e,"clustering",Oh.NATS_CONFIG_FILES.LEAF_SERVER),r=ea.join(hs.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=TY.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Oh.LOG_LEVEL_FLAGS[hs.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==nEe?"-"+n:""),script:RY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return hs.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=lf,i.error_file=lf),i}o(sEe,"generateNatsLeafServerConfig");function iEe(){hs.initSync();let e=ea.join(hs.get(Qe.CONFIG_PARAMS.LOGGING_ROOT),Qe.LOG_NAMES.HDB),t={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Zhe,autorestart:!1};return hs.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=lf,t.error_file=lf),t}o(iEe,"generateClusteringUpgradeV4ServiceConfig");function oEe(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.RESTART_HDB};return BT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=BT.getEnvCliRootPath()),{...{name:Qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:yY},script:eEe}}o(oEe,"generateRestart");function aEe(){return{apps:[AY()]}}o(aEe,"generateAllServiceConfigs");bY.exports={generateAllServiceConfigs:aEe,generateMainServerConfig:AY,generateRestart:oEe,generateNatsHubServerConfig:rEe,generateNatsLeafServerConfig:sEe,generateClusteringUpgradeV4ServiceConfig:iEe}});var Lh=M((OFe,kY)=>{"use strict";var ft=(H(),D(Y)),cEe=oe(),ra=xT(),kT=Ft(),ta=pt(),mc=IY(),HT=ae(),Wl=j(),lEe=qs(),{startWorker:wY,onMessageFromWorkers:uEe}=Je(),dEe=Zd(),CFe=require("util"),fEe=require("child_process"),mEe=require("fs"),{execFile:pEe}=fEe,tt;kY.exports={enterPM2Mode:hEe,start:pc,stop:qO,reload:CY,restart:OY,list:GO,describe:DY,connect:na,kill:TEe,startAllServices:yEe,startService:$O,getUniqueServicesList:MY,restartAllServices:REe,isServiceRegistered:vY,reloadStopStart:UY,restartHdb:LY,deleteProcess:gEe,startClusteringProcesses:BY,startClusteringThreads:FY,isHdbRestartRunning:SEe,isClusteringRunning:bEe,stopClustering:AEe,reloadClustering:IEe,expectedRestartOfChildren:PY};var Ph=!1;uEe(e=>{e.type==="restart"&&HT.initSync(!0)});function hEe(){Ph=!0}o(hEe,"enterPM2Mode");function na(){return tt||(tt=require("pm2")),new Promise((e,t)=>{tt.connect((r,n)=>{r&&t(r),e(n)})})}o(na,"connect");var Sn,EEe=10,NY;function pc(e,t=!1){if(Ph)return _Ee(e);let r=pEe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=Sn.indexOf(r);a>-1&&Sn.splice(a,1),!NY&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<EEe&&(mEe.existsSync(ra.getHubConfigPath())?pc(e):(await ra.generateNatsConfig(!0),pc(e),await new Promise(c=>setTimeout(c,3e3)),await ra.removeNatsConfig(ft.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ra.removeNatsConfig(ft.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=HT.get(ft.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&ta.LOG_LEVEL_HIERARCHY[a]>=ta.LOG_LEVEL_HIERARCHY[d||"info"]){let p=d===ta.LOG_LEVELS.ERR||d===ta.LOG_LEVELS.WRN?Wl.OUTPUTS.STDERR:Wl.OUTPUTS.STDOUT;Wl.logCustomLevel(d||"info",p,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=ta.LOG_LEVELS[m]}if(ta.LOG_LEVEL_HIERARCHY[a]>=ta.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===ta.LOG_LEVELS.ERR||d===ta.LOG_LEVELS.WRN?Wl.OUTPUTS.STDERR:Wl.OUTPUTS.STDOUT;Wl.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Sn&&(Sn=[],!t)){let i=o(()=>{NY=!0,Sn&&(Sn.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Sn.push(r)}o(pc,"start");function _Ee(e){return new Promise(async(t,r)=>{try{await na()}catch(n){r(n)}tt.start(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(_Ee,"startWithPM2");function qO(e){if(!Ph){for(let t of Sn||[])t.name===e&&(Sn.splice(Sn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await na()}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(qO,"stop");function CY(e){return new Promise(async(t,r)=>{try{await na()}catch(n){r(n)}tt.reload(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(CY,"reload");function OY(e){if(!Ph){PY();for(let t of Sn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await na()}catch(n){r(n)}tt.restart(e,(n,s)=>{tt.disconnect(),t(s)})})}o(OY,"restart");function PY(){for(let e of Sn||[])e.config&&(e.config.restarts=0)}o(PY,"expectedRestartOfChildren");function gEe(e){return new Promise(async(t,r)=>{try{await na()}catch(n){r(n)}tt.delete(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(gEe,"deleteProcess");async function LY(){await pc(mc.generateRestart())}o(LY,"restartHdb");async function SEe(){let e=await GO();for(let t in e)if(e[t].name===ft.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(SEe,"isHdbRestartRunning");function GO(){return new Promise(async(e,t)=>{try{await na()}catch(r){t(r)}tt.list((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(GO,"list");function DY(e){return new Promise(async(t,r)=>{try{await na()}catch(n){r(n)}tt.describe(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(DY,"describe");function TEe(){if(!Ph){for(let e of Sn||[])e.kill();Sn=[];return}return new Promise(async(e,t)=>{try{await na()}catch(r){t(r)}tt.killDaemon((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(TEe,"kill");async function yEe(){try{await BY(),await FY(),await pc(mc.generateAllServiceConfigs())}catch(e){throw tt?.disconnect(),e}}o(yEe,"startAllServices");async function $O(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ft.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=mc.generateMainServerConfig();break;case ft.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=mc.generateNatsIngestServiceConfig();break;case ft.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=mc.generateNatsReplyServiceConfig();break;case ft.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=mc.generateNatsHubServerConfig(),await pc(r,t),await ra.removeNatsConfig(e);return;case ft.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=mc.generateNatsLeafServerConfig(),await pc(r,t),await ra.removeNatsConfig(e);return;case ft.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 pc(r)}catch(r){throw tt?.disconnect(),r}}o($O,"startService");async function MY(){try{let e=await GO(),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(MY,"getUniqueServicesList");async function REe(e=[]){try{let t=!1,r=await MY();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===ft.PROCESS_DESCRIPTORS.HDB?t=!0:await OY(a))}t&&await UY(ft.PROCESS_DESCRIPTORS.HDB)}catch(t){throw tt?.disconnect(),t}}o(REe,"restartAllServices");async function vY(e){if(Sn?.find(r=>r.name===e))return!0;let t=await dEe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(vY,"isServiceRegistered");async function UY(e){let t=HT.get(ft.CONFIG_PARAMS.THREADS_COUNT)??HT.get(ft.CONFIG_PARAMS.THREADS),r=await DY(e),n=cEe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await qO(e),await $O(e)):e===ft.PROCESS_DESCRIPTORS.HDB?await LY():await CY(e)}o(UY,"reloadStopStart");var xY;async function BY(e=!1){for(let t in ft.CLUSTERING_PROCESSES){let r=ft.CLUSTERING_PROCESSES[t];await $O(r,e)}}o(BY,"startClusteringProcesses");async function FY(){xY=wY(ft.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ft.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await kT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await kT.updateLocalStreams();let e=await lEe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ft.PRE_4_0_0_VERSION){Wl.info("Starting clustering upgrade 4.0.0 process"),wY(ft.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(FY,"startClusteringThreads");async function AEe(){for(let e in ft.CLUSTERING_PROCESSES)if(e!==ft.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ft.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await xY.terminate();else{let t=ft.CLUSTERING_PROCESSES[e];await qO(t)}}o(AEe,"stopClustering");async function bEe(){for(let e in ft.CLUSTERING_PROCESSES){let t=ft.CLUSTERING_PROCESSES[e];if(await vY(t)===!1)return!1}return!0}o(bEe,"isClusteringRunning");async function IEe(){await ra.generateNatsConfig(!0),await kT.reloadNATSHub(),await kT.reloadNATSLeaf(),await ra.removeNatsConfig(ft.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ra.removeNatsConfig(ft.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(IEe,"reloadClustering")});var YO={};Ie(YO,{compactOnStart:()=>wEe,copyDb:()=>KY});async function wEe(){hc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,VO.get)(B.ROOTPATH),t=new Map,r=ct();(0,KO.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,qT.join)(e,"backup",n+".mdb"),a=(0,qT.join)(e,Gc,n+"-copy.mdb"),c=0;try{c=await HY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){hc.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 KY(n,a),console.log("Backing up",n,"to",i);try{await(0,zl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{Td()}catch(n){hc.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,zl.move)(i,s,{overwrite:!0}),await(0,zl.remove)((0,qT.join)(e,Gc,`${n}-copy.mdb-lock`));try{Td()}catch(n){hc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){hc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,KO.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,zl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw Td(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await HY(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}`;hc.error(l),console.error(l)}(0,VO.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,zl.remove)(s))}}async function
|
|
23
|
-
${r.stack}`;throw XO.error(n),QY(new Error)}}}o(kEe,"getRolePermissions");function HEe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Gn.SYSTEM_SCHEMA_NAME]=n[Gn.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]=qEe(t[i]);return}r[i]=eW(),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=GEe(c,l);r[i].describe||rW.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=ZO()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=ZO()})}),r}o(HEe,"translateRolePermissions");function qEe(e){let t=eW(!0);return Object.keys(e).forEach(r=>{t.tables[r]=ZO(!0,!0,!0,!0,!0)}),t}o(qEe,"createStructureUserPermissions");function GEe(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 Gn.TIME_STAMP_NAMES.includes(f)&&(m=XY(f,d[Uh])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=JY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=sW(d),s.attribute_permissions.push(d),c||$Ee(d,l)}else if(u!==a){let d;Gn.TIME_STAMP_NAMES.includes(u)?d=XY(u):d=JY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=ZY(s),s}else return e.describe=ZY(e),e}o(GEe,"getTableAttrPerms");function ZY(e){return rW.filter(t=>e[t]).length>0}o(ZY,"getSchemaTableDescribePerm");function sW(e){return nW.filter(t=>e[t]).length>0}o(sW,"getAttributeDescribePerm");function $Ee(e,t){nW.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o($Ee,"checkForHashPerms")});var xh={};Ie(xh,{authentication:()=>hW,bypassAuth:()=>t_e,login:()=>nP,logout:()=>sP,start:()=>r_e});function t_e(){pW=!0}async function hW(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let p=e.isOperationsServer?JEe?QEe:[]:jEe?zEe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=Tn.get(B.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Us([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return WT&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}a.push("Access-Control-Allow-Origin",i),WT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(WT){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 aW.get(l);break}e.session=u||(u={})}let d=o((p,h,E)=>{let g=new KEe(p,h,Ia.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===ii.SUCCESS?YT.info?.(g):YT.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&YT.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await Yd(e.peerCertificate,e.mtlsConfig);if(!p.valid)return YT.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Co({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,ii.SUCCESS,"mTLS")):WEe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=Ql.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),R=S.indexOf(":");g=S.slice(0,R),A=S.slice(R+1),f=g||A?await Ue.getUser(g,A,e):null;break;case"Bearer":try{f=await qN(E)}catch(N){if(N.message==="invalid token")try{return await IS(E),c({status:-1})}catch{throw N}}break}}catch(S){return ZEe&&(Ql.get(E)||(Ql.set(E,E),d(g,ii.FAILURE,h))),c({status:401,body:Co({error:S.message},e)})}Ql.set(n,f),XEe&&d(f.username,ii.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):(pW&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,lW.getSuperUser)());WT&&(e.session.update=function(p){let h=Tn.get(B.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,uW.v4)();let g=Tn.get(B.AUTHENTICATION_COOKIE_DOMAINS),A=h?new Date(Date.now()+(0,rP.convertToMS)(h)).toUTCString():e_e,S=r.host&&g?.find(O=>{O.startsWith(".")&&(O=O.slice(1));let F=r.host.indexOf(":");return(F!==-1?r.host.slice(0,F):r.host).endsWith(O)}),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${A}; HttpOnly`;S&&(N+=`; Domain=${S}`),E&&(N+="; SameSite=None; Secure"),a?a.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}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,aW.put(p,{expiresAt:h?Date.now()+(0,rP.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")&&Ls.loginPath?(m.status=302,m.headers.set("Location",Ls.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 Us);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function r_e({server:e,port:t,securePort:r}){e.http(hW,t||r?{port:t,securePort:r}:{port:"all"}),cW||(cW=!0,setInterval(()=>{Ql=new Map},Tn.get(B.AUTHENTICATION_CACHETTL)).unref(),YEe.addListener(()=>{Ql=new Map}))}async function nP(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 sP(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var lW,uW,Tn,dW,fW,rP,VEe,KEe,YEe,mW,WEe,YT,zEe,jEe,QEe,JEe,aW,WT,pW,XEe,ZEe,e_e,Ql,cW,zT=ie(()=>{lW=w(cs());xr();xa();Pd();Oe();uW=require("uuid"),Tn=w(ae());H();dW=w(j()),fW=w(yp());bp();rP=w(oe());iT();Po();({forComponent:VEe,AuthAuditLog:KEe}=dW.default),{user:YEe}=fW.default,mW=VEe("authentication"),{debug:WEe}=mW,YT=mW.withTag("auth-event");Tn.initSync();zEe=Tn.get(B.HTTP_CORSACCESSLIST),jEe=Tn.get(B.HTTP_CORS),QEe=Tn.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),JEe=Tn.get(B.OPERATIONSAPI_NETWORK_CORS),aW=Ze({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),WT=Tn.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,pW=process.env.AUTHENTICATION_AUTHORIZELOCAL??Tn.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,XEe=Tn.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,ZEe=Tn.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,e_e="Tue, 01 Oct 8307 19:33:20 GMT",Ql=new Map;Ue.onInvalidatedUser(()=>{Ql=new Map});o(t_e,"bypassAuth");o(hW,"authentication");o(r_e,"start");o(nP,"login");o(sP,"logout")});var RW=D((WFe,yW)=>{"use strict";var Ce=require("joi"),EW=require("fs-extra"),_W=require("path"),Es=at(),gW=ae(),SW=(H(),M(Y)),TW=j(),{hdbErrors:n_e}=_e(),{HDB_ERROR_MSGS:yn}=n_e,sa=/^[a-zA-Z0-9-_]+$/,s_e=/^[a-zA-Z0-9-_]+$/;yW.exports={getDropCustomFunctionValidator:o_e,setCustomFunctionValidator:a_e,addComponentValidator:d_e,dropCustomFunctionProjectValidator:f_e,packageComponentValidator:m_e,deployComponentValidator:p_e,setComponentFileValidator:c_e,getComponentFileValidator:u_e,dropComponentFileValidator:l_e,addSSHKeyValidator:h_e,updateSSHKeyValidator:E_e,deleteSSHKeyValidator:__e,setSSHKnownHostsValidator:g_e};function jT(e,t,r){try{let n=gW.get(SW.CONFIG_PARAMS.COMPONENTSROOT),s=_W.join(n,t);return EW.existsSync(s)?e?t:r.message(yn.PROJECT_EXISTS):e?r.message(yn.NO_PROJECT):t}catch(n){return TW.error(n),r.message(yn.VALIDATION_ERR)}}o(jT,"checkProjectExists");function Bh(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(Bh,"checkFilePath");function i_e(e,t,r,n){try{let s=gW.get(SW.CONFIG_PARAMS.COMPONENTSROOT),i=_W.join(s,e,t,r+".js");return EW.existsSync(i)?r:n.message(yn.NO_FILE)}catch(s){return TW.error(s),n.message(yn.VALIDATION_ERR)}}o(i_e,"checkFileExists");function o_e(e){let t=Ce.object({project:Ce.string().pattern(sa).custom(jT.bind(null,!0)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(sa).custom(i_e.bind(null,e.project,e.type)).custom(Bh).required().messages({"string.pattern.base":yn.BAD_FILE_NAME})});return Es.validateBySchema(e,t)}o(o_e,"getDropCustomFunctionValidator");function a_e(e){let t=Ce.object({project:Ce.string().pattern(sa).custom(jT.bind(null,!0)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(Bh).required(),function_content:Ce.string().required()});return Es.validateBySchema(e,t)}o(a_e,"setCustomFunctionValidator");function c_e(e){let t=Ce.object({project:Ce.string().pattern(sa).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),file:Ce.string().custom(Bh).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Es.validateBySchema(e,t)}o(c_e,"setComponentFileValidator");function l_e(e){let t=Ce.object({project:Ce.string().pattern(sa).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),file:Ce.string().custom(Bh).optional()});return Es.validateBySchema(e,t)}o(l_e,"dropComponentFileValidator");function u_e(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(Bh).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Es.validateBySchema(e,t)}o(u_e,"getComponentFileValidator");function d_e(e){let t=Ce.object({project:Ce.string().pattern(sa).custom(jT.bind(null,!1)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME})});return Es.validateBySchema(e,t)}o(d_e,"addComponentValidator");function f_e(e){let t=Ce.object({project:Ce.string().pattern(sa).custom(jT.bind(null,!0)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME})});return Es.validateBySchema(e,t)}o(f_e,"dropCustomFunctionProjectValidator");function m_e(e){let t=Ce.object({project:Ce.string().pattern(sa).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean(),skip_symlinks:Ce.boolean()});return Es.validateBySchema(e,t)}o(m_e,"packageComponentValidator");function p_e(e){let t=Ce.object({project:Ce.string().pattern(sa).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),package:Ce.string().optional(),restart:Ce.alternatives().try(Ce.boolean(),Ce.string().valid("rolling")).optional()});return Es.validateBySchema(e,t)}o(p_e,"deployComponentValidator");function h_e(e){let t=Ce.object({name:Ce.string().pattern(s_e).required().messages({"string.pattern.base":yn.BAD_SSH_KEY_NAME}),key:Ce.string().required(),host:Ce.string().required(),hostname:Ce.string().required(),known_hosts:Ce.string().optional()});return Es.validateBySchema(e,t)}o(h_e,"addSSHKeyValidator");function E_e(e){let t=Ce.object({name:Ce.string().required(),key:Ce.string().required()});return Es.validateBySchema(e,t)}o(E_e,"updateSSHKeyValidator");function __e(e){let t=Ce.object({name:Ce.string().required()});return Es.validateBySchema(e,t)}o(__e,"deleteSSHKeyValidator");function g_e(e){let t=Ce.object({known_hosts:Ce.string().required()});return Es.validateBySchema(e,t)}o(g_e,"setSSHKnownHostsValidator")});var Hh=D((jFe,NW)=>{"use strict";var QT=require("joi"),Ec=require("path"),ff=require("fs-extra"),{exec:S_e,spawn:T_e}=require("child_process"),y_e=require("util"),R_e=y_e.promisify(S_e),mf=(H(),M(Y)),{PACKAGE_ROOT:A_e}=It(),{handleHDBError:Fh,hdbErrors:b_e}=_e(),{HTTP_STATUS_CODES:kh}=b_e,Jl=ae(),I_e=at(),_c=j(),{once:w_e}=require("events");Jl.initSync();var iP=Jl.get(mf.CONFIG_PARAMS.COMPONENTSROOT),AW="npm install --force --omit=dev --json",N_e=`${AW} --dry-run`,C_e=Jl.get(mf.CONFIG_PARAMS.ROOTPATH),JT=Ec.join(C_e,"ssh");NW.exports={installModules:D_e,auditModules:M_e,installAllRootModules:O_e,uninstallRootModule:P_e,linkHarperdb:L_e,runCommand:pf};async function O_e(e=!1,t=Jl.get(mf.CONFIG_PARAMS.ROOTPATH)){await XT();let r=!1,n=process.env;ff.pathExistsSync(JT)&&ff.readdirSync(JT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+Ec.join(JT,"config")+" -o UserKnownHostsFile="+Ec.join(JT,"known_hosts"),...process.env},r=!0)});try{let s=Jl.get(mf.CONFIG_PARAMS.ROOTPATH),i=Ec.join(s,"node_modules","harperdb");ff.lstatSync(i).isSymbolicLink()&&ff.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&_c.error("Error removing symlink:",s)}await pf(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(O_e,"installAllRootModules");async function P_e(e){await pf(`npm uninstall ${e}`,Jl.get(mf.CONFIG_PARAMS.ROOTPATH))}o(P_e,"uninstallRootModule");async function L_e(){await XT(),await pf(`npm link ${A_e}`,Jl.get(mf.CONFIG_PARAMS.ROOTPATH))}o(L_e,"linkHarperdb");async function pf(e,t=void 0,r=process.env){_c.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=T_e(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();_c.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();_c.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await w_e(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(pf,"runCommand");async function D_e(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";_c.warn(t,e.projects);let r=wW(e);if(r)throw Fh(r,r.message,kh.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?N_e:AW;await XT(),await IW(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=Ec.join(iP,u),f,m=null;try{let{stdout:p,stderr:h}=await R_e(i,{cwd:d});f=p?p.replace(`
|
|
22
|
+
Database backup has not been removed and can be found here: ${s}`;hc.error(l),console.error(l)}(0,VO.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,zl.remove)(s))}}async function HY(e){let t=await(0,VY.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function KY(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,qY.open)(new GY.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=lS(),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 $Y.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 R=a.openDB(m,A);R.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,R,h,d)}if(i){let m=n.openDB(GT.AUDIT_STORE_NAME,Pm);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,R=null;for(;S-- >0;)try{for(let N of m.getKeys({start:R,transaction:E}))try{R=N;let{value:O,version:F}=m.getEntry(N,{transaction:E});l=p.put(N,O,h?F:void 0),g++,E.openTimer&&(E.openTimer=0),A+=(N?.length||10)+O.length,u++>5e3&&(await l,console.log("copied",g,"entries",A,"bytes"),u=0)}catch(O){console.error("Error copying record",typeof N=="symbol"?"symbol":N,"from",e,"to",t,O)}console.log("finish copying, copied",g,"entries",A,"bytes");return}catch{if(typeof R=="string"){if(R==="z")return console.error("Reached end of dbi",R,"for",e,"to",t);R=R.slice(0,-2)+"z"}else if(typeof R=="number")R++;else return console.error("Unknown key type",R,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var qY,qT,zl,VO,GY,$Y,GT,VY,KO,hc,WO=ie(()=>{Oe();qY=require("lmdb"),qT=require("path"),zl=require("fs-extra"),VO=w(ae()),GY=w($m()),$Y=w(Gm()),GT=w(Vt());H();Io();VY=w(Za()),KO=w(bt()),hc=w(j());o(wEe,"compactOnStart");o(HY,"getTotalDBRecordCount");o(KY,"copyDb")});var df=M((FFe,XY)=>{"use strict";var NEe=require("minimist"),{isMainThread:jO,parentPort:Mh,threadId:UFe}=require("worker_threads"),ht=(H(),D(Y)),io=j(),QO=oe(),VT=xT(),$T=Ft(),xFe=pt(),jY=bt(),bi=Lh(),YY=Zd(),{compactOnStart:CEe}=(WO(),D(YO)),OEe=$c(),{restartWorkers:KT,onMessageByType:PEe}=Je(),{handleHDBError:LEe,hdbErrors:DEe}=_e(),{HTTP_STATUS_CODES:MEe}=DEe,vh=ae(),{sendOperationToNode:WY,getThisNodeName:vEe,monitorNodeCAs:UEe}=(ds(),D(zo)),{getHDBNodeTable:BFe}=(vl(),D(fC));vh.initSync();var Dh=`Restarting HarperDB. This may take up to ${ht.RESTART_TIMEOUT_MS/1e3} seconds.`,xEe="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",zY="Clustering is not enabled so cannot be restarted",BEe="Invalid service",uf,Vs;XY.exports={restart:QY,restartService:JO};jO&&PEe(ht.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await JO({service:e.workerType}):QY({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function QY(e){Vs=Object.keys(e).length===0,uf=await bi.isServiceRegistered(ht.PROCESS_DESCRIPTORS.HDB);let t=NEe(process.argv);if(t.service){await JO(t);return}if(Vs&&!uf){console.error(xEe);return}if(Vs&&console.log(Dh),uf){bi.enterPM2Mode(),io.notify(Dh);let r=OEe(Object.keys(ht.CONFIG_PARAM_MAP),!0);return QO.isEmptyOrZeroLength(Object.keys(r))||jY.updateConfigValue(void 0,void 0,r,!0,!0),FEe(),Dh}return jO?(io.notify(Dh),vh.get(ht.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await CEe(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{KT()},50)):Mh.postMessage({type:ht.ITC_EVENT_TYPES.RESTART}),Dh}o(QY,"restart");async function JO(e){let{service:t}=e;if(ht.HDB_PROCESS_SERVICES[t]===void 0)throw LEe(new Error,BEe,MEe.BAD_REQUEST,void 0,void 0,!0);if(bi.expectedRestartOfChildren(),uf=await bi.isServiceRegistered(ht.PROCESS_DESCRIPTORS.HDB),!jO){e.replicated&&UEe(),Mh.postMessage({type:ht.ITC_EVENT_TYPES.RESTART,workerType:t}),Mh.ref(),await new Promise(s=>{Mh.on("message",i=>{i.type==="restart-complete"&&(s(),Mh.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===vEe())continue;let i;try{({job_id:i}=await WY(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 WY(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(!vh.get(ht.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=zY;break}Vs&&console.log("Restarting clustering"),io.notify("Restarting clustering"),await JY();break;case ht.HDB_PROCESS_SERVICES.clustering_config:case ht.HDB_PROCESS_SERVICES["clustering config"]:if(!vh.get(ht.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=zY;break}Vs&&console.log("Restarting clusteringConfig"),io.notify("Restarting clustering_config"),await bi.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(Vs&&!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}Vs&&console.log("Restarting httpWorkers"),io.notify("Restarting http_workers"),Vs?await bi.restart(ht.PROCESS_DESCRIPTORS.HDB):await KT("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(io.error(r),Vs&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(JO,"restartService");async function FEe(){await JY(),await bi.restart(ht.PROCESS_DESCRIPTORS.HDB),await QO.asyncSetTimeout(2e3),vh.get(ht.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await zO(),Vs&&(await $T.closeConnection(),process.exit(0))}o(FEe,"restartPM2Mode");async function JY(){if(!jY.getConfigFromFile(ht.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await YY.getHDBProcessInfo()).clustering.length===0)io.trace("Clustering not running, restart will start clustering services"),await VT.generateNatsConfig(!0),await bi.startClusteringProcesses(),await bi.startClusteringThreads(),await zO(),Vs&&await $T.closeConnection();else{await VT.generateNatsConfig(!0),uf?(io.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await bi.restart(ht.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await bi.restart(ht.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await YY.getHDBProcessInfo()).clustering.forEach(s=>{io.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await QO.asyncSetTimeout(3e3),await zO(),await $T.updateLocalStreams(),Vs&&await $T.closeConnection(),io.trace("Restart clustering restarting ingest and reply service threads");let t=KT(ht.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=KT(ht.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(JY,"restartClustering");async function zO(){await VT.removeNatsConfig(ht.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await VT.removeNatsConfig(ht.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(zO,"removeNatsConfig")});var lW=M((qFe,cW)=>{"use strict";var HFe=require("lodash"),Gn=(H(),D(Y)),{handleHDBError:ZY,hdbErrors:kEe}=_e(),{HDB_ERROR_MSGS:HEe,HTTP_STATUS_CODES:qEe}=kEe,XO=j();cW.exports={getRolePermissions:$Ee};var jl=Object.create(null),GEe=o(e=>({key:e,perms:{}}),"permsTemplateObj"),nW=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),sW=o((e=!1,t=!1,r=!1,n=!1)=>({[Gn.PERMS_CRUD_ENUM.READ]:e,[Gn.PERMS_CRUD_ENUM.INSERT]:t,[Gn.PERMS_CRUD_ENUM.UPDATE]:r,[Gn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),ZO=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...sW(t,r,n,s)}),"tablePermsTemplate"),eW=o((e,t=sW())=>({attribute_name:e,describe:aW(t),[Uh]:t[Uh],[eP]:t[eP],[tP]:t[tP]}),"attrPermsTemplate"),tW=o((e,t=!1)=>({attribute_name:e,describe:t,[Uh]:t}),"timestampAttrPermsTemplate"),{READ:Uh,INSERT:eP,UPDATE:tP}=Gn.PERMS_CRUD_ENUM,iW=Object.values(Gn.PERMS_CRUD_ENUM),oW=[Uh,eP,tP];function $Ee(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[Gn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(jl[t]&&jl[t].key===n)return jl[t].perms;let s=VEe(e,r);return jl[t]?jl[t].key=n:jl[t]=GEe(n),jl[t].perms=s,s}catch(r){if(!e[Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Gn.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 XO.error(n),XO.debug(r),ZY(new Error,HEe.OUTDATED_PERMS_TRANSLATION_ERROR,qEe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
23
|
+
${r.stack}`;throw XO.error(n),ZY(new Error)}}}o($Ee,"getRolePermissions");function VEe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Gn.SYSTEM_SCHEMA_NAME]=n[Gn.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]=KEe(t[i]);return}r[i]=nW(),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=YEe(c,l);r[i].describe||iW.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=ZO()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=ZO()})}),r}o(VEe,"translateRolePermissions");function KEe(e){let t=nW(!0);return Object.keys(e).forEach(r=>{t.tables[r]=ZO(!0,!0,!0,!0,!0)}),t}o(KEe,"createStructureUserPermissions");function YEe(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 Gn.TIME_STAMP_NAMES.includes(f)&&(m=tW(f,d[Uh])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=eW(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=aW(d),s.attribute_permissions.push(d),c||WEe(d,l)}else if(u!==a){let d;Gn.TIME_STAMP_NAMES.includes(u)?d=tW(u):d=eW(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=rW(s),s}else return e.describe=rW(e),e}o(YEe,"getTableAttrPerms");function rW(e){return iW.filter(t=>e[t]).length>0}o(rW,"getSchemaTableDescribePerm");function aW(e){return oW.filter(t=>e[t]).length>0}o(aW,"getAttributeDescribePerm");function WEe(e,t){oW.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(WEe,"checkForHashPerms")});var xh={};Ie(xh,{authentication:()=>gW,bypassAuth:()=>i_e,login:()=>nP,logout:()=>sP,start:()=>o_e});function i_e(){_W=!0}async function gW(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let p=e.isOperationsServer?t_e?e_e:[]:ZEe?XEe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=Tn.get(B.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Us([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return WT&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}a.push("Access-Control-Allow-Origin",i),WT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(WT){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 uW.get(l);break}e.session=u||(u={})}let d=o((p,h,E)=>{let g=new jEe(p,h,Ia.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===ii.SUCCESS?YT.info?.(g):YT.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&YT.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await Yd(e.peerCertificate,e.mtlsConfig);if(!p.valid)return YT.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Co({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,ii.SUCCESS,"mTLS")):JEe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=Ql.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),R=S.indexOf(":");g=S.slice(0,R),A=S.slice(R+1),f=g||A?await Ue.getUser(g,A,e):null;break;case"Bearer":try{f=await qN(E)}catch(N){if(N.message==="invalid token")try{return await IS(E),c({status:-1})}catch{throw N}}break}}catch(S){return n_e&&(Ql.get(E)||(Ql.set(E,E),d(g,ii.FAILURE,h))),c({status:401,body:Co({error:S.message},e)})}Ql.set(n,f),r_e&&d(f.username,ii.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):(_W&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,fW.getSuperUser)());WT&&(e.session.update=function(p){let h=Tn.get(B.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,mW.v4)();let g=Tn.get(B.AUTHENTICATION_COOKIE_DOMAINS),A=h?new Date(Date.now()+(0,rP.convertToMS)(h)).toUTCString():s_e,S=r.host&&g?.find(O=>{O.startsWith(".")&&(O=O.slice(1));let F=r.host.indexOf(":");return(F!==-1?r.host.slice(0,F):r.host).endsWith(O)}),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${A}; HttpOnly`;S&&(N+=`; Domain=${S}`),E&&(N+="; SameSite=None; Secure"),a?a.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}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,uW.put(p,{expiresAt:h?Date.now()+(0,rP.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")&&Ls.loginPath?(m.status=302,m.headers.set("Location",Ls.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 Us);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function o_e({server:e,port:t,securePort:r}){e.http(gW,t||r?{port:t,securePort:r}:{port:"all"}),dW||(dW=!0,setInterval(()=>{Ql=new Map},Tn.get(B.AUTHENTICATION_CACHETTL)).unref(),QEe.addListener(()=>{Ql=new Map}))}async function nP(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 sP(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var fW,mW,Tn,pW,hW,rP,zEe,jEe,QEe,EW,JEe,YT,XEe,ZEe,e_e,t_e,uW,WT,_W,r_e,n_e,s_e,Ql,dW,zT=ie(()=>{fW=w(cs());xr();xa();Pd();Oe();mW=require("uuid"),Tn=w(ae());H();pW=w(j()),hW=w(yp());bp();rP=w(oe());iT();Po();({forComponent:zEe,AuthAuditLog:jEe}=pW.default),{user:QEe}=hW.default,EW=zEe("authentication"),{debug:JEe}=EW,YT=EW.withTag("auth-event");Tn.initSync();XEe=Tn.get(B.HTTP_CORSACCESSLIST),ZEe=Tn.get(B.HTTP_CORS),e_e=Tn.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),t_e=Tn.get(B.OPERATIONSAPI_NETWORK_CORS),uW=Ze({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),WT=Tn.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,_W=process.env.AUTHENTICATION_AUTHORIZELOCAL??Tn.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,r_e=Tn.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,n_e=Tn.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,s_e="Tue, 01 Oct 8307 19:33:20 GMT",Ql=new Map;Ue.onInvalidatedUser(()=>{Ql=new Map});o(i_e,"bypassAuth");o(gW,"authentication");o(o_e,"start");o(nP,"login");o(sP,"logout")});var IW=M((XFe,bW)=>{"use strict";var Ce=require("joi"),SW=require("fs-extra"),TW=require("path"),Es=at(),yW=ae(),RW=(H(),D(Y)),AW=j(),{hdbErrors:a_e}=_e(),{HDB_ERROR_MSGS:yn}=a_e,sa=/^[a-zA-Z0-9-_]+$/,c_e=/^[a-zA-Z0-9-_]+$/;bW.exports={getDropCustomFunctionValidator:u_e,setCustomFunctionValidator:d_e,addComponentValidator:h_e,dropCustomFunctionProjectValidator:E_e,packageComponentValidator:__e,deployComponentValidator:g_e,setComponentFileValidator:f_e,getComponentFileValidator:p_e,dropComponentFileValidator:m_e,addSSHKeyValidator:S_e,updateSSHKeyValidator:T_e,deleteSSHKeyValidator:y_e,setSSHKnownHostsValidator:R_e};function jT(e,t,r){try{let n=yW.get(RW.CONFIG_PARAMS.COMPONENTSROOT),s=TW.join(n,t);return SW.existsSync(s)?e?t:r.message(yn.PROJECT_EXISTS):e?r.message(yn.NO_PROJECT):t}catch(n){return AW.error(n),r.message(yn.VALIDATION_ERR)}}o(jT,"checkProjectExists");function Bh(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(Bh,"checkFilePath");function l_e(e,t,r,n){try{let s=yW.get(RW.CONFIG_PARAMS.COMPONENTSROOT),i=TW.join(s,e,t,r+".js");return SW.existsSync(i)?r:n.message(yn.NO_FILE)}catch(s){return AW.error(s),n.message(yn.VALIDATION_ERR)}}o(l_e,"checkFileExists");function u_e(e){let t=Ce.object({project:Ce.string().pattern(sa).custom(jT.bind(null,!0)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(sa).custom(l_e.bind(null,e.project,e.type)).custom(Bh).required().messages({"string.pattern.base":yn.BAD_FILE_NAME})});return Es.validateBySchema(e,t)}o(u_e,"getDropCustomFunctionValidator");function d_e(e){let t=Ce.object({project:Ce.string().pattern(sa).custom(jT.bind(null,!0)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(Bh).required(),function_content:Ce.string().required()});return Es.validateBySchema(e,t)}o(d_e,"setCustomFunctionValidator");function f_e(e){let t=Ce.object({project:Ce.string().pattern(sa).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),file:Ce.string().custom(Bh).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Es.validateBySchema(e,t)}o(f_e,"setComponentFileValidator");function m_e(e){let t=Ce.object({project:Ce.string().pattern(sa).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),file:Ce.string().custom(Bh).optional()});return Es.validateBySchema(e,t)}o(m_e,"dropComponentFileValidator");function p_e(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(Bh).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Es.validateBySchema(e,t)}o(p_e,"getComponentFileValidator");function h_e(e){let t=Ce.object({project:Ce.string().pattern(sa).custom(jT.bind(null,!1)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME})});return Es.validateBySchema(e,t)}o(h_e,"addComponentValidator");function E_e(e){let t=Ce.object({project:Ce.string().pattern(sa).custom(jT.bind(null,!0)).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME})});return Es.validateBySchema(e,t)}o(E_e,"dropCustomFunctionProjectValidator");function __e(e){let t=Ce.object({project:Ce.string().pattern(sa).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean(),skip_symlinks:Ce.boolean()});return Es.validateBySchema(e,t)}o(__e,"packageComponentValidator");function g_e(e){let t=Ce.object({project:Ce.string().pattern(sa).required().messages({"string.pattern.base":yn.BAD_PROJECT_NAME}),package:Ce.string().optional(),restart:Ce.alternatives().try(Ce.boolean(),Ce.string().valid("rolling")).optional()});return Es.validateBySchema(e,t)}o(g_e,"deployComponentValidator");function S_e(e){let t=Ce.object({name:Ce.string().pattern(c_e).required().messages({"string.pattern.base":yn.BAD_SSH_KEY_NAME}),key:Ce.string().required(),host:Ce.string().required(),hostname:Ce.string().required(),known_hosts:Ce.string().optional()});return Es.validateBySchema(e,t)}o(S_e,"addSSHKeyValidator");function T_e(e){let t=Ce.object({name:Ce.string().required(),key:Ce.string().required()});return Es.validateBySchema(e,t)}o(T_e,"updateSSHKeyValidator");function y_e(e){let t=Ce.object({name:Ce.string().required()});return Es.validateBySchema(e,t)}o(y_e,"deleteSSHKeyValidator");function R_e(e){let t=Ce.object({known_hosts:Ce.string().required()});return Es.validateBySchema(e,t)}o(R_e,"setSSHKnownHostsValidator")});var Hh=M((eke,PW)=>{"use strict";var QT=require("joi"),Ec=require("path"),ff=require("fs-extra"),{exec:A_e,spawn:b_e}=require("child_process"),I_e=require("util"),w_e=I_e.promisify(A_e),mf=(H(),D(Y)),{PACKAGE_ROOT:N_e}=yt(),{handleHDBError:Fh,hdbErrors:C_e}=_e(),{HTTP_STATUS_CODES:kh}=C_e,Jl=ae(),O_e=at(),_c=j(),{once:P_e}=require("events");Jl.initSync();var iP=Jl.get(mf.CONFIG_PARAMS.COMPONENTSROOT),wW="npm install --force --omit=dev --json",L_e=`${wW} --dry-run`,D_e=Jl.get(mf.CONFIG_PARAMS.ROOTPATH),JT=Ec.join(D_e,"ssh");PW.exports={installModules:x_e,auditModules:B_e,installAllRootModules:M_e,uninstallRootModule:v_e,linkHarperdb:U_e,runCommand:pf};async function M_e(e=!1,t=Jl.get(mf.CONFIG_PARAMS.ROOTPATH)){await XT();let r=!1,n=process.env;ff.pathExistsSync(JT)&&ff.readdirSync(JT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+Ec.join(JT,"config")+" -o UserKnownHostsFile="+Ec.join(JT,"known_hosts"),...process.env},r=!0)});try{let s=Jl.get(mf.CONFIG_PARAMS.ROOTPATH),i=Ec.join(s,"node_modules","harperdb");ff.lstatSync(i).isSymbolicLink()&&ff.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&_c.error("Error removing symlink:",s)}await pf(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(M_e,"installAllRootModules");async function v_e(e){await pf(`npm uninstall ${e}`,Jl.get(mf.CONFIG_PARAMS.ROOTPATH))}o(v_e,"uninstallRootModule");async function U_e(){await XT(),await pf(`npm link ${N_e}`,Jl.get(mf.CONFIG_PARAMS.ROOTPATH))}o(U_e,"linkHarperdb");async function pf(e,t=void 0,r=process.env){_c.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=b_e(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();_c.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();_c.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await P_e(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(pf,"runCommand");async function x_e(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";_c.warn(t,e.projects);let r=OW(e);if(r)throw Fh(r,r.message,kh.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?L_e:wW;await XT(),await CW(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=Ec.join(iP,u),f,m=null;try{let{stdout:p,stderr:h}=await w_e(i,{cwd:d});f=p?p.replace(`
|
|
24
24
|
`,""):null,m=h?h.replace(`
|
|
25
|
-
`,""):null}catch(p){p.stderr?a[u].npm_error=
|
|
26
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(bW,"parseNPMStdErr");async function M_e(e){_c.info(`starting auditModules for request: ${e}`);let t=wW(e);if(t)throw Fh(t,t.message,kh.BAD_REQUEST);let{projects:r}=e;await XT(),await IW(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=Ec.join(iP,a);n[a]={npm_output:null,npm_error:null};try{let l=await pf("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=bW(l.stderr)}}return _c.info(`finished auditModules with response ${n}`),n}o(M_e,"auditModules");async function XT(){return await pf("npm -v"),!0}o(XT,"checkNPMInstalled");async function IW(e){if(!Array.isArray(e)||e.length===0)throw Fh(new Error,"projects argument must be an array with at least 1 element",kh.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=Ec.join(iP,i.toString());if(!await ff.pathExists(a)){t.push(i);continue}let l=Ec.join(a,"package.json");await ff.pathExists(l)||r.push(i)}if(t.length>0)throw Fh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,kh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Fh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,kh.BAD_REQUEST,void 0,void 0,!0)}o(IW,"checkProjectPaths");function wW(e){let t=QT.object({projects:QT.array().min(1).items(QT.string()).required(),dry_run:QT.boolean().default(!1)});return I_e.validateBySchema(e,t)}o(wW,"modulesValidator")});var aP=D((JFe,MW)=>{"use strict";var Ks=require("fs-extra"),Gh=require("path"),qh=j(),CW=oe(),{PACKAGE_ROOT:v_e}=It(),oP=(H(),M(Y)),DW=ae(),U_e=At();MW.exports=x_e;async function x_e(){let e=B_e(),t=DW.get(oP.CONFIG_PARAMS.ROOTPATH),r=Gh.join(t,"package.json"),n={dependencies:{harperdb:"file:"+v_e}},s=Gh.join(t,"node_modules");Ks.ensureDirSync(s);let i,a=!0,c=!1;try{i=Ks.readJsonSync(r)}catch(l){if(CW.isEmptyOrZeroLength(e))return;if(l.code!==oP.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!CW.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=PW(u);n.dependencies[l]=d+u}if(!a){qh.notify("Installing components"),await LW(r,n,null),await OW(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=PW(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(Ks.statSync(new URL(u+"/package.json")).mtimeMs>Ks.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 LW(r,n,i),await OW(t,e))}o(x_e,"installComponents");function OW(e,t){return Promise.all(t.map(({name:r})=>{let n=Gh.join(e,"node_modules",r),s=Gh.join(e,"components",r);if(Ks.existsSync(n)&&Ks.lstatSync(n).isDirectory())return Ks.move(n,s,{overwrite:!0}).then(()=>{Ks.symlink(s,n)})}))}o(OW,"moveModuleToComponents");function B_e(){let e=U_e.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(B_e,"getComponentsConfig");function PW(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Gh.extname(e)||Ks.existsSync(e)?"file:":"github:"}o(PW,"getPkgPrefix");async function LW(e,t,r){qh.trace("npm installing components package.json",t),Ks.writeFileSync(e,JSON.stringify(t,null," "));try{await Hh().installAllRootModules(DW.get(oP.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Ks.writeFileSync(e,JSON.stringify(r,null," ")):Ks.unlinkSync(e),n}}o(LW,"installPackages")});var BW={};Ie(BW,{packageDirectory:()=>F_e});function F_e(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,vW.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,xW.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var vW,UW,xW,FW=ie(()=>{vW=require("path"),UW=w(require("tar-fs")),xW=require("node:zlib");o(F_e,"packageDirectory")});var uP=D(ar=>{"use strict";var we=require("fs-extra"),cP=require("fast-glob"),Pe=require("path"),k_e=require("tar-fs"),H_e=require("gunzip-maybe"),lP=require("normalize-path"),$n=RW(),kt=j(),Et=(H(),M(Y)),or=ae(),ZT=At(),q_e=oe(),{PACKAGE_ROOT:G_e}=It(),{handleHDBError:Qt,hdbErrors:$_e}=_e(),{basename:eke}=require("path"),V_e=aP(),HW=ae(),{Readable:K_e}=require("stream"),{isMainThread:Y_e}=require("worker_threads"),{HDB_ERROR_MSGS:Xl,HTTP_STATUS_CODES:Jt}=$_e,qW=Je(),{replicateOperation:Ii}=(ds(),M(zo)),{packageDirectory:W_e}=(FW(),M(BW)),kW=Hh(),z_e=Pe.join(G_e,"application-template"),j_e=or.get(Et.CONFIG_PARAMS.ROOTPATH),gc=Pe.join(j_e,"ssh"),ia=Pe.join(gc,"known_hosts"),{Resources:Q_e}=(xa(),M(qb));function J_e(){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,Xl.FUNCTION_STATUS,Jt.INTERNAL_SERVER_ERROR,kt.ERR,t)}return e}o(J_e,"customFunctionsStatus");function X_e(){kt.trace("getting custom api endpoints");let e={},t=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT);try{cP.sync(lP(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:cP.sync(lP(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:cP.sync(lP(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Qt(new Error,Xl.GET_FUNCTIONS,Jt.INTERNAL_SERVER_ERROR,kt.ERR,r)}return e}o(X_e,"getCustomFunctions");function Z_e(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.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=Pe.join(r,n,s,i+".js");try{return we.readFileSync(a,{encoding:"utf8"})}catch(c){throw Qt(new Error,Xl.GET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,c)}}o(Z_e,"getCustomFunction");async function ege(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.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{we.outputFileSync(Pe.join(r,n,s,i+".js"),a);let c=await Ii(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Qt(new Error,Xl.SET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,c)}}o(ege,"setCustomFunction");async function tge(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.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{we.unlinkSync(Pe.join(r,n,s,i+".js"));let a=await Ii(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Qt(new Error,Xl.DROP_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,a)}}o(tge,"dropCustomFunction");async function rge(e){e.project&&(e.project=Pe.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=Pe.join(r,n);we.mkdirSync(s,{recursive:!0}),we.copySync(z_e,s);let i=await Ii(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Qt(new Error,Xl.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,s)}}o(rge,"addComponent");async function nge(e){e.project&&(e.project=Pe.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(!q_e.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 ZT.updateConfigValue(Et.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Pe.join(r,n);we.rmSync(i,{recursive:!0});let a=await Ii(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Qt(new Error,Xl.DROP_FUNCTION_PROJECT,Jt.INTERNAL_SERVER_ERROR,kt.ERR,i)}}o(nge,"dropCustomFunctionProject");async function sge(e){e.project&&(e.project=Pe.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 we.realpath(Pe.join(r,n))}catch(a){if(a.code!==Et.NODE_ERROR_CODES.ENOENT)throw a;try{s=await we.realpath(Pe.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 W_e(s,e)).toString("base64");return{project:n,payload:i}}o(sge,"packageComponent");async function ige(e){e.project?e.project=Pe.parse(e.project).name:e.package&&(e.project=oge(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=Pe.join(r,n),i="file:"+c,await we.emptyDir(c);let p=K_e.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((g,A)=>{p.pipe(H_e()).pipe(k_e.extract(c,{finish:g})).on("error",A)});let h=await we.readdir(c);h.length===1&&h[0]==="package"&&(await we.copy(Pe.join(c,"package"),c),await we.remove(Pe.join(c,"package")));let E=Pe.join(c,"node_modules");a?await kW.runCommand(a,c):we.existsSync(E)||await kW.installAllRootModules(!1,c)}else{await ZT.addConfig(n,{package:i}),await V_e();let p=HW.get(Et.CONFIG_PARAMS.ROOTPATH);c=Pe.join(p,"node_modules",n)}if(Y_e)return;let l=new Q_e;l.isWorker=!0;let u=($h(),M(ey)),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 Ii(e);if(e.restart===!0)qW.restartWorkers("http"),m.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(f){let h=await(fP(),M(dP)).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(ige,"deployComponent");function oge(e){if(e.startsWith("git+ssh://"))return Pe.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Pe.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(we.readFileSync(Pe.join(e,"package.json"),"utf8"));return Pe.basename(t)}catch{}return Pe.basename(e)}o(oge,"getProjectNameFromPackage");async function age(){let e=o(async(s,i)=>{try{let a=await we.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Pe.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await we.stat(u),f={name:Pe.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return kt.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{name:or.get(Et.CONFIG_PARAMS.COMPONENTSROOT).split(Pe.sep).slice(-1).pop(),entries:[]}),{internal:r}=(Sp(),M(eN)),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(age,"getComponents");async function cge(e){let t=$n.getComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let n=ZT.getConfigObj()[e.project]||e.project==="harperdb"?Pe.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 we.stat(Pe.join(n,e.project,e.file));return{message:await we.readFile(Pe.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 '${Pe.join(e.project,e.file)}'`):i}}o(cge,"getComponentFile");async function lge(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=Pe.join(or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await we.ensureFile(n),await we.outputFile(n,e.payload,r)):await we.ensureDir(n);let s=await Ii(e);return s.message="Successfully set component: "+e.file,s}o(lge,"setComponentFile");async function uge(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?Pe.join(r,n):r,i=Pe.join(or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),s),a=Pe.join(or.get(Et.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await we.pathExists(a)&&await we.unlink(a),await we.pathExists(i)&&await we.remove(i);let c=Pe.join(or.get(Et.CONFIG_PARAMS.ROOTPATH),"package.json");if(await we.pathExists(c)){let u=JSON.parse(await we.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await we.writeFile(c,JSON.stringify(u,null,2),"utf8")}ZT.deleteConfigFromFile([r]);let l=await Ii(e);return e.restart===!0?(qW.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(uge,"dropComponent");async function dge(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=Pe.join(gc,r+".key"),l=Pe.join(gc,"config");if(await we.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await we.outputFile(c,n),await we.chmod(c,"0600");let u=`#${r}
|
|
25
|
+
`,""):null}catch(p){p.stderr?a[u].npm_error=NW(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 _c.info(`finished installModules with response ${a}`),a.warning=t,a}o(x_e,"installModules");function NW(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(NW,"parseNPMStdErr");async function B_e(e){_c.info(`starting auditModules for request: ${e}`);let t=OW(e);if(t)throw Fh(t,t.message,kh.BAD_REQUEST);let{projects:r}=e;await XT(),await CW(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=Ec.join(iP,a);n[a]={npm_output:null,npm_error:null};try{let l=await pf("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=NW(l.stderr)}}return _c.info(`finished auditModules with response ${n}`),n}o(B_e,"auditModules");async function XT(){return await pf("npm -v"),!0}o(XT,"checkNPMInstalled");async function CW(e){if(!Array.isArray(e)||e.length===0)throw Fh(new Error,"projects argument must be an array with at least 1 element",kh.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=Ec.join(iP,i.toString());if(!await ff.pathExists(a)){t.push(i);continue}let l=Ec.join(a,"package.json");await ff.pathExists(l)||r.push(i)}if(t.length>0)throw Fh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,kh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Fh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,kh.BAD_REQUEST,void 0,void 0,!0)}o(CW,"checkProjectPaths");function OW(e){let t=QT.object({projects:QT.array().min(1).items(QT.string()).required(),dry_run:QT.boolean().default(!1)});return O_e.validateBySchema(e,t)}o(OW,"modulesValidator")});var aP=M((rke,xW)=>{"use strict";var Ks=require("fs-extra"),Gh=require("path"),qh=j(),LW=oe(),{PACKAGE_ROOT:F_e}=yt(),oP=(H(),D(Y)),UW=ae(),k_e=bt();xW.exports=H_e;async function H_e(){let e=q_e(),t=UW.get(oP.CONFIG_PARAMS.ROOTPATH),r=Gh.join(t,"package.json"),n={dependencies:{harperdb:"file:"+F_e}},s=Gh.join(t,"node_modules");Ks.ensureDirSync(s);let i,a=!0,c=!1;try{i=Ks.readJsonSync(r)}catch(l){if(LW.isEmptyOrZeroLength(e))return;if(l.code!==oP.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!LW.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=MW(u);n.dependencies[l]=d+u}if(!a){qh.notify("Installing components"),await vW(r,n,null),await DW(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=MW(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(Ks.statSync(new URL(u+"/package.json")).mtimeMs>Ks.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 vW(r,n,i),await DW(t,e))}o(H_e,"installComponents");function DW(e,t){return Promise.all(t.map(({name:r})=>{let n=Gh.join(e,"node_modules",r),s=Gh.join(e,"components",r);if(Ks.existsSync(n)&&Ks.lstatSync(n).isDirectory())return Ks.move(n,s,{overwrite:!0}).then(()=>{Ks.symlink(s,n)})}))}o(DW,"moveModuleToComponents");function q_e(){let e=k_e.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(q_e,"getComponentsConfig");function MW(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Gh.extname(e)||Ks.existsSync(e)?"file:":"github:"}o(MW,"getPkgPrefix");async function vW(e,t,r){qh.trace("npm installing components package.json",t),Ks.writeFileSync(e,JSON.stringify(t,null," "));try{await Hh().installAllRootModules(UW.get(oP.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Ks.writeFileSync(e,JSON.stringify(r,null," ")):Ks.unlinkSync(e),n}}o(vW,"installPackages")});var HW={};Ie(HW,{packageDirectory:()=>G_e});function G_e(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];FW.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,BW.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,kW.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var BW,FW,kW,qW=ie(()=>{BW=require("path"),FW=w(require("tar-fs")),kW=require("node:zlib");o(G_e,"packageDirectory")});var uP=M(ar=>{"use strict";var we=require("fs-extra"),cP=require("fast-glob"),Pe=require("path"),$_e=require("tar-fs"),V_e=require("gunzip-maybe"),lP=require("normalize-path"),$n=IW(),kt=j(),Et=(H(),D(Y)),or=ae(),ZT=bt(),K_e=oe(),{PACKAGE_ROOT:Y_e}=yt(),{handleHDBError:Qt,hdbErrors:W_e}=_e(),{basename:ike}=require("path"),z_e=aP(),$W=ae(),{Readable:j_e}=require("stream"),{isMainThread:Q_e}=require("worker_threads"),{HDB_ERROR_MSGS:Xl,HTTP_STATUS_CODES:Jt}=W_e,VW=Je(),{replicateOperation:Ii}=(ds(),D(zo)),{packageDirectory:J_e}=(qW(),D(HW)),GW=Hh(),X_e=Pe.join(Y_e,"application-template"),Z_e=or.get(Et.CONFIG_PARAMS.ROOTPATH),gc=Pe.join(Z_e,"ssh"),ia=Pe.join(gc,"known_hosts"),{Resources:ege}=(xa(),D(qb));function tge(){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,Xl.FUNCTION_STATUS,Jt.INTERNAL_SERVER_ERROR,kt.ERR,t)}return e}o(tge,"customFunctionsStatus");function rge(){kt.trace("getting custom api endpoints");let e={},t=or.get(Et.CONFIG_PARAMS.COMPONENTSROOT);try{cP.sync(lP(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:cP.sync(lP(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:cP.sync(lP(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Qt(new Error,Xl.GET_FUNCTIONS,Jt.INTERNAL_SERVER_ERROR,kt.ERR,r)}return e}o(rge,"getCustomFunctions");function nge(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.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=Pe.join(r,n,s,i+".js");try{return we.readFileSync(a,{encoding:"utf8"})}catch(c){throw Qt(new Error,Xl.GET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,c)}}o(nge,"getCustomFunction");async function sge(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.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{we.outputFileSync(Pe.join(r,n,s,i+".js"),a);let c=await Ii(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Qt(new Error,Xl.SET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,c)}}o(sge,"setCustomFunction");async function ige(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.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{we.unlinkSync(Pe.join(r,n,s,i+".js"));let a=await Ii(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Qt(new Error,Xl.DROP_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,a)}}o(ige,"dropCustomFunction");async function oge(e){e.project&&(e.project=Pe.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=Pe.join(r,n);we.mkdirSync(s,{recursive:!0}),we.copySync(X_e,s);let i=await Ii(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Qt(new Error,Xl.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,kt.ERR,s)}}o(oge,"addComponent");async function age(e){e.project&&(e.project=Pe.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(!K_e.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 ZT.updateConfigValue(Et.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Pe.join(r,n);we.rmSync(i,{recursive:!0});let a=await Ii(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Qt(new Error,Xl.DROP_FUNCTION_PROJECT,Jt.INTERNAL_SERVER_ERROR,kt.ERR,i)}}o(age,"dropCustomFunctionProject");async function cge(e){e.project&&(e.project=Pe.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 we.realpath(Pe.join(r,n))}catch(a){if(a.code!==Et.NODE_ERROR_CODES.ENOENT)throw a;try{s=await we.realpath(Pe.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 J_e(s,e)).toString("base64");return{project:n,payload:i}}o(cge,"packageComponent");async function lge(e){e.project?e.project=Pe.parse(e.project).name:e.package&&(e.project=uge(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=Pe.join(r,n),i="file:"+c,await we.emptyDir(c);let p=j_e.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((g,A)=>{p.pipe(V_e()).pipe($_e.extract(c,{finish:g})).on("error",A)});let h=await we.readdir(c);h.length===1&&h[0]==="package"&&(await we.copy(Pe.join(c,"package"),c),await we.remove(Pe.join(c,"package")));let E=Pe.join(c,"node_modules");a?await GW.runCommand(a,c):we.existsSync(E)||await GW.installAllRootModules(!1,c)}else{await ZT.addConfig(n,{package:i}),await z_e();let p=$W.get(Et.CONFIG_PARAMS.ROOTPATH);c=Pe.join(p,"node_modules",n)}if(Q_e)return;let l=new ege;l.isWorker=!0;let u=($h(),D(ey)),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 Ii(e);if(e.restart===!0)VW.restartWorkers("http"),m.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(f){let h=await(fP(),D(dP)).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(lge,"deployComponent");function uge(e){if(e.startsWith("git+ssh://"))return Pe.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Pe.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(we.readFileSync(Pe.join(e,"package.json"),"utf8"));return Pe.basename(t)}catch{}return Pe.basename(e)}o(uge,"getProjectNameFromPackage");async function dge(){let e=o(async(s,i)=>{try{let a=await we.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Pe.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await we.stat(u),f={name:Pe.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return kt.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),{name:or.get(Et.CONFIG_PARAMS.COMPONENTSROOT).split(Pe.sep).slice(-1).pop(),entries:[]}),{internal:r}=(Sp(),D(eN)),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(dge,"getComponents");async function fge(e){let t=$n.getComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let n=ZT.getConfigObj()[e.project]||e.project==="harperdb"?Pe.join($W.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 we.stat(Pe.join(n,e.project,e.file));return{message:await we.readFile(Pe.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 '${Pe.join(e.project,e.file)}'`):i}}o(fge,"getComponentFile");async function mge(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=Pe.join(or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await we.ensureFile(n),await we.outputFile(n,e.payload,r)):await we.ensureDir(n);let s=await Ii(e);return s.message="Successfully set component: "+e.file,s}o(mge,"setComponentFile");async function pge(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?Pe.join(r,n):r,i=Pe.join(or.get(Et.CONFIG_PARAMS.COMPONENTSROOT),s),a=Pe.join(or.get(Et.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await we.pathExists(a)&&await we.unlink(a),await we.pathExists(i)&&await we.remove(i);let c=Pe.join(or.get(Et.CONFIG_PARAMS.ROOTPATH),"package.json");if(await we.pathExists(c)){let u=JSON.parse(await we.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await we.writeFile(c,JSON.stringify(u,null,2),"utf8")}ZT.deleteConfigFromFile([r]);let l=await Ii(e);return e.restart===!0?(VW.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(pge,"dropComponent");async function hge(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=Pe.join(gc,r+".key"),l=Pe.join(gc,"config");if(await we.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await we.outputFile(c,n),await we.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 we.pathExists(l)?await we.appendFile(l,`
|
|
32
32
|
`+u):await we.outputFile(l,u);let d="";if(await we.pathExists(ia)||(await we.writeFile(ia,""),await we.chmod(ia,"0600")),i=="github.com"&&!(await we.readFile(ia,"utf8")).includes("github.com"))try{let E=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of E)we.appendFile(ia,"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 we.appendFile(ia,a);let f=await Ii(e);return f.message=`Added ssh key: ${r}${d}`,f}o(dge,"addSSHKey");async function fge(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=Pe.join(gc,r+".key");if(!await we.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await we.outputFile(s,n);let i=await Ii(e);return i.message=`Updated ssh key: ${r}`,i}o(fge,"updateSSHKey");async function mge(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=Pe.join(gc,r+".key"),s=Pe.join(gc,"config");if(!await we.pathExists(n))throw new Error("Key does not exist");let i=await we.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await we.outputFile(s,i),we.removeSync(n);let c=await Ii(e);return c.message=`Deleted ssh key: ${r}`,c}o(mge,"deleteSSHKey");async function pge(e){let t=[];return await we.pathExists(gc)&&(await we.readdir(gc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(pge,"listSSHKeys");async function hge(e){let t=$n.setSSHKnownHostsValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{known_hosts:r}=e;await we.outputFile(ia,r);let n=await Ii(e);return n.message="Known hosts successfully set",n}o(hge,"setSSHKnownHosts");async function Ege(e){return await we.pathExists(ia)?{known_hosts:await we.readFile(ia,"utf8")}:{known_hosts:null}}o(Ege,"getSSHKnownHosts");ar.customFunctionsStatus=J_e;ar.getCustomFunctions=X_e;ar.getCustomFunction=Z_e;ar.setCustomFunction=ege;ar.dropCustomFunction=tge;ar.addComponent=rge;ar.dropCustomFunctionProject=nge;ar.packageComponent=sge;ar.deployComponent=ige;ar.getComponents=age;ar.getComponentFile=cge;ar.setComponentFile=lge;ar.dropComponent=uge;ar.addSSHKey=dge;ar.updateSSHKey=fge;ar.deleteSSHKey=mge;ar.listSSHKeys=pge;ar.setSSHKnownHosts=hge;ar.getSSHKnownHosts=Ege});var mP=D((nke,$W)=>{"use strict";var Ys=require("joi"),GW=at();$W.exports={readTransactionLogValidator:_ge,deleteTransactionLogsBeforeValidator:gge};function _ge(e){let t=Ys.object({schema:Ys.string(),database:Ys.string(),table:Ys.string().required(),from:Ys.date().timestamp(),to:Ys.date().timestamp(),limit:Ys.number().min(1)});return GW.validateBySchema(e,t)}o(_ge,"readTransactionLogValidator");function gge(e){let t=Ys.object({schema:Ys.string(),database:Ys.string(),table:Ys.string().required(),timestamp:Ys.date().timestamp().required()});return GW.validateBySchema(e,t)}o(gge,"deleteTransactionLogsBeforeValidator")});var ny=D((ike,jW)=>{"use strict";var pP=(H(),M(Y)),Vh=Ft(),VW=oe(),KW=ae(),YW=zi(),WW=j(),{handleHDBError:ty,hdbErrors:Sge}=_e(),{HTTP_STATUS_CODES:ry}=Sge,{readTransactionLogValidator:Tge,deleteTransactionLogsBeforeValidator:yge}=mP(),zW=ss(),Rge="Logs successfully deleted from transaction log.",Age="All logs successfully deleted from transaction log.";jW.exports={readTransactionLog:bge,deleteTransactionLogsBefore:wge};async function bge(e){let t=Tge(e);if(t)throw ty(t,t.message,ry.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=VW.checkSchemaTableExist(e.database,e.table);if(r)throw ty(new Error,r,ry.NOT_FOUND,void 0,void 0,!0);return KW.get(pP.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Ige(e):(WW.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)),zW.readAuditLog(e))}o(bge,"readTransactionLog");async function*Ige(e){let t=YW.createNatsTableStreamName(e.database,e.table),r=await Vh.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===pP.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(Ige,"readTransactionLogNats");async function wge(e){let t=yge(e);if(t)throw ty(t,t.message,ry.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!KW.get(pP.CONFIG_PARAMS.CLUSTERING_ENABLED))return WW.info("Delete transaction logs called for Plexus"),zW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=VW.checkSchemaTableExist(r,n);if(i)throw ty(new Error,i,ry.NOT_FOUND,void 0,void 0,!0);let a=YW.createNatsTableStreamName(r,n),{jsm:c}=await Vh.getNATSReferences(),l=await Vh.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=Rge,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=Age):f=(await Vh.viewStream(a,parseInt(s),1))[0].nats_sequence,await Vh.purgeTableStream(r,n,{seq:f}),d}o(wge,"deleteTransactionLogsBefore")});var gP={};Ie(gP,{describeMetric:()=>tz,describeMetricOp:()=>_P,get:()=>ZW,getOp:()=>hP,listMetrics:()=>ez,listMetricsOp:()=>EP});async function Cge(e){return(await V_().get(e)).hostname}function QW(e,t){return e.length===0||e.includes(t)}function hP(e){return Kh.trace?.("get_analytics request:",e),ZW(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function XW(e){return"conditions"in e?{...e,conditions:e.conditions.map(XW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function ZW(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(XW));let a=t??[];QW(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),Kh.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],QW(a,"node")&&(Kh.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await Cge(d)),Kh.trace?.("get_analytics result:",JSON.stringify(u)),u})}function EP(e){return ez(e.metric_types)}async function ez(e=["builtin"]){let t=[],r=Object.values(vo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,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 _P(e){return tz(e.metric)}async function tz(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 Kh.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var JW,Nge,Kh,SP=ie(()=>{JW=w(j());gb();Sb();({forComponent:Nge}=JW.default),Kh=Nge("analytics").conditional;o(Cge,"lookupHostname");o(QW,"isSelected");o(hP,"getOp");o(XW,"conformCondition");o(ZW,"get");o(EP,"listMetricsOp");o(ez,"listMetrics");o(_P,"describeMetricOp");o(tz,"describeMetric")});var sy,iy,Yh,oy=ie(()=>{sy={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},iy=Object.keys(sy),Yh="primary"});function nz(e){return rz.validateBySchema(e,Dge)}var Wh,rz,Oge,Pge,Lge,Dge,sz=ie(()=>{Wh=w(require("joi")),rz=w(at());oy();Oge=iy,Pge=Object.entries(sy).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),Lge=o(()=>{let e=Wh.default.string().min(1).max(512);return Object.entries(sy).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:Wh.default.string().valid(...r.allowedValues).messages({"any.only":Pge[t]})}))}),e.required()},"createStatusValidationSchema"),Dge=Wh.default.object({id:Wh.default.string().valid(...Oge).required(),status:Lge()});o(nz,"validateStatus")});function iz(){TP||(TP=oa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),yP=new Uint8Array(TP))}function oz(){iz(),yP[0]=1}function az(){return iz(),yP[0]===1}var TP,yP,RP=ie(()=>{zh();o(iz,"ensureInitialized");o(oz,"requestRestart");o(az,"restartNeeded")});var NP={};Ie(NP,{DEFAULT_STATUS_ID:()=>Yh,STATUS_IDS:()=>iy,Status:()=>oa,clear:()=>bP,get:()=>IP,set:()=>wP});function Qh(){return AP||(AP=Ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),AP}function bP({id:e}){return jh.debug?.("clearStatus",e),Qh().delete(e)}async function vge(){jh.debug?.("getAllStatus");let e=Qh().get({}),t=await gp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=az();return{systemStatus:e,componentStatus:r,restartRequired:n}}function IP({id:e}){return e?(jh.debug?.("getStatus",e),Qh().get(e)):(jh.debug?.("getStatus","all"),vge())}function wP({status:e,id:t=Yh}){let r=nz({status:e,id:t});if(r)throw(0,ay.handleHDBError)(r,r.message,Mge.BAD_REQUEST);return jh.debug?.("setStatus",t,e),Qh().put(t,{status:e})}var ay,cz,Mge,AP,oa,jh,zh=ie(()=>{Oe();ay=w(_e()),cz=w(Jn());sz();oy();Sp();RP();oy();({HTTP_STATUS_CODES:Mge}=ay.hdbErrors);o(Qh,"getStatusTable");oa={get primaryStore(){return Qh().primaryStore}},jh=(0,cz.loggerWithTag)("status");o(bP,"clearStatus");o(vge,"getAllStatus");o(IP,"getStatus");o(wP,"setStatus")});function xge(e){if(typeof e!="string")throw new cy(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new cy(`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 hf(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=Uge.getKey();if(!(0,uy.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new OP("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 Bge(e){if(e?.typ!=="Harper-License")throw new Jh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new Jh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function Fge(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function kge(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!Fge(t[r],e[r]))throw new ly(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function uz(e){let{header:t,payload:r}=xge(e),n;try{n=JSON.parse(t)}catch(i){let a=new Jh;throw a.cause=i,a}Bge(n);let s;try{s=JSON.parse(r)}catch(i){let a=new ly;throw a.cause=i,a}return kge(s),s}var uy,lz,CP,cy,hf,OP,Jh,ly,Uge,dz=ie(()=>{uy=require("node:crypto"),lz=w(ae());H();CP=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 we.appendFile(ia,a);let f=await Ii(e);return f.message=`Added ssh key: ${r}${d}`,f}o(hge,"addSSHKey");async function Ege(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=Pe.join(gc,r+".key");if(!await we.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await we.outputFile(s,n);let i=await Ii(e);return i.message=`Updated ssh key: ${r}`,i}o(Ege,"updateSSHKey");async function _ge(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=Pe.join(gc,r+".key"),s=Pe.join(gc,"config");if(!await we.pathExists(n))throw new Error("Key does not exist");let i=await we.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await we.outputFile(s,i),we.removeSync(n);let c=await Ii(e);return c.message=`Deleted ssh key: ${r}`,c}o(_ge,"deleteSSHKey");async function gge(e){let t=[];return await we.pathExists(gc)&&(await we.readdir(gc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(gge,"listSSHKeys");async function Sge(e){let t=$n.setSSHKnownHostsValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{known_hosts:r}=e;await we.outputFile(ia,r);let n=await Ii(e);return n.message="Known hosts successfully set",n}o(Sge,"setSSHKnownHosts");async function Tge(e){return await we.pathExists(ia)?{known_hosts:await we.readFile(ia,"utf8")}:{known_hosts:null}}o(Tge,"getSSHKnownHosts");ar.customFunctionsStatus=tge;ar.getCustomFunctions=rge;ar.getCustomFunction=nge;ar.setCustomFunction=sge;ar.dropCustomFunction=ige;ar.addComponent=oge;ar.dropCustomFunctionProject=age;ar.packageComponent=cge;ar.deployComponent=lge;ar.getComponents=dge;ar.getComponentFile=fge;ar.setComponentFile=mge;ar.dropComponent=pge;ar.addSSHKey=hge;ar.updateSSHKey=Ege;ar.deleteSSHKey=_ge;ar.listSSHKeys=gge;ar.setSSHKnownHosts=Sge;ar.getSSHKnownHosts=Tge});var mP=M((cke,YW)=>{"use strict";var Ys=require("joi"),KW=at();YW.exports={readTransactionLogValidator:yge,deleteTransactionLogsBeforeValidator:Rge};function yge(e){let t=Ys.object({schema:Ys.string(),database:Ys.string(),table:Ys.string().required(),from:Ys.date().timestamp(),to:Ys.date().timestamp(),limit:Ys.number().min(1)});return KW.validateBySchema(e,t)}o(yge,"readTransactionLogValidator");function Rge(e){let t=Ys.object({schema:Ys.string(),database:Ys.string(),table:Ys.string().required(),timestamp:Ys.date().timestamp().required()});return KW.validateBySchema(e,t)}o(Rge,"deleteTransactionLogsBeforeValidator")});var ny=M((uke,XW)=>{"use strict";var pP=(H(),D(Y)),Vh=Ft(),WW=oe(),zW=ae(),jW=zi(),QW=j(),{handleHDBError:ty,hdbErrors:Age}=_e(),{HTTP_STATUS_CODES:ry}=Age,{readTransactionLogValidator:bge,deleteTransactionLogsBeforeValidator:Ige}=mP(),JW=ss(),wge="Logs successfully deleted from transaction log.",Nge="All logs successfully deleted from transaction log.";XW.exports={readTransactionLog:Cge,deleteTransactionLogsBefore:Pge};async function Cge(e){let t=bge(e);if(t)throw ty(t,t.message,ry.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=WW.checkSchemaTableExist(e.database,e.table);if(r)throw ty(new Error,r,ry.NOT_FOUND,void 0,void 0,!0);return zW.get(pP.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Oge(e):(QW.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)),JW.readAuditLog(e))}o(Cge,"readTransactionLog");async function*Oge(e){let t=jW.createNatsTableStreamName(e.database,e.table),r=await Vh.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===pP.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(Oge,"readTransactionLogNats");async function Pge(e){let t=Ige(e);if(t)throw ty(t,t.message,ry.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!zW.get(pP.CONFIG_PARAMS.CLUSTERING_ENABLED))return QW.info("Delete transaction logs called for Plexus"),JW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=WW.checkSchemaTableExist(r,n);if(i)throw ty(new Error,i,ry.NOT_FOUND,void 0,void 0,!0);let a=jW.createNatsTableStreamName(r,n),{jsm:c}=await Vh.getNATSReferences(),l=await Vh.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=wge,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=Nge):f=(await Vh.viewStream(a,parseInt(s),1))[0].nats_sequence,await Vh.purgeTableStream(r,n,{seq:f}),d}o(Pge,"deleteTransactionLogsBefore")});var gP={};Ie(gP,{describeMetric:()=>sz,describeMetricOp:()=>_P,get:()=>rz,getOp:()=>hP,listMetrics:()=>nz,listMetricsOp:()=>EP});async function Dge(e){return(await V_().get(e)).hostname}function ZW(e,t){return e.length===0||e.includes(t)}function hP(e){return Kh.trace?.("get_analytics request:",e),rz(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function tz(e){return"conditions"in e?{...e,conditions:e.conditions.map(tz)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function rz(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(tz));let a=t??[];ZW(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),Kh.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],ZW(a,"node")&&(Kh.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await Dge(d)),Kh.trace?.("get_analytics result:",JSON.stringify(u)),u})}function EP(e){return nz(e.metric_types)}async function nz(e=["builtin"]){let t=[],r=Object.values(vo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,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 _P(e){return sz(e.metric)}async function sz(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 Kh.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var ez,Lge,Kh,SP=ie(()=>{ez=w(j());gb();Sb();({forComponent:Lge}=ez.default),Kh=Lge("analytics").conditional;o(Dge,"lookupHostname");o(ZW,"isSelected");o(hP,"getOp");o(tz,"conformCondition");o(rz,"get");o(EP,"listMetricsOp");o(nz,"listMetrics");o(_P,"describeMetricOp");o(sz,"describeMetric")});var sy,iy,Yh,oy=ie(()=>{sy={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},iy=Object.keys(sy),Yh="primary"});function oz(e){return iz.validateBySchema(e,xge)}var Wh,iz,Mge,vge,Uge,xge,az=ie(()=>{Wh=w(require("joi")),iz=w(at());oy();Mge=iy,vge=Object.entries(sy).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),Uge=o(()=>{let e=Wh.default.string().min(1).max(512);return Object.entries(sy).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:Wh.default.string().valid(...r.allowedValues).messages({"any.only":vge[t]})}))}),e.required()},"createStatusValidationSchema"),xge=Wh.default.object({id:Wh.default.string().valid(...Mge).required(),status:Uge()});o(oz,"validateStatus")});function cz(){TP||(TP=oa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),yP=new Uint8Array(TP))}function lz(){cz(),yP[0]=1}function uz(){return cz(),yP[0]===1}var TP,yP,RP=ie(()=>{zh();o(cz,"ensureInitialized");o(lz,"requestRestart");o(uz,"restartNeeded")});var NP={};Ie(NP,{DEFAULT_STATUS_ID:()=>Yh,STATUS_IDS:()=>iy,Status:()=>oa,clear:()=>bP,get:()=>IP,set:()=>wP});function Qh(){return AP||(AP=Ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),AP}function bP({id:e}){return jh.debug?.("clearStatus",e),Qh().delete(e)}async function Fge(){jh.debug?.("getAllStatus");let e=Qh().get({}),t=await gp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=uz();return{systemStatus:e,componentStatus:r,restartRequired:n}}function IP({id:e}){return e?(jh.debug?.("getStatus",e),Qh().get(e)):(jh.debug?.("getStatus","all"),Fge())}function wP({status:e,id:t=Yh}){let r=oz({status:e,id:t});if(r)throw(0,ay.handleHDBError)(r,r.message,Bge.BAD_REQUEST);return jh.debug?.("setStatus",t,e),Qh().put(t,{status:e})}var ay,dz,Bge,AP,oa,jh,zh=ie(()=>{Oe();ay=w(_e()),dz=w(Jn());az();oy();Sp();RP();oy();({HTTP_STATUS_CODES:Bge}=ay.hdbErrors);o(Qh,"getStatusTable");oa={get primaryStore(){return Qh().primaryStore}},jh=(0,dz.loggerWithTag)("status");o(bP,"clearStatus");o(Fge,"getAllStatus");o(IP,"getStatus");o(wP,"setStatus")});function Hge(e){if(typeof e!="string")throw new cy(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new cy(`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 hf(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=kge.getKey();if(!(0,uy.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new OP("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 qge(e){if(e?.typ!=="Harper-License")throw new Jh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new Jh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function Gge(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function $ge(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!Gge(t[r],e[r]))throw new ly(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function mz(e){let{header:t,payload:r}=Hge(e),n;try{n=JSON.parse(t)}catch(i){let a=new Jh;throw a.cause=i,a}qge(n);let s;try{s=JSON.parse(r)}catch(i){let a=new ly;throw a.cause=i,a}return $ge(s),s}var uy,fz,CP,cy,hf,OP,Jh,ly,kge,pz=ie(()=>{uy=require("node:crypto"),fz=w(ae());H();CP=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,uy.createPublicKey)(this.pem)}toString(){return this.pem}},cy=class extends TypeError{static{o(this,"LicenseEncodingError")}},hf=class extends TypeError{static{o(this,"InvalidLicenseError")}},OP=class extends hf{static{o(this,"InvalidLicenseSignatureError")}},Jh=class extends hf{static{o(this,"InvalidHeaderError")}},ly=class extends hf{static{o(this,"InvalidPayloadError")}},Uge=new CP(lz.get(B.LICENSE_MODE));o(xge,"validateLicenseSignature");o(Bge,"validateLicenseHeader");o(Fge,"valid");o(kge,"validateLicensePayload");o(uz,"validateLicense")});var dy={};Ie(dy,{getActiveLicense:()=>vP,getUsageLicenses:()=>yz,getUsageLicensesOp:()=>xP,installUsageLicense:()=>MP,installUsageLicenseOp:()=>DP,isActiveLicense:()=>Sz,isLicensed:()=>UP,loadAndWatchLicensesDir:()=>Gge,recordUsage:()=>Tz});async function DP(e){let t=e.license;try{await MP(t)}catch(r){let n=new pz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function MP(e){let t=uz(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new LP(`A usage license with ${r} already exists`);return en.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function Sz(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 vP(){let e=hz.get(B.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=Me.system.hdb_license?.search(t);for await(let n of r??[])if(Sz(n))return n}async function UP(){return await vP()!==void 0}async function Tz(e){en.trace?.("Recording usage into license from analytics");let t,r=(await vP())?.id;if(r){en.trace?.("Found license to record usage into:",r);let n={};Rt(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(en.trace?.("Processing analytics record:",s),s.metric){case"db-read":en.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":en.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":en.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(en.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count));break;default:en.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";fz||(console.error(n),fz=!0),mz===void 0&&(mz=setInterval(()=>{en.notify(n)},Hge).unref())}}function xP(e){let t={};return e.region&&(t.region=e.region),yz(t)}function yz(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),Me.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function qge(e){en.trace?.("Loading usage license from file:",e);let t=await _z.readFile(e,{encoding:"utf-8"});try{await MP(t)}catch(r){en.error?.("Failed to install usage license from file:",e,r)}}function Gge(){let e=PP.default.join(PP.default.dirname(Ez.getConfigFilePath()),"licenses");(0,gz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:o((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",qge)}var pz,en,hz,PP,Ez,_z,gz,LP,fz,mz,Hge,Xh=ie(()=>{dz();pz=w(_e()),en=w(j());Os();Ca();hz=w(ae());H();Oe();PP=w(require("node:path")),Ez=w(At()),_z=w(require("node:fs/promises")),gz=require("chokidar"),LP=class extends Error{static{o(this,"ExistingLicenseError")}};o(DP,"installUsageLicenseOp");o(MP,"installUsageLicense");fz=!1,Hge=6e5;o(Sz,"isActiveLicense");o(vP,"getActiveLicense");o(UP,"isLicensed");o(Tz,"recordUsage");wb(Tz);o(xP,"getUsageLicensesOp");o(yz,"getUsageLicenses");o(qge,"loadLicenseFile");o(Gge,"loadAndWatchLicensesDir")});var Az=D((Lke,Rz)=>{"use strict";var BP=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}};Rz.exports=BP});var Iz=D((Mke,bz)=>{"use strict";var FP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};bz.exports=FP});var HP=D((Uke,Nz)=>{"use strict";var wz=Az(),$ge=Iz(),{HDB_ERROR_MSGS:Vge}=Kr(),kP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=Vge.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 wz(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new $ge(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 wz(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}};Nz.exports=kP});var hy=D((Bke,Kz)=>{"use strict";var qP=ln(),fy=dn(),Ws=mh(),tE=Za(),GP=Va(),Kge=$C(),Yge=w1(),rE=cs(),my=xp(),Or=j(),Wge=zC(),zge=IT(),jge=yO(),Qge=NT(),Jge=bO(),Xge=IO(),Zge=CO(),eSe=PO(),$P=DT(),aa=oe(),tSe=sY(),Pz=df(),Rn=(H(),M(Y)),Lz=oW(),rSe=Zd(),Dz=(Pd(),M($p)),Mz=(zT(),M(xh)),vz=At(),Er=uP(),nSe=require("alasql"),Uz=ny(),xz=Hh(),Ef=ms(),Bz=(tf(),M(ef)),VP=(SP(),M(gP)),KP=(zh(),M(NP)),Fz=(Xh(),M(dy)),kz=HP(),{handleHDBError:Vn,hdbErrors:Hz}=_e(),{HDB_ERROR_MSGS:tn,HTTP_STATUS_CODES:Zh}=Hz,te=new Map,qz="delete",Sc="insert",zs="read",Zl="update",eE="describe",Cz=tE.describeSchema.name,Oz=tE.describeTable.name,Gz={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},sSe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},iSe="catchup",oSe="handleGetJob",aSe="handleGetJobsByStartDate",py={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},cSe=[Ws.createTable.name,Ws.createAttribute.name,Ws.dropTable.name,Ws.dropAttribute.name],$z={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},se=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};te.set(qP.insert.name,new se(!1,[Sc]));te.set(qP.update.name,new se(!1,[Zl]));te.set(qP.upsert.name,new se(!1,[Sc,Zl]));te.set(fy.searchByConditions.name,new se(!1,[zs]));te.set(fy.searchByHash.name,new se(!1,[zs]));te.set(fy.searchByValue.name,new se(!1,[zs]));te.set(fy.search.name,new se(!1,[zs]));te.set(Ws.createSchema.name,new se(!0,[]));te.set(Ws.createTable.name,new se(!0,[]));te.set(Ws.createAttribute.name,new se(!1,[Sc]));te.set(Ws.dropSchema.name,new se(!0,[]));te.set(Ws.dropTable.name,new se(!0,[]));te.set(Ws.dropAttribute.name,new se(!0,[]));te.set(tE.describeSchema.name,new se(!1,[zs]));te.set(tE.describeTable.name,new se(!1,[zs]));te.set(GP.deleteRecord.name,new se(!1,[qz]));te.set(rE.addUser.name,new se(!0,[]));te.set(rE.alterUser.name,new se(!0,[]));te.set(rE.dropUser.name,new se(!0,[]));te.set(rE.listUsersExternal.name,new se(!0,[]));te.set(my.listRoles.name,new se(!0,[]));te.set(my.addRole.name,new se(!0,[]));te.set(my.alterRole.name,new se(!0,[]));te.set(my.dropRole.name,new se(!0,[]));te.set(Wge.name,new se(!0,[]));te.set(zge.name,new se(!0,[]));te.set(jge.name,new se(!0,[]));te.set(Qge.name,new se(!0,[]));te.set(Jge.name,new se(!0,[]));te.set(Xge.name,new se(!0,[]));te.set($P.setRoutes.name,new se(!0,[]));te.set($P.getRoutes.name,new se(!0,[]));te.set($P.deleteRoutes.name,new se(!0,[]));te.set(vz.setConfiguration.name,new se(!0,[]));te.set(Zge.clusterStatus.name,new se(!0,[]));te.set(eSe.name,new se(!0,[]));te.set(GP.deleteFilesBefore.name,new se(!0,[]));te.set(GP.deleteAuditLogsBefore.name,new se(!0,[]));te.set(Pz.restart.name,new se(!0,[]));te.set(Pz.restartService.name,new se(!0,[]));te.set(Kge.name,new se(!0,[]));te.set(Yge.name,new se(!0,[zs]));te.set(rSe.systemInformation.name,new se(!0,[]));te.set(vz.getConfiguration.name,new se(!0,[]));te.set(Uz.readTransactionLog.name,new se(!0,[]));te.set(Uz.deleteTransactionLogsBefore.name,new se(!0,[]));te.set(xz.installModules.name,new se(!0,[]));te.set(xz.auditModules.name,new se(!0,[]));te.set(Ef.createCsr.name,new se(!0,[]));te.set(Ef.signCertificate.name,new se(!0,[]));te.set(Ef.listCertificates.name,new se(!0,[]));te.set(Ef.addCertificate.name,new se(!0,[]));te.set(Ef.removeCertificate.name,new se(!0,[]));te.set(Ef.getKey.name,new se(!0,[]));te.set(Bz.addNodeBack.name,new se(!0,[]));te.set(Bz.removeNodeBack.name,new se(!0,[]));te.set(VP.getOp.name,new se(!1,[zs]));te.set(VP.listMetricsOp.name,new se(!1,[zs]));te.set(VP.describeMetricOp.name,new se(!1,[zs]));te.set(KP.clear.name,new se(!0,[]));te.set(KP.get.name,new se(!0,[]));te.set(KP.set.name,new se(!0,[]));te.set(Fz.installUsageLicenseOp.name,new se(!0,[]));te.set(Fz.getUsageLicensesOp.name,new se(!0,[]));te.set(Dz.createTokens.name,new se(!1,[]));te.set(Dz.refreshOperationToken.name,new se(!1,[]));te.set(Mz.login.name,new se(!1,[]));te.set(Mz.logout.name,new se(!1,[]));te.set(Er.customFunctionsStatus.name,new se(!0,[]));te.set(Er.getCustomFunctions.name,new se(!0,[]));te.set(Er.getComponents.name,new se(!0,[]));te.set(Er.getComponentFile.name,new se(!0,[]));te.set(Er.setComponentFile.name,new se(!0,[]));te.set(Er.dropComponent.name,new se(!0,[]));te.set(Er.getCustomFunction.name,new se(!0,[]));te.set(Er.setCustomFunction.name,new se(!0,[]));te.set(Er.dropCustomFunction.name,new se(!0,[]));te.set(Er.addComponent.name,new se(!0,[]));te.set(Er.dropCustomFunctionProject.name,new se(!0,[]));te.set(Er.packageComponent.name,new se(!0,[]));te.set(Er.deployComponent.name,new se(!0,[]));te.set(Er.addSSHKey.name,new se(!0,[]));te.set(Er.updateSSHKey.name,new se(!0,[]));te.set(Er.deleteSSHKey.name,new se(!0,[]));te.set(Er.listSSHKeys.name,new se(!0,[]));te.set(Er.setSSHKnownHosts.name,new se(!0,[]));te.set(Er.getSSHKnownHosts.name,new se(!0,[]));te.set(rE.userInfo.name,new se(!1,[]));te.set(tE.describeAll.name,new se(!1,[]));te.set(oSe,new se(!1,[]));te.set(aSe,new se(!0,[]));te.set(iSe,new se(!0,[]));te.set(py.CSV_DATA_LOAD,new se(!1,[Sc,Zl]));te.set(py.CSV_URL_LOAD,new se(!1,[Sc,Zl]));te.set(py.CSV_FILE_LOAD,new se(!1,[Sc,Zl]));te.set(py.IMPORT_FROM_S3,new se(!1,[Sc,Zl]));te.set($z.EXPORT_TO_S3,new se(!0,[]));te.set($z.EXPORT_LOCAL,new se(!0,[]));te.set(Rn.VALID_SQL_OPS_ENUM.DELETE,new se(!1,[qz]));te.set(Rn.VALID_SQL_OPS_ENUM.SELECT,new se(!1,[zs]));te.set(Rn.VALID_SQL_OPS_ENUM.INSERT,new se(!1,[Sc]));te.set(Rn.VALID_SQL_OPS_ENUM.UPDATE,new se(!1,[Zl]));Kz.exports={verifyPerms:uSe,verifyPermsAst:lSe,verifyBulkLoadAttributePerms:fSe};function lSe(e,t,r){if(aa.isEmptyOrZeroLength(e))throw Or.info("verify_perms_ast has an empty user parameter"),Vn(new Error);if(aa.isEmptyOrZeroLength(t))throw Or.info("verify_perms_ast has an empty user parameter"),Vn(new Error);if(aa.isEmptyOrZeroLength(r))throw Or.info("verify_perms_ast has a null operation parameter"),Vn(new Error);try{let n=new kz,s=new tSe(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&&Gz[r])throw Vn(new Error,tn.DROP_SYSTEM,Zh.FORBIDDEN);if(c&&!l)return null;let u=Lz.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof nSe.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=Vz(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=WP(t.role.permission,m,f[p]);YP(h,E,r,f[p],m,n)}}),n.getPermsResponse())}catch(n){throw Vn(n)}}o(lSe,"verifyPermsAst");function uSe(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,Zh.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 kz;if(aa.isEmptyOrZeroLength(e.hdb_user?.role)||aa.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&&sSe[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&&Gz[r])throw Vn(new Error,tn.DROP_SYSTEM,Zh.FORBIDDEN);if(l&&!d||u===!0&&(r===Ws.createSchema.name||r===Ws.dropSchema.name))return null;if(cSe.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=Lz.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===Cz||r===Oz)&&!f.super_user){if(s===Rn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(tn.SCHEMA_PERM_ERROR(s));if(r===Cz&&(!f[s]||!f[s][eE]))return c.handleInvalidItem(tn.SCHEMA_NOT_FOUND(s));if(r===Oz&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][eE]))return c.handleInvalidItem(tn.TABLE_NOT_FOUND(s,i))}let m=Vz(e.hdb_user,r,a,c,n);if(m)return m;if(te.get(r)&&te.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=dSe(e),h=WP(e.hdb_user?.role?.permission,s,i);return YP(p,h,r,i,s,c,n),c.getPermsResponse()}o(uSe,"verifyPerms");function Vz(e,t,r,n,s){if(aa.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||te.get(t).requires_su))return null;if(!te.get(t))throw Or.info(`operation ${t} not found.`),Vn(new Error,tn.OP_NOT_FOUND(t),Zh.BAD_REQUEST);if(te.get(t)&&te.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][eE]===!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[eE]===!1)n.addInvalidItem(tn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=te.get(t).perms;!aa.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(Hz.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(Vz,"hasPermissions");function YP(e,t,r,n,s,i,a){if(!e||!t)throw Or.info("no attributes specified in checkAttributePerms."),Vn(new Error);let c=te.get(r).perms;if(!c||c==="")throw Or.info(`no permissions found for ${r} in checkAttributePerms().`),Vn(new Error);if(aa.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[eE]===!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!==zs)throw Vn(new Error,tn.SYSTEM_TIMESTAMP_PERMS_ERR,Zh.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(YP,"checkAttributePerms");function dSe(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(dSe,"getRecordAttributes");function WP(e,t,r){let n=new Map;if(aa.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(WP,"getAttributePermissions");function fSe(e,t,r,n,s,i,a){let c=new Set(i),l=WP(e,n,s);YP(c,l,t,s,n,a,r)}o(fSe,"verifyBulkLoadAttributePerms")});var _y=D((kke,Qz)=>{"use strict";Qz.exports={evaluateSQL:ISe,processAST:jz,convertSQLToAST:zz,checkASTPermissions:Wz};var mSe=ln(),Yz=require("util"),pSe=Yz.callbackify(mSe.insert),hSe=dn().search,ESe=e$().update,_Se=Yz.callbackify(ESe),gSe=r$().convertDelete,Tc=require("alasql"),SSe=hy(),Ey=j(),TSe=Ug(),ySe=oe(),nE=(H(),M(Y)),{hdbErrors:RSe,handleHDBError:zP}=_e(),{HTTP_STATUS_CODES:jP}=RSe;TSe(Tc);var ASe=403,bSe="There was a problem performing this insert. Please check the logs and try again.",QP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function ISe(e,t){let r=e.parsed_sql_object;if(!r){r=zz(e.sql);let n,s=r.ast.statements[0];if(s instanceof Tc.yy.Insert?n=s.into.databaseid:s instanceof Tc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Tc.yy.Update||s instanceof Tc.yy.Delete?n=s.table.databaseid:Ey.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Tc.yy.Select)&&ySe.isEmptyOrZeroLength(n))return t("No schema specified",null)}jz(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(ISe,"evaluateSQL");function Wz(e,t){let r;try{r=SSe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(Wz,"checkASTPermissions");function zz(e){let t=new QP;if(!e)throw zP(new Error,"The 'sql' parameter is missing from the request body",jP.BAD_REQUEST);try{let r=e.trim(),n=Tc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
40
|
-
`);throw n[1]?zP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,jP.BAD_REQUEST):zP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",jP.BAD_REQUEST)}return t}o(zz,"convertSQLToAST");function jz(e,t,r){try{let n=wSe;if(!e.bypass_auth&&!t.permissions_checked){let i=Wz(e,t);if(i&&i.length>0)return r(ASe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case nE.VALID_SQL_OPS_ENUM.SELECT:n=hSe,s=t.ast.statements[0];break;case nE.VALID_SQL_OPS_ENUM.INSERT:n=NSe;break;case nE.VALID_SQL_OPS_ENUM.UPDATE:n=_Se;break;case nE.VALID_SQL_OPS_ENUM.DELETE:n=gSe;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(jz,"processAST");function wSe(e,t){Ey.info(e),t("unknown sql statement")}o(wSe,"nullFunction");function NSe({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=CSe(i,e.values)}catch(a){return r(a)}pSe(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){Ey.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(NSe,"convertInsert");function CSe(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=Tc.compile(`SELECT ${s.toString()} AS [${nE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Ey.error(r),new Error(bSe)}}o(CSe,"createDataObjects")});var rL=D(($ke,ej)=>{var yy=require("clone"),Ry=at(),OSe=oe(),Sy=(H(),M(Y)),qke=j(),JP=require("fs"),ZP=require("joi"),{string:Ty}=ZP.types(),{hdbErrors:PSe,handleHDBError:gy}=_e(),{HDB_ERROR_MSGS:Gke,HTTP_STATUS_CODES:XP}=PSe,{commonValidators:_f}=Gi(),Jz=" is required",LSe=["insert","update","upsert"],eL={database:{presence:!1,format:_f.schema_format,length:_f.schema_length},schema:{presence:!1,format:_f.schema_format,length:_f.schema_length},table:{presence:!0,format:_f.schema_format,length:_f.schema_length},action:{inclusion:{within:LSe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},DSe={schema:Ty.required(),table:Ty.required(),action:Ty.valid("insert","update","upsert")},{AWS_ACCESS_KEY:MSe,AWS_SECRET:vSe,AWS_BUCKET:USe,AWS_FILE_KEY:xSe,REGION:BSe}=Sy.S3_BUCKET_AUTH_KEYS,FSe={s3:{presence:!0},[`s3.${MSe}`]:{presence:!0,type:"String"},[`s3.${vSe}`]:{presence:!0,type:"String"},[`s3.${USe}`]:{presence:!0,type:"String"},[`s3.${xSe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${BSe}`]:{presence:!0,type:"String"}},Xz=yy(eL);Xz.data.presence={message:Jz};var Zz=yy(eL);Zz.file_path.presence={message:Jz};var kSe=Object.assign(yy(eL),FSe),tL=yy(DSe);tL.csv_url=Ty.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();tL.passthrough_headers=ZP.object();function HSe(e){let t=Ry.validateObject(e,Xz);return Ay(e,t)}o(HSe,"dataObject");function qSe(e){let t=Ry.validateBySchema(e,ZP.object(tL));return Ay(e,t)}o(qSe,"urlObject");function GSe(e){let t=Ry.validateObject(e,Zz);return Ay(e,t)}o(GSe,"fileObject");function $Se(e){let t=Ry.validateObject(e,kSe);return Ay(e,t)}o($Se,"s3FileObject");function Ay(e,t){if(!t){let r=OSe.checkGlobalSchemaTable(e.schema,e.table);if(r)return gy(new Error,r,XP.BAD_REQUEST);if(e.operation===Sy.OPERATIONS_ENUM.CSV_FILE_LOAD)try{JP.accessSync(e.file_path,JP.constants.R_OK|JP.constants.F_OK)}catch(n){return n.code===Sy.NODE_ERROR_CODES.ENOENT?gy(n,`No such file or directory ${n.path}`,XP.BAD_REQUEST):n.code===Sy.NODE_ERROR_CODES.EACCES?gy(n,`Permission denied ${n.path}`,XP.BAD_REQUEST):gy(n)}}return t}o(Ay,"postValidateChecks");ej.exports={dataObject:HSe,urlObject:qSe,fileObject:GSe,s3FileObject:$Se}});var nL=D((Kke,tj)=>{"use strict";var sE=j(),by=(H(),M(Y));async function VSe(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===by.OPERATIONS_ENUM.INSERT||t.operation===by.OPERATIONS_ENUM.UPDATE||t.operation===by.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===by.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(sE.info(i.message),i):i.http_resp_msg?(sE.error(`Error calling operation: ${e.name}`),sE.error(i.http_resp_msg),i):(sE.error(`Error calling operation: ${e.name}`),sE.error(i),i)}}o(VSe,"callOperationFunctionAsAwait");tj.exports={callOperationFunctionAsAwait:VSe}});var sL=D((Wke,nj)=>{"use strict";var{S3:KSe,GetObjectCommand:YSe}=require("@aws-sdk/client-s3");nj.exports={getFileStreamFromS3:WSe,getS3AuthObj:rj};async function WSe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await rj(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new YSe(r))).Body}o(WSe,"getFileStreamFromS3");function rj(e,t,r){return new KSe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(rj,"getS3AuthObj")});var ij=D((jke,sj)=>{"use strict";var iL=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}},oL=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};sj.exports={BulkLoadFileObject:iL,BulkLoadDataObject:oL}});var cL=D((Jke,oj)=>{"use strict";var aL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};oj.exports=aL});var pL=D((nHe,Aj)=>{"use strict";var Iy=ln(),Ny=rL(),zSe=require("needle"),wi=(H(),M(Y)),Zke=pt(),gf=oe(),{handleHDBError:Xt,hdbErrors:hj}=_e(),{HTTP_STATUS_CODES:rn,HDB_ERROR_MSGS:Pr,CHECK_LOGS_WRAPPER:tu}=hj,Sf=j(),lL=require("papaparse");gf.promisifyPapaParse();var Ni=require("fs-extra"),jSe=require("path"),{chain:aj}=require("stream-chain"),cj=require("stream-json/streamers/StreamArray"),lj=require("stream-json/utils/Batch"),uj=require("stream-chain/utils/comp"),{finished:dj}=require("stream"),QSe=ae(),Ej=nL(),JSe=sL(),{BulkLoadFileObject:dL,BulkLoadDataObject:XSe}=ij(),fL=HP(),{verifyBulkLoadAttributePerms:_j}=hy(),eHe=cL(),tHe=Ft(),rHe=zi(),{databases:ZSe}=(Oe(),M(mt)),{coerceType:eTe}=(ng(),M(Cq)),fj="No records parsed from csv file.",eu=`${QSe.get("HDB_ROOT")}/tmp`,{schemaRegex:tTe}=Gi(),mj=1024*1024*2,pj=5e3,rTe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Aj.exports={csvDataLoad:nTe,csvURLLoad:sTe,csvFileLoad:iTe,importFromS3:oTe};async function nTe(e,t){let r=Ny.dataObject(e);if(r)throw Xt(r,r.message,rn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Tj(e.schema,e.table),i=lL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:uL.bind(null,s),dynamicTyping:!1}),a=new fL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&_j(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 XSe(e.action,e.schema,e.table,i.data);return n=await Ej.callOperationFunctionAsAwait(yj,l,null),n.message===fj?fj:Rj(n.records,n.number_written)}catch(s){throw ru(s)}}o(nTe,"csvDataLoad");async function sTe(e){let t=Ny.urlObject(e);if(t)throw Xt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${eu}/${r}`;try{await aTe(e,r)}catch(s){throw Sf.error(Pr.DOWNLOAD_FILE_ERR(r)+" - "+s),Xt(s,tu(Pr.DOWNLOAD_FILE_ERR(r)))}try{let s=new dL(this.job_operation_function.name,e.action,e.schema,e.table,n,wi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await mL(s);return await wy(n),i}catch(s){throw await wy(n),ru(s)}}o(sTe,"csvURLLoad");async function iTe(e){let t=Ny.fileObject(e);if(t)throw Xt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=new dL(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,wi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await mL(r)}catch(n){throw ru(n)}}o(iTe,"csvFileLoad");async function oTe(e){let t=Ny.s3FileObject(e);if(t)throw Xt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=jSe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${eu}/${s}`;let i=new dL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await cTe(s,e);let a=await mL(i);return await wy(r),a}catch(n){throw await wy(r),ru(n)}}o(oTe,"importFromS3");async function aTe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await zSe("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,wi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}uTe(r,e.csv_url),await lTe(t,r.raw)}o(aTe,"downloadCSVFile");async function cTe(e,t){try{let r=`${eu}/${e}`;await Ni.mkdirp(eu),await Ni.writeFile(`${eu}/${e}`,"",{flag:"a+"});let n=await Ni.createWriteStream(r),s=await JSe.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(){Sf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Sf.error(Pr.S3_DOWNLOAD_ERR+" - "+r),Xt(r,tu(Pr.S3_DOWNLOAD_ERR))}}o(cTe,"downloadFileFromS3");async function lTe(e,t){try{await Ni.mkdirp(eu),await Ni.writeFile(`${eu}/${e}`,t)}catch(r){throw Sf.error(Pr.WRITE_TEMP_FILE_ERR),Xt(r,tu(Pr.DEFAULT_BULK_LOAD_ERR))}}o(lTe,"writeFileToTempFolder");async function wy(e){if(e)try{await Ni.access(e),await Ni.unlink(e)}catch{Sf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(wy,"deleteTempFile");function uTe(e,t){if(e.statusCode!==hj.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(!rTe[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(uTe,"validateURLResponse");async function mL(e){try{let t;switch(e.file_type){case wi.VALID_S3_FILE_TYPES.CSV:t=await dTe(e);break;case wi.VALID_S3_FILE_TYPES.JSON:t=await fTe(e);break;default:throw Xt(new Error,Pr.DEFAULT_BULK_LOAD_ERR,rn.BAD_REQUEST,wi.LOG_LEVELS.ERROR,Pr.INVALID_FILE_EXT_ERR(e))}return Rj(t.records,t.number_written)}catch(t){throw ru(t)}}o(mL,"fileLoad");async function gj(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 Iy.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&_j(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(gj,"validateChunk");async function Sj(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;gf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!gf.isEmpty(c)&&!gf.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 Ej.callOperationFunctionAsAwait(yj,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Xt(c,tu(Pr.INSERT_CSV_ERR),rn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Pr.INSERT_CSV_ERR+" - "+c);r(l)}}o(Sj,"insertChunk");async function dTe(e){let t={records:0,number_written:0},r=Tj(e.schema,e.table);try{let n=new fL,s=Ni.createReadStream(e.file_path,{highWaterMark:mj});s.setEncoding("utf8"),await lL.parsePromise(s,gj.bind(null,e,n),uL.bind(null,r));let i=n.getPermsResponse();if(i)throw Xt(new Error,i,rn.BAD_REQUEST);return s=Ni.createReadStream(e.file_path,{highWaterMark:mj}),s.setEncoding("utf8"),await lL.parsePromise(s,Sj.bind(null,e,t),uL.bind(null,r)),s.destroy(),t}catch(n){throw Xt(n,tu(Pr.PAPA_PARSE_ERR),rn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Pr.PAPA_PARSE_ERR+n)}}o(dTe,"callPapaParse");function Tj(e,t){let r=ZSe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>eTe(i,s));return n}o(Tj,"createTransformMap");function uL(e,t,r){let n=e.get(r);return n?n(t):gf.autoCast(t)}o(uL,"typeFunction");async function fTe(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new fL,s=aj([Ni.createReadStream(e.file_path,{encoding:"utf-8"}),cj.withParser(),c=>c.value,new lj({batchSize:pj}),uj(async c=>{await gj(e,n,r,c)})]);await new Promise((c,l)=>{dj(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Xt(new Error,i,rn.BAD_REQUEST);let a=aj([Ni.createReadStream(e.file_path,{encoding:"utf-8"}),cj.withParser(),c=>c.value,new lj({batchSize:pj}),uj(async c=>{await Sj(e,t,r,c)})]);return await new Promise((c,l)=>{dj(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Xt(n,tu(Pr.INSERT_JSON_ERR),rn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Pr.INSERT_JSON_ERR+n)}}o(fTe,"insertJson");async function yj(e){let t={};try{e.data&&e.data.length>0&&mTe(e.data[0])?t=await pTe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Sf.info(t.message))}catch(r){throw ru(r)}return t}o(yj,"callBulkFileLoad");function mTe(e){let t=Object.keys(e);for(let r of t)if(!tTe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(mTe,"validateColumnNames");async function pTe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Iy.insert;break;case"update":i=Iy.update;break;case"upsert":i=Iy.upsert;break;default:throw Xt(new Error,Pr.INVALID_ACTION_PARAM_ERR(n),rn.BAD_REQUEST,wi.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=gf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw ru(a)}}o(pTe,"bulkFileLoad");function Rj(e,t){return`successfully loaded ${t} of ${e} records`}o(Rj,"buildResponseMsg");function ru(e){return Xt(e,tu(Pr.DEFAULT_BULK_LOAD_ERR),rn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Pr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(ru,"buildTopLevelErrMsg")});var _L=D((iHe,Lj)=>{"use strict";var EL=dn(),hTe=sL(),{AsyncParser:ETe}=require("json2csv"),Cy=require("stream"),_s=oe(),hL=require("fs-extra"),_Te=require("path"),js=j(),{promisify:wj}=require("util"),iE=oe(),{handleHDBError:_r,hdbErrors:gTe}=_e(),{HDB_ERROR_MSGS:Kn,HTTP_STATUS_CODES:gr}=gTe,{streamAsJSON:STe}=(YA(),M(CU)),{Upload:TTe}=require("@aws-sdk/lib-storage"),{toCsvStream:yTe}=(Po(),M(FU)),bj=["search_by_value","search_by_hash","sql","search_by_conditions"],Ij=["json","csv"],Nj="json",Cj="csv",RTe="Successfully exported JSON locally.",ATe="Successfully exported CSV locally.",bTe=1e3,ITe=EL.searchByHash,wTe=EL.searchByValue,NTe=wj(Cy.finished);Lj.exports={export_to_s3:LTe,export_local:CTe};async function CTe(e){js.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Oj(e);if(!_s.isEmpty(t))throw js.error(t),_r(new Error,t,gr.BAD_REQUEST,void 0,void 0,!0);if(_s.isEmpty(e.path))throw js.error(Kn.MISSING_VALUE("path")),_r(new Error,Kn.MISSING_VALUE("path"),gr.BAD_REQUEST,void 0,void 0,!0);let r=(_s.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(_Te.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=_s.buildFolderPath(e.path,r);await OTe(e.path);let s=await Pj(e);return await PTe(n,e.format,s)}o(CTe,"export_local");async function OTe(e){if(js.trace("in confirmPath"),_s.isEmptyOrZeroLength(e))throw _r(new Error,`Invalid path: ${e}`,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await hL.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),_r(new Error,n,gr.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),_r(new Error,r,gr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(OTe,"confirmPath");async function PTe(e,t,r){if(js.trace("in saveToLocal"),iE.isEmptyOrZeroLength(e))throw _r(new Error,Kn.INVALID_VALUE("file_path"),gr.BAD_REQUEST,void 0,void 0,!0);if(iE.isEmptyOrZeroLength(t))throw _r(new Error,Kn.INVALID_VALUE("Source format"),gr.BAD_REQUEST,void 0,void 0,!0);if(iE.isEmpty(r))throw _r(new Error,Kn.NOT_FOUND("Data"),gr.BAD_REQUEST,void 0,void 0,!0);if(t===Nj){let n=hL.createWriteStream(e);return STe(r).pipe(n),await NTe(n),{message:RTe,path:e}}else if(t===Cj){let n=hL.createWriteStream(e),s=Cy.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new ETe(i,c).fromInput(s).toOutput(n).promise(!1),{message:ATe,path:e}}throw _r(new Error,Kn.INVALID_VALUE("format"),gr.BAD_REQUEST)}o(PTe,"saveToLocal");async function LTe(e){if(!e.s3||Object.keys(e.s3).length===0)throw _r(new Error,Kn.MISSING_VALUE("S3 object"),gr.BAD_REQUEST);if(_s.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw _r(new Error,Kn.MISSING_VALUE("aws_access_key_id"),gr.BAD_REQUEST);if(_s.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw _r(new Error,Kn.MISSING_VALUE("aws_secret_access_key"),gr.BAD_REQUEST);if(_s.isEmptyOrZeroLength(e.s3.bucket))throw _r(new Error,Kn.MISSING_VALUE("bucket"),gr.BAD_REQUEST);if(_s.isEmptyOrZeroLength(e.s3.key))throw _r(new Error,Kn.MISSING_VALUE("key"),gr.BAD_REQUEST);if(_s.isEmptyOrZeroLength(e.s3.region))throw _r(new Error,Kn.MISSING_VALUE("region"),gr.BAD_REQUEST);let t=Oj(e);if(!_s.isEmpty(t))throw _r(new Error,t,gr.BAD_REQUEST);js.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Pj(e)}catch(l){throw js.error(l),l}let n,s=await hTe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new Cy.PassThrough;if(e.format===Cj){i=e.s3.key+".csv";let l=yTe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===Nj){i=e.s3.key+".json";let l=new Cy.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%bTe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw _r(new Error,Kn.INVALID_VALUE("format"),gr.BAD_REQUEST);return new TTe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(LTe,"export_to_s3");function Oj(e){if(js.trace("in exportCoreValidation"),_s.isEmpty(e.format))return"format missing";if(Ij.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Ij.join(", ")}`;let t=e.search_operation.operation;if(_s.isEmpty(t))return"search_operation.operation missing";if(bj.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${bj.join(", ")}`}o(Oj,"exportCoreValidation");async function Pj(e){js.trace("in getRecords");let t,r;if(iE.isEmpty(e.search_operation)||iE.isEmptyOrZeroLength(e.search_operation.operation))throw _r(new Error,Kn.INVALID_VALUE("Search operation"),gr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=wTe;break;case"search_by_hash":t=ITe;break;case"search_by_conditions":t=EL.searchByConditions;break;case"sql":{let n=_y();t=wj(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,js.error(r),_r(new Error,r,gr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(Pj,"getRecords")});var Mj=D((aHe,Dj)=>{"use strict";var gL=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Dj.exports=gL});var xj=D((lHe,Uj)=>{"use strict";var DTe=(H(),M(Y)),vj=require("moment"),MTe=require("uuid").v4,SL=class{static{o(this,"JobObject")}constructor(){this.id=MTe(),this.type=void 0,this.start_datetime=vj().valueOf(),this.created_datetime=vj().valueOf(),this.end_datetime=void 0,this.status=DTe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Uj.exports=SL});var TL=D((dHe,Vj)=>{"use strict";var vTe=require("uuid").v4,qj=ln(),Gj=dn(),UTe=di(),xTe=Ju(),BTe=Mj(),Ct=(H(),M(Y)),FTe=xj(),kTe=Hp(),Ci=j(),HTe=fm(),Tf=oe(),{promisify:qTe}=require("util"),nu=require("moment"),GTe=_y(),Oy=rL(),Bj=ow(),{deleteTransactionLogsBeforeValidator:$Te}=mP(),{handleHDBError:Fj,hdbErrors:VTe,ClientError:KTe}=_e(),{HTTP_STATUS_CODES:kj}=VTe,Hj=Gj.searchByValue,YTe=Gj.searchByHash,WTe=qj.insert,zTe=qTe(GTe.evaluateSQL),jTe=qj.update;Vj.exports={addJob:XTe,updateJob:eye,handleGetJob:QTe,handleGetJobsByStartDate:JTe,getJobById:$j};async function QTe(e){if(e.id===void 0)throw new KTe("'id' is required");let t=await $j(e.id);return Tf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(QTe,"handleGetJob");async function JTe(e){try{let t=await ZTe(e);if(Ci.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=nu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=nu(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 Ci.error(r),new Error(r)}}o(JTe,"handleGetJobsByStartDate");async function XTe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Tf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ci.info(d),t.error=d,t}if(!Ct.JOB_TYPE_ENUM[e.operation])return Ci.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ct.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Oy.fileObject(e);break;case Ct.OPERATIONS_ENUM.CSV_URL_LOAD:n=Oy.urlObject(e);break;case Ct.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Oy.dataObject(e);break;case Ct.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Oy.s3FileObject(e);break;case Ct.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ct.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Bj(e,"date");break;case Ct.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Bj(e,"timestamp");break;case Ct.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=$Te(e);break;case Ct.OPERATIONS_ENUM.RESTART_SERVICE:if(Ct.HDB_PROCESS_SERVICES[e.service]===void 0)throw Fj(new Error,"Invalid service",kj.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw Fj(n,n.message,kj.BAD_REQUEST,void 0,void 0,!0);let s=new FTe;s.type=e.operation===Ct.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ct.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new UTe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await Hj(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ci.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=vTe();try{a=await Hj(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ci.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ci.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new HTe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await WTe(l)}catch(d){return Ci.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,Ci.trace(d)}return t}o(XTe,"addJob");async function ZTe(e){let t=nu(e.from_date,nu.ISO_8601),r=nu(e.to_date,nu.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 BTe(n,e.hdb_user);try{return await zTe(s)}catch(i){throw Ci.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(ZTe,"getJobsInDateRange");async function $j(e){if(Tf.isEmptyOrZeroLength(e))return Tf.errorizeMessage("Invalid job ID specified.");let t=new xTe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await YTe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ci.error(n),Tf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o($j,"getJobById");async function eye(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Tf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ct.JOB_STATUS_ENUM.COMPLETE||e.status===Ct.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=nu().valueOf());let t=new kTe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await jTe(t),r}o(eye,"updateJob")});var Xj=D((mHe,Jj)=>{"use strict";var Kj=oe(),Lr=(H(),M(Y)),tye=require("moment"),Py=pL(),oE=j(),Yj=TL(),Wj=_L(),zj=Va(),jj=Je(),rye=ny(),nye=df(),{parentPort:sye,isMainThread:Qj}=require("worker_threads"),{onMessageByType:iye}=Je(),yL=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function oye(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(Kj.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Kj.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Lr.JOB_TYPE_ENUM.csv_file_load:await oo(e,Py.csvFileLoad);break;case Lr.JOB_TYPE_ENUM.csv_url_load:await oo(e,Py.csvURLLoad);break;case Lr.JOB_TYPE_ENUM.csv_data_load:await oo(e,Py.csvDataLoad);break;case Lr.JOB_TYPE_ENUM.import_from_s3:await oo(e,Py.importFromS3);break;case Lr.JOB_TYPE_ENUM.empty_trash:break;case Lr.JOB_TYPE_ENUM.export_local:await oo(e,Wj.export_local);break;case Lr.JOB_TYPE_ENUM.export_to_s3:await oo(e,Wj.export_to_s3);break;case Lr.JOB_TYPE_ENUM.delete_files_before:case Lr.JOB_TYPE_ENUM.delete_records_before:await oo(e,zj.deleteFilesBefore);break;case Lr.JOB_TYPE_ENUM.delete_audit_logs_before:await oo(e,zj.deleteAuditLogsBefore);break;case Lr.JOB_TYPE_ENUM.delete_transaction_logs_before:await oo(e,rye.deleteTransactionLogsBefore);break;case Lr.JOB_TYPE_ENUM.restart_service:return await oo(e,nye.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(oye,"parseMessage");async function oo(e,t){try{e.job.status=Lr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=tye().valueOf(),await Yj.updateJob(e.job),await aye(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):oE.error(`There was an error running ${t.name} job with id ${e.job.id}`),oE.error(n),e.job.message=n,e.job.status=Lr.JOB_STATUS_ENUM.ERROR;try{await Yj.updateJob(e.job)}catch(s){throw oE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(oo,"runJob");async function aye(e){oE.trace("launching job thread:",e),Qj?jj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):sye.postMessage({type:Lr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(aye,"launchJobThread");Qj&&iye(Lr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{jj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){oE.error(r)}});Jj.exports={parseMessage:oye,RunnerMessage:yL}});var e2=D((hHe,Zj)=>{"use strict";var cye=oe(),RL=ae(),yc=(H(),M(Y)),lye=pt(),uye=Ft(),ao=j(),dye=cL(),fye=zi();RL.initSync();Zj.exports={postOperationHandler:pye,sendOperationTransaction:aE};async function aE(e,t,r,n){if(e.schema===yc.SYSTEM_SCHEMA_NAME)return;let s=mye(e,t,r);s&&(ao.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await uye.publishToStream(`${lye.SUBJECT_PREFIXES.TXN}.${e.schema}`,fye.createNatsTableStreamName(e.schema,e.table),n,s))}o(aE,"sendOperationTransaction");function mye(e,t,r){if(cye.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===yc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(mye,"convertCRUDOperationToTransaction");async function pye(e,t,r){if(!RL.get(yc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;ao.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=RL.get(yc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new dye(t.txn_time,n,s);switch(e.operation){case yc.OPERATIONS_ENUM.INSERT:try{await aE(e,t.inserted_hashes,i,r)}catch(a){ao.error("There was an error calling clustering postOperationHandler for insert."),ao.error(a)}break;case yc.OPERATIONS_ENUM.DELETE:try{await aE(e,t.deleted_hashes,i,r)}catch(a){ao.error("There was an error calling clustering postOperationHandler for delete."),ao.error(a)}break;case yc.OPERATIONS_ENUM.UPDATE:try{await aE(e,t.update_hashes,i,r)}catch(a){ao.error("There was an error calling clustering postOperationHandler for update."),ao.error(a)}break;case yc.OPERATIONS_ENUM.UPSERT:try{await aE(e,t.upserted_hashes,i,r)}catch(a){ao.error("There was an error calling clustering postOperationHandler for upsert."),ao.error(a)}break;default:break}return t}o(pye,"postOperationHandler")});var Z,t2=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 dP={};Ie(dP,{chooseOperation:()=>T2,executeJob:()=>Qs,getOperationFunction:()=>y2,operation:()=>LL,processLocalTransaction:()=>S2});async function S2(e,t){try{if(e.body.operation!=="read_log"&&(dE.default.log_level===tm.INFO||dE.default.log_level===tm.DEBUG||dE.default.log_level===tm.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 _2.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return gye[e.body.operation]&&m2.default.setSchemaDataToGlobal(n=>{n&&An.error(n)}),r}function T2(e){let t;try{t=y2(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=Dy.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=Dy.default.checkASTPermissions(e,i);if(a)throw An.error(`${r2.FORBIDDEN} from operation ${e.operation}`),An.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Js.handleHDBError)(new Error,a,Js.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=f2.default.verifyPerms(i,s);if(a)throw An.error(`${r2.FORBIDDEN} from operation ${e.operation}`),An.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Js.handleHDBError)(new Error,a,Js.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Js.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function y2(e){if(An.trace(`getOperationFunction with operation: ${e.operation}`),n2.has(e.operation))return n2.get(e.operation);throw(0,Js.handleHDBError)(new Error,Js.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Js.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function LL(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=T2(e);return S2({body:e},n)}async function Sye(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[bA]=!0;let a;switch(i.operation){case V.INSERT:a=await iu.default.insert(i);break;case V.UPDATE:a=await iu.default.update(i);break;case V.UPSERT:a=await iu.default.upsert(i);break;case V.DELETE:a=await Af.default.deleteRecord(i);break;default:An.warn("invalid operation in catchup");break}await hye.postOperationHandler(i,a,e)}catch(a){An.info("Invalid operation in transaction"),An.error(a)}}async function Qs(e){(0,E2.transformReq)(e);let t,r;try{if(r=await My.default.addJob(e),r){t=r.createdJob,An.info("addJob result",r);let n=new wL.default.RunnerMessage(t,e);return{message:await wL.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,Js.handleHDBError)(n,i)}}function Tye(){let e=new Map;return e.set(V.INSERT,new Z(iu.default.insert)),e.set(V.UPDATE,new Z(iu.default.update)),e.set(V.UPSERT,new Z(iu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(Rf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(Rf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(Rf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(Rf.default.searchByValue)),e.set(V.SEARCH,new Z(Eye)),e.set(V.SQL,new Z(_ye)),e.set(V.CSV_DATA_LOAD,new Z(Qs,cE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(Qs,cE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(Qs,cE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(Qs,cE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(co.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(co.default.createSchema)),e.set(V.CREATE_TABLE,new Z(co.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(co.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(co.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(co.default.dropSchema)),e.set(V.DROP_TABLE,new Z(co.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(co.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(lE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(lE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(lE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(lE.default.describeAll)),e.set(V.DELETE,new Z(Af.default.deleteRecord)),e.set(V.ADD_USER,new Z(yf.default.addUser)),e.set(V.ALTER_USER,new Z(yf.default.alterUser)),e.set(V.DROP_USER,new Z(yf.default.dropUser)),e.set(V.LIST_USERS,new Z(yf.default.listUsersExternal)),e.set(V.LIST_ROLES,new Z(uE.default.listRoles)),e.set(V.ADD_ROLE,new Z(uE.default.addRole)),e.set(V.ALTER_ROLE,new Z(uE.default.alterRole)),e.set(V.DROP_ROLE,new Z(uE.default.dropRole)),e.set(V.USER_INFO,new Z(yf.default.userInfo)),e.set(V.READ_LOG,new Z(i2.default)),e.set(V.ADD_NODE,new Z(o2.default)),e.set(V.UPDATE_NODE,new Z(AL.default)),e.set(V.SET_NODE_REPLICATION,new Z(AL.default)),e.set(V.REMOVE_NODE,new Z(a2.default)),e.set(V.CONFIGURE_CLUSTER,new Z(c2.default)),e.set(V.PURGE_STREAM,new Z(l2.default)),e.set(V.SET_CONFIGURATION,new Z(NL.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(u2.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(d2.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(Ly.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(Ly.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(Ly.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(Qs,bL.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(su.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(su.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(su.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(su.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(su.default.removeCertificate)),e.set(V.GET_KEY,new Z(su.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(hO)),e.set(V.REMOVE_NODE_BACK,new Z(EO)),e.set(V.DELETE_FILES_BEFORE,new Z(Qs,Af.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(Qs,Af.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(Qs,bL.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(My.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(My.default.handleGetJob)),e.set(V.RESTART,new Z(IL.default.restart)),e.set(V.RESTART_SERVICE,new Z(Qs,IL.default.restartService)),e.set(V.CATCHUP,new Z(Sye)),e.set(V.SYSTEM_INFORMATION,new Z(p2.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(Qs,Af.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(s2.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(kN)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(HN)),e.set(V.LOGIN,new Z(nP)),e.set(V.LOGOUT,new Z(sP)),e.set(V.GET_CONFIGURATION,new Z(NL.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(Ot.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(Ot.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(Ot.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(Ot.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(Ot.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(Ot.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(Ot.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(Ot.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(Ot.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(Ot.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(Ot.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(Ot.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(CL.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(Qs,CL.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(OL.default.installModules)),e.set(V.AUDIT_NODE_MODULES,new Z(OL.default.auditModules)),e.set(V.GET_BACKUP,new Z(co.default.getBackup)),e.set(V.ADD_SSH_KEY,new Z(Ot.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(Ot.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(Ot.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(Ot.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(Ot.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(Ot.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(hP)),e.set(V.LIST_METRICS,new Z(EP)),e.set(V.DESCRIBE_METRIC,new Z(_P)),e.set(V.GET_STATUS,new Z(IP)),e.set(V.SET_STATUS,new Z(wP)),e.set(V.CLEAR_STATUS,new Z(bP)),e.set(V.INSTALL_USAGE_LICENSE,new Z(DP)),e.set(V.GET_USAGE_LICENSES,new Z(xP)),e}var Rf,Dy,cE,co,lE,Af,s2,yf,uE,Ot,dE,i2,o2,AL,a2,c2,l2,u2,d2,Ly,bL,f2,My,Js,IL,PL,iu,m2,p2,wL,NL,CL,OL,h2,E2,su,_2,g2,r2,An,hye,Eye,_ye,gye,n2,fP=ie(()=>{Rf=w(dn()),Dy=w(_y()),cE=w(pL()),co=w(mh()),lE=w(Za()),Af=w(Va()),s2=w($C()),yf=w(cs()),uE=w(xp()),Ot=w(uP()),dE=w(j()),i2=w(zC()),o2=w(IT()),AL=w(yO()),a2=w(NT()),c2=w(bO()),l2=w(IO()),u2=w(CO()),d2=w(PO()),Ly=w(DT()),bL=w(_L()),f2=w(hy()),My=w(TL());H();Js=w(_e()),IL=w(df()),PL=w(require("util")),iu=w(ln()),m2=w(mi()),p2=w(Zd()),wL=w(Xj());Pd();zT();NL=w(At()),CL=w(ny()),OL=w(Hh()),h2=w(oi()),E2=w(oe());xr();su=w(ms());tf();SP();_2=w(nL()),g2=w(e2());zh();Xh();t2();({HTTP_STATUS_CODES:r2}=Js.hdbErrors),An=dE.default.loggerWithTag("operation"),{transactToClusteringUtils:hye}=g2.default,Eye=PL.promisify(Rf.default.search),_ye=PL.promisify(Dy.default.evaluateSQL),gye={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};o(S2,"processLocalTransaction");n2=Tye();Ue.operation=LL;o(T2,"chooseOperation");o(y2,"getOperationFunction");(0,h2._assignPackageExport)("operation",LL);o(LL,"operation");o(Sye,"catchup");o(Qs,"executeJob");o(Tye,"initializeOperationFunctionMap")});var xy=D((RHe,b2)=>{"use strict";var vy=(H(),M(Y)),yye=oe(),fE=j(),{handleHDBError:DL,hdbErrors:Uy}=_e(),{isMainThread:Rye}=require("worker_threads"),{Readable:Aye}=require("stream"),R2=require("os"),bye=require("util"),Iye=GN(),wye=bye.promisify(Iye.authorize),A2=(fP(),M(dP)),{createGzip:Nye,constants:Cye}=require("zlib"),Oye=[vy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,vy.OPERATIONS_ENUM.LOGIN,vy.OPERATIONS_ENUM.LOGOUT];function Pye(e){let t=`Found an uncaught exception with message: ${e.message}. ${R2.EOL}Stack: ${e.stack} ${R2.EOL}Terminating ${Rye?"HDB":"thread"}.`;console.error(t),fE.fatal(t),process.exit(1)}o(Pye,"handleServerUncaughtException");function Lye(e,t,r){if(fE[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:Uy.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(Lye,"serverErrorHandler");function Dye(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=DL(new Error,"Invalid JSON.",Uy.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(yye.isEmpty(e.body.operation)){let n=DL(new Error,"Request body must include an 'operation' property.",Uy.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(Dye,"reqBodyValidationHandler");function Mye(e,t,r){let n;!Oye.includes(e.body.operation)||e.body.operation===vy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?wye(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{fE.warn(i),fE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(DL(i,a,Uy.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(Mye,"authHandler");async function vye(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=A2.chooseOperation(e.body);let s=await A2.processLocalTransaction(e,n);if(s instanceof Aye&&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(Nye({level:Cye.Z_BEST_SPEED})))}return s}catch(s){throw fE.error(s),s}}o(vye,"handlePostRequest");b2.exports={authHandler:Mye,handlePostRequest:vye,handleServerUncaughtException:Pye,serverErrorHandler:Lye,reqBodyValidationHandler:Dye}});var C2=D((bHe,N2)=>{"use strict";var Uye=require("fastify-plugin"),{handlePostRequest:I2,authHandler:xye,reqBodyValidationHandler:Bye}=xy();async function Fye(e){e.decorate("hdbCore",{preValidation:[Bye,xye],request:o(t=>w2(I2(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>w2(I2(t,r,!0)),"requestWithoutAuthentication")})}o(Fye,"hdbCore");async function w2(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(w2,"convertAsyncIterators");N2.exports=Uye(Fye)});var P2=D((NHe,O2)=>{"use strict";var wHe=require("fs"),By=ae();By.initSync();var{CONFIG_PARAMS:ML}=(H(),M(Y)),kye=1024*1024*1024;function Hye(e){let t=By.get(ML.HTTP_TIMEOUT),r=By.get(ML.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:kye,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:By.get(ML.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(Hye,"getServerOptions");O2.exports=Hye});var M2=D((OHe,D2)=>{"use strict";var vL=ae();vL.initSync();var{CONFIG_PARAMS:L2}=(H(),M(Y));function qye(){let e=vL.get(L2.HTTP_CORSACCESSLIST),t=vL.get(L2.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(qye,"getCORSOptions");D2.exports=qye});var x2=D((LHe,U2)=>{"use strict";var v2=ae();v2.initSync();var Gye=(H(),M(Y));function $ye(){return v2.get(Gye.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o($ye,"getHeaderTimeoutConfig");U2.exports=$ye});var xL={};Ie(xL,{customFunctionsServer:()=>Yye,ready:()=>Q2,start:()=>Kye});function Kye(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){ca||(ca=j2(t),Ue.http((await ca).server));let a=await ca,c=(0,UL.dirname)(s),l=(0,UL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!B2.has(c)){B2.add(c);try{a.register(zye(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:Q2}}async function Yye(){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 Wye();let e=$2.get(B.HTTP_SECUREPORT)>0,t;try{t=ca=await j2(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 Wye(){try{St.info("Custom Functions starting configuration."),await V2.setUsersWithRolesCache(),St.info("Custom Functions completed configuration.")}catch(e){St.error(e)}}function zye(e,t){return async function(r){try{St.info("Custom Functions starting buildRoutes"),St.trace("Loading fastify routes folder "+e),(0,F2.existsSync)(e)&&r.register(G2.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 j2(e){St.info("Custom Functions starting buildServer.");let t=(0,K2.default)(e),r=(0,k2.default)(t);r.server.headersTimeout=(0,W2.default)(),r.setErrorHandler(z2.serverErrorHandler);let n=(0,Y2.default)();return n&&r.register(H2.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(q2.default),await r.register(Vye),await r.after(),Tm(r),St.info("Custom Functions completed buildServer."),r}function Q2(){if(ca)return ca.then?ca.then(e=>e.ready()):ca.ready()}var UL,F2,k2,H2,q2,G2,$2,St,Vye,V2,K2,Y2,W2,z2,ca,B2,J2=ie(()=>{UL=require("path"),F2=require("fs"),k2=w(require("fastify")),H2=w(require("@fastify/cors")),q2=w(UN()),G2=w(require("@fastify/autoload")),$2=w(ae());H();St=w(j()),Vye=w(C2()),V2=w(cs()),K2=w(P2()),Y2=w(M2()),W2=w(x2()),z2=w(xy());Po();xr();B2=new Set;o(Kye,"start");o(Yye,"customFunctionsServer");o(Wye,"setUp");o(zye,"buildRouteFolder");o(j2,"buildServer");o(Q2,"ready")});var FL={};Ie(FL,{handleApplication:()=>jye,suppressHandleApplicationWarning:()=>Qye});function jye(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,If.join)(n.absolutePath,"index.html");(0,bf.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,If.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,If.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,BL.default)(n,(0,bf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(Jye(c),!c)return{status:404,body:"File not found"};let l=(0,If.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,bf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,BL.default)(n,(0,bf.realpathSync)(l))}},{runFirst:!0})}function Jye(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 bf,If,BL,Qye,X2=ie(()=>{bf=require("node:fs"),If=require("node:path"),BL=w(require("send"));o(jye,"handleApplication");Qye=!0;o(Jye,"validateNotFoundOption")});var kL={};Ie(kL,{start:()=>Xye});function Xye({override:e}){return{handleFile:o((t,r,n)=>{Fy.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,Z2.parse)(t))){if(process.env[s]!==void 0)if(Fy.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)Fy.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var Z2,Fy,eQ=ie(()=>{Z2=require("dotenv"),Fy=w(j());o(Xye,"start")});var HL={};Ie(HL,{DataLoaderError:()=>gs,DataLoaderResult:()=>wf,EmptyFileError:()=>qy,FileParseError:()=>Hy,InvalidPropertyTypeError:()=>Gy,MissingRequiredPropertyError:()=>mE,RecordProcessingError:()=>pE,SystemDatabaseError:()=>$y,UnsupportedFileExtensionError:()=>ky,handleApplication:()=>eRe,loadDataFile:()=>iQ,suppressHandleApplicationWarning:()=>Zye});function eRe(e){if((0,rQ.getWorkerIndex)()!==0){lo.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||iQ(t,hn,Me).then(r=>{lo.debug?.("Data loader processed file: %s: %s",(0,la.basename)(t.absolutePath),r.message)})})}async function iQ({contents:e,absolutePath:t,stats:r},n,s){let i=(0,la.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,tQ.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new ky(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof gs?f:new Hy(t,f)}if(!a)throw new qy(t);let{database:c,table:l,records:u}=a;if(!l)throw new mE(t,"table");if(!u)throw new mE(t,"records");if(!Array.isArray(u))throw new Gy(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new $y(c,l);try{let f;if(c&&s[c]&&s[c][l])lo.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])lo.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{lo.debug?.(`Table ${d} not found, creating new table`);let A=[];if(u.length>0){let S=u[0];Object.keys(S).map(R=>{let N={name:R,type:typeof S[R]};return R==="id"&&(N.isPrimaryKey=!0),N}).forEach(R=>{A.push(R)})}f=await Ze({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),R=[];for(let N of S)R.push(async()=>{try{let O=null,F=N.id;if(F!==void 0&&(O=await f.get(F)),!O)return p++,f.put(N);let ee=O.getUpdatedTime();return a.mtime>ee?(h++,f.put(N)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof gs)lo.error?.(`Record processing error: ${O.message}`);else{let F=new pE(d,O);lo.error?.(`Record processing error: ${F.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(R.map(N=>N()))}if(p>0||h>0){let A=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(A+=` (${E} records skipped)`),lo.info?.(A),new wf(t,c,l,"success",p+h,A)}else if(E>0){let A=`All ${E} records in ${d} already up-to-date`;return lo.info?.(A),new wf(t,c,l,"skipped",m,A)}else{let A=`No records to process in ${d}`;return lo.info?.(A),new wf(t,c,l,"success",0,A)}}catch(f){throw f instanceof gs?f:new pE(d,f)}}var la,tQ,rQ,ua,nQ,sQ,lo,Zye,gs,ky,Hy,qy,mE,Gy,$y,pE,wf,oQ=ie(()=>{la=require("node:path"),tQ=require("yaml");Oe();rQ=w(Je()),ua=w(Kr()),nQ=w(_e()),sQ=w(j()),lo=sQ.default.forComponent("dataLoader"),Zye=!0;o(eRe,"handleApplication");o(iQ,"loadDataFile");gs=class extends nQ.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=ua.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},ky=class extends gs{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,la.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},Hy=class extends gs{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,la.basename)(t)}: ${r.message}`,ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},qy=class extends gs{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,la.basename)(t)} is empty or invalid`,ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},mE=class extends gs{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,la.basename)(t)} is missing required "${r}" property`,ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},Gy=class extends gs{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,la.basename)(t)} has invalid "${r}" property, expected ${n}`,ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},$y=class extends gs{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,ua.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},pE=class extends gs{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,ua.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},wf=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 GL=D(($He,aQ)=>{"use strict";var hE=ae();hE.initSync();var Nf=require("fs-extra"),qL=require("path"),Cf=(H(),M(Y)),tRe=require("crypto"),rRe=require("uuid").v4;aQ.exports=nRe;function nRe(){if(hE.getHdbBasePath()!==void 0){let e=qL.join(hE.getHdbBasePath(),Cf.LICENSE_KEY_DIR_NAME,Cf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=qL.join(hE.getHdbBasePath(),Cf.LICENSE_KEY_DIR_NAME,Cf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=qL.join(hE.getHdbBasePath(),Cf.LICENSE_KEY_DIR_NAME,Cf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Nf.accessSync(r),Nf.accessSync(e),Nf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=rRe(),i=tRe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Nf.writeFileSync(r,s),Nf.writeFileSync(e,i.privateKey),Nf.writeFileSync(t,i.publicKey)}else throw n}}}o(nRe,"checkJWTTokenExist")});var lQ=D((KHe,cQ)=>{"use strict";var $L=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};cQ.exports={HdbInfoInsertObject:$L}});var fQ=D((WHe,dQ)=>{"use strict";var uQ=(H(),M(Y)),VL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[uQ.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[uQ.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};dQ.exports={UpgradeObject:VL}});var Vy=D((jHe,pQ)=>{"use strict";var Xs=require("prompt"),Of=require("chalk"),mQ=j(),Oi=require("os"),KL=$c(),YL=["yes","y"];async function sRe(e){let t=`${Oi.EOL}`+Of.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Oi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Oi.EOL}${Oi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Oi.EOL}`;Xs.override=KL(["CONFIRM_UPGRADE"]),Xs.start(),Xs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Of.magenta(`${Oi.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Xs.get([r])}catch(s){return mQ.error("There was an error when prompting user about an upgrade."),mQ.error(s),!1}return YL.includes(n.CONFIRM_UPGRADE)}o(sRe,"forceUpdatePrompt");async function iRe(e){let t=`${Oi.EOL}`+Of.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Oi.EOL}`);Xs.override=KL(["CONFIRM_DOWNGRADE"]),Xs.start(),Xs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Of.magenta(`${Oi.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Xs.get([r]);return YL.includes(n.CONFIRM_DOWNGRADE)}o(iRe,"forceDowngradePrompt");async function oRe(){let e=`${Oi.EOL}`+Of.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");Xs.override=KL(["GENERATE_CERTS"]),Xs.start(),Xs.message=e;let t={properties:{GENERATE_CERTS:{description:Of.magenta(`${Oi.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Xs.get([t]);return YL.includes(r.GENERATE_CERTS)}o(oRe,"upgradeCertsPrompt");pQ.exports={forceUpdatePrompt:sRe,forceDowngradePrompt:iRe,upgradeCertsPrompt:oRe}});var Ky=D((JHe,hQ)=>{"use strict";var WL=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};hQ.exports=WL});var _Q=D((nqe,EQ)=>{"use strict";var aRe=oe(),cRe=At(),ZHe=j(),eqe=require("path"),tqe=require("fs"),rqe=(H(),M(Y));EQ.exports={getOldPropsValue:lRe};function lRe(e,t,r=!1){let n=t.getRaw(e);return aRe.isNotEmptyAndHasValue(n)?n:r?cRe.getDefaultConfig(e):""}o(lRe,"getOldPropsValue")});var yQ=D((iqe,TQ)=>{"use strict";var Rc=require("path"),Ac=require("fs-extra"),uRe=require("properties-reader"),dRe=Ky(),Sr=j(),{getOldPropsValue:Tt}=_Q(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:ou}=(H(),M(Y)),au=At(),Yy=ae(),gQ=oe(),uo=(H(),M(Y)),zL=new dRe("3.1.0"),SQ=[];function fRe(){let e=uRe(Yy.get(Se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Sr.info(t);let r=` ;Settings for the HarperDB process.
|
|
39
|
+
`}getKey(){return(0,uy.createPublicKey)(this.pem)}toString(){return this.pem}},cy=class extends TypeError{static{o(this,"LicenseEncodingError")}},hf=class extends TypeError{static{o(this,"InvalidLicenseError")}},OP=class extends hf{static{o(this,"InvalidLicenseSignatureError")}},Jh=class extends hf{static{o(this,"InvalidHeaderError")}},ly=class extends hf{static{o(this,"InvalidPayloadError")}},kge=new CP(fz.get(B.LICENSE_MODE));o(Hge,"validateLicenseSignature");o(qge,"validateLicenseHeader");o(Gge,"valid");o($ge,"validateLicensePayload");o(mz,"validateLicense")});var dy={};Ie(dy,{getActiveLicense:()=>vP,getUsageLicenses:()=>bz,getUsageLicensesOp:()=>xP,installUsageLicense:()=>MP,installUsageLicenseOp:()=>DP,isActiveLicense:()=>Rz,isLicensed:()=>UP,loadAndWatchLicensesDir:()=>Yge,recordUsage:()=>Az});async function DP(e){let t=e.license;try{await MP(t)}catch(r){let n=new _z.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function MP(e){let t=mz(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new LP(`A usage license with ${r} already exists`);return en.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function Rz(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 vP(){let e=gz.get(B.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=Me.system.hdb_license?.search(t);for await(let n of r??[])if(Rz(n))return n}async function UP(){return await vP()!==void 0}async function Az(e){en.trace?.("Recording usage into license from analytics");let t,r=(await vP())?.id;if(r){en.trace?.("Found license to record usage into:",r);let n={};At(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(en.trace?.("Processing analytics record:",s),s.metric){case"db-read":en.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":en.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":en.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(en.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count));break;default:en.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";hz||(console.error(n),hz=!0),Ez===void 0&&(Ez=setInterval(()=>{en.notify(n)},Vge).unref())}}function xP(e){let t={};return e.region&&(t.region=e.region),bz(t)}function bz(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),Me.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function Kge(e){en.trace?.("Loading usage license from file:",e);let t=await Tz.readFile(e,{encoding:"utf-8"});try{await MP(t)}catch(r){en.error?.("Failed to install usage license from file:",e,r)}}function Yge(){let e=PP.default.join(PP.default.dirname(Sz.getConfigFilePath()),"licenses");(0,yz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:o((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",Kge)}var _z,en,gz,PP,Sz,Tz,yz,LP,hz,Ez,Vge,Xh=ie(()=>{pz();_z=w(_e()),en=w(j());Os();Ca();gz=w(ae());H();Oe();PP=w(require("node:path")),Sz=w(bt()),Tz=w(require("node:fs/promises")),yz=require("chokidar"),LP=class extends Error{static{o(this,"ExistingLicenseError")}};o(DP,"installUsageLicenseOp");o(MP,"installUsageLicense");hz=!1,Vge=6e5;o(Rz,"isActiveLicense");o(vP,"getActiveLicense");o(UP,"isLicensed");o(Az,"recordUsage");wb(Az);o(xP,"getUsageLicensesOp");o(bz,"getUsageLicenses");o(Kge,"loadLicenseFile");o(Yge,"loadAndWatchLicensesDir")});var FP={};Ie(FP,{getRegistrationInfo:()=>BP});function BP(){return{version:Iz.packageJson.version,deprecated:!0}}var Iz,kP=ie(()=>{Iz=w(yt());o(BP,"getRegistrationInfo")});var Nz=M((Bke,wz)=>{"use strict";var HP=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}};wz.exports=HP});var Oz=M((kke,Cz)=>{"use strict";var qP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};Cz.exports=qP});var $P=M((qke,Lz)=>{"use strict";var Pz=Nz(),Wge=Oz(),{HDB_ERROR_MSGS:zge}=Kr(),GP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=zge.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 Pz(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Wge(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 Pz(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}};Lz.exports=GP});var hy=M(($ke,jz)=>{"use strict";var VP=ln(),fy=dn(),Ws=mh(),tE=Za(),KP=Va(),jge=$C(),Qge=O1(),rE=cs(),my=xp(),Or=j(),Jge=zC(),Xge=IT(),Zge=yO(),eSe=NT(),tSe=bO(),rSe=IO(),nSe=CO(),sSe=PO(),YP=DT(),aa=oe(),iSe=aY(),vz=df(),Rn=(H(),D(Y)),Uz=lW(),oSe=Zd(),xz=(Pd(),D($p)),Bz=(zT(),D(xh)),Fz=bt(),Er=uP(),aSe=require("alasql"),kz=ny(),Hz=Hh(),Ef=ms(),qz=(tf(),D(ef)),WP=(SP(),D(gP)),zP=(zh(),D(NP)),Gz=(Xh(),D(dy)),cSe=(kP(),D(FP)),$z=$P(),{handleHDBError:Vn,hdbErrors:Vz}=_e(),{HDB_ERROR_MSGS:tn,HTTP_STATUS_CODES:Zh}=Vz,ee=new Map,Kz="delete",Sc="insert",zs="read",Zl="update",eE="describe",Dz=tE.describeSchema.name,Mz=tE.describeTable.name,Yz={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},lSe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},uSe="catchup",dSe="handleGetJob",fSe="handleGetJobsByStartDate",py={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},mSe=[Ws.createTable.name,Ws.createAttribute.name,Ws.dropTable.name,Ws.dropAttribute.name],Wz={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},se=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};ee.set(VP.insert.name,new se(!1,[Sc]));ee.set(VP.update.name,new se(!1,[Zl]));ee.set(VP.upsert.name,new se(!1,[Sc,Zl]));ee.set(fy.searchByConditions.name,new se(!1,[zs]));ee.set(fy.searchByHash.name,new se(!1,[zs]));ee.set(fy.searchByValue.name,new se(!1,[zs]));ee.set(fy.search.name,new se(!1,[zs]));ee.set(Ws.createSchema.name,new se(!0,[]));ee.set(Ws.createTable.name,new se(!0,[]));ee.set(Ws.createAttribute.name,new se(!1,[Sc]));ee.set(Ws.dropSchema.name,new se(!0,[]));ee.set(Ws.dropTable.name,new se(!0,[]));ee.set(Ws.dropAttribute.name,new se(!0,[]));ee.set(tE.describeSchema.name,new se(!1,[zs]));ee.set(tE.describeTable.name,new se(!1,[zs]));ee.set(KP.deleteRecord.name,new se(!1,[Kz]));ee.set(rE.addUser.name,new se(!0,[]));ee.set(rE.alterUser.name,new se(!0,[]));ee.set(rE.dropUser.name,new se(!0,[]));ee.set(rE.listUsersExternal.name,new se(!0,[]));ee.set(my.listRoles.name,new se(!0,[]));ee.set(my.addRole.name,new se(!0,[]));ee.set(my.alterRole.name,new se(!0,[]));ee.set(my.dropRole.name,new se(!0,[]));ee.set(Jge.name,new se(!0,[]));ee.set(Xge.name,new se(!0,[]));ee.set(Zge.name,new se(!0,[]));ee.set(eSe.name,new se(!0,[]));ee.set(tSe.name,new se(!0,[]));ee.set(rSe.name,new se(!0,[]));ee.set(YP.setRoutes.name,new se(!0,[]));ee.set(YP.getRoutes.name,new se(!0,[]));ee.set(YP.deleteRoutes.name,new se(!0,[]));ee.set(Fz.setConfiguration.name,new se(!0,[]));ee.set(nSe.clusterStatus.name,new se(!0,[]));ee.set(sSe.name,new se(!0,[]));ee.set(KP.deleteFilesBefore.name,new se(!0,[]));ee.set(KP.deleteAuditLogsBefore.name,new se(!0,[]));ee.set(vz.restart.name,new se(!0,[]));ee.set(vz.restartService.name,new se(!0,[]));ee.set(jge.name,new se(!0,[]));ee.set(Qge.name,new se(!0,[zs]));ee.set(oSe.systemInformation.name,new se(!0,[]));ee.set(Fz.getConfiguration.name,new se(!0,[]));ee.set(kz.readTransactionLog.name,new se(!0,[]));ee.set(kz.deleteTransactionLogsBefore.name,new se(!0,[]));ee.set(Hz.installModules.name,new se(!0,[]));ee.set(Hz.auditModules.name,new se(!0,[]));ee.set(Ef.createCsr.name,new se(!0,[]));ee.set(Ef.signCertificate.name,new se(!0,[]));ee.set(Ef.listCertificates.name,new se(!0,[]));ee.set(Ef.addCertificate.name,new se(!0,[]));ee.set(Ef.removeCertificate.name,new se(!0,[]));ee.set(Ef.getKey.name,new se(!0,[]));ee.set(qz.addNodeBack.name,new se(!0,[]));ee.set(qz.removeNodeBack.name,new se(!0,[]));ee.set(WP.getOp.name,new se(!1,[zs]));ee.set(WP.listMetricsOp.name,new se(!1,[zs]));ee.set(WP.describeMetricOp.name,new se(!1,[zs]));ee.set(zP.clear.name,new se(!0,[]));ee.set(zP.get.name,new se(!0,[]));ee.set(zP.set.name,new se(!0,[]));ee.set(Gz.installUsageLicenseOp.name,new se(!0,[]));ee.set(Gz.getUsageLicensesOp.name,new se(!0,[]));ee.set(xz.createTokens.name,new se(!1,[]));ee.set(xz.refreshOperationToken.name,new se(!1,[]));ee.set(Bz.login.name,new se(!1,[]));ee.set(Bz.logout.name,new se(!1,[]));ee.set(Er.customFunctionsStatus.name,new se(!0,[]));ee.set(Er.getCustomFunctions.name,new se(!0,[]));ee.set(Er.getComponents.name,new se(!0,[]));ee.set(Er.getComponentFile.name,new se(!0,[]));ee.set(Er.setComponentFile.name,new se(!0,[]));ee.set(Er.dropComponent.name,new se(!0,[]));ee.set(Er.getCustomFunction.name,new se(!0,[]));ee.set(Er.setCustomFunction.name,new se(!0,[]));ee.set(Er.dropCustomFunction.name,new se(!0,[]));ee.set(Er.addComponent.name,new se(!0,[]));ee.set(Er.dropCustomFunctionProject.name,new se(!0,[]));ee.set(Er.packageComponent.name,new se(!0,[]));ee.set(Er.deployComponent.name,new se(!0,[]));ee.set(Er.addSSHKey.name,new se(!0,[]));ee.set(Er.updateSSHKey.name,new se(!0,[]));ee.set(Er.deleteSSHKey.name,new se(!0,[]));ee.set(Er.listSSHKeys.name,new se(!0,[]));ee.set(Er.setSSHKnownHosts.name,new se(!0,[]));ee.set(Er.getSSHKnownHosts.name,new se(!0,[]));ee.set(cSe.getRegistrationInfo.name,new se(!1,[]));ee.set(rE.userInfo.name,new se(!1,[]));ee.set(tE.describeAll.name,new se(!1,[]));ee.set(dSe,new se(!1,[]));ee.set(fSe,new se(!0,[]));ee.set(uSe,new se(!0,[]));ee.set(py.CSV_DATA_LOAD,new se(!1,[Sc,Zl]));ee.set(py.CSV_URL_LOAD,new se(!1,[Sc,Zl]));ee.set(py.CSV_FILE_LOAD,new se(!1,[Sc,Zl]));ee.set(py.IMPORT_FROM_S3,new se(!1,[Sc,Zl]));ee.set(Wz.EXPORT_TO_S3,new se(!0,[]));ee.set(Wz.EXPORT_LOCAL,new se(!0,[]));ee.set(Rn.VALID_SQL_OPS_ENUM.DELETE,new se(!1,[Kz]));ee.set(Rn.VALID_SQL_OPS_ENUM.SELECT,new se(!1,[zs]));ee.set(Rn.VALID_SQL_OPS_ENUM.INSERT,new se(!1,[Sc]));ee.set(Rn.VALID_SQL_OPS_ENUM.UPDATE,new se(!1,[Zl]));jz.exports={verifyPerms:hSe,verifyPermsAst:pSe,verifyBulkLoadAttributePerms:_Se};function pSe(e,t,r){if(aa.isEmptyOrZeroLength(e))throw Or.info("verify_perms_ast has an empty user parameter"),Vn(new Error);if(aa.isEmptyOrZeroLength(t))throw Or.info("verify_perms_ast has an empty user parameter"),Vn(new Error);if(aa.isEmptyOrZeroLength(r))throw Or.info("verify_perms_ast has a null operation parameter"),Vn(new Error);try{let n=new $z,s=new iSe(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&&Yz[r])throw Vn(new Error,tn.DROP_SYSTEM,Zh.FORBIDDEN);if(c&&!l)return null;let u=Uz.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof aSe.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=zz(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=QP(t.role.permission,m,f[p]);jP(h,E,r,f[p],m,n)}}),n.getPermsResponse())}catch(n){throw Vn(n)}}o(pSe,"verifyPermsAst");function hSe(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,Zh.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 $z;if(aa.isEmptyOrZeroLength(e.hdb_user?.role)||aa.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&&lSe[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&&Yz[r])throw Vn(new Error,tn.DROP_SYSTEM,Zh.FORBIDDEN);if(l&&!d||u===!0&&(r===Ws.createSchema.name||r===Ws.dropSchema.name))return null;if(mSe.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=Uz.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===Dz||r===Mz)&&!f.super_user){if(s===Rn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(tn.SCHEMA_PERM_ERROR(s));if(r===Dz&&(!f[s]||!f[s][eE]))return c.handleInvalidItem(tn.SCHEMA_NOT_FOUND(s));if(r===Mz&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][eE]))return c.handleInvalidItem(tn.TABLE_NOT_FOUND(s,i))}let m=zz(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=ESe(e),h=QP(e.hdb_user?.role?.permission,s,i);return jP(p,h,r,i,s,c,n),c.getPermsResponse()}o(hSe,"verifyPerms");function zz(e,t,r,n,s){if(aa.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),Zh.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][eE]===!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[eE]===!1)n.addInvalidItem(tn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!aa.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(Vz.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(zz,"hasPermissions");function jP(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(aa.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[eE]===!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!==zs)throw Vn(new Error,tn.SYSTEM_TIMESTAMP_PERMS_ERR,Zh.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(jP,"checkAttributePerms");function ESe(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(ESe,"getRecordAttributes");function QP(e,t,r){let n=new Map;if(aa.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(QP,"getAttributePermissions");function _Se(e,t,r,n,s,i,a){let c=new Set(i),l=QP(e,n,s);jP(c,l,t,s,n,a,r)}o(_Se,"verifyBulkLoadAttributePerms")});var _y=M((Kke,ej)=>{"use strict";ej.exports={evaluateSQL:PSe,processAST:Zz,convertSQLToAST:Xz,checkASTPermissions:Jz};var gSe=ln(),Qz=require("util"),SSe=Qz.callbackify(gSe.insert),TSe=dn().search,ySe=n$().update,RSe=Qz.callbackify(ySe),ASe=i$().convertDelete,Tc=require("alasql"),bSe=hy(),Ey=j(),ISe=Ug(),wSe=oe(),nE=(H(),D(Y)),{hdbErrors:NSe,handleHDBError:JP}=_e(),{HTTP_STATUS_CODES:XP}=NSe;ISe(Tc);var CSe=403,OSe="There was a problem performing this insert. Please check the logs and try again.",ZP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function PSe(e,t){let r=e.parsed_sql_object;if(!r){r=Xz(e.sql);let n,s=r.ast.statements[0];if(s instanceof Tc.yy.Insert?n=s.into.databaseid:s instanceof Tc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Tc.yy.Update||s instanceof Tc.yy.Delete?n=s.table.databaseid:Ey.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Tc.yy.Select)&&wSe.isEmptyOrZeroLength(n))return t("No schema specified",null)}Zz(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(PSe,"evaluateSQL");function Jz(e,t){let r;try{r=bSe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(Jz,"checkASTPermissions");function Xz(e){let t=new ZP;if(!e)throw JP(new Error,"The 'sql' parameter is missing from the request body",XP.BAD_REQUEST);try{let r=e.trim(),n=Tc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
40
|
+
`);throw n[1]?JP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,XP.BAD_REQUEST):JP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",XP.BAD_REQUEST)}return t}o(Xz,"convertSQLToAST");function Zz(e,t,r){try{let n=LSe;if(!e.bypass_auth&&!t.permissions_checked){let i=Jz(e,t);if(i&&i.length>0)return r(CSe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case nE.VALID_SQL_OPS_ENUM.SELECT:n=TSe,s=t.ast.statements[0];break;case nE.VALID_SQL_OPS_ENUM.INSERT:n=DSe;break;case nE.VALID_SQL_OPS_ENUM.UPDATE:n=RSe;break;case nE.VALID_SQL_OPS_ENUM.DELETE:n=ASe;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(Zz,"processAST");function LSe(e,t){Ey.info(e),t("unknown sql statement")}o(LSe,"nullFunction");function DSe({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=MSe(i,e.values)}catch(a){return r(a)}SSe(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){Ey.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(DSe,"convertInsert");function MSe(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=Tc.compile(`SELECT ${s.toString()} AS [${nE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Ey.error(r),new Error(OSe)}}o(MSe,"createDataObjects")});var iL=M((jke,sj)=>{var yy=require("clone"),Ry=at(),vSe=oe(),Sy=(H(),D(Y)),Wke=j(),eL=require("fs"),rL=require("joi"),{string:Ty}=rL.types(),{hdbErrors:USe,handleHDBError:gy}=_e(),{HDB_ERROR_MSGS:zke,HTTP_STATUS_CODES:tL}=USe,{commonValidators:_f}=Gi(),tj=" is required",xSe=["insert","update","upsert"],nL={database:{presence:!1,format:_f.schema_format,length:_f.schema_length},schema:{presence:!1,format:_f.schema_format,length:_f.schema_length},table:{presence:!0,format:_f.schema_format,length:_f.schema_length},action:{inclusion:{within:xSe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},BSe={schema:Ty.required(),table:Ty.required(),action:Ty.valid("insert","update","upsert")},{AWS_ACCESS_KEY:FSe,AWS_SECRET:kSe,AWS_BUCKET:HSe,AWS_FILE_KEY:qSe,REGION:GSe}=Sy.S3_BUCKET_AUTH_KEYS,$Se={s3:{presence:!0},[`s3.${FSe}`]:{presence:!0,type:"String"},[`s3.${kSe}`]:{presence:!0,type:"String"},[`s3.${HSe}`]:{presence:!0,type:"String"},[`s3.${qSe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${GSe}`]:{presence:!0,type:"String"}},rj=yy(nL);rj.data.presence={message:tj};var nj=yy(nL);nj.file_path.presence={message:tj};var VSe=Object.assign(yy(nL),$Se),sL=yy(BSe);sL.csv_url=Ty.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();sL.passthrough_headers=rL.object();function KSe(e){let t=Ry.validateObject(e,rj);return Ay(e,t)}o(KSe,"dataObject");function YSe(e){let t=Ry.validateBySchema(e,rL.object(sL));return Ay(e,t)}o(YSe,"urlObject");function WSe(e){let t=Ry.validateObject(e,nj);return Ay(e,t)}o(WSe,"fileObject");function zSe(e){let t=Ry.validateObject(e,VSe);return Ay(e,t)}o(zSe,"s3FileObject");function Ay(e,t){if(!t){let r=vSe.checkGlobalSchemaTable(e.schema,e.table);if(r)return gy(new Error,r,tL.BAD_REQUEST);if(e.operation===Sy.OPERATIONS_ENUM.CSV_FILE_LOAD)try{eL.accessSync(e.file_path,eL.constants.R_OK|eL.constants.F_OK)}catch(n){return n.code===Sy.NODE_ERROR_CODES.ENOENT?gy(n,`No such file or directory ${n.path}`,tL.BAD_REQUEST):n.code===Sy.NODE_ERROR_CODES.EACCES?gy(n,`Permission denied ${n.path}`,tL.BAD_REQUEST):gy(n)}}return t}o(Ay,"postValidateChecks");sj.exports={dataObject:KSe,urlObject:YSe,fileObject:WSe,s3FileObject:zSe}});var oL=M((Jke,ij)=>{"use strict";var sE=j(),by=(H(),D(Y));async function jSe(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===by.OPERATIONS_ENUM.INSERT||t.operation===by.OPERATIONS_ENUM.UPDATE||t.operation===by.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===by.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(sE.info(i.message),i):i.http_resp_msg?(sE.error(`Error calling operation: ${e.name}`),sE.error(i.http_resp_msg),i):(sE.error(`Error calling operation: ${e.name}`),sE.error(i),i)}}o(jSe,"callOperationFunctionAsAwait");ij.exports={callOperationFunctionAsAwait:jSe}});var aL=M((Zke,aj)=>{"use strict";var{S3:QSe,GetObjectCommand:JSe}=require("@aws-sdk/client-s3");aj.exports={getFileStreamFromS3:XSe,getS3AuthObj:oj};async function XSe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await oj(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new JSe(r))).Body}o(XSe,"getFileStreamFromS3");function oj(e,t,r){return new QSe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(oj,"getS3AuthObj")});var lj=M((tHe,cj)=>{"use strict";var cL=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}},lL=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};cj.exports={BulkLoadFileObject:cL,BulkLoadDataObject:lL}});var dL=M((nHe,uj)=>{"use strict";var uL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};uj.exports=uL});var _L=M((lHe,Nj)=>{"use strict";var Iy=ln(),Ny=iL(),ZSe=require("needle"),wi=(H(),D(Y)),iHe=pt(),gf=oe(),{handleHDBError:Xt,hdbErrors:Sj}=_e(),{HTTP_STATUS_CODES:rn,HDB_ERROR_MSGS:Pr,CHECK_LOGS_WRAPPER:tu}=Sj,Sf=j(),fL=require("papaparse");gf.promisifyPapaParse();var Ni=require("fs-extra"),eTe=require("path"),{chain:dj}=require("stream-chain"),fj=require("stream-json/streamers/StreamArray"),mj=require("stream-json/utils/Batch"),pj=require("stream-chain/utils/comp"),{finished:hj}=require("stream"),tTe=ae(),Tj=oL(),rTe=aL(),{BulkLoadFileObject:pL,BulkLoadDataObject:nTe}=lj(),hL=$P(),{verifyBulkLoadAttributePerms:yj}=hy(),oHe=dL(),aHe=Ft(),cHe=zi(),{databases:sTe}=(Oe(),D(mt)),{coerceType:iTe}=(ng(),D(Lq)),Ej="No records parsed from csv file.",eu=`${tTe.get("HDB_ROOT")}/tmp`,{schemaRegex:oTe}=Gi(),_j=1024*1024*2,gj=5e3,aTe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Nj.exports={csvDataLoad:cTe,csvURLLoad:lTe,csvFileLoad:uTe,importFromS3:dTe};async function cTe(e,t){let r=Ny.dataObject(e);if(r)throw Xt(r,r.message,rn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=bj(e.schema,e.table),i=fL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:mL.bind(null,s),dynamicTyping:!1}),a=new hL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&yj(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 nTe(e.action,e.schema,e.table,i.data);return n=await Tj.callOperationFunctionAsAwait(Ij,l,null),n.message===Ej?Ej:wj(n.records,n.number_written)}catch(s){throw ru(s)}}o(cTe,"csvDataLoad");async function lTe(e){let t=Ny.urlObject(e);if(t)throw Xt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${eu}/${r}`;try{await fTe(e,r)}catch(s){throw Sf.error(Pr.DOWNLOAD_FILE_ERR(r)+" - "+s),Xt(s,tu(Pr.DOWNLOAD_FILE_ERR(r)))}try{let s=new pL(this.job_operation_function.name,e.action,e.schema,e.table,n,wi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await EL(s);return await wy(n),i}catch(s){throw await wy(n),ru(s)}}o(lTe,"csvURLLoad");async function uTe(e){let t=Ny.fileObject(e);if(t)throw Xt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=new pL(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,wi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await EL(r)}catch(n){throw ru(n)}}o(uTe,"csvFileLoad");async function dTe(e){let t=Ny.s3FileObject(e);if(t)throw Xt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=eTe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${eu}/${s}`;let i=new pL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await mTe(s,e);let a=await EL(i);return await wy(r),a}catch(n){throw await wy(r),ru(n)}}o(dTe,"importFromS3");async function fTe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await ZSe("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,wi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}hTe(r,e.csv_url),await pTe(t,r.raw)}o(fTe,"downloadCSVFile");async function mTe(e,t){try{let r=`${eu}/${e}`;await Ni.mkdirp(eu),await Ni.writeFile(`${eu}/${e}`,"",{flag:"a+"});let n=await Ni.createWriteStream(r),s=await rTe.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(){Sf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Sf.error(Pr.S3_DOWNLOAD_ERR+" - "+r),Xt(r,tu(Pr.S3_DOWNLOAD_ERR))}}o(mTe,"downloadFileFromS3");async function pTe(e,t){try{await Ni.mkdirp(eu),await Ni.writeFile(`${eu}/${e}`,t)}catch(r){throw Sf.error(Pr.WRITE_TEMP_FILE_ERR),Xt(r,tu(Pr.DEFAULT_BULK_LOAD_ERR))}}o(pTe,"writeFileToTempFolder");async function wy(e){if(e)try{await Ni.access(e),await Ni.unlink(e)}catch{Sf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(wy,"deleteTempFile");function hTe(e,t){if(e.statusCode!==Sj.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(!aTe[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(hTe,"validateURLResponse");async function EL(e){try{let t;switch(e.file_type){case wi.VALID_S3_FILE_TYPES.CSV:t=await ETe(e);break;case wi.VALID_S3_FILE_TYPES.JSON:t=await _Te(e);break;default:throw Xt(new Error,Pr.DEFAULT_BULK_LOAD_ERR,rn.BAD_REQUEST,wi.LOG_LEVELS.ERROR,Pr.INVALID_FILE_EXT_ERR(e))}return wj(t.records,t.number_written)}catch(t){throw ru(t)}}o(EL,"fileLoad");async function Rj(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 Iy.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&yj(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(Rj,"validateChunk");async function Aj(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;gf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!gf.isEmpty(c)&&!gf.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 Tj.callOperationFunctionAsAwait(Ij,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Xt(c,tu(Pr.INSERT_CSV_ERR),rn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Pr.INSERT_CSV_ERR+" - "+c);r(l)}}o(Aj,"insertChunk");async function ETe(e){let t={records:0,number_written:0},r=bj(e.schema,e.table);try{let n=new hL,s=Ni.createReadStream(e.file_path,{highWaterMark:_j});s.setEncoding("utf8"),await fL.parsePromise(s,Rj.bind(null,e,n),mL.bind(null,r));let i=n.getPermsResponse();if(i)throw Xt(new Error,i,rn.BAD_REQUEST);return s=Ni.createReadStream(e.file_path,{highWaterMark:_j}),s.setEncoding("utf8"),await fL.parsePromise(s,Aj.bind(null,e,t),mL.bind(null,r)),s.destroy(),t}catch(n){throw Xt(n,tu(Pr.PAPA_PARSE_ERR),rn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Pr.PAPA_PARSE_ERR+n)}}o(ETe,"callPapaParse");function bj(e,t){let r=sTe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>iTe(i,s));return n}o(bj,"createTransformMap");function mL(e,t,r){let n=e.get(r);return n?n(t):gf.autoCast(t)}o(mL,"typeFunction");async function _Te(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new hL,s=dj([Ni.createReadStream(e.file_path,{encoding:"utf-8"}),fj.withParser(),c=>c.value,new mj({batchSize:gj}),pj(async c=>{await Rj(e,n,r,c)})]);await new Promise((c,l)=>{hj(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Xt(new Error,i,rn.BAD_REQUEST);let a=dj([Ni.createReadStream(e.file_path,{encoding:"utf-8"}),fj.withParser(),c=>c.value,new mj({batchSize:gj}),pj(async c=>{await Aj(e,t,r,c)})]);return await new Promise((c,l)=>{hj(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Xt(n,tu(Pr.INSERT_JSON_ERR),rn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Pr.INSERT_JSON_ERR+n)}}o(_Te,"insertJson");async function Ij(e){let t={};try{e.data&&e.data.length>0&&gTe(e.data[0])?t=await STe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Sf.info(t.message))}catch(r){throw ru(r)}return t}o(Ij,"callBulkFileLoad");function gTe(e){let t=Object.keys(e);for(let r of t)if(!oTe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(gTe,"validateColumnNames");async function STe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Iy.insert;break;case"update":i=Iy.update;break;case"upsert":i=Iy.upsert;break;default:throw Xt(new Error,Pr.INVALID_ACTION_PARAM_ERR(n),rn.BAD_REQUEST,wi.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=gf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw ru(a)}}o(STe,"bulkFileLoad");function wj(e,t){return`successfully loaded ${t} of ${e} records`}o(wj,"buildResponseMsg");function ru(e){return Xt(e,tu(Pr.DEFAULT_BULK_LOAD_ERR),rn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Pr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(ru,"buildTopLevelErrMsg")});var TL=M((dHe,Uj)=>{"use strict";var SL=dn(),TTe=aL(),{AsyncParser:yTe}=require("json2csv"),Cy=require("stream"),_s=oe(),gL=require("fs-extra"),RTe=require("path"),js=j(),{promisify:Pj}=require("util"),iE=oe(),{handleHDBError:_r,hdbErrors:ATe}=_e(),{HDB_ERROR_MSGS:Kn,HTTP_STATUS_CODES:gr}=ATe,{streamAsJSON:bTe}=(YA(),D(LU)),{Upload:ITe}=require("@aws-sdk/lib-storage"),{toCsvStream:wTe}=(Po(),D(qU)),Cj=["search_by_value","search_by_hash","sql","search_by_conditions"],Oj=["json","csv"],Lj="json",Dj="csv",NTe="Successfully exported JSON locally.",CTe="Successfully exported CSV locally.",OTe=1e3,PTe=SL.searchByHash,LTe=SL.searchByValue,DTe=Pj(Cy.finished);Uj.exports={export_to_s3:xTe,export_local:MTe};async function MTe(e){js.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Mj(e);if(!_s.isEmpty(t))throw js.error(t),_r(new Error,t,gr.BAD_REQUEST,void 0,void 0,!0);if(_s.isEmpty(e.path))throw js.error(Kn.MISSING_VALUE("path")),_r(new Error,Kn.MISSING_VALUE("path"),gr.BAD_REQUEST,void 0,void 0,!0);let r=(_s.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(RTe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=_s.buildFolderPath(e.path,r);await vTe(e.path);let s=await vj(e);return await UTe(n,e.format,s)}o(MTe,"export_local");async function vTe(e){if(js.trace("in confirmPath"),_s.isEmptyOrZeroLength(e))throw _r(new Error,`Invalid path: ${e}`,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await gL.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),_r(new Error,n,gr.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),_r(new Error,r,gr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(vTe,"confirmPath");async function UTe(e,t,r){if(js.trace("in saveToLocal"),iE.isEmptyOrZeroLength(e))throw _r(new Error,Kn.INVALID_VALUE("file_path"),gr.BAD_REQUEST,void 0,void 0,!0);if(iE.isEmptyOrZeroLength(t))throw _r(new Error,Kn.INVALID_VALUE("Source format"),gr.BAD_REQUEST,void 0,void 0,!0);if(iE.isEmpty(r))throw _r(new Error,Kn.NOT_FOUND("Data"),gr.BAD_REQUEST,void 0,void 0,!0);if(t===Lj){let n=gL.createWriteStream(e);return bTe(r).pipe(n),await DTe(n),{message:NTe,path:e}}else if(t===Dj){let n=gL.createWriteStream(e),s=Cy.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new yTe(i,c).fromInput(s).toOutput(n).promise(!1),{message:CTe,path:e}}throw _r(new Error,Kn.INVALID_VALUE("format"),gr.BAD_REQUEST)}o(UTe,"saveToLocal");async function xTe(e){if(!e.s3||Object.keys(e.s3).length===0)throw _r(new Error,Kn.MISSING_VALUE("S3 object"),gr.BAD_REQUEST);if(_s.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw _r(new Error,Kn.MISSING_VALUE("aws_access_key_id"),gr.BAD_REQUEST);if(_s.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw _r(new Error,Kn.MISSING_VALUE("aws_secret_access_key"),gr.BAD_REQUEST);if(_s.isEmptyOrZeroLength(e.s3.bucket))throw _r(new Error,Kn.MISSING_VALUE("bucket"),gr.BAD_REQUEST);if(_s.isEmptyOrZeroLength(e.s3.key))throw _r(new Error,Kn.MISSING_VALUE("key"),gr.BAD_REQUEST);if(_s.isEmptyOrZeroLength(e.s3.region))throw _r(new Error,Kn.MISSING_VALUE("region"),gr.BAD_REQUEST);let t=Mj(e);if(!_s.isEmpty(t))throw _r(new Error,t,gr.BAD_REQUEST);js.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await vj(e)}catch(l){throw js.error(l),l}let n,s=await TTe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new Cy.PassThrough;if(e.format===Dj){i=e.s3.key+".csv";let l=wTe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===Lj){i=e.s3.key+".json";let l=new Cy.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%OTe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw _r(new Error,Kn.INVALID_VALUE("format"),gr.BAD_REQUEST);return new ITe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(xTe,"export_to_s3");function Mj(e){if(js.trace("in exportCoreValidation"),_s.isEmpty(e.format))return"format missing";if(Oj.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Oj.join(", ")}`;let t=e.search_operation.operation;if(_s.isEmpty(t))return"search_operation.operation missing";if(Cj.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${Cj.join(", ")}`}o(Mj,"exportCoreValidation");async function vj(e){js.trace("in getRecords");let t,r;if(iE.isEmpty(e.search_operation)||iE.isEmptyOrZeroLength(e.search_operation.operation))throw _r(new Error,Kn.INVALID_VALUE("Search operation"),gr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=LTe;break;case"search_by_hash":t=PTe;break;case"search_by_conditions":t=SL.searchByConditions;break;case"sql":{let n=_y();t=Pj(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,js.error(r),_r(new Error,r,gr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(vj,"getRecords")});var Bj=M((mHe,xj)=>{"use strict";var yL=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};xj.exports=yL});var Hj=M((hHe,kj)=>{"use strict";var BTe=(H(),D(Y)),Fj=require("moment"),FTe=require("uuid").v4,RL=class{static{o(this,"JobObject")}constructor(){this.id=FTe(),this.type=void 0,this.start_datetime=Fj().valueOf(),this.created_datetime=Fj().valueOf(),this.end_datetime=void 0,this.status=BTe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};kj.exports=RL});var AL=M((_He,zj)=>{"use strict";var kTe=require("uuid").v4,Kj=ln(),Yj=dn(),HTe=di(),qTe=Ju(),GTe=Bj(),Ct=(H(),D(Y)),$Te=Hj(),VTe=Hp(),Ci=j(),KTe=fm(),Tf=oe(),{promisify:YTe}=require("util"),nu=require("moment"),WTe=_y(),Oy=iL(),qj=ow(),{deleteTransactionLogsBeforeValidator:zTe}=mP(),{handleHDBError:Gj,hdbErrors:jTe,ClientError:QTe}=_e(),{HTTP_STATUS_CODES:$j}=jTe,Vj=Yj.searchByValue,JTe=Yj.searchByHash,XTe=Kj.insert,ZTe=YTe(WTe.evaluateSQL),eye=Kj.update;zj.exports={addJob:nye,updateJob:iye,handleGetJob:tye,handleGetJobsByStartDate:rye,getJobById:Wj};async function tye(e){if(e.id===void 0)throw new QTe("'id' is required");let t=await Wj(e.id);return Tf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(tye,"handleGetJob");async function rye(e){try{let t=await sye(e);if(Ci.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=nu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=nu(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 Ci.error(r),new Error(r)}}o(rye,"handleGetJobsByStartDate");async function nye(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Tf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ci.info(d),t.error=d,t}if(!Ct.JOB_TYPE_ENUM[e.operation])return Ci.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ct.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Oy.fileObject(e);break;case Ct.OPERATIONS_ENUM.CSV_URL_LOAD:n=Oy.urlObject(e);break;case Ct.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Oy.dataObject(e);break;case Ct.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Oy.s3FileObject(e);break;case Ct.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ct.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=qj(e,"date");break;case Ct.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=qj(e,"timestamp");break;case Ct.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=zTe(e);break;case Ct.OPERATIONS_ENUM.RESTART_SERVICE:if(Ct.HDB_PROCESS_SERVICES[e.service]===void 0)throw Gj(new Error,"Invalid service",$j.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw Gj(n,n.message,$j.BAD_REQUEST,void 0,void 0,!0);let s=new $Te;s.type=e.operation===Ct.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ct.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new HTe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await Vj(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ci.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=kTe();try{a=await Vj(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ci.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ci.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new KTe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await XTe(l)}catch(d){return Ci.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,Ci.trace(d)}return t}o(nye,"addJob");async function sye(e){let t=nu(e.from_date,nu.ISO_8601),r=nu(e.to_date,nu.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 GTe(n,e.hdb_user);try{return await ZTe(s)}catch(i){throw Ci.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(sye,"getJobsInDateRange");async function Wj(e){if(Tf.isEmptyOrZeroLength(e))return Tf.errorizeMessage("Invalid job ID specified.");let t=new qTe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await JTe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ci.error(n),Tf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(Wj,"getJobById");async function iye(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Tf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ct.JOB_STATUS_ENUM.COMPLETE||e.status===Ct.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=nu().valueOf());let t=new VTe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await eye(t),r}o(iye,"updateJob")});var r2=M((SHe,t2)=>{"use strict";var jj=oe(),Lr=(H(),D(Y)),oye=require("moment"),Py=_L(),oE=j(),Qj=AL(),Jj=TL(),Xj=Va(),Zj=Je(),aye=ny(),cye=df(),{parentPort:lye,isMainThread:e2}=require("worker_threads"),{onMessageByType:uye}=Je(),bL=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function dye(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(jj.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(jj.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Lr.JOB_TYPE_ENUM.csv_file_load:await oo(e,Py.csvFileLoad);break;case Lr.JOB_TYPE_ENUM.csv_url_load:await oo(e,Py.csvURLLoad);break;case Lr.JOB_TYPE_ENUM.csv_data_load:await oo(e,Py.csvDataLoad);break;case Lr.JOB_TYPE_ENUM.import_from_s3:await oo(e,Py.importFromS3);break;case Lr.JOB_TYPE_ENUM.empty_trash:break;case Lr.JOB_TYPE_ENUM.export_local:await oo(e,Jj.export_local);break;case Lr.JOB_TYPE_ENUM.export_to_s3:await oo(e,Jj.export_to_s3);break;case Lr.JOB_TYPE_ENUM.delete_files_before:case Lr.JOB_TYPE_ENUM.delete_records_before:await oo(e,Xj.deleteFilesBefore);break;case Lr.JOB_TYPE_ENUM.delete_audit_logs_before:await oo(e,Xj.deleteAuditLogsBefore);break;case Lr.JOB_TYPE_ENUM.delete_transaction_logs_before:await oo(e,aye.deleteTransactionLogsBefore);break;case Lr.JOB_TYPE_ENUM.restart_service:return await oo(e,cye.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(dye,"parseMessage");async function oo(e,t){try{e.job.status=Lr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=oye().valueOf(),await Qj.updateJob(e.job),await fye(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):oE.error(`There was an error running ${t.name} job with id ${e.job.id}`),oE.error(n),e.job.message=n,e.job.status=Lr.JOB_STATUS_ENUM.ERROR;try{await Qj.updateJob(e.job)}catch(s){throw oE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(oo,"runJob");async function fye(e){oE.trace("launching job thread:",e),e2?Zj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):lye.postMessage({type:Lr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(fye,"launchJobThread");e2&&uye(Lr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Zj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){oE.error(r)}});t2.exports={parseMessage:dye,RunnerMessage:bL}});var s2=M((yHe,n2)=>{"use strict";var mye=oe(),IL=ae(),yc=(H(),D(Y)),pye=pt(),hye=Ft(),ao=j(),Eye=dL(),_ye=zi();IL.initSync();n2.exports={postOperationHandler:Sye,sendOperationTransaction:aE};async function aE(e,t,r,n){if(e.schema===yc.SYSTEM_SCHEMA_NAME)return;let s=gye(e,t,r);s&&(ao.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await hye.publishToStream(`${pye.SUBJECT_PREFIXES.TXN}.${e.schema}`,_ye.createNatsTableStreamName(e.schema,e.table),n,s))}o(aE,"sendOperationTransaction");function gye(e,t,r){if(mye.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===yc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(gye,"convertCRUDOperationToTransaction");async function Sye(e,t,r){if(!IL.get(yc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;ao.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=IL.get(yc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new Eye(t.txn_time,n,s);switch(e.operation){case yc.OPERATIONS_ENUM.INSERT:try{await aE(e,t.inserted_hashes,i,r)}catch(a){ao.error("There was an error calling clustering postOperationHandler for insert."),ao.error(a)}break;case yc.OPERATIONS_ENUM.DELETE:try{await aE(e,t.deleted_hashes,i,r)}catch(a){ao.error("There was an error calling clustering postOperationHandler for delete."),ao.error(a)}break;case yc.OPERATIONS_ENUM.UPDATE:try{await aE(e,t.update_hashes,i,r)}catch(a){ao.error("There was an error calling clustering postOperationHandler for update."),ao.error(a)}break;case yc.OPERATIONS_ENUM.UPSERT:try{await aE(e,t.upserted_hashes,i,r)}catch(a){ao.error("There was an error calling clustering postOperationHandler for upsert."),ao.error(a)}break;default:break}return t}o(Sye,"postOperationHandler")});var Z,i2=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 dP={};Ie(dP,{chooseOperation:()=>b2,executeJob:()=>Qs,getOperationFunction:()=>I2,operation:()=>vL,processLocalTransaction:()=>A2});async function A2(e,t){try{if(e.body.operation!=="read_log"&&(dE.default.log_level===tm.INFO||dE.default.log_level===tm.DEBUG||dE.default.log_level===tm.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 y2.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Aye[e.body.operation]&&_2.default.setSchemaDataToGlobal(n=>{n&&An.error(n)}),r}function b2(e){let t;try{t=I2(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=Dy.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=Dy.default.checkASTPermissions(e,i);if(a)throw An.error(`${o2.FORBIDDEN} from operation ${e.operation}`),An.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Js.handleHDBError)(new Error,a,Js.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=E2.default.verifyPerms(i,s);if(a)throw An.error(`${o2.FORBIDDEN} from operation ${e.operation}`),An.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Js.handleHDBError)(new Error,a,Js.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Js.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function I2(e){if(An.trace(`getOperationFunction with operation: ${e.operation}`),a2.has(e.operation))return a2.get(e.operation);throw(0,Js.handleHDBError)(new Error,Js.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Js.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function vL(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=b2(e);return A2({body:e},n)}async function bye(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[bA]=!0;let a;switch(i.operation){case V.INSERT:a=await iu.default.insert(i);break;case V.UPDATE:a=await iu.default.update(i);break;case V.UPSERT:a=await iu.default.upsert(i);break;case V.DELETE:a=await Af.default.deleteRecord(i);break;default:An.warn("invalid operation in catchup");break}await Tye.postOperationHandler(i,a,e)}catch(a){An.info("Invalid operation in transaction"),An.error(a)}}async function Qs(e){(0,T2.transformReq)(e);let t,r;try{if(r=await My.default.addJob(e),r){t=r.createdJob,An.info("addJob result",r);let n=new OL.default.RunnerMessage(t,e);return{message:await OL.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,Js.handleHDBError)(n,i)}}function Iye(){let e=new Map;return e.set(V.INSERT,new Z(iu.default.insert)),e.set(V.UPDATE,new Z(iu.default.update)),e.set(V.UPSERT,new Z(iu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(Rf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(Rf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(Rf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(Rf.default.searchByValue)),e.set(V.SEARCH,new Z(yye)),e.set(V.SQL,new Z(Rye)),e.set(V.CSV_DATA_LOAD,new Z(Qs,cE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(Qs,cE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(Qs,cE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(Qs,cE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(co.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(co.default.createSchema)),e.set(V.CREATE_TABLE,new Z(co.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(co.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(co.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(co.default.dropSchema)),e.set(V.DROP_TABLE,new Z(co.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(co.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(lE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(lE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(lE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(lE.default.describeAll)),e.set(V.DELETE,new Z(Af.default.deleteRecord)),e.set(V.ADD_USER,new Z(yf.default.addUser)),e.set(V.ALTER_USER,new Z(yf.default.alterUser)),e.set(V.DROP_USER,new Z(yf.default.dropUser)),e.set(V.LIST_USERS,new Z(yf.default.listUsersExternal)),e.set(V.LIST_ROLES,new Z(uE.default.listRoles)),e.set(V.ADD_ROLE,new Z(uE.default.addRole)),e.set(V.ALTER_ROLE,new Z(uE.default.alterRole)),e.set(V.DROP_ROLE,new Z(uE.default.dropRole)),e.set(V.USER_INFO,new Z(yf.default.userInfo)),e.set(V.READ_LOG,new Z(l2.default)),e.set(V.ADD_NODE,new Z(u2.default)),e.set(V.UPDATE_NODE,new Z(wL.default)),e.set(V.SET_NODE_REPLICATION,new Z(wL.default)),e.set(V.REMOVE_NODE,new Z(d2.default)),e.set(V.CONFIGURE_CLUSTER,new Z(f2.default)),e.set(V.PURGE_STREAM,new Z(m2.default)),e.set(V.SET_CONFIGURATION,new Z(PL.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(p2.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(h2.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(Ly.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(Ly.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(Ly.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(Qs,NL.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(su.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(su.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(su.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(su.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(su.default.removeCertificate)),e.set(V.GET_KEY,new Z(su.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(hO)),e.set(V.REMOVE_NODE_BACK,new Z(EO)),e.set(V.DELETE_FILES_BEFORE,new Z(Qs,Af.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(Qs,Af.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(Qs,NL.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(My.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(My.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z(BP)),e.set(V.RESTART,new Z(CL.default.restart)),e.set(V.RESTART_SERVICE,new Z(Qs,CL.default.restartService)),e.set(V.CATCHUP,new Z(bye)),e.set(V.SYSTEM_INFORMATION,new Z(g2.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(Qs,Af.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(c2.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(kN)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(HN)),e.set(V.LOGIN,new Z(nP)),e.set(V.LOGOUT,new Z(sP)),e.set(V.GET_CONFIGURATION,new Z(PL.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(Ot.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(Ot.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(Ot.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(Ot.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(Ot.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(Ot.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(Ot.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(Ot.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(Ot.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(Ot.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(Ot.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(Ot.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(LL.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(Qs,LL.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(DL.default.installModules)),e.set(V.AUDIT_NODE_MODULES,new Z(DL.default.auditModules)),e.set(V.GET_BACKUP,new Z(co.default.getBackup)),e.set(V.ADD_SSH_KEY,new Z(Ot.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(Ot.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(Ot.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(Ot.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(Ot.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(Ot.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(hP)),e.set(V.LIST_METRICS,new Z(EP)),e.set(V.DESCRIBE_METRIC,new Z(_P)),e.set(V.GET_STATUS,new Z(IP)),e.set(V.SET_STATUS,new Z(wP)),e.set(V.CLEAR_STATUS,new Z(bP)),e.set(V.INSTALL_USAGE_LICENSE,new Z(DP)),e.set(V.GET_USAGE_LICENSES,new Z(xP)),e}var Rf,Dy,cE,co,lE,Af,c2,yf,uE,Ot,dE,l2,u2,wL,d2,f2,m2,p2,h2,Ly,NL,E2,My,Js,CL,ML,iu,_2,g2,OL,PL,LL,DL,S2,T2,su,y2,R2,o2,An,Tye,yye,Rye,Aye,a2,fP=ie(()=>{Rf=w(dn()),Dy=w(_y()),cE=w(_L()),co=w(mh()),lE=w(Za()),Af=w(Va()),c2=w($C()),yf=w(cs()),uE=w(xp()),Ot=w(uP()),dE=w(j()),l2=w(zC()),u2=w(IT()),wL=w(yO()),d2=w(NT()),f2=w(bO()),m2=w(IO()),p2=w(CO()),h2=w(PO()),Ly=w(DT()),NL=w(TL()),E2=w(hy()),My=w(AL());H();Js=w(_e()),CL=w(df()),ML=w(require("util")),iu=w(ln()),_2=w(mi()),g2=w(Zd()),OL=w(r2());Pd();zT();PL=w(bt()),LL=w(ny()),DL=w(Hh()),S2=w(oi()),T2=w(oe());xr();su=w(ms());tf();SP();y2=w(oL()),R2=w(s2());zh();Xh();kP();i2();({HTTP_STATUS_CODES:o2}=Js.hdbErrors),An=dE.default.loggerWithTag("operation"),{transactToClusteringUtils:Tye}=R2.default,yye=ML.promisify(Rf.default.search),Rye=ML.promisify(Dy.default.evaluateSQL),Aye={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};o(A2,"processLocalTransaction");a2=Iye();Ue.operation=vL;o(b2,"chooseOperation");o(I2,"getOperationFunction");(0,S2._assignPackageExport)("operation",vL);o(vL,"operation");o(bye,"catchup");o(Qs,"executeJob");o(Iye,"initializeOperationFunctionMap")});var xy=M((CHe,C2)=>{"use strict";var vy=(H(),D(Y)),wye=oe(),fE=j(),{handleHDBError:UL,hdbErrors:Uy}=_e(),{isMainThread:Nye}=require("worker_threads"),{Readable:Cye}=require("stream"),w2=require("os"),Oye=require("util"),Pye=GN(),Lye=Oye.promisify(Pye.authorize),N2=(fP(),D(dP)),{createGzip:Dye,constants:Mye}=require("zlib"),vye=[vy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,vy.OPERATIONS_ENUM.LOGIN,vy.OPERATIONS_ENUM.LOGOUT];function Uye(e){let t=`Found an uncaught exception with message: ${e.message}. ${w2.EOL}Stack: ${e.stack} ${w2.EOL}Terminating ${Nye?"HDB":"thread"}.`;console.error(t),fE.fatal(t),process.exit(1)}o(Uye,"handleServerUncaughtException");function xye(e,t,r){if(fE[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:Uy.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(xye,"serverErrorHandler");function Bye(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=UL(new Error,"Invalid JSON.",Uy.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(wye.isEmpty(e.body.operation)){let n=UL(new Error,"Request body must include an 'operation' property.",Uy.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(Bye,"reqBodyValidationHandler");function Fye(e,t,r){let n;!vye.includes(e.body.operation)||e.body.operation===vy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?Lye(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{fE.warn(i),fE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(UL(i,a,Uy.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(Fye,"authHandler");async function kye(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=N2.chooseOperation(e.body);let s=await N2.processLocalTransaction(e,n);if(s instanceof Cye&&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(Dye({level:Mye.Z_BEST_SPEED})))}return s}catch(s){throw fE.error(s),s}}o(kye,"handlePostRequest");C2.exports={authHandler:Fye,handlePostRequest:kye,handleServerUncaughtException:Uye,serverErrorHandler:xye,reqBodyValidationHandler:Bye}});var D2=M((PHe,L2)=>{"use strict";var Hye=require("fastify-plugin"),{handlePostRequest:O2,authHandler:qye,reqBodyValidationHandler:Gye}=xy();async function $ye(e){e.decorate("hdbCore",{preValidation:[Gye,qye],request:o(t=>P2(O2(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>P2(O2(t,r,!0)),"requestWithoutAuthentication")})}o($ye,"hdbCore");async function P2(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(P2,"convertAsyncIterators");L2.exports=Hye($ye)});var v2=M((MHe,M2)=>{"use strict";var DHe=require("fs"),By=ae();By.initSync();var{CONFIG_PARAMS:xL}=(H(),D(Y)),Vye=1024*1024*1024;function Kye(e){let t=By.get(xL.HTTP_TIMEOUT),r=By.get(xL.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Vye,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:By.get(xL.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(Kye,"getServerOptions");M2.exports=Kye});var B2=M((UHe,x2)=>{"use strict";var BL=ae();BL.initSync();var{CONFIG_PARAMS:U2}=(H(),D(Y));function Yye(){let e=BL.get(U2.HTTP_CORSACCESSLIST),t=BL.get(U2.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(Yye,"getCORSOptions");x2.exports=Yye});var H2=M((BHe,k2)=>{"use strict";var F2=ae();F2.initSync();var Wye=(H(),D(Y));function zye(){return F2.get(Wye.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(zye,"getHeaderTimeoutConfig");k2.exports=zye});var kL={};Ie(kL,{customFunctionsServer:()=>Jye,ready:()=>eQ,start:()=>Qye});function Qye(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){ca||(ca=Z2(t),Ue.http((await ca).server));let a=await ca,c=(0,FL.dirname)(s),l=(0,FL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!q2.has(c)){q2.add(c);try{a.register(Zye(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:eQ}}async function Jye(){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 Xye();let e=W2.get(B.HTTP_SECUREPORT)>0,t;try{t=ca=await Z2(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 Xye(){try{St.info("Custom Functions starting configuration."),await z2.setUsersWithRolesCache(),St.info("Custom Functions completed configuration.")}catch(e){St.error(e)}}function Zye(e,t){return async function(r){try{St.info("Custom Functions starting buildRoutes"),St.trace("Loading fastify routes folder "+e),(0,G2.existsSync)(e)&&r.register(Y2.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 Z2(e){St.info("Custom Functions starting buildServer.");let t=(0,j2.default)(e),r=(0,$2.default)(t);r.server.headersTimeout=(0,J2.default)(),r.setErrorHandler(X2.serverErrorHandler);let n=(0,Q2.default)();return n&&r.register(V2.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(K2.default),await r.register(jye),await r.after(),Tm(r),St.info("Custom Functions completed buildServer."),r}function eQ(){if(ca)return ca.then?ca.then(e=>e.ready()):ca.ready()}var FL,G2,$2,V2,K2,Y2,W2,St,jye,z2,j2,Q2,J2,X2,ca,q2,tQ=ie(()=>{FL=require("path"),G2=require("fs"),$2=w(require("fastify")),V2=w(require("@fastify/cors")),K2=w(UN()),Y2=w(require("@fastify/autoload")),W2=w(ae());H();St=w(j()),jye=w(D2()),z2=w(cs()),j2=w(v2()),Q2=w(B2()),J2=w(H2()),X2=w(xy());Po();xr();q2=new Set;o(Qye,"start");o(Jye,"customFunctionsServer");o(Xye,"setUp");o(Zye,"buildRouteFolder");o(Z2,"buildServer");o(eQ,"ready")});var qL={};Ie(qL,{handleApplication:()=>eRe,suppressHandleApplicationWarning:()=>tRe});function eRe(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,If.join)(n.absolutePath,"index.html");(0,bf.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,If.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,If.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,HL.default)(n,(0,bf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(rRe(c),!c)return{status:404,body:"File not found"};let l=(0,If.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,bf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,HL.default)(n,(0,bf.realpathSync)(l))}},{runFirst:!0})}function rRe(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 bf,If,HL,tRe,rQ=ie(()=>{bf=require("node:fs"),If=require("node:path"),HL=w(require("send"));o(eRe,"handleApplication");tRe=!0;o(rRe,"validateNotFoundOption")});var GL={};Ie(GL,{start:()=>nRe});function nRe({override:e}){return{handleFile:o((t,r,n)=>{Fy.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,nQ.parse)(t))){if(process.env[s]!==void 0)if(Fy.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)Fy.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var nQ,Fy,sQ=ie(()=>{nQ=require("dotenv"),Fy=w(j());o(nRe,"start")});var $L={};Ie($L,{DataLoaderError:()=>gs,DataLoaderResult:()=>wf,EmptyFileError:()=>qy,FileParseError:()=>Hy,InvalidPropertyTypeError:()=>Gy,MissingRequiredPropertyError:()=>mE,RecordProcessingError:()=>pE,SystemDatabaseError:()=>$y,UnsupportedFileExtensionError:()=>ky,handleApplication:()=>iRe,loadDataFile:()=>lQ,suppressHandleApplicationWarning:()=>sRe});function iRe(e){if((0,oQ.getWorkerIndex)()!==0){lo.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||lQ(t,hn,Me).then(r=>{lo.debug?.("Data loader processed file: %s: %s",(0,la.basename)(t.absolutePath),r.message)})})}async function lQ({contents:e,absolutePath:t,stats:r},n,s){let i=(0,la.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,iQ.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new ky(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof gs?f:new Hy(t,f)}if(!a)throw new qy(t);let{database:c,table:l,records:u}=a;if(!l)throw new mE(t,"table");if(!u)throw new mE(t,"records");if(!Array.isArray(u))throw new Gy(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new $y(c,l);try{let f;if(c&&s[c]&&s[c][l])lo.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])lo.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{lo.debug?.(`Table ${d} not found, creating new table`);let A=[];if(u.length>0){let S=u[0];Object.keys(S).map(R=>{let N={name:R,type:typeof S[R]};return R==="id"&&(N.isPrimaryKey=!0),N}).forEach(R=>{A.push(R)})}f=await Ze({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),R=[];for(let N of S)R.push(async()=>{try{let O=null,F=N.id;if(F!==void 0&&(O=await f.get(F)),!O)return p++,f.put(N);let te=O.getUpdatedTime();return a.mtime>te?(h++,f.put(N)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof gs)lo.error?.(`Record processing error: ${O.message}`);else{let F=new pE(d,O);lo.error?.(`Record processing error: ${F.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(R.map(N=>N()))}if(p>0||h>0){let A=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(A+=` (${E} records skipped)`),lo.info?.(A),new wf(t,c,l,"success",p+h,A)}else if(E>0){let A=`All ${E} records in ${d} already up-to-date`;return lo.info?.(A),new wf(t,c,l,"skipped",m,A)}else{let A=`No records to process in ${d}`;return lo.info?.(A),new wf(t,c,l,"success",0,A)}}catch(f){throw f instanceof gs?f:new pE(d,f)}}var la,iQ,oQ,ua,aQ,cQ,lo,sRe,gs,ky,Hy,qy,mE,Gy,$y,pE,wf,uQ=ie(()=>{la=require("node:path"),iQ=require("yaml");Oe();oQ=w(Je()),ua=w(Kr()),aQ=w(_e()),cQ=w(j()),lo=cQ.default.forComponent("dataLoader"),sRe=!0;o(iRe,"handleApplication");o(lQ,"loadDataFile");gs=class extends aQ.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=ua.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},ky=class extends gs{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,la.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},Hy=class extends gs{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,la.basename)(t)}: ${r.message}`,ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},qy=class extends gs{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,la.basename)(t)} is empty or invalid`,ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},mE=class extends gs{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,la.basename)(t)} is missing required "${r}" property`,ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},Gy=class extends gs{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,la.basename)(t)} has invalid "${r}" property, expected ${n}`,ua.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},$y=class extends gs{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,ua.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},pE=class extends gs{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,ua.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},wf=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 KL=M((jHe,dQ)=>{"use strict";var hE=ae();hE.initSync();var Nf=require("fs-extra"),VL=require("path"),Cf=(H(),D(Y)),oRe=require("crypto"),aRe=require("uuid").v4;dQ.exports=cRe;function cRe(){if(hE.getHdbBasePath()!==void 0){let e=VL.join(hE.getHdbBasePath(),Cf.LICENSE_KEY_DIR_NAME,Cf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=VL.join(hE.getHdbBasePath(),Cf.LICENSE_KEY_DIR_NAME,Cf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=VL.join(hE.getHdbBasePath(),Cf.LICENSE_KEY_DIR_NAME,Cf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Nf.accessSync(r),Nf.accessSync(e),Nf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=aRe(),i=oRe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Nf.writeFileSync(r,s),Nf.writeFileSync(e,i.privateKey),Nf.writeFileSync(t,i.publicKey)}else throw n}}}o(cRe,"checkJWTTokenExist")});var mQ=M((JHe,fQ)=>{"use strict";var YL=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};fQ.exports={HdbInfoInsertObject:YL}});var EQ=M((ZHe,hQ)=>{"use strict";var pQ=(H(),D(Y)),WL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[pQ.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[pQ.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};hQ.exports={UpgradeObject:WL}});var Vy=M((tqe,gQ)=>{"use strict";var Xs=require("prompt"),Of=require("chalk"),_Q=j(),Oi=require("os"),zL=$c(),jL=["yes","y"];async function lRe(e){let t=`${Oi.EOL}`+Of.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Oi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Oi.EOL}${Oi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Oi.EOL}`;Xs.override=zL(["CONFIRM_UPGRADE"]),Xs.start(),Xs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Of.magenta(`${Oi.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Xs.get([r])}catch(s){return _Q.error("There was an error when prompting user about an upgrade."),_Q.error(s),!1}return jL.includes(n.CONFIRM_UPGRADE)}o(lRe,"forceUpdatePrompt");async function uRe(e){let t=`${Oi.EOL}`+Of.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Oi.EOL}`);Xs.override=zL(["CONFIRM_DOWNGRADE"]),Xs.start(),Xs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Of.magenta(`${Oi.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Xs.get([r]);return jL.includes(n.CONFIRM_DOWNGRADE)}o(uRe,"forceDowngradePrompt");async function dRe(){let e=`${Oi.EOL}`+Of.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");Xs.override=zL(["GENERATE_CERTS"]),Xs.start(),Xs.message=e;let t={properties:{GENERATE_CERTS:{description:Of.magenta(`${Oi.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Xs.get([t]);return jL.includes(r.GENERATE_CERTS)}o(dRe,"upgradeCertsPrompt");gQ.exports={forceUpdatePrompt:lRe,forceDowngradePrompt:uRe,upgradeCertsPrompt:dRe}});var Ky=M((nqe,SQ)=>{"use strict";var QL=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};SQ.exports=QL});var yQ=M((lqe,TQ)=>{"use strict";var fRe=oe(),mRe=bt(),iqe=j(),oqe=require("path"),aqe=require("fs"),cqe=(H(),D(Y));TQ.exports={getOldPropsValue:pRe};function pRe(e,t,r=!1){let n=t.getRaw(e);return fRe.isNotEmptyAndHasValue(n)?n:r?mRe.getDefaultConfig(e):""}o(pRe,"getOldPropsValue")});var IQ=M((dqe,bQ)=>{"use strict";var Rc=require("path"),Ac=require("fs-extra"),hRe=require("properties-reader"),ERe=Ky(),Sr=j(),{getOldPropsValue:Tt}=yQ(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:ou}=(H(),D(Y)),au=bt(),Yy=ae(),RQ=oe(),uo=(H(),D(Y)),JL=new ERe("3.1.0"),AQ=[];function _Re(){let e=hRe(Yy.get(Se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Sr.info(t);let r=` ;Settings for the HarperDB process.
|
|
41
41
|
|
|
42
42
|
;The directory selected during install where the database files reside.
|
|
43
43
|
${Se.HDB_ROOT_KEY} = ${Tt(Se.HDB_ROOT_KEY,e)}
|
|
@@ -106,11 +106,11 @@ ${Se.CUSTOM_FUNCTIONS_PORT_KEY} = ${au.getDefaultConfig(ou.HTTP_PORT)}
|
|
|
106
106
|
${Se.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Rc.join(Tt(Se.HDB_ROOT_KEY,e),"custom_functions")}
|
|
107
107
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
108
108
|
${Se.MAX_CUSTOM_FUNCTION_PROCESSES} = ${au.getDefaultConfig(ou.HTTP_THREADS)}
|
|
109
|
-
`,n=Yy.get("settings_path"),s=Rc.dirname(n),i=Rc.join(s,"3_1_0_upgrade_settings.bak");try{Sr.info(`Backing up old settings file to: ${i}`),Ac.copySync(n,i)}catch(c){throw Sr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Sr.info("New settings file values for 3.1.0 upgrade:",r),Sr.info(`Creating new/upgraded settings file at '${n}'`),Ac.writeFileSync(n,r),Sr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Sr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Sr.error(c),Ac.copySync(i,n),c}Yy.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Sr.info(a),a}o(
|
|
109
|
+
`,n=Yy.get("settings_path"),s=Rc.dirname(n),i=Rc.join(s,"3_1_0_upgrade_settings.bak");try{Sr.info(`Backing up old settings file to: ${i}`),Ac.copySync(n,i)}catch(c){throw Sr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Sr.info("New settings file values for 3.1.0 upgrade:",r),Sr.info(`Creating new/upgraded settings file at '${n}'`),Ac.writeFileSync(n,r),Sr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Sr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Sr.error(c),Ac.copySync(i,n),c}Yy.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Sr.info(a),a}o(_Re,"updateSettingsFile310");function gRe(){let e=Rc.join(RQ.getHomeDir(),uo.HDB_HOME_DIR_NAME,uo.LICENSE_KEY_DIR_NAME,uo.LICENSE_FILE_NAME),t=Rc.join(RQ.getHomeDir(),uo.HDB_HOME_DIR_NAME,uo.LICENSE_KEY_DIR_NAME,uo.REG_KEY_FILE_NAME),r=Rc.join(Yy.getHdbBasePath(),uo.LICENSE_KEY_DIR_NAME,uo.LICENSE_FILE_NAME),n=Rc.join(r,uo.LICENSE_FILE_NAME),s=Rc.join(r,uo.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Sr.info(i);let a="Creating .license directory";console.log(a),Sr.info(a),Ac.mkdirpSync(r);try{Ac.accessSync(e);try{let c="Moving licence file";console.log(c),Sr.info(c),Ac.moveSync(e,n);let l="License file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving license file failed";console.error(l),Sr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Sr.warn(l)}try{Ac.accessSync(t);try{let c="Moving registration file";console.log(c),Sr.info(c),Ac.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving registration file failed";console.error(l),Sr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Sr.warn(l)}}o(gRe,"moveLicenseFiles");JL.sync_functions.push(_Re);JL.sync_functions.push(gRe);AQ.push(JL);bQ.exports=AQ});var PQ=M((mqe,OQ)=>{"use strict";var Ss=_t(),{insertRecords:SRe}=al(),TRe=Cn(),bc=Vt(),yRe=oe(),da=j(),RRe=oe(),fo=require("fs-extra"),fa=require("path"),ARe=require("cli-progress"),EE=require("assert"),bRe=require("pino"),IRe=ae();OQ.exports=wRe;var Wy,wQ,zy,XL,bn,_E=!1;async function wRe(e=!0){return Wy=IRe.getHdbBasePath(),wQ=fa.join(Wy,"schema"),zy=fa.join(Wy,"4_0_0_upgrade_tmp"),XL=fa.join(Wy,"transactions"),console.info("Reindexing upgrade started for schemas"),da.notify("Reindexing upgrade started for schemas"),await NQ(wQ,!1,e),await fo.pathExists(XL)&&(console.info(`
|
|
110
110
|
|
|
111
|
-
Reindexing upgrade started for transaction logs`),da.notify("Reindexing upgrade started for transaction logs"),await
|
|
112
|
-
install_user = ${l}`;try{Ic.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{QL.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{Ic.removeSync(r),console.log(d),cu.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(qRe,"updateSettingsFile400");TE.async_functions.push(qRe);TE.async_functions.push(kRe);TE.async_functions.push(BRe);TE.async_functions.push(HRe);OQ.push(TE);PQ.exports=OQ});var UQ=D((fqe,vQ)=>{var GRe=Ky(),{databases:$Re,table:VRe}=(Oe(),M(mt)),KRe=Vi(),JL=j(),DQ=new GRe("4.7.0"),MQ=[];async function YRe(){let e=$Re.system?.hdb_license;if(!e){JL.debug?.("system.hdb_license table not found; no migration necessary");return}return JL.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),JL.debug?.("Creating new usage block system.hdb_license table"),VRe(KRe.hdb_license)}o(YRe,"convertToUsageBlockLicenses");DQ.async_functions.push(YRe);MQ.push(DQ);vQ.exports=MQ});var XL=D((pqe,HQ)=>{"use strict";var lu=oe(),WRe=(H(),M(Y)),xQ=j(),{DATA_VERSION:zRe,UPGRADE_VERSION:jRe}=WRe.UPGRADE_JSON_FIELD_NAMES_ENUM,BQ=yQ(),Jy=LQ(),FQ=UQ(),wc=new Map;BQ&&BQ.forEach(e=>{wc.set(e.version,e)});Jy&&Jy.forEach(e=>{wc.set(e.version,e)});Jy&&Jy.forEach(e=>{wc.set(e.version,e)});FQ&&FQ.forEach(e=>{wc.set(e.version,e)});function QRe(){return[...wc.keys()].sort(lu.compareVersions)}o(QRe,"getSortedVersions");function kQ(e){let t=e[zRe],r=e[jRe];return lu.isEmptyOrZeroLength(t)||lu.isEmptyOrZeroLength(r)?(xQ.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),xQ.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."),[]):[...wc.keys()].sort(lu.compareVersions).filter(function(n){return lu.compareVersions(n,t)>0&&lu.compareVersions(n,r)<=0})}o(kQ,"getVersionsForUpgrade");function JRe(e){return kQ(e).length>0}o(JRe,"hasUpgradesRequired");function XRe(e){return lu.isEmptyOrZeroLength(e)?null:wc.has(e)?wc.get(e):null}o(XRe,"getDirectiveByVersion");HQ.exports={getSortedVersions:QRe,getDirectiveByVersion:XRe,getVersionsForUpgrade:kQ,hasUpgradesRequired:JRe}});var Zy=D((Eqe,KQ)=>{"use strict";var ZRe=require("util"),ZL=require("chalk"),eAe=require("os"),GQ=ln(),tAe=dn(),Ts=(H(),M(Y)),$Q=lQ(),tD=dw(),{UpgradeObject:qQ}=fQ(),{forceDowngradePrompt:rAe}=Vy(),{packageJson:nAe}=It(),Xy=j(),Pf=oe(),rD=mi(),sAe=(Oe(),M(mt)),iAe=XL(),oAe=ZRe.promisify(rD.setSchemaDataToGlobal),aAe=tAe.searchByValue,cAe="info_id",lAe="2.9.9",uAe="3.0.0";async function dAe(e){let t=new $Q.HdbInfoInsertObject(1,e,e),r=new tD.InsertObject(Ts.OPERATIONS_ENUM.INSERT,Ts.SYSTEM_SCHEMA_NAME,Ts.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ts.INFO_TABLE_HASH_ATTRIBUTE,[t]);return rD.setSchemaDataToGlobal(),GQ.insert(r)}o(dAe,"insertHdbInstallInfo");async function eD(e){let t,r=await VQ(),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 $Q.HdbInfoInsertObject(i,e,e);let a=new tD.InsertObject(Ts.OPERATIONS_ENUM.INSERT,Ts.SYSTEM_SCHEMA_NAME,Ts.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ts.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await oAe(),GQ.insert(a)}o(eD,"insertHdbUpgradeInfo");async function VQ(){let e=new tD.NoSQLSeachObject(Ts.SYSTEM_SCHEMA_NAME,Ts.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,cAe,Ts.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await aAe(e))}catch(r){console.error(r)}return t}o(VQ,"getAllHdbInfoRecords");async function fAe(){let e=await VQ();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(fAe,"getLatestHdbInfoRecord");async function mAe(){Xy.info("Checking if HDB software has been updated");try{let e=nAe.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await fAe(),r;if(Pf.isEmpty(t))r=lAe;else if(r=t.data_version_num,Pf.compareVersions(r.toString(),e.toString())>0){if(!Pf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(ZL.yellow(`This instance's data was last run on version ${r}`)),console.error(ZL.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.${eAe.EOL}${Ts.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Pf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(ZL.yellow(`This instance's data was last run on version ${r}`)),await rAe(new qQ(r,e))?await eD(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(rD.setSchemaDataToGlobal(),pAe(r),e.toString()===r.toString())return;let n=new qQ(r,e);if(iAe.hasUpgradesRequired(n))return n;Pf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await eD(n.upgrade_version),Xy.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Xy.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Xy.fatal(e),e}}o(mAe,"getVersionUpdateInfo");function pAe(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 ${Ts.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in sAe.databases.system))throw console.log(t),new Error(t);if(!Pf.isEmpty(e)&&e<uAe)throw console.log(t),new Error(t)}o(pAe,"checkIfInstallIsSupported");KQ.exports={insertHdbInstallInfo:dAe,insertHdbUpgradeInfo:eD,getVersionUpdateInfo:mAe}});var jQ=D((gqe,zQ)=>{"use strict";var eR=require("joi"),{boolean:hAe,string:nD,number:EAe}=eR.types(),YQ=require("fs-extra"),yE=(H(),M(Y)),WQ=require("path"),_Ae=at();zQ.exports=gAe;function gAe(e){let t=nD.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=eR.object({[yE.INSTALL_PROMPTS.ROOTPATH]:eR.custom(SAe),[yE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:eR.alternatives([EAe.min(0),nD]).allow("null",null),[yE.INSTALL_PROMPTS.TC_AGREEMENT]:nD.valid("yes","YES","Yes"),[yE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[yE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:hAe});return _Ae.validateBySchema(e,r)}o(gAe,"installValidator");function SAe(e,t){if(YQ.existsSync(WQ.join(e,"system/hdb_user/data.mdb"))||YQ.existsSync(WQ.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(SAe,"validateRootAvailable")});var JQ=D((Tqe,QQ)=>{"use strict";var{mkdirpSync:TAe,copySync:yAe}=require("fs-extra"),Nc=require("path"),RE=(H(),M(Y)),{PACKAGE_ROOT:RAe}=It(),iD=j(),AAe=ss(),sD=Vi(),bAe=yt();QQ.exports=IAe;async function IAe(e){iD.trace("Mounting HarperDB"),uu(e),uu(Nc.join(e,"backup")),uu(Nc.join(e,"keys")),uu(Nc.join(e,"keys",RE.LICENSE_FILE_NAME)),uu(Nc.join(e,"log")),uu(Nc.join(e,"database")),uu(Nc.join(e,"components")),yAe(Nc.resolve(RAe,"./utility/install/README.md"),Nc.join(e,"README.md")),await wAe()}o(IAe,"mountHdb");async function wAe(){let e=Zu(),t=Object.keys(sD);for(let r of t){let n=sD[r].hash_attribute;try{bAe.initSystemSchemaPaths(RE.SYSTEM_SCHEMA_NAME,r);let s=new e(RE.SYSTEM_SCHEMA_NAME,r,n);s.attributes=sD[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 AAe.createTable(r,s)}catch(s){throw iD.error(`issue creating environment for ${RE.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}o(wAe,"createLMDBTables");function uu(e){TAe(e,{mode:RE.HDB_FILE_PERMISSIONS}),iD.info(`Directory ${e} created`)}o(uu,"makeDirectory")});var d4=D((bqe,u4)=>{"use strict";var cD=require("os"),r4=require("inquirer"),ei=require("fs-extra"),NAe=require("properties-reader"),fu=require("chalk"),po=require("path"),CAe=require("human-readable-ids").hri,oD,OAe=require("yaml"),Tr=j(),Cc=ae(),AE=oe(),rR=$c(),n4=Zy(),{packageJson:s4}=It(),he=(H(),M(Y)),{CONFIG_PARAM_MAP:Rqe,CONFIG_PARAMS:Ht}=he,PAe=jQ(),LAe=JQ(),lD=At(),DAe=cs(),MAe=xp(),vAe=GL(),UAe=mi(),xAe=require("util").promisify,BAe=xAe(UAe.setSchemaDataToGlobal),XQ=ms(),du=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),sn=o(e=>fu.magenta.bold(e),"HDB_PROMPT_MSG"),FAe="https://harperdb.io/legal/end-user-license-agreement",Oc=cD.EOL,ma="",kAe="yes",ZQ="Starting HarperDB install...",e4="HarperDB installation was successful.",t4="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",HAe="An out of date version of HarperDB is already installed.",aD="It appears that HarperDB is already installed. Exiting install...",qAe="Aborting install",Aqe=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])$/),GAe=new RegExp(/^[^\s.,*>]+$/),$Ae=cD.homedir(),VAe=po.join($Ae,he.HDB_ROOT_DIR_NAME),KAe="HDB_ADMIN",YAe="CLUSTER_USER",WAe="dev",zAe="localhost",tR={[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:"},Pc=rR([he.INSTALL_PROMPTS.HDB_CONFIG]),mo,i4=!1,uD=!1,o4=!1;u4.exports={install:a4,updateConfigEnv:ibe,setIgnoreExisting:obe};a4.createSuperUser=l4;async function a4(){console.log(sn(Oc+ZQ+Oc)),Tr.notify(ZQ);let e;Pc[he.INSTALL_PROMPTS.HDB_CONFIG]&&(e=jAe());let t=JAe();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&&(o4=!0,t[he.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=PAe(t);if(r)throw r.message;await XAe(),await ZAe(t);let n=await QAe(t);mo=n[he.INSTALL_PROMPTS.ROOTPATH],Pc[he.INSTALL_PROMPTS.HDB_CONFIG]&&po.dirname(Pc[he.INSTALL_PROMPTS.HDB_CONFIG])===mo&&(i4=!0),!uD&&!Pc[he.INSTALL_PROMPTS.HDB_CONFIG]&&await ei.pathExists(po.join(mo,he.HDB_CONFIG_FILE))&&(console.error(aD),process.exit()),oD||(oD=(await import("ora")).default);let s=oD({prefixText:sn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),AE.isEmpty(mo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Cc.setHdbBasePath(mo),await LAe(mo),await ebe(),await tbe(n),Tr.initLogSettings(!0),await l4(n),await nbe(n),await XQ.updateConfigCert(),await XQ.generateCertsKeys(),await sbe(),vAe(),s.stop(),console.log(sn(Oc+e4+Oc)),Tr.notify(e4)}o(a4,"install");function jAe(){let e=OAe.parseDocument(ei.readFileSync(Pc[he.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=lD.flattenConfig(e.toJSON());return t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(jAe,"getConfigFromFile");async function QAe(e){Tr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:du,when:pa(e[he.INSTALL_PROMPTS.ROOTPATH],nn.DESTINATION),name:he.INSTALL_PROMPTS.ROOTPATH,prefix:ma,default:VAe,validate:o(async s=>Zs(s)?Zs(s):await ei.pathExists(po.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:du,when:pa(e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],nn.HDB_USERNAME),name:he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ma,default:KAe,validate:o(s=>Zs(s)?Zs(s):(t=s,!0),"validate"),message:sn(nn.HDB_USERNAME)},{type:"password",when:pa(e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],nn.HDB_PASS),name:he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ma,validate:o(s=>Zs(s)?Zs(s):!0,"validate"),message:sn(nn.HDB_PASS)},{type:"input",transformer:du,when:pa(e[he.INSTALL_PROMPTS.DEFAULTS_MODE],nn.DEFAULTS_MODE),name:he.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:ma,default:WAe,validate:o(s=>Zs(s)?Zs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:sn(nn.DEFAULTS_MODE)}];if(o4||r.push({type:"input",name:he.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:du,when:pa(e[he.INSTALL_PROMPTS.REPLICATION_HOSTNAME],nn.REPLICATION_HOSTNAME),prefix:ma,default:zAe,message:sn(nn.REPLICATION_HOSTNAME)}),AE.autoCastBoolean(e[he.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:du,when:pa(e[he.INSTALL_PROMPTS.CLUSTERING_NODENAME],nn.NODE_NAME),name:he.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ma,default:CAe.random(),validate:o(i=>GAe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:sn(nn.NODE_NAME)},{type:"input",transformer:du,when:pa(e[he.INSTALL_PROMPTS.CLUSTERING_USER],nn.CLUSTER_USERNAME),name:he.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ma,default:YAe,validate:o(i=>Zs(i)?Zs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:sn(nn.CLUSTER_USERNAME)},{type:"password",when:pa(e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD],nn.CLUSTER_PASS),name:he.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ma,validate:o(i=>Zs(i)?Zs(i):!0,"validate"),message:sn(nn.CLUSTER_PASS)}];r.push(...s)}let n=await r4.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(QAe,"installPrompts");function pa(e,t){return e!==void 0?(t.includes("password")?(console.log(`${sn(t)} ${fu.gray("[hidden]")}`),Tr.trace(`${sn(t)} [hidden]`)):(console.log(`${sn(t)} ${e}`),Tr.trace(`${sn(t)} ${e}`)),!1):!0}o(pa,"displayCmdEnvVar");function Zs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Zs,"checkForEmptyValue");function JAe(){let e=Object.keys(he.INSTALL_PROMPTS),t=rR(e),r=rR(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(JAe,"checkForPromptOverride");async function XAe(){Tr.trace("Checking for existing install.");let e=AE.getPropsFilePath(),t=await ei.pathExists(e),r;if(t){Tr.trace(`Install found an existing boot prop file at:${e}`);let n=NAe(e),s=lD.getConfigValue(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await ei.pathExists(s)}if(!t&&AE.noBootFile()&&(r=!0),r&&!uD){if(Tr.trace(`Install found existing HDB config at:${e}`),await n4.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${s4.version}. Exiting install...`;console.log(Oc+fu.magenta.bold(HAe)),console.log(fu.magenta.bold(s)),Tr.error(s)}else console.log(Oc+fu.magenta.bold(aD)),Tr.error(aD);process.exit(0)}}o(XAe,"checkForExistingInstall");async function ZAe(e){Tr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${FAe}${Oc}and can be viewed by typing or copying and pasting the URL into your web browser.${Oc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:ma,transformer:du,when:pa(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:fu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await r4.prompt([r]);n[he.INSTALL_PROMPTS.TC_AGREEMENT]&&n[he.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==kAe&&(console.log(fu.yellow(t4)),Tr.error(t4),process.exit(0))}o(ZAe,"termsAgreement");async function ebe(){let e=po.join(mo,he.HDB_CONFIG_FILE),t;try{t=cD.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
|
-
install_user = ${t}`,n=AE.getHomeDir(),s=po.join(n,he.HDB_HOME_DIR_NAME),i=po.join(s,he.LICENSE_KEY_DIR_NAME);try{ei.mkdirpSync(s,{mode:he.HDB_FILE_PERMISSIONS}),ei.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=po.join(s,he.BOOT_PROPS_FILE_NAME);try{await ei.writeFile(a,r)}catch(c){throw Tr.error(`There was an error creating the boot file at path: ${a}`),c}Cc.setProperty(he.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Cc.setProperty(he.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Cc.setProperty(Cc.BOOT_PROPS_FILE_PATH,a)}}o(ebe,"createBootPropertiesFile");async function tbe(e){Tr.trace("Creating HarperDB config file");let t=rR(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 tR){if(r===Ht.HTTP_PORT&&t[Ht.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??tR[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()]??tR[r],t[Ht.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Ht.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=tR[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{Pc[he.INSTALL_PROMPTS.HDB_CONFIG]||lD.createConfigFile(t),Cc.initSync()}catch(r){rbe(r)}}o(tbe,"createConfigFile");function rbe(e){Tr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(qAe);let t=po.resolve(Cc.get(Cc.BOOT_PROPS_FILE_PATH),"../");t&&ei.removeSync(t),mo&&(i4?ei.readdirSync(mo,{withFileTypes:!0}).forEach(n=>{let s=po.join(n.path,n.name);s!==Pc[he.INSTALL_PROMPTS.HDB_CONFIG]&&ei.removeSync(s)}):ei.removeSync(mo)),process.exit(1)}o(rbe,"rollbackInstall");async function c4(e,t){Tr.trace("Creating admin user"),await BAe();let r;try{r=await MAe.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 DAe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(c4,"createAdminUser");async function l4(e){Tr.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 c4(t,r),delete e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(l4,"createSuperUser");async function nbe(e){Tr.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 c4({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[he.INSTALL_PROMPTS.CLUSTERING_USER],delete e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(nbe,"createClusterUser");async function sbe(){let e=s4.version;if(e)await n4.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(sbe,"insertHdbVersionInfo");function ibe(e){Pc[he.INSTALL_PROMPTS.HDB_CONFIG]=e}o(ibe,"updateConfigEnv");function obe(e){uD=e}o(obe,"setIgnoreExisting")});var fD={};Ie(fD,{isHdbInstalled:()=>abe});function abe(e,t){try{dD.default.statSync((0,nR.getPropsFilePath)()),dD.default.statSync(e.get(nm.SETTINGS_PATH_KEY))}catch(r){if((0,nR.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var dD,nR,mD=ie(()=>{H();dD=w(require("node:fs")),nR=w(oe());o(abe,"isHdbInstalled")});var p4=D((Nqe,m4)=>{"use strict";var pD=oe(),ys=j(),f4=XL();m4.exports={processDirectives:cbe};async function cbe(e){console.log("Starting upgrade process...");let t=f4.getVersionsForUpgrade(e),r=dbe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;ys.notify(c),console.log(c);let l=[],u=[];try{l=lbe(a.sync_functions)}catch(d){throw ys.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await ube(a.async_functions)}catch(d){throw ys.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(cbe,"processDirectives");function lbe(e){if(pD.isEmptyOrZeroLength(e))return ys.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ys.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ys.info(`Running function ${r.name}`),!(r instanceof Function)){ys.info("Variable being processed is not a function");continue}let n=r();ys.info(n),t.push(n)}return t}o(lbe,"runSyncFunctions");async function ube(e){if(pD.isEmptyOrZeroLength(e))return ys.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ys.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ys.info(`Running function ${s.name}`),!(s instanceof Function)){ys.info("Variable being processed is not a function");continue}let i=await s();ys.info(i),t.push(i)}return t}o(ube,"runAsyncFunctions");function dbe(e){if(pD.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=f4.getDirectiveByVersion(r);n&&t.push(n)}return t}o(dbe,"getUpgradeDirectivesToInstall")});var y4=D((Oqe,T4)=>{"use strict";var _4=ae();_4.initSync();var g4=require("chalk"),ho=j(),mu=(H(),M(Y)),fbe=p4(),hD=oe(),mbe=(mD(),M(fD)),S4=Zy(),pbe=Vy(),h4=CA(),hbe=mi(),{packageJson:E4}=It(),Ebe=require("util").promisify,_be=Ebe(hbe.setSchemaDataToGlobal),ED,{UPGRADE_VERSION:_D}=mu.UPGRADE_JSON_FIELD_NAMES_ENUM;T4.exports={upgrade:gbe};async function gbe(e){await _be(),ED===void 0&&(ED=Lh()),mbe.isHdbInstalled(_4,ho)||(sR("Harper is not installed. Harper must be installed before running an upgrade.",mu.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await S4.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),sR(`This version of HarperDB is ${E4.version}`,mu.LOG_LEVELS.INFO);let n=r[_D]??E4.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${mu.HDB_SUPPORT_ADDRESS}`),ho.notify("Missing new version field from upgrade info object"),process.exit(1)),await Sbe();let s,i=0;try{s=await pbe.forceUpdatePrompt(r)}catch(a){ho.error("There was an error when prompting user about upgrade."),ho.error(a),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),ho.info(`Starting upgrade to version ${n}`),await Tbe(r),sR(`HarperDB was successfully upgraded to version ${r[_D]}`,mu.LOG_LEVELS.INFO)}o(gbe,"upgrade");async function Sbe(){let e=!1,t=await h4.findPs(mu.HDB_PROC_NAME);if(hD.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await h4.findPs("hdb_express");hD.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await ED.list();hD.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(g4.red(r)),ho.error(r),process.exit(1)}}o(Sbe,"checkIfRunning");async function Tbe(e){try{await fbe.processDirectives(e)}catch(t){throw sR("There was an error during the data upgrade. Please check the logs.",mu.LOG_LEVELS.ERROR),t}try{await S4.insertHdbUpgradeInfo(e[_D])}catch(t){ho.error("Error updating the 'hdb_info' system table."),ho.error(t)}}o(Tbe,"runUpgrade");function sR(e,t=void 0){t||(t=ho.info),ho[t](e),console.log(g4.magenta(e))}o(sR,"printToLogAndConsole")});var N4=D(oR=>{"use strict";var ye=ae();ye.initSync();df();var yr=(H(),M(Y)),{CONFIG_PARAMS:Be}=yr,Yn=j(),pu=require("fs-extra"),ha=require("path"),ybe=GL(),{install:Rbe}=d4(),gD=require("chalk"),{packageJson:Abe,PACKAGE_ROOT:bbe}=It(),hu=oe(),Ibe=(mD(),M(fD)),SD=At(),A4=$c(),R4=xT(),wbe=y4(),{compactOnStart:Nbe}=(WO(),M(YO)),Cbe=require("minimist"),Obe=ms(),{startHTTPThreads:Pbe}=(TD(),M(C4)),Lbe=Zy(),{isMainThread:Dbe}=require("worker_threads"),Lqe=Vi(),Dqe=Za(),Mqe=FI(),vqe=Zu(),iR=(H(),M(Y)),Eo,Lf,b4=!1,Mbe="Upgrade complete. Starting HarperDB.",vbe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Ube="HarperDB not found, starting install process.",xbe="There was an error during install, check install_log.log for more details. Exiting.",Bbe="HarperDB successfully started.";function Fbe(){process.on("unhandledRejection",(e,t)=>{Yn.error("Unhandled promise rejection: Promise",t,"reason:",e)})}o(Fbe,"addUnhandleRejectionListener");function kbe(){if(!b4){let e=o(()=>{pu.removeSync(ha.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(kbe,"addExitListeners");async function I4(e=!1,t=!1){if(console.log(gD.magenta("Starting HarperDB...")),Fbe(),Yn.suppressLogging?.(()=>{console.log(gD.magenta(""+pu.readFileSync(ha.join(bbe,"utility/install/ascii_logo.txt"))))}),Ibe.isHdbInstalled(ye,Yn)===!1){console.log(Ube);try{await Rbe()}catch(l){console.error(xbe,l),Yn.error(l),process.exit(1)}}if(!e){let l=A4(Object.keys(yr.CONFIG_PARAM_MAP),!0);!hu.isEmpty(l)&&!hu.isEmptyOrZeroLength(Object.keys(l))&&SD.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Lf?.service==="clustering";Lf?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=ha.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.HDB_PID_FILE),i=Vbe(s);i&&i!==1&&Kbe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),Eo===void 0&&(Eo=Lh()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await R4.generateNatsConfig(),await Eo.startClusteringProcesses(!0),process.exit()),kbe(),await pu.writeFile(ha.join(ye.get(iR.CONFIG_PARAMS.ROOTPATH),iR.HDB_PID_FILE),`${process.pid}`),Yn.info("HarperDB PID",process.pid);let a;try{let l=await Lbe.getVersionUpdateInfo();l!==void 0&&(a=l[yr.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await wbe.upgrade(l),console.log(Mbe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),Yn.error(l)):(console.error(vbe,l),Yn.error(l)),process.exit(1)}ybe(),Gbe(),await Obe.reviewSelfSignedCert(),hu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&Dbe&&await R4.generateNatsConfig(t)}o(I4,"initialize");async function Hbe(e=!1){try{Lf=Cbe(process.argv),Lf.ROOTPATH&&SD.updateConfigObject("settings_path",ha.join(Lf.ROOTPATH,yr.HDB_CONFIG_FILE)),await I4(e,!0),ye.get(yr.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Nbe();let t=process.env.IS_SCRIPTED_SERVICE&&!Lf.service;hu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Eo.startClusteringProcesses(),await Eo.startClusteringThreads()),await Pbe(process.env.DEV_MODE?1:ye.get(iR.CONFIG_PARAMS.THREADS_COUNT)??ye.get(iR.CONFIG_PARAMS.THREADS)),t||w4()}catch(t){console.error(t),Yn.error(t),process.exit(1)}}o(Hbe,"main");function w4(){Yn.suppressLogging(()=>{console.log(gD.magenta(`HarperDB ${Abe.version} successfully started`))}),Yn.notify(Bbe)}o(w4,"started");async function qbe(e=!0){b4=!e;try{Eo===void 0&&(Eo=Lh()),Eo.enterPM2Mode(),await I4(),hu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Eo.startClusteringProcesses(),await Eo.startService(yr.PROCESS_DESCRIPTORS.HDB),w4(),e&&process.exit(0)}catch(t){console.error(t),Yn.error(t),process.exit(1)}}o(qbe,"launch");function Gbe(){let e=ha.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.LICENSE_KEY_DIR_NAME,yr.LICENSE_FILE_NAME),t=ha.join(e,yr.LICENSE_FILE_NAME),r=ha.join(e,yr.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=A4(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(hu.isEmpty(n)||hu.isEmpty(s))return;pu.mkdirpSync(e),pu.writeFileSync(r,n),pu.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),Yn.error(s)}}o(Gbe,"writeLicenseFromVars");oR.launch=qbe;oR.main=Hbe;oR.startupLog=$be;function $be(e){let r=o(p=>p.padEnd(20),"pad"),n=`
|
|
111
|
+
Reindexing upgrade started for transaction logs`),da.notify("Reindexing upgrade started for transaction logs"),await NQ(XL,!0,e)),da.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(_E?", but errors occurred":"")}o(wRe,"reindexUpgrade");async function NQ(e,t,r){let n=await fo.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=fa.join(e,a.toString());if(a===".DS_Store")continue;let l=await fo.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&fo.statSync(fa.join(c,f)).isDirectory())try{await NRe(a,f,t),bn.info(`Reindexing started for ${a}.${f}`),da.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await ORe(a,f,c,t,r),bn.info(`Reindexing completed for ${a}.${f}`),da.notify(`Reindexing completed for ${a}.${f}`)}catch(m){_E=!0,m.schema_path=c,m.table_name=f,da.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),da.error(m),bn.error(m),console.error(m)}}}if(!_E)try{await fo.rm(zy,{recursive:!0})}catch{}}o(NQ,"processTables");async function NRe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=fa.join(zy,s);await fo.ensureDir(zy),await fo.writeFile(i,""),bn=bRe({level:"debug",formatters:{bindings(){}}},i)}o(NRe,"initPinoLogger");var CRe=20;async function ORe(e,t,r,n,s){let i;try{i=await Ss.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){da.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=DRe(i.dbis),c=Ss.openDBI(i,a),l=Object.keys(i.dbis),u=Ss.statDBI(i,a);bn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new ARe.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 Ss.createEnvironment(r,t,!1);Ss.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>CRe&&await p();await p()}catch(S){throw _E=!0,bn.error(S),S}async function p(){let S,R=m.map(({value:O})=>O);n?S=await Promise.all(R.map(O=>PRe(f,O))):S=await SRe(f,a,l.filter(O=>O!=="__blob__"),R,!1);for(let O=0,F=m.length;O<F;O++){let{key:te,value:q}=m[O];bn.info(`Record hash value: ${te} hash: ${a}`);let k;n?k=S[O]:k=S.written_hashes.indexOf(te)>-1,EE(k,!0),LRe(f,a,q[a],n),bn.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&da.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),bn.info(`${d.value}/${d.total} records inserted`)}o(p,"finishOutstanding"),d.stop();let h=Ss.statDBI(i,a),E=Ss.statDBI(f,a);if(bn.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),EE.deepStrictEqual(h.entryCount,E.entryCount),await Ss.closeEnvironment(i),await Ss.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=fa.join(r,t),R=fa.join(S,"data.mdb"),N=fa.join(S,"lock.mdb");await fo.unlink(R),await fo.unlink(N),await fo.rmdir(S),bn.info(`Deleted old environment files from schema folder: ${R}, ${N}`)}let g=await Ss.openEnvironment(r,t),A=Ss.statDBI(g,a);bn.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(A)}`),EE.deepStrictEqual(A.entryCount,E.entryCount),await Ss.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(ORe,"processTable");async function PRe(e,t){Ss.initializeDBIs(e,bc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,bc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[bc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[bc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),RRe.isEmpty(t.user_name)||e.dbis[bc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[bc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(PRe,"insertTransaction");function LRe(e,t,r,n){let i=e.dbis[t].get(r);EE.deepStrictEqual(typeof i,"object");let a;if(n){let c={[bc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[bc.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&&!yRe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];CQ(e,c,f,r)}else CQ(e,c,l,r)}o(LRe,"validateIndices");function CQ(e,t,r,n){try{let s=!1,i=TRe.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}`),EE.deepStrictEqual(s,!0)}catch(s){_E=!0,bn.error(s),console.error(s)}}o(CQ,"validateIndex");function DRe(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(DRe,"getHashDBI")});var UQ=M((Eqe,vQ)=>{"use strict";var jy=require("path"),Ic=require("fs-extra"),MRe=Ky(),cu=j(),LQ=bt(),ZL=ae(),Pi=(H(),D(Y)),Qy=oe(),vRe=require("properties-reader"),URe=di(),xRe=Hp(),BRe=dn(),hqe=require("util"),FRe=BRe.searchByValue,kRe=ln(),HRe=DT(),qRe=pt(),GRe=PQ(),DQ=ms(),$Re=Vy(),TE=new MRe("4.0.0"),MQ=[],gE,SE;async function VRe(){try{if(await $Re.upgradeCertsPrompt()){if(console.log("Generating new certificates."),gE){let t=Qy.changeExtension(gE,".bak");await Ic.move(gE,t)}if(SE){let t=Qy.changeExtension(SE,".bak");await Ic.move(SE,t)}await DQ.generateKeys()}else console.log("Using existing certificates."),DQ.updateConfigCert(gE,SE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(VRe,"generateNewKeys");async function KRe(){console.log("Updating HarperDB nodes."),cu.info("Updating HarperDB nodes.");let e=[];try{let t=new URe(Pi.SYSTEM_SCHEMA_NAME,Pi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await FRe(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!qRe.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:Pi.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Qy.isEmptyOrZeroLength(n))return;let s=new xRe(Pi.SYSTEM_SCHEMA_NAME,Pi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await kRe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{HRe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(KRe,"updateNodes");async function YRe(){let e=ZL.get(Pi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(jy.join("config","settings.js"))){cu.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),cu.info(t);let r=jy.dirname(e),n=ZL.get(Pi.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=jy.join(n,"backup","4_0_0_upgrade_settings.bak"),i=jy.join(n,Pi.HDB_CONFIG_FILE);try{cu.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Ic.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{cu.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),cu.info("Updating env variables with new settings values");let f=LQ.initOldConfig(e);gE=f[Pi.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],SE=f[Pi.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],LQ.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=Qy.getPropsFilePath();Ic.accessSync(a,Ic.constants.F_OK|Ic.constants.R_OK);let l=vRe(a).get(Pi.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
112
|
+
install_user = ${l}`;try{Ic.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{ZL.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{Ic.removeSync(r),console.log(d),cu.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(YRe,"updateSettingsFile400");TE.async_functions.push(YRe);TE.async_functions.push(VRe);TE.async_functions.push(GRe);TE.async_functions.push(KRe);MQ.push(TE);vQ.exports=MQ});var kQ=M((gqe,FQ)=>{var WRe=Ky(),{databases:zRe,table:jRe}=(Oe(),D(mt)),QRe=Vi(),eD=j(),xQ=new WRe("4.7.0"),BQ=[];async function JRe(){let e=zRe.system?.hdb_license;if(!e){eD.debug?.("system.hdb_license table not found; no migration necessary");return}return eD.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),eD.debug?.("Creating new usage block system.hdb_license table"),jRe(QRe.hdb_license)}o(JRe,"convertToUsageBlockLicenses");xQ.async_functions.push(JRe);BQ.push(xQ);FQ.exports=BQ});var tD=M((Tqe,VQ)=>{"use strict";var lu=oe(),XRe=(H(),D(Y)),HQ=j(),{DATA_VERSION:ZRe,UPGRADE_VERSION:eAe}=XRe.UPGRADE_JSON_FIELD_NAMES_ENUM,qQ=IQ(),Jy=UQ(),GQ=kQ(),wc=new Map;qQ&&qQ.forEach(e=>{wc.set(e.version,e)});Jy&&Jy.forEach(e=>{wc.set(e.version,e)});Jy&&Jy.forEach(e=>{wc.set(e.version,e)});GQ&&GQ.forEach(e=>{wc.set(e.version,e)});function tAe(){return[...wc.keys()].sort(lu.compareVersions)}o(tAe,"getSortedVersions");function $Q(e){let t=e[ZRe],r=e[eAe];return lu.isEmptyOrZeroLength(t)||lu.isEmptyOrZeroLength(r)?(HQ.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),HQ.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."),[]):[...wc.keys()].sort(lu.compareVersions).filter(function(n){return lu.compareVersions(n,t)>0&&lu.compareVersions(n,r)<=0})}o($Q,"getVersionsForUpgrade");function rAe(e){return $Q(e).length>0}o(rAe,"hasUpgradesRequired");function nAe(e){return lu.isEmptyOrZeroLength(e)?null:wc.has(e)?wc.get(e):null}o(nAe,"getDirectiveByVersion");VQ.exports={getSortedVersions:tAe,getDirectiveByVersion:nAe,getVersionsForUpgrade:$Q,hasUpgradesRequired:rAe}});var Zy=M((Rqe,jQ)=>{"use strict";var sAe=require("util"),rD=require("chalk"),iAe=require("os"),YQ=ln(),oAe=dn(),Ts=(H(),D(Y)),WQ=mQ(),sD=dw(),{UpgradeObject:KQ}=EQ(),{forceDowngradePrompt:aAe}=Vy(),{packageJson:cAe}=yt(),Xy=j(),Pf=oe(),iD=mi(),lAe=(Oe(),D(mt)),uAe=tD(),dAe=sAe.promisify(iD.setSchemaDataToGlobal),fAe=oAe.searchByValue,mAe="info_id",pAe="2.9.9",hAe="3.0.0";async function EAe(e){let t=new WQ.HdbInfoInsertObject(1,e,e),r=new sD.InsertObject(Ts.OPERATIONS_ENUM.INSERT,Ts.SYSTEM_SCHEMA_NAME,Ts.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ts.INFO_TABLE_HASH_ATTRIBUTE,[t]);return iD.setSchemaDataToGlobal(),YQ.insert(r)}o(EAe,"insertHdbInstallInfo");async function nD(e){let t,r=await zQ(),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 WQ.HdbInfoInsertObject(i,e,e);let a=new sD.InsertObject(Ts.OPERATIONS_ENUM.INSERT,Ts.SYSTEM_SCHEMA_NAME,Ts.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ts.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await dAe(),YQ.insert(a)}o(nD,"insertHdbUpgradeInfo");async function zQ(){let e=new sD.NoSQLSeachObject(Ts.SYSTEM_SCHEMA_NAME,Ts.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,mAe,Ts.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await fAe(e))}catch(r){console.error(r)}return t}o(zQ,"getAllHdbInfoRecords");async function _Ae(){let e=await zQ();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(_Ae,"getLatestHdbInfoRecord");async function gAe(){Xy.info("Checking if HDB software has been updated");try{let e=cAe.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await _Ae(),r;if(Pf.isEmpty(t))r=pAe;else if(r=t.data_version_num,Pf.compareVersions(r.toString(),e.toString())>0){if(!Pf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(rD.yellow(`This instance's data was last run on version ${r}`)),console.error(rD.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.${iAe.EOL}${Ts.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Pf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(rD.yellow(`This instance's data was last run on version ${r}`)),await aAe(new KQ(r,e))?await nD(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(iD.setSchemaDataToGlobal(),SAe(r),e.toString()===r.toString())return;let n=new KQ(r,e);if(uAe.hasUpgradesRequired(n))return n;Pf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await nD(n.upgrade_version),Xy.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Xy.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Xy.fatal(e),e}}o(gAe,"getVersionUpdateInfo");function SAe(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 ${Ts.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in lAe.databases.system))throw console.log(t),new Error(t);if(!Pf.isEmpty(e)&&e<hAe)throw console.log(t),new Error(t)}o(SAe,"checkIfInstallIsSupported");jQ.exports={insertHdbInstallInfo:EAe,insertHdbUpgradeInfo:nD,getVersionUpdateInfo:gAe}});var ZQ=M((bqe,XQ)=>{"use strict";var eR=require("joi"),{boolean:TAe,string:oD,number:yAe}=eR.types(),QQ=require("fs-extra"),yE=(H(),D(Y)),JQ=require("path"),RAe=at();XQ.exports=AAe;function AAe(e){let t=oD.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=eR.object({[yE.INSTALL_PROMPTS.ROOTPATH]:eR.custom(bAe),[yE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:eR.alternatives([yAe.min(0),oD]).allow("null",null),[yE.INSTALL_PROMPTS.TC_AGREEMENT]:oD.valid("yes","YES","Yes"),[yE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[yE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:TAe});return RAe.validateBySchema(e,r)}o(AAe,"installValidator");function bAe(e,t){if(QQ.existsSync(JQ.join(e,"system/hdb_user/data.mdb"))||QQ.existsSync(JQ.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(bAe,"validateRootAvailable")});var t4=M((wqe,e4)=>{"use strict";var{mkdirpSync:IAe,copySync:wAe}=require("fs-extra"),Nc=require("path"),RE=(H(),D(Y)),{PACKAGE_ROOT:NAe}=yt(),cD=j(),CAe=ss(),aD=Vi(),OAe=Rt();e4.exports=PAe;async function PAe(e){cD.trace("Mounting HarperDB"),uu(e),uu(Nc.join(e,"backup")),uu(Nc.join(e,"keys")),uu(Nc.join(e,"keys",RE.LICENSE_FILE_NAME)),uu(Nc.join(e,"log")),uu(Nc.join(e,"database")),uu(Nc.join(e,"components")),wAe(Nc.resolve(NAe,"./utility/install/README.md"),Nc.join(e,"README.md")),await LAe()}o(PAe,"mountHdb");async function LAe(){let e=Zu(),t=Object.keys(aD);for(let r of t){let n=aD[r].hash_attribute;try{OAe.initSystemSchemaPaths(RE.SYSTEM_SCHEMA_NAME,r);let s=new e(RE.SYSTEM_SCHEMA_NAME,r,n);s.attributes=aD[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 CAe.createTable(r,s)}catch(s){throw cD.error(`issue creating environment for ${RE.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}o(LAe,"createLMDBTables");function uu(e){IAe(e,{mode:RE.HDB_FILE_PERMISSIONS}),cD.info(`Directory ${e} created`)}o(uu,"makeDirectory")});var h4=M((Pqe,p4)=>{"use strict";var dD=require("os"),o4=require("inquirer"),ei=require("fs-extra"),DAe=require("properties-reader"),fu=require("chalk"),po=require("path"),MAe=require("human-readable-ids").hri,lD,vAe=require("yaml"),Tr=j(),Cc=ae(),AE=oe(),rR=$c(),a4=Zy(),{packageJson:c4}=yt(),he=(H(),D(Y)),{CONFIG_PARAM_MAP:Cqe,CONFIG_PARAMS:Ht}=he,UAe=ZQ(),xAe=t4(),fD=bt(),BAe=cs(),FAe=xp(),kAe=KL(),HAe=mi(),qAe=require("util").promisify,GAe=qAe(HAe.setSchemaDataToGlobal),r4=ms(),du=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),sn=o(e=>fu.magenta.bold(e),"HDB_PROMPT_MSG"),$Ae="https://harperdb.io/legal/end-user-license-agreement",Oc=dD.EOL,ma="",VAe="yes",n4="Starting HarperDB install...",s4="HarperDB installation was successful.",i4="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",KAe="An out of date version of HarperDB is already installed.",uD="It appears that HarperDB is already installed. Exiting install...",YAe="Aborting install",Oqe=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])$/),WAe=new RegExp(/^[^\s.,*>]+$/),zAe=dD.homedir(),jAe=po.join(zAe,he.HDB_ROOT_DIR_NAME),QAe="HDB_ADMIN",JAe="CLUSTER_USER",XAe="dev",ZAe="localhost",tR={[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:"},Pc=rR([he.INSTALL_PROMPTS.HDB_CONFIG]),mo,l4=!1,mD=!1,u4=!1;p4.exports={install:d4,updateConfigEnv:ube,setIgnoreExisting:dbe};d4.createSuperUser=m4;async function d4(){console.log(sn(Oc+n4+Oc)),Tr.notify(n4);let e;Pc[he.INSTALL_PROMPTS.HDB_CONFIG]&&(e=ebe());let t=rbe();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&&(u4=!0,t[he.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=UAe(t);if(r)throw r.message;await nbe(),await sbe(t);let n=await tbe(t);mo=n[he.INSTALL_PROMPTS.ROOTPATH],Pc[he.INSTALL_PROMPTS.HDB_CONFIG]&&po.dirname(Pc[he.INSTALL_PROMPTS.HDB_CONFIG])===mo&&(l4=!0),!mD&&!Pc[he.INSTALL_PROMPTS.HDB_CONFIG]&&await ei.pathExists(po.join(mo,he.HDB_CONFIG_FILE))&&(console.error(uD),process.exit()),lD||(lD=(await import("ora")).default);let s=lD({prefixText:sn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),AE.isEmpty(mo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Cc.setHdbBasePath(mo),await xAe(mo),await ibe(),await obe(n),Tr.initLogSettings(!0),await m4(n),await cbe(n),await r4.updateConfigCert(),await r4.generateCertsKeys(),await lbe(),kAe(),s.stop(),console.log(sn(Oc+s4+Oc)),Tr.notify(s4)}o(d4,"install");function ebe(){let e=vAe.parseDocument(ei.readFileSync(Pc[he.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=fD.flattenConfig(e.toJSON());return t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(ebe,"getConfigFromFile");async function tbe(e){Tr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:du,when:pa(e[he.INSTALL_PROMPTS.ROOTPATH],nn.DESTINATION),name:he.INSTALL_PROMPTS.ROOTPATH,prefix:ma,default:jAe,validate:o(async s=>Zs(s)?Zs(s):await ei.pathExists(po.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:du,when:pa(e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],nn.HDB_USERNAME),name:he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ma,default:QAe,validate:o(s=>Zs(s)?Zs(s):(t=s,!0),"validate"),message:sn(nn.HDB_USERNAME)},{type:"password",when:pa(e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],nn.HDB_PASS),name:he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ma,validate:o(s=>Zs(s)?Zs(s):!0,"validate"),message:sn(nn.HDB_PASS)},{type:"input",transformer:du,when:pa(e[he.INSTALL_PROMPTS.DEFAULTS_MODE],nn.DEFAULTS_MODE),name:he.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:ma,default:XAe,validate:o(s=>Zs(s)?Zs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:sn(nn.DEFAULTS_MODE)}];if(u4||r.push({type:"input",name:he.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:du,when:pa(e[he.INSTALL_PROMPTS.REPLICATION_HOSTNAME],nn.REPLICATION_HOSTNAME),prefix:ma,default:ZAe,message:sn(nn.REPLICATION_HOSTNAME)}),AE.autoCastBoolean(e[he.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:du,when:pa(e[he.INSTALL_PROMPTS.CLUSTERING_NODENAME],nn.NODE_NAME),name:he.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ma,default:MAe.random(),validate:o(i=>WAe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:sn(nn.NODE_NAME)},{type:"input",transformer:du,when:pa(e[he.INSTALL_PROMPTS.CLUSTERING_USER],nn.CLUSTER_USERNAME),name:he.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ma,default:JAe,validate:o(i=>Zs(i)?Zs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:sn(nn.CLUSTER_USERNAME)},{type:"password",when:pa(e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD],nn.CLUSTER_PASS),name:he.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ma,validate:o(i=>Zs(i)?Zs(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(tbe,"installPrompts");function pa(e,t){return e!==void 0?(t.includes("password")?(console.log(`${sn(t)} ${fu.gray("[hidden]")}`),Tr.trace(`${sn(t)} [hidden]`)):(console.log(`${sn(t)} ${e}`),Tr.trace(`${sn(t)} ${e}`)),!1):!0}o(pa,"displayCmdEnvVar");function Zs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Zs,"checkForEmptyValue");function rbe(){let e=Object.keys(he.INSTALL_PROMPTS),t=rR(e),r=rR(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(rbe,"checkForPromptOverride");async function nbe(){Tr.trace("Checking for existing install.");let e=AE.getPropsFilePath(),t=await ei.pathExists(e),r;if(t){Tr.trace(`Install found an existing boot prop file at:${e}`);let n=DAe(e),s=fD.getConfigValue(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await ei.pathExists(s)}if(!t&&AE.noBootFile()&&(r=!0),r&&!mD){if(Tr.trace(`Install found existing HDB config at:${e}`),await a4.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${c4.version}. Exiting install...`;console.log(Oc+fu.magenta.bold(KAe)),console.log(fu.magenta.bold(s)),Tr.error(s)}else console.log(Oc+fu.magenta.bold(uD)),Tr.error(uD);process.exit(0)}}o(nbe,"checkForExistingInstall");async function sbe(e){Tr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${$Ae}${Oc}and can be viewed by typing or copying and pasting the URL into your web browser.${Oc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:ma,transformer:du,when:pa(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:fu.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()!==VAe&&(console.log(fu.yellow(i4)),Tr.error(i4),process.exit(0))}o(sbe,"termsAgreement");async function ibe(){let e=po.join(mo,he.HDB_CONFIG_FILE),t;try{t=dD.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
|
+
install_user = ${t}`,n=AE.getHomeDir(),s=po.join(n,he.HDB_HOME_DIR_NAME),i=po.join(s,he.LICENSE_KEY_DIR_NAME);try{ei.mkdirpSync(s,{mode:he.HDB_FILE_PERMISSIONS}),ei.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=po.join(s,he.BOOT_PROPS_FILE_NAME);try{await ei.writeFile(a,r)}catch(c){throw Tr.error(`There was an error creating the boot file at path: ${a}`),c}Cc.setProperty(he.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Cc.setProperty(he.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Cc.setProperty(Cc.BOOT_PROPS_FILE_PATH,a)}}o(ibe,"createBootPropertiesFile");async function obe(e){Tr.trace("Creating HarperDB config file");let t=rR(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 tR){if(r===Ht.HTTP_PORT&&t[Ht.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??tR[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()]??tR[r],t[Ht.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Ht.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=tR[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{Pc[he.INSTALL_PROMPTS.HDB_CONFIG]||fD.createConfigFile(t),Cc.initSync()}catch(r){abe(r)}}o(obe,"createConfigFile");function abe(e){Tr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(YAe);let t=po.resolve(Cc.get(Cc.BOOT_PROPS_FILE_PATH),"../");t&&ei.removeSync(t),mo&&(l4?ei.readdirSync(mo,{withFileTypes:!0}).forEach(n=>{let s=po.join(n.path,n.name);s!==Pc[he.INSTALL_PROMPTS.HDB_CONFIG]&&ei.removeSync(s)}):ei.removeSync(mo)),process.exit(1)}o(abe,"rollbackInstall");async function f4(e,t){Tr.trace("Creating admin user"),await GAe();let r;try{r=await FAe.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 BAe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(f4,"createAdminUser");async function m4(e){Tr.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 f4(t,r),delete e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(m4,"createSuperUser");async function cbe(e){Tr.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 f4({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[he.INSTALL_PROMPTS.CLUSTERING_USER],delete e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(cbe,"createClusterUser");async function lbe(){let e=c4.version;if(e)await a4.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(lbe,"insertHdbVersionInfo");function ube(e){Pc[he.INSTALL_PROMPTS.HDB_CONFIG]=e}o(ube,"updateConfigEnv");function dbe(e){mD=e}o(dbe,"setIgnoreExisting")});var hD={};Ie(hD,{isHdbInstalled:()=>fbe});function fbe(e,t){try{pD.default.statSync((0,nR.getPropsFilePath)()),pD.default.statSync(e.get(nm.SETTINGS_PATH_KEY))}catch(r){if((0,nR.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var pD,nR,ED=ie(()=>{H();pD=w(require("node:fs")),nR=w(oe());o(fbe,"isHdbInstalled")});var g4=M((Mqe,_4)=>{"use strict";var _D=oe(),ys=j(),E4=tD();_4.exports={processDirectives:mbe};async function mbe(e){console.log("Starting upgrade process...");let t=E4.getVersionsForUpgrade(e),r=Ebe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;ys.notify(c),console.log(c);let l=[],u=[];try{l=pbe(a.sync_functions)}catch(d){throw ys.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await hbe(a.async_functions)}catch(d){throw ys.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(mbe,"processDirectives");function pbe(e){if(_D.isEmptyOrZeroLength(e))return ys.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ys.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ys.info(`Running function ${r.name}`),!(r instanceof Function)){ys.info("Variable being processed is not a function");continue}let n=r();ys.info(n),t.push(n)}return t}o(pbe,"runSyncFunctions");async function hbe(e){if(_D.isEmptyOrZeroLength(e))return ys.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ys.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ys.info(`Running function ${s.name}`),!(s instanceof Function)){ys.info("Variable being processed is not a function");continue}let i=await s();ys.info(i),t.push(i)}return t}o(hbe,"runAsyncFunctions");function Ebe(e){if(_D.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=E4.getDirectiveByVersion(r);n&&t.push(n)}return t}o(Ebe,"getUpgradeDirectivesToInstall")});var I4=M((Uqe,b4)=>{"use strict";var y4=ae();y4.initSync();var R4=require("chalk"),ho=j(),mu=(H(),D(Y)),_be=g4(),gD=oe(),gbe=(ED(),D(hD)),A4=Zy(),Sbe=Vy(),S4=CA(),Tbe=mi(),{packageJson:T4}=yt(),ybe=require("util").promisify,Rbe=ybe(Tbe.setSchemaDataToGlobal),SD,{UPGRADE_VERSION:TD}=mu.UPGRADE_JSON_FIELD_NAMES_ENUM;b4.exports={upgrade:Abe};async function Abe(e){await Rbe(),SD===void 0&&(SD=Lh()),gbe.isHdbInstalled(y4,ho)||(sR("Harper is not installed. Harper must be installed before running an upgrade.",mu.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await A4.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),sR(`This version of HarperDB is ${T4.version}`,mu.LOG_LEVELS.INFO);let n=r[TD]??T4.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${mu.HDB_SUPPORT_ADDRESS}`),ho.notify("Missing new version field from upgrade info object"),process.exit(1)),await bbe();let s,i=0;try{s=await Sbe.forceUpdatePrompt(r)}catch(a){ho.error("There was an error when prompting user about upgrade."),ho.error(a),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),ho.info(`Starting upgrade to version ${n}`),await Ibe(r),sR(`HarperDB was successfully upgraded to version ${r[TD]}`,mu.LOG_LEVELS.INFO)}o(Abe,"upgrade");async function bbe(){let e=!1,t=await S4.findPs(mu.HDB_PROC_NAME);if(gD.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await S4.findPs("hdb_express");gD.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await SD.list();gD.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(R4.red(r)),ho.error(r),process.exit(1)}}o(bbe,"checkIfRunning");async function Ibe(e){try{await _be.processDirectives(e)}catch(t){throw sR("There was an error during the data upgrade. Please check the logs.",mu.LOG_LEVELS.ERROR),t}try{await A4.insertHdbUpgradeInfo(e[TD])}catch(t){ho.error("Error updating the 'hdb_info' system table."),ho.error(t)}}o(Ibe,"runUpgrade");function sR(e,t=void 0){t||(t=ho.info),ho[t](e),console.log(R4.magenta(e))}o(sR,"printToLogAndConsole")});var L4=M(oR=>{"use strict";var ye=ae();ye.initSync();df();var yr=(H(),D(Y)),{CONFIG_PARAMS:Be}=yr,Yn=j(),pu=require("fs-extra"),ha=require("path"),wbe=KL(),{install:Nbe}=h4(),yD=require("chalk"),{packageJson:Cbe,PACKAGE_ROOT:Obe}=yt(),hu=oe(),Pbe=(ED(),D(hD)),RD=bt(),N4=$c(),w4=xT(),Lbe=I4(),{compactOnStart:Dbe}=(WO(),D(YO)),Mbe=require("minimist"),vbe=ms(),{startHTTPThreads:Ube}=(AD(),D(D4)),xbe=Zy(),{isMainThread:Bbe}=require("worker_threads"),Bqe=Vi(),Fqe=Za(),kqe=FI(),Hqe=Zu(),iR=(H(),D(Y)),Eo,Lf,C4=!1,Fbe="Upgrade complete. Starting HarperDB.",kbe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Hbe="HarperDB not found, starting install process.",qbe="There was an error during install, check install_log.log for more details. Exiting.",Gbe="HarperDB successfully started.";function $be(){process.on("unhandledRejection",(e,t)=>{Yn.error("Unhandled promise rejection: Promise",t,"reason:",e)})}o($be,"addUnhandleRejectionListener");function Vbe(){if(!C4){let e=o(()=>{pu.removeSync(ha.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(Vbe,"addExitListeners");async function O4(e=!1,t=!1){if(console.log(yD.magenta("Starting HarperDB...")),$be(),Yn.suppressLogging?.(()=>{console.log(yD.magenta(""+pu.readFileSync(ha.join(Obe,"utility/install/ascii_logo.txt"))))}),Pbe.isHdbInstalled(ye,Yn)===!1){console.log(Hbe);try{await Nbe()}catch(l){console.error(qbe,l),Yn.error(l),process.exit(1)}}if(!e){let l=N4(Object.keys(yr.CONFIG_PARAM_MAP),!0);!hu.isEmpty(l)&&!hu.isEmptyOrZeroLength(Object.keys(l))&&RD.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Lf?.service==="clustering";Lf?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=ha.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.HDB_PID_FILE),i=jbe(s);i&&i!==1&&Qbe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),Eo===void 0&&(Eo=Lh()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await w4.generateNatsConfig(),await Eo.startClusteringProcesses(!0),process.exit()),Vbe(),await pu.writeFile(ha.join(ye.get(iR.CONFIG_PARAMS.ROOTPATH),iR.HDB_PID_FILE),`${process.pid}`),Yn.info("HarperDB PID",process.pid);let a;try{let l=await xbe.getVersionUpdateInfo();l!==void 0&&(a=l[yr.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Lbe.upgrade(l),console.log(Fbe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),Yn.error(l)):(console.error(kbe,l),Yn.error(l)),process.exit(1)}wbe(),Wbe(),await vbe.reviewSelfSignedCert(),hu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&Bbe&&await w4.generateNatsConfig(t)}o(O4,"initialize");async function Kbe(e=!1){try{Lf=Mbe(process.argv),Lf.ROOTPATH&&RD.updateConfigObject("settings_path",ha.join(Lf.ROOTPATH,yr.HDB_CONFIG_FILE)),await O4(e,!0),ye.get(yr.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Dbe();let t=process.env.IS_SCRIPTED_SERVICE&&!Lf.service;hu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Eo.startClusteringProcesses(),await Eo.startClusteringThreads()),await Ube(process.env.DEV_MODE?1:ye.get(iR.CONFIG_PARAMS.THREADS_COUNT)??ye.get(iR.CONFIG_PARAMS.THREADS)),t||P4()}catch(t){console.error(t),Yn.error(t),process.exit(1)}}o(Kbe,"main");function P4(){Yn.suppressLogging(()=>{console.log(yD.magenta(`HarperDB ${Cbe.version} successfully started`))}),Yn.notify(Gbe)}o(P4,"started");async function Ybe(e=!0){C4=!e;try{Eo===void 0&&(Eo=Lh()),Eo.enterPM2Mode(),await O4(),hu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Eo.startClusteringProcesses(),await Eo.startService(yr.PROCESS_DESCRIPTORS.HDB),P4(),e&&process.exit(0)}catch(t){console.error(t),Yn.error(t),process.exit(1)}}o(Ybe,"launch");function Wbe(){let e=ha.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.LICENSE_KEY_DIR_NAME,yr.LICENSE_FILE_NAME),t=ha.join(e,yr.LICENSE_FILE_NAME),r=ha.join(e,yr.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=N4(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(hu.isEmpty(n)||hu.isEmpty(s))return;pu.mkdirpSync(e),pu.writeFileSync(r,n),pu.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),Yn.error(s)}}o(Wbe,"writeLicenseFromVars");oR.launch=Ybe;oR.main=Kbe;oR.startupLog=zbe;function zbe(e){let r=o(p=>p.padEnd(20),"pad"),n=`
|
|
114
114
|
`;ye.get(Be.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${ye.get(Be.REPLICATION_HOSTNAME)}
|
|
115
115
|
`),ye.get(Be.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${ye.get(Be.REPLICATION_URL)}
|
|
116
116
|
`),n+=`${r("Worker Threads:")}${ye.get(Be.THREADS_COUNT)}
|
|
@@ -123,16 +123,16 @@ Reindexing upgrade started for transaction logs`),da.notify("Reindexing upgrade
|
|
|
123
123
|
`,n+=r("MQTT:"),n+=ye.get(Be.MQTT_NETWORK_PORT)?`TCP: ${ye.get(Be.MQTT_NETWORK_PORT)}, `:"",n+=ye.get(Be.MQTT_NETWORK_SECUREPORT)?`TLS: ${ye.get(Be.MQTT_NETWORK_SECUREPORT)}`:"",n+=ye.get(Be.MQTT_WEBSOCKET)&&ye.get(Be.HTTP_PORT)?`, WS: ${ye.get(Be.HTTP_PORT)}`:"",n+=ye.get(Be.MQTT_WEBSOCKET)&&ye.get(Be.HTTP_SECUREPORT)?`, WSS: ${ye.get(Be.HTTP_SECUREPORT)}
|
|
124
124
|
`:`
|
|
125
125
|
`;let i=ye.get(Be.REPLICATION_PORT)??ye.get(Be.OPERATIONSAPI_NETWORK_PORT),a=ye.get(Be.REPLICATION_SECUREPORT)??ye.get(Be.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=a?`WSS: ${a} `:"",n+=`${c.slice(0,-2)}
|
|
126
|
-
`;let l=[],u=
|
|
126
|
+
`;let l=[],u=RD.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}
|
|
127
127
|
`);let m=ye.get(Be.HTTP_PORT)?`HTTP: ${ye.get(Be.HTTP_PORT)}, `:"";m+=ye.get(Be.HTTP_SECUREPORT)?`HTTPS: ${ye.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)}
|
|
128
128
|
`:n+=`${r(p+": ")}${m}
|
|
129
|
-
`;console.log(n),ye.get(Be.LOGGING_STDSTREAMS)&&Yn.logsAtLevel("info")&&Yn.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(
|
|
130
|
-
`),wE(e,404,0,e.requestId)}function wE(e,t,r,n){let s=NE.logging;if(s){
|
|
129
|
+
`;console.log(n),ye.get(Be.LOGGING_STDSTREAMS)&&Yn.logsAtLevel("info")&&Yn.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(zbe,"startupLog");function jbe(e){try{return Number.parseInt(pu.readFileSync(e,"utf8"),10)}catch{return null}}o(jbe,"readPidFile");function Qbe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(Qbe,"isProcessRunning")});var M4={};Ie(M4,{SERVERS:()=>Df,portServer:()=>bD,setPortServerMap:()=>aR});function aR(e,t){let r=bD.get(e)??[];bD.set(e,[...r,t])}var Df,bD,ID=ie(()=>{Df={},bD=new Map;o(aR,"setPortServerMap")});var mR={};Ie(mR,{deliverSocket:()=>K4,getHttpOptions:()=>eIe,getRequestId:()=>j4,handleApplication:()=>Zbe,httpServer:()=>MD,logRequest:()=>wE,proxyRequest:()=>tIe,registerServer:()=>LD,suppressHandleApplicationWarning:()=>Xbe});function Zbe(e){NE=e.options.getAll(),e.options.on("change",t=>{NE=e.options.getAll()})}function eIe(){return NE}function K4(e,t,r){let n=e?.read?e:new F4.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Df[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=Df[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(Ea.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function tIe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=v4.get(s),r){case"connection":i=K4(void 0,t),v4.set(s,i),i.write=(c,l,u)=>(lR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(lR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),lR.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 LD(e,t,r=!0){t||(t=Dr.default.get(B.HTTP_PORT));let n=Df[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",B4),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else Df[t]=e;e.on("unhandled",B4)}function DD(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Dr.default.get(B.HTTP_PORT)!=null&&t.push({port:Dr.default.get(B.HTTP_PORT),secure:Dr.default.get(B.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Dr.default.get(B.HTTP_SECUREPORT)!=null&&t.push({port:Dr.default.get(B.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Dr.default.get(B.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,k4.resolvePath)(Dr.default.get(B.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function MD(e,t){let r=[];for(let{port:n,secure:s}of DD(t))r.push(Y4(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?OD[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,LD(e,n,!1)),uR[n]=dR(OD,n);return r}function Y4(e,t,r,n){if(aR(e,{protocol_name:t?"HTTPS":"HTTP",name:pR()}),!cR[e]){let s=r?"operationsApi_network":"http",i=Dr.default.get(s+"_keepAliveTimeout"),a=Dr.default.get(s+"_timeout"),c=Dr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Dr.default.get(B.HTTP_MAXHEADERSIZE)},u=Dr.default.get(s+"_mtls"),d=Dr.default.get(s+"_mtls_required"),f;if(t){let E=Dr.default.get("tls");f=Dr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,H4.getTicketKeys)(),SNICallback:(0,q4.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=o(async(E,g)=>{let A=performance.now(),S=0;try{let N=new Xa(E,g);r&&(N.isOperationsServer=!0),NE.logging?.id&&(N.requestId=S=j4());let O=await uR[e](N);if(!O){if(N._nodeResponse.statusCode){wE(E,N._nodeResponse.statusCode,S,performance.now()-A);return}O=W4(N)}if(O.headers?.set||(O.headers=new Us(O.headers)),await UP()?O.headers.set("Server","HarperDB"):O.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),O.status===-1){for(let re of O.headers||[])g.setHeader(re[0],re[1]);return E.baseRequest=N,g.baseResponse=O,cR[e].emit("unhandled",E,g)}let F=O.status||200;g.statusCode=F;let te=performance.now(),q=te-A,k=O.body,J,W=!1;if(!O.handlesHeaders){let re=O.headers||new Us;k?k.length>=0?(typeof k=="string"?re.set("Content-Length",Buffer.byteLength(k)):re.set("Content-Length",k.length),J=!0):k instanceof Is&&(k.size?re.set("Content-Length",k.size):k.on&&(W=!0,k.on("size",Te=>{g.headersSent||g.setHeader("Content-Length",Te)})),k=k.stream()):(re.set("Content-Length","0"),J=!0);let Re=`hdb;dur=${q.toFixed(2)}`;if(O.wasCacheMiss&&(Re+=", miss"),Ap(re,"Server-Timing",Re,!0),!g.headersSent)if(W){if(re)if(re[Symbol.iterator])for(let[Te,Fe]of re)g.setHeader(Te,Fe);else for(let Te in re)g.setHeader(Te,re[Te])}else g.writeHead(F,re&&(re[Symbol.iterator]?Array.from(re):re));J&&g.end(k)}let ue=N.handlerPath,ce=N.method;if(Xe(q,"duration",ue,ce,O.wasCacheMiss==null?void 0:O.wasCacheMiss?"cache-miss":"cache-hit"),zr(F<400,"success",ue,ce),zr(1,"response_"+F,ue,ce),wE(E,F,S,q),!J)if(k instanceof ReadableStream&&(k=CD.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=CD.Readable.from(k)),k?.pipe){k.pipe(g),k.destroy&&g.on("close",()=>{k.destroy()});let re=0;k.on("data",Re=>{re+=Re.length}),k.on("end",()=>{Xe(performance.now()-te,"transfer",ue,ce),Xe(re,"bytes-sent",ue,ce)})}else k?.then?k.then(re=>{g.end(re)},R):g.end(k)}catch(N){R(N)}function R(N){let O=N.headers,F=N.statusCode||500;g.writeHead(F,O&&(O[Symbol.iterator]?Array.from(O):O)),g.end(Jbe(N)),wE(E,F,S,performance.now()-A),N.statusCode?N.statusCode===500?Ea.default.warn(N):Ea.default.info(N):Ea.default.error(N)}o(R,"onError")},"requestHandler"),p=jg(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),Xe(!0,"service-unavailable",e)},Dr.default.get(s+"_requestQueueLimit")),h=cR[e]=(t?f?G4.createSecureServer:$4.createServer:fR.createServer)(l,(E,g)=>{let A=E.method;A==="GET"||A==="OPTIONS"||A==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Xe(performance.now()-E._parent.startTime,"tls-handshake",e),Xe(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),LD(h,e)}return cR[e]}function dR(e,t){let r=W4;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 W4(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Us}}function rIe(e,t){MD(e,{requestOnly:!0,...t})}function z4(e,t){for(let{port:r}of DD(t))U4[t?.runFirst?"unshift":"push"]({listener:e,port:r}),PD[r]=dR(U4,r)}function nIe(e,t){let r=[];for(let{port:n,secure:s}of DD(t)){aR(n,{protocol_name:s?"WSS":"WS",name:pR()});let i=Y4(n,s,t?.isOperationsServer,t?.mtls);bE[n]||(bE[n]=new V4.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),bE[n].on("connection",(a,c)=>{try{let l=new Xa(c);l.isWebSocket=!0;let u=uR[n](l);Ea.default.debug("Received WS connection, calling listeners",wD),x4[n](a,l,u)}catch(l){Ea.default.warn("Error in handling WS connection",l)}}),z4((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):bE[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),bE[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{PD[n]&&PD[n](a,c,l)})),r.push(i),wD[t?.runFirst?"unshift":"push"]({listener:e,port:n}),x4[n]=dR(wD,n),uR[n]=dR(OD,n)}return r}function B4(e,t){t.writeHead(404),t.end(`Not found
|
|
130
|
+
`),wE(e,404,0,e.requestId)}function wE(e,t,r,n){let s=NE.logging;if(s){ND||(ND=Ea.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";ND[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+sIe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function sIe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function j4(){return IE||(IE=new BigInt64Array([1n]),IE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",IE.buffer))),Number(Atomics.add(IE,0,1n))}var F4,Ea,lR,Dr,k4,H4,q4,G4,$4,fR,CD,V4,Jbe,bE,cR,uR,OD,NE,Xbe,v4,U4,PD,wD,x4,ND,IE,vD=ie(()=>{F4=require("node:net"),Ea=w(j()),lR=require("node:worker_threads"),Dr=w(ae());H();k4=w(bt()),H4=w(Je()),q4=w(ms()),G4=require("node:http2"),$4=require("node:https"),fR=require("node:http");Fp();bp();ws();Os();CD=require("node:stream");xr();ID();$h();iN();V4=require("ws");Xh();({errorToString:Jbe}=Ea.default);Ue.http=MD;Ue.request=rIe;Ue.ws=nIe;Ue.upgrade=z4;bE={},cR={},uR={},OD=[],NE={},Xbe=!0;o(Zbe,"handleApplication");o(eIe,"getHttpOptions");o(K4,"deliverSocket");v4=new Map;o(tIe,"proxyRequest");o(LD,"registerServer");o(DD,"getPorts");o(MD,"httpServer");o(Y4,"getHTTPServer");o(dR,"makeCallbackChain");o(W4,"unhandled");o(rIe,"onRequest");Object.defineProperty(fR.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){}});U4=[],PD={};o(z4,"onUpgrade");wD=[],x4={};o(nIe,"onWebSocket");o(B4,"defaultNotFound");o(wE,"logRequest");o(sIe,"headersToString");o(j4,"getRequestId")});var xD=M(OE=>{"use strict";NA();var{isMainThread:UD,parentPort:Q4,threadId:hR,workerData:iIe}=require("node:worker_threads"),{createServer:oIe}=require("node:net"),{unlinkSync:X4,existsSync:aIe}=require("fs"),Z4;OE.whenComponentsLoaded=new Promise(e=>{Z4=e});var Li=j(),ti=ae(),Rs=(H(),D(Y)),{server:cIe}=(xr(),D(im)),{createServer:lIe}=require("node:tls"),{restartNumber:uIe,getWorkerIndex:Mf}=Je(),{createReuseportFd:CE}=(Fp(),D(MG)),{createTLSSelector:dIe}=ms(),{resolvePath:fIe}=bt(),{startupLog:mIe}=L4(),{SERVERS:vf,setPortServerMap:J4,portServer:pIe}=(ID(),D(M4)),hIe=(vD(),D(mR)),EIe=oi(),eJ=ti.get(Rs.CONFIG_PARAMS.THREADS_DEBUG),_Ie=ti.get(Rs.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);cIe.socket=gIe;if(eJ){let e;if(UD)e=ti.get(Rs.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Li.info("Could not close debugger",t)}});else{let t=ti.get(Rs.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Mf()>=0&&(e=t+Mf())}if(e){let t=ti.get(Rs.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ti.get(Rs.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Li.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&UD)try{require("inspector").open(9229)}catch(e){uIe<=1&&Li.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"&&Li.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:eGe,CONFIG_PARAMS:tGe}=Rs;ti.initSync();OE.globals=EIe;OE.listenOnPorts=rJ;OE.startServers=tJ;function tJ(){let e=ti.get(Rs.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=ER().loadRootComponents(!0).then(()=>{Q4?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)deliverSocket(i,s,a);else if(n.requestId)hIe.proxyRequest(n);else if(n.type===Rs.ITC_EVENT_TYPES.SHUTDOWN){Li.trace("received shutdown request",hR);for(let c in vf){let l=vf[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?Li.info(`Closing ${E.length} idle connections`):h&&Li.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
|
|
131
131
|
Connection: close\r
|
|
132
132
|
\r
|
|
133
|
-
`))}},25).unref()}l.close?.(()=>{if(ti.get(Rs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Mf()==0)try{z4(aIe(ti.get(Rs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,hR),l.cantCleanupProperly||Li.warn("Had to forcefully exit the thread",hR),process.exit(0)},5e3).unref()})}if(Q4||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Li.info("Could not close debugger",c)}}}).ref();let r;CE&&!fIe&&(r=X4()),Promise.resolve(r).then(()=>{if(Mf()===0)try{cIe(lIe)}catch(n){console.error("Error displaying start-up log",n)}Y4?.postMessage({type:Rs.ITC_EVENT_TYPES.CHILD_STARTED})})});return j4(t),t}o(J4,"startServers");function X4(){let e=[];for(let t in vf){let r=vf[t];if(t.includes?.("/")&&Mf()==0){rIe(t)&&z4(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Li.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ti.get(Rs.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=Mf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?CE?n={fd:CE(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:CE?n={fd:CE(+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}),Li.trace("Listening on port "+t,hR)}).on("error",c)}))}return Promise.all(e)}o(X4,"listenOnPorts");!DD&&!eIe?.noServerStart&&J4();function mIe(e,t){let r=($h(),M(ey)).getComponentName,n;if(t.securePort){W4(t.securePort,{protocol_name:"TLS",name:r()});let s=oIe("server",t.mtls),i=ti.get("tls");n=sIe({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),vf[t.securePort]=n}return t.port&&(W4(t.port,{protocol_name:"TCP",name:r()}),n=tIe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),vf[t.port]=n),n}o(mIe,"onSocket")});var C4={};Ie(C4,{startHTTPThreads:()=>pIe,startSocketServer:()=>BD,updateWorkerIdleness:()=>iJ});async function pIe(e=2,t){bb().catch(r=>SR.error?.("Error recording hostname for analytics:",r));try{if(t)UD(0,1,!0);else{let{loadRootComponents:r}=ER();if(e===0)return(0,_o.setMainIsWorker)(!0),await MD().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)UD(r,e);return Promise.all(sJ)}finally{(0,_o.threadsHaveStarted)()}}function UD(e,t=1,r){if(vD++,(0,_o.startWorker)("server/threads/threadServer.js",{name:wA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===AA.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});sJ.push(s),await s,Uf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=gR.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=Uf.indexOf(n);a>-1&&Uf.splice(a,1)}if(o(i,"removeWorker"),xf){let a=xf;xf=[];for(let c of a)nJ[c.localPort](null,c)}}}),r){let n=setInterval(()=>{xD?xD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,_o.shutdownWorkers)(),vD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function BD(e=0,t){if(typeof e=="string")try{(0,TR.existsSync)(e)&&(0,TR.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=hIe:r=EIe(t):r=FD;let n=(0,Bf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=nJ[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),xD=!0,r(i,(a,c)=>{if(!a){if(Z4){let u=i._socket||new Bf.Socket({handle:i,writable:!0,readable:!0});Z4.deliverSocket(u,e,c),u.resume()}else vD>0?(xf.length===0&&setTimeout(()=>{xf.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,xf.push(i)):(console.log("start up a dynamic thread to handle request"),UD(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 Bf.Socket({handle:i,writable:!0,readable:!0});SIe(u,a,e)}Xe(!0,"socket-routed")})},SR.info(`HarperDB ${rJ.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function FD(e,t){let r,n=0;for(let s of Uf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=_R)return _R=i,t(r);n=i}_R=0,t(r)}function hIe(e,t){let r={};e.getpeername(r);let n=r.address,s=Ff.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);FD(e,a=>{Ff.set(n,{worker:a,lastUsed:i}),t(a)})}function EIe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Bf.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=Ff.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);FD(n,f=>{Ff.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function iJ(){_R=0;for(let e of Uf)e.expectedIdle=e.recentELU.idle+_Ie,e.requests=1;Uf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function SIe(e,t,r){let n=gIe++;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(),gR.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")),gR.delete(n)),s.event=="destroy"&&(e.destroy(),gR.delete(n))})}var _o,Bf,SR,TR,tJ,rJ,Uf,xf,nJ,Z4,vD,sJ,xD,_R,eJ,Ff,_Ie,gR,gIe,TD=ie(()=>{_o=w(Je()),Bf=require("net");H();SR=w(j()),TR=require("fs");Os();tJ=require("worker_threads"),rJ=w(It()),Uf=[],xf=[],nJ=[],vD=0,sJ=[];tJ.isMainThread&&process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});o(pIe,"startHTTPThreads");o(UD,"startHTTPWorker");o(BD,"startSocketServer");_R=0;o(FD,"findMostIdleWorker");eJ=36e5,Ff=new Map;o(hIe,"findByRemoteAddressAffinity");o(EIe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ff)r.lastUsed+eJ<e&&Ff.delete(t)},eJ).unref();_Ie=1e3;o(iJ,"updateWorkerIdleness");(0,_o.setMonitorListener)(iJ);gR=new Map,gIe=1;o(SIe,"proxySocket")});var kD={};Ie(kD,{hdbServer:()=>AIe,start:()=>AIe});async function AIe(e){try{go.default.debug("In Fastify server"+process.cwd()),go.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),go.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=oJ.default.isMaster,await bIe();let t=e.securePort>0;kf=IIe(t),await kf.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(kf.server,e),kf.server.closeIdleConnections||await kf.listen({port:0,host:"::"})}catch(r){throw kf.close(),go.default.error(r),go.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),go.default.fatal(t),process.exit(1)}}async function bIe(){return go.default.trace("Configuring HarperDB process."),pJ.default.setSchemaDataToGlobal(),EJ.default.setUsersWithRolesCache()}function IIe(e){go.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=wIe(e),r=(0,aJ.default)(t);r.server.headersTimeout=CIe(),r.setErrorHandler(Dc.serverErrorHandler);let n=NIe();n&&r.register(cJ.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(dJ.default),r.register(lJ.default),r.register(uJ.default,{root:fJ.default.join(mJ.PACKAGE_ROOT,"studio/build-local")}),Tm(r);let s=Lc.default.get(nm.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!hJ.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Dc.reqBodyValidationHandler,Dc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Dc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),go.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function wIe(e){let t=Lc.default.get(PE.OPERATIONSAPI_NETWORK_TIMEOUT),r=Lc.default.get(PE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:yIe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function NIe(){let e=Lc.default.get(PE.OPERATIONSAPI_NETWORK_CORS),t=Lc.default.get(PE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===RIe)&&(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 CIe(){return Lc.default.get(PE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??TIe}var oJ,Lc,go,aJ,cJ,lJ,uJ,dJ,fJ,mJ,pJ,hJ,EJ,Dc,TIe,yIe,RIe,PE,kf,_J=ie(()=>{oJ=w(require("cluster")),Lc=w(ae());H();go=w(j()),aJ=w(require("fastify")),cJ=w(require("@fastify/cors")),lJ=w(require("@fastify/compress")),uJ=w(require("@fastify/static")),dJ=w(UN()),fJ=w(require("path")),mJ=w(It()),pJ=w(mi()),hJ=w(oe()),EJ=w(cs());xr();Dc=w(xy());Po();Lc.default.initSync();TIe=6e4,yIe=1024*1024*1024,RIe="TRUE",{CONFIG_PARAMS:PE}=Y;o(AIe,"operationsServer");o(bIe,"setUp");o(IIe,"buildServer");o(wIe,"getServerOptions");o(NIe,"getCORSOpts");o(CIe,"getHeaderTimeoutConfig")});var KD={};Ie(KD,{disableNATS:()=>PIe,publishToStream:()=>AR,setNATSReplicator:()=>HD,setPublishToStream:()=>LIe,setSubscription:()=>VD,start:()=>OIe});function OIe(){LE.default.get(B.CLUSTERING_ENABLED)&&MIe()}function PIe(e=!0){RJ=e}function LIe(e,t){AR=e,VD=t}function MIe(){if(RJ||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];HD(s,r,i)}}Nl((r,n)=>{HD(r.tableName,r.databaseName,r),n&&bJ(r)}),!gJ&&(gJ=!0)}function HD(e,t,r){if(t==="system"&&vIe.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 Fr{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){bJ(i)}static subscribe(){let i=new Qn;return VD(t,e,i),i}static subscribeOnThisThread(i){return i<(LE.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??DIe)}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 yR(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=AJ;return i}o(n,"getNATSTransaction")}function bJ(e){let t=LE.default.get(B.CLUSTERING_NODENAME);AR(`${GD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,$D.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 SJ,GD,$D,TJ,yJ,LE,RR,RJ,AR,VD,DIe,AJ,gJ,vIe,yR,qD,IJ=ie(()=>{Oe();Ua();SJ=w(Ft()),GD=w(pt()),$D=w(zi());Nu();TJ=w(ZN()),yJ=w(Cn()),LE=w(ae());H();RR=w(j());o(OIe,"start");o(PIe,"disableNATS");AR=SJ.publishToStream,VD=TJ.setSubscription;o(LIe,"setPublishToStream");DIe=2;o(MIe,"assignReplicationSource");vIe=["hdb_job","hdb_raw_analytics","hdb_info"];o(HD,"setNATSReplicator");o(bJ,"publishSchema");yR=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=LE.default.get(B.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||(RR.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(AR(`${GD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,$D.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw RR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},qD=class extends yR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,yJ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};AJ=new qD});async function PJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await YD.get(e,{returnNonexistent:!0});i=new jD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await YD.get(e);a&&a.delete()}i=new IR(e,t)}return n&&(n.id=e,n.user={username:t?.username},DE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function WD(){return bR++,bR>65500&&(bR=1),bR}function zD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Ls.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 ci(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return Rt(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var NJ,Mc,CJ,OJ,wJ,YD,DE,bR,IR,jD,LJ=ie(()=>{Oe();xa();NJ=w(Cn()),Mc=w(j());Ca();CJ=w(Je()),OJ=w(MD());xr();sg();wJ=100,YD=Ze({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),DE=Ze({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,CJ.getWorkerIndex)()===0&&(async()=>{await OJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of DE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await zD(r,t,r)}catch{(0,Mc.warn)("Failed to publish will",t)}DE.delete(e.id)}})();o(PJ,"getSession");bR=1;o(WD,"getNextMessageId");IR=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,Mc.trace)("Resuming subscription from",s,"from",a);let p=Ls.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 R=S.split("/"),N;for(let ee=0;ee<R.length;ee++)if(R[ee].indexOf("+")>-1)if(R[ee]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let O=!0;R[R.length-1]==="#"&&(R.length--,O=!1),N&&(n=o(ee=>{let q=ee.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(O&&q.length!==R.length)return!1;for(let k=0;k<R.length;k++)if(R[k]!=="+"&&R[k]!==q[k])return!1;return!0},"filter"));let F=R.indexOf("+");m.url="/"+(F>-1?R.slice(0,F):R).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,A=await Rt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let R=await g.subscribe(m,S);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let O of R)try{let F;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,F=this.needsAcknowledge(O)):(O.acknowledge?.(),F=WD());let ee=O.id;if(Array.isArray(ee)&&(ee=Vu(ee)),ee==null&&(ee=""),await this.listener(E+"/"+ee,O.value,F,t)===!1)break;this.awaitingAcks?.size>wJ?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-wJ)):await new Promise(setImmediate)}catch(F){(0,Mc.warn)(F)}})();return R});if(A)return A.topic=s,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=WD();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 zD(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();Rt(r,async()=>{try{if(!t){let n=await DE.get(this.sessionId);n?.doesExist()&&await zD(n,n.data,r)}}finally{await DE.delete(this.sessionId)}}).catch(n=>{(0,Mc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(zD,"publish");jD=class extends IR{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=WD(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Mc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,NJ.getNextMonotonicTime)()),(0,Mc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),YD.put(this.sessionRecord)}}});var QD={};Ie(QD,{bypassAuth:()=>UIe,start:()=>BIe});function UIe(){FJ=!0}function BIe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new BJ.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}=MJ(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 Yd(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,Hf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&NR.notify?.({username:d?.username,status:ii.SUCCESS,type:Ia.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Hf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&NR.error?.({username:h,status:ii.FAILURE,type:Ia.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&&xIe(u.remoteAddress)&&(d=await(0,vJ.getSuperUser)(),Zt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=MJ(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 MJ(e,t,r,n,s){DJ||(DJ=!0,Bm(f=>{wR>0&&f.push({metric:"mqtt-connections",connections:wR,byThread:!0})}));let i;wR++;let a,c={protocolVersion:4},l=(0,CR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){wR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!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(R){e.close?.(1008,"Unauthorized"),Zt.info?.(R);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,Hf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&NR.notify?.({username:n?.username,status:ii.SUCCESS,type:Ia.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(J){return(0,Hf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&NR.error?.({username:f.username,status:ii.FAILURE,type:Ia.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,J),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let J=e.deserialize||(e.deserialize=Oo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?J(f.will.payload):void 0,delete f.will.payload}a=PJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(J){return Zt.error?.(J),s.events.emit("auth-failed",f,e,J),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:J.code||5,returnCode:J.code||128})}s.events.emit("connected",a,e),zr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(J,W,ue,ce)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",J);let re=J.indexOf("/",1),Re=re>0?J.slice(0,re):J;g({cmd:"publish",topic:J,payload:await S(W),messageId:ue||Math.floor(Math.random()*1e8),qos:ce.qos},Re);let Te=e._socket??e;return Te.writableNeedDrain?new Promise(Fe=>Te.once("drain",Fe)):!Te.closed}catch(re){return Zt.error?.(re),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let N=[];for(let J of f.subscriptions){let W;try{let ue=await a.addSubscription(J,J.qos>=1);W=ue?ue.qos||0:c.protocolVersion<5?128:143}catch(ue){s.events.emit("error",ue,e,J,a),ue.statusCode?ue.statusCode===500?Zt.warn?.(ue):Zt.info?.(ue):Zt.error?.(ue),W=c.protocolVersion<5?128:ue.statusCode===403?135:ue.statusCode===404?143:128}N.push(W)}await a.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let J=[];for(let W of f.unsubscriptions)J.push(a.removeSubscription(W)?0:17);g({cmd:"unsuback",granted:J,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let O=f.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=Oo(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?F(f.payload):void 0,k;try{k=await a.publish(f,q)}catch(J){s.events.emit("error",J,e,f,a),Zt.warn?.(J),f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:k===!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),zr(!0,"connection","mqtt","disconnect"),Zt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,f,a),Zt.error?.(R),g({cmd:"disconnect"})}function g(R,N){let O=(0,CR.generate)(R,c);t(O),Xe(O.length,"bytes-sent",N,A(R),"mqtt")}o(g,"sendPacket");function A(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(A,"packetMethodName");function S(R){return Co(R,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 CR,vJ,Hf,UJ,xJ,BJ,NR,Zt,FJ,xIe,DJ,wR,kJ=ie(()=>{CR=require("mqtt-packet");LJ();vJ=w(cs());Po();Os();xr();Hf=w(ae());H();UJ=w(Jn()),xJ=w(j()),BJ=require("events");iT();NR=(0,UJ.loggerWithTag)("auth-event"),Zt=(0,xJ.forComponent)("mqtt"),FJ=(0,Hf.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(UIe,"bypassAuth");xIe=o(e=>FJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(BIe,"start");wR=0;o(MJ,"onSocket")});function OR(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,XD=ie(()=>{JD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(OR,"resolveBaseURLPath")});function HJ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var qJ=ie(()=>{o(HJ,"deriveCommonPatternBase")});function PR(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 ZD=ie(()=>{o(PR,"deriveGlobOptions")});var GJ,eM,ME,$J=ie(()=>{XD();qJ();ZD();GJ=require("micromatch"),eM=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"}},ME=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=OR(this.name,this.config.urlPath),this.globOptions=PR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new eM(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,GJ.scan)(s).base),this.commonPatternBase=HJ(this.patternBases)}}});function VJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Eu(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(VJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(VJ(n,t)){t=t.slice(n.length+1);break}}}return(0,KJ.join)(e.baseURLPath,t)}var KJ,tM=ie(()=>{KJ=require("node:path");o(VJ,"pathStartsWithBase");o(Eu,"deriveURLPath")});function YJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var DR,WJ,zJ,rM,jJ,QJ,LR,JJ=ie(()=>{DR=require("node:events");$J();WJ=w(j()),zJ=w(require("chokidar")),rM=require("node:path"),jJ=require("node:fs/promises");tM();QJ=require("micromatch"),LR=class extends DR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new ME(t,r,YJ(n)),this.#r=s||WJ.default.loggerWithTag(t),this.ready=(0,DR.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,QJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,rM.join)(this.directory,r);switch(t){case"add":case"change":{let i=Eu(this.#e,r,"file");(0,jJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=Eu(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=Eu(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,rM.join)(this.#e.directory,r));return this.#t=zJ.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 ME(this.name,this.directory,YJ(t)),this.#a()}};o(YJ,"castConfig")});var MR,nM=ie(()=>{MR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var UR,XJ,ZJ,e3,t3,r3,sM,iM,oM,aM,cM,vR,n3=ie(()=>{UR=require("events"),XJ=w(require("yaml")),ZJ=w(require("chokidar")),e3=require("node:fs/promises"),t3=require("util"),r3=w(j());nM();sM=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"}},iM=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},oM=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"}},aM=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},cM=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},vR=class extends UR.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||r3.default.loggerWithTag(t),this.ready=(0,UR.once)(this,"ready"),this.#t=ZJ.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,e3.readFile)(this.#e,"utf-8").then(t=>{this.#n=XJ.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 sM(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=MR,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,t3.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 iM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new oM(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 aM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new cM(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 FR,s3,xR,BR,i3=ie(()=>{FR=require("node:events");JJ();n3();s3=w(j());RP();xR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},BR=class extends FR.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,s3.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,FR.once)(this,"ready"),this.options=new vR(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 LR(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 xR);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 xR);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}`),oz()}}});function _u(e){return typeof e=="string"&&e.trim()!==""}function lM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>_u(t))}function l3(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function FIe(e){e.config.root&&vE.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 EM(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(l3(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,UE.join)(e.directory,i);kR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function u3(e){let t=!1;if(t=await FIe(e),t)return t;let r=await(0,o3.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,UE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Eu(e,n.path,"directory");kR.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=Eu(e,n.path,"file"),a=await(0,a3.readFile)(s);kR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else vE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var kR,o3,vE,UE,a3,c3,HR,Di,uM,dM,fM,mM,pM,hM,EM,_M,gM,d3=ie(()=>{kR=require("node:worker_threads"),o3=w(require("fast-glob")),vE=w(j());XD();ZD();UE=require("node:path"),a3=require("node:fs/promises");tM();c3=require("micromatch"),HR=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,!_u(this.config.files)&&!lM(this.config.files)&&!l3(this.config.files))throw new uM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!lM(this.config.files.source)&&!_u(this.config.files.source))throw new dM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new fM(this);if(this.config.files.ignore!==void 0&&!lM(this.config.files.ignore)&&!_u(this.config.files.ignore))throw new mM(this)}if(this.config.root!==void 0&&!_u(this.config.root))throw new hM(this);if(this.config.path!==void 0&&!_u(this.config.path))throw new _M(this);if(this.config.path&&(vE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!_u(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new gM(this);this.globOptions=PR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new pM(this,r);return r.startsWith("/")&&(vE.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,c3.scan)(r).base),this.baseURLPath=OR(this.name,this.config.urlPath)}},Di=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,UE.basename)(r.directory)}) ${t}`)}},uM=class extends Di{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)}},dM=class extends Di{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},fM=class extends Di{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},mM=class extends Di{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},pM=class extends Di{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},hM=class extends Di{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)}},EM=class extends Di{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)}},_M=class extends Di{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},gM=class extends Di{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(_u,"isNonEmptyString");o(lM,"isArrayOfNonEmptyStrings");o(l3,"isObject");o(FIe,"handleRoots");o(u3,"processResourceExtensionComponent")});var ey={};Ie(ey,{getComponentName:()=>pR,loadComponent:()=>VR,loadComponentDirectories:()=>p3,setErrorReporter:()=>HIe});function p3(e,t){t&&(TM=t),e&&(bM=e);let r=[];if((0,Pt.existsSync)(SM)){let s=(0,Pt.readdirSync)(SM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,on.join)(SM,a);r.push(VR(c,TM,SA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(VR(n,TM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{m3=!0})}function HIe(e){GR=e}function qIe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{oa.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(oa.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Pt.rmSync)(t,{recursive:!0,force:!0}),(0,Pt.existsSync)((0,on.join)(e,"node_modules"))||(0,Pt.mkdirSync)((0,on.join)(e,"node_modules")),(0,Pt.symlinkSync)(wM.PACKAGE_ROOT,t,"dir"),r()}finally{oa.primaryStore.unlock(e,0)}})}function h3(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 oa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(h3(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(()=>{oa.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 VR(e,t,r,n,s,i){let a=(0,Pt.realpathSync)(e);if(qR.has(a))return qR.get(a);qR.set(a,!0),s&&(bM=s);try{let c,l=(0,on.join)(e,"harperdb-config.yaml");(0,Pt.existsSync)(l)?c=n?(0,KR.getConfigObj)():(0,RM.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Pt.existsSync)(l=(0,on.join)(e,"config.yaml"))?c=(0,RM.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():c=MR;try{let m=(0,on.join)(e,"node_modules","harperdb");(n||((0,Pt.existsSync)(m)||!e.startsWith((0,AM.getHdbBasePath)()))&&(!(0,Pt.existsSync)(m)||(0,Pt.realpathSync)(wM.PACKAGE_ROOT)!==(0,Pt.realpathSync)(m)))&&await qIe(e,m)}catch(m){_a.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&_a.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=$R,d={};for(let m in c){let p=`${(0,on.basename)(e)}.${m}`;$R=m;let h=c[m];if(!h)continue;let E,g=h.package;try{if(g){let O=e,F;for(;!(0,Pt.existsSync)(F=(0,on.join)(O,"node_modules",m));)if(O=(0,on.dirname)(O),O.length<(0,AM.getHdbBasePath)().length){F=null;break}if(F)E=await VR(F,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=kIe[m];if(!E)continue;Vo.loading(p);let A=o(O=>(O.origin=r,Ze(O)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,R=S?.securePort||S?.https&&S.port,N=!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 O=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw Vo.failed(p,O,`Component '${p}' failed to load`),O}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&_a.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let O=new BR(m,e,l,t,Ue);await h3(O,E),Vo.loaded(p,`Component '${p}' loaded successfully`);continue}if(yM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:A,port:N,securePort:R,resources:t,...h})||E,n&&S))for(let O of[N,R])try{if(+O&&!f3.includes(O)){let F=IM.get(B.HTTP_SESSIONAFFINITY);F&&_a.default.warn("Session affinity is not recommended and may cause memory leaks"),(F||!ES)&&(f3.push(O),BD(O,F))}}catch(F){console.error("Error listening on socket",O,F,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:A,port:N,securePort:R,resources:t,...h})||E),bM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let O=new HR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await u3(O)}Vo.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}`,GR?.(A),((0,xE.getWorkerIndex)()===0?console:_a.default).error(A),t.set(h.path||"/",new il(A),null,!0),Vo.failed(p,A,`Could not load component '${p}'`)}}if($R=u,yM.isMainThread&&!m3&&i&&(0,xE.watchDir)(e,async()=>p3()),c.extensionModule||c.pluginModule){let m=await mS((0,on.join)(e,c.extensionModule||c.pluginModule));return qR.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?`;GR?.(new Error(m)),((0,xE.getWorkerIndex)()===0?console:_a.default).error(m),Vo.failed((0,on.basename)(e),m)}for(let[m,p]of Object.entries(d))p||_a.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}`,GR?.(c),t.set("",new il(c))}}var Pt,on,yM,RM,IM,wM,_a,xE,AM,KR,SM,bM,m3,TM,kIe,f3,qR,GR,$R,pR,$h=ie(()=>{Pt=require("node:fs"),on=require("node:path"),yM=require("node:worker_threads"),RM=require("yaml"),IM=w(ae()),wM=w(It());H();$q();Zq();mG();SG();TG();UG();J2();X2();eQ();_a=w(j());oQ();xE=w(Je());bN();xr();Oe();TD();AM=w(ae());_J();zT();IJ();ds();kJ();KR=w(At());Fp();Hb();i3();d3();LD();zh();Sp();nM();SM=(0,KR.resolvePath)(IM.get(B.COMPONENTSROOT)),bM=new Map;o(p3,"loadComponentDirectories");kIe={REST:gS,rest:gS,graphql:EN,graphqlSchema:pN,roles:AN,jsResource:IN,fastifyRoutes:xL,login:NN,static:FL,operationsApi:kD,customFunctions:{},http:mR,clustering:KD,replication:zo,authentication:xh,mqtt:QD,loadEnv:kL,logging:_a.default,dataLoader:HL},f3=[],qR=new Map;o(HIe,"setErrorReporter");pR=o(()=>$R,"getComponentName");o(qIe,"symlinkHarperModule");o(h3,"sequentiallyHandleApplication");o(VR,"loadComponent")});var ER=D((b$e,E3)=>{var{isMainThread:NM}=require("worker_threads"),{getTables:GIe,getDatabases:R$e,table:A$e}=(Oe(),M(mt)),{loadComponentDirectories:$Ie,loadComponent:VIe}=($h(),M(ey)),{resetResources:KIe}=(xa(),M(qb)),YIe=aP(),WIe=At(),{dirname:zIe}=require("path"),{getConnection:jIe}=Ft(),QIe=ae(),{CONFIG_PARAMS:JIe}=(H(),M(Y)),{loadCertificates:XIe}=ms(),{loadAndWatchLicensesDir:ZIe}=(Xh(),M(dy)),CM=new Map;async function ewe(e=!1){!NM&&QIe.get(JIe.CLUSTERING_ENABLED)&&jIe();try{NM&&await YIe()}catch(n){console.error(n)}let t=KIe();GIe(),t.isWorker=e,NM&&ZIe(),await XIe(),await VIe(zIe(WIe.getConfigFilePath()),t,"hdb",!0,CM),await $Ie(CM,t);let r=[];for(let[n]of CM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(ewe,"loadRootComponents");E3.exports.loadRootComponents=ewe});var Je=D((w$e,vi)=>{"use strict";NA();var{Worker:twe,MessageChannel:rwe,parentPort:So,isMainThread:MM,threadId:nwe,workerData:To}=require("worker_threads"),{PACKAGE_ROOT:swe}=It(),{join:T3,isAbsolute:iwe,extname:owe}=require("path"),{server:y3}=(xr(),M(im)),{watch:awe,readdir:cwe}=require("fs/promises"),{totalmem:_3}=require("os"),qf=(H(),M(Y)),R3=ae(),Mi=j(),{randomBytes:lwe}=require("crypto"),{_assignPackageExport:uwe}=oi(),g3=1024*1024,vc=[],ri=[],dwe=50,vM=1e4,fwe="restart",A3="request_thread_info",b3="resource_report",I3="thread_info",w3="added-port",mwe="ack",OM;uwe("threads",ri);vi.exports={startWorker:PM,restartWorkers:xM,shutdownWorkers:gwe,workers:vc,setMonitorListener:wwe,onMessageFromWorkers:Swe,onMessageByType:M3,broadcast:ywe,broadcastWithAcknowledgement:Awe,setChildListenerByType:_we,getWorkerIndex:N3,getWorkerCount:C3,getTicketKeys:P3,setMainIsWorker:hwe,setTerminateTimeout:pwe,restartNumber:To?.restartNumber||1};ri.onMessageByType=M3;ri.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ri.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};vi.exports.whenThreadsStarted=new Promise(e=>{vi.exports.threadsHaveStarted=e});var UM;function pwe(e){vM=e}o(pwe,"setTerminateTimeout");function N3(){return To?To.workerIndex:UM?0:void 0}o(N3,"getWorkerIndex");function C3(){return To?To.workerCount:UM?1:void 0}o(C3,"getWorkerCount");function hwe(e){UM=e,vi.exports.threadsHaveStarted()}o(hwe,"setMainIsWorker");var O3=1,YR;function P3(){return YR||(YR=MM?lwe(48):To.ticketKeys,YR)}o(P3,"getTicketKeys");Object.defineProperty(y3,"workerIndex",{get(){return N3()}});Object.defineProperty(y3,"workerCount",{get(){return C3()}});var L3={[A3](e,t){bwe(t)},[b3](e,t){Iwe(t,e)}};function PM(e,t={}){let r=process.constrainedMemory?.()||_3();r=Math.min(r,_3(),2e4*g3);let n=R3.get(qf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/g3/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of ri){let u=new rwe;u.existingPort=l,i.push(u),a.push(u.port2)}owe(e)||(e+=".js");let c=new twe(iwe(e)?e:T3(swe,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:O3=t.threadCount,name:t.name,restartNumber:vi.exports.restartNumber,ticketKeys:P3()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:w3,port:l,threadId:c.threadId},[l]);return zR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>PM(e,t),c.on("error",l=>{Mi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{vc.splice(vc.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<dwe?(t.unexpectedRestarts=c.unexpectedRestarts+1,PM(e,t)):Mi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{L3[l.type]?.(l,c)}),vc.push(c),Cwe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(PM,"startWorker");var Ewe=[qf.THREAD_TYPES.HTTP];async function xM(e=null,t=Math.max(O3>3,1),r=!0){if(MM){try{process.chdir(process.cwd())}catch(a){Mi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=ER();await a()}vi.exports.restartNumber++,t<1&&(t=t*vc.length);let n=[],s=[];for(let a of vc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Mi.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:vi.exports.restartNumber,type:qf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=Ewe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Mi.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},vM*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===qf.ITC_EVENT_TYPES.CHILD_STARTED&&(Mi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Mi.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)&&R3.get(qf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else So.postMessage({type:fwe,workerType:e})}o(xM,"restartWorkers");function _we(e,t){L3[e]=t}o(_we,"setChildListenerByType");function gwe(e){return xM(e,1/0,!1)}o(gwe,"shutdownWorkers");var D3=[];function Swe(e){D3.push(e)}o(Swe,"onMessageFromWorkers");var LM=new Map;function M3(e,t){let r=LM.get(e);r||LM.set(e,r=[]),r.push(t)}o(M3,"onMessageByType");var Twe=10;async function ywe(e,t){let r=0;for(let n of ri)try{n.postMessage(e),r++>Twe&&(r=0,await new Promise(setImmediate))}catch(s){Mi.error("Unable to send message to worker",s)}t&&U3(e,null)}o(ywe,"broadcast");var WR=new Map,Rwe=1;function Awe(e){return new Promise(t=>{let r=0;for(let n of ri)try{let s=Rwe++,i=o(()=>{WR.delete(s),--r===0&&t(),n!==So&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,WR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of WR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Mi.error("Unable to send message to worker",s)}r===0&&t()})}o(Awe,"broadcastWithAcknowledgement");function bwe(e){e.postMessage({type:I3,workers:v3()})}o(bwe,"sendThreadInfo");function v3(){let e=Date.now();return vc.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(v3,"getChildWorkerInfo");function Iwe(e,t){e.resources=t,e.resources.updated=Date.now()}o(Iwe,"recordResourceReport");var DM;function wwe(e){DM=e}o(wwe,"setMonitorListener");var Nwe=1e3,S3=!1;function Cwe(){S3||(S3=!0,setInterval(()=>{for(let e of vc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}DM&&DM()},Nwe).unref())}o(Cwe,"startMonitoring");var Owe=1e3;if(So&&To?.addPorts){zR(So);for(let e=0,t=To.addPorts.length;e<t;e++){let r=To.addPorts[e];r.threadId=To.addThreadIds[e],zR(r)}setInterval(()=>{let e=process.memoryUsage();So.postMessage({type:b3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Owe).unref(),OM=o(()=>new Promise((e,t)=>{So.on("message",r),So.postMessage({type:A3});function r(n){n.type===I3&&(So.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else OM=v3;vi.exports.getThreadInfo=OM;function zR(e,t){ri.push(e),e.on("message",r=>{if(r.type===w3)r.port.threadId=r.threadId,zR(r.port);else if(r.type===mwe){let n=WR.get(r.id);n&&n()}else U3(r,e)}).on("close",()=>{ri.splice(ri.indexOf(e),1)}).on("exit",()=>{ri.splice(ri.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(zR,"addPort");function U3(e,t){for(let n of D3)n(e,t);let r=LM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Mi.error(s)}}o(U3,"notifyMessageListeners");if(MM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await cwe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(T3(s,a.name));try{for await(let{filename:a}of awe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await xM(),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");vi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else So.on("message",async e=>{let{type:t}=e;t===qf.ITC_EVENT_TYPES.SHUTDOWN&&(vi.exports.restartNumber=e.restartNumber,So.unref(),setTimeout(()=>{Mi.warn("Thread did not voluntarily terminate",nwe),process.exit(0)},vM).unref())})});var q3=D((P$e,H3)=>{"use strict";var{promises:Gf,createReadStream:Pwe,createWriteStream:Lwe}=require("fs"),{createGzip:Dwe}=require("zlib"),{promisify:Mwe}=require("util"),{pipeline:vwe}=require("stream"),Uwe=Mwe(vwe),FM=require("path"),k3=ae();k3.initSync();var jR=j(),{CONFIG_PARAMS:xwe,ITC_EVENT_TYPES:C$e}=(H(),M(Y)),{onMessageFromWorkers:O$e}=Je(),{convertToMS:x3}=oe(),{onStorageReclamation:Bwe}=(B_(),M(ZU)),Fwe=6e4,kwe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Hwe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",BM,B3;H3.exports=qwe;function qwe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(Bwe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(kwe);if(!i)throw new Error(Hwe);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=x3(r));let d;return BM=Date.now(),jR.trace("Log rotate enabled, maxSize:",t,"interval:",r),B3=setInterval(async()=>{if(l){let f;f=await Gf.stat(e.path),f.size>=l&&(d=await F3(e.path,i))}if(u&&Date.now()-BM>=u&&(d=await F3(e.path,i),BM=Date.now()),n||c){let f=x3(n??"1M")/(1+c);c=0;let m=await Gf.readdir(i);for(let p of m)try{let h=await Gf.stat(FM.join(i,p));Date.now()-h.mtimeMs>f&&await Gf.unlink(FM.join(i,p))}catch(h){jR.error("Error trying to remove log",p,h)}}},a??Fwe).unref(),{end(){clearInterval(B3)},getLastRotatedLogPath(){return d}}}o(qwe,"logRotator");async function F3(e,t){let r=k3.get(xwe.LOGGING_ROTATION_COMPRESS),n=FM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Gf.rename(e,n),r&&(e=n,n+=".gz",await Uwe(Pwe(e),Dwe(),Lwe(n)),await Gf.unlink(e)),jR.closeLogFile(),jR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(F3,"moveLogFile")});var Y3={};Ie(Y3,{RootConfigWatcher:()=>kM});var G3,$3,V3,QR,K3,kM,W3=ie(()=>{G3=w(require("chokidar")),$3=require("node:fs/promises"),V3=w(At()),QR=require("node:stream"),K3=require("yaml"),kM=class extends QR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,V3.getConfigFilePath)(),this.ready=(0,QR.once)(this,"ready"),this.#t=G3.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,$3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,K3.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 j=D((U$e,sA)=>{"use strict";var Sa=require("fs-extra"),{workerData:Gwe,threadId:$we,isMainThread:eX}=require("worker_threads"),kE=require("path"),tX=require("yaml"),rX=require("properties-reader"),$r=(H(),M(Y)),z3=$c(),Vwe=require("os"),{PACKAGE_ROOT:YM}=It(),{_assignPackageExport:Kwe}=oi(),{Console:Ywe}=require("console"),j3=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),Q3=new Map,{join:Ta}=kE,J3=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Wwe={STDOUT:"stdOut",STDERR:"stdErr"},v$e=Ta(YM,"logs"),zwe=Ta(YM,"config/yaml/",$r.HDB_DEFAULT_CONFIG_FILE),jwe=1e4,HE,qE,JR,ga,qM,HM,ZR,Lt,As,eA,tA,$f,FE,BE;function XR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=kE.dirname(n)):t.root?n=Ta(t.root,qM):(n=Lt.path,t.root||(t.root=kE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Lt?.level??cr.info,nX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Lt.path===e.path&&r)}o(XR,"updateLogger");function nX(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(nX,"updateConditional");async function GM(){BE||(BE=new mNe,await BE.ready,BE.on("change",GM));let e=BE.config,t=e.logging??{};XR(Lt,t),ZR=Lt.path,HE=t.console??!1,t.external&&XR(As,t.external);for(let r in e){let n=e[r];n.logging?XR(Lt.forComponent(r),n.logging,r):Lt.hasComponent(r)&&XR(Lt.forComponent(r),t,r)}}o(GM,"updateLogSettings");var $M=class extends Ywe{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){$f=!0;try{In="fatal",this.level<=cr.fatal&&super.error(...t),In="info"}finally{$f=!1}}notify(...t){$f=!0;try{In="notify",this.level<=cr.notify&&super.info(...t),In="info"}finally{$f=!1}}withTag(t){return iX(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};FE===void 0&&sX();sA.exports={notify:nNe,fatal:sNe,error:KM,warn:iNe,info:eNe,debug:rNe,trace:tNe,logLevel:ga,loggerWithTag:iX,suppressLogging:Xwe,initLogSettings:sX,logCustomLevel:oNe,closeLogFile:oX,createLogger:nA,logsAtLevel:Qwe,getLogFilePath:o(()=>ZR,"getLogFilePath"),forComponent:o(e=>Lt.forComponent(e),"forComponent"),setMainLogger:dNe,OUTPUTS:Wwe,AuthAuditLog:fNe,start:GM,startOnMainThread:GM,errorToString:uNe};sA.exports.externalLogger={notify(...e){As.notify(...e)},fatal(...e){As.fatal(...e)},error(...e){As.error(...e)},warn(...e){As.warn(...e)},info(...e){As.info(...e)},debug(...e){As.debug(...e)},trace(...e){As.trace(...e)},withTag(e){return As.withTag(e)}};Kwe("logger",sA.exports.externalLogger);function Qwe(e){return cr[ga]<=cr[e]}o(Qwe,"logsAtLevel");function sX(e=!1){try{if(FE===void 0||e){oX();let t=aNe(),r=z3(["ROOTPATH"]);try{FE=rX(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Sa.pathExistsSync(Ta(r.ROOTPATH,$r.HDB_CONFIG_FILE)))throw s}let n;if({level:ga,configLogPath:HM,toFile:qE,logConsole:HE,rotation:n,toStream:JR}=cNe(r.ROOTPATH?Ta(r.ROOTPATH,$r.HDB_CONFIG_FILE):FE.get("settings_path")),qM=$r.LOG_NAMES.HDB,ZR=Ta(HM,qM),Lt=nA({path:ZR,level:ga,stdStreams:JR,rotation:n}),As=Lt.forComponent("external"),As.tag=null,eX)try{require("segfault-handler").registerHandler(Ta(HM,"crash.log"))}catch{}}}catch(t){if(FE=void 0,t.code===$r.NODE_ERROR_CODES.ENOENT||t.code===$r.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=z3(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){ga=a;continue}i===$r.CONFIG_PARAMS.LOGGING_CONSOLE&&(HE=i)}let{defaultLevel:n}=lNe();qE=!1,JR=!0,ga=ga===void 0?n:ga,Lt=nA({level:ga}),As=Lt.forComponent("external"),As.tag=null;return}throw KM("Error initializing log settings"),KM(t),t}process.env.DEV_MODE&&(JR=!0),Jwe()}o(sX,"initLogSettings");var Uc=!0;function Jwe(){qE&&(process.stdout.write=function(e){return typeof e=="string"&&Uc&&HE&&(e=e.toString(),e[e.length-1]===`
|
|
134
|
-
`&&(e=e.slice(0,-1)),tA(e)),
|
|
135
|
-
`&&(e=e.slice(0,-1)),tA(e)),
|
|
133
|
+
`))}},25).unref()}l.close?.(()=>{if(ti.get(Rs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Mf()==0)try{X4(fIe(ti.get(Rs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,hR),l.cantCleanupProperly||Li.warn("Had to forcefully exit the thread",hR),process.exit(0)},5e3).unref()})}if(eJ||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Li.info("Could not close debugger",c)}}}).ref();let r;CE&&!_Ie&&(r=rJ()),Promise.resolve(r).then(()=>{if(Mf()===0)try{mIe(pIe)}catch(n){console.error("Error displaying start-up log",n)}Q4?.postMessage({type:Rs.ITC_EVENT_TYPES.CHILD_STARTED})})});return Z4(t),t}o(tJ,"startServers");function rJ(){let e=[];for(let t in vf){let r=vf[t];if(t.includes?.("/")&&Mf()==0){aIe(t)&&X4(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Li.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ti.get(Rs.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=Mf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?CE?n={fd:CE(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:CE?n={fd:CE(+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}),Li.trace("Listening on port "+t,hR)}).on("error",c)}))}return Promise.all(e)}o(rJ,"listenOnPorts");!UD&&!iIe?.noServerStart&&tJ();function gIe(e,t){let r=($h(),D(ey)).getComponentName,n;if(t.securePort){J4(t.securePort,{protocol_name:"TLS",name:r()});let s=dIe("server",t.mtls),i=ti.get("tls");n=lIe({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),vf[t.securePort]=n}return t.port&&(J4(t.port,{protocol_name:"TCP",name:r()}),n=oIe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),vf[t.port]=n),n}o(gIe,"onSocket")});var D4={};Ie(D4,{startHTTPThreads:()=>SIe,startSocketServer:()=>HD,updateWorkerIdleness:()=>lJ});async function SIe(e=2,t){bb().catch(r=>SR.error?.("Error recording hostname for analytics:",r));try{if(t)FD(0,1,!0);else{let{loadRootComponents:r}=ER();if(e===0)return(0,_o.setMainIsWorker)(!0),await xD().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)FD(r,e);return Promise.all(cJ)}finally{(0,_o.threadsHaveStarted)()}}function FD(e,t=1,r){if(BD++,(0,_o.startWorker)("server/threads/threadServer.js",{name:wA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===AA.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});cJ.push(s),await s,Uf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=gR.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=Uf.indexOf(n);a>-1&&Uf.splice(a,1)}if(o(i,"removeWorker"),xf){let a=xf;xf=[];for(let c of a)aJ[c.localPort](null,c)}}}),r){let n=setInterval(()=>{kD?kD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,_o.shutdownWorkers)(),BD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function HD(e=0,t){if(typeof e=="string")try{(0,TR.existsSync)(e)&&(0,TR.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=TIe:r=yIe(t):r=qD;let n=(0,Bf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=aJ[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),kD=!0,r(i,(a,c)=>{if(!a){if(nJ){let u=i._socket||new Bf.Socket({handle:i,writable:!0,readable:!0});nJ.deliverSocket(u,e,c),u.resume()}else BD>0?(xf.length===0&&setTimeout(()=>{xf.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,xf.push(i)):(console.log("start up a dynamic thread to handle request"),FD(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 Bf.Socket({handle:i,writable:!0,readable:!0});bIe(u,a,e)}Xe(!0,"socket-routed")})},SR.info(`HarperDB ${oJ.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 qD(e,t){let r,n=0;for(let s of Uf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=_R)return _R=i,t(r);n=i}_R=0,t(r)}function TIe(e,t){let r={};e.getpeername(r);let n=r.address,s=Ff.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);qD(e,a=>{Ff.set(n,{worker:a,lastUsed:i}),t(a)})}function yIe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Bf.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=Ff.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);qD(n,f=>{Ff.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function lJ(){_R=0;for(let e of Uf)e.expectedIdle=e.recentELU.idle+RIe,e.requests=1;Uf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function bIe(e,t,r){let n=AIe++;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(),gR.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")),gR.delete(n)),s.event=="destroy"&&(e.destroy(),gR.delete(n))})}var _o,Bf,SR,TR,iJ,oJ,Uf,xf,aJ,nJ,BD,cJ,kD,_R,sJ,Ff,RIe,gR,AIe,AD=ie(()=>{_o=w(Je()),Bf=require("net");H();SR=w(j()),TR=require("fs");Os();iJ=require("worker_threads"),oJ=w(yt()),Uf=[],xf=[],aJ=[],BD=0,cJ=[];iJ.isMainThread&&process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});o(SIe,"startHTTPThreads");o(FD,"startHTTPWorker");o(HD,"startSocketServer");_R=0;o(qD,"findMostIdleWorker");sJ=36e5,Ff=new Map;o(TIe,"findByRemoteAddressAffinity");o(yIe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ff)r.lastUsed+sJ<e&&Ff.delete(t)},sJ).unref();RIe=1e3;o(lJ,"updateWorkerIdleness");(0,_o.setMonitorListener)(lJ);gR=new Map,AIe=1;o(bIe,"proxySocket")});var GD={};Ie(GD,{hdbServer:()=>CIe,start:()=>CIe});async function CIe(e){try{go.default.debug("In Fastify server"+process.cwd()),go.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),go.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=uJ.default.isMaster,await OIe();let t=e.securePort>0;kf=PIe(t),await kf.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(kf.server,e),kf.server.closeIdleConnections||await kf.listen({port:0,host:"::"})}catch(r){throw kf.close(),go.default.error(r),go.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),go.default.fatal(t),process.exit(1)}}async function OIe(){return go.default.trace("Configuring HarperDB process."),gJ.default.setSchemaDataToGlobal(),TJ.default.setUsersWithRolesCache()}function PIe(e){go.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=LIe(e),r=(0,dJ.default)(t);r.server.headersTimeout=MIe(),r.setErrorHandler(Dc.serverErrorHandler);let n=DIe();n&&r.register(fJ.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(hJ.default),r.register(mJ.default),r.register(pJ.default,{root:EJ.default.join(_J.PACKAGE_ROOT,"studio/build-local")}),Tm(r);let s=Lc.default.get(nm.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!SJ.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Dc.reqBodyValidationHandler,Dc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Dc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),go.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function LIe(e){let t=Lc.default.get(PE.OPERATIONSAPI_NETWORK_TIMEOUT),r=Lc.default.get(PE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:wIe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function DIe(){let e=Lc.default.get(PE.OPERATIONSAPI_NETWORK_CORS),t=Lc.default.get(PE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===NIe)&&(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 MIe(){return Lc.default.get(PE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??IIe}var uJ,Lc,go,dJ,fJ,mJ,pJ,hJ,EJ,_J,gJ,SJ,TJ,Dc,IIe,wIe,NIe,PE,kf,yJ=ie(()=>{uJ=w(require("cluster")),Lc=w(ae());H();go=w(j()),dJ=w(require("fastify")),fJ=w(require("@fastify/cors")),mJ=w(require("@fastify/compress")),pJ=w(require("@fastify/static")),hJ=w(UN()),EJ=w(require("path")),_J=w(yt()),gJ=w(mi()),SJ=w(oe()),TJ=w(cs());xr();Dc=w(xy());Po();Lc.default.initSync();IIe=6e4,wIe=1024*1024*1024,NIe="TRUE",{CONFIG_PARAMS:PE}=Y;o(CIe,"operationsServer");o(OIe,"setUp");o(PIe,"buildServer");o(LIe,"getServerOptions");o(DIe,"getCORSOpts");o(MIe,"getHeaderTimeoutConfig")});var zD={};Ie(zD,{disableNATS:()=>UIe,publishToStream:()=>AR,setNATSReplicator:()=>$D,setPublishToStream:()=>xIe,setSubscription:()=>WD,start:()=>vIe});function vIe(){LE.default.get(B.CLUSTERING_ENABLED)&&FIe()}function UIe(e=!0){wJ=e}function xIe(e,t){AR=e,WD=t}function FIe(){if(wJ||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];$D(s,r,i)}}Nl((r,n)=>{$D(r.tableName,r.databaseName,r),n&&CJ(r)}),!RJ&&(RJ=!0)}function $D(e,t,r){if(t==="system"&&kIe.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 Fr{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){CJ(i)}static subscribe(){let i=new Qn;return WD(t,e,i),i}static subscribeOnThisThread(i){return i<(LE.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??BIe)}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 yR(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=NJ;return i}o(n,"getNATSTransaction")}function CJ(e){let t=LE.default.get(B.CLUSTERING_NODENAME);AR(`${KD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,YD.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 AJ,KD,YD,bJ,IJ,LE,RR,wJ,AR,WD,BIe,NJ,RJ,kIe,yR,VD,OJ=ie(()=>{Oe();Ua();AJ=w(Ft()),KD=w(pt()),YD=w(zi());Nu();bJ=w(ZN()),IJ=w(Cn()),LE=w(ae());H();RR=w(j());o(vIe,"start");o(UIe,"disableNATS");AR=AJ.publishToStream,WD=bJ.setSubscription;o(xIe,"setPublishToStream");BIe=2;o(FIe,"assignReplicationSource");kIe=["hdb_job","hdb_raw_analytics","hdb_info"];o($D,"setNATSReplicator");o(CJ,"publishSchema");yR=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=LE.default.get(B.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||(RR.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(AR(`${KD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,YD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw RR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},VD=class extends yR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,IJ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};NJ=new VD});async function vJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await jD.get(e,{returnNonexistent:!0});i=new XD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await jD.get(e);a&&a.delete()}i=new IR(e,t)}return n&&(n.id=e,n.user={username:t?.username},DE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function QD(){return bR++,bR>65500&&(bR=1),bR}function JD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Ls.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 ci(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return At(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var LJ,Mc,DJ,MJ,PJ,jD,DE,bR,IR,XD,UJ=ie(()=>{Oe();xa();LJ=w(Cn()),Mc=w(j());Ca();DJ=w(Je()),MJ=w(xD());xr();sg();PJ=100,jD=Ze({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),DE=Ze({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,DJ.getWorkerIndex)()===0&&(async()=>{await MJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of DE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await JD(r,t,r)}catch{(0,Mc.warn)("Failed to publish will",t)}DE.delete(e.id)}})();o(vJ,"getSession");bR=1;o(QD,"getNextMessageId");IR=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,Mc.trace)("Resuming subscription from",s,"from",a);let p=Ls.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 R=S.split("/"),N;for(let te=0;te<R.length;te++)if(R[te].indexOf("+")>-1)if(R[te]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let O=!0;R[R.length-1]==="#"&&(R.length--,O=!1),N&&(n=o(te=>{let q=te.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(O&&q.length!==R.length)return!1;for(let k=0;k<R.length;k++)if(R[k]!=="+"&&R[k]!==q[k])return!1;return!0},"filter"));let F=R.indexOf("+");m.url="/"+(F>-1?R.slice(0,F):R).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,A=await At(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let R=await g.subscribe(m,S);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let O of R)try{let F;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,F=this.needsAcknowledge(O)):(O.acknowledge?.(),F=QD());let te=O.id;if(Array.isArray(te)&&(te=Vu(te)),te==null&&(te=""),await this.listener(E+"/"+te,O.value,F,t)===!1)break;this.awaitingAcks?.size>PJ?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-PJ)):await new Promise(setImmediate)}catch(F){(0,Mc.warn)(F)}})();return R});if(A)return A.topic=s,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=QD();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 JD(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();At(r,async()=>{try{if(!t){let n=await DE.get(this.sessionId);n?.doesExist()&&await JD(n,n.data,r)}}finally{await DE.delete(this.sessionId)}}).catch(n=>{(0,Mc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(JD,"publish");XD=class extends IR{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=QD(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Mc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,LJ.getNextMonotonicTime)()),(0,Mc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),jD.put(this.sessionRecord)}}});var ZD={};Ie(ZD,{bypassAuth:()=>HIe,start:()=>GIe});function HIe(){GJ=!0}function GIe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new qJ.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}=BJ(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 Yd(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,Hf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&NR.notify?.({username:d?.username,status:ii.SUCCESS,type:Ia.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Hf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&NR.error?.({username:h,status:ii.FAILURE,type:Ia.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&&qIe(u.remoteAddress)&&(d=await(0,FJ.getSuperUser)(),Zt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=BJ(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 BJ(e,t,r,n,s){xJ||(xJ=!0,Bm(f=>{wR>0&&f.push({metric:"mqtt-connections",connections:wR,byThread:!0})}));let i;wR++;let a,c={protocolVersion:4},l=(0,CR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){wR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!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(R){e.close?.(1008,"Unauthorized"),Zt.info?.(R);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,Hf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&NR.notify?.({username:n?.username,status:ii.SUCCESS,type:Ia.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(J){return(0,Hf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&NR.error?.({username:f.username,status:ii.FAILURE,type:Ia.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,J),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let J=e.deserialize||(e.deserialize=Oo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?J(f.will.payload):void 0,delete f.will.payload}a=vJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(J){return Zt.error?.(J),s.events.emit("auth-failed",f,e,J),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:J.code||5,returnCode:J.code||128})}s.events.emit("connected",a,e),zr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(J,W,ue,ce)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",J);let re=J.indexOf("/",1),Re=re>0?J.slice(0,re):J;g({cmd:"publish",topic:J,payload:await S(W),messageId:ue||Math.floor(Math.random()*1e8),qos:ce.qos},Re);let Te=e._socket??e;return Te.writableNeedDrain?new Promise(Fe=>Te.once("drain",Fe)):!Te.closed}catch(re){return Zt.error?.(re),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let N=[];for(let J of f.subscriptions){let W;try{let ue=await a.addSubscription(J,J.qos>=1);W=ue?ue.qos||0:c.protocolVersion<5?128:143}catch(ue){s.events.emit("error",ue,e,J,a),ue.statusCode?ue.statusCode===500?Zt.warn?.(ue):Zt.info?.(ue):Zt.error?.(ue),W=c.protocolVersion<5?128:ue.statusCode===403?135:ue.statusCode===404?143:128}N.push(W)}await a.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let J=[];for(let W of f.unsubscriptions)J.push(a.removeSubscription(W)?0:17);g({cmd:"unsuback",granted:J,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let O=f.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=Oo(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?F(f.payload):void 0,k;try{k=await a.publish(f,q)}catch(J){s.events.emit("error",J,e,f,a),Zt.warn?.(J),f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:k===!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),zr(!0,"connection","mqtt","disconnect"),Zt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,f,a),Zt.error?.(R),g({cmd:"disconnect"})}function g(R,N){let O=(0,CR.generate)(R,c);t(O),Xe(O.length,"bytes-sent",N,A(R),"mqtt")}o(g,"sendPacket");function A(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(A,"packetMethodName");function S(R){return Co(R,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 CR,FJ,Hf,kJ,HJ,qJ,NR,Zt,GJ,qIe,xJ,wR,$J=ie(()=>{CR=require("mqtt-packet");UJ();FJ=w(cs());Po();Os();xr();Hf=w(ae());H();kJ=w(Jn()),HJ=w(j()),qJ=require("events");iT();NR=(0,kJ.loggerWithTag)("auth-event"),Zt=(0,HJ.forComponent)("mqtt"),GJ=(0,Hf.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(HIe,"bypassAuth");qIe=o(e=>GJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(GIe,"start");wR=0;o(BJ,"onSocket")});function OR(e,t){if(t?.includes(".."))throw new eM(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var eM,tM=ie(()=>{eM=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(OR,"resolveBaseURLPath")});function VJ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var KJ=ie(()=>{o(VJ,"deriveCommonPatternBase")});function PR(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 rM=ie(()=>{o(PR,"deriveGlobOptions")});var YJ,nM,ME,WJ=ie(()=>{tM();KJ();rM();YJ=require("micromatch"),nM=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"}},ME=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=OR(this.name,this.config.urlPath),this.globOptions=PR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new nM(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,YJ.scan)(s).base),this.commonPatternBase=VJ(this.patternBases)}}});function zJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Eu(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(zJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(zJ(n,t)){t=t.slice(n.length+1);break}}}return(0,jJ.join)(e.baseURLPath,t)}var jJ,sM=ie(()=>{jJ=require("node:path");o(zJ,"pathStartsWithBase");o(Eu,"deriveURLPath")});function QJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var DR,JJ,XJ,iM,ZJ,e3,LR,t3=ie(()=>{DR=require("node:events");WJ();JJ=w(j()),XJ=w(require("chokidar")),iM=require("node:path"),ZJ=require("node:fs/promises");sM();e3=require("micromatch"),LR=class extends DR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new ME(t,r,QJ(n)),this.#r=s||JJ.default.loggerWithTag(t),this.ready=(0,DR.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,e3.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,iM.join)(this.directory,r);switch(t){case"add":case"change":{let i=Eu(this.#e,r,"file");(0,ZJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=Eu(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=Eu(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,iM.join)(this.#e.directory,r));return this.#t=XJ.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 ME(this.name,this.directory,QJ(t)),this.#a()}};o(QJ,"castConfig")});var MR,oM=ie(()=>{MR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var UR,r3,n3,s3,i3,o3,aM,cM,lM,uM,dM,vR,a3=ie(()=>{UR=require("events"),r3=w(require("yaml")),n3=w(require("chokidar")),s3=require("node:fs/promises"),i3=require("util"),o3=w(j());oM();aM=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"}},cM=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},lM=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"}},uM=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},dM=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},vR=class extends UR.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||o3.default.loggerWithTag(t),this.ready=(0,UR.once)(this,"ready"),this.#t=n3.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,s3.readFile)(this.#e,"utf-8").then(t=>{this.#n=r3.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 aM(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=MR,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,i3.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 cM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new lM(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 uM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new dM(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 FR,c3,xR,BR,l3=ie(()=>{FR=require("node:events");t3();a3();c3=w(j());RP();xR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},BR=class extends FR.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,c3.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,FR.once)(this,"ready"),this.options=new vR(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 LR(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 xR);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 xR);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}`),lz()}}});function _u(e){return typeof e=="string"&&e.trim()!==""}function fM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>_u(t))}function m3(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function $Ie(e){e.config.root&&vE.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 SM(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(m3(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,UE.join)(e.directory,i);kR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function p3(e){let t=!1;if(t=await $Ie(e),t)return t;let r=await(0,u3.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,UE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Eu(e,n.path,"directory");kR.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=Eu(e,n.path,"file"),a=await(0,d3.readFile)(s);kR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else vE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var kR,u3,vE,UE,d3,f3,HR,Di,mM,pM,hM,EM,_M,gM,SM,TM,yM,h3=ie(()=>{kR=require("node:worker_threads"),u3=w(require("fast-glob")),vE=w(j());tM();rM();UE=require("node:path"),d3=require("node:fs/promises");sM();f3=require("micromatch"),HR=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,!_u(this.config.files)&&!fM(this.config.files)&&!m3(this.config.files))throw new mM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!fM(this.config.files.source)&&!_u(this.config.files.source))throw new pM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new hM(this);if(this.config.files.ignore!==void 0&&!fM(this.config.files.ignore)&&!_u(this.config.files.ignore))throw new EM(this)}if(this.config.root!==void 0&&!_u(this.config.root))throw new gM(this);if(this.config.path!==void 0&&!_u(this.config.path))throw new TM(this);if(this.config.path&&(vE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!_u(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new yM(this);this.globOptions=PR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new _M(this,r);return r.startsWith("/")&&(vE.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,f3.scan)(r).base),this.baseURLPath=OR(this.name,this.config.urlPath)}},Di=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,UE.basename)(r.directory)}) ${t}`)}},mM=class extends Di{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)}},pM=class extends Di{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},hM=class extends Di{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},EM=class extends Di{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},_M=class extends Di{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},gM=class extends Di{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)}},SM=class extends Di{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)}},TM=class extends Di{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},yM=class extends Di{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(_u,"isNonEmptyString");o(fM,"isArrayOfNonEmptyStrings");o(m3,"isObject");o($Ie,"handleRoots");o(p3,"processResourceExtensionComponent")});var ey={};Ie(ey,{getComponentName:()=>pR,loadComponent:()=>VR,loadComponentDirectories:()=>g3,setErrorReporter:()=>KIe});function g3(e,t){t&&(AM=t),e&&(NM=e);let r=[];if((0,Pt.existsSync)(RM)){let s=(0,Pt.readdirSync)(RM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,on.join)(RM,a);r.push(VR(c,AM,SA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(VR(n,AM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{_3=!0})}function KIe(e){GR=e}function YIe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{oa.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(oa.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Pt.rmSync)(t,{recursive:!0,force:!0}),(0,Pt.existsSync)((0,on.join)(e,"node_modules"))||(0,Pt.mkdirSync)((0,on.join)(e,"node_modules")),(0,Pt.symlinkSync)(OM.PACKAGE_ROOT,t,"dir"),r()}finally{oa.primaryStore.unlock(e,0)}})}function S3(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 oa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(S3(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(()=>{oa.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 VR(e,t,r,n,s,i){let a=(0,Pt.realpathSync)(e);if(qR.has(a))return qR.get(a);qR.set(a,!0),s&&(NM=s);try{let c,l=(0,on.join)(e,"harperdb-config.yaml");(0,Pt.existsSync)(l)?c=n?(0,KR.getConfigObj)():(0,IM.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Pt.existsSync)(l=(0,on.join)(e,"config.yaml"))?c=(0,IM.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():c=MR;try{let m=(0,on.join)(e,"node_modules","harperdb");(n||((0,Pt.existsSync)(m)||!e.startsWith((0,wM.getHdbBasePath)()))&&(!(0,Pt.existsSync)(m)||(0,Pt.realpathSync)(OM.PACKAGE_ROOT)!==(0,Pt.realpathSync)(m)))&&await YIe(e,m)}catch(m){_a.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&_a.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=$R,d={};for(let m in c){let p=`${(0,on.basename)(e)}.${m}`;$R=m;let h=c[m];if(!h)continue;let E,g=h.package;try{if(g){let O=e,F;for(;!(0,Pt.existsSync)(F=(0,on.join)(O,"node_modules",m));)if(O=(0,on.dirname)(O),O.length<(0,wM.getHdbBasePath)().length){F=null;break}if(F)E=await VR(F,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=VIe[m];if(!E)continue;Vo.loading(p);let A=o(O=>(O.origin=r,Ze(O)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,R=S?.securePort||S?.https&&S.port,N=!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 O=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw Vo.failed(p,O,`Component '${p}' failed to load`),O}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&_a.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let O=new BR(m,e,l,t,Ue);await S3(O,E),Vo.loaded(p,`Component '${p}' loaded successfully`);continue}if(bM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:A,port:N,securePort:R,resources:t,...h})||E,n&&S))for(let O of[N,R])try{if(+O&&!E3.includes(O)){let F=CM.get(B.HTTP_SESSIONAFFINITY);F&&_a.default.warn("Session affinity is not recommended and may cause memory leaks"),(F||!ES)&&(E3.push(O),HD(O,F))}}catch(F){console.error("Error listening on socket",O,F,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:A,port:N,securePort:R,resources:t,...h})||E),NM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let O=new HR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await p3(O)}Vo.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}`,GR?.(A),((0,xE.getWorkerIndex)()===0?console:_a.default).error(A),t.set(h.path||"/",new il(A),null,!0),Vo.failed(p,A,`Could not load component '${p}'`)}}if($R=u,bM.isMainThread&&!_3&&i&&(0,xE.watchDir)(e,async()=>g3()),c.extensionModule||c.pluginModule){let m=await mS((0,on.join)(e,c.extensionModule||c.pluginModule));return qR.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?`;GR?.(new Error(m)),((0,xE.getWorkerIndex)()===0?console:_a.default).error(m),Vo.failed((0,on.basename)(e),m)}for(let[m,p]of Object.entries(d))p||_a.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}`,GR?.(c),t.set("",new il(c))}}var Pt,on,bM,IM,CM,OM,_a,xE,wM,KR,RM,NM,_3,AM,VIe,E3,qR,GR,$R,pR,$h=ie(()=>{Pt=require("node:fs"),on=require("node:path"),bM=require("node:worker_threads"),IM=require("yaml"),CM=w(ae()),OM=w(yt());H();Yq();rG();EG();RG();AG();FG();tQ();rQ();sQ();_a=w(j());uQ();xE=w(Je());bN();xr();Oe();AD();wM=w(ae());yJ();zT();OJ();ds();$J();KR=w(bt());Fp();Hb();l3();h3();vD();zh();Sp();oM();RM=(0,KR.resolvePath)(CM.get(B.COMPONENTSROOT)),NM=new Map;o(g3,"loadComponentDirectories");VIe={REST:gS,rest:gS,graphql:EN,graphqlSchema:pN,roles:AN,jsResource:IN,fastifyRoutes:kL,login:NN,static:qL,operationsApi:GD,customFunctions:{},http:mR,clustering:zD,replication:zo,authentication:xh,mqtt:ZD,loadEnv:GL,logging:_a.default,dataLoader:$L},E3=[],qR=new Map;o(KIe,"setErrorReporter");pR=o(()=>$R,"getComponentName");o(YIe,"symlinkHarperModule");o(S3,"sequentiallyHandleApplication");o(VR,"loadComponent")});var ER=M((P$e,T3)=>{var{isMainThread:PM}=require("worker_threads"),{getTables:WIe,getDatabases:C$e,table:O$e}=(Oe(),D(mt)),{loadComponentDirectories:zIe,loadComponent:jIe}=($h(),D(ey)),{resetResources:QIe}=(xa(),D(qb)),JIe=aP(),XIe=bt(),{dirname:ZIe}=require("path"),{getConnection:ewe}=Ft(),twe=ae(),{CONFIG_PARAMS:rwe}=(H(),D(Y)),{loadCertificates:nwe}=ms(),{loadAndWatchLicensesDir:swe}=(Xh(),D(dy)),LM=new Map;async function iwe(e=!1){!PM&&twe.get(rwe.CLUSTERING_ENABLED)&&ewe();try{PM&&await JIe()}catch(n){console.error(n)}let t=QIe();WIe(),t.isWorker=e,PM&&swe(),await nwe(),await jIe(ZIe(XIe.getConfigFilePath()),t,"hdb",!0,LM),await zIe(LM,t);let r=[];for(let[n]of LM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(iwe,"loadRootComponents");T3.exports.loadRootComponents=iwe});var Je=M((D$e,vi)=>{"use strict";NA();var{Worker:owe,MessageChannel:awe,parentPort:So,isMainThread:xM,threadId:cwe,workerData:To}=require("worker_threads"),{PACKAGE_ROOT:lwe}=yt(),{join:b3,isAbsolute:uwe,extname:dwe}=require("path"),{server:I3}=(xr(),D(im)),{watch:fwe,readdir:mwe}=require("fs/promises"),{totalmem:y3}=require("os"),qf=(H(),D(Y)),w3=ae(),Mi=j(),{randomBytes:pwe}=require("crypto"),{_assignPackageExport:hwe}=oi(),R3=1024*1024,vc=[],ri=[],Ewe=50,BM=1e4,_we="restart",N3="request_thread_info",C3="resource_report",O3="thread_info",P3="added-port",gwe="ack",DM;hwe("threads",ri);vi.exports={startWorker:MM,restartWorkers:kM,shutdownWorkers:Awe,workers:vc,setMonitorListener:Lwe,onMessageFromWorkers:bwe,onMessageByType:B3,broadcast:wwe,broadcastWithAcknowledgement:Cwe,setChildListenerByType:Rwe,getWorkerIndex:L3,getWorkerCount:D3,getTicketKeys:v3,setMainIsWorker:Twe,setTerminateTimeout:Swe,restartNumber:To?.restartNumber||1};ri.onMessageByType=B3;ri.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ri.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};vi.exports.whenThreadsStarted=new Promise(e=>{vi.exports.threadsHaveStarted=e});var FM;function Swe(e){BM=e}o(Swe,"setTerminateTimeout");function L3(){return To?To.workerIndex:FM?0:void 0}o(L3,"getWorkerIndex");function D3(){return To?To.workerCount:FM?1:void 0}o(D3,"getWorkerCount");function Twe(e){FM=e,vi.exports.threadsHaveStarted()}o(Twe,"setMainIsWorker");var M3=1,YR;function v3(){return YR||(YR=xM?pwe(48):To.ticketKeys,YR)}o(v3,"getTicketKeys");Object.defineProperty(I3,"workerIndex",{get(){return L3()}});Object.defineProperty(I3,"workerCount",{get(){return D3()}});var U3={[N3](e,t){Owe(t)},[C3](e,t){Pwe(t,e)}};function MM(e,t={}){let r=process.constrainedMemory?.()||y3();r=Math.min(r,y3(),2e4*R3);let n=w3.get(qf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/R3/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of ri){let u=new awe;u.existingPort=l,i.push(u),a.push(u.port2)}dwe(e)||(e+=".js");let c=new owe(uwe(e)?e:b3(lwe,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:M3=t.threadCount,name:t.name,restartNumber:vi.exports.restartNumber,ticketKeys:v3()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:P3,port:l,threadId:c.threadId},[l]);return zR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>MM(e,t),c.on("error",l=>{Mi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{vc.splice(vc.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Ewe?(t.unexpectedRestarts=c.unexpectedRestarts+1,MM(e,t)):Mi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{U3[l.type]?.(l,c)}),vc.push(c),Mwe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(MM,"startWorker");var ywe=[qf.THREAD_TYPES.HTTP];async function kM(e=null,t=Math.max(M3>3,1),r=!0){if(xM){try{process.chdir(process.cwd())}catch(a){Mi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=ER();await a()}vi.exports.restartNumber++,t<1&&(t=t*vc.length);let n=[],s=[];for(let a of vc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Mi.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:vi.exports.restartNumber,type:qf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=ywe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Mi.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},BM*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===qf.ITC_EVENT_TYPES.CHILD_STARTED&&(Mi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Mi.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)&&w3.get(qf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else So.postMessage({type:_we,workerType:e})}o(kM,"restartWorkers");function Rwe(e,t){U3[e]=t}o(Rwe,"setChildListenerByType");function Awe(e){return kM(e,1/0,!1)}o(Awe,"shutdownWorkers");var x3=[];function bwe(e){x3.push(e)}o(bwe,"onMessageFromWorkers");var vM=new Map;function B3(e,t){let r=vM.get(e);r||vM.set(e,r=[]),r.push(t)}o(B3,"onMessageByType");var Iwe=10;async function wwe(e,t){let r=0;for(let n of ri)try{n.postMessage(e),r++>Iwe&&(r=0,await new Promise(setImmediate))}catch(s){Mi.error("Unable to send message to worker",s)}t&&k3(e,null)}o(wwe,"broadcast");var WR=new Map,Nwe=1;function Cwe(e){return new Promise(t=>{let r=0;for(let n of ri)try{let s=Nwe++,i=o(()=>{WR.delete(s),--r===0&&t(),n!==So&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,WR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of WR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Mi.error("Unable to send message to worker",s)}r===0&&t()})}o(Cwe,"broadcastWithAcknowledgement");function Owe(e){e.postMessage({type:O3,workers:F3()})}o(Owe,"sendThreadInfo");function F3(){let e=Date.now();return vc.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(F3,"getChildWorkerInfo");function Pwe(e,t){e.resources=t,e.resources.updated=Date.now()}o(Pwe,"recordResourceReport");var UM;function Lwe(e){UM=e}o(Lwe,"setMonitorListener");var Dwe=1e3,A3=!1;function Mwe(){A3||(A3=!0,setInterval(()=>{for(let e of vc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}UM&&UM()},Dwe).unref())}o(Mwe,"startMonitoring");var vwe=1e3;if(So&&To?.addPorts){zR(So);for(let e=0,t=To.addPorts.length;e<t;e++){let r=To.addPorts[e];r.threadId=To.addThreadIds[e],zR(r)}setInterval(()=>{let e=process.memoryUsage();So.postMessage({type:C3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},vwe).unref(),DM=o(()=>new Promise((e,t)=>{So.on("message",r),So.postMessage({type:N3});function r(n){n.type===O3&&(So.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else DM=F3;vi.exports.getThreadInfo=DM;function zR(e,t){ri.push(e),e.on("message",r=>{if(r.type===P3)r.port.threadId=r.threadId,zR(r.port);else if(r.type===gwe){let n=WR.get(r.id);n&&n()}else k3(r,e)}).on("close",()=>{ri.splice(ri.indexOf(e),1)}).on("exit",()=>{ri.splice(ri.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(zR,"addPort");function k3(e,t){for(let n of x3)n(e,t);let r=vM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Mi.error(s)}}o(k3,"notifyMessageListeners");if(xM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await mwe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(b3(s,a.name));try{for await(let{filename:a}of fwe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await kM(),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");vi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else So.on("message",async e=>{let{type:t}=e;t===qf.ITC_EVENT_TYPES.SHUTDOWN&&(vi.exports.restartNumber=e.restartNumber,So.unref(),setTimeout(()=>{Mi.warn("Thread did not voluntarily terminate",cwe),process.exit(0)},BM).unref())})});var K3=M((x$e,V3)=>{"use strict";var{promises:Gf,createReadStream:Uwe,createWriteStream:xwe}=require("fs"),{createGzip:Bwe}=require("zlib"),{promisify:Fwe}=require("util"),{pipeline:kwe}=require("stream"),Hwe=Fwe(kwe),qM=require("path"),$3=ae();$3.initSync();var jR=j(),{CONFIG_PARAMS:qwe,ITC_EVENT_TYPES:v$e}=(H(),D(Y)),{onMessageFromWorkers:U$e}=Je(),{convertToMS:H3}=oe(),{onStorageReclamation:Gwe}=(B_(),D(rx)),$we=6e4,Vwe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Kwe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",HM,q3;V3.exports=Ywe;function Ywe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(Gwe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(Vwe);if(!i)throw new Error(Kwe);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 HM=Date.now(),jR.trace("Log rotate enabled, maxSize:",t,"interval:",r),q3=setInterval(async()=>{if(l){let f;f=await Gf.stat(e.path),f.size>=l&&(d=await G3(e.path,i))}if(u&&Date.now()-HM>=u&&(d=await G3(e.path,i),HM=Date.now()),n||c){let f=H3(n??"1M")/(1+c);c=0;let m=await Gf.readdir(i);for(let p of m)try{let h=await Gf.stat(qM.join(i,p));Date.now()-h.mtimeMs>f&&await Gf.unlink(qM.join(i,p))}catch(h){jR.error("Error trying to remove log",p,h)}}},a??$we).unref(),{end(){clearInterval(q3)},getLastRotatedLogPath(){return d}}}o(Ywe,"logRotator");async function G3(e,t){let r=$3.get(qwe.LOGGING_ROTATION_COMPRESS),n=qM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Gf.rename(e,n),r&&(e=n,n+=".gz",await Hwe(Uwe(e),Bwe(),xwe(n)),await Gf.unlink(e)),jR.closeLogFile(),jR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(G3,"moveLogFile")});var Q3={};Ie(Q3,{RootConfigWatcher:()=>GM});var Y3,W3,z3,QR,j3,GM,J3=ie(()=>{Y3=w(require("chokidar")),W3=require("node:fs/promises"),z3=w(bt()),QR=require("node:stream"),j3=require("yaml"),GM=class extends QR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,z3.getConfigFilePath)(),this.ready=(0,QR.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,W3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,j3.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 j=M((q$e,sA)=>{"use strict";var Sa=require("fs-extra"),{workerData:Wwe,threadId:zwe,isMainThread:sX}=require("worker_threads"),kE=require("path"),iX=require("yaml"),oX=require("properties-reader"),$r=(H(),D(Y)),X3=$c(),jwe=require("os"),{PACKAGE_ROOT:jM}=yt(),{_assignPackageExport:Qwe}=oi(),{Console:Jwe}=require("console"),Z3=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),eX=new Map,{join:Ta}=kE,tX=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Xwe={STDOUT:"stdOut",STDERR:"stdErr"},H$e=Ta(jM,"logs"),Zwe=Ta(jM,"config/yaml/",$r.HDB_DEFAULT_CONFIG_FILE),eNe=1e4,HE,qE,JR,ga,VM,$M,ZR,Lt,As,eA,tA,$f,FE,BE;function XR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=kE.dirname(n)):t.root?n=Ta(t.root,VM):(n=Lt.path,t.root||(t.root=kE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Lt?.level??cr.info,aX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Lt.path===e.path&&r)}o(XR,"updateLogger");function aX(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(aX,"updateConditional");async function KM(){BE||(BE=new gNe,await BE.ready,BE.on("change",KM));let e=BE.config,t=e.logging??{};XR(Lt,t),ZR=Lt.path,HE=t.console??!1,t.external&&XR(As,t.external);for(let r in e){let n=e[r];n.logging?XR(Lt.forComponent(r),n.logging,r):Lt.hasComponent(r)&&XR(Lt.forComponent(r),t,r)}}o(KM,"updateLogSettings");var YM=class extends Jwe{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){$f=!0;try{In="fatal",this.level<=cr.fatal&&super.error(...t),In="info"}finally{$f=!1}}notify(...t){$f=!0;try{In="notify",this.level<=cr.notify&&super.info(...t),In="info"}finally{$f=!1}}withTag(t){return lX(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};FE===void 0&&cX();sA.exports={notify:cNe,fatal:lNe,error:zM,warn:uNe,info:iNe,debug:aNe,trace:oNe,logLevel:ga,loggerWithTag:lX,suppressLogging:nNe,initLogSettings:cX,logCustomLevel:dNe,closeLogFile:uX,createLogger:nA,logsAtLevel:tNe,getLogFilePath:o(()=>ZR,"getLogFilePath"),forComponent:o(e=>Lt.forComponent(e),"forComponent"),setMainLogger:ENe,OUTPUTS:Xwe,AuthAuditLog:_Ne,start:KM,startOnMainThread:KM,errorToString:hNe};sA.exports.externalLogger={notify(...e){As.notify(...e)},fatal(...e){As.fatal(...e)},error(...e){As.error(...e)},warn(...e){As.warn(...e)},info(...e){As.info(...e)},debug(...e){As.debug(...e)},trace(...e){As.trace(...e)},withTag(e){return As.withTag(e)}};Qwe("logger",sA.exports.externalLogger);function tNe(e){return cr[ga]<=cr[e]}o(tNe,"logsAtLevel");function cX(e=!1){try{if(FE===void 0||e){uX();let t=fNe(),r=X3(["ROOTPATH"]);try{FE=oX(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Sa.pathExistsSync(Ta(r.ROOTPATH,$r.HDB_CONFIG_FILE)))throw s}let n;if({level:ga,configLogPath:$M,toFile:qE,logConsole:HE,rotation:n,toStream:JR}=mNe(r.ROOTPATH?Ta(r.ROOTPATH,$r.HDB_CONFIG_FILE):FE.get("settings_path")),VM=$r.LOG_NAMES.HDB,ZR=Ta($M,VM),Lt=nA({path:ZR,level:ga,stdStreams:JR,rotation:n}),As=Lt.forComponent("external"),As.tag=null,sX)try{require("segfault-handler").registerHandler(Ta($M,"crash.log"))}catch{}}}catch(t){if(FE=void 0,t.code===$r.NODE_ERROR_CODES.ENOENT||t.code===$r.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=X3(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){ga=a;continue}i===$r.CONFIG_PARAMS.LOGGING_CONSOLE&&(HE=i)}let{defaultLevel:n}=pNe();qE=!1,JR=!0,ga=ga===void 0?n:ga,Lt=nA({level:ga}),As=Lt.forComponent("external"),As.tag=null;return}throw zM("Error initializing log settings"),zM(t),t}process.env.DEV_MODE&&(JR=!0),rNe()}o(cX,"initLogSettings");var Uc=!0;function rNe(){qE&&(process.stdout.write=function(e){return typeof e=="string"&&Uc&&HE&&(e=e.toString(),e[e.length-1]===`
|
|
134
|
+
`&&(e=e.slice(0,-1)),tA(e)),Z3.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Uc&&HE&&(e[e.length-1]===`
|
|
135
|
+
`&&(e=e.slice(0,-1)),tA(e)),Z3.apply(process.stderr,arguments)})}o(rNe,"stdioLogging");function lX(e,t,r=Lt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=cr[i]?function(...a){rA=e;try{return s.call(r,...a)}finally{rA=void 0}}:null}o(n,"logWithTag")}o(lX,"loggerWithTag");function nNe(e){try{Uc=!1,e()}finally{Uc=!0}}o(nNe,"suppressLogging");var sNe=Wwe?.name?.replace(/ /g,"-")||"main",In="info",WM,rA;function nA({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,"")),Uc=!1;try{process.stdout.write(p)}finally{Uc=!0}}else f(p);else r&&process.stdout.write(p)}o(u,"logStdOut");function d(p){if(qE){if(f(p),r){Uc=!1;try{process.stderr.write(p)}finally{Uc=!0}}}else r&&process.stderr.write(p)}o(d,"logStdErr");let f=e&&nX(e,n,s);function m(p){return{write(h){let E=[In];E.unshift(WM||sNe+"/"+zwe),rA&&E.push(rA),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(o(m,"logPrepend"),s&&(tA=f),l=new YM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),aX(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=nX(e,l.rotation,s),s&&(tA=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=nA({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(nA,"createLogger");var rX=100;function nX(e,t,r){let n=eX.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,eX.set(e,n)),sX&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=K3();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(`
|
|
136
136
|
`)?"":`
|
|
137
|
-
`}`;c?(c.length<
|
|
138
|
-
`),$f&&(clearTimeout(a),f())):$f||l<performance.now()+X3?f(E):(l=Math.min(l,performance.now()+X3),c=[E],a=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Sa.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{Sa.closeSync(s)}catch{}s=null,r&&(eA=null)}function p(h){if(!s){try{s=Sa.openSync(e,"a"),r&&(eA=s)}catch(E){if(E.code==="ENOENT"&&!h)return Sa.mkdirpSync(kE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},jwe).unref()}}}o(Z3,"getFileLogger");function eNe(...e){Lt.info(...e)}o(eNe,"info");function tNe(...e){Lt.trace(...e)}o(tNe,"trace");function KM(...e){Lt.error(...e)}o(KM,"error");function rNe(...e){Lt.debug(...e)}o(rNe,"debug");function nNe(...e){Lt.notify(...e)}o(nNe,"notify");function sNe(...e){Lt.fatal(...e)}o(sNe,"fatal");function iNe(...e){Lt.warn(...e)}o(iNe,"warn");function oNe(e,t,r,...n){VM=r.service_name;try{Lt[e](...n)}finally{VM=void 0}}o(oNe,"logCustomLevel");function aNe(){let e;try{e=Vwe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ta(e,$r.HDB_HOME_DIR_NAME,$r.BOOT_PROPS_FILE_NAME);return Sa.existsSync(t)||(t=Ta(YM,"utility/hdb_boot_properties.file")),t}o(aNe,"getPropsFilePath");function cNe(e){try{if(e.includes("config/settings.js")){let l=rX(e);return{level:l.get($r.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:kE.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=tX.parseDocument(Sa.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===$r.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(cNe,"getLogConfig");function lNe(){try{let e=tX.parseDocument(Sa.readFileSync(zwe,"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(lNe,"getDefaultConfig");function uNe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(uNe,"errorToString");function dNe(e){Lt=e}o(dNe,"setMainLogger");function oX(){try{Sa.closeSync(eA)}catch{}eA=null}o(oX,"closeLogFile");function fNe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(fNe,"AuthAuditLog");var{RootConfigWatcher:mNe}=(W3(),M(Y3))});var ae=D((dX,fX)=>{"use strict";var WM=require("fs-extra"),gu=require("path"),aX=require("os"),pNe=require("properties-reader"),$E=j(),GE=oe(),He=(H(),M(Y)),iA=At(),hNe="Error initializing environment manager",oA="BOOT_PROPS_FILE_PATH",cX=!1,ENe={[He.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[He.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ya={};Object.assign(dX,fX.exports={BOOT_PROPS_FILE_PATH:oA,getHdbBasePath:_Ne,setHdbBasePath:gNe,get:lX,initSync:TNe,setProperty:rt,initTestEnvironment:RNe,setCloneVar:yNe});function _Ne(){return ya[He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(_Ne,"getHdbBasePath");function gNe(e){ya[He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(gNe,"setHdbBasePath");function lX(e){let t=iA.getConfigValue(e);return t===void 0?ya[e]:t}o(lX,"get");function rt(e,t){ENe[e]&&(ya[e]=t),iA.updateConfigObject(e,t)}o(rt,"setProperty");function SNe(){let e;try{e=GE.getPropsFilePath(),WM.accessSync(e,WM.constants.F_OK|WM.constants.R_OK),cX=!0;let t=pNe(e);return ya[He.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(He.HDB_SETTINGS_NAMES.INSTALL_USER),ya[He.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(He.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ya[oA]=e,!0}catch{return $E.trace(`Environment manager found no properties file at ${e}`),!1}}o(SNe,"doesPropFileExist");function TNe(e=!1){try{((cX||SNe()||GE.noBootFile())&&!uX||e)&&(iA.initConfig(e),ya[He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=iA.getConfigValue(He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){$E.error(hNe),$E.error(t),console.error(t),process.exit(1)}}o(TNe,"initSync");var uX=!1;function yNe(e){uX=e}o(yNe,"setCloneVar");function RNe(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=gu.join(__dirname,"../../","unitTests");ya[oA]=gu.join(l,"hdb_boot_properties.file"),rt(He.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,gu.join(l,"settings.test")),rt(He.HDB_SETTINGS_NAMES.INSTALL_USER,aX.userInfo()?aX.userInfo().username:void 0),rt(He.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),rt(He.HDB_SETTINGS_NAMES.LOG_PATH_KEY,gu.join(l,"envDir","log")),rt(He.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),rt(He.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),rt(He.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),rt(He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,gu.join(l,"envDir")),rt(He.CONFIG_PARAMS.STORAGE_PATH,gu.join(l,"envDir")),s&&(rt(He.CONFIG_PARAMS.HTTP_SECUREPORT,lX(He.CONFIG_PARAMS.HTTP_PORT)),rt(He.CONFIG_PARAMS.HTTP_PORT,null)),rt(He.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),rt(He.CONFIG_PARAMS.HTTP_PORT,9926),rt(He.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),rt(He.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),rt(He.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,GE.isEmpty(i)?!1:i),rt(He.CONFIG_PARAMS.HTTP_CORS,GE.isEmpty(i)?!1:i),rt(He.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),rt(He.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),rt(He.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),rt(He.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),rt(He.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,gu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),rt(He.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,GE.isEmpty(c)?!1:c),a&&(rt("CORS_ACCESSLIST",a),rt(He.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(rt(He.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),rt(He.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(rt(He.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),rt(He.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(rt(He.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),rt(He.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${oA}. Please check your boot props and settings files`;$E.fatal(r),$E.error(t)}}o(RNe,"initTestEnvironment")});var _X=D((F$e,EX)=>{"use strict";var hX=require("joi"),{string:VE,boolean:mX,array:ANe}=hX.types(),pX=(H(),M(Y)),bNe=at();EX.exports=INe;function INe(e){let t=hX.object({operation:VE.valid(pX.OPERATIONS_ENUM.ADD_NODE,pX.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:VE.required(),subscriptions:ANe.items({schema:VE.required(),table:VE.optional(),hash_attribute:VE.optional(),subscribe:mX.required(),publish:mX.required()}).min(1).required()});return bNe.validateBySchema(e,t)}o(INe,"updateRemoteSourceValidator")});var KE=D((H$e,gX)=>{"use strict";var zM=class{static{o(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};gX.exports=zM});var RX=D((G$e,yX)=>{"use strict";var wNe=_X(),Ra=j(),jM=pt(),NNe=(H(),M(Y)),QM=qs(),Su=Ft(),SX=mh(),CNe=Zu(),{Node:ONe,NodeSubscription:TX}=lc(),JM=KE(),XM=oe(),PNe=ae(),{cloneDeep:LNe}=require("lodash"),{broadcast:DNe}=Je();yX.exports=MNe;async function MNe(e){try{let t=wNe(e);if(t)return Ra.error(`Validation error in updateRemoteSource: ${t.message}`),new JM(jM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],a=LNe(await QM.getNodeRecord(n)),c=!XM.isEmptyOrZeroLength(a);a=c?a[0]:a,c&&Ra.trace(`Existing record found for ${n}, updating records subscriptions`);for(let u=0,d=r.length;u<d;u++){let f=r[u],m=f.schema,p=f.table;if(!XM.doesSchemaExist(m)){Ra.trace(`updateRemoteSource creating schema: ${m}`);try{await SX.createSchema({operation:"create_schema",schema:m})}catch(h){Ra.error(h)}}if(p&&!XM.doesTableExist(m,p)){let h=new CNe(m,p,f.hash_attribute);f.attributes&&(h.attributes=f.attributes),Ra.trace(`updateRemoteSource creating table: ${p} in schema: ${m} with attributes: ${JSON.stringify(f.attributes)}`);try{await SX.createTable(h)}catch(E){Ra.error(E)}}if(Ra.trace(`Creating local stream for ${m}.${p}`),await Su.createLocalTableStream(m,p),c?(await Su.updateConsumerIterator(m,p,n,"stop"),await Su.updateRemoteConsumer(f,n),f.subscribe===!0&&await Su.updateConsumerIterator(m,p,n,"start")):(await Su.updateRemoteConsumer(f,n),f.subscribe===!0?await Su.updateConsumerIterator(m,p,n,"start"):await Su.updateConsumerIterator(m,p,n,"stop")),c){let h=!1;for(let E=0,g=a.subscriptions.length;E<g;E++){let A=a.subscriptions[E];if(A.schema===m&&A.table===p){A.publish=f.publish,A.subscribe=f.subscribe,h=!0;break}}h||a.subscriptions.push(new TX(m,p,f.publish,f.subscribe))}else i.push(new TX(m,p,f.publish,f.subscribe))}c||(a=new ONe(n,i,void 0),Ra.trace(`No record found for ${n}, creating a new one`));let l=Object.create({});return Object.assign(l,a),l.system_info=s,await QM.upsertNodeRecord(l),DNe({type:"nats_update"}),new JM(jM.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${PNe.get(NNe.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await QM.getSystemInfo())}catch(t){Ra.error(t);let r=t.message?t.message:t;return new JM(jM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(MNe,"updateRemoteSource")});var wX=D((V$e,IX)=>{"use strict";var bX=require("joi"),{string:AX}=bX.types(),vNe=(H(),M(Y)),UNe=at();IX.exports=xNe;function xNe(e){let t=bX.object({operation:AX.valid(vNe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:AX.required()});return UNe.validateBySchema(e,t)}o(xNe,"removeRemoteSourceValidator")});var OX=D((Y$e,CX)=>{"use strict";var BNe=wX(),aA=j(),cA=pt(),ZM=(H(),M(Y)),FNe=qs(),kNe=oe(),NX=Ft(),HNe=ae(),lA=KE(),{NodeSubscription:qNe}=lc(),GNe=Xu(),$Ne=Va(),{broadcast:VNe}=Je(),KNe=HNe.get(ZM.CONFIG_PARAMS.CLUSTERING_NODENAME);CX.exports=YNe;async function YNe(e){try{let t=BNe(e);if(t)return aA.error(`Validation error in removeRemoteSource: ${t.message}`),new lA(cA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await FNe.getNodeRecord(r);if(kNe.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return aA.error(i),new lA(cA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,a=n.subscriptions.length;i<a;i++){let c=n.subscriptions[i];aA.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let l=new qNe(c.schema,c.table,!1,!1);await NX.updateConsumerIterator(c.schema,c.table,r,"stop"),await NX.updateRemoteConsumer(l,r)}let s=new GNe(ZM.SYSTEM_SCHEMA_NAME,ZM.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await $Ne.deleteRecord(s),VNe({type:"nats_update"}),new lA(cA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${KNe} successfully removed node '${r}'.`)}catch(t){aA.error(t);let r=t.message?t.message:t;return new lA(cA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(YNe,"removeRemoteSource")});var MX=D((z$e,DX)=>{"use strict";var uA=j(),YE=(H(),M(Y)),PX=pt(),ev=ae(),WNe=oe(),LX=KE(),zNe=qs(),jNe=Hp(),QNe=ln();DX.exports=JNe;async function JNe(e){try{uA.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=WNe.ms_to_time(t),n=new XNe(ev.get(YE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),ev.get(YE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??ev.get(YE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await zNe.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new jNe(YE.SYSTEM_SCHEMA_NAME,YE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await QNe.update(i)}catch(s){uA.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return uA.trace("getRemoteSourceConfig response:",n),new LX(PX.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){uA.error(t);let r=t.message?t.message:t;return new LX(PX.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(JNe,"getRemoteSourceConfig");function XNe(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}o(XNe,"ConfigResponseObject")});var BX=D((Q$e,xX)=>{"use strict";var vX=ae();vX.initSync();var UX=Ft(),WE=j(),Vf=(H(),M(Y)),tv=pt(),ZNe=RX(),eCe=OX(),tCe=MX(),rCe=KE(),{encode:nCe,decode:sCe}=require("msgpackr"),iCe=mi(),oCe=Za(),aCe=require("util"),cCe=(H(),M(Y)),{isMainThread:lCe,parentPort:uCe}=require("worker_threads");Je();var dCe=aCe.promisify(iCe.setSchemaDataToGlobal),rv=vX.get(Vf.CONFIG_PARAMS.CLUSTERING_NODENAME);xX.exports=fCe;async function fCe(){try{WE.notify("Starting reply service."),await dCe();let e=await UX.getConnection(),t=`${rv}.__request__`,r=e.subscribe(t,{queue:rv});await mCe(r)}catch(e){WE.error(e)}}o(fCe,"initialize");async function mCe(e){for await(let t of e){let r=sCe(t.data),n;switch(r.operation){case Vf.OPERATIONS_ENUM.ADD_NODE:case Vf.OPERATIONS_ENUM.UPDATE_NODE:n=await ZNe(r);break;case Vf.OPERATIONS_ENUM.REMOVE_NODE:n=await eCe(r);break;case Vf.OPERATIONS_ENUM.CLUSTER_STATUS:n=await tCe(r);break;case Vf.OPERATIONS_ENUM.DESCRIBE_ALL:n=await pCe();break;default:let s=`node '${rv}' reply service received unrecognized request operation`;WE.error(s),n=new rCe(tv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}WE.trace(n),t.respond(nCe(n))}}o(mCe,"handleRequest");async function pCe(){try{return{status:tv.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await oCe.describeAll({bypass_auth:!0})}}catch(e){return WE.error(e),{status:tv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}o(pCe,"getRemoteDescribeAll");lCe||uCe.on("message",async e=>{let{type:t}=e;t===cCe.ITC_EVENT_TYPES.SHUTDOWN&&UX.closeConnection()})});var hCe=BX();(async()=>{try{await hCe()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|
|
137
|
+
`}`;c?(c.length<tX?c.push(E):c.length===tX&&c.push(`Maximum log buffer rate reached, logs will be throttled
|
|
138
|
+
`),$f&&(clearTimeout(a),f())):$f||l<performance.now()+rX?f(E):(l=Math.min(l,performance.now()+rX),c=[E],a=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Sa.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{Sa.closeSync(s)}catch{}s=null,r&&(eA=null)}function p(h){if(!s){try{s=Sa.openSync(e,"a"),r&&(eA=s)}catch(E){if(E.code==="ENOENT"&&!h)return Sa.mkdirpSync(kE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},eNe).unref()}}}o(nX,"getFileLogger");function iNe(...e){Lt.info(...e)}o(iNe,"info");function oNe(...e){Lt.trace(...e)}o(oNe,"trace");function zM(...e){Lt.error(...e)}o(zM,"error");function aNe(...e){Lt.debug(...e)}o(aNe,"debug");function cNe(...e){Lt.notify(...e)}o(cNe,"notify");function lNe(...e){Lt.fatal(...e)}o(lNe,"fatal");function uNe(...e){Lt.warn(...e)}o(uNe,"warn");function dNe(e,t,r,...n){WM=r.service_name;try{Lt[e](...n)}finally{WM=void 0}}o(dNe,"logCustomLevel");function fNe(){let e;try{e=jwe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ta(e,$r.HDB_HOME_DIR_NAME,$r.BOOT_PROPS_FILE_NAME);return Sa.existsSync(t)||(t=Ta(jM,"utility/hdb_boot_properties.file")),t}o(fNe,"getPropsFilePath");function mNe(e){try{if(e.includes("config/settings.js")){let l=oX(e);return{level:l.get($r.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:kE.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=iX.parseDocument(Sa.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===$r.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(mNe,"getLogConfig");function pNe(){try{let e=iX.parseDocument(Sa.readFileSync(Zwe,"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(pNe,"getDefaultConfig");function hNe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(hNe,"errorToString");function ENe(e){Lt=e}o(ENe,"setMainLogger");function uX(){try{Sa.closeSync(eA)}catch{}eA=null}o(uX,"closeLogFile");function _Ne(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(_Ne,"AuthAuditLog");var{RootConfigWatcher:gNe}=(J3(),D(Q3))});var ae=M((hX,EX)=>{"use strict";var QM=require("fs-extra"),gu=require("path"),dX=require("os"),SNe=require("properties-reader"),$E=j(),GE=oe(),He=(H(),D(Y)),iA=bt(),TNe="Error initializing environment manager",oA="BOOT_PROPS_FILE_PATH",fX=!1,yNe={[He.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[He.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ya={};Object.assign(hX,EX.exports={BOOT_PROPS_FILE_PATH:oA,getHdbBasePath:RNe,setHdbBasePath:ANe,get:mX,initSync:INe,setProperty:rt,initTestEnvironment:NNe,setCloneVar:wNe});function RNe(){return ya[He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(RNe,"getHdbBasePath");function ANe(e){ya[He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(ANe,"setHdbBasePath");function mX(e){let t=iA.getConfigValue(e);return t===void 0?ya[e]:t}o(mX,"get");function rt(e,t){yNe[e]&&(ya[e]=t),iA.updateConfigObject(e,t)}o(rt,"setProperty");function bNe(){let e;try{e=GE.getPropsFilePath(),QM.accessSync(e,QM.constants.F_OK|QM.constants.R_OK),fX=!0;let t=SNe(e);return ya[He.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(He.HDB_SETTINGS_NAMES.INSTALL_USER),ya[He.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(He.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ya[oA]=e,!0}catch{return $E.trace(`Environment manager found no properties file at ${e}`),!1}}o(bNe,"doesPropFileExist");function INe(e=!1){try{((fX||bNe()||GE.noBootFile())&&!pX||e)&&(iA.initConfig(e),ya[He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=iA.getConfigValue(He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){$E.error(TNe),$E.error(t),console.error(t),process.exit(1)}}o(INe,"initSync");var pX=!1;function wNe(e){pX=e}o(wNe,"setCloneVar");function NNe(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=gu.join(__dirname,"../../","unitTests");ya[oA]=gu.join(l,"hdb_boot_properties.file"),rt(He.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,gu.join(l,"settings.test")),rt(He.HDB_SETTINGS_NAMES.INSTALL_USER,dX.userInfo()?dX.userInfo().username:void 0),rt(He.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),rt(He.HDB_SETTINGS_NAMES.LOG_PATH_KEY,gu.join(l,"envDir","log")),rt(He.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),rt(He.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),rt(He.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),rt(He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,gu.join(l,"envDir")),rt(He.CONFIG_PARAMS.STORAGE_PATH,gu.join(l,"envDir")),s&&(rt(He.CONFIG_PARAMS.HTTP_SECUREPORT,mX(He.CONFIG_PARAMS.HTTP_PORT)),rt(He.CONFIG_PARAMS.HTTP_PORT,null)),rt(He.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),rt(He.CONFIG_PARAMS.HTTP_PORT,9926),rt(He.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),rt(He.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),rt(He.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,GE.isEmpty(i)?!1:i),rt(He.CONFIG_PARAMS.HTTP_CORS,GE.isEmpty(i)?!1:i),rt(He.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),rt(He.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),rt(He.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),rt(He.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),rt(He.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,gu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),rt(He.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,GE.isEmpty(c)?!1:c),a&&(rt("CORS_ACCESSLIST",a),rt(He.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(rt(He.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),rt(He.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(rt(He.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),rt(He.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(rt(He.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),rt(He.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${oA}. Please check your boot props and settings files`;$E.fatal(r),$E.error(t)}}o(NNe,"initTestEnvironment")});var yX=M((V$e,TX)=>{"use strict";var SX=require("joi"),{string:VE,boolean:_X,array:CNe}=SX.types(),gX=(H(),D(Y)),ONe=at();TX.exports=PNe;function PNe(e){let t=SX.object({operation:VE.valid(gX.OPERATIONS_ENUM.ADD_NODE,gX.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:VE.required(),subscriptions:CNe.items({schema:VE.required(),table:VE.optional(),hash_attribute:VE.optional(),subscribe:_X.required(),publish:_X.required()}).min(1).required()});return ONe.validateBySchema(e,t)}o(PNe,"updateRemoteSourceValidator")});var KE=M((Y$e,RX)=>{"use strict";var JM=class{static{o(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};RX.exports=JM});var wX=M((z$e,IX)=>{"use strict";var LNe=yX(),Ra=j(),XM=pt(),DNe=(H(),D(Y)),ZM=qs(),Su=Ft(),AX=mh(),MNe=Zu(),{Node:vNe,NodeSubscription:bX}=lc(),ev=KE(),tv=oe(),UNe=ae(),{cloneDeep:xNe}=require("lodash"),{broadcast:BNe}=Je();IX.exports=FNe;async function FNe(e){try{let t=LNe(e);if(t)return Ra.error(`Validation error in updateRemoteSource: ${t.message}`),new ev(XM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],a=xNe(await ZM.getNodeRecord(n)),c=!tv.isEmptyOrZeroLength(a);a=c?a[0]:a,c&&Ra.trace(`Existing record found for ${n}, updating records subscriptions`);for(let u=0,d=r.length;u<d;u++){let f=r[u],m=f.schema,p=f.table;if(!tv.doesSchemaExist(m)){Ra.trace(`updateRemoteSource creating schema: ${m}`);try{await AX.createSchema({operation:"create_schema",schema:m})}catch(h){Ra.error(h)}}if(p&&!tv.doesTableExist(m,p)){let h=new MNe(m,p,f.hash_attribute);f.attributes&&(h.attributes=f.attributes),Ra.trace(`updateRemoteSource creating table: ${p} in schema: ${m} with attributes: ${JSON.stringify(f.attributes)}`);try{await AX.createTable(h)}catch(E){Ra.error(E)}}if(Ra.trace(`Creating local stream for ${m}.${p}`),await Su.createLocalTableStream(m,p),c?(await Su.updateConsumerIterator(m,p,n,"stop"),await Su.updateRemoteConsumer(f,n),f.subscribe===!0&&await Su.updateConsumerIterator(m,p,n,"start")):(await Su.updateRemoteConsumer(f,n),f.subscribe===!0?await Su.updateConsumerIterator(m,p,n,"start"):await Su.updateConsumerIterator(m,p,n,"stop")),c){let h=!1;for(let E=0,g=a.subscriptions.length;E<g;E++){let A=a.subscriptions[E];if(A.schema===m&&A.table===p){A.publish=f.publish,A.subscribe=f.subscribe,h=!0;break}}h||a.subscriptions.push(new bX(m,p,f.publish,f.subscribe))}else i.push(new bX(m,p,f.publish,f.subscribe))}c||(a=new vNe(n,i,void 0),Ra.trace(`No record found for ${n}, creating a new one`));let l=Object.create({});return Object.assign(l,a),l.system_info=s,await ZM.upsertNodeRecord(l),BNe({type:"nats_update"}),new ev(XM.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${UNe.get(DNe.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await ZM.getSystemInfo())}catch(t){Ra.error(t);let r=t.message?t.message:t;return new ev(XM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(FNe,"updateRemoteSource")});var PX=M((Q$e,OX)=>{"use strict";var CX=require("joi"),{string:NX}=CX.types(),kNe=(H(),D(Y)),HNe=at();OX.exports=qNe;function qNe(e){let t=CX.object({operation:NX.valid(kNe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:NX.required()});return HNe.validateBySchema(e,t)}o(qNe,"removeRemoteSourceValidator")});var MX=M((X$e,DX)=>{"use strict";var GNe=PX(),aA=j(),cA=pt(),rv=(H(),D(Y)),$Ne=qs(),VNe=oe(),LX=Ft(),KNe=ae(),lA=KE(),{NodeSubscription:YNe}=lc(),WNe=Xu(),zNe=Va(),{broadcast:jNe}=Je(),QNe=KNe.get(rv.CONFIG_PARAMS.CLUSTERING_NODENAME);DX.exports=JNe;async function JNe(e){try{let t=GNe(e);if(t)return aA.error(`Validation error in removeRemoteSource: ${t.message}`),new lA(cA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await $Ne.getNodeRecord(r);if(VNe.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return aA.error(i),new lA(cA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,a=n.subscriptions.length;i<a;i++){let c=n.subscriptions[i];aA.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let l=new YNe(c.schema,c.table,!1,!1);await LX.updateConsumerIterator(c.schema,c.table,r,"stop"),await LX.updateRemoteConsumer(l,r)}let s=new WNe(rv.SYSTEM_SCHEMA_NAME,rv.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await zNe.deleteRecord(s),jNe({type:"nats_update"}),new lA(cA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${QNe} successfully removed node '${r}'.`)}catch(t){aA.error(t);let r=t.message?t.message:t;return new lA(cA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(JNe,"removeRemoteSource")});var BX=M((eVe,xX)=>{"use strict";var uA=j(),YE=(H(),D(Y)),vX=pt(),nv=ae(),XNe=oe(),UX=KE(),ZNe=qs(),eCe=Hp(),tCe=ln();xX.exports=rCe;async function rCe(e){try{uA.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=XNe.ms_to_time(t),n=new nCe(nv.get(YE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),nv.get(YE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??nv.get(YE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await ZNe.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new eCe(YE.SYSTEM_SCHEMA_NAME,YE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await tCe.update(i)}catch(s){uA.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return uA.trace("getRemoteSourceConfig response:",n),new UX(vX.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){uA.error(t);let r=t.message?t.message:t;return new UX(vX.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(rCe,"getRemoteSourceConfig");function nCe(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}o(nCe,"ConfigResponseObject")});var qX=M((rVe,HX)=>{"use strict";var FX=ae();FX.initSync();var kX=Ft(),WE=j(),Vf=(H(),D(Y)),sv=pt(),sCe=wX(),iCe=MX(),oCe=BX(),aCe=KE(),{encode:cCe,decode:lCe}=require("msgpackr"),uCe=mi(),dCe=Za(),fCe=require("util"),mCe=(H(),D(Y)),{isMainThread:pCe,parentPort:hCe}=require("worker_threads");Je();var ECe=fCe.promisify(uCe.setSchemaDataToGlobal),iv=FX.get(Vf.CONFIG_PARAMS.CLUSTERING_NODENAME);HX.exports=_Ce;async function _Ce(){try{WE.notify("Starting reply service."),await ECe();let e=await kX.getConnection(),t=`${iv}.__request__`,r=e.subscribe(t,{queue:iv});await gCe(r)}catch(e){WE.error(e)}}o(_Ce,"initialize");async function gCe(e){for await(let t of e){let r=lCe(t.data),n;switch(r.operation){case Vf.OPERATIONS_ENUM.ADD_NODE:case Vf.OPERATIONS_ENUM.UPDATE_NODE:n=await sCe(r);break;case Vf.OPERATIONS_ENUM.REMOVE_NODE:n=await iCe(r);break;case Vf.OPERATIONS_ENUM.CLUSTER_STATUS:n=await oCe(r);break;case Vf.OPERATIONS_ENUM.DESCRIBE_ALL:n=await SCe();break;default:let s=`node '${iv}' reply service received unrecognized request operation`;WE.error(s),n=new aCe(sv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}WE.trace(n),t.respond(cCe(n))}}o(gCe,"handleRequest");async function SCe(){try{return{status:sv.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await dCe.describeAll({bypass_auth:!0})}}catch(e){return WE.error(e),{status:sv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}o(SCe,"getRemoteDescribeAll");pCe||hCe.on("message",async e=>{let{type:t}=e;t===mCe.ITC_EVENT_TYPES.SHUTDOWN&&kX.closeConnection()})});var TCe=qX();(async()=>{try{await TCe()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|